#ifndef PLAYER_H #define PLAYER_H typedef struct PlayerEconomyEntry { int32 income; int32 expenses; int32 delivered_cargo; int32 performance_history; int32 company_value; } PlayerEconomyEntry; typedef struct AiBuildRec { TileIndex spec_tile; TileIndex use_tile; byte rand_rng; byte cur_building_rule; byte unk6; byte unk7; byte buildcmd_a; byte buildcmd_b; byte direction; byte cargo; } AiBuildRec; typedef struct PlayerAI { byte state; byte tick; // Used to determine how often to move uint16 state_counter; uint16 timeout_counter; byte state_mode; byte banned_tile_count; byte railtype_to_use; byte cargo_type; byte num_wagons; byte build_kind; byte num_build_rec; byte num_loco_to_build; byte num_want_fullload; byte route_type_mask; TileIndex start_tile_a; TileIndex cur_tile_a; byte cur_dir_a; byte start_dir_a; TileIndex start_tile_b; TileIndex cur_tile_b; byte cur_dir_b; byte start_dir_b; Vehicle *cur_veh; /* only used by some states */ AiBuildRec src, dst, mid1, mid2; VehicleID wagon_list[9]; byte order_list_blocks[20]; TileIndex banned_tiles[16]; byte banned_val[16]; } PlayerAI; typedef struct Player { uint32 name_2; uint16 name_1; uint16 president_name_1; uint32 president_name_2; uint32 face; int32 player_money; int32 current_loan; int64 money64; // internal 64-bit version of the money. the 32-bit field will be clamped to plus minus 2 billion byte player_color; byte player_money_fraction; byte max_railtype; byte block_preview; byte index; uint16 cargo_types; /* which cargo types were transported the last year */ TileIndex location_of_house; TileIndex last_build_coordinate; byte share_owners[4]; byte inaugurated_year; byte num_valid_stat_ent; byte quarters_of_bankrupcy; byte bankrupt_asked; // which players were asked about buying it? int16 bankrupt_timeout; int32 bankrupt_value; bool is_active; byte is_ai; PlayerAI ai; int64 yearly_expenses[3][13]; PlayerEconomyEntry cur_economy; PlayerEconomyEntry old_economy[24]; } Player; void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player); void GetNameOfOwner(byte owner, uint tile); uint32 CalculateCompanyValue(Player *p); void InvalidatePlayerWindows(Player *p); void AiDoGameLoop(Player *p); void UpdatePlayerMoney32(Player *p); #define DEREF_PLAYER(i) (&_players[i]) #define FOR_ALL_PLAYERS(p) for(p=_players; p != endof(_players); p++) #define MAX_PLAYERS 8 VARDEF Player _players[MAX_PLAYERS]; #define IS_HUMAN_PLAYER(p) (!DEREF_PLAYER((byte)(p))->is_ai) #define IS_INTERACTIVE_PLAYER(p) (((byte)p) == _local_player) #endif /* PLAYER_H */