rubidium@8254: /* $Id$ */ rubidium@8254: rubidium@8254: /** @file player_base.h Definition of stuff that is very close to a player, like the player struct itself. */ rubidium@8254: rubidium@8254: #ifndef PLAYER_BASE_H rubidium@8254: #define PLAYER_BASE_H rubidium@8254: rubidium@8254: #include "road_type.h" rubidium@8254: #include "rail_type.h" rubidium@8254: #include "date_type.h" rubidium@8254: #include "engine.h" rubidium@8254: #include "livery.h" rubidium@8254: #include "autoreplace_type.h" rubidium@8254: #include "economy_type.h" rubidium@8254: #include "tile_type.h" rubidium@8254: rubidium@8254: struct PlayerEconomyEntry { rubidium@8254: Money income; rubidium@8254: Money expenses; rubidium@8254: int32 delivered_cargo; rubidium@8254: int32 performance_history; ///< player score (scale 0-1000) rubidium@8254: Money company_value; rubidium@8254: }; rubidium@8254: rubidium@8254: struct Player { rubidium@8254: uint32 name_2; rubidium@8254: uint16 name_1; peter1138@8258: char *name; rubidium@8254: rubidium@8254: uint16 president_name_1; rubidium@8254: uint32 president_name_2; peter1138@8258: char *president_name; rubidium@8254: rubidium@8254: PlayerFace face; rubidium@8254: rubidium@8254: Money player_money; rubidium@8254: Money current_loan; rubidium@8254: rubidium@8254: byte player_color; rubidium@8254: Livery livery[LS_END]; rubidium@8254: byte player_money_fraction; rubidium@8254: RailTypes avail_railtypes; rubidium@8254: RoadTypes avail_roadtypes; rubidium@8254: byte block_preview; rubidium@8254: PlayerByte index; rubidium@8254: rubidium@8254: uint16 cargo_types; ///< which cargo types were transported the last year rubidium@8254: rubidium@8254: TileIndex location_of_house; rubidium@8254: TileIndex last_build_coordinate; rubidium@8254: rubidium@8254: PlayerByte share_owners[4]; rubidium@8254: rubidium@8254: Year inaugurated_year; rubidium@8254: byte num_valid_stat_ent; rubidium@8254: rubidium@8254: byte quarters_of_bankrupcy; rubidium@8254: byte bankrupt_asked; ///< which players were asked about buying it? rubidium@8254: int16 bankrupt_timeout; rubidium@8254: Money bankrupt_value; rubidium@8254: rubidium@8254: bool is_active; rubidium@8254: bool is_ai; rubidium@8254: rubidium@8254: Money yearly_expenses[3][13]; rubidium@8254: PlayerEconomyEntry cur_economy; rubidium@8254: PlayerEconomyEntry old_economy[24]; rubidium@8254: EngineRenewList engine_renew_list; ///< Defined later rubidium@8254: bool engine_renew; rubidium@8254: bool renew_keep_length; rubidium@8254: int16 engine_renew_months; rubidium@8254: uint32 engine_renew_money; rubidium@8254: uint16 num_engines[TOTAL_NUM_ENGINES]; ///< caches the number of engines of each type the player owns (no need to save this) rubidium@8254: }; rubidium@8254: rubidium@8254: extern Player _players[MAX_PLAYERS]; rubidium@8254: #define FOR_ALL_PLAYERS(p) for (p = _players; p != endof(_players); p++) rubidium@8254: rubidium@8254: static inline byte ActivePlayerCount() rubidium@8254: { rubidium@8254: const Player *p; rubidium@8254: byte count = 0; rubidium@8254: rubidium@8254: FOR_ALL_PLAYERS(p) { rubidium@8254: if (p->is_active) count++; rubidium@8254: } rubidium@8254: rubidium@8254: return count; rubidium@8254: } rubidium@8254: rubidium@8254: static inline Player *GetPlayer(PlayerID i) rubidium@8254: { rubidium@8254: assert(IsInsideBS(i, PLAYER_FIRST, lengthof(_players))); rubidium@8254: return &_players[i]; rubidium@8254: } rubidium@8254: rubidium@8254: Money CalculateCompanyValue(const Player *p); rubidium@8254: rubidium@8254: #endif /* PLAYER_BASE_H */