Changeset - r12239:4ede50b8e95b
[Not reviewed]
master
0 15 2
smatz - 15 years ago 2009-06-26 13:44:14
smatz@openttd.org
(svn r16664) -Codechange: move house-related stuff from town.h and town_type.h to separate files
17 files changed with 184 insertions and 138 deletions:
0 comments (0 inline, 0 general)
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -1061,12 +1061,20 @@
 
			</File>
 
			<File
 
				RelativePath=".\..\src\highscore.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\house.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\house_type.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\industry.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\industry_type.h"
 
				>
projects/openttd_vs90.vcproj
Show inline comments
 
@@ -1058,12 +1058,20 @@
 
			</File>
 
			<File
 
				RelativePath=".\..\src\highscore.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\house.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\house_type.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\industry.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\industry_type.h"
 
				>
source.list
Show inline comments
 
@@ -191,12 +191,14 @@ gfxinit.h
 
group.h
 
group_gui.h
 
group_type.h
 
gui.h
 
heightmap.h
 
highscore.h
 
house.h
 
house_type.h
 
industry.h
 
industry_type.h
 
ini_type.h
 
landscape.h
 
landscape_type.h
 
livery.h
src/house.h
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file house.h definition of HouseSpec and accessors */
 

	
 
#ifndef HOUSE_H
 
#define HOUSE_H
 

	
 
#include "strings_type.h"
 
#include "cargo_type.h"
 
#include "economy_type.h"
 
#include "date_type.h"
 
#include "house_type.h"
 

	
 
/** Simple value that indicates the house has reached the final stage of
 
 * construction. */
 
static const byte TOWN_HOUSE_COMPLETED = 3;
 

	
 
enum {
 
	HOUSE_NO_CLASS   = 0,
 
	NEW_HOUSE_OFFSET = 110,
 
	HOUSE_MAX        = 512,
 
	INVALID_HOUSE_ID = 0xFFFF,
 

	
 
	/* There can only be as many classes as there are new houses, plus one for
 
	 * NO_CLASS, as the original houses don't have classes. */
 
	HOUSE_CLASS_MAX  = HOUSE_MAX - NEW_HOUSE_OFFSET + 1,
 
};
 

	
 
enum BuildingFlags {
 
	TILE_NO_FLAG         =       0,
 
	TILE_SIZE_1x1        = 1U << 0,
 
	TILE_NOT_SLOPED      = 1U << 1,
 
	TILE_SIZE_2x1        = 1U << 2,
 
	TILE_SIZE_1x2        = 1U << 3,
 
	TILE_SIZE_2x2        = 1U << 4,
 
	BUILDING_IS_ANIMATED = 1U << 5,
 
	BUILDING_IS_CHURCH   = 1U << 6,
 
	BUILDING_IS_STADIUM  = 1U << 7,
 
	BUILDING_HAS_1_TILE  = TILE_SIZE_1x1 | TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
 
	BUILDING_HAS_2_TILES = TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
 
	BUILDING_2_TILES_X   = TILE_SIZE_2x1 | TILE_SIZE_2x2,
 
	BUILDING_2_TILES_Y   = TILE_SIZE_1x2 | TILE_SIZE_2x2,
 
	BUILDING_HAS_4_TILES = TILE_SIZE_2x2,
 
};
 
DECLARE_ENUM_AS_BIT_SET(BuildingFlags)
 

	
 
enum HouseZonesBits {
 
	HZB_BEGIN     = 0,
 
	HZB_TOWN_EDGE = 0,
 
	HZB_TOWN_OUTSKIRT,
 
	HZB_TOWN_OUTER_SUBURB,
 
	HZB_TOWN_INNER_SUBURB,
 
	HZB_TOWN_CENTRE,
 
	HZB_END,
 
};
 
assert_compile(HZB_END == 5);
 

	
 
DECLARE_POSTFIX_INCREMENT(HouseZonesBits)
 

	
 
enum HouseZones {                  ///< Bit  Value       Meaning
 
	HZ_NOZNS             = 0x0000,  ///<       0          This is just to get rid of zeros, meaning none
 
	HZ_ZON1              = 1U << HZB_TOWN_EDGE,    ///< 0..4 1,2,4,8,10  which town zones the building can be built in, Zone1 been the further suburb
 
