OpenTTD Source 20241224-master-gf74b0cf984
newgrf.h File Reference

Base for the NewGRF implementation. More...

#include "cargotype.h"
#include "rail_type.h"
#include "road_type.h"
#include "fileio_type.h"
#include "newgrf_text_type.h"
#include "core/bitmath_func.hpp"
#include "core/alloc_type.hpp"
#include "core/mem_func.hpp"

Go to the source code of this file.

Data Structures

struct  CanalProperties
 Canal properties local to the NewGRF. More...
 
struct  GRFLabel
 
struct  GRFFile
 Dynamic data of a loaded NewGRF. More...
 
struct  GRFLoadedFeatures
 

Macros

#define GrfMsg(severity, format_string, ...)   do { if ((severity) == 0 || _debug_grf_level >= (severity)) GrfMsgI(severity, fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)); } while (false)
 

Enumerations

enum  CanalFeature {
  CF_WATERSLOPE , CF_LOCKS , CF_DIKES , CF_ICON ,
  CF_DOCKS , CF_RIVER_SLOPE , CF_RIVER_EDGE , CF_RIVER_GUI ,
  CF_BUOY , CF_END
}
 List of different canal 'features'. More...
 
enum  GrfLoadingStage {
  GLS_FILESCAN , GLS_SAFETYSCAN , GLS_LABELSCAN , GLS_INIT ,
  GLS_RESERVE , GLS_ACTIVATION , GLS_END
}
 
enum  GrfMiscBit {
  GMB_DESERT_TREES_FIELDS = 0 , GMB_DESERT_PAVED_ROADS = 1 , GMB_FIELD_BOUNDING_BOX = 2 , GMB_TRAIN_WIDTH_32_PIXELS = 3 ,
  GMB_AMBIENT_SOUND_CALLBACK = 4 , GMB_CATENARY_ON_3RD_TRACK = 5 , GMB_SECOND_ROCKY_TILE_SET = 6
}
 
enum  GrfSpecFeature {
  GSF_TRAINS , GSF_ROADVEHICLES , GSF_SHIPS , GSF_AIRCRAFT ,
  GSF_STATIONS , GSF_CANALS , GSF_BRIDGES , GSF_HOUSES ,
  GSF_GLOBALVAR , GSF_INDUSTRYTILES , GSF_INDUSTRIES , GSF_CARGOES ,
  GSF_SOUNDFX , GSF_AIRPORTS , GSF_SIGNALS , GSF_OBJECTS ,
  GSF_RAILTYPES , GSF_AIRPORTTILES , GSF_ROADTYPES , GSF_TRAMTYPES ,
  GSF_ROADSTOPS , GSF_END , GSF_FAKE_TOWNS = GSF_END , GSF_FAKE_END ,
  GSF_INVALID = 0xFF
}
 
enum  ShoreReplacement { SHORE_REPLACE_NONE , SHORE_REPLACE_ACTION_5 , SHORE_REPLACE_ACTION_A , SHORE_REPLACE_ONLY_NEW }
 
enum  TramReplacement { TRAMWAY_REPLACE_DEPOT_NONE , TRAMWAY_REPLACE_DEPOT_WITH_TRACK , TRAMWAY_REPLACE_DEPOT_NO_TRACK }
 

Functions

bool HasGrfMiscBit (GrfMiscBit bit)
 Check for grf miscellaneous bits.
 
void LoadNewGRFFile (struct GRFConfig *config, GrfLoadingStage stage, Subdirectory subdir, bool temporary)
 Load a particular NewGRF.
 
void LoadNewGRF (SpriteID load_index, uint num_baseset)
 Load all the NewGRFs.
 
void ReloadNewGRFData ()
 Reload all NewGRF files during a running game.
 
void ResetNewGRFData ()
 Reset all NewGRF loaded data.
 
void ResetPersistentNewGRFData ()
 Reset NewGRF data which is stored persistently in savegames.
 
void GrfMsgI (int severity, const std::string &msg)
 Debug() function dedicated to newGRF debugging messages Function is essentially the same as Debug(grf, severity, ...) with the addition of file:line information when parsing grf files.
 
bool GetGlobalVariable (uint8_t param, uint32_t *value, const GRFFile *grffile)
 Reads a variable common to VarAction2 and Action7/9/D.
 
StringID MapGRFStringID (uint32_t grfid, StringID str)
 Used when setting an object's property to map to the GRF's strings while taking in consideration the "drift" between TTDPatch string system and OpenTTD's one.
 
void ShowNewGRFError ()
 Show the first NewGRF error we can find.
 

Variables

static const uint32_t INVALID_GRFID = 0xFFFFFFFF
 
GRFLoadedFeatures _loaded_newgrf_features
 Indicates which are the newgrf features currently loaded ingame.
 

