newgrf_config.cpp File Reference

Finding NewGRFs and configuring them. More...

#include "stdafx.h"
#include "debug.h"
#include "3rdparty/md5/md5.h"
#include "newgrf.h"
#include "network/network_func.h"
#include "gfx_func.h"
#include "newgrf_text.h"
#include "window_func.h"
#include "fileio_func.h"
#include "fios.h"

Go to the source code of this file.

Data Structures

class  GRFFileScanner
 Helper for scanning for files with GRF as extension. More...
struct  UnknownGRF
 Structure for UnknownGRFs; this is a lightweight variant of GRFConfig. More...

Functions

void UpdateNewGRFConfigPalette ()
 Update the palettes of the graphics from the config file.
static bool CalcGRFMD5Sum (GRFConfig *config)
 Calculate the MD5 sum for a GRF, and store it in the config.
bool FillGRFDetails (GRFConfig *config, bool is_static)
 Find the GRFID of a given grf, and calculate its md5sum.
void ClearGRFConfigList (GRFConfig **config)
 Clear a GRF Config list, freeing all nodes.
GRFConfig ** CopyGRFConfigList (GRFConfig **dst, const GRFConfig *src, bool init_only)
 Copy a GRF Config list.
static void RemoveDuplicatesFromGRFConfigList (GRFConfig *list)
 Removes duplicates from lists of GRFConfigs.
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 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.
static int CDECL GRFSorter (GRFConfig *const *p1, GRFConfig *const *p2)
 Simple sorter for GRFS.
void ScanNewGRFFiles ()
 Scan for all NewGRFs.
const GRFConfigFindGRFConfig (uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum, uint32 desired_version)
 Find a NewGRF in the scanned list.
GRFTextWrapperFindUnknownGRFName (uint32 grfid, uint8 *md5sum, bool create)
 Finds the name of a NewGRF in the list of names for unknown GRFs.
GRFConfigGetGRFConfig (uint32 grfid, uint32 mask)
 Retrieve a NewGRF from the current config by its grfid.
char * GRFBuildParamList (char *dst, const GRFConfig *c, const char *last)
 Build a string containing space separated parameter values, and terminate.

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.
static const uint32 OPENTTD_GRAPHICS_BASE_GRF_ID = BSWAP32(0xFF4F5400)
 Base GRF ID for OpenTTD's base graphics GRFs.

Detailed Description

Finding NewGRFs and configuring them.

Definition in file newgrf_config.cpp.


Function Documentation

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 416 of file newgrf_config.cpp.

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

Referenced by ResetGRFConfig().

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 430 of file newgrf_config.cpp.

References GRFConfig::next, and RemoveDuplicatesFromGRFConfigList().

static bool CalcGRFMD5Sum ( GRFConfig config  )  [static]

Calculate the MD5 sum for a GRF, and store it in the config.

Parameters:
config GRF to compute.
Returns:
MD5 sum was successfully computed

Definition at line 285 of file newgrf_config.cpp.

References DATA_DIR, GRFConfig::filename, FioFCloseFile(), FioFOpenFile(), GRFConfig::ident, and GRFIdentifier::md5sum.

Referenced by FillGRFDetails().

void ClearGRFConfigList ( GRFConfig **  config  ) 

Clear a GRF Config list, freeing all nodes.

Parameters:
config Start of the list.
Postcondition:
config is set to NULL.

Definition at line 346 of file newgrf_config.cpp.

References GRFConfig::next.

Referenced by LoadCheckData::Clear(), CopyGRFConfigList(), DoLoad(), NetworkGameListHandleDelayedInsert(), NetworkGameListRemoveItem(), NewGRFWindow::OnDropdownSelect(), SaveOrLoad(), and ScanNewGRFFiles().

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 364 of file newgrf_config.cpp.

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

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

bool FillGRFDetails ( GRFConfig config,
bool  is_static 
)

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

Parameters:
config grf to fill.
is_static grf is static.
Returns:
Operation was successfully completed.

Definition at line 315 of file newgrf_config.cpp.

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

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

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 NULL.

Definition at line 646 of file newgrf_config.cpp.

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

Referenced by DEF_UDP_RECEIVE_COMMAND(), GamelogPrint(), ClientNetworkUDPSocketHandler::HandleIncomingNetworkGameInfoGRFConfig(), HasGRFConfig(), IsGoodGRFConfigList(), NetworkAfterNewGRFScan(), NewGRFWindow::OnInvalidateData(), and PrintGrfInfo().

