OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

house.h
Go to the documentation of this file.
1 /* $Id: house.h 25839 2013-10-12 16:34:04Z frosch $ */
2
3 /*
4 * This file is part of OpenTTD.
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
8 */
9
12 #ifndef HOUSE_H
13 #define HOUSE_H
14
15 #include "cargo_type.h"
16 #include "date_type.h"
17 #include "house_type.h"
18 #include "newgrf_animation_type.h"
19 #include "newgrf_commons.h"
20
25 static const byte TOWN_HOUSE_COMPLETED = 3;
26
27 static const HouseID NUM_HOUSES_PER_GRF = 255;
28
29 static const uint HOUSE_NO_CLASS = 0;
30 static const HouseID NEW_HOUSE_OFFSET = 110;
31 static const HouseID NUM_HOUSES = 512;
32 static const HouseID INVALID_HOUSE_ID = 0xFFFF;
33
38 static const uint HOUSE_CLASS_MAX = NUM_HOUSES - NEW_HOUSE_OFFSET + 1;
39
40 enum BuildingFlags {
41 TILE_NO_FLAG = 0,
42 TILE_SIZE_1x1 = 1U << 0,
43 TILE_NOT_SLOPED = 1U << 1,
44 TILE_SIZE_2x1 = 1U << 2,
45 TILE_SIZE_1x2 = 1U << 3,
46 TILE_SIZE_2x2 = 1U << 4,
47 BUILDING_IS_ANIMATED = 1U << 5,
48 BUILDING_IS_CHURCH = 1U << 6,
49 BUILDING_IS_STADIUM = 1U << 7,
50 BUILDING_HAS_1_TILE = TILE_SIZE_1x1 | TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
51 BUILDING_HAS_2_TILES = TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
52 BUILDING_2_TILES_X = TILE_SIZE_2x1 | TILE_SIZE_2x2,
53 BUILDING_2_TILES_Y = TILE_SIZE_1x2 | TILE_SIZE_2x2,
54 BUILDING_HAS_4_TILES = TILE_SIZE_2x2,
55 };
56 DECLARE_ENUM_AS_BIT_SET(BuildingFlags)
57
58 enum HouseZonesBits {
59 HZB_BEGIN = 0,
60 HZB_TOWN_EDGE = 0,
61 HZB_TOWN_OUTSKIRT,
62 HZB_TOWN_OUTER_SUBURB,
63 HZB_TOWN_INNER_SUBURB,
64 HZB_TOWN_CENTRE,
65 HZB_END,
66 };
67 assert_compile(HZB_END == 5);
68
69 DECLARE_POSTFIX_INCREMENT(HouseZonesBits)
70
71 enum HouseZones {
72 HZ_NOZNS = 0x0000,
73 HZ_ZON1 = 1U << HZB_TOWN_EDGE,
74 HZ_ZON2 = 1U << HZB_TOWN_OUTSKIRT,
75 HZ_ZON3 = 1U << HZB_TOWN_OUTER_SUBURB,
76 HZ_ZON4 = 1U << HZB_TOWN_INNER_SUBURB,
77 HZ_ZON5 = 1U << HZB_TOWN_CENTRE,
78 HZ_ZONALL = 0x001F,
79 HZ_SUBARTC_ABOVE = 0x0800,
80 HZ_TEMP = 0x1000,
81 HZ_SUBARTC_BELOW = 0x2000,
82 HZ_SUBTROPIC = 0x4000,
83 HZ_TOYLND = 0x8000,
84 HZ_CLIMALL = 0xF800,
85 };
86 DECLARE_ENUM_AS_BIT_SET(HouseZones)
87
88 enum HouseExtraFlags {
89 NO_EXTRA_FLAG = 0,
90 BUILDING_IS_HISTORICAL = 1U << 0,
91 BUILDING_IS_PROTECTED = 1U << 1,
92 SYNCHRONISED_CALLBACK_1B = 1U << 2,
93 CALLBACK_1A_RANDOM_BITS = 1U << 3,
94 };
95
96 DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags)
97
98 struct HouseSpec {
99 /* Standard properties */
100 Year min_year;
101 Year max_year;
102 byte population;
103 byte removal_cost;
104 StringID building_name;
105 uint16 remove_rating_decrease;
106 byte mail_generation;
107 byte cargo_acceptance[3];
108 CargoID accepts_cargo[3];
109 BuildingFlags building_flags;
110 HouseZones building_availability;
111 bool enabled;
112
113 /* NewHouses properties */
114 GRFFileProps grf_prop;
115 uint16 callback_mask;
116 byte random_colour[4];
117 byte probability;
118 HouseExtraFlags extra_flags;
119 HouseClassID class_id;
120 AnimationInfo animation;
121 byte processing_time;
122 byte minimum_life;
123 uint32 watched_cargoes;
124
125 Money GetRemovalCost() const;
126
127 static inline HouseSpec *Get(size_t house_id)
128 {
129 assert(house_id < NUM_HOUSES);
130 extern HouseSpec _house_specs[];
131 return &_house_specs[house_id];
132 }
133 };
134
140 static inline HouseID GetTranslatedHouseID(HouseID hid)
141 {
142 const HouseSpec *hs = HouseSpec::Get(hid);
143 return hs->grf_prop.override == INVALID_HOUSE_ID ? hid : hs->grf_prop.override;
144 }
145
146 #endif /* HOUSE_H */