OpenTTD Source 20250428-master-ga5578166bb
object_cmd.cpp File Reference

Handling of object tiles. More...

#include "stdafx.h"
#include "landscape.h"
#include "command_func.h"
#include "company_func.h"
#include "viewport_func.h"
#include "company_base.h"
#include "town.h"
#include "bridge_map.h"
#include "genworld.h"
#include "autoslope.h"
#include "clear_func.h"
#include "water.h"
#include "window_func.h"
#include "company_gui.h"
#include "cheat_type.h"
#include "object.h"
#include "cargopacket.h"
#include "core/random_func.hpp"
#include "core/pool_func.hpp"
#include "object_map.h"
#include "object_base.h"
#include "newgrf_config.h"
#include "newgrf_object.h"
#include "timer/timer_game_calendar.h"
#include "newgrf_debug.h"
#include "vehicle_func.h"
#include "station_func.h"
#include "object_cmd.h"
#include "landscape_cmd.h"
#include "pathfinder/water_regions.h"
#include "table/strings.h"
#include "table/object_land.h"
#include "safeguards.h"

Go to the source code of this file.

Functions

ObjectType GetObjectType (Tile t)
 Gets the ObjectType of the given object tile.
 
void InitializeObjects ()
 Initialize/reset the objects.
 
void BuildObject (ObjectType type, TileIndex tile, CompanyID owner, Town *town, uint8_t view)
 Actually build the object.
 
static void IncreaseCompanyHQSize (TileIndex tile)
 Increase the HQ size.
 
static uint8_t GetCompanyHQSize (TileIndex tile)
 Get the size of the HQ.
 
void UpdateCompanyHQ (TileIndex tile, uint score)
 Update the CompanyHQ to the state associated with the given score.
 
void UpdateObjectColours (const Company *c)
 Updates the colour of the object whenever a company changes.
 
CommandCost CheckBuildableTile (TileIndex tile, uint invalid_dirs, int &allowed_z, bool allow_steep, bool check_bridge)
 Checks if the given tile is buildable, flat and has a certain height.
 
static CommandCost ClearTile_Object (TileIndex tile, DoCommandFlags flags)
 
CommandCost CmdBuildObject (DoCommandFlags flags, TileIndex tile, ObjectType type, uint8_t view)
 Build an object object.
 
CommandCost CmdBuildObjectArea (DoCommandFlags flags, TileIndex tile, TileIndex start_tile, ObjectType type, uint8_t view, bool diagonal)
 Construct multiple objects in an area.
 
static Foundation GetFoundation_Object (TileIndex tile, Slope tileh)
 
static void DrawTile_Object (TileInfo *ti)
 
static int GetSlopePixelZ_Object (TileIndex tile, uint x, uint y, bool)
 
static void ReallyClearObjectTile (Object *o)
 Perform the actual removal of the object from the map.
 
ClearedObjectAreaFindClearedObject (TileIndex tile)
 Find the entry in _cleared_object_areas which occupies a certain tile.
 
static void AddAcceptedCargo_Object (TileIndex tile, CargoArray &acceptance, CargoTypes &always_accepted)
 
static void AddProducedCargo_Object (TileIndex tile, CargoArray &produced)
 
static void GetTileDesc_Object (TileIndex tile, TileDesc &td)
 
static void TileLoop_Object (TileIndex tile)
 
static TrackStatus GetTileTrackStatus_Object (TileIndex, TransportType, uint, DiagDirection)
 
static bool ClickTile_Object (TileIndex tile)
 
static void AnimateTile_Object (TileIndex tile)
 
static bool TryBuildLightHouse ()
 Try to build a lighthouse.
 
static bool TryBuildTransmitter ()
 Try to build a transmitter.
 
void GenerateObjects ()
 
static void ChangeTileOwner_Object (TileIndex tile, Owner old_owner, Owner new_owner)
 
static CommandCost TerraformTile_Object (TileIndex tile, DoCommandFlags flags, int z_new, Slope tileh_new)
 

Variables

ObjectPool _object_pool ("Object")
 
