OpenTTD Source 20250529-master-g10c159a79f
house.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * 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.
4 * 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.
5 * 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/>.
6 */
7
10#ifndef HOUSE_H
11#define HOUSE_H
12
13#include "cargo_type.h"
15#include "house_type.h"
17#include "newgrf_badge_type.h"
18#include "newgrf_callbacks.h"
19#include "newgrf_commons.h"
20
25static const uint8_t TOWN_HOUSE_COMPLETED = 3;
26
27static const uint HOUSE_NO_CLASS = 0;
28static const HouseID NEW_HOUSE_OFFSET = 110;
29static const HouseID NUM_HOUSES = 4096;
30static const HouseID INVALID_HOUSE_ID = UINT16_MAX;
31
33
34static const uint HOUSE_NUM_ACCEPTS = 16;
35static const uint HOUSE_ORIGINAL_NUM_ACCEPTS = 3;
36
37enum class BuildingFlag : uint8_t {
38 Size1x1 = 0,
39 NotSloped = 1,
40 Size2x1 = 2,
41 Size1x2 = 3,
42 Size2x2 = 4,
43 IsAnimated = 5,
44 IsChurch = 6,
45 IsStadium = 7,
46};
48
49static constexpr BuildingFlags BUILDING_HAS_1_TILE = {BuildingFlag::Size1x1, BuildingFlag::Size2x1, BuildingFlag::Size1x2, BuildingFlag::Size2x2};
50static constexpr BuildingFlags BUILDING_HAS_2_TILES = {BuildingFlag::Size2x1, BuildingFlag::Size1x2, BuildingFlag::Size2x2};
51static constexpr BuildingFlags BUILDING_2_TILES_X = {BuildingFlag::Size2x1, BuildingFlag::Size2x2};
52static constexpr BuildingFlags BUILDING_2_TILES_Y = {BuildingFlag::Size1x2, BuildingFlag::Size2x2};
53static constexpr BuildingFlags BUILDING_HAS_4_TILES = {BuildingFlag::Size2x2};
54
55enum class HouseZone : uint8_t {
56 TownEdge = 0,
57 TownOutskirt = 1,
58 TownOuterSuburb = 2,
59 TownInnerSuburb = 3,
60 TownCentre = 4,
61 TownEnd,
62
64 ClimateTemperate = 12,
66 ClimateSubtropic = 14,
67 ClimateToyland = 15,
68};
70
71static constexpr uint NUM_HOUSE_ZONES = to_underlying(HouseZone::TownEnd);
72static_assert(NUM_HOUSE_ZONES == 5);
73
74static constexpr HouseZones HZ_ZONE_ALL = {
75 HouseZone::TownEdge,
76 HouseZone::TownOutskirt,
77 HouseZone::TownOuterSuburb,
78 HouseZone::TownInnerSuburb,
79 HouseZone::TownCentre,
80};
81
82static constexpr HouseZones HZ_CLIMATE_ALL = {
88};
89
97
134
141{
142 const HouseSpec *hs = HouseSpec::Get(hid);
143 return hs->grf_prop.override_id == INVALID_HOUSE_ID ? hid : hs->grf_prop.override_id;
144}
145
146void ShowBuildHousePicker(struct Window *);
148
149#endif /* HOUSE_H */
Types related to cargoes...
uint8_t CargoType
Cargo slots to indicate a cargo type within a game.
Definition cargo_type.h:23
constexpr std::underlying_type_t< enum_type > to_underlying(enum_type e)
Implementation of std::to_underlying (from C++23)
Definition enum_type.hpp:17
HouseExtraFlag
Definition house.h:90
@ SynchronisedCallback1B
synchronized callback 1B will be performed, on multi tile houses
@ Callback1ARandomBits
callback 1A needs random bits
@ BuildingIsHistorical
this house will only appear during town generation in random games, thus the historical
@ BuildingIsProtected
towns and AI will not remove this house, while human players will be able to
HouseZones GetClimateMaskForLandscape()
Get the HouseZones climate mask for the current landscape type.
static const HouseID NUM_HOUSES
Total number of houses.
Definition house.h:29
static const HouseID NEW_HOUSE_OFFSET
Offset for new houses.
Definition house.h:28
HouseID GetTranslatedHouseID(HouseID hid)
Do HouseID translation for NewGRFs.
Definition house.h:140
static const HouseID NUM_HOUSES_PER_GRF
Number of supported houses per NewGRF.
Definition house.h:32
static const uint HOUSE_NUM_ACCEPTS
Max number of cargoes accepted by a tile.
Definition house.h:34
static const uint8_t TOWN_HOUSE_COMPLETED
Simple value that indicates the house has reached the final stage of construction.
Definition house.h:25
static const uint HOUSE_ORIGINAL_NUM_ACCEPTS
Original number of accepted cargo types.
Definition house.h:35
HouseZone
Definition house.h:55
@ ClimateSubarcticAboveSnow
Building can appear in sub-arctic climate above the snow line.
@ ClimateSubarcticBelowSnow
Building can appear in sub-arctic climate below the snow line.
@ ClimateTemperate
Building can appear in temperate climate.
@ ClimateToyland
Building can appear in toyland climate.
@ ClimateSubtropic
Building can appear in subtropical climate.
declaration of basic house types and enums
uint16_t HouseClassID
Classes of houses.
Definition house_type.h:14
uint16_t HouseID
OpenTTD ID of house types.
Definition house_type.h:13
Definitions related to NewGRF animation.
Types related to NewGRF badges.
Callbacks that NewGRFs could implement.
This file simplyfies and embeds a common mechanism of loading/saving and mapping of grf entities.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Information about animation.
CargoType accepts_cargo[HOUSE_NUM_ACCEPTS]
input cargo slots
Definition house.h:108
SubstituteGRFFileProps grf_prop
Properties related the the grf file.
Definition house.h:114
uint8_t probability
Relative probability of appearing (16 is the standard value)
Definition house.h:117
CargoTypes watched_cargoes
Cargo types watched for acceptance.
Definition house.h:123
uint8_t removal_cost
cost multiplier for removing it
Definition house.h:103
uint8_t mail_generation
mail generation multiplier (tile based, as the acceptances below)
Definition house.h:106
bool enabled
the house is available to build (true by default, but can be disabled by newgrf)
Definition house.h:111
CargoLabel accepts_cargo_label[HOUSE_ORIGINAL_NUM_ACCEPTS]
input landscape cargo slots
Definition house.h:126
Money GetRemovalCost() const
Get the cost for removing this house.
Definition town_cmd.cpp:226
static HouseSpec * Get(size_t house_id)
Get the spec for a house ID.
BuildingFlags building_flags
some flags that describe the house (size, stadium etc...)
Definition house.h:109
TimerGameCalendar::Year max_year
last year it can be built
Definition house.h:101
uint8_t processing_time
Periodic refresh multiplier.
Definition house.h:121
HouseCallbackMasks callback_mask
Bitmask of house callbacks that have to be called.
Definition house.h:115
uint16_t remove_rating_decrease
rating decrease if removed
Definition house.h:105
uint8_t population
population (Zero on other tiles in multi tile house.)
Definition house.h:102
HouseExtraFlags extra_flags
some more flags
Definition house.h:118
uint8_t cargo_acceptance[HOUSE_NUM_ACCEPTS]
acceptance level for the cargo slots
Definition house.h:107
TimerGameCalendar::Year min_year
introduction year of the house
Definition house.h:100
HouseID Index() const
Gets the index of this spec.
HouseClassID class_id
defines the class this house has (not grf file based)
Definition house.h:119
AnimationInfo< void > animation
information about the animation.
Definition house.h:120
StringID building_name
building name
Definition house.h:104
uint8_t minimum_life
The minimum number of years this house will survive before the town rebuilds it.
Definition house.h:122
Colours random_colour[4]
4 "random" colours
Definition house.h:116
HouseZones building_availability
where can it be built (climates, zones)
Definition house.h:110
static std::vector< HouseSpec > & Specs()
Get a reference to all HouseSpecs.
Templated helper to make a type-safe 'typedef' representing a single POD value.
NewGRF entities which can replace default entities.
uint16_t override_id
id of the entity been replaced by
Data structure for an opened window.
Definition window_gui.h:273
Definition of the game-calendar-timer.