	HZ_ZON2              = 1U << HZB_TOWN_OUTSKIRT,
 
	HZ_ZON3              = 1U << HZB_TOWN_OUTER_SUBURB,
 
	HZ_ZON4              = 1U << HZB_TOWN_INNER_SUBURB,
 
	HZ_ZON5              = 1U << HZB_TOWN_CENTRE,  ///<  center of town
 
	HZ_ZONALL            = 0x001F,  ///<       1F         This is just to englobe all above types at once
 
	HZ_SUBARTC_ABOVE     = 0x0800,  ///< 11    800        can appear in sub-arctic climate above the snow line
 
	HZ_TEMP              = 0x1000,  ///< 12   1000        can appear in temperate climate
 
	HZ_SUBARTC_BELOW     = 0x2000,  ///< 13   2000        can appear in sub-arctic climate below the snow line
 
	HZ_SUBTROPIC         = 0x4000,  ///< 14   4000        can appear in subtropical climate
 
	HZ_TOYLND            = 0x8000   ///< 15   8000        can appear in toyland climate
 
};
 
DECLARE_ENUM_AS_BIT_SET(HouseZones)
 

	
 
enum HouseExtraFlags {
 
	NO_EXTRA_FLAG            =       0,
 
	BUILDING_IS_HISTORICAL   = 1U << 0,  ///< this house will only appear during town generation in random games, thus the historical
 
	BUILDING_IS_PROTECTED    = 1U << 1,  ///< towns and AI will not remove this house, while human players will be able to
 
	SYNCHRONISED_CALLBACK_1B = 1U << 2,  ///< synchronized callback 1B will be performed, on multi tile houses
 
	CALLBACK_1A_RANDOM_BITS  = 1U << 3,  ///< callback 1A needs random bits
 
};
 

	
 
DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags)
 

	
 
struct HouseSpec {
 
	/* Standard properties */
 
	Year min_year;                     ///< introduction year of the house
 
	Year max_year;                     ///< last year it can be built
 
	byte population;                   ///< population (Zero on other tiles in multi tile house.)
 
	byte removal_cost;                 ///< cost multiplier for removing it
 
	StringID building_name;            ///< building name
 
	uint16 remove_rating_decrease;     ///< rating decrease if removed
 
	byte mail_generation;              ///< mail generation multiplier (tile based, as the acceptances below)
 
	byte cargo_acceptance[3];          ///< acceptance level for the cargo slots
 
	CargoID accepts_cargo[3];          ///< 3 input cargo slots
 
	BuildingFlags building_flags;      ///< some flags that describe the house (size, stadium etc...)
 
	HouseZones building_availability;  ///< where can it be built (climates, zones)
 
	bool enabled;                      ///< the house is available to build (true by default, but can be disabled by newgrf)
 

	
 
	/* NewHouses properties */
 
	HouseID substitute_id;             ///< which original house this one is based on
 
	struct SpriteGroup *spritegroup;   ///< pointer to the different sprites of the house
 
	HouseID override;                  ///< which house this one replaces
 
	uint16 callback_mask;              ///< House callback flags
 
	byte random_colour[4];             ///< 4 "random" colours
 
	byte probability;                  ///< Relative probability of appearing (16 is the standard value)
 
	HouseExtraFlags extra_flags;       ///< some more flags
 
	HouseClassID class_id;             ///< defines the class this house has (grf file based) @See HouseGetVariable, prop 0x44
 
	byte animation_frames;             ///< number of animation frames
 
	byte animation_speed;              ///< amount of time between each of those frames
 
	byte processing_time;              ///< Periodic refresh multiplier
 
	byte minimum_life;                 ///< The minimum number of years this house will survive before the town rebuilds it
 

	
 
	/* grf file related properties*/
 
	uint8 local_id;                    ///< id defined by the grf file for this house
 
	const struct GRFFile *grffile;     ///< grf file that introduced this house
 

	
 
	/**
 
	 * Get the cost for removing this house
 
	 * @return the cost (inflation corrected etc)
 
	 */
 
	Money GetRemovalCost() const;
 

	
 
};
 

	
 
extern HouseSpec _house_specs[];
 

	
 
static inline HouseSpec *GetHouseSpecs(HouseID house_id)
 
{
 
	assert(house_id < HOUSE_MAX);
 
	return &_house_specs[house_id];
 
}
 

	
 