Detailed Description

Base for the NewGRF implementation.

Definition in file newgrf.h.

Macro Definition Documentation

◆ GrfMsg

#define GrfMsg (   severity,
  format_string,
  ... 
)    do { if ((severity) == 0 || _debug_grf_level >= (severity)) GrfMsgI(severity, fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)); } while (false)

Definition at line 203 of file newgrf.h.

Enumeration Type Documentation

◆ CanalFeature

List of different canal 'features'.

Each feature gets an entry in the canal spritegroup table

Definition at line 26 of file newgrf.h.

◆ GrfLoadingStage

enum GrfLoadingStage

Definition at line 45 of file newgrf.h.

◆ GrfMiscBit

enum GrfMiscBit
Enumerator
GMB_TRAIN_WIDTH_32_PIXELS 

Use 32 pixels per train vehicle in depot gui and vehicle details. Never set in the global variable;.

See also
GRFFile::traininfo_vehicle_width

Definition at line 57 of file newgrf.h.

◆ GrfSpecFeature

Enumerator
GSF_FAKE_TOWNS 

Fake town GrfSpecFeature for NewGRF debugging (parent scope)

GSF_FAKE_END 

End of the fake features.

GSF_INVALID 

An invalid spec feature.

Definition at line 67 of file newgrf.h.

◆ ShoreReplacement

Enumerator
SHORE_REPLACE_NONE 

No shore sprites were replaced.

SHORE_REPLACE_ACTION_5 

Shore sprites were replaced by Action5.

SHORE_REPLACE_ACTION_A 

Shore sprites were replaced by ActionA (using grass tiles for the corner-shores).

SHORE_REPLACE_ONLY_NEW 

Only corner-shores were loaded by Action5 (openttd(w/d).grf only).

Definition at line 162 of file newgrf.h.

◆ TramReplacement

Enumerator
TRAMWAY_REPLACE_DEPOT_NONE 

No tram depot graphics were loaded.

TRAMWAY_REPLACE_DEPOT_WITH_TRACK 

Electrified depot graphics with tram track were loaded.

TRAMWAY_REPLACE_DEPOT_NO_TRACK 

Electrified depot graphics without tram track were loaded.

Definition at line 169 of file newgrf.h.

Function Documentation

◆ GetGlobalVariable()

bool GetGlobalVariable ( uint8_t  param,
uint32_t *  value,
const GRFFile grffile 
)

Reads a variable common to VarAction2 and Action7/9/D.

Returns VarAction2 variable 'param' resp. Action7/9/D variable '0x80 + param'. If a variable is not accessible from all four actions, it is handled in the action specific functions.

Parameters
paramvariable number (as for VarAction2, for Action7/9/D you have to subtract 0x80 first).
valuereturns the value of the variable.
grffileNewGRF querying the variable
Returns
true iff the variable is known and the value is returned in 'value'.

Definition at line 6584 of file newgrf.cpp.

References _misc_grf_features, _settings_game, Clamp(), GameSettings::construction, TimerGameCalendar::ConvertDateToYMD(), TimerGameCalendar::ConvertYMDToDate(), TimerGameTick::counter, TimerGameCalendar::date, TimerGameCalendar::date_fract, TimerGameConst< struct Calendar >::DAYS_TILL_ORIGINAL_BASE_YEAR, VehicleSettings::disable_elrails, GameSettings::game_creation, GB(), GetRailTypeInfo(), GetSnowLine(), GMB_TRAIN_WIDTH_32_PIXELS, GrfProcessingState::grfconfig, GrfProcessingState::grffile, GRFP_USE_MASK, HasBit(), TimerGame< struct Calendar >::IsLeapYear(), GameCreationSettings::landscape, ConstructionSettings::map_height_limit, TimerGameConst< struct Calendar >::ORIGINAL_BASE_YEAR, TimerGameConst< struct Calendar >::ORIGINAL_MAX_YEAR, GRFConfig::palette, RAILTYPE_ELECTRIC, RAILTYPE_MAGLEV, RAILTYPE_MONO, RAILTYPE_RAIL, VehicleSettings::road_side, SB(), SetBit(), SP_CUSTOM, TILE_HEIGHT, GRFFile::traininfo_vehicle_pitch, GRFFile::traininfo_vehicle_width, GameSettings::vehicle, and TimerGameCalendar::year.

◆ GrfMsgI()

void GrfMsgI ( int  severity,
const std::string &  msg 
)

Debug() function dedicated to newGRF debugging messages Function is essentially the same as Debug(grf, severity, ...) with the addition of file:line information when parsing grf files.

NOTE: for the above reason(s) GrfMsg() should ONLY be used for loading/parsing grf files, not for runtime debug messages as there is no file information available during that time.