std::vector< ClearedObjectArea_cleared_object_areas
 
const TileTypeProcs _tile_type_object_procs
 

Detailed Description

Handling of object tiles.

Definition in file object_cmd.cpp.

Function Documentation

◆ AddAcceptedCargo_Object()

static void AddAcceptedCargo_Object ( TileIndex  tile,
CargoArray acceptance,
CargoTypes &  always_accepted 
)
static

Definition at line 622 of file object_cmd.cpp.

◆ AddProducedCargo_Object()

static void AddProducedCargo_Object ( TileIndex  tile,
CargoArray produced 
)
static

Definition at line 651 of file object_cmd.cpp.

◆ AnimateTile_Object()

static void AnimateTile_Object ( TileIndex  tile)
static

Definition at line 742 of file object_cmd.cpp.

◆ BuildObject()

void BuildObject ( ObjectType  type,
TileIndex  tile,
CompanyID  owner,
Town town,
uint8_t  view 
)

◆ ChangeTileOwner_Object()

static void ChangeTileOwner_Object ( TileIndex  tile,
Owner  old_owner,
Owner  new_owner 
)
static

Definition at line 866 of file object_cmd.cpp.

◆ CheckBuildableTile()

CommandCost CheckBuildableTile ( TileIndex  tile,
uint  invalid_dirs,
int &  allowed_z,
bool  allow_steep,
bool  check_bridge = true 
)
extern

Checks if the given tile is buildable, flat and has a certain height.

Parameters
tileTileIndex to check.
invalid_dirsProhibited directions for slopes (set of DiagDirection).
allowed_zHeight allowed for the tile. If allowed_z is negative, it will be set to the height of this tile.
allow_steepWhether steep slopes are allowed.
check_bridgeCheck for the existence of a bridge.
Returns
The cost in case of success, or an error code if it failed.

Definition at line 799 of file station_cmd.cpp.

References _settings_game, CommandCost::AddCost(), ConstructionSettings::build_on_slopes, CanBuildDepotByTileh(), GameSettings::construction, DIAGDIR_BEGIN, DIAGDIR_END, EnsureNoVehicleOnGround(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), GetSlopeMaxZ(), GetTileSlopeZ(), HasBit(), IsBridgeAbove(), IsSteepSlope(), and SLOPE_FLAT.

Referenced by CheckFlatLandAirport(), CheckFlatLandRailStation(), CheckFlatLandRoadStop(), and CmdBuildObject().

◆ ClearTile_Object()

static CommandCost ClearTile_Object ( TileIndex  tile,
DoCommandFlags  flags 
)
static

Definition at line 543 of file object_cmd.cpp.

◆ ClickTile_Object()

static bool ClickTile_Object ( TileIndex  tile)
static

Definition at line 734 of file object_cmd.cpp.

◆ CmdBuildObject()

CommandCost CmdBuildObject ( DoCommandFlags  flags,
TileIndex  tile,
ObjectType  type,
uint8_t  view 
)

Build an object object.

Parameters
flagstype of operation
tiletile where the object will be located
typethe object type to build
viewthe view for the object
Returns
the cost of this operation or an error

Definition at line 212 of file object_cmd.cpp.

