OpenTTD Source 20260206-master-g4d4e37dbf1
newgrf_house.cpp File Reference

Implementation of NewGRF houses. More...

#include "stdafx.h"
#include "debug.h"
#include "landscape.h"
#include "newgrf_badge.h"
#include "newgrf_house.h"
#include "newgrf_spritegroup.h"
#include "newgrf_town.h"
#include "newgrf_sound.h"
#include "company_func.h"
#include "company_base.h"
#include "town.h"
#include "genworld.h"
#include "newgrf_animation_base.h"
#include "newgrf_cargo.h"
#include "station_base.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  HouseAnimationBase
 Helper class for animation control. More...

Functions

static const GRFFileGetHouseSpecGrf (HouseID house_id)
 Retrieve the grf file associated with a house.
void ResetHouses ()
void ResetHouseClassIDs ()
HouseClassID AllocateHouseClassID (uint8_t grf_class_id, uint32_t grfid)
void InitializeBuildingCounts (Town *t)
 Initialise building counts for a town.
void InitializeBuildingCounts ()
 Initialise global building counts and all town building counts.
std::span< const uint > GetBuildingHouseIDCounts ()
 Get read-only span of total HouseID building counts.
void IncreaseBuildingCount (Town *t, HouseID house_id)
 IncreaseBuildingCount() Increase the count of a building when it has been added by a town.
void DecreaseBuildingCount (Town *t, HouseID house_id)
 DecreaseBuildingCount() Decrease the number of a building when it is deleted.
static uint32_t GetNumHouses (HouseID house_id, const Town *town)
static uint32_t GetNearbyTileInformation (uint8_t parameter, TileIndex tile, bool grf_version8)
 Get information about a nearby tile.
static uint32_t GetDistanceFromNearbyHouse (uint8_t parameter, TileIndex start_tile, HouseID start_house)
 This function will activate a search around a central tile, looking for some houses that fit the requested characteristics.
uint16_t GetHouseCallback (CallbackID callback, uint32_t param1, uint32_t param2, HouseID house_id, Town *town, TileIndex tile, std::span< int32_t > regs100, bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers, int view)
static void DrawTileLayout (const TileInfo *ti, const DrawTileSpriteSpan &dts, uint8_t stage, HouseID house_id)
void DrawNewHouseTile (TileInfo *ti, HouseID house_id)
void DrawNewHouseTileInGUI (int x, int y, const HouseSpec *spec, HouseID house_id, int view)
 Draw representation of a house tile for GUI purposes.
static uint16_t GetSimpleHouseCallback (CallbackID callback, uint32_t param1, uint32_t param2, const HouseSpec *spec, Town *town, TileIndex tile, CargoTypes extra_data)
void AnimateNewHouseTile (TileIndex tile)
void TriggerHouseAnimation_ConstructionStageChanged (TileIndex tile, bool first_call)
bool CanDeleteHouse (TileIndex tile)
static void TriggerHouseAnimation_TileLoop (TileIndex tile, bool sync, uint16_t random_bits)
 Call the tile loop animation trigger for houses, if enabled.
bool NewHouseTileLoop (TileIndex tile)
static void DoTriggerHouseRandomisation (TileIndex tile, HouseRandomTrigger trigger, uint8_t base_random, bool first)
void TriggerHouseRandomisation (TileIndex t, HouseRandomTrigger trigger)
static void DoTriggerHouseAnimation_WatchedCargoAccepted (TileIndex tile, TileIndex origin, CargoTypes trigger_cargoes, uint16_t random)
 Run the watched cargo accepted callback for a single house tile.
void TriggerHouseAnimation_WatchedCargoAccepted (TileIndex tile, CargoTypes trigger_cargoes)
 Run watched cargo accepted callback for a house.

Variables

static BuildingCounts< uint32_t > _building_counts {}
static std::vector< HouseClassMapping_class_mapping {}
HouseOverrideManager _house_mngr (NEW_HOUSE_OFFSET, NUM_HOUSES, INVALID_HOUSE_ID)
const HouseSpec _original_house_specs [NEW_HOUSE_OFFSET]
std::vector< HouseSpec_house_specs

Detailed Description

Implementation of NewGRF houses.

Definition in file newgrf_house.cpp.

Function Documentation

◆ AllocateHouseClassID()

HouseClassID AllocateHouseClassID ( uint8_t grf_class_id,
uint32_t grfid )

Definition at line 139 of file newgrf_house.cpp.

◆ AnimateNewHouseTile()

void AnimateNewHouseTile ( TileIndex tile)

Definition at line 572 of file newgrf_house.cpp.

◆ CanDeleteHouse()

bool CanDeleteHouse ( TileIndex tile)

Definition at line 589 of file newgrf_house.cpp.

◆ DecreaseBuildingCount()

void DecreaseBuildingCount ( Town * t,
HouseID house_id )

DecreaseBuildingCount() Decrease the number of a building when it is deleted.

Parameters
tThe town that the building was built in
house_idThe id of the house being removed

Definition at line 211 of file newgrf_house.cpp.

References TownCache::building_counts, Town::cache, HouseSpec::class_id, and HouseSpec::Get().

