Files @ r3303:1bae0f5399a4
Branch filter:

Location: cpp/openttd-patchpack/source/town.h - annotation

bjarni
(svn r4060) -Codechange: [OSX] made the release target (in os/macosx/Makefile) easier to use since it gives the release disk image the right name automatically
it now uses REV instead of RELEASE, which means RELEASE is not needed to be set manaully anymore
it also automatically adds "-jaguar" when making a build aimed at OSX 10.2 (codenamed jaguar)
r2186:5ee653b1b5e1
r2186:5ee653b1b5e1
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r1260:990ce96b0df6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r193:6aa65dc5a4b4
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r193:6aa65dc5a4b4
r193:6aa65dc5a4b4
r0:d63b455452f6
r193:6aa65dc5a4b4
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r2498:8dfa040ed505
r121:ae177290c657
r0:d63b455452f6
r193:6aa65dc5a4b4
r0:d63b455452f6
r1377:61ffe715e00e
r1377:61ffe715e00e
r1377:61ffe715e00e
r1377:61ffe715e00e
r1377:61ffe715e00e
r1377:61ffe715e00e
r1377:61ffe715e00e
r1377:61ffe715e00e
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r4:44fa2d88cb6a
r0:d63b455452f6
r4:44fa2d88cb6a
r193:6aa65dc5a4b4
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r193:6aa65dc5a4b4
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r193:6aa65dc5a4b4
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r820:b2b538ba23ae
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r1093:18f56ef2d029
r0:d63b455452f6
r835:d8d661a0d2ad
r1093:18f56ef2d029
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r1362:b98fde235d9d
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1005:0796061bc2a6
r1019:90da3857ff29
r1005:0796061bc2a6
r1005:0796061bc2a6
r2958:7c0285bafd42
r0:d63b455452f6
r919:57ef81f1ba8e
r0:d63b455452f6
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r1330:62eaa061ec97
r1330:62eaa061ec97
r2436:963efe8b84cc
r1330:62eaa061ec97
r1330:62eaa061ec97
r1330:62eaa061ec97
r1330:62eaa061ec97
r1330:62eaa061ec97
r1260:990ce96b0df6
r1260:990ce96b0df6
r919:57ef81f1ba8e
r919:57ef81f1ba8e
r1260:990ce96b0df6
r919:57ef81f1ba8e
r919:57ef81f1ba8e
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r919:57ef81f1ba8e
r1784:15b805156766
r1784:15b805156766
r1784:15b805156766
r1784:15b805156766
r1784:15b805156766
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r1260:990ce96b0df6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
/* $Id$ */

#ifndef TOWN_H
#define TOWN_H

#include "pool.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)
	PlayerID exclusivity;        // which player has exslusivity
	uint8 exclusive_counter;     // months till the exclusivity expires
	int16 ratings[MAX_PLAYERS];

	// Maximum amount of passengers and mail that can be transported.
	uint32 max_pass;
	uint32 max_mail;
	uint32 new_max_pass;
	uint32 new_max_mail;
	uint32 act_pass;
	uint32 act_mail;
	uint32 new_act_pass;
	uint32 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_water;
	uint16 new_act_food;
	uint16 new_act_water;

	// 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
	uint16 index;

	// NOSAVE: UpdateTownRadius updates this given the house count.
	uint16 radius[5];
};

uint32 GetWorldPopulation(void);

void UpdateTownVirtCoord(Town *t);
void InitializeTown(void);
void ShowTownViewWindow(uint town);
void DeleteTown(Town *t);
void ExpandTown(Town *t);
Town *CreateRandomTown(uint attempts);

enum {
	ROAD_REMOVE = 0,
	UNMOVEABLE_REMOVE = 1,
	TUNNELBRIDGE_REMOVE = 1,
	INDUSTRY_REMOVE = 2
};

enum {
	// These refer to the maximums, so Appalling is -1000 to -400
	// MAXIMUM RATINGS BOUNDARIES
	RATING_MINIMUM 		= -1000,
	RATING_APPALLING 	= -400,
	RATING_VERYPOOR 	= -200,
	RATING_POOR 			= 0,
	RATING_MEDIOCRE		= 200,
	RATING_GOOD				= 400,
	RATING_VERYGOOD		= 600,
	RATING_EXCELLENT	= 800,
	RATING_OUTSTANDING= 1000, 	// OUTSTANDING

	RATING_MAXIMUM = RATING_OUTSTANDING,

	// RATINGS AFFECTING NUMBERS
	RATING_TREE_DOWN_STEP = -35,
	RATING_TREE_MINIMUM = RATING_MINIMUM,
	RATING_TREE_UP_STEP = 7,
	RATING_TREE_MAXIMUM = 220,

	RATING_TUNNEL_BRIDGE_DOWN_STEP = -250,
	RATING_TUNNEL_BRIDGE_MINIMUM = 0,

	RATING_INDUSTRY_DOWN_STEP = -1500,
	RATING_INDUSTRY_MINIMUM = RATING_MINIMUM,

	RATING_ROAD_DOWN_STEP = -50,
	RATING_ROAD_MINIMUM = -100,
	RATING_HOUSE_MINIMUM = RATING_MINIMUM,

	RATING_BRIBE_UP_STEP = 200,
	RATING_BRIBE_MAXIMUM = 800,
	RATING_BRIBE_DOWN_TO = -50 					// XXX SHOULD BE SOMETHING LOWER?
};

bool CheckforTownRating(uint32 flags, Town *t, byte type);

VARDEF uint16 *_town_sort;

extern MemoryPool _town_pool;

/**
 * Check if a Town really exists.
 */
static inline bool IsValidTown(const Town* town)
{
	return town->xy != 0; /* XXX: Replace by INVALID_TILE someday */
}

/**
 * Get the pointer to the town with index 'index'
 */
static inline Town *GetTown(uint index)
{
	return (Town*)GetItemFromPool(&_town_pool, index);
}

/**
 * Get the current size of the TownPool
 */
static inline uint16 GetTownPoolSize(void)
{
	return _town_pool.total_items;
}

static inline bool IsTownIndex(uint index)
{
	return index < GetTownPoolSize();
}

#define FOR_ALL_TOWNS_FROM(t, start) for (t = GetTown(start); t != NULL; t = (t->index + 1 < GetTownPoolSize()) ? GetTown(t->index + 1) : NULL)
#define FOR_ALL_TOWNS(t) FOR_ALL_TOWNS_FROM(t, 0)

VARDEF uint _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 */