OpenTTD Source 20241224-master-gee860a5c8e
newgrf_config.h File Reference

Functions to find and configure NewGRFs. More...

#include "strings_type.h"
#include "core/alloc_type.hpp"
#include "fileio_type.h"
#include "textfile_type.h"
#include "newgrf_text.h"
#include "3rdparty/md5/md5.h"

Go to the source code of this file.

Data Structures

struct  GRFIdentifier
 Basic data to distinguish a GRF. More...
 
struct  GRFError
 Information about why GRF had problems during initialisation. More...
 
struct  GRFParameterInfo
 Information about one grf parameter. More...
 
struct  GRFConfig
 Information about GRF, used in the game and (part of it) in savegames. More...
 
struct  NewGRFScanCallback
 Callback for NewGRF scanning. More...
 

Enumerations

enum  GCF_Flags {
  GCF_SYSTEM , GCF_UNSAFE , GCF_STATIC , GCF_COMPATIBLE ,
  GCF_COPY , GCF_INIT_ONLY , GCF_RESERVED , GCF_INVALID
}
 GRF config bit flags. More...
 
enum  GRFStatus {
  GCS_UNKNOWN , GCS_DISABLED , GCS_NOT_FOUND , GCS_INITIALISED ,
  GCS_ACTIVATED
}
 Status of GRF. More...
 
enum  GRFBugs {
  GBUG_VEH_LENGTH , GBUG_VEH_REFIT , GBUG_VEH_POWERED_WAGON , GBUG_UNKNOWN_CB_RESULT ,
  GBUG_VEH_CAPACITY
}
 Encountered GRF bugs. More...
 
enum  GRFListCompatibility { GLC_ALL_GOOD , GLC_COMPATIBLE , GLC_NOT_FOUND }
 Status of post-gameload GRF compatibility check. More...
 
enum  GRFPalette {
  GRFP_USE_BIT = 0 , GRFP_GRF_OFFSET = 2 , GRFP_GRF_SIZE = 2 , GRFP_BLT_OFFSET = 4 ,
  GRFP_BLT_SIZE = 1 , GRFP_USE_DOS = 0x0 , GRFP_USE_WINDOWS = 0x1 , GRFP_USE_MASK = 0x1 ,
  GRFP_GRF_UNSET = 0x0 << GRFP_GRF_OFFSET , GRFP_GRF_DOS = 0x1 << GRFP_GRF_OFFSET , GRFP_GRF_WINDOWS = 0x2 << GRFP_GRF_OFFSET , GRFP_GRF_ANY = GRFP_GRF_DOS | GRFP_GRF_WINDOWS ,
  GRFP_GRF_MASK = GRFP_GRF_ANY , GRFP_BLT_UNSET = 0x0 << GRFP_BLT_OFFSET , GRFP_BLT_32BPP = 0x1 << GRFP_BLT_OFFSET , GRFP_BLT_MASK = GRFP_BLT_32BPP
}
 Information that can/has to be stored about a GRF's palette. More...
 
enum  GRFParameterType : uint8_t { PTYPE_UINT_ENUM , PTYPE_BOOL , PTYPE_END }
 The possible types of a newgrf parameter. More...
 
enum  FindGRFConfigMode {
  FGCM_EXACT , FGCM_COMPATIBLE , FGCM_NEWEST , FGCM_NEWEST_VALID ,
  FGCM_ANY
}
 Method to find GRFs using FindGRFConfig. More...
 

Functions

size_t GRFGetSizeOfDataSection (FileHandle &f)
 Get the data section size of a GRF.
 
void ScanNewGRFFiles (NewGRFScanCallback *callback)
 Scan for all NewGRFs.
 
const GRFConfigFindGRFConfig (uint32_t grfid, FindGRFConfigMode mode, const MD5Hash *md5sum=nullptr, uint32_t desired_version=0)
 Find a NewGRF in the scanned list.
 
GRFConfigGetGRFConfig (uint32_t grfid, uint32_t mask=0xFFFFFFFF)
 Retrieve a NewGRF from the current config by its grfid.
 
GRFConfig ** CopyGRFConfigList (GRFConfig **dst, const GRFConfig *src, bool init_only)
 Copy a GRF Config list.
 
void AppendStaticGRFConfigs (GRFConfig **dst)
 Appends the static GRFs to a list of GRFs.
 