Referenced by DoClearTownHouseHelper().

◆ DoTriggerHouseAnimation_WatchedCargoAccepted()

void DoTriggerHouseAnimation_WatchedCargoAccepted ( TileIndex tile,
TileIndex origin,
CargoTypes trigger_cargoes,
uint16_t random )
static

Run the watched cargo accepted callback for a single house tile.

Parameters
tileThe house tile.
originThe triggering tile.
trigger_cargoesCargo types that triggered the callback.
randomRandom bits.

Definition at line 724 of file newgrf_house.cpp.

References CBID_HOUSE_ANIMATION_TRIGGER_WATCHED_CARGO_ACCEPTED, AnimationBase< HouseAnimationBase, HouseSpec, Town, CargoTypes, GetSimpleHouseCallback, TileAnimationFrameAnimationHelper< Town > >::ChangeAnimationFrame(), HouseSpec::Get(), GetHouseType(), TileIndexToTileIndexDiffC(), TileIndexDiffC::x, and TileIndexDiffC::y.

Referenced by TriggerHouseAnimation_WatchedCargoAccepted().

◆ DoTriggerHouseRandomisation()

void DoTriggerHouseRandomisation ( TileIndex tile,
HouseRandomTrigger trigger,
uint8_t base_random,
bool first )
static

Definition at line 663 of file newgrf_house.cpp.

◆ DrawNewHouseTile()

void DrawNewHouseTile ( TileInfo * ti,
HouseID house_id )

Definition at line 490 of file newgrf_house.cpp.

◆ DrawNewHouseTileInGUI()

void DrawNewHouseTileInGUI ( int x,
int y,
const HouseSpec * spec,
HouseID house_id,
int view )

Draw representation of a house tile for GUI purposes.

Parameters
xPosition x of image.
yPosition y of image.
specHouse spec to draw.
house_idHouse ID to draw.
viewThe house's 'view'.

Definition at line 525 of file newgrf_house.cpp.

References CALLBACK_FAILED, HouseSpec::callback_mask, CBID_HOUSE_COLOUR, CBID_NO_CALLBACK, Colour, DrawNewGRFTileSeqInGUI(), DrawSprite(), GB(), GetColourPalette(), DrawTileSprites::ground, GroundSpritePaletteTransform(), HasBit(), INVALID_TILE, PalSpriteID::pal, HouseSpec::random_colour, PalSpriteID::sprite, SPRITE_MODIFIER_CUSTOM_SPRITE, SPRITE_WIDTH, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and TOWN_HOUSE_COMPLETED.

Referenced by DrawHouseInGUI().

◆ DrawTileLayout()

void DrawTileLayout ( const TileInfo * ti,
const DrawTileSpriteSpan & dts,
uint8_t stage,
HouseID house_id )
static

Definition at line 465 of file newgrf_house.cpp.

◆ GetBuildingHouseIDCounts()

std::span< const uint > GetBuildingHouseIDCounts ( )

Get read-only span of total HouseID building counts.

Returns
span of HouseID building counts.

Definition at line 181 of file newgrf_house.cpp.

Referenced by HousePickerCallbacks::FillUsedItems().

◆ GetDistanceFromNearbyHouse()

uint32_t GetDistanceFromNearbyHouse ( uint8_t parameter,
TileIndex start_tile,
HouseID start_house )
static

This function will activate a search around a central tile, looking for some houses that fit the requested characteristics.

Parameters
parameterthat is given by the callback. bits 0..6 radius of the search bits 7..8 search type i.e.: 0 = houseID/ 1 = classID/ 2 = grfID
start_tileTileIndex from which to start the search
start_housethe HouseID that is associated to the house, the callback is called for
Returns
the Manhattan distance from the center tile, if any, and 0 if failure

Definition at line 271 of file newgrf_house.cpp.

References HouseSpec::class_id, DistanceManhattan(), GB(), HouseSpec::Get(), GetHouseNorthPart(), GetHouseType(), HouseSpec::grf_prop, GRFFilePropsBase::grfid, GRFFilePropsBase::HasGrfFile(), House, IsTileType(), and GRFFilePropsBase::local_id.

Referenced by HouseScopeResolver::GetVariable().

◆ GetHouseCallback()

uint16_t GetHouseCallback ( CallbackID callback,
uint32_t param1,
uint32_t param2,
HouseID house_id,
Town * town,
TileIndex tile,
std::span< int32_t > regs100,
bool not_yet_constructed,
uint8_t initial_random_bits,
CargoTypes watched_cargo_triggers,
int view )

Definition at line 457 of file newgrf_house.cpp.

◆ GetHouseSpecGrf()

const GRFFile * GetHouseSpecGrf ( HouseID house_id)
static

Retrieve the grf file associated with a house.

Parameters
house_idHouse to query.
Returns
The associated GRF file (may be nullptr).

Definition at line 38 of file newgrf_house.cpp.

References HouseSpec::Get(), HouseSpec::grf_prop, and GRFFilePropsBase::grffile.

Referenced by HouseResolverObject::HouseResolverObject().

◆ GetNearbyTileInformation()

