Changeset - r18007:5ef6f0cf0861
[Not reviewed]
master
0 5 0
rubidium - 13 years ago 2011-08-24 13:48:29
rubidium@openttd.org
(svn r22826) -Codechange: pass sub directory to NewGRF loading functions
5 files changed with 31 insertions and 14 deletions:
0 comments (0 inline, 0 general)
src/gfxinit.cpp
Show inline comments
 
@@ -180,7 +180,7 @@ static void LoadSpriteTables()
 
		case PAL_WINDOWS: master->palette |= GRFP_GRF_WINDOWS; break;
 
		default: break;
 
	}
 
	FillGRFDetails(master, false);
 
	FillGRFDetails(master, false, BASESET_DIR);
 

	
 
	ClrBit(master->flags, GCF_INIT_ONLY);
 
	master->next = top;
src/newgrf.cpp
Show inline comments
 
@@ -8076,7 +8076,14 @@ static void DecodeSpecialSprite(byte *bu
 
}
 

	
 

	
 
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;
 
	uint16 num;
 
@@ -8105,7 +8112,7 @@ void LoadNewGRFFile(GRFConfig *config, u
 
		return;
 
	}
 

	
 
	FioOpenFile(file_index, filename, NEWGRF_DIR);
 
	FioOpenFile(file_index, filename, subdir);
 
	_cur.file_index = file_index; // XXX
 
	_palette_remap_grf[_cur.file_index] = (config->palette & GRFP_USE_MASK);
 

	
 
@@ -8404,6 +8411,11 @@ static void AfterLoadGRFs()
 
	_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)
 
{
 
	/* In case of networking we need to "sync" the start values
 
@@ -8458,14 +8470,15 @@ void LoadNewGRF(uint load_index, uint fi
 
			if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) 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);
 
				c->status = GCS_NOT_FOUND;
 
				continue;
 
			}
 

	
 
			if (stage == GLS_LABELSCAN) InitNewGRFFile(c);
 
			LoadNewGRFFile(c, slot++, stage);
 
			LoadNewGRFFile(c, slot++, stage, subdir);
 
			if (stage == GLS_RESERVE) {
 
				SetBit(c->flags, GCF_RESERVED);
 
			} else if (stage == GLS_ACTIVATION) {
src/newgrf.h
Show inline comments
 
@@ -14,6 +14,7 @@
 

	
 
#include "cargotype.h"
 
#include "rail_type.h"
 
#include "fileio_type.h"
 

	
 
enum GrfLoadingStage {
 
	GLS_FILESCAN,
 
@@ -139,7 +140,7 @@ struct GRFLoadedFeatures {
 
/* Indicates which are the newgrf features currently loaded ingame */
 
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 ReloadNewGRFData(); // in saveload/afterload.cpp
 
void ResetNewGRFData();
src/newgrf_config.cpp
Show inline comments
 
@@ -282,9 +282,10 @@ bool UpdateNewGRFConfigPalette(int32 p1)
 
/**
 
 * Calculate the MD5 sum for a GRF, and store it in the config.
 
 * @param config GRF to compute.
 
 * @param subdir The subdirectory to look in.
 
 * @return MD5 sum was successfully computed
 
 */
 
static bool CalcGRFMD5Sum(GRFConfig *config)
 
static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir)
 
{
 
	FILE *f;
 
	Md5 checksum;
 
@@ -292,7 +293,7 @@ static bool CalcGRFMD5Sum(GRFConfig *con
 
	size_t len, size;
 

	
 
	/* open the file */
 
	f = FioFOpenFile(config->filename, "rb", NEWGRF_DIR, &size);
 
	f = FioFOpenFile(config->filename, "rb", subdir, &size);
 
	if (f == NULL) return false;
 

	
 
	/* calculate md5sum */
 
@@ -312,17 +313,18 @@ static bool CalcGRFMD5Sum(GRFConfig *con
 
 * Find the GRFID of a given grf, and calculate its md5sum.
 
 * @param config    grf to fill.
 
 * @param is_static grf is static.
 
 * @param subdir    the subdirectory to search in.
 
 * @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;
 
		return false;
 
	}
 

	
 
	/* Find and load the Action 8 information */
 
	LoadNewGRFFile(config, CONFIG_SLOT, GLS_FILESCAN);
 
	LoadNewGRFFile(config, CONFIG_SLOT, GLS_FILESCAN, subdir);
 
	config->SetSuitablePalette();
 

	
 
	/* Skip if the grfid is 0 (not read) or 0xFFFFFFFF (ttdp system grf) */
 
@@ -330,13 +332,13 @@ bool FillGRFDetails(GRFConfig *config, b
 

	
 
	if (is_static) {
 
		/* 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 */
 
		if (HasBit(config->flags, GCF_UNSAFE)) return false;
 
	}
 

	
 
	return CalcGRFMD5Sum(config);
 
	return CalcGRFMD5Sum(config, subdir);
 
}
 

	
 

	
src/newgrf_config.h
Show inline comments
 
@@ -16,6 +16,7 @@
 
#include "core/alloc_type.hpp"
 
#include "core/smallmap_type.hpp"
 
#include "misc/countedptr.hpp"
 
#include "fileio_type.h"
 

	
 
/** GRF config bit flags */
 
enum GCF_Flags {
 
@@ -206,7 +207,7 @@ void AppendToGRFConfigList(GRFConfig **d
 
void ClearGRFConfigList(GRFConfig **config);
 
void ResetGRFConfig(bool defaults);
 
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);
 

	
 
/* In newgrf_gui.cpp */
0 comments (0 inline, 0 general)