void AppendToGRFConfigList (GRFConfig **dst, GRFConfig *el)
 Appends an element to a list of GRFs.
 
void ClearGRFConfigList (GRFConfig **config)
 Clear a GRF Config list, freeing all nodes.
 
void ResetGRFConfig (bool defaults)
 Reset the current GRF Config to either blank or newgame settings.
 
GRFListCompatibility IsGoodGRFConfigList (GRFConfig *grfconfig)
 Check if all GRFs in the GRF config from a savegame can be loaded.
 
bool FillGRFDetails (GRFConfig *config, bool is_static, Subdirectory subdir=NEWGRF_DIR)
 Find the GRFID of a given grf, and calculate its md5sum.
 
std::string GRFBuildParamList (const GRFConfig *c)
 Build a string containing space separated parameter values, and terminate.
 
void ShowNewGRFSettings (bool editable, bool show_params, bool exec_changes, GRFConfig **config)
 Setup the NewGRF gui.
 
void OpenGRFParameterWindow (bool is_baseset, GRFConfig *c, bool editable)
 
void UpdateNewGRFScanStatus (uint num, const char *name)
 Update the NewGRF scan status.
 
void UpdateNewGRFConfigPalette (int32_t new_value=0)
 Update the palettes of the graphics from the config file.
 

Variables

GRFConfig_all_grfs
 First item in list of all scanned NewGRFs.
 
GRFConfig_grfconfig
 First item in list of current GRF set up.
 
GRFConfig_grfconfig_newgame
 First item in list of default GRF set up.
 
GRFConfig_grfconfig_static
 First item in list of static GRF set up.
 
uint _missing_extra_graphics
 Number of sprites provided by the fallback extra GRF, i.e. missing in the baseset.
 

Detailed Description

Functions to find and configure NewGRFs.

Definition in file newgrf_config.h.

Enumeration Type Documentation

◆ FindGRFConfigMode

Method to find GRFs using FindGRFConfig.

Enumerator
FGCM_EXACT 

Only find Grfs matching md5sum.

FGCM_COMPATIBLE 

Find best compatible Grf wrt. desired_version.

FGCM_NEWEST 

Find newest Grf.

FGCM_NEWEST_VALID 

Find newest Grf, ignoring Grfs with GCF_INVALID set.

FGCM_ANY 

Use first found.

Definition at line 202 of file newgrf_config.h.

◆ GCF_Flags

enum GCF_Flags

GRF config bit flags.

Enumerator
GCF_SYSTEM 

GRF file is an openttd-internal system grf.

GCF_UNSAFE 

GRF file is unsafe for static usage.

GCF_STATIC 

GRF file is used statically (can be used in any MP game)

GCF_COMPATIBLE 

GRF file does not exactly match the requested GRF (different MD5SUM), but grfid matches)

GCF_COPY 

The data is copied from a grf in _all_grfs.

GCF_INIT_ONLY 

GRF file is processed up to GLS_INIT.

GCF_RESERVED 

GRF file passed GLS_RESERVE stage.

GCF_INVALID 

GRF is unusable with this version of OpenTTD.

Definition at line 21 of file newgrf_config.h.

◆ GRFBugs

enum GRFBugs

Encountered GRF bugs.

Enumerator
GBUG_VEH_LENGTH 

Length of rail vehicle changes when not inside a depot.

GBUG_VEH_REFIT 

Articulated vehicles carry different cargoes resp. are differently refittable than specified in purchase list.

GBUG_VEH_POWERED_WAGON 

Powered wagon changed poweredness state when not inside a depot.

GBUG_UNKNOWN_CB_RESULT 

A callback returned an unknown/invalid result.

GBUG_VEH_CAPACITY 

Capacity of vehicle changes when not refitting or arranging.

Definition at line 42 of file newgrf_config.h.

◆ GRFListCompatibility

Status of post-gameload GRF compatibility check.

Enumerator
GLC_ALL_GOOD 

All GRF needed by game are present.

GLC_COMPATIBLE 

Compatible (eg. the same ID, but different checksum) GRF found in at least one case.

GLC_NOT_FOUND 

At least one GRF couldn't be found (higher priority than GLC_COMPATIBLE)

Definition at line 51 of file newgrf_config.h.