#endif /* HOUSE_H */
src/house_type.h
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file house_type.h declaration of basic house types and enums */
 

	
 
#ifndef HOUSE_TYPE_H
 
#define HOUSE_TYPE_H
 

	
 
typedef uint16 HouseID;
 
typedef uint16 HouseClassID;
 

	
 
struct HouseSpec;
 

	
 
#endif /* HOUSE_TYPE_H */
src/newgrf.h
Show inline comments
 
@@ -8,12 +8,13 @@
 
#include "town_type.h"
 
#include "newgrf_config.h"
 
#include "cargotype.h"
 
#include "industry_type.h"
 
#include "station_type.h"
 
#include "rail_type.h"
 
#include "house_type.h"
 

	
 
enum GrfLoadingStage {
 
	GLS_FILESCAN,
 
	GLS_SAFETYSCAN,
 
	GLS_LABELSCAN,
 
	GLS_INIT,
src/newgrf_house.cpp
Show inline comments
 
@@ -18,12 +18,13 @@
 
#include "newgrf_commons.h"
 
#include "transparency.h"
 
#include "functions.h"
 
#include "company_func.h"
 
#include "animated_tile_func.h"
 
#include "company_base.h"
 
#include "town.h"
 

	
 
static BuildingCounts<uint32> _building_counts;
 
static HouseClassMapping _class_mapping[HOUSE_CLASS_MAX];
 

	
 
HouseOverrideManager _house_mngr(NEW_HOUSE_OFFSET, HOUSE_MAX, INVALID_HOUSE_ID);
 

	
src/newgrf_house.h
Show inline comments
 
@@ -5,12 +5,13 @@
 
#ifndef NEWGRF_HOUSE_H
 
#define NEWGRF_HOUSE_H
 

	
 
#include "town_type.h"
 
#include "newgrf_callbacks.h"
 
#include "tile_cmd.h"
 
#include "house_type.h"
 

	
 
/**
 
 * Makes class IDs unique to each GRF file.
 
 * Houses can be assigned class IDs which are only comparable within the GRF
 
 * file they were defined in. This mapping ensures that if two houses have the
 
 * same class as defined by the GRF file, the classes are different within the
src/newgrf_spritegroup.h
Show inline comments
 
@@ -9,12 +9,13 @@
 
#include "industry_type.h"
 
#include "core/bitmath_func.hpp"
 
#include "gfx_type.h"
 
#include "engine_type.h"
 
#include "tile_type.h"
 
#include "core/pool_type.hpp"
 
#include "house_type.h"
 

	
 
#include "newgrf_cargo.h"
 
#include "newgrf_callbacks.h"
 
#include "newgrf_generic.h"
 
#include "newgrf_storage.h"
 

	
src/rail_cmd.cpp
Show inline comments
 
@@ -25,12 +25,13 @@
 
#include "vehicle_func.h"
 
#include "sound_func.h"
 
#include "tunnelbridge.h"
 
#include "station_map.h"
 
#include "functions.h"
 
#include "elrail_func.h"
 
#include "town.h"
 

	
 
#include "table/strings.h"
 
#include "table/railtypes.h"
 
#include "table/track_land.h"
 

	
 
RailtypeInfo _railtypes[RAILTYPE_END];
src/road_cmd.cpp
Show inline comments
 
@@ -24,12 +24,13 @@
 
#include "tunnelbridge.h"
 
#include "cheat_type.h"
 
#include "functions.h"
 
#include "effectvehicle_func.h"
 
#include "elrail_func.h"
 
#include "roadveh.h"
 
#include "town.h"
 

	
 
#include "table/sprites.h"
 
#include "table/strings.h"
 

	
 
/**
 
 * Verify whether a road vehicle is available.
src/saveload/afterload.cpp
Show inline comments
 
@@ -25,12 +25,13 @@
 
#include "../aircraft.h"
 
#include "../unmovable_map.h"
 
#include "../tree_map.h"
 
#include "../company_func.h"
 
#include "../road_cmd.h"
 
#include "../ai/ai.hpp"
 
#include "../town.h"
 

	
 
#include "table/strings.h"
 

	
 
#include "saveload_internal.h"
 

	
 
#include <signal.h>
src/saveload/town_sl.cpp
Show inline comments
 
@@ -3,13 +3,13 @@
 
/** @file town_sl.cpp Code handling saving and loading of towns and houses */
 

	
 
#include "../stdafx.h"
 
#include "../newgrf_house.h"
 
#include "../newgrf_commons.h"
 
#include "../variables.h"
 
#include "../town_map.h"
 
#include "../town.h"
 

	
 
#include "saveload.h"
 

	
 
/**
 
 * Check and update town and house values.
 
 *
src/town.h
Show inline comments
 
@@ -16,93 +16,25 @@
 
#include "settings_type.h"
 
#include "strings_type.h"
 
#include "viewport_type.h"
 
#include "economy_type.h"
 
#include "map_type.h"
 
#include "command_type.h"
 

	
 
enum {
 
	HOUSE_NO_CLASS   = 0,
 
	NEW_HOUSE_OFFSET = 110,
 
	HOUSE_MAX        = 512,
 
	INVALID_TOWN     = 0xFFFF,
 
	INVALID_HOUSE_ID = 0xFFFF,
 

	
 
	/* There can only be as many classes as there are new houses, plus one for
 
	 * NO_CLASS, as the original houses don't have classes. */
 
