mirror of https://github.com/OpenTTD/OpenTTD
(svn r22826) -Codechange: pass sub directory to NewGRF loading functions
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…
Reference in New Issue