◆ GRFPalette

enum GRFPalette

Information that can/has to be stored about a GRF's palette.

Enumerator
GRFP_USE_BIT 

The bit used for storing the palette to use.

GRFP_GRF_OFFSET 

The offset of the GRFP_GRF data.

GRFP_GRF_SIZE 

The size of the GRFP_GRF data.

GRFP_BLT_OFFSET 

The offset of the GRFP_BLT data.

GRFP_BLT_SIZE 

The size of the GRFP_BLT data.

GRFP_USE_DOS 

The palette state is set to use the DOS palette.

GRFP_USE_WINDOWS 

The palette state is set to use the Windows palette.

GRFP_USE_MASK 

Bitmask to get only the use palette use states.

GRFP_GRF_UNSET 

The NewGRF provided no information.

GRFP_GRF_DOS 

The NewGRF says the DOS palette can be used.

GRFP_GRF_WINDOWS 

The NewGRF says the Windows palette can be used.

GRFP_GRF_ANY 

The NewGRF says any palette can be used.

GRFP_GRF_MASK 

Bitmask to get only the NewGRF supplied information.

GRFP_BLT_UNSET 

The NewGRF provided no information or doesn't care about a 32 bpp blitter.

GRFP_BLT_32BPP 

The NewGRF prefers a 32 bpp blitter.

GRFP_BLT_MASK 

Bitmask to only get the blitter information.

Definition at line 58 of file newgrf_config.h.

◆ GRFParameterType

enum GRFParameterType : uint8_t

The possible types of a newgrf parameter.

Enumerator
PTYPE_UINT_ENUM 

The parameter allows a range of numbers, each of which can have a special name.

PTYPE_BOOL 

The parameter is either 0 or 1.

PTYPE_END 

Invalid parameter type.

Definition at line 119 of file newgrf_config.h.

◆ GRFStatus

enum GRFStatus

Status of GRF.

Enumerator
GCS_UNKNOWN 

The status of this grf file is unknown.

GCS_DISABLED 

GRF file is disabled.

GCS_NOT_FOUND 

GRF file was not found in the local cache.

GCS_INITIALISED 

GRF file has been initialised.

GCS_ACTIVATED 

GRF file has been activated.

Definition at line 33 of file newgrf_config.h.

Function Documentation

◆ AppendStaticGRFConfigs()

void AppendStaticGRFConfigs ( GRFConfig **  dst)

Appends the static GRFs to a list of GRFs.

Parameters
dstthe head of the list to add to

Definition at line 406 of file newgrf_config.cpp.

References _grfconfig_static, CopyGRFConfigList(), GRFConfig::next, and RemoveDuplicatesFromGRFConfigList().

Referenced by NGRFChunkHandler::Load(), and ResetGRFConfig().

◆ AppendToGRFConfigList()

void AppendToGRFConfigList ( GRFConfig **  dst,
GRFConfig el 
)

Appends an element to a list of GRFs.

Parameters
dstthe head of the list to add to
elthe new tail to be

Definition at line 420 of file newgrf_config.cpp.

References GRFConfig::next, and RemoveDuplicatesFromGRFConfigList().

◆ ClearGRFConfigList()

void ClearGRFConfigList ( GRFConfig **  config)

◆ CopyGRFConfigList()

GRFConfig ** CopyGRFConfigList ( GRFConfig **  dst,
const GRFConfig src,
bool  init_only 
)

Copy a GRF Config list.

Parameters
dstpointer to destination list
srcpointer to source list values
init_onlythe copied GRF will be processed up to GLS_INIT
Returns
pointer to the last value added to the destination list

Definition at line 354 of file newgrf_config.cpp.

References ClearGRFConfigList(), ClrBit(), GRFConfig::flags, GCF_INIT_ONLY, GRFConfig::next, and SetBit().

Referenced by AppendStaticGRFConfigs(), NewGRFWindow::Close(), NewGRFConfirmationCallback(), NewGRFWindow::OnClick(), and ResetGRFConfig().

◆ FillGRFDetails()

bool FillGRFDetails ( GRFConfig config,
bool  is_static,
Subdirectory  subdir 
)

Find the GRFID of a given grf, and calculate its md5sum.

Parameters
configgrf to fill.
is_staticgrf is static.
subdirthe subdirectory to search in.
Returns
Operation was successfully completed.

