OpenTTD Source 20250521-master-g82876c25e0
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 138 of file newgrf_house.cpp.

◆ AnimateNewHouseTile()

void AnimateNewHouseTile ( TileIndex  tile)

Definition at line 571 of file newgrf_house.cpp.

◆ CanDeleteHouse()

bool CanDeleteHouse ( TileIndex  tile)

Definition at line 588 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 210 of file newgrf_house.cpp.

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

Referenced by DoClearTownHouseHelper().

◆ DoTriggerHouseAnimation_WatchedCargoAccepted()

static 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 723 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()

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

Definition at line 662 of file newgrf_house.cpp.

◆ DrawNewHouseTile()

void DrawNewHouseTile ( TileInfo ti,
HouseID  house_id 
)

Definition at line 489 of file newgrf_house.cpp.

◆ DrawNewHouseTileInGUI()

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

◆ DrawTileLayout()

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

Definition at line 464 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 180 of file newgrf_house.cpp.

Referenced by HousePickerCallbacks::FillUsedItems().

◆ GetDistanceFromNearbyHouse()

static 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 270 of file newgrf_house.cpp.

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

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 456 of file newgrf_house.cpp.

◆ GetHouseSpecGrf()

static 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.

◆ GetNearbyTileInformation()

static 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 254 of file newgrf_house.cpp.

References GetNearbyTile(), and GetNearbyTileInformation().

Referenced by GetNearbyTileInformation().

◆ GetNumHouses()

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

Definition at line 235 of file newgrf_house.cpp.

◆ GetSimpleHouseCallback()

static 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 557 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 191 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 ( )

◆ InitializeBuildingCounts() [2/2]

void InitializeBuildingCounts ( Town t)

Initialise building counts for a town.

Parameters
tTown cache to initialise.

Definition at line 153 of file newgrf_house.cpp.

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

◆ NewHouseTileLoop()

bool NewHouseTileLoop ( TileIndex  tile)

Definition at line 624 of file newgrf_house.cpp.

◆ ResetHouseClassIDs()

void ResetHouseClassIDs ( )

Definition at line 130 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 579 of file newgrf_house.cpp.

◆ TriggerHouseAnimation_TileLoop()

static 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 612 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(), Random, 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, MP_HOUSE)

Definition at line 736 of file newgrf_house.cpp.

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

Referenced by TriggerWatchedCargoCallbacks().

◆ TriggerHouseRandomisation()

void TriggerHouseRandomisation ( TileIndex  t,
HouseRandomTrigger  trigger 
)

Definition at line 711 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.