	HOUSE_CLASS_MAX  = HOUSE_MAX - NEW_HOUSE_OFFSET + 1,
 
};
 

	
 
enum BuildingFlags {
 
	TILE_NO_FLAG         =       0,
 
	TILE_SIZE_1x1        = 1U << 0,
 
	TILE_NOT_SLOPED      = 1U << 1,
 
	TILE_SIZE_2x1        = 1U << 2,
 
	TILE_SIZE_1x2        = 1U << 3,
 
	TILE_SIZE_2x2        = 1U << 4,
 
	BUILDING_IS_ANIMATED = 1U << 5,
 
	BUILDING_IS_CHURCH   = 1U << 6,
 
	BUILDING_IS_STADIUM  = 1U << 7,
 
	BUILDING_HAS_1_TILE  = TILE_SIZE_1x1 | TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
 
	BUILDING_HAS_2_TILES = TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
 
	BUILDING_2_TILES_X   = TILE_SIZE_2x1 | TILE_SIZE_2x2,
 
	BUILDING_2_TILES_Y   = TILE_SIZE_1x2 | TILE_SIZE_2x2,
 
	BUILDING_HAS_4_TILES = TILE_SIZE_2x2,
 
};
 

	
 
DECLARE_ENUM_AS_BIT_SET(BuildingFlags)
 

	
 
enum HouseZonesBits {
 
	HZB_BEGIN     = 0,
 
	HZB_TOWN_EDGE = 0,
 
	HZB_TOWN_OUTSKIRT,
 
	HZB_TOWN_OUTER_SUBURB,
 
	HZB_TOWN_INNER_SUBURB,
 
	HZB_TOWN_CENTRE,
 
	HZB_END,
 
};
 
assert_compile(HZB_END == 5);
 

	
 
DECLARE_POSTFIX_INCREMENT(HouseZonesBits)
 

	
 
enum HouseZones {                  ///< Bit  Value       Meaning
 
	HZ_NOZNS             = 0x0000,  ///<       0          This is just to get rid of zeros, meaning none
 
	HZ_ZON1              = 1U << HZB_TOWN_EDGE,    ///< 0..4 1,2,4,8,10  which town zones the building can be built in, Zone1 been the further suburb
 
	HZ_ZON2              = 1U << HZB_TOWN_OUTSKIRT,
 
	HZ_ZON3              = 1U << HZB_TOWN_OUTER_SUBURB,
 
	HZ_ZON4              = 1U << HZB_TOWN_INNER_SUBURB,
 
	HZ_ZON5              = 1U << HZB_TOWN_CENTRE,  ///<  center of town
 
	HZ_ZONALL            = 0x001F,  ///<       1F         This is just to englobe all above types at once
 
	HZ_SUBARTC_ABOVE     = 0x0800,  ///< 11    800        can appear in sub-arctic climate above the snow line
 
	HZ_TEMP              = 0x1000,  ///< 12   1000        can appear in temperate climate
 
	HZ_SUBARTC_BELOW     = 0x2000,  ///< 13   2000        can appear in sub-arctic climate below the snow line
 
	HZ_SUBTROPIC         = 0x4000,  ///< 14   4000        can appear in subtropical climate
 