Definition at line 304 of file newgrf_config.cpp.

References CalcGRFMD5Sum(), GRFConfig::filename, GRFConfig::FinalizeParameterInfo(), FioCheckFileExists(), GRFConfig::flags, GCF_SYSTEM, GCF_UNSAFE, GCS_NOT_FOUND, GRFIdentifier::grfid, HasBit(), GRFConfig::ident, LoadNewGRFFile(), GRFConfig::SetSuitablePalette(), and GRFConfig::status.

Referenced by GRFFileScanner::AddFile(), GraphicsSet::GetOrCreateExtraConfig(), and GRFLoadConfig().

◆ FindGRFConfig()

const GRFConfig * FindGRFConfig ( uint32_t  grfid,
FindGRFConfigMode  mode,
const MD5Hash *  md5sum,
uint32_t  desired_version 
)

Find a NewGRF in the scanned list.

Parameters
grfidGRFID to look for,
modeRestrictions for matching grfs
md5sumExpected MD5 sum
desired_versionRequested version
Returns
The matching grf, if it exists in _all_grfs, else nullptr.

Definition at line 670 of file newgrf_config.cpp.

References _all_grfs, FGCM_ANY, FGCM_COMPATIBLE, FGCM_EXACT, FGCM_NEWEST, GCF_INVALID, HasBit(), GRFConfig::next, and GRFConfig::version.

Referenced by AddGrfInfo(), ContentInfo::GetTextfile(), GRFLoadConfig(), HasGRFConfig(), IsGoodGRFConfigList(), NetworkAfterNewGRFScan(), NewGRFWindow::OnInvalidateData(), and ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS().

◆ GetGRFConfig()

GRFConfig * GetGRFConfig ( uint32_t  grfid,
uint32_t  mask 
)

Retrieve a NewGRF from the current config by its grfid.

Parameters
grfidgrf to look for.
maskGRFID mask to allow for partial matching.
Returns
The grf config, if it exists, else nullptr.

Definition at line 696 of file newgrf_config.cpp.

References _grfconfig, GRFIdentifier::grfid, GRFConfig::ident, and GRFConfig::next.

Referenced by DrawVehiclePurchaseInfo(), ErrorUnknownCallbackResult(), ParamSet(), ShowNewGrfVehicleError(), TranslateGRFStrings(), and VehicleLengthChanged().

◆ GRFBuildParamList()

std::string GRFBuildParamList ( const GRFConfig c)

Build a string containing space separated parameter values, and terminate.

Definition at line 709 of file newgrf_config.cpp.

References GRFConfig::param.

Referenced by GraphicsSetSaveConfig().

◆ GRFGetSizeOfDataSection()

size_t GRFGetSizeOfDataSection ( FileHandle f)

Get the data section size of a GRF.

Parameters
fGRF.
Returns
Size of the data section or SIZE_MAX if the file has no separate data section.

Definition at line 239 of file newgrf_config.cpp.

References _grf_cont_v2_sig, Debug, and MemCmpT().

Referenced by CalcGRFMD5Sum(), and GraphicsSet::CheckMD5().

◆ IsGoodGRFConfigList()

GRFListCompatibility IsGoodGRFConfigList ( GRFConfig grfconfig)

Check if all GRFs in the GRF config from a savegame can be loaded.

Parameters
grfconfigGrfConfig to check
Returns
will return any of the following 3 values:
  • GLC_ALL_GOOD: No problems occurred, all GRF files were found and loaded
  • GLC_COMPATIBLE: For one or more GRF's no exact match was found, but a compatible GRF with the same grfid was found and used instead
  • GLC_NOT_FOUND: For one or more GRF's no match was found at all

Definition at line 449 of file newgrf_config.cpp.

References BSWAP32(), Debug, FGCM_COMPATIBLE, FGCM_EXACT, GRFConfig::filename, FindGRFConfig(), GRFConfig::flags, FormatArrayAsHex(), GCF_COMPATIBLE, GCF_COPY, GCF_INVALID, GCS_NOT_FOUND, GLC_ALL_GOOD, GLC_COMPATIBLE, GLC_NOT_FOUND, GRFIdentifier::grfid, GRFConfig::has_param_defaults, HasBit(), GRFConfig::ident, GRFIdentifier::md5sum, GRFConfig::min_loadable_version, GRFConfig::name, GRFConfig::next, GRFConfig::num_valid_params, GRFConfig::param_info, SetBit(), and GRFConfig::version.