uint32_t GetNearbyTileInformation ( uint8_t parameter,
TileIndex tile,
bool grf_version8 )
static

Get information about a nearby tile.

Parameters
parameterfrom callback. It's in fact a pair of coordinates
tileTileIndex from which the callback was initiated
grf_version8True, if we are dealing with a new NewGRF which uses GRF version >= 8.
Returns
a construction of bits obeying the newgrf format

Definition at line 255 of file newgrf_house.cpp.

References GetNearbyTile(), and GetNearbyTileInformation().

Referenced by GetNearbyTileInformation().

◆ GetNumHouses()

uint32_t GetNumHouses ( HouseID house_id,
const Town * town )
static

Definition at line 236 of file newgrf_house.cpp.

◆ GetSimpleHouseCallback()

uint16_t GetSimpleHouseCallback ( CallbackID callback,
uint32_t param1,
uint32_t param2,
const HouseSpec * spec,
Town * town,
TileIndex tile,
CargoTypes extra_data )
static

Definition at line 558 of file newgrf_house.cpp.

◆ IncreaseBuildingCount()

void IncreaseBuildingCount ( Town * t,
HouseID house_id )

IncreaseBuildingCount() Increase the count of a building when it has been added by a town.

Parameters
tThe town that the building is being built in
house_idThe id of the house being added

Definition at line 192 of file newgrf_house.cpp.

References TownCache::building_counts, Town::cache, HouseSpec::class_id, and HouseSpec::Get().

Referenced by ClearMakeHouseTile(), and RebuildTownCaches().

◆ InitializeBuildingCounts() [1/2]

void InitializeBuildingCounts ( )

Initialise global building counts and all town building counts.

Definition at line 165 of file newgrf_house.cpp.

References InitializeBuildingCounts(), and HouseSpec::Specs().

Referenced by DoCreateTown(), GenerateWorld(), InitializeBuildingCounts(), and RebuildTownCaches().

◆ InitializeBuildingCounts() [2/2]

void InitializeBuildingCounts ( Town * t)

Initialise building counts for a town.

Parameters
tTown cache to initialise.

Definition at line 154 of file newgrf_house.cpp.

References TownCache::building_counts, Town::cache, and HouseSpec::Specs().

◆ NewHouseTileLoop()

bool NewHouseTileLoop ( TileIndex tile)

Definition at line 625 of file newgrf_house.cpp.

◆ ResetHouseClassIDs()

void ResetHouseClassIDs ( )

Definition at line 131 of file newgrf_house.cpp.

◆ ResetHouses()

void ResetHouses ( )

Definition at line 81 of file newgrf_house.cpp.

◆ TriggerHouseAnimation_ConstructionStageChanged()

void TriggerHouseAnimation_ConstructionStageChanged ( TileIndex tile,
bool first_call )

Definition at line 580 of file newgrf_house.cpp.

◆ TriggerHouseAnimation_TileLoop()

void TriggerHouseAnimation_TileLoop ( TileIndex tile,
bool sync,
uint16_t random_bits )
static

Call the tile loop animation trigger for houses, if enabled.

Parameters
tileHouse tile
syncWhether to call the synchronized or the unsynchronized trigger.
random_bitsShared random bits for the synchronized trigger.

Definition at line 613 of file newgrf_house.cpp.

References AnimationTriggerTileLoop, HouseSpec::callback_mask, CBID_HOUSE_ANIMATION_TRIGGER_TILE_LOOP, AnimationBase< HouseAnimationBase, HouseSpec, Town, CargoTypes, GetSimpleHouseCallback, TileAnimationFrameAnimationHelper< Town > >::ChangeAnimationFrame(), HouseSpec::extra_flags, GB(), HouseSpec::Get(), GetHouseType(), SynchronisedCallback1B, and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().

◆ TriggerHouseAnimation_WatchedCargoAccepted()

void TriggerHouseAnimation_WatchedCargoAccepted ( TileIndex tile,
CargoTypes trigger_cargoes )

Run watched cargo accepted callback for a house.

Parameters
tileHouse tile.
trigger_cargoesTriggering cargo types.
Precondition
IsTileType(t, TileType::House)

Definition at line 737 of file newgrf_house.cpp.

References BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Any(), HouseSpec::building_flags, DoTriggerHouseAnimation_WatchedCargoAccepted(), HouseSpec::Get(), GetHouseNorthPart(), GetHouseType(), House, IsTileType(), TileAddXY(), and HouseSpec::watched_cargoes.

Referenced by TriggerWatchedCargoCallbacks().

◆ TriggerHouseRandomisation()

void TriggerHouseRandomisation ( TileIndex t,
HouseRandomTrigger trigger )

Definition at line 712 of file newgrf_house.cpp.

Variable Documentation

◆ _building_counts

BuildingCounts<uint32_t> _building_counts {}
static

Definition at line 28 of file newgrf_house.cpp.

◆ _class_mapping

std::vector<HouseClassMapping> _class_mapping {}
static

Definition at line 29 of file newgrf_house.cpp.

◆ _house_specs

std::vector<HouseSpec> _house_specs

Definition at line 45 of file newgrf_house.cpp.