	HZ_TOYLND            = 0x8000   ///< 15   8000        can appear in toyland climate
 
};
 

	
 
DECLARE_ENUM_AS_BIT_SET(HouseZones)
 

	
 
enum HouseExtraFlags {
 
	NO_EXTRA_FLAG            =       0,
 
	BUILDING_IS_HISTORICAL   = 1U << 0,  ///< this house will only appear during town generation in random games, thus the historical
 
	BUILDING_IS_PROTECTED    = 1U << 1,  ///< towns and AI will not remove this house, while human players will be able to
 
	SYNCHRONISED_CALLBACK_1B = 1U << 2,  ///< synchronized callback 1B will be performed, on multi tile houses
 
	CALLBACK_1A_RANDOM_BITS  = 1U << 3,  ///< callback 1A needs random bits
 
};
 

	
 
DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags)
 
#include "town_map.h"
 

	
 
template <typename T>
 
struct BuildingCounts {
 
	T id_count[HOUSE_MAX];
 
	T class_count[HOUSE_CLASS_MAX];
 
};
 

	
 
static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY  = 4; ///< value for custom town number in difficulty settings
 
static const uint CUSTOM_TOWN_MAX_NUMBER = 5000;  ///< this is the maximum number of towns a user can specify in customisation
 

	
 
static const uint INVALID_TOWN = 0xFFFF;
 

	
 
typedef Pool<Town, TownID, 64, 64000> TownPool;
 
extern TownPool _town_pool;
 

	
 
struct Town : TownPool::PoolItem<&_town_pool> {
 
	TileIndex xy;
 

	
 
@@ -202,54 +134,16 @@ struct Town : TownPool::PoolItem<&_town_
 
		if (this->population == 0) return 0; // no population? no noise
 

	
 
		return ((this->population / _settings_game.economy.town_noise_population[_settings_game.difficulty.town_council_tolerance]) + 3);
 
	}
 
};
 

	
 
struct HouseSpec {
 
	/* Standard properties */
 
	Year min_year;                     ///< introduction year of the house
 
	Year max_year;                     ///< last year it can be built
 
	byte population;                   ///< population (Zero on other tiles in multi tile house.)
 
	byte removal_cost;                 ///< cost multiplier for removing it
 
	StringID building_name;            ///< building name
 
	uint16 remove_rating_decrease;     ///< rating decrease if removed
 
	byte mail_generation;              ///< mail generation multiplier (tile based, as the acceptances below)
 
	byte cargo_acceptance[3];          ///< acceptance level for the cargo slots
 
	CargoID accepts_cargo[3];          ///< 3 input cargo slots
 
	BuildingFlags building_flags;      ///< some flags that describe the house (size, stadium etc...)
 
	HouseZones building_availability;  ///< where can it be built (climates, zones)
 
	bool enabled;                      ///< the house is available to build (true by default, but can be disabled by newgrf)
 

	
 
	/* NewHouses properties */
 
	HouseID substitute_id;             ///< which original house this one is based on
 
	struct SpriteGroup *spritegroup;   ///< pointer to the different sprites of the house
 
	HouseID override;                  ///< which house this one replaces
 
	uint16 callback_mask;              ///< House callback flags
 
	byte random_colour[4];             ///< 4 "random" colours
 
	byte probability;                  ///< Relative probability of appearing (16 is the standard value)
 
	HouseExtraFlags extra_flags;       ///< some more flags
 
	HouseClassID class_id;             ///< defines the class this house has (grf file based) @See HouseGetVariable, prop 0x44
 
	byte animation_frames;             ///< number of animation frames
 
	byte animation_speed;              ///< amount of time between each of those frames
 
	byte processing_time;              ///< Periodic refresh multiplier
 
	byte minimum_life;                 ///< The minimum number of years this house will survive before the town rebuilds it
 

	
 
	/* grf file related properties*/
 
	uint8 local_id;                    ///< id defined by the grf file for this house
 
	const struct GRFFile *grffile;     ///< grf file that introduced this house
 

	
 
	/**
 
	 * Get the cost for removing this house
 
	 * @return the cost (inflation corrected etc)
 
	 */
 
	Money GetRemovalCost() const;
 

	
 
};
 

	
 
extern HouseSpec _house_specs[HOUSE_MAX];
 