Referenced by AfterLoadGame(), and DoLoad().

◆ OpenGRFParameterWindow()

void OpenGRFParameterWindow ( bool  is_baseset,
GRFConfig c,
bool  editable 
)

Definition at line 550 of file newgrf_gui.cpp.

◆ ResetGRFConfig()

void ResetGRFConfig ( bool  defaults)

Reset the current GRF Config to either blank or newgame settings.

Definition at line 431 of file newgrf_config.cpp.

References _grfconfig, _grfconfig_newgame, AppendStaticGRFConfigs(), and CopyGRFConfigList().

Referenced by NewGRFWindow::Close(), NGRFChunkHandler::Load(), LoadIntroGame(), NewGRFWindow::OnClick(), and AfterNewGRFScan::OnNewGRFsScanned().

◆ ScanNewGRFFiles()

void ScanNewGRFFiles ( NewGRFScanCallback callback)

Scan for all NewGRFs.

Parameters
callbackThe callback to call after the scanning is complete.

Definition at line 652 of file newgrf_config.cpp.

References DoScanNewGRFFiles(), MarkWholeScreenDirty(), and SetModalProgress().

◆ ShowNewGRFSettings()

void ShowNewGRFSettings ( bool  editable,
bool  show_params,
bool  exec_changes,
GRFConfig **  config 
)

Setup the NewGRF gui.

Parameters
editableallow the user to make changes to the grfconfig in the window
show_paramsshow information about what parameters are set for the grf files
exec_changesif changes are made to the list (editable is true), apply these changes immediately or only update the list
configpointer to a linked-list of grfconfig's that will be shown

Definition at line 2019 of file newgrf_gui.cpp.

References CloseWindowByClass(), and WC_GAME_OPTIONS.

Referenced by MenuClickSettings(), SaveLoadWindow::OnClick(), GenerateLandscapeWindow::OnClick(), SelectGameWindow::OnClick(), and NetworkGameWindow::OnClick().

◆ UpdateNewGRFConfigPalette()

void UpdateNewGRFConfigPalette ( int32_t  new_value)

Update the palettes of the graphics from the config file.

Called when changing the default palette in advanced settings.

Definition at line 227 of file newgrf_config.cpp.

References _all_grfs, _grfconfig_newgame, _grfconfig_static, and GRFConfig::next.

Referenced by AfterNewGRFScan::OnNewGRFsScanned().

◆ UpdateNewGRFScanStatus()

void UpdateNewGRFScanStatus ( uint  num,
const char *  name 
)

Update the NewGRF scan status.

Parameters
numThe number of NewGRFs scanned so far.
nameThe name of the last scanned NewGRF.

Definition at line 2285 of file newgrf_gui.cpp.

References FindWindowByClass(), ScanProgressWindow::UpdateNewGRFScanStatus(), and WC_MODAL_PROGRESS.

Referenced by GRFFileScanner::AddFile().

Variable Documentation

◆ _all_grfs

GRFConfig* _all_grfs
extern

◆ _grfconfig

◆ _grfconfig_newgame

GRFConfig* _grfconfig_newgame
extern

First item in list of default GRF set up.

Definition at line 158 of file newgrf_config.cpp.

Referenced by LoadFromConfig(), GenerateLandscapeWindow::OnClick(), SelectGameWindow::OnClick(), ResetGRFConfig(), SaveToConfig(), and UpdateNewGRFConfigPalette().

◆ _grfconfig_static

GRFConfig* _grfconfig_static
extern

First item in list of static GRF set up.

Definition at line 159 of file newgrf_config.cpp.

Referenced by AppendStaticGRFConfigs(), LoadFromConfig(), SaveToConfig(), and UpdateNewGRFConfigPalette().

◆ _missing_extra_graphics

uint _missing_extra_graphics
extern

Number of sprites provided by the fallback extra GRF, i.e. missing in the baseset.

Definition at line 160 of file newgrf_config.cpp.

Referenced by SelectGameWindow::DrawWidget(), SelectGameWindow::OnInit(), and SelectGameWindow::OnResize().