Parameters
severitydebugging severity level, see debug.h
msgthe message

Definition at line 390 of file newgrf.cpp.

References Debug, GRFConfig::filename, GrfProcessingState::grfconfig, and GrfProcessingState::nfo_line.

◆ HasGrfMiscBit()

bool HasGrfMiscBit ( GrfMiscBit  bit)
inline

Check for grf miscellaneous bits.

Parameters
bitThe bit to check.
Returns
Whether the bit is set.

Definition at line 187 of file newgrf.h.

References _misc_grf_features, and HasBit().

Referenced by AmbientSoundEffect(), and DrawRoadAsSnowDesert().

◆ LoadNewGRF()

◆ LoadNewGRFFile()

void LoadNewGRFFile ( GRFConfig config,
GrfLoadingStage  stage,
Subdirectory  subdir,
bool  temporary 
)

Load a particular NewGRF.

Parameters
configThe configuration of the to be loaded NewGRF.
stageThe loading stage of the NewGRF.
subdirThe sub directory to find the NewGRF in.
temporaryThe NewGRF/sprite file is to be loaded temporarily and should be closed immediately, contrary to loading the SpriteFile and having it cached by the SpriteCache.

Definition at line 9790 of file newgrf.cpp.

References GRFConfig::filename, GRFConfig::flags, GCF_RESERVED, GCS_INITIALISED, GetFileByFilename(), GrfProcessingState::grffile, GRFP_USE_MASK, HasBit(), LoadNewGRFFileFromFile(), OpenCachedSpriteFile(), GRFConfig::palette, and GRFConfig::status.

Referenced by FillGRFDetails(), and LoadNewGRF().

◆ MapGRFStringID()

StringID MapGRFStringID ( uint32_t  grfid,
StringID  str 
)

Used when setting an object's property to map to the GRF's strings while taking in consideration the "drift" between TTDPatch string system and OpenTTD's one.

Parameters
grfidId of the grf file.
strStringID that we want to have the equivalent in OoenTTD.
Returns
The properly adjusted StringID.

Definition at line 560 of file newgrf.cpp.

References GetGRFStringID(), IsInsideMM(), and TTDPStringIDToOTTDStringIDMapping().

Referenced by AfterLoadGRFs(), ChangeIndustryProduction(), RemapNewGRFStringControlCode(), and TranslateTTDPatchCodes().

◆ ReloadNewGRFData()

void ReloadNewGRFData ( )

Reload all NewGRF files during a running game.

This is a cut-down version of AfterLoadGame(). XXX - We need to reset the vehicle position hash because with a non-empty hash AfterLoadVehicles() will loop infinitely. We need AfterLoadVehicles() to recalculate vehicle data as some NewGRF vehicle sets could have been removed or added and changed statistics

Definition at line 3393 of file afterload.cpp.

References AfterLoadCompanyStats(), AfterLoadLabelMaps(), AfterLoadVehiclesPhase1(), AfterLoadVehiclesPhase2(), CheckTrainsLengths(), COMPANY_FIRST, DeleteInvalidEngineNews(), GfxLoadSprites(), InvalidateWindowClassesData(), InvalidateWindowData(), LoadStringWidthTable(), MarkWholeScreenDirty(), MAX_COMPANIES, RecomputePrices(), StartupEngines(), GroupStatistics::UpdateAfterLoad(), UpdateHousesAndTowns(), WC_BUILD_TOOLBAR, WC_COMPANY_COLOUR, and WC_COMPANY_INFRASTRUCTURE.

Referenced by ClickChangeMaxHlCheat(), NewGRFWindow::Close(), NewGRFConfirmationCallback(), NewGRFWindow::OnClick(), and EngineOverrideManager::ResetToCurrentNewGRFConfig().

◆ ResetNewGRFData()

◆ ResetPersistentNewGRFData()

void ResetPersistentNewGRFData ( )

Reset NewGRF data which is stored persistently in savegames.

Definition at line 8926 of file newgrf.cpp.

References OverrideManagerBase::ResetMapping(), and EngineOverrideManager::ResetToDefaultMapping().

◆ ShowNewGRFError()

void ShowNewGRFError ( )

Show the first NewGRF error we can find.

Definition at line 45 of file newgrf_gui.cpp.

References _grfconfig, INVALID_STRING_ID, GRFConfig::next, SetDParam(), SetDParamStr(), ShowErrorMessage(), WL_CRITICAL, and WL_ERROR.

Referenced by _GenerateWorld(), and InitializeWindowsAndCaches().

Variable Documentation

◆ _loaded_newgrf_features

◆ INVALID_GRFID

const uint32_t INVALID_GRFID = 0xFFFFFFFF
static

Definition at line 97 of file newgrf.h.