static inline Town *GetTownByTile(TileIndex tile)
 
{
 
	return Town::Get(GetTownIndex(tile));
 
}
 

	
 
uint32 GetWorldPopulation();
 

	
 
void UpdateTownVirtCoord(Town *t);
 
void UpdateAllTownVirtCoords();
 
void InitializeTown();
 
@@ -265,16 +159,12 @@ enum TownRatingCheckType {
 

	
 
/** This is the number of ticks between towns being processed for building new
 
 * houses or roads. This value originally came from the size of the town array
 
 * in TTD. */
 
static const byte TOWN_GROWTH_FREQUENCY = 70;
 

	
 
/** Simple value that indicates the house has reached the final stage of
 
 * construction. */
 
static const byte TOWN_HOUSE_COMPLETED = 3;
 

	
 
/** This enum is used in conjonction with town->flags.
 
 * IT simply states what bit is used for.
 
 * It is pretty unrealistic (IMHO) to only have one church/stadium
 
 * per town, NO MATTER the population of it.
 
 * And there are 5 more bits available on flags...
 
 */
 
@@ -283,17 +173,12 @@ enum {
 
	TOWN_HAS_CHURCH     = 1,   ///< There can be only one church by town.
 
	TOWN_HAS_STADIUM    = 2    ///< There can be only one stadium by town.
 
};
 

	
 
bool CheckforTownRating(DoCommandFlag flags, Town *t, TownRatingCheckType type);
 

	
 
static inline HouseSpec *GetHouseSpecs(HouseID house_id)
 
{
 
	assert(house_id < HOUSE_MAX);
 
	return &_house_specs[house_id];
 
}
 

	
 
TileIndexDiff GetHouseNorthPart(HouseID &house);
 

	
 
/**
 
 * Return a random valid town.
 
 */
src/town_cmd.cpp
Show inline comments
 
@@ -40,12 +40,13 @@
 
#include "functions.h"
 
#include "animated_tile_func.h"
 
#include "date_func.h"
 
#include "subsidy_func.h"
 
#include "core/smallmap_type.hpp"
 
#include "core/pool_func.hpp"
 
#include "town.h"
 

	
 
#include "table/strings.h"
 
#include "table/town_land.h"
 

	
 
HouseSpec _house_specs[HOUSE_MAX];
 

	
src/town_map.h
Show inline comments
 
@@ -2,14 +2,15 @@
 

	
 
/** @file town_map.h Accessors for towns */
 

	
 
#ifndef TOWN_MAP_H
 
#define TOWN_MAP_H
 

	
 
#include "town.h"
 
#include "tile_map.h"
 
#include "town_type.h"
 
#include "house.h"
 

	
 
/**
 
 * Get the index of which town this house/street is attached to.
 
 * @param t the tile
 
 * @pre IsTileType(t, MP_HOUSE) or IsTileType(t, MP_ROAD)
 
 * @return TownID
 
@@ -31,22 +32,12 @@ static inline void SetTownIndex(TileInde
 
{
 
	assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_ROAD));
 
	_m[t].m2 = index;
 
}
 

	
 
/**
 
 * Gets the town associated with the house or road tile
 
 * @param t the tile to get the town of
 
 * @return the town
 
 */
 
static inline Town *GetTownByTile(TileIndex t)
 
{
 
	return Town::Get(GetTownIndex(t));
 
}
 

	
 
/**
 
 * Get the type of this house, which is an index into the house spec array
 
 * Since m4 is only a byte and we want to support 512 houses, we use the bit 6
 
 * of m3 as an additional bit to house type.
 
 * @param t the tile
 
 * @pre IsTileType(t, MP_HOUSE)
 
 * @return house type
src/town_type.h
Show inline comments
 
@@ -5,17 +5,13 @@
 
#ifndef TOWN_TYPE_H
 
#define TOWN_TYPE_H
 

	
 
#include "core/enum_type.hpp"
 

	
 
typedef uint16 TownID;
 
typedef uint16 HouseID;
 
typedef uint16 HouseClassID;
 

	
 
struct Town;
 
struct HouseSpec;
 

	
 
/** Supported initial town sizes */
 
enum TownSize {
 
	TS_SMALL,  ///< small town
 
	TS_MEDIUM, ///< medium town
 
	TS_LARGE,  ///< large town
0 comments (0 inline, 0 general)