diff options
Diffstat (limited to 'town.h')
-rw-r--r-- | town.h | 103 |
1 files changed, 103 insertions, 0 deletions
@@ -0,0 +1,103 @@ +#ifndef TOWN_H +#define TOWN_H + +#include "player.h" + +struct Town { + TileIndex xy; + + // Current population of people and amount of houses. + uint16 num_houses; + uint32 population; + + // Town name + uint16 townnametype; + uint32 townnameparts; + + // NOSAVE: Location of name sign, UpdateTownVirtCoord updates this. + ViewportSign sign; + + // Makes sure we don't build certain house types twice. + byte flags12; + + // Which players have a statue? + byte statues; + + // Sort index in listings + byte sort_index_obsolete; + + // Player ratings as well as a mask that determines which players have a rating. + byte have_ratings; + uint8 unwanted[MAX_PLAYERS]; // how many months companies aren't wanted by towns (bribe) + int16 ratings[MAX_PLAYERS]; + + // Maximum amount of passengers and mail that can be transported. + uint16 max_pass; + uint16 max_mail; + uint16 new_max_pass; + uint16 new_max_mail; + uint16 act_pass; + uint16 act_mail; + uint16 new_act_pass; + uint16 new_act_mail; + + // Amount of passengers that were transported. + byte pct_pass_transported; + byte pct_mail_transported; + + // Amount of food and paper that was transported. Actually a bit mask would be enough. + uint16 act_food; + uint16 act_paper; + uint16 new_act_food; + uint16 new_act_paper; + + // Time until we rebuild a house. + byte time_until_rebuild; + + // When to grow town next time. + byte grow_counter; + byte growth_rate; + + // Fund buildings program in action? + byte fund_buildings_months; + + // Fund road reconstruction in action? + byte road_build_months; + + // Index in town array + byte index; + + // NOSAVE: UpdateTownRadius updates this given the house count. + uint16 radius[5]; +}; + + +void InitializeTown(); +void ShowTownViewWindow(uint town); +void DeleteTown(Town *t); +void ExpandTown(Town *t); +bool GrowTown(Town *t); +Town *CreateRandomTown(); + +enum { + ROAD_REMOVE = 0, + UNMOVEABLE_REMOVE = 1, + TUNNELBRIDGE_REMOVE = 1, + INDUSTRY_REMOVE = 2 +}; + +bool CheckforTownRating(uint tile, uint32 flags, Town *t, byte type); + +#define DEREF_TOWN(i) (&_towns[i]) +#define FOR_ALL_TOWNS(c) for(c=_towns; c != endof(_towns); c++) + +VARDEF Town _towns[70]; +VARDEF int _total_towns; // For the AI: the amount of towns active + +VARDEF bool _town_sort_dirty; +VARDEF byte _town_sort_order; + +VARDEF Town *_cleared_town; +VARDEF int _cleared_town_rating; + +#endif /* TOWN_H */ |