Changeset - r18087:1bd0e337907f
[Not reviewed]
master
0 3 0
planetmaker - 13 years ago 2011-09-11 09:31:57
planetmaker@openttd.org
(svn r22918) -Fix: [NewGRF] Properties for feature 0x05 were not zeroed for each NewGRF, thus waterfeatures could glitch when the properties were set by a previous NewGRF and the NewGRF assumed the properties to be unmodified
3 files changed with 40 insertions and 18 deletions:
0 comments (0 inline, 0 general)
src/newgrf.cpp
Show inline comments
 
@@ -1650,15 +1650,15 @@ static ChangeInfoResult CanalChangeInfo(
 
	}
 

	
 
	for (int i = 0; i < numinfo; i++) {
 
		WaterFeature *wf = &_water_feature[id + i];
 
		CanalProperties *cp = &_cur.grffile->canal_local_properties[id + i];
 

	
 
		switch (prop) {
 
			case 0x08:
 
				wf->callback_mask = buf->ReadByte();
 
				cp->callback_mask = buf->ReadByte();
 
				break;
 

	
 
			case 0x09:
 
				wf->flags = buf->ReadByte();
 
				cp->flags = buf->ReadByte();
 
				break;
 

	
 
			default:
 
@@ -7656,6 +7656,17 @@ static void CalculateRefitMasks()
 
	}
 
}
 

	
 
/** Set to use the correct action0 properties for each canal feature */
 
static void FinaliseCanals()
 
{
 
	for (uint i = 0; i < CF_END; i++) {
 
		if (_water_feature[i].grffile != NULL) {
 
			_water_feature[i].callback_mask = _water_feature[i].grffile->canal_local_properties[i].callback_mask;
 
			_water_feature[i].flags = _water_feature[i].grffile->canal_local_properties[i].flags;
 
		}
 
	}
 
}
 

	
 
/** Check for invalid engines */
 
static void FinaliseEngineArray()
 
{
 
@@ -8348,6 +8359,9 @@ static void AfterLoadGRFs()
 
	/* Polish engines */
 
	FinaliseEngineArray();
 

	
 
	/* Set the actually used Canal properties */
 
	FinaliseCanals();
 

	
 
	/* Set the block size in the depot windows based on vehicle sprite sizes */
 
	InitDepotWindowBlockSizes();
 

	
src/newgrf.h
Show inline comments
 
@@ -16,6 +16,27 @@
 
#include "rail_type.h"
 
#include "fileio_type.h"
 

	
 
/**
 
 * List of different canal 'features'.
 
 * Each feature gets an entry in the canal spritegroup table
 
 */
 
enum CanalFeature {
 
	CF_WATERSLOPE,
 
	CF_LOCKS,
 
	CF_DIKES,
 
	CF_ICON,
 
	CF_DOCKS,
 
	CF_RIVER_SLOPE,
 
	CF_RIVER_EDGE,
 
	CF_END,
 
};
 

	
 
/** Canal properties local to the NewGRF */
 
struct CanalProperties {
 
	uint8 callback_mask;  ///< Bitmask of canal callbacks that have to be called.
 
	uint8 flags;          ///< Flags controlling display.
 
};
 

	
 
enum GrfLoadingStage {
 
	GLS_FILESCAN,
 
	GLS_SAFETYSCAN,
 
@@ -104,6 +125,8 @@ struct GRFFile {
 
	RailTypeLabel *railtype_list;
 
	RailType railtype_map[RAILTYPE_END];
 

	
 
	CanalProperties canal_local_properties[CF_END]; ///< Canal properties as set by this NewGRF
 

	
 
	struct LanguageMap *language_map; ///< Mappings related to the languages.
 

	
 
	int traininfo_vehicle_pitch;  ///< Vertical offset for draing train images in depot GUI and vehicle details
src/newgrf_canal.h
Show inline comments
 
@@ -16,21 +16,6 @@
 
#include "tile_type.h"
 
#include "newgrf_generic.h"
 

	
 
/**
 
 * List of different canal 'features'.
 
 * Each feature gets an entry in the canal spritegroup table
 
 */
 
enum CanalFeature {
 
	CF_WATERSLOPE,
 
	CF_LOCKS,
 
	CF_DIKES,
 
	CF_ICON,
 
	CF_DOCKS,
 
	CF_RIVER_SLOPE,
 
	CF_RIVER_EDGE,
 
	CF_END,
 
};
 

	
 
/** Flags controlling the display of canals. */
 
enum CanalFeatureFlag {
 
	CFF_HAS_FLAT_SPRITE = 0, ///< Additional flat ground sprite in the beginning.
0 comments (0 inline, 0 general)