town.h
changeset 0 29654efe3188
child 4 cad62d5f9708
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/town.h	Mon Aug 09 17:04:08 2004 +0000
@@ -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 */