OpenTTD
Data Structures | Enumerations | Functions | Variables
newgrf.h File Reference

Base for the NewGRF implementation. More...

#include "cargotype.h"
#include "rail_type.h"
#include "fileio_type.h"
#include "core/bitmath_func.hpp"
#include "core/alloc_type.hpp"
#include "core/smallvec_type.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
 

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_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 }
 

Functions

static bool HasGrfMiscBit (GrfMiscBit bit)
 Check for grf miscellaneous bits. More...
 
byte GetGRFContainerVersion ()
 Get the container version of the currently opened GRF file. More...
 
void LoadNewGRFFile (struct GRFConfig *config, uint file_index, GrfLoadingStage stage, Subdirectory subdir)
 Load a particular NewGRF. More...
 
void LoadNewGRF (uint load_index, uint file_index, uint num_baseset)
 Load all the NewGRFs. More...
 
void ReloadNewGRFData ()
 Reload all NewGRF files during a running game. More...
 
void ResetNewGRFData ()
 Reset all NewGRF loaded data TODO.
 
void ResetPersistentNewGRFData ()
 Reset NewGRF data which is stored persistently in savegames.
 
void CDECL grfmsg (int severity, const char *str,...) WARN_FORMAT(2
 
void CDECL bool GetGlobalVariable (byte param, uint32 *value, const GRFFile *grffile)
 Reads a variable common to VarAction2 and Action7/9/D. More...
 
StringID MapGRFStringID (uint32 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. More...
 
void ShowNewGRFError ()
 Show the first NewGRF error we can find.
 

Variables

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

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.

◆ 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 154 of file newgrf.h.

Function Documentation

◆ GetGlobalVariable()

void CDECL bool GetGlobalVariable ( byte  param,
uint32 *  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 5755 of file newgrf.cpp.

References _cur_year, _date, _date_fract, _settings_game, _tick_counter, Clamp(), ConvertDateToYMD(), ConvertYMDToDate(), YearMonthDay::day, DAYS_TILL_ORIGINAL_BASE_YEAR, VehicleSettings::disable_elrails, GameSettings::game_creation, GetRailTypeInfo(), GrfProcessingState::grfconfig, GrfProcessingState::grffile, GRFP_USE_MASK, IsLeapYear(), GameCreationSettings::landscape, max(), YearMonthDay::month, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR, GRFConfig::palette, RAILTYPE_ELECTRIC, RAILTYPE_MAGLEV, RAILTYPE_MONO, RAILTYPE_RAIL, VehicleSettings::road_side, SB(), GRFFile::traininfo_vehicle_pitch, GameSettings::vehicle, and YearMonthDay::year.

Referenced by HasGrfMiscBit().

◆ GetGRFContainerVersion()

byte GetGRFContainerVersion ( )

Get the container version of the currently opened GRF file.

Returns
Container version of the GRF file or 0 if the file is corrupt/no GRF file.

Definition at line 8837 of file newgrf.cpp.

References _grf_cont_v2_sig, FioGetPos(), FioReadByte(), FioReadWord(), FioSeekTo(), and lengthof.

Referenced by HasGrfMiscBit(), LoadGrfFile(), and LoadGrfFileIndexed().

◆ HasGrfMiscBit()

static bool HasGrfMiscBit ( GrfMiscBit  bit)
inlinestatic

Check for grf miscellaneous bits.

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

Definition at line 174 of file newgrf.h.

References _loaded_newgrf_features, _misc_grf_features, GetGlobalVariable(), GetGRFContainerVersion(), grfmsg(), HasBit(), LoadNewGRF(), LoadNewGRFFile(), MapGRFStringID(), ReloadNewGRFData(), ResetNewGRFData(), ResetPersistentNewGRFData(), and ShowNewGRFError().

Referenced by AmbientSoundEffect().

◆ LoadNewGRF()

void LoadNewGRF ( uint  load_index,
uint  file_index,
uint  num_baseset 
)

Load all the NewGRFs.

Parameters
load_indexThe offset for the first sprite to add.
file_indexThe Fio index of the first NewGRF to load.
num_basesetNumber of NewGRFs at the front of the list to look up in the baseset dir instead of the newgrf dir.

Definition at line 9228 of file newgrf.cpp.

References _cur_year, _date, _date_fract, _display_opt, _grfconfig, _networking, _settings_game, _tick_counter, ConvertYMDToDate(), GameSettings::game_creation, GCS_NOT_FOUND, GCS_UNKNOWN, InitializeGRFSpecial(), GRFConfig::next, ResetNewGRFData(), GrfProcessingState::spriteid, GrfProcessingState::stage, and GameCreationSettings::starting_year.

Referenced by HasGrfMiscBit().

◆ LoadNewGRFFile()

void LoadNewGRFFile ( GRFConfig config,
uint  file_index,
GrfLoadingStage  stage,
Subdirectory  subdir 
)

Load a particular NewGRF.

Parameters
configThe configuration of the to be loaded NewGRF.
file_indexThe Fio index of the first NewGRF to load.
stageThe loading stage of the NewGRF.
subdirThe sub directory to find the NewGRF in.

Definition at line 8863 of file newgrf.cpp.

References GRFConfig::filename.

Referenced by FillGRFDetails(), and HasGrfMiscBit().

◆ MapGRFStringID()

StringID MapGRFStringID ( uint32  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 552 of file newgrf.cpp.

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

Referenced by AfterLoadGRFs(), and HasGrfMiscBit().

◆ 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 3004 of file afterload.cpp.

References GfxLoadSprites(), LoadStringWidthTable(), and RecomputePrices().

Referenced by ClickChangeMaxHlCheat(), HasGrfMiscBit(), NewGRFConfirmationCallback(), and EngineOverrideManager::ResetToCurrentNewGRFConfig().