GRFTextWrapper* FindUnknownGRFName ( uint32  grfid,
uint8 *  md5sum,
bool  create 
)

Finds the name of a NewGRF in the list of names for unknown GRFs.

An unknown GRF is a GRF where the .grf is not found during scanning.

The names are resolved via UDP calls to servers that should know the name, though the replies may not come. This leaves "<Unknown>" as name, though that shouldn't matter _very_ much as they need GRF crawler or so to look up the GRF anyway and that works better with the GRF ID.

Parameters:
grfid the GRF ID part of the 'unique' GRF identifier
md5sum the MD5 checksum part of the 'unique' GRF identifier
create whether to create a new GRFConfig if the GRFConfig did not exist in the fake list of GRFConfigs.
Returns:
The GRFTextWrapper of the name of the GRFConfig with the given GRF ID and MD5 checksum or NULL when it does not exist and create is false. This value must NEVER be freed by the caller.

Definition at line 691 of file newgrf_config.cpp.

References AddGRFTextToList(), GRFIdentifier::grfid, GRFIdentifier::md5sum, and GRFTextWrapper::text.

Referenced by DEF_UDP_RECEIVE_COMMAND(), ClientNetworkUDPSocketHandler::HandleIncomingNetworkGameInfoGRFConfig(), and NetworkAfterNewGRFScan().

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 NULL.

Definition at line 726 of file newgrf_config.cpp.

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

Referenced by RailVehicleLengthChanged(), and ShowNewGrfVehicleError().

static int CDECL GRFSorter ( GRFConfig *const *  p1,
GRFConfig *const *  p2 
) [static]

Simple sorter for GRFS.

Parameters:
p1 the first GRFConfig *
p2 the second GRFConfig *
Returns:
the same strcmp would return for the name of the NewGRF.

Definition at line 589 of file newgrf_config.cpp.

References GRFConfig::GetName().

Referenced by ScanNewGRFFiles().

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 459 of file newgrf_config.cpp.

References BSWAP32(), DEBUG, FGCM_COMPATIBLE, FGCM_EXACT, GRFConfig::filename, FindGRFConfig(), GRFConfig::flags, 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, SmallVector< T, S >::Length(), GRFIdentifier::md5sum, md5sumToString(), GRFConfig::min_loadable_version, GRFConfig::name, GRFConfig::next, GRFConfig::num_valid_params, GRFConfig::param_info, SetBit(), and GRFConfig::version.

Referenced by AfterLoadGame(), and DoLoad().

static void RemoveDuplicatesFromGRFConfigList ( GRFConfig list  )  [static]

Removes duplicates from lists of GRFConfigs.

These duplicates are introduced when the _grfconfig_static GRFs are appended to the _grfconfig on a newgame or savegame. As the parameters of the static GRFs could be different that the parameters of the ones used non-statically. This can result in desyncs in multiplayers, so the duplicate static GRFs have to be removed.

This function _assumes_ that all static GRFs are placed after the non-static GRFs.

Parameters:
list the list to remove the duplicates from

Definition at line 394 of file newgrf_config.cpp.

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

Referenced by AppendStaticGRFConfigs(), and AppendToGRFConfigList().

void ResetGRFConfig ( bool  defaults  ) 

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

Definition at line 441 of file newgrf_config.cpp.

References AppendStaticGRFConfigs(), and CopyGRFConfigList().

Referenced by NewGRFWindow::OnClick().

void ScanNewGRFFiles (  ) 
void UpdateNewGRFConfigPalette (  ) 

Update the palettes of the graphics from the config file.

This is needed because the config file gets read and parsed before the palette is chosen (one can configure the base graphics set governing the palette in the config after all). As a result of this we update the settings from the config once we have determined the palette.

Definition at line 274 of file newgrf_config.cpp.

References GRFConfig::next.

Referenced by BaseGraphics::DeterminePalette().


Variable Documentation

const uint32 OPENTTD_GRAPHICS_BASE_GRF_ID = BSWAP32(0xFF4F5400) [static]

Base GRF ID for OpenTTD's base graphics GRFs.

Definition at line 754 of file newgrf_config.cpp.

Referenced by GRFConfig::IsOpenTTDBaseGRF().


Generated on Fri Mar 4 21:37:14 2011 for OpenTTD by  doxygen 1.6.1