(svn r22826) -Codechange: pass sub directory to NewGRF loading functions

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
rubidium 13 years ago
parent 2a12c9df2f
commit 8e5f433b22

@ -180,7 +180,7 @@ static void LoadSpriteTables()
case PAL_WINDOWS: master->palette |= GRFP_GRF_WINDOWS; break; case PAL_WINDOWS: master->palette |= GRFP_GRF_WINDOWS; break;
default: break; default: break;
} }
FillGRFDetails(master, false); FillGRFDetails(master, false, BASESET_DIR);
ClrBit(master->flags, GCF_INIT_ONLY); ClrBit(master->flags, GCF_INIT_ONLY);
master->next = top; master->next = top;

@ -8076,7 +8076,14 @@ static void DecodeSpecialSprite(byte *buf, uint num, GrfLoadingStage stage)
} }
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage) /**
* Load a particular NewGRF.
* @param config The configuration of the to be loaded NewGRF.
* @param file_index The Fio index of the first NewGRF to load.
* @param stage The loading stage of the NewGRF.
* @param subdir The sub directory to find the NewGRF in.
*/
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage, Subdirectory subdir)
{ {
const char *filename = config->filename; const char *filename = config->filename;
uint16 num; uint16 num;
@ -8105,7 +8112,7 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
return; return;
} }
FioOpenFile(file_index, filename, NEWGRF_DIR); FioOpenFile(file_index, filename, subdir);
_cur.file_index = file_index; // XXX _cur.file_index = file_index; // XXX
_palette_remap_grf[_cur.file_index] = (config->palette & GRFP_USE_MASK); _palette_remap_grf[_cur.file_index] = (config->palette & GRFP_USE_MASK);
@ -8404,6 +8411,11 @@ static void AfterLoadGRFs()
_grm_sprites.clear(); _grm_sprites.clear();
} }
/**
* Load all the NewGRFs.
* @param load_index The offset for the first sprite to add.
* @param file_index The Fio index of the first NewGRF to load.
*/
void LoadNewGRF(uint load_index, uint file_index) void LoadNewGRF(uint load_index, uint file_index)
{ {
/* In case of networking we need to "sync" the start values /* In case of networking we need to "sync" the start values
@ -8458,14 +8470,15 @@ void LoadNewGRF(uint load_index, uint file_index)
if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue; if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
if (stage > GLS_INIT && HasBit(c->flags, GCF_INIT_ONLY)) continue; if (stage > GLS_INIT && HasBit(c->flags, GCF_INIT_ONLY)) continue;
if (!FioCheckFileExists(c->filename)) { Subdirectory subdir = slot == file_index ? BASESET_DIR : NEWGRF_DIR;
if (!FioCheckFileExists(c->filename, subdir)) {
DEBUG(grf, 0, "NewGRF file is missing '%s'; disabling", c->filename); DEBUG(grf, 0, "NewGRF file is missing '%s'; disabling", c->filename);
c->status = GCS_NOT_FOUND; c->status = GCS_NOT_FOUND;
continue; continue;
} }
if (stage == GLS_LABELSCAN) InitNewGRFFile(c); if (stage == GLS_LABELSCAN) InitNewGRFFile(c);
LoadNewGRFFile(c, slot++, stage); LoadNewGRFFile(c, slot++, stage, subdir);
if (stage == GLS_RESERVE) { if (stage == GLS_RESERVE) {
SetBit(c->flags, GCF_RESERVED); SetBit(c->flags, GCF_RESERVED);
} else if (stage == GLS_ACTIVATION) { } else if (stage == GLS_ACTIVATION) {

@ -14,6 +14,7 @@
#include "cargotype.h" #include "cargotype.h"
#include "rail_type.h" #include "rail_type.h"
#include "fileio_type.h"
enum GrfLoadingStage { enum GrfLoadingStage {
GLS_FILESCAN, GLS_FILESCAN,
@ -139,7 +140,7 @@ struct GRFLoadedFeatures {
/* Indicates which are the newgrf features currently loaded ingame */ /* Indicates which are the newgrf features currently loaded ingame */
extern GRFLoadedFeatures _loaded_newgrf_features; extern GRFLoadedFeatures _loaded_newgrf_features;
void LoadNewGRFFile(struct GRFConfig *config, uint file_index, GrfLoadingStage stage); void LoadNewGRFFile(struct GRFConfig *config, uint file_index, GrfLoadingStage stage, Subdirectory subdir);
void LoadNewGRF(uint load_index, uint file_index); void LoadNewGRF(uint load_index, uint file_index);
void ReloadNewGRFData(); // in saveload/afterload.cpp void ReloadNewGRFData(); // in saveload/afterload.cpp
void ResetNewGRFData(); void ResetNewGRFData();

@ -282,9 +282,10 @@ bool UpdateNewGRFConfigPalette(int32 p1)
/** /**
* Calculate the MD5 sum for a GRF, and store it in the config. * Calculate the MD5 sum for a GRF, and store it in the config.
* @param config GRF to compute. * @param config GRF to compute.
* @param subdir The subdirectory to look in.
* @return MD5 sum was successfully computed * @return MD5 sum was successfully computed
*/ */
static bool CalcGRFMD5Sum(GRFConfig *config) static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir)
{ {
FILE *f; FILE *f;
Md5 checksum; Md5 checksum;
@ -292,7 +293,7 @@ static bool CalcGRFMD5Sum(GRFConfig *config)
size_t len, size; size_t len, size;
/* open the file */ /* open the file */
f = FioFOpenFile(config->filename, "rb", NEWGRF_DIR, &size); f = FioFOpenFile(config->filename, "rb", subdir, &size);
if (f == NULL) return false; if (f == NULL) return false;
/* calculate md5sum */ /* calculate md5sum */
@ -312,17 +313,18 @@ static bool CalcGRFMD5Sum(GRFConfig *config)
* Find the GRFID of a given grf, and calculate its md5sum. * Find the GRFID of a given grf, and calculate its md5sum.
* @param config grf to fill. * @param config grf to fill.
* @param is_static grf is static. * @param is_static grf is static.
* @param subdir the subdirectory to search in.
* @return Operation was successfully completed. * @return Operation was successfully completed.
*/ */
bool FillGRFDetails(GRFConfig *config, bool is_static) bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir)
{ {
if (!FioCheckFileExists(config->filename)) { if (!FioCheckFileExists(config->filename, subdir)) {
config->status = GCS_NOT_FOUND; config->status = GCS_NOT_FOUND;
return false; return false;
} }
/* Find and load the Action 8 information */ /* Find and load the Action 8 information */
LoadNewGRFFile(config, CONFIG_SLOT, GLS_FILESCAN); LoadNewGRFFile(config, CONFIG_SLOT, GLS_FILESCAN, subdir);
config->SetSuitablePalette(); config->SetSuitablePalette();
/* Skip if the grfid is 0 (not read) or 0xFFFFFFFF (ttdp system grf) */ /* Skip if the grfid is 0 (not read) or 0xFFFFFFFF (ttdp system grf) */
@ -330,13 +332,13 @@ bool FillGRFDetails(GRFConfig *config, bool is_static)
if (is_static) { if (is_static) {
/* Perform a 'safety scan' for static GRFs */ /* Perform a 'safety scan' for static GRFs */
LoadNewGRFFile(config, 62, GLS_SAFETYSCAN); LoadNewGRFFile(config, 62, GLS_SAFETYSCAN, subdir);
/* GCF_UNSAFE is set if GLS_SAFETYSCAN finds unsafe actions */ /* GCF_UNSAFE is set if GLS_SAFETYSCAN finds unsafe actions */
if (HasBit(config->flags, GCF_UNSAFE)) return false; if (HasBit(config->flags, GCF_UNSAFE)) return false;
} }
return CalcGRFMD5Sum(config); return CalcGRFMD5Sum(config, subdir);
} }

@ -16,6 +16,7 @@
#include "core/alloc_type.hpp" #include "core/alloc_type.hpp"
#include "core/smallmap_type.hpp" #include "core/smallmap_type.hpp"
#include "misc/countedptr.hpp" #include "misc/countedptr.hpp"
#include "fileio_type.h"
/** GRF config bit flags */ /** GRF config bit flags */
enum GCF_Flags { enum GCF_Flags {
@ -206,7 +207,7 @@ void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el);
void ClearGRFConfigList(GRFConfig **config); void ClearGRFConfigList(GRFConfig **config);
void ResetGRFConfig(bool defaults); void ResetGRFConfig(bool defaults);
GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig); GRFListCompatibility IsGoodGRFConfigList(GRFConfig *grfconfig);
bool FillGRFDetails(GRFConfig *config, bool is_static); bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir = NEWGRF_DIR);
char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last); char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last);
/* In newgrf_gui.cpp */ /* In newgrf_gui.cpp */

Loading…
Cancel
Save