OpenTTD Source: src/newgrf_config.h File Reference

OpenTTD Source 12.2

Data Structures | Enumerations | Functions | Variables
newgrf_config.h File Reference
`#include "strings_type.h"`
`#include "core/alloc_type.hpp"`
`#include "core/smallmap_type.hpp"`
`#include "misc/countedptr.hpp"`
`#include "fileio_type.h"`
`#include "textfile_type.h"`
`#include "newgrf_text.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 { 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 (FILE *f)
| Get the data section size of a GRF. More...
void | ScanNewGRFFiles (NewGRFScanCallback *callback)
| Scan for all NewGRFs. More...
const GRFConfig * | FindGRFConfig (uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum=nullptr, uint32 desired_version=0)
| Find a NewGRF in the scanned list. More...
GRFConfig * | GetGRFConfig (uint32 grfid, uint32 mask=0xFFFFFFFF)
| Retrieve a NewGRF from the current config by its grfid. More...
GRFConfig ** | CopyGRFConfigList (GRFConfig **dst, const GRFConfig *src, bool init_only)
| Copy a GRF Config list. More...
void | AppendStaticGRFConfigs (GRFConfig **dst)
| Appends the static GRFs to a list of GRFs. More...
void | AppendToGRFConfigList (GRFConfig **dst, GRFConfig *el)
| Appends an element to a list of GRFs. More...
void | ClearGRFConfigList (GRFConfig **config)
| Clear a GRF Config list, freeing all nodes. More...
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. More...
bool | FillGRFDetails (GRFConfig *config, bool is_static, Subdirectory subdir=NEWGRF_DIR)
| Find the GRFID of a given grf, and calculate its md5sum. More...
char * | GRFBuildParamList (char *dst, const GRFConfig *c, const char *last)
| 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. More...
void | UpdateNewGRFScanStatus (uint num, const char *name)
| Update the NewGRF scan status. More...
void | UpdateNewGRFConfigPalette (int32 new_value=0)
| Update the palettes of the graphics from the config file. More...

## 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

enum 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 198 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 22 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 43 of file newgrf_config.h.

## ◆ GRFListCompatibility

enum 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 52 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 59 of file newgrf_config.h.

## ◆ GRFParameterType

enum GRFParameterType

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 127 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 34 of file newgrf_config.h.

## Function Documentation

## ◆ AppendStaticGRFConfigs()

void AppendStaticGRFConfigs | ( | GRFConfig ** | dst | ) |

Appends the static GRFs to a list of GRFs.

Parameters

  dst | the head of the list to add to

Definition at line 470 of file newgrf_config.cpp.

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

Referenced by ResetGRFConfig().

## ◆ AppendToGRFConfigList()

void AppendToGRFConfigList | ( | GRFConfig ** | dst,
|  | GRFConfig * | el
| ) |  |

Appends an element to a list of GRFs.

Parameters

  dst | the head of the list to add to
  el | the new tail to be

Definition at line 484 of file newgrf_config.cpp.

References GRFConfig::next, and RemoveDuplicatesFromGRFConfigList().

## ◆ ClearGRFConfigList()

void ClearGRFConfigList | ( | GRFConfig ** | config | ) |

Clear a GRF Config list, freeing all nodes.

Parameters

  config | Start of the list.

Postcondition
  config is set to `nullptr`.

Definition at line 400 of file newgrf_config.cpp.

References GRFConfig::next.

Referenced by LoadCheckData::Clear(), CopyGRFConfigList(), DoScanNewGRFFiles(), NetworkAddServer(), NetworkGameListRemoveExpired(), NetworkGameListRemoveItem(), NewGRFWindow::OnDropdownSelect(), ClientNetworkCoordinatorSocketHandler::Receive_GC_LISTING(), and QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO().

## ◆ CopyGRFConfigList()

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

Copy a GRF Config list.

Parameters

  dst | pointer to destination list
  src | pointer to source list values
  init_only | the copied GRF will be processed up to GLS_INIT

Returns
  pointer to the last value added to the destination list

Definition at line 418 of file newgrf_config.cpp.

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

Referenced by AppendStaticGRFConfigs(), NewGRFConfirmationCallback(), and ResetGRFConfig().

## ◆ FillGRFDetails()

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

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

Parameters

  config | grf to fill.
  is_static | grf is static.
  subdir | the subdirectory to search in.

Returns
  Operation was successfully completed.

Definition at line 368 of file newgrf_config.cpp.

References GRFConfig::filename, FioCheckFileExists(), GCS_NOT_FOUND, LoadNewGRFFile(), and GRFConfig::status.

Referenced by GRFLoadConfig().

## ◆ FindGRFConfig()

const GRFConfig* FindGRFConfig | ( | uint32 | grfid,
|  | FindGRFConfigMode | mode,
|  | const uint8 * | md5sum,
|  | uint32 | desired_version
| ) |  |

Find a NewGRF in the scanned list.

Parameters

  grfid | GRFID to look for,
  mode | Restrictions for matching grfs
  md5sum | Expected MD5 sum
  desired_version | Requested version

Returns
  The matching grf, if it exists in _all_grfs, else `nullptr`.

Definition at line 736 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 GRFLoadConfig(), HandleIncomingNetworkGameInfoGRFConfig(), HasGRFConfig(), IsGoodGRFConfigList(), NetworkAfterNewGRFScan(), NewGRFWindow::OnInvalidateData(), PrintGrfInfo(), and ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS().

## ◆ GetGRFConfig()

GRFConfig* GetGRFConfig | ( | uint32 | grfid,
|  | uint32 | mask
| ) |  |

Retrieve a NewGRF from the current config by its grfid.

Parameters

  grfid | grf to look for.
  mask | GRFID mask to allow for partial matching.

Returns
  The grf config, if it exists, else `nullptr`.

Definition at line 762 of file newgrf_config.cpp.

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

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

## ◆ GRFGetSizeOfDataSection()

size_t GRFGetSizeOfDataSection | ( | FILE * | f | ) |

Get the data section size of a GRF.

Parameters

  f | GRF.

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

Definition at line 299 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

  grfconfig | GrfConfig 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 513 of file newgrf_config.cpp.

References BSWAP32(), Debug, FGCM_COMPATIBLE, FGCM_EXACT, GRFConfig::filename, FindGRFConfig(), GRFConfig::flags, free(), 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, lastof, GRFIdentifier::md5sum, md5sumToString(), GRFConfig::min_loadable_version, GRFConfig::name, GRFConfig::next, GRFConfig::num_valid_params, GRFConfig::param_info, SetBit(), stredup(), and GRFConfig::version.

## ◆ ScanNewGRFFiles()

void ScanNewGRFFiles | ( | NewGRFScanCallback * | callback | ) |

Scan for all NewGRFs.

Parameters

  callback | The callback to call after the scanning is complete.

Definition at line 718 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

  editable | allow the user to make changes to the grfconfig in the window
  show_params | show information about what parameters are set for the grf files
  exec_changes | if changes are made to the list (editable is true), apply these changes immediately or only update the list
  config | pointer to a linked-list of grfconfig's that will be shown

Definition at line 1995 of file newgrf_gui.cpp.

References CloseWindowByClass(), and WC_GAME_OPTIONS.

## ◆ UpdateNewGRFConfigPalette()

void UpdateNewGRFConfigPalette | ( | int32 | new_value | ) |

Update the palettes of the graphics from the config file.

Called when changing the default palette in advanced settings.

Parameters

  new_value | Unused.

Definition at line 287 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

  num | The number of NewGRFs scanned so far.
  name | The name of the last scanned NewGRF.

Definition at line 2269 of file newgrf_gui.cpp.

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