References _current_company, _generating_world, CommandCost::AddCost(), AllowUnderBridge, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Any(), CompanyProperties::build_object_limit, BuildObject(), BuiltOnWater, CALLBACK_FAILED, ObjectSpec::callback_mask, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_object_pool >::CanAllocateItem(), CBID_OBJECT_LAND_SLOPE_CHECK, CheckBuildableTile(), CheckOwnership(), CMD_ERROR, EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), ObjectSpec::flags, GB(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), ObjectSpec::Get(), GetBridgeHeight(), ObjectSpec::GetBuildCost(), GetErrorMessageFromLocationCallbackResult(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::GetIfValid(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetNumItems(), GetObjectCallback(), GetSouthernBridgeEnd(), GetTileMaxZ(), GetTileOwner(), GetTileSlope(), GetTileSlopeZ(), ObjectSpec::grf_prop, GRFFilePropsBase::grffile, HasBit(), HasTileWaterGround(), ObjectSpec::height, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, INVALID_TILE, ObjectSpec::IsAvailable(), IsBridgeAbove(), IsObjectType(), IsTileFlat(), IsTileOwner(), IsTileType(), IsValidTile(), IsWaterTile(), CompanyProperties::location_of_HQ, MP_OBJECT, NoModifyTownRating, NotOnLand, NoWater, OBJECT_HQ, OBJECT_LIGHTHOUSE, OBJECT_OWNED_LAND, OBJECT_STATUE, OBJECT_TRANSMITTER, OnlyInGame, OnlyInScenedit, OWNER_DEITY, OWNER_NONE, OWNER_WATER, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), SetWindowDirty(), ObjectSpec::size, SLOPE_FLAT, SlopeCheck, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TileX(), TileY(), ToggleBit(), UpdateCompanyHQ(), UpdateCompanyRatingAndValue(), ObjectSpec::views, ObjectSpec::WasEverAvailable(), and WC_COMPANY.

◆ CmdBuildObjectArea()

CommandCost CmdBuildObjectArea ( DoCommandFlags  flags,
TileIndex  tile,
TileIndex  start_tile,
ObjectType  type,
uint8_t  view,
bool  diagonal 
)

Construct multiple objects in an area.

Parameters
flagsof operation to conduct
tileend tile of area dragging
start_tilestart tile of area dragging
typethe object type to build
viewthe view for the object
diagonalWhether to use the Orthogonal (0) or Diagonal (1) iterator.
Returns
the cost of this operation or an error

Definition at line 393 of file object_cmd.cpp.

References _current_company, CommandCost::AddCost(), CompanyProperties::build_object_limit, CMD_ERROR, TileIterator::Create(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), GB(), ObjectSpec::Get(), GetAvailableMoneyForCommand(), CommandCost::GetCost(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::GetIfValid(), INVALID_TILE, OBJECT_SIZE_1X1, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), Map::Size(), ObjectSpec::size, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and ObjectSpec::views.

◆ DrawTile_Object()

static void DrawTile_Object ( TileInfo ti)
static

Definition at line 440 of file object_cmd.cpp.

◆ FindClearedObject()

ClearedObjectArea * FindClearedObject ( TileIndex  tile)

Find the entry in _cleared_object_areas which occupies a certain tile.

Parameters
tileTile of interest
Returns
Occupying entry, or nullptr if none

Definition at line 532 of file object_cmd.cpp.

Referenced by CmdBuildTunnel(), CmdLandscapeClear(), and CmdTerraformLand().

◆ GenerateObjects()

void GenerateObjects ( )

Definition at line 807 of file object_cmd.cpp.

◆ GetCompanyHQSize()

static uint8_t GetCompanyHQSize ( TileIndex  tile)
static

Get the size of the HQ.

Parameters
tileThe (northern) tile of the company HQ.
Returns
HQ size.

Definition at line 155 of file object_cmd.cpp.

References GetAnimationFrame().

Referenced by UpdateCompanyHQ().

◆ GetFoundation_Object()

static Foundation GetFoundation_Object ( TileIndex  tile,
Slope  tileh 
)
static

Definition at line 505 of file object_cmd.cpp.

◆ GetObjectType()

ObjectType GetObjectType ( Tile  t)

Gets the ObjectType of the given object tile.

Parameters
tthe tile to get the type from.
Precondition
IsTileType(t, MP_OBJECT)
Returns
the type.

Definition at line 66 of file object_cmd.cpp.

References Object::GetByTile(), IsTileType(), MP_OBJECT, and Object::type.

Referenced by ObjectSpec::GetByTile(), IsObjectType(), and IsObjectTypeTile().

◆ GetSlopePixelZ_Object()

static int GetSlopePixelZ_Object ( TileIndex  tile,
uint  x,
uint  y,
bool   
)
static

Definition at line 494 of file object_cmd.cpp.

◆ GetTileDesc_Object()

static void GetTileDesc_Object ( TileIndex  tile,
TileDesc td 
)
static

Definition at line 662 of file object_cmd.cpp.

◆ GetTileTrackStatus_Object()

static TrackStatus GetTileTrackStatus_Object ( TileIndex  ,
TransportType  ,
uint  ,
DiagDirection   
)
static

Definition at line 729 of file object_cmd.cpp.

◆ IncreaseCompanyHQSize()

static void IncreaseCompanyHQSize ( TileIndex  tile)
static

Increase the HQ size.

Parameters
tileThe (northern) tile of the company HQ.

Definition at line 140 of file object_cmd.cpp.

References GetAnimationFrame(), Object::GetByTile(), Object::location, MarkTileDirtyByTile(), and SetAnimationFrame().

Referenced by UpdateCompanyHQ().

◆ InitializeObjects()

void InitializeObjects ( )

Initialize/reset the objects.

Definition at line 73 of file object_cmd.cpp.

References Object::ResetTypeCounts().

◆ ReallyClearObjectTile()

static void ReallyClearObjectTile ( Object o)
static

Perform the actual removal of the object from the map.

Parameters
oThe object to really clear.

Definition at line 514 of file object_cmd.cpp.

References Object::DecTypeCount(), DeleteNewGRFInspectWindow(), GetTileOwner(), Object::location, and Object::type.

◆ TerraformTile_Object()

static CommandCost TerraformTile_Object ( TileIndex  tile,
DoCommandFlags  flags,
int  z_new,
Slope  tileh_new 
)
static

Definition at line 902 of file object_cmd.cpp.

◆ TileLoop_Object()

static void TileLoop_Object ( TileIndex  tile)
static

Definition at line 674 of file object_cmd.cpp.

◆ TryBuildLightHouse()

static bool TryBuildLightHouse ( )
static

Try to build a lighthouse.

Returns
True iff building a lighthouse succeeded.

Definition at line 751 of file object_cmd.cpp.

References AXIS_X, BuildObject(), DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, DiagDirToAxis(), GB(), IsBridgeAbove(), IsTileFlat(), IsTileType(), IsValidTile(), Map::MaxX(), Map::MaxY(), MP_CLEAR, MP_WATER, OBJECT_LIGHTHOUSE, Random, Map::Size(), TileOffsByDiagDir(), and TileXY().

◆ TryBuildTransmitter()

static bool TryBuildTransmitter ( )
static

Try to build a transmitter.

Returns
True iff a transmitter was built.

Definition at line 793 of file object_cmd.cpp.

References BuildObject(), IsBridgeAbove(), IsObjectTypeTile(), IsTileFlat(), IsTileType(), MP_CLEAR, OBJECT_TRANSMITTER, and RandomTile.

◆ UpdateCompanyHQ()

void UpdateCompanyHQ ( TileIndex  tile,
uint  score 
)

Update the CompanyHQ to the state associated with the given score.

Parameters
tileThe (northern) tile of the company HQ, or INVALID_TILE.
scoreThe current (performance) score of the company.

Definition at line 166 of file object_cmd.cpp.

References GetCompanyHQSize(), IncreaseCompanyHQSize(), and INVALID_TILE.

Referenced by CmdBuildObject(), and UpdateCompanyRatingAndValue().

◆ UpdateObjectColours()

Variable Documentation

◆ _cleared_object_areas

std::vector<ClearedObjectArea> _cleared_object_areas

Definition at line 525 of file object_cmd.cpp.

◆ _tile_type_object_procs

const TileTypeProcs _tile_type_object_procs
extern
Initial value:
= {
DrawTile_Object,
GetSlopePixelZ_Object,
ClearTile_Object,
AddAcceptedCargo_Object,
GetTileDesc_Object,
GetTileTrackStatus_Object,
ClickTile_Object,
AnimateTile_Object,
TileLoop_Object,
ChangeTileOwner_Object,
AddProducedCargo_Object,
nullptr,
GetFoundation_Object,
TerraformTile_Object,
}

Definition at line 58 of file landscape.cpp.