summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/newgrf.cpp798
1 files changed, 403 insertions, 395 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index ef2243c7e..3b542290a 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -62,34 +62,42 @@
* of help at #tycoon. Also thanks to Michael Blunck for is GRF files which
* served as subject to the initial testing of this codec. */
-
-static int _skip_sprites; // XXX
-static uint _file_index; // XXX
-
+/** List of all loaded GRF files */
static SmallVector<GRFFile *, 16> _grf_files;
-static GRFFile *_cur_grffile;
-static SpriteID _cur_spriteid;
-static GrfLoadingStage _cur_stage;
-static uint32 _nfo_line;
-
-static GRFConfig *_cur_grfconfig;
-
-/* Miscellaneous GRF features, set by Action 0x0D, parameter 0x9E */
+/** Miscellaneous GRF features, set by Action 0x0D, parameter 0x9E */
static byte _misc_grf_features = 0;
-/* 32 * 8 = 256 flags. Apparently TTDPatch uses this many.. */
+/** 32 * 8 = 256 flags. Apparently TTDPatch uses this many.. */
static uint32 _ttdpatch_flags[8];
-/* Indicates which are the newgrf features currently loaded ingame */
+/** Indicates which are the newgrf features currently loaded ingame */
GRFLoadedFeatures _loaded_newgrf_features;
enum GrfDataType {
GDT_SOUND,
};
-static byte _grf_data_blocks;
-static GrfDataType _grf_data_type;
+/** Temporary data during loading of GRFs */
+struct GrfProcessingState {
+ /* Global state */
+ GrfLoadingStage stage; ///< Current loading stage
+ SpriteID spriteid; ///< First available SpriteID for loading realsprites.
+
+ /* Local state in the file */
+ uint file_index; ///< File index of currently processed GRF file.
+ GRFFile *grffile; ///< Currently processed GRF file.
+ GRFConfig *grfconfig; ///< Config of the currently processed GRF file.
+ uint32 nfo_line; ///< Currently processed pseudo sprite number in the GRF.
+
+ /* Kind of return values when processing certain actions */
+ int skip_sprites; ///< Number of psuedo sprites to skip before processing the next one. (-1 to skip to end of file)
+ byte data_blocks; ///< Number of binary include sprites to read before processing the next pseudo sprite.
+ GrfDataType data_type; ///< Type of the binary include sprites to read.
+};
+
+static GrfProcessingState _cur;
+
class OTTDByteReaderSignal { };
@@ -244,7 +252,7 @@ void CDECL grfmsg(int severity, const char *str, ...)
vsnprintf(buf, sizeof(buf), str, va);
va_end(va);
- DEBUG(grf, severity, "[%s:%d] %s", _cur_grfconfig->filename, _nfo_line, buf);
+ DEBUG(grf, severity, "[%s:%d] %s", _cur.grfconfig->filename, _cur.nfo_line, buf);
}
static GRFFile *GetFileByGRFID(uint32 grfid)
@@ -294,13 +302,13 @@ static GRFError *DisableGrf(StringID message = STR_NULL, GRFConfig *config = NUL
if (config != NULL) {
file = GetFileByGRFID(config->ident.grfid);
} else {
- config = _cur_grfconfig;
- file = _cur_grffile;
+ config = _cur.grfconfig;
+ file = _cur.grffile;
}
config->status = GCS_DISABLED;
if (file != NULL) ClearTemporaryNewGRFData(file);
- if (config == _cur_grfconfig) _skip_sprites = -1;
+ if (config == _cur.grfconfig) _cur.skip_sprites = -1;
if (message != STR_NULL) {
delete config->error;
@@ -610,7 +618,7 @@ static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, uint ac
/* Groundsprite */
TileLayoutFlags flags = ReadSpriteLayoutSprite(buf, has_flags, false, action1_offset, action1_pitch, action1_max, &dts->ground);
- if (_skip_sprites < 0) return true;
+ if (_cur.skip_sprites < 0) return true;
if (flags & ~(valid_flags & ~TLF_NON_GROUND_FLAGS)) {
grfmsg(1, "ReadSpriteLayout: Spritelayout uses invalid flag 0x%x for ground sprite", flags & ~(valid_flags & ~TLF_NON_GROUND_FLAGS));
@@ -619,13 +627,13 @@ static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, uint ac
}
ReadSpriteLayoutRegisters(buf, flags, false, dts, 0);
- if (_skip_sprites < 0) return true;
+ if (_cur.skip_sprites < 0) return true;
for (uint i = 0; i < num_building_sprites; i++) {
DrawTileSeqStruct *seq = const_cast<DrawTileSeqStruct*>(&dts->seq[i]);
flags = ReadSpriteLayoutSprite(buf, has_flags, false, action1_offset, action1_pitch, action1_max, &seq->image);
- if (_skip_sprites < 0) return true;
+ if (_cur.skip_sprites < 0) return true;
if (flags & ~valid_flags) {
grfmsg(1, "ReadSpriteLayout: Spritelayout uses unknown flag 0x%x", flags & ~valid_flags);
@@ -645,7 +653,7 @@ static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, uint ac
}
ReadSpriteLayoutRegisters(buf, flags, seq->IsParentSprite(), dts, i + 1);
- if (_skip_sprites < 0) return true;
+ if (_cur.skip_sprites < 0) return true;
}
return false;
@@ -727,7 +735,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
ChangeInfoResult ret = CIR_SUCCESS;
for (int i = 0; i < numinfo; i++) {
- Engine *e = GetNewEngine(_cur_grffile, VEH_TRAIN, engine + i);
+ Engine *e = GetNewEngine(_cur.grffile, VEH_TRAIN, engine + i);
if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles
EngineInfo *ei = &e->info;
@@ -737,8 +745,8 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
case 0x05: { // Track type
uint8 tracktype = buf->ReadByte();
- if (tracktype < _cur_grffile->railtype_max) {
- _gted[e->index].railtypelabel = _cur_grffile->railtype_list[tracktype];
+ if (tracktype < _cur.grffile->railtype_max) {
+ _gted[e->index].railtypelabel = _cur.grffile->railtype_list[tracktype];
break;
}
@@ -868,7 +876,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
break;
}
- if (_cur_grffile->railtype_max == 0) {
+ if (_cur.grffile->railtype_max == 0) {
/* Use traction type to select between normal and electrified
* rail only when no translation list is in place. */
if (_gted[e->index].railtypelabel == RAILTYPE_RAIL_LABEL && engclass >= EC_ELECTRIC) _gted[e->index].railtypelabel = RAILTYPE_ELECTRIC_LABEL;
@@ -894,7 +902,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
case 0x1D: // Refit cargo
ei->refit_mask = buf->ReadDWord();
_gted[e->index].refitmask_valid = true;
- _gted[e->index].refitmask_grf = _cur_grffile;
+ _gted[e->index].refitmask_grf = _cur.grffile;
break;
case 0x1E: // Callback
@@ -984,7 +992,7 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop
ChangeInfoResult ret = CIR_SUCCESS;
for (int i = 0; i < numinfo; i++) {
- Engine *e = GetNewEngine(_cur_grffile, VEH_ROAD, engine + i);
+ Engine *e = GetNewEngine(_cur.grffile, VEH_ROAD, engine + i);
if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles
EngineInfo *ei = &e->info;
@@ -1056,7 +1064,7 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop
case 0x16: // Cargos available for refitting
ei->refit_mask = buf->ReadDWord();
_gted[e->index].refitmask_valid = true;
- _gted[e->index].refitmask_grf = _cur_grffile;
+ _gted[e->index].refitmask_grf = _cur.grffile;
break;
case 0x17: // Callback mask
@@ -1130,7 +1138,7 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop
ChangeInfoResult ret = CIR_SUCCESS;
for (int i = 0; i < numinfo; i++) {
- Engine *e = GetNewEngine(_cur_grffile, VEH_SHIP, engine + i);
+ Engine *e = GetNewEngine(_cur.grffile, VEH_SHIP, engine + i);
if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles
EngineInfo *ei = &e->info;
@@ -1190,7 +1198,7 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop
case 0x11: // Cargos available for refitting
ei->refit_mask = buf->ReadDWord();
_gted[e->index].refitmask_valid = true;
- _gted[e->index].refitmask_grf = _cur_grffile;
+ _gted[e->index].refitmask_grf = _cur.grffile;
break;
case 0x12: // Callback mask
@@ -1264,7 +1272,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int
ChangeInfoResult ret = CIR_SUCCESS;
for (int i = 0; i < numinfo; i++) {
- Engine *e = GetNewEngine(_cur_grffile, VEH_AIRCRAFT, engine + i);
+ Engine *e = GetNewEngine(_cur.grffile, VEH_AIRCRAFT, engine + i);
if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles
EngineInfo *ei = &e->info;
@@ -1326,7 +1334,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int
case 0x13: // Cargos available for refitting
ei->refit_mask = buf->ReadDWord();
_gted[e->index].refitmask_valid = true;
- _gted[e->index].refitmask_grf = _cur_grffile;
+ _gted[e->index].refitmask_grf = _cur.grffile;
break;
case 0x14: // Callback mask
@@ -1387,10 +1395,10 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
}
/* Allocate station specs if necessary */
- if (_cur_grffile->stations == NULL) _cur_grffile->stations = CallocT<StationSpec*>(MAX_STATIONS);
+ if (_cur.grffile->stations == NULL) _cur.grffile->stations = CallocT<StationSpec*>(MAX_STATIONS);
for (int i = 0; i < numinfo; i++) {
- StationSpec *statspec = _cur_grffile->stations[stid + i];
+ StationSpec *statspec = _cur.grffile->stations[stid + i];
/* Check that the station we are modifying is defined. */
if (statspec == NULL && prop != 0x08) {
@@ -1400,7 +1408,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
switch (prop) {
case 0x08: { // Class ID
- StationSpec **spec = &_cur_grffile->stations[stid + i];
+ StationSpec **spec = &_cur.grffile->stations[stid + i];
/* Property 0x08 is special; it is where the station is allocated */
if (*spec == NULL) *spec = CallocT<StationSpec>(1);
@@ -1428,7 +1436,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
ReadSpriteLayoutSprite(buf, false, false, 0, 1, UINT_MAX, &dts->ground);
/* On error, bail out immediately. Temporary GRF data was already freed */
- if (_skip_sprites < 0) return CIR_DISABLED;
+ if (_cur.skip_sprites < 0) return CIR_DISABLED;
static SmallVector<DrawTileSeqStruct, 8> tmp_layout;
tmp_layout.Clear();
@@ -1447,7 +1455,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
ReadSpriteLayoutSprite(buf, false, true, 0, 1, UINT_MAX, &dtss->image);
/* On error, bail out immediately. Temporary GRF data was already freed */
- if (_skip_sprites < 0) return CIR_DISABLED;
+ if (_cur.skip_sprites < 0) return CIR_DISABLED;
}
dts->Clone(tmp_layout.Begin());
}
@@ -1455,7 +1463,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
case 0x0A: { // Copy sprite layout
byte srcid = buf->ReadByte();
- const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
+ const StationSpec *srcstatspec = _cur.grffile->stations[srcid];
if (srcstatspec == NULL) {
grfmsg(1, "StationChangeInfo: Station %u is not defined, cannot copy sprite layout to %u.", srcid, stid + i);
@@ -1538,7 +1546,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
case 0x0F: { // Copy custom layout
byte srcid = buf->ReadByte();
- const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
+ const StationSpec *srcstatspec = _cur.grffile->stations[srcid];
if (srcstatspec == NULL) {
grfmsg(1, "StationChangeInfo: Station %u is not defined, cannot copy tile layout to %u.", srcid, stid + i);
@@ -1720,14 +1728,14 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR
break;
case 0x10: { // purchase string
- StringID newone = GetGRFStringID(_cur_grffile->grfid, buf->ReadWord());
+ StringID newone = GetGRFStringID(_cur.grffile->grfid, buf->ReadWord());
if (newone != STR_UNDEFINED) bridge->material = newone;
break;
}
case 0x11: // description of bridge with rails or roads
case 0x12: {
- StringID newone = GetGRFStringID(_cur_grffile->grfid, buf->ReadWord());
+ StringID newone = GetGRFStringID(_cur.grffile->grfid, buf->ReadWord());
if (newone != STR_UNDEFINED) bridge->transport_name[prop - 0x11] = newone;
break;
}
@@ -1811,12 +1819,12 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
}
/* Allocate house specs if they haven't been allocated already. */
- if (_cur_grffile->housespec == NULL) {
- _cur_grffile->housespec = CallocT<HouseSpec*>(HOUSE_MAX);
+ if (_cur.grffile->housespec == NULL) {
+ _cur.grffile->housespec = CallocT<HouseSpec*>(HOUSE_MAX);
}
for (int i = 0; i < numinfo; i++) {
- HouseSpec *housespec = _cur_grffile->housespec[hid + i];
+ HouseSpec *housespec = _cur.grffile->housespec[hid + i];
if (prop != 0x08 && housespec == NULL) {
/* If the house property 08 is not yet set, ignore this property */
@@ -1827,7 +1835,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
switch (prop) {
case 0x08: { // Substitute building type, and definition of a new house
- HouseSpec **house = &_cur_grffile->housespec[hid + i];
+ HouseSpec **house = &_cur.grffile->housespec[hid + i];
byte subs_id = buf->ReadByte();
if (subs_id == 0xFF) {
@@ -1851,7 +1859,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
housespec->enabled = true;
housespec->grf_prop.local_id = hid + i;
housespec->grf_prop.subst_id = subs_id;
- housespec->grf_prop.grffile = _cur_grffile;
+ housespec->grf_prop.grffile = _cur.grffile;
housespec->random_colour[0] = 0x04; // those 4 random colours are the base colour
housespec->random_colour[1] = 0x08; // for all new houses
housespec->random_colour[2] = 0x0C; // they stand for red, blue, orange and green
@@ -1926,7 +1934,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
case 0x12: // Building name ID
housespec->building_name = buf->ReadWord();
- _string_to_grf_mapping[&housespec->building_name] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&housespec->building_name] = _cur.grffile->grfid;
break;
case 0x13: // Building availability mask
@@ -1946,7 +1954,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
continue;
}
- _house_mngr.Add(hid + i, _cur_grffile->grfid, override);
+ _house_mngr.Add(hid + i, _cur.grffile->grfid, override);
break;
}
@@ -1977,7 +1985,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
break;
case 0x1C: // Class of the building type
- housespec->class_id = AllocateHouseClassID(buf->ReadByte(), _cur_grffile->grfid);
+ housespec->class_id = AllocateHouseClassID(buf->ReadByte(), _cur.grffile->grfid);
break;
case 0x1D: // Callback mask part 2
@@ -1993,7 +2001,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
for (uint j = 0; j < 3; j++) {
/* Get the cargo number from the 'list' */
uint8 cargo_part = GB(cargotypes, 8 * j, 8);
- CargoID cargo = GetCargoTranslation(cargo_part, _cur_grffile);
+ CargoID cargo = GetCargoTranslation(cargo_part, _cur.grffile);
if (cargo == CT_INVALID) {
/* Disable acceptance of invalid cargo type */
@@ -2057,7 +2065,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By
uint price = gvid + i;
if (price < PR_END) {
- _cur_grffile->price_base_multipliers[price] = min<int>(factor - 8, MAX_PRICE_MODIFIER);
+ _cur.grffile->price_base_multipliers[price] = min<int>(factor - 8, MAX_PRICE_MODIFIER);
} else {
grfmsg(1, "GlobalVarChangeInfo: Price %d out of range, ignoring", price);
}
@@ -2072,7 +2080,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By
case 0x0A: { // Currency display names
uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
- StringID newone = GetGRFStringID(_cur_grffile->grfid, buf->ReadWord());
+ StringID newone = GetGRFStringID(_cur.grffile->grfid, buf->ReadWord());
if ((newone != STR_UNDEFINED) && (curidx < NUM_CURRENCY)) {
_currency_specs[curidx].name = newone;
@@ -2192,14 +2200,14 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By
break;
}
- if (_cur_grffile->language_map == NULL) _cur_grffile->language_map = new LanguageMap[MAX_LANG];
+ if (_cur.grffile->language_map == NULL) _cur.grffile->language_map = new LanguageMap[MAX_LANG];
if (prop == 0x15) {
uint plural_form = buf->ReadByte();
if (plural_form >= LANGUAGE_MAX_PLURAL) {
grfmsg(1, "GlobalVarChanceInfo: Plural form %d is out of range, ignoring", plural_form);
} else {
- _cur_grffile->language_map[curidx].plural_form = plural_form;
+ _cur.grffile->language_map[curidx].plural_form = plural_form;
}
break;
}
@@ -2223,14 +2231,14 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By
if (map.openttd_id >= MAX_NUM_GENDERS) {
grfmsg(1, "GlobalVarChangeInfo: Gender name %s is not known, ignoring", name);
} else {
- *_cur_grffile->language_map[curidx].gender_map.Append() = map;
+ *_cur.grffile->language_map[curidx].gender_map.Append() = map;
}
} else {
map.openttd_id = lang->GetCaseIndex(name);
if (map.openttd_id >= MAX_NUM_CASES) {
grfmsg(1, "GlobalVarChangeInfo: Case name %s is not known, ignoring", name);
} else {
- *_cur_grffile->language_map[curidx].case_map.Append() = map;
+ *_cur.grffile->language_map[curidx].case_map.Append() = map;
}
}
newgrf_id = buf->ReadByte();
@@ -2265,13 +2273,13 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B
return CIR_INVALID_ID;
}
- free(_cur_grffile->cargo_list);
- _cur_grffile->cargo_max = numinfo;
- _cur_grffile->cargo_list = MallocT<CargoLabel>(numinfo);
+ free(_cur.grffile->cargo_list);
+ _cur.grffile->cargo_max = numinfo;
+ _cur.grffile->cargo_list = MallocT<CargoLabel>(numinfo);
}
CargoLabel cl = buf->ReadDWord();
- _cur_grffile->cargo_list[i] = BSWAP32(cl);
+ _cur.grffile->cargo_list[i] = BSWAP32(cl);
break;
}
@@ -2305,13 +2313,13 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B
return CIR_INVALID_ID;
}
- free(_cur_grffile->railtype_list);
- _cur_grffile->railtype_max = numinfo;
- _cur_grffile->railtype_list = MallocT<RailTypeLabel>(numinfo);
+ free(_cur.grffile->railtype_list);
+ _cur.grffile->railtype_max = numinfo;
+ _cur.grffile->railtype_list = MallocT<RailTypeLabel>(numinfo);
}
RailTypeLabel rtl = buf->ReadDWord();
- _cur_grffile->railtype_list[i] = BSWAP32(rtl);
+ _cur.grffile->railtype_list[i] = BSWAP32(rtl);
break;
}
@@ -2348,7 +2356,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea
case 0x08: // Bit number of cargo
cs->bitnum = buf->ReadByte();
if (cs->IsValid()) {
- cs->grffile = _cur_grffile;
+ cs->grffile = _cur.grffile;
SetBit(_cargo_mask, cid + i);
} else {
ClrBit(_cargo_mask, cid + i);
@@ -2357,12 +2365,12 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea
case 0x09: // String ID for cargo type name
cs->name = buf->ReadWord();
- _string_to_grf_mapping[&cs->name] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&cs->name] = _cur.grffile->grfid;
break;
case 0x0A: // String for 1 unit of cargo
cs->name_single = buf->ReadWord();
- _string_to_grf_mapping[&cs->name_single] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&cs->name_single] = _cur.grffile->grfid;
break;
case 0x0B: // String for singular quantity of cargo (e.g. 1 tonne of coal)
@@ -2371,7 +2379,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea
* (e.g. tonnes) to TTDPatch (e.g. {COMMA} tonne of coal).
* Property 1B is used to set OpenTTD's behaviour. */
cs->units_volume = buf->ReadWord();
- _string_to_grf_mapping[&cs->units_volume] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&cs->units_volume] = _cur.grffile->grfid;
break;
case 0x0C: // String for plural quantity of cargo (e.g. 10 tonnes of coal)
@@ -2380,12 +2388,12 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea
* (e.g. {WEIGHT} of coal) to TTDPatch (e.g. {COMMA} tonnes of coal).
* Property 1C is used to set OpenTTD's behaviour. */
cs->quantifier = buf->ReadWord();
- _string_to_grf_mapping[&cs->quantifier] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&cs->quantifier] = _cur.grffile->grfid;
break;
case 0x0D: // String for two letter cargo abbreviation
cs->abbrev = buf->ReadWord();
- _string_to_grf_mapping[&cs->abbrev] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&cs->abbrev] = _cur.grffile->grfid;
break;
case 0x0E: // Sprite ID for cargo icon
@@ -2467,18 +2475,18 @@ static ChangeInfoResult SoundEffectChangeInfo(uint sid, int numinfo, int prop, B
{
ChangeInfoResult ret = CIR_SUCCESS;
- if (_cur_grffile->sound_offset == 0) {
+ if (_cur.grffile->sound_offset == 0) {
grfmsg(1, "SoundEffectChangeInfo: No effects defined, skipping");
return CIR_INVALID_ID;
}
- if (sid + numinfo - ORIGINAL_SAMPLE_COUNT > _cur_grffile->num_sounds) {
- grfmsg(1, "SoundEffectChangeInfo: Attemting to change undefined sound effect (%u), max (%u). Ignoring.", sid + numinfo, ORIGINAL_SAMPLE_COUNT + _cur_grffile->num_sounds);
+ if (sid + numinfo - ORIGINAL_SAMPLE_COUNT > _cur.grffile->num_sounds) {
+ grfmsg(1, "SoundEffectChangeInfo: Attemting to change undefined sound effect (%u), max (%u). Ignoring.", sid + numinfo, ORIGINAL_SAMPLE_COUNT + _cur.grffile->num_sounds);
return CIR_INVALID_ID;
}
for (int i = 0; i < numinfo; i++) {
- SoundEntry *sound = GetSound(sid + i + _cur_grffile->sound_offset - ORIGINAL_SAMPLE_COUNT);
+ SoundEntry *sound = GetSound(sid + i + _cur.grffile->sound_offset - ORIGINAL_SAMPLE_COUNT);
switch (prop) {
case 0x08: // Relative volume
@@ -2550,12 +2558,12 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr
}
/* Allocate industry tile specs if they haven't been allocated already. */
- if (_cur_grffile->indtspec == NULL) {
- _cur_grffile->indtspec = CallocT<IndustryTileSpec*>(NUM_INDUSTRYTILES);
+ if (_cur.grffile->indtspec == NULL) {
+ _cur.grffile->indtspec = CallocT<IndustryTileSpec*>(NUM_INDUSTRYTILES);
}
for (int i = 0; i < numinfo; i++) {
- IndustryTileSpec *tsp = _cur_grffile->indtspec[indtid + i];
+ IndustryTileSpec *tsp = _cur.grffile->indtspec[indtid + i];
if (prop != 0x08 && tsp == NULL) {
ChangeInfoResult cir = IgnoreIndustryTileProperty(prop, buf);
@@ -2565,7 +2573,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr
switch (prop) {
case 0x08: { // Substitute industry tile type
- IndustryTileSpec **tilespec = &_cur_grffile->indtspec[indtid + i];
+ IndustryTileSpec **tilespec = &_cur.grffile->indtspec[indtid + i];
byte subs_id = buf->ReadByte();
if (subs_id >= NEW_INDUSTRYTILEOFFSET) {
@@ -2590,8 +2598,8 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr
tsp->grf_prop.local_id = indtid + i;
tsp->grf_prop.subst_id = subs_id;
- tsp->grf_prop.grffile = _cur_grffile;
- _industile_mngr.AddEntityID(indtid + i, _cur_grffile->grfid, subs_id); // pre-reserve the tile slot
+ tsp->grf_prop.grffile = _cur.grffile;
+ _industile_mngr.AddEntityID(indtid + i, _cur.grffile->grfid, subs_id); // pre-reserve the tile slot
}
break;
}
@@ -2605,7 +2613,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr
continue;
}
- _industile_mngr.Add(indtid + i, _cur_grffile->grfid, ovrid);
+ _industile_mngr.Add(indtid + i, _cur.grffile->grfid, ovrid);
break;
}
@@ -2613,7 +2621,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr
case 0x0B:
case 0x0C: {
uint16 acctp = buf->ReadWord();
- tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur_grffile);
+ tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur.grffile);
tsp->acceptance[prop - 0x0A] = GB(acctp, 8, 8);
break;
}
@@ -2776,12 +2784,12 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
grfmsg(1, "IndustriesChangeInfo: newid %u", indid);
/* Allocate industry specs if they haven't been allocated already. */
- if (_cur_grffile->industryspec == NULL) {
- _cur_grffile->industryspec = CallocT<IndustrySpec*>(NUM_INDUSTRYTYPES);
+ if (_cur.grffile->industryspec == NULL) {
+ _cur.grffile->industryspec = CallocT<IndustrySpec*>(NUM_INDUSTRYTYPES);
}
for (int i = 0; i < numinfo; i++) {
- IndustrySpec *indsp = _cur_grffile->industryspec[indid + i];
+ IndustrySpec *indsp = _cur.grffile->industryspec[indid + i];
if (prop != 0x08 && indsp == NULL) {
ChangeInfoResult cir = IgnoreIndustryProperty(prop, buf);
@@ -2791,7 +2799,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
switch (prop) {
case 0x08: { // Substitute industry type
- IndustrySpec **indspec = &_cur_grffile->industryspec[indid + i];
+ IndustrySpec **indspec = &_cur.grffile->industryspec[indid + i];
byte subs_id = buf->ReadByte();
if (subs_id == 0xFF) {
@@ -2816,7 +2824,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
indsp->enabled = true;
indsp->grf_prop.local_id = indid + i;
indsp->grf_prop.subst_id = subs_id;
- indsp->grf_prop.grffile = _cur_grffile;
+ indsp->grf_prop.grffile = _cur.grffile;
/* If the grf industry needs to check its surounding upon creation, it should
* rely on callbacks, not on the original placement functions */
indsp->check_proc = CHECK_NOTHING;
@@ -2833,7 +2841,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
continue;
}
indsp->grf_prop.override = ovrid;
- _industry_mngr.Add(indid + i, _cur_grffile->grfid, ovrid);
+ _industry_mngr.Add(indid + i, _cur.grffile->grfid, ovrid);
break;
}
@@ -2895,7 +2903,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
int local_tile_id = buf->ReadWord();
/* Read the ID from the _industile_mngr. */
- int tempid = _industile_mngr.GetID(local_tile_id, _cur_grffile->grfid);
+ int tempid = _industile_mngr.GetID(local_tile_id, _cur.grffile->grfid);
if (tempid == INVALID_INDUSTRYTILE) {
grfmsg(2, "IndustriesChangeInfo: Attempt to use industry tile %u with industry id %u, not yet defined. Ignoring.", local_tile_id, indid);
@@ -2946,17 +2954,17 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
case 0x0C: // Industry closure message
indsp->closure_text = buf->ReadWord();
- _string_to_grf_mapping[&indsp->closure_text] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&indsp->closure_text] = _cur.grffile->grfid;
break;
case 0x0D: // Production increase message
indsp->production_up_text = buf->ReadWord();
- _string_to_grf_mapping[&indsp->production_up_text] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&indsp->production_up_text] = _cur.grffile->grfid;
break;
case 0x0E: // Production decrease message
indsp->production_down_text = buf->ReadWord();
- _string_to_grf_mapping[&indsp->production_down_text] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&indsp->production_down_text] = _cur.grffile->grfid;
break;
case 0x0F: // Fund cost multiplier
@@ -2965,13 +2973,13 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
case 0x10: // Production cargo types
for (byte j = 0; j < 2; j++) {
- indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur_grffile);
+ indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile);
}
break;
case 0x11: // Acceptance cargo types
for (byte j = 0; j < 3; j++) {
- indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur_grffile);
+ indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur.grffile);
}
buf->ReadByte(); // Unnused, eat it up
break;
@@ -3028,7 +3036,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
case 0x1B: // New industry text ID
indsp->new_industry_text = buf->ReadWord();
- _string_to_grf_mapping[&indsp->new_industry_text] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&indsp->new_industry_text] = _cur.grffile->grfid;
break;
case 0x1C: // Input cargo multipliers for the three input cargo types
@@ -3042,7 +3050,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
case 0x1F: // Industry name
indsp->name = buf->ReadWord();
- _string_to_grf_mapping[&indsp->name] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&indsp->name] = _cur.grffile->grfid;
break;
case 0x20: // Prospecting success chance
@@ -3062,7 +3070,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop,
case 0x24: // name for nearby station
indsp->station_name = buf->ReadWord();
- if (indsp->station_name != STR_NULL) _string_to_grf_mapping[&indsp->station_name] = _cur_grffile->grfid;
+ if (indsp->station_name != STR_NULL) _string_to_grf_mapping[&indsp->station_name] = _cur.grffile->grfid;
break;
default:
@@ -3109,12 +3117,12 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B
grfmsg(1, "AirportChangeInfo: newid %u", airport);
/* Allocate industry specs if they haven't been allocated already. */
- if (_cur_grffile->airportspec == NULL) {
- _cur_grffile->airportspec = CallocT<AirportSpec*>(NUM_AIRPORTS);
+ if (_cur.grffile->airportspec == NULL) {
+ _cur.grffile->airportspec = CallocT<AirportSpec*>(NUM_AIRPORTS);
}
for (int i = 0; i < numinfo; i++) {
- AirportSpec *as = _cur_grffile->airportspec[airport + i];
+ AirportSpec *as = _cur.grffile->airportspec[airport + i];
if (as == NULL && prop != 0x08 && prop != 0x09) {
grfmsg(2, "AirportChangeInfo: Attempt to modify undefined airport %u, ignoring", airport + i);
@@ -3136,7 +3144,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B
continue;
}
- AirportSpec **spec = &_cur_grffile->airportspec[airport + i];
+ AirportSpec **spec = &_cur.grffile->airportspec[airport + i];
/* Allocate space for this airport.
* Only need to do it once. If ever it is called again, it should not
* do anything */
@@ -3148,9 +3156,9 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B
as->enabled = true;
as->grf_prop.local_id = airport + i;
as->grf_prop.subst_id = subs_id;
- as->grf_prop.grffile = _cur_grffile;
+ as->grf_prop.grffile = _cur.grffile;
/* override the default airport */
- _airport_mngr.Add(airport + i, _cur_grffile->grfid, subs_id);
+ _airport_mngr.Add(airport + i, _cur.grffile->grfid, subs_id);
/* Create a copy of the original tiletable so it can be freed later. */
DuplicateTileTable(as);
}
@@ -3191,7 +3199,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B
int local_tile_id = buf->ReadWord();
/* Read the ID from the _airporttile_mngr. */
- uint16 tempid = _airporttile_mngr.GetID(local_tile_id, _cur_grffile->grfid);
+ uint16 tempid = _airporttile_mngr.GetID(local_tile_id, _cur.grffile->grfid);
if (tempid == INVALID_AIRPORTTILE) {
grfmsg(2, "AirportChangeInfo: Attempt to use airport tile %u with airport id %u, not yet defined. Ignoring.", local_tile_id, airport + i);
@@ -3251,7 +3259,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B
case 0x10:
as->name = buf->ReadWord();
- _string_to_grf_mapping[&as->name] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&as->name] = _cur.grffile->grfid;
break;
default:
@@ -3310,12 +3318,12 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea
}
/* Allocate object specs if they haven't been allocated already. */
- if (_cur_grffile->objectspec == NULL) {
- _cur_grffile->objectspec = CallocT<ObjectSpec*>(NUM_OBJECTS);
+ if (_cur.grffile->objectspec == NULL) {
+ _cur.grffile->objectspec = CallocT<ObjectSpec*>(NUM_OBJECTS);
}
for (int i = 0; i < numinfo; i++) {
- ObjectSpec *spec = _cur_grffile->objectspec[id + i];
+ ObjectSpec *spec = _cur.grffile->objectspec[id + i];
if (prop != 0x08 && spec == NULL) {
/* If the object property 08 is not yet set, ignore this property */
@@ -3326,7 +3334,7 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea
switch (prop) {
case 0x08: { // Class ID
- ObjectSpec **ospec = &_cur_grffile->objectspec[id + i];
+ ObjectSpec **ospec = &_cur.grffile->objectspec[id + i];
/* Allocate space for this object. */
if (*ospec == NULL) {
@@ -3344,13 +3352,13 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea
case 0x09: { // Class name
StringID class_name = buf->ReadWord();
ObjectClass::SetName(spec->cls_id, class_name);
- _string_to_grf_mapping[&ObjectClass::classes[spec->cls_id].name] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&ObjectClass::classes[spec->cls_id].name] = _cur.grffile->grfid;
break;
}
case 0x0A: // Object name
spec->name = buf->ReadWord();
- _string_to_grf_mapping[&spec->name] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&spec->name] = _cur.grffile->grfid;
break;
case 0x0B: // Climate mask
@@ -3433,7 +3441,7 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR
}
for (int i = 0; i < numinfo; i++) {
- RailType rt = _cur_grffile->railtype_map[id + i];
+ RailType rt = _cur.grffile->railtype_map[id + i];
if (rt == INVALID_RAILTYPE) return CIR_INVALID_ID;
RailtypeInfo *rti = &_railtypes[rt];
@@ -3446,27 +3454,27 @@ static ChangeInfoResult RailTypeChangeInfo(uint id, int numinfo, int prop, ByteR
case 0x09: // Name of railtype
rti->strings.toolbar_caption = buf->ReadWord();
- _string_to_grf_mapping[&rti->strings.toolbar_caption] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&rti->strings.toolbar_caption] = _cur.grffile->grfid;
break;
case 0x0A: // Menu text of railtype
rti->strings.menu_text = buf->ReadWord();
- _string_to_grf_mapping[&rti->strings.menu_text] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&rti->strings.menu_text] = _cur.grffile->grfid;
break;
case 0x0B: // Build window caption
rti->strings.build_caption = buf->ReadWord();
- _string_to_grf_mapping[&rti->strings.build_caption] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&rti->strings.build_caption] = _cur.grffile->grfid;
break;
case 0x0C: // Autoreplace text
rti->strings.replace_text = buf->ReadWord();
- _string_to_grf_mapping[&rti->strings.replace_text] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&rti->strings.replace_text] = _cur.grffile->grfid;
break;
case 0x0D: // New locomotive text
rti->strings.new_loco = buf->ReadWord();
- _string_to_grf_mapping[&rti->strings.new_loco] = _cur_grffile->grfid;
+ _string_to_grf_mapping[&rti->strings.new_loco] = _cur.grffile->grfid;
break;
case 0x0E: // Compatible railtype list
@@ -3560,7 +3568,7 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte
rt = AllocateRailType(rtl);
}
- _cur_grffile->railtype_map[id + i] = rt;
+ _cur.grffile->railtype_map[id + i] = rt;
break;
}
@@ -3613,12 +3621,12 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro
}
/* Allocate airport tile specs if they haven't been allocated already. */
- if (_cur_grffile->airtspec == NULL) {
- _cur_grffile->airtspec = CallocT<AirportTileSpec*>(NUM_AIRPORTTILES);
+ if (_cur.grffile->airtspec == NULL) {
+ _cur.grffile->airtspec = CallocT<AirportTileSpec*>(NUM_AIRPORTTILES);
}
for (int i = 0; i < numinfo; i++) {
- AirportTileSpec *tsp = _cur_grffile->airtspec[airtid + i];
+ AirportTileSpec *tsp = _cur.grffile->airtspec[airtid + i];
if (prop != 0x08 && tsp == NULL) {
grfmsg(2, "AirportTileChangeInfo: Attempt to modify undefined airport tile %u. Ignoring.", airtid + i);
@@ -3627,7 +3635,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro
switch (prop) {
case 0x08: { // Substitute airport tile type
- AirportTileSpec **tilespec = &_cur_grffile->airtspec[airtid + i];
+ AirportTileSpec **tilespec = &_cur.grffile->airtspec[airtid + i];
byte subs_id = buf->ReadByte();
if (subs_id >= NEW_AIRPORTTILE_OFFSET) {
@@ -3648,8 +3656,8 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro
tsp->grf_prop.local_id = airtid + i;
tsp->grf_prop.subst_id = subs_id;
- tsp->grf_prop.grffile = _cur_grffile;
- _airporttile_mngr.AddEntityID(airtid + i, _cur_grffile->grfid, subs_id); // pre-reserve the tile slot
+ tsp->grf_prop.grffile = _cur.grffile;
+ _airporttile_mngr.AddEntityID(airtid + i, _cur.grffile->grfid, subs_id); // pre-reserve the tile slot
}
break;
}
@@ -3663,7 +3671,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro
continue;
}
- _airporttile_mngr.Add(airtid + i, _cur_grffile->grfid, override);
+ _airporttile_mngr.Add(airtid + i, _cur.grffile->grfid, override);
break;
}
@@ -3769,7 +3777,7 @@ static void FeatureChangeInfo(ByteReader *buf)
}
/* Mark the feature as used by the grf */
- SetBit(_cur_grffile->grf_features, feature);
+ SetBit(_cur.grffile->grf_features, feature);
while (numprops-- && buf->HasData()) {
uint8 prop = buf->ReadByte();
@@ -3810,10 +3818,10 @@ static void SafeChangeInfo(ByteReader *buf)
}
}
- SetBit(_cur_grfconfig->flags, GCF_UNSAFE);
+ SetBit(_cur.grfconfig->flags, GCF_UNSAFE);
/* Skip remainder of GRF */
- _skip_sprites = -1;
+ _cur.skip_sprites = -1;
}
/* Action 0x00 (GLS_RESERVE) */
@@ -3869,18 +3877,18 @@ static void NewSpriteSet(ByteReader *buf)
uint8 num_sets = buf->ReadByte();
uint16 num_ents = buf->ReadExtendedByte();
- _cur_grffile->spriteset_start = _cur_spriteid;
- _cur_grffile->spriteset_feature = feature;
- _cur_grffile->spriteset_numsets = num_sets;
- _cur_grffile->spriteset_numents = num_ents;
+ _cur.grffile->spriteset_start = _cur.spriteid;
+ _cur.grffile->spriteset_feature = feature;
+ _cur.grffile->spriteset_numsets = num_sets;
+ _cur.grffile->spriteset_numents = num_ents;
grfmsg(7, "New sprite set at %d of type %d, consisting of %d sets with %d views each (total %d)",
- _cur_spriteid, feature, num_sets, num_ents, num_sets * num_ents
+ _cur.spriteid, feature, num_sets, num_ents, num_sets * num_ents
);
for (int i = 0; i < num_sets * num_ents; i++) {
- _nfo_line++;
- LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
+ _cur.nfo_line++;
+ LoadNextSprite(_cur.spriteid++, _cur.file_index, _cur.nfo_line);
}
}
@@ -3891,9 +3899,9 @@ static void SkipAct1(ByteReader *buf)
uint8 num_sets = buf->ReadByte();
uint16 num_ents = buf->ReadExtendedByte();
- _skip_sprites = num_sets * num_ents;
+ _cur.skip_sprites = num_sets * num_ents;
- grfmsg(3, "SkipAct1: Skipping %d sprites", _skip_sprites);
+ grfmsg(3, "SkipAct1: Skipping %d sprites", _cur.skip_sprites);
}
/* Helper function to either create a callback or link to a previously
@@ -3905,12 +3913,12 @@ static const SpriteGroup *GetGroupFromGroupID(byte setid, byte type, uint16 grou
return new CallbackResultSpriteGroup(groupid);
}
- if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
+ if (groupid >= _cur.grffile->spritegroups_count || _cur.grffile->spritegroups[groupid] == NULL) {
grfmsg(1, "GetGroupFromGroupID(0x%02X:0x%02X): Groupid 0x%04X does not exist, leaving empty", setid, type, groupid);
return NULL;
}
- return _cur_grffile->spritegroups[groupid];
+ return _cur.grffile->spritegroups[groupid];
}
/* Helper function to either create a callback or a result sprite group. */
@@ -3921,31 +3929,31 @@ static const SpriteGroup *CreateGroupFromGroupID(byte feature, byte setid, byte
return new CallbackResultSpriteGroup(spriteid);
}
- if (spriteid >= _cur_grffile->spriteset_numsets) {
- grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set %u invalid, max %u", setid, type, spriteid, _cur_grffile->spriteset_numsets);
+ if (spriteid >= _cur.grffile->spriteset_numsets) {
+ grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set %u invalid, max %u", setid, type, spriteid, _cur.grffile->spriteset_numsets);
return NULL;
}
/* Check if the sprite is within range. This can fail if the Action 0x01
* is skipped, as TTDPatch mandates that Action 0x02s must be processed.
* We don't have that rule, but must live by the Patch... */
- if (_cur_grffile->spriteset_start + spriteid * num_sprites + num_sprites > _cur_spriteid) {
+ if (_cur.grffile->spriteset_start + spriteid * num_sprites + num_sprites > _cur.spriteid) {
grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Real Sprite IDs 0x%04X - 0x%04X do not (all) exist (max 0x%04X), leaving empty",
setid, type,
- _cur_grffile->spriteset_start + spriteid * num_sprites,
- _cur_grffile->spriteset_start + spriteid * num_sprites + num_sprites - 1, _cur_spriteid - 1);
+ _cur.grffile->spriteset_start + spriteid * num_sprites,
+ _cur.grffile->spriteset_start + spriteid * num_sprites + num_sprites - 1, _cur.spriteid - 1);
return NULL;
}
- if (feature != _cur_grffile->spriteset_feature) {
+ if (feature != _cur.grffile->spriteset_feature) {
grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping",
setid, type,
- _cur_grffile->spriteset_feature, feature);
+ _cur.grffile->spriteset_feature, feature);
return NULL;
}
assert(ResultSpriteGroup::CanAllocateItem());
- return new ResultSpriteGroup(_cur_grffile->spriteset_start + spriteid * num_sprites, num_sprites);
+ return new ResultSpriteGroup(_cur.grffile->spriteset_start + spriteid * num_sprites, num_sprites);
}
/* Action 0x02 */
@@ -3967,12 +3975,12 @@ static void NewSpriteGroup(ByteReader *buf)
uint8 setid = buf->ReadByte();
uint8 type = buf->ReadByte();
- if (setid >= _cur_grffile->spritegroups_count) {
+ if (setid >= _cur.grffile->spritegroups_count) {
/* Allocate memory for new sprite group references. */
- _cur_grffile->spritegroups = ReallocT(_cur_grffile->spritegroups, setid + 1);
+ _cur.grffile->spritegroups = ReallocT(_cur.grffile->spritegroups, setid + 1);
/* Initialise new space to NULL */
- for (; _cur_grffile->spritegroups_count < (setid + 1); _cur_grffile->spritegroups_count++) {
- _cur_grffile->spritegroups[_cur_grffile->spritegroups_count] = NULL;
+ for (; _cur.grffile->spritegroups_count < (setid + 1); _cur.grffile->spritegroups_count++) {
+ _cur.grffile->spritegroups[_cur.grffile->spritegroups_count] = NULL;
}
}
@@ -4098,11 +4106,11 @@ static void NewSpriteGroup(ByteReader *buf)
case GSF_AIRPORTS:
case GSF_RAILTYPES:
{
- byte sprites = _cur_grffile->spriteset_numents;
+ byte sprites = _cur.grffile->spriteset_numents;
byte num_loaded = type;
byte num_loading = buf->ReadByte();
- if (_cur_grffile->spriteset_start == 0) {
+ if (_cur.grffile->spriteset_start == 0) {
grfmsg(0, "NewSpriteGroup: No sprite set to work on! Skipping");
return;
}
@@ -4138,8 +4146,8 @@ static void NewSpriteGroup(ByteReader *buf)
case GSF_AIRPORTTILES:
case GSF_OBJECTS:
case GSF_INDUSTRYTILES: {
- byte num_spriteset_ents = _cur_grffile->spriteset_numents;
- byte num_spritesets = _cur_grffile->spriteset_numsets;
+ byte num_spriteset_ents = _cur.grffile->spriteset_numents;
+ byte num_spritesets = _cur.grffile->spriteset_numsets;
byte num_building_sprites = max((uint8)1, type);
assert(TileLayoutSpriteGroup::CanAllocateItem());
@@ -4149,7 +4157,7 @@ static void NewSpriteGroup(ByteReader *buf)
group->num_building_stages = max((uint8)1, num_spriteset_ents);
/* On error, bail out immediately. Temporary GRF data was already freed */
- if (ReadSpriteLayout(buf, num_building_sprites, _cur_grffile->spriteset_start, num_spriteset_ents, num_spritesets, false, type == 0, &group->dts)) return;
+ if (ReadSpriteLayout(buf, num_building_sprites, _cur.grffile->spriteset_start, num_spriteset_ents, num_spritesets, false, type == 0, &group->dts)) return;
break;
}
@@ -4189,7 +4197,7 @@ static void NewSpriteGroup(ByteReader *buf)
}
}
- _cur_grffile->spritegroups[setid] = act_group;
+ _cur.grffile->spritegroups[setid] = act_group;
}
static CargoID TranslateCargo(uint8 feature, uint8 ctype)
@@ -4207,7 +4215,7 @@ static CargoID TranslateCargo(uint8 feature, uint8 ctype)
if (feature == GSF_STATIONS && ctype == 0xFE) return CT_DEFAULT_NA;
if (ctype == 0xFF) return CT_PURCHASE;
- if (_cur_grffile->cargo_max == 0) {
+ if (_cur.grffile->cargo_max == 0) {
/* No cargo table, so use bitnum values */
if (ctype >= 32) {
grfmsg(1, "TranslateCargo: Cargo bitnum %d out of range (max 31), skipping.", ctype);
@@ -4227,13 +4235,13 @@ static CargoID TranslateCargo(uint8 feature, uint8 ctype)
}
/* Check if the cargo type is out of bounds of the cargo translation table */
- if (ctype >= _cur_grffile->cargo_max) {
- grfmsg(1, "TranslateCargo: Cargo type %d out of range (max %d), skipping.", ctype, _cur_grffile->cargo_max - 1);
+ if (ctype >= _cur.grffile->cargo_max) {
+ grfmsg(1, "TranslateCargo: Cargo type %d out of range (max %d), skipping.", ctype, _cur.grffile->cargo_max - 1);
return CT_INVALID;
}
/* Look up the cargo label from the translation table */
- CargoLabel cl = _cur_grffile->cargo_list[ctype];
+ CargoLabel cl = _cur.grffile->cargo_list[ctype];
if (cl == 0) {
grfmsg(5, "TranslateCargo: Cargo type %d not available in this climate, skipping.", ctype);
return CT_INVALID;
@@ -4252,8 +4260,8 @@ static CargoID TranslateCargo(uint8 feature, uint8 ctype)
static bool IsValidGroupID(uint16 groupid, const char *function)
{
- if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
- grfmsg(1, "%s: Spriteset 0x%04X out of range (maximum 0x%02X) or empty, skipping.", function, groupid, _cur_grffile->spritegroups_count - 1);
+ if (groupid >= _cur.grffile->spritegroups_count || _cur.grffile->spritegroups[groupid] == NULL) {
+ grfmsg(1, "%s: Spriteset 0x%04X out of range (maximum 0x%02X) or empty, skipping.", function, groupid, _cur.grffile->spritegroups_count - 1);
return false;
}
@@ -4288,7 +4296,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, byte feature, uint8 idcount)
EngineID *engines = AllocaM(EngineID, idcount);
for (uint i = 0; i < idcount; i++) {
- Engine *e = GetNewEngine(_cur_grffile, (VehicleType)feature, buf->ReadExtendedByte());
+ Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte());
if (e == NULL) {
/* No engine could be allocated?!? Deal with it. Okay,
* this might look bad. Also make sure this NewGRF
@@ -4318,9 +4326,9 @@ static void VehicleMapSpriteGroup(ByteReader *buf, byte feature, uint8 idcount)
grfmsg(7, "VehicleMapSpriteGroup: [%d] Engine %d...", i, engine);
if (wagover) {
- SetWagonOverrideSprites(engine, ctype, _cur_grffile->spritegroups[groupid], last_engines, last_engines_count);
+ SetWagonOverrideSprites(engine, ctype, _cur.grffile->spritegroups[groupid], last_engines, last_engines_count);
} else {
- SetCustomEngineSprites(engine, ctype, _cur_grffile->spritegroups[groupid]);
+ SetCustomEngineSprites(engine, ctype, _cur.grffile->spritegroups[groupid]);
}
}
}
@@ -4334,10 +4342,10 @@ static void VehicleMapSpriteGroup(ByteReader *buf, byte feature, uint8 idcount)
EngineID engine = engines[i];
if (wagover) {
- SetWagonOverrideSprites(engine, CT_DEFAULT, _cur_grffile->spritegroups[groupid], last_engines, last_engines_count);
+ SetWagonOverrideSprites(engine, CT_DEFAULT, _cur.grffile->spritegroups[groupid], last_engines, last_engines_count);
} else {
- SetCustomEngineSprites(engine, CT_DEFAULT, _cur_grffile->spritegroups[groupid]);
- SetEngineGRF(engine, _cur_grffile);
+ SetCustomEngineSprites(engine, CT_DEFAULT, _cur.grffile->spritegroups[groupid]);
+ SetEngineGRF(engine, _cur.grffile);
}
}
}
@@ -4364,8 +4372,8 @@ static void CanalMapSpriteGroup(ByteReader *buf, uint8 idcount)
continue;
}
- _water_feature[cf].grffile = _cur_grffile;
- _water_feature[cf].group = _cur_grffile->spritegroups[groupid];
+ _water_feature[cf].grffile = _cur.grffile;
+ _water_feature[cf].group = _cur.grffile->spritegroups[groupid];
}
}
@@ -4387,14 +4395,14 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount)
if (ctype == CT_INVALID) continue;
for (uint i = 0; i < idcount; i++) {
- StationSpec *statspec = _cur_grffile->stations == NULL ? NULL : _cur_grffile->stations[stations[i]];
+ StationSpec *statspec = _cur.grffile->stations == NULL ? NULL : _cur.grffile->stations[stations[i]];
if (statspec == NULL) {
grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stations[i]);
continue;
}
- statspec->grf_prop.spritegroup[ctype] = _cur_grffile->spritegroups[groupid];
+ statspec->grf_prop.spritegroup[ctype] = _cur.grffile->spritegroups[groupid];
}
}
@@ -4402,7 +4410,7 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount)
if (!IsValidGroupID(groupid, "StationMapSpriteGroup")) return;
for (uint i = 0; i < idcount; i++) {
- StationSpec *statspec = _cur_grffile->stations == NULL ? NULL : _cur_grffile->stations[stations[i]];
+ StationSpec *statspec = _cur.grffile->stations == NULL ? NULL : _cur.grffile->stations[stations[i]];
if (statspec == NULL) {
grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stations[i]);
@@ -4414,8 +4422,8 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount)
continue;
}
- statspec->grf_prop.spritegroup[CT_DEFAULT] = _cur_grffile->spritegroups[groupid];
- statspec->grf_prop.grffile = _cur_grffile;
+ statspec->grf_prop.spritegroup[CT_DEFAULT] = _cur.grffile->spritegroups[groupid];
+ statspec->grf_prop.grffile = _cur.grffile;
statspec->grf_prop.local_id = stations[i];
StationClass::Assign(statspec);
}
@@ -4436,20 +4444,20 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount)
uint16 groupid = buf->ReadWord();
if (!IsValidGroupID(groupid, "TownHouseMapSpriteGroup")) return;
- if (_cur_grffile->housespec == NULL) {
+ if (_cur.grffile->housespec == NULL) {
grfmsg(1, "TownHouseMapSpriteGroup: No houses defined, skipping");
return;
}
for (uint i = 0; i < idcount; i++) {
- HouseSpec *hs = _cur_grffile->housespec[houses[i]];
+ HouseSpec *hs = _cur.grffile->housespec[houses[i]];
if (hs == NULL) {
grfmsg(1, "TownHouseMapSpriteGroup: House %d undefined, skipping.", houses[i]);
continue;
}
- hs->grf_prop.spritegroup[0] = _cur_grffile->spritegroups[groupid];
+ hs->grf_prop.spritegroup[0] = _cur.grffile->spritegroups[groupid];
}
}
@@ -4467,20 +4475,20 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount)
uint16 groupid = buf->ReadWord();
if (!IsValidGroupID(groupid, "IndustryMapSpriteGroup")) return;
- if (_cur_grffile->industryspec == NULL) {
+ if (_cur.grffile->industryspec == NULL) {
grfmsg(1, "IndustryMapSpriteGroup: No industries defined, skipping");
return;
}
for (uint i = 0; i < idcount; i++) {
- IndustrySpec *indsp = _cur_grffile->industryspec[industries[i]];
+ IndustrySpec *indsp = _cur.grffile->industryspec[industries[i]];
if (indsp == NULL) {
grfmsg(1, "IndustryMapSpriteGroup: Industry %d undefined, skipping", industries[i]);
continue;
}
- indsp->grf_prop.spritegroup[0] = _cur_grffile->spritegroups[groupid];
+ indsp->grf_prop.spritegroup[0] = _cur.grffile->spritegroups[groupid];
}
}
@@ -4498,20 +4506,20 @@ static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8 idcount)
uint16 groupid = buf->ReadWord();
if (!IsValidGroupID(groupid, "IndustrytileMapSpriteGroup")) return;
- if (_cur_grffile->indtspec == NULL) {
+ if (_cur.grffile->indtspec == NULL) {
grfmsg(1, "IndustrytileMapSpriteGroup: No industry tiles defined, skipping");
return;
}
for (uint i = 0; i < idcount; i++) {
- IndustryTileSpec *indtsp = _cur_grffile->indtspec[indtiles[i]];
+ IndustryTileSpec *indtsp = _cur.grffile->indtspec[indtiles[i]];
if (indtsp == NULL) {
grfmsg(1, "IndustrytileMapSpriteGroup: Industry tile %d undefined, skipping", indtiles[i]);
continue;
}
- indtsp->grf_prop.spritegroup[0] = _cur_grffile->spritegroups[groupid];
+ indtsp->grf_prop.spritegroup[0] = _cur.grffile->spritegroups[groupid];
}
}
@@ -4538,14 +4546,14 @@ static void CargoMapSpriteGroup(ByteReader *buf, uint8 idcount)
}
CargoSpec *cs = CargoSpec::Get(cid);
- cs->grffile = _cur_grffile;
- cs->group = _cur_grffile->spritegroups[groupid];
+ cs->grffile = _cur.grffile;
+ cs->group = _cur.grffile->spritegroups[groupid];
}
}
static void ObjectMapSpriteGroup(ByteReader *buf, uint8 idcount)
{
- if (_cur_grffile->objectspec == NULL) {
+ if (_cur.grffile->objectspec == NULL) {
grfmsg(1, "ObjectMapSpriteGroup: No object tiles defined, skipping");
return;
}
@@ -4565,14 +4573,14 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8 idcount)
if (ctype == CT_INVALID) continue;
for (uint i = 0; i < idcount; i++) {
- ObjectSpec *spec = _cur_grffile->objectspec[objects[i]];
+ ObjectSpec *spec = _cur.grffile->objectspec[objects[i]];
if (spec == NULL) {
grfmsg(1, "ObjectMapSpriteGroup: Object with ID 0x%02X undefined, skipping", objects[i]);
continue;
}
- spec->grf_prop.spritegroup[ctype] = _cur_grffile->spritegroups[groupid];
+ spec->grf_prop.spritegroup[ctype] = _cur.grffile->spritegroups[groupid];
}
}
@@ -4580,7 +4588,7 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8 idcount)
if (!IsValidGroupID(groupid, "ObjectMapSpriteGroup")) return;
for (uint i = 0; i < idcount; i++) {
- ObjectSpec *spec = _cur_grffile->objectspec[objects[i]];
+ ObjectSpec *spec = _cur.grffile->objectspec[objects[i]];
if (spec == NULL) {
grfmsg(1, "ObjectMapSpriteGroup: Object with ID 0x%02X undefined, skipping", objects[i]);
@@ -4592,8 +4600,8 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8 idcount)
continue;
}
- spec->grf_prop.spritegroup[0] = _cur_grffile->spritegroups[groupid];
- spec->grf_prop.grffile = _cur_grffile;
+ spec->grf_prop.spritegroup[0] = _cur.grffile->spritegroups[groupid];
+ spec->grf_prop.grffile = _cur.grffile;
spec->grf_prop.local_id = objects[i];
}
}
@@ -4602,7 +4610,7 @@ static void RailTypeMapSpriteGroup(ByteReader *buf, uint8 idcount)
{
uint8 *railtypes = AllocaM(uint8, idcount);
for (uint i = 0; i < idcount; i++) {
- railtypes[i] = _cur_grffile->railtype_map[buf->ReadByte()];
+ railtypes[i] = _cur.grffile->railtype_map[buf->ReadByte()];
}
uint8 cidcount = buf->ReadByte();
@@ -4618,8 +4626,8 @@ static void RailTypeMapSpriteGroup(ByteReader *buf, uint8 idcount)
if (railtypes[i] != INVALID_RAILTYPE) {
RailtypeInfo *rti = &_railtypes[railtypes[i]];
- rti->grffile[ctype] = _cur_grffile;
- rti->group[ctype] = _cur_grffile->spritegroups[groupid];
+ rti->grffile[ctype] = _cur.grffile;
+ rti->group[ctype] = _cur.grffile->spritegroups[groupid];
}
}
}
@@ -4642,20 +4650,20 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount)
uint16 groupid = buf->ReadWord();
if (!IsValidGroupID(groupid, "AirportMapSpriteGroup")) return;
- if (_cur_grffile->airportspec == NULL) {
+ if (_cur.grffile->airportspec == NULL) {
grfmsg(1, "AirportMapSpriteGroup: No airports defined, skipping");
return;
}
for (uint i = 0; i < idcount; i++) {
- AirportSpec *as = _cur_grffile->airportspec[airports[i]];
+ AirportSpec *as = _cur.grffile->airportspec[airports[i]];
if (as == NULL) {
grfmsg(1, "AirportMapSpriteGroup: Airport %d undefined, skipping", airports[i]);
continue;
}
- as->grf_prop.spritegroup[0] = _cur_grffile->spritegroups[groupid];
+ as->grf_prop.spritegroup[0] = _cur.grffile->spritegroups[groupid];
}
}
@@ -4673,20 +4681,20 @@ static void AirportTileMapSpriteGroup(ByteReader *buf, uint8 idcount)
uint16 groupid = buf->ReadWord();
if (!IsValidGroupID(groupid, "AirportTileMapSpriteGroup")) return;
- if (_cur_grffile->airtspec == NULL) {
+ if (_cur.grffile->airtspec == NULL) {
grfmsg(1, "AirportTileMapSpriteGroup: No airport tiles defined, skipping");
return;
}
for (uint i = 0; i < idcount; i++) {
- AirportTileSpec *airtsp = _cur_grffile->airtspec[airptiles[i]];
+ AirportTileSpec *airtsp = _cur.grffile->airtspec[airptiles[i]];
if (airtsp == NULL) {
grfmsg(1, "AirportTileMapSpriteGroup: Airport tile %d undefined, skipping", airptiles[i]);
continue;
}
- airtsp->grf_prop.spritegroup[0] = _cur_grffile->spritegroups[groupid];
+ airtsp->grf_prop.spritegroup[0] = _cur.grffile->spritegroups[groupid];
}
}
@@ -4708,7 +4716,7 @@ static void FeatureMapSpriteGroup(ByteReader *buf)
* W cid cargo ID (sprite group ID) for this type of cargo
* W def-cid default cargo ID (sprite group ID) */
- if (_cur_grffile->spritegroups == NULL) {
+ if (_cur.grffile->spritegroups == NULL) {
grfmsg(1, "FeatureMapSpriteGroup: No sprite groups to work on! Skipping");
return;
}
@@ -4725,12 +4733,12 @@ static void FeatureMapSpriteGroup(ByteReader *buf)
grfmsg(6, "FeatureMapSpriteGroup: Adding generic feature callback for feature %d", feature);
- AddGenericCallback(feature, _cur_grffile, _cur_grffile->spritegroups[groupid]);
+ AddGenericCallback(feature, _cur.grffile, _cur.grffile->spritegroups[groupid]);
return;
}
/* Mark the feature as used by the grf (generic callbacks do not count) */
- SetBit(_cur_grffile->grf_features, feature);
+ SetBit(_cur.grffile->grf_features, feature);
grfmsg(6, "FeatureMapSpriteGroup: Feature %d, %d ids", feature, idcount);
@@ -4807,7 +4815,7 @@ static void FeatureNewName(ByteReader *buf)
* S data new texts, each of them zero-terminated, after
* which the next name begins. */
- bool new_scheme = _cur_grffile->grf_version >= 7;
+ bool new_scheme = _cur.grffile->grf_version >= 7;
uint8 feature = buf->ReadByte();
uint8 lang = buf->ReadByte();
@@ -4839,17 +4847,17 @@ static void FeatureNewName(ByteReader *buf)
case GSF_SHIPS:
case GSF_AIRCRAFT:
if (!generic) {
- Engine *e = GetNewEngine(_cur_grffile, (VehicleType)feature, id, HasBit(_cur_grfconfig->flags, GCF_STATIC));
+ Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, id, HasBit(_cur.grfconfig->flags, GCF_STATIC));
if (e == NULL) break;
- StringID string = AddGRFString(_cur_grffile->grfid, e->index, lang, new_scheme, name, e->info.string_id);
+ StringID string = AddGRFString(_cur.grffile->grfid, e->index, lang, new_scheme, name, e->info.string_id);
e->info.string_id = string;
} else {
- AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+ AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
}
break;
case GSF_INDUSTRIES: {
- AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+ AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
break;
}
@@ -4857,35 +4865,35 @@ static void FeatureNewName(ByteReader *buf)
default:
switch (GB(id, 8, 8)) {
case 0xC4: // Station class name
- if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
+ if (_cur.grffile->stations == NULL || _cur.grffile->stations[GB(id, 0, 8)] == NULL) {
grfmsg(1, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring", GB(id, 0, 8));
} else {
- StationClassID cls_id = _cur_grffile->stations[GB(id, 0, 8)]->cls_id;
- StationClass::SetName(cls_id, AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED));
+ StationClassID cls_id = _cur.grffile->stations[GB(id, 0, 8)]->cls_id;
+ StationClass::SetName(cls_id, AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED));
}
break;
case 0xC5: // Station name
- if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
+ if (_cur.grffile->stations == NULL || _cur.grffile->stations[GB(id, 0, 8)] == NULL) {
grfmsg(1, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring", GB(id, 0, 8));
} else {
- _cur_grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+ _cur.grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
}
break;
case 0xC7: // Airporttile name
- if (_cur_grffile->airtspec == NULL || _cur_grffile->airtspec[GB(id, 0, 8)] == NULL) {
+ if (_cur.grffile->airtspec == NULL || _cur.grffile->airtspec[GB(id, 0, 8)] == NULL) {
grfmsg(1, "FeatureNewName: Attempt to name undefined airport tile 0x%X, ignoring", GB(id, 0, 8));
} else {
- _cur_grffile->airtspec[GB(id, 0, 8)]->name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+ _cur.grffile->airtspec[GB(id, 0, 8)]->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
}
break;
case 0xC9: // House name
- if (_cur_grffile->housespec == NULL || _cur_grffile->housespec[GB(id, 0, 8)] == NULL) {
+ if (_cur.grffile->housespec == NULL || _cur.grffile->housespec[GB(id, 0, 8)] == NULL) {
grfmsg(1, "FeatureNewName: Attempt to name undefined house 0x%X, ignoring.", GB(id, 0, 8));
} else {
- _cur_grffile->housespec[GB(id, 0, 8)]->building_name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+ _cur.grffile->housespec[GB(id, 0, 8)]->building_name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
}
break;
@@ -4894,7 +4902,7 @@ static void FeatureNewName(ByteReader *buf)
case 0xD2:
case 0xD3:
case 0xDC:
- AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+ AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
break;
default:
@@ -4993,20 +5001,20 @@ static void GraphicsNew(ByteReader *buf)
uint16 offset = HasBit(type, 7) ? buf->ReadExtendedByte() : 0;
ClrBit(type, 7); // Clear the high bit as that only indicates whether there is an offset.
- if ((type == 0x0D) && (num == 10) && _cur_grffile->is_ottdfile) {
+ if ((type == 0x0D) && (num == 10) && _cur.grffile->is_ottdfile) {
/* Special not-TTDP-compatible case used in openttd.grf
* Missing shore sprites and initialisation of SPR_SHORE_BASE */
grfmsg(2, "GraphicsNew: Loading 10 missing shore sprites from extra grf.");
- LoadNextSprite(SPR_SHORE_BASE + 0, _file_index, _nfo_line++); // SLOPE_STEEP_S
- LoadNextSprite(SPR_SHORE_BASE + 5, _file_index, _nfo_line++); // SLOPE_STEEP_W
- LoadNextSprite(SPR_SHORE_BASE + 7, _file_index, _nfo_line++); // SLOPE_WSE
- LoadNextSprite(SPR_SHORE_BASE + 10, _file_index, _nfo_line++); // SLOPE_STEEP_N
- LoadNextSprite(SPR_SHORE_BASE + 11, _file_index, _nfo_line++); // SLOPE_NWS
- LoadNextSprite(SPR_SHORE_BASE + 13, _file_index, _nfo_line++); // SLOPE_ENW
- LoadNextSprite(SPR_SHORE_BASE + 14, _file_index, _nfo_line++); // SLOPE_SEN
- LoadNextSprite(SPR_SHORE_BASE + 15, _file_index, _nfo_line++); // SLOPE_STEEP_E
- LoadNextSprite(SPR_SHORE_BASE + 16, _file_index, _nfo_line++); // SLOPE_EW
- LoadNextSprite(SPR_SHORE_BASE + 17, _file_index, _nfo_line++); // SLOPE_NS
+ LoadNextSprite(SPR_SHORE_BASE + 0, _cur.file_index, _cur.nfo_line++); // SLOPE_STEEP_S
+ LoadNextSprite(SPR_SHORE_BASE + 5, _cur.file_index, _cur.nfo_line++); // SLOPE_STEEP_W
+ LoadNextSprite(SPR_SHORE_BASE + 7, _cur.file_index, _cur.nfo_line++); // SLOPE_WSE
+ LoadNextSprite(SPR_SHORE_BASE + 10, _cur.file_index, _cur.nfo_line++); // SLOPE_STEEP_N
+ LoadNextSprite(SPR_SHORE_BASE + 11, _cur.file_index, _cur.nfo_line++); // SLOPE_NWS
+ LoadNextSprite(SPR_SHORE_BASE + 13, _cur.file_index, _cur.nfo_line++); // SLOPE_ENW
+ LoadNextSprite(SPR_SHORE_BASE + 14, _cur.file_index, _cur.nfo_line++); // SLOPE_SEN
+ LoadNextSprite(SPR_SHORE_BASE + 15, _cur.file_index, _cur.nfo_line++); // SLOPE_STEEP_E
+ LoadNextSprite(SPR_SHORE_BASE + 16, _cur.file_index, _cur.nfo_line++); // SLOPE_EW
+ LoadNextSprite(SPR_SHORE_BASE + 17, _cur.file_index, _cur.nfo_line++); // SLOPE_NS
if (_loaded_newgrf_features.shore == SHORE_REPLACE_NONE) _loaded_newgrf_features.shore = SHORE_REPLACE_ONLY_NEW;
return;
}
@@ -5014,7 +5022,7 @@ static void GraphicsNew(ByteReader *buf)
/* Supported type? */
if ((type >= lengthof(_action5_types)) || (_action5_types[type].block_type == A5BLOCK_INVALID)) {
grfmsg(2, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring)", type, num);
- _skip_sprites = num;
+ _cur.skip_sprites = num;
return;
}
@@ -5030,7 +5038,7 @@ static void GraphicsNew(ByteReader *buf)
* This does not make sense, if <offset> is allowed */
if ((action5_type->block_type == A5BLOCK_FIXED) && (num < action5_type->min_sprites)) {
grfmsg(1, "GraphicsNew: %s (type 0x%02X) count must be at least %d. Only %d were specified. Skipping.", action5_type->name, type, action5_type->min_sprites, num);
- _skip_sprites = num;
+ _cur.skip_sprites = num;
return;
}
@@ -5042,13 +5050,13 @@ static void GraphicsNew(ByteReader *buf)
grfmsg(2, "GraphicsNew: Replacing sprites %d to %d of %s (type 0x%02X) at SpriteID 0x%04X", offset, offset + num - 1, action5_type->name, type, replace);
for (; num > 0; num--) {
- _nfo_line++;
- LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index, _nfo_line);
+ _cur.nfo_line++;
+ LoadNextSprite(replace == 0 ? _cur.spriteid++ : replace++, _cur.file_index, _cur.nfo_line);
}
if (type == 0x0D) _loaded_newgrf_features.shore = SHORE_REPLACE_ACTION_5;
- _skip_sprites = skip_num;
+ _cur.skip_sprites = skip_num;
}
/* Action 0x05 (SKIP) */
@@ -5058,9 +5066,9 @@ static void SkipAct5(ByteReader *buf)
buf->ReadByte();
/* Skip the sprites of this action */
- _skip_sprites = buf->ReadExtendedByte();
+ _cur.skip_sprites = buf->ReadExtendedByte();
- grfmsg(3, "SkipAct5: Skipping %d sprites", _skip_sprites);
+ grfmsg(3, "SkipAct5: Skipping %d sprites", _cur.skip_sprites);
}
/**
@@ -5147,11 +5155,11 @@ bool GetGlobalVariable(byte param, uint32 *value)
}
case 0x0D: // TTD Version, 00=DOS, 01=Windows
- *value = _cur_grfconfig->palette & GRFP_USE_MASK;
+ *value = _cur.grfconfig->palette & GRFP_USE_MASK;
return true;
case 0x0E: // Y-offset for train sprites
- *value = _cur_grffile->traininfo_vehicle_pitch;
+ *value = _cur.grffile->traininfo_vehicle_pitch;
return true;
case 0x0F: // Rail track type cost factors
@@ -5198,7 +5206,7 @@ bool GetGlobalVariable(byte param, uint32 *value)
/* Add the local flags */
assert(!HasBit(*value, GMB_TRAIN_WIDTH_32_PIXELS));
- if (_cur_grffile->traininfo_vehicle_width == VEHICLEINFO_FULL_VEHICLE_WIDTH) SetBit(*value, GMB_TRAIN_WIDTH_32_PIXELS);
+ if (_cur.grffile->traininfo_vehicle_width == VEHICLEINFO_FULL_VEHICLE_WIDTH) SetBit(*value, GMB_TRAIN_WIDTH_32_PIXELS);
return true;
/* case 0x1F: // locale dependent settings not implemented to avoid desync */
@@ -5238,9 +5246,9 @@ static uint32 GetParamVal(byte param, uint32 *cond_val)
case 0x84: { // GRF loading stage
uint32 res = 0;
- if (_cur_stage > GLS_INIT) SetBit(res, 0);
- if (_cur_stage == GLS_RESERVE) SetBit(res, 8);
- if (_cur_stage == GLS_ACTIVATION) SetBit(res, 9);
+ if (_cur.stage > GLS_INIT) SetBit(res, 0);
+ if (_cur.stage == GLS_RESERVE) SetBit(res, 8);
+ if (_cur.stage == GLS_ACTIVATION) SetBit(res, 9);
return res;
}
@@ -5261,7 +5269,7 @@ static uint32 GetParamVal(byte param, uint32 *cond_val)
default:
/* GRF Parameter */
- if (param < 0x80) return _cur_grffile->GetParam(param);
+ if (param < 0x80) return _cur.grffile->GetParam(param);
/* In-game variable. */
grfmsg(1, "Unsupported in-game variable 0x%02X", param);
@@ -5304,7 +5312,7 @@ static void CfgApply(ByteReader *buf)
return;
}
- GRFLocation location(_cur_grfconfig->ident.grfid, _nfo_line + 1);
+ GRFLocation location(_cur.grfconfig->ident.grfid, _cur.nfo_line + 1);
GRFLineToSpriteOverride::iterator it = _grf_line_to_action6_sprite_override.find(location);
if (it != _grf_line_to_action6_sprite_override.end()) {
free(preload_sprite);
@@ -5340,7 +5348,7 @@ static void CfgApply(ByteReader *buf)
/* If the parameter is a GRF parameter (not an internal variable) check
* if it (and all further sequential parameters) has been defined. */
- if (param_num < 0x80 && (param_num + (param_size - 1) / 4) >= _cur_grffile->param_end) {
+ if (param_num < 0x80 && (param_num + (param_size - 1) / 4) >= _cur.grffile->param_end) {
grfmsg(2, "CfgApply: Ignoring (param %d not set)", (param_num + (param_size - 1) / 4));
break;
}
@@ -5378,7 +5386,7 @@ static void CfgApply(ByteReader *buf)
static void DisableStaticNewGRFInfluencingNonStaticNewGRFs(GRFConfig *c)
{
GRFError *error = DisableGrf(STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC, c);
- error->data = strdup(_cur_grfconfig->GetName());
+ error->data = strdup(_cur.grfconfig->GetName());
}
/* Action 0x07
@@ -5414,7 +5422,7 @@ static void SkipIf(ByteReader *buf)
default: break;
}
- if (param < 0x80 && _cur_grffile->param_end <= param) {
+ if (param < 0x80 && _cur.grffile->param_end <= param) {
grfmsg(7, "SkipIf: Param %d undefined, skipping test", param);
return;
}
@@ -5436,7 +5444,7 @@ static void SkipIf(ByteReader *buf)
GRFConfig *c = GetGRFConfig(cond_val, mask);
- if (c != NULL && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur_grfconfig->flags, GCF_STATIC) && _networking) {
+ if (c != NULL && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) {
DisableStaticNewGRFInfluencingNonStaticNewGRFs(c);
c = NULL;
}
@@ -5511,13 +5519,13 @@ static void SkipIf(ByteReader *buf)
* the current nfo_line. If no matching label is found, the first matching
* label in the file is used. */
GRFLabel *choice = NULL;
- for (GRFLabel *label = _cur_grffile->label; label != NULL; label = label->next) {
+ for (GRFLabel *label = _cur.grffile->label; label != NULL; label = label->next) {
if (label->label != numsprites) continue;
/* Remember a goto before the current line */
if (choice == NULL) choice = label;
/* If we find a label here, this is definitely good */
- if (label->nfo_line > _nfo_line) {
+ if (label->nfo_line > _cur.nfo_line) {
choice = label;
break;
}
@@ -5526,20 +5534,20 @@ static void SkipIf(ByteReader *buf)
if (choice != NULL) {
grfmsg(2, "SkipIf: Jumping to label 0x%0X at line %d, test was true", choice->label, choice->nfo_line);
FioSeekTo(choice->pos, SEEK_SET);
- _nfo_line = choice->nfo_line;
+ _cur.nfo_line = choice->nfo_line;
return;
}
grfmsg(2, "SkipIf: Skipping %d sprites, test was true", numsprites);
- _skip_sprites = numsprites;
- if (_skip_sprites == 0) {
+ _cur.skip_sprites = numsprites;
+ if (_cur.skip_sprites == 0) {
/* Zero means there are no sprites to skip, so
* we use -1 to indicate that all further
* sprites should be skipped. */
- _skip_sprites = -1;
+ _cur.skip_sprites = -1;
/* If an action 8 hasn't been encountered yet, disable the grf. */
- if (_cur_grfconfig->status != (_cur_stage < GLS_RESERVE ? GCS_INITIALISED : GCS_ACTIVATED)) {
+ if (_cur.grfconfig->status != (_cur.stage < GLS_RESERVE ? GCS_INITIALISED : GCS_ACTIVATED)) {
DisableGrf();
}
}
@@ -5553,25 +5561,25 @@ static void ScanInfo(ByteReader *buf)
uint32 grfid = buf->ReadDWord();
const char *name = buf->ReadString();
- _cur_grfconfig->ident.grfid = grfid;
+ _cur.grfconfig->ident.grfid = grfid;
if (grf_version < 2 || grf_version > 7) {
- SetBit(_cur_grfconfig->flags, GCF_INVALID);
- DEBUG(grf, 0, "%s: NewGRF \"%s\" (GRFID %08X) uses GRF version %d, which is incompatible with this version of OpenTTD.", _cur_grfconfig->filename, name, BSWAP32(grfid), grf_version);
+ SetBit(_cur.grfconfig->flags, GCF_INVALID);
+ DEBUG(grf, 0, "%s: NewGRF \"%s\" (GRFID %08X) uses GRF version %d, which is incompatible with this version of OpenTTD.", _cur.grfconfig->filename, name, BSWAP32(grfid), grf_version);
}
/* GRF IDs starting with 0xFF are reserved for internal TTDPatch use */
- if (GB(grfid, 24, 8) == 0xFF) SetBit(_cur_grfconfig->flags, GCF_SYSTEM);
+ if (GB(grfid, 24, 8) == 0xFF) SetBit(_cur.grfconfig->flags, GCF_SYSTEM);
- AddGRFTextToList(&_cur_grfconfig->name->text, 0x7F, grfid, name);
+ AddGRFTextToList(&_cur.grfconfig->name->text, 0x7F, grfid, name);
if (buf->HasData()) {
const char *info = buf->ReadString();
- AddGRFTextToList(&_cur_grfconfig->info->text, 0x7F, grfid, info);
+ AddGRFTextToList(&_cur.grfconfig->info->text, 0x7F, grfid, info);
}
/* GLS_INFOSCAN only looks for the action 8, so we can skip the rest of the file */
- _skip_sprites = -1;
+ _cur.skip_sprites = -1;
}
/* Action 0x08 */
@@ -5588,21 +5596,21 @@ static void GRFInfo(ByteReader *buf)
uint32 grfid = buf->ReadDWord();
const char *name = buf->ReadString();
- if (_cur_stage < GLS_RESERVE && _cur_grfconfig->status != GCS_UNKNOWN) {
+ if (_cur.stage < GLS_RESERVE && _cur.grfconfig->status != GCS_UNKNOWN) {
DisableGrf(STR_NEWGRF_ERROR_MULTIPLE_ACTION_8);
return;
}
- if (_cur_grffile->grfid != grfid) {
- DEBUG(grf, 0, "GRFInfo: GRFID %08X in FILESCAN stage does not match GRFID %08X in INIT/RESERVE/ACTIVATION stage", BSWAP32(_cur_grffile->grfid), BSWAP32(grfid));
- _cur_grffile->grfid = grfid;
+ if (_cur.grffile->grfid != grfid) {
+ DEBUG(grf, 0, "GRFInfo: GRFID %08X in FILESCAN stage does not match GRFID %08X in INIT/RESERVE/ACTIVATION stage", BSWAP32(_cur.grffile->grfid), BSWAP32(grfid));
+ _cur.grffile->grfid = grfid;
}
- _cur_grffile->grf_version = version;
- _cur_grfconfig->status = _cur_stage < GLS_RESERVE ? GCS_INITIALISED : GCS_ACTIVATED;
+ _cur.grffile->grf_version = version;
+ _cur.grfconfig->status = _cur.stage < GLS_RESERVE ? GCS_INITIALISED : GCS_ACTIVATED;
/* Do swap the GRFID for displaying purposes since people expect that */
- DEBUG(grf, 1, "GRFInfo: Loaded GRFv%d set %08X - %s (palette: %s, version: %i)", version, BSWAP32(grfid), name, (_cur_grfconfig->palette & GRFP_USE_MASK) ? "Windows" : "DOS", _cur_grfconfig->version);
+ DEBUG(grf, 1, "GRFInfo: Loaded GRFv%d set %08X - %s (palette: %s, version: %i)", version, BSWAP32(grfid), name, (_cur.grfconfig->palette & GRFP_USE_MASK) ? "Windows" : "DOS", _cur.grfconfig->version);
}
/* Action 0x0A */
@@ -5628,8 +5636,8 @@ static void SpriteReplace(ByteReader *buf)
for (uint j = 0; j < num_sprites; j++) {
int load_index = first_sprite + j;
- _nfo_line++;
- LoadNextSprite(load_index, _file_index, _nfo_line); // XXX
+ _cur.nfo_line++;
+ LoadNextSprite(load_index, _cur.file_index, _cur.nfo_line); // XXX
/* Shore sprites now located at different addresses.
* So detect when the old ones get replaced. */
@@ -5647,12 +5655,12 @@ static void SkipActA(ByteReader *buf)
for (uint i = 0; i < num_sets; i++) {
/* Skip the sprites this replaces */
- _skip_sprites += buf->ReadByte();
+ _cur.skip_sprites += buf->ReadByte();
/* But ignore where they go */
buf->ReadWord();
}
- grfmsg(3, "SkipActA: Skipping %d sprites", _skip_sprites);
+ grfmsg(3, "SkipActA: Skipping %d sprites", _cur.skip_sprites);
}
/* Action 0x0B */
@@ -5691,19 +5699,19 @@ static void GRFLoadError(ByteReader *buf)
};
/* For now we can only show one message per newgrf file. */
- if (_cur_grfconfig->error != NULL) return;
+ if (_cur.grfconfig->error != NULL) return;
byte severity = buf->ReadByte();
byte lang = buf->ReadByte();
byte message_id = buf->ReadByte();
/* Skip the error if it isn't valid for the current language. */
- if (!CheckGrfLangID(lang, _cur_grffile->grf_version)) return;
+ if (!CheckGrfLangID(lang, _cur.grffile->grf_version)) return;
/* Skip the error until the activation stage unless bit 7 of the severity
* is set. */
- if (!HasBit(severity, 7) && _cur_stage == GLS_INIT) {
- grfmsg(7, "GRFLoadError: Skipping non-fatal GRFLoadError in stage %d", _cur_stage);
+ if (!HasBit(severity, 7) && _cur.stage == GLS_INIT) {
+ grfmsg(7, "GRFLoadError: Skipping non-fatal GRFLoadError in stage %d", _cur.stage);
return;
}
ClrBit(severity, 7);
@@ -5734,7 +5742,7 @@ static void GRFLoadError(ByteReader *buf)
if (buf->HasData()) {
const char *message = buf->ReadString();
- error->custom_message = TranslateTTDPatchCodes(_cur_grffile->grfid, lang, message);
+ error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, message);
} else {
grfmsg(7, "GRFLoadError: No custom message supplied.");
error->custom_message = strdup("");
@@ -5746,7 +5754,7 @@ static void GRFLoadError(ByteReader *buf)
if (buf->HasData()) {
const char *data = buf->ReadString();
- error->data = TranslateTTDPatchCodes(_cur_grffile->grfid, lang, data);
+ error->data = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, data);
} else {
grfmsg(7, "GRFLoadError: No message data supplied.");
error->data = strdup("");
@@ -5756,11 +5764,11 @@ static void GRFLoadError(ByteReader *buf)
uint i = 0;
for (; i < 2 && buf->HasData(); i++) {
uint param_number = buf->ReadByte();
- error->param_value[i] = _cur_grffile->GetParam(param_number);
+ error->param_value[i] = _cur.grffile->GetParam(param_number);
}
error->num_params = i;
- _cur_grfconfig->error = error;
+ _cur.grfconfig->error = error;
}
/* Action 0x0C */
@@ -5789,10 +5797,10 @@ static void SafeParamSet(ByteReader *buf)
* reserved, it would be marked unsafe anyway. GRM for (e.g. bridge)
* sprites is considered safe. */
- SetBit(_cur_grfconfig->flags, GCF_UNSAFE);
+ SetBit(_cur.grfconfig->flags, GCF_UNSAFE);
/* Skip remainder of GRF */
- _skip_sprites = -1;
+ _cur.skip_sprites = -1;
}
@@ -5865,11 +5873,11 @@ static uint32 PerformGRM(uint32 *grm, uint16 num_ids, uint16 count, uint8 op, ui
if (op == 6) {
/* Return GRFID of set that reserved ID */
- return grm[_cur_grffile->GetParam(target)];
+ return grm[_cur.grffile->GetParam(target)];
}
/* With an operation of 2 or 3, we want to reserve a specific block of IDs */
- if (op == 2 || op == 3) start = _cur_grffile->GetParam(target);
+ if (op == 2 || op == 3) start = _cur.grffile->GetParam(target);
for (uint i = start; i < num_ids; i++) {
if (grm[i] == 0) {
@@ -5887,7 +5895,7 @@ static uint32 PerformGRM(uint32 *grm, uint16 num_ids, uint16 count, uint8 op, ui
/* Got the slot... */
if (op == 0 || op == 3) {
grfmsg(2, "ParamSet: GRM: Reserving %d %s at %d", count, type, start);
- for (uint i = 0; i < count; i++) grm[start + i] = _cur_grffile->grfid;
+ for (uint i = 0; i < count; i++) grm[start + i] = _cur.grffile->grfid;
}
return start;
}
@@ -5945,7 +5953,7 @@ static void ParamSet(ByteReader *buf)
* - it OR A PARAMETER WITH HIGHER NUMBER has been set to any value by
* an earlier action D */
if (HasBit(oper, 7)) {
- if (target < 0x80 && target < _cur_grffile->param_end) {
+ if (target < 0x80 && target < _cur.grffile->param_end) {
grfmsg(7, "ParamSet: Param %u already defined, skipping", target);
return;
}
@@ -5964,26 +5972,26 @@ static void ParamSet(ByteReader *buf)
uint8 feature = GB(data, 8, 8);
uint16 count = GB(data, 16, 16);
- if (_cur_stage == GLS_RESERVE) {
+ if (_cur.stage == GLS_RESERVE) {
if (feature == 0x08) {
/* General sprites */
if (op == 0) {
/* Check if the allocated sprites will fit below the original sprite limit */
- if (_cur_spriteid + count >= 16384) {
+ if (_cur.spriteid + count >= 16384) {
grfmsg(0, "ParamSet: GRM: Unable to allocate %d sprites; try changing NewGRF order", count);
DisableGrf(STR_NEWGRF_ERROR_GRM_FAILED);
return;
}
/* Reserve space at the current sprite ID */
- grfmsg(4, "ParamSet: GRM: Allocated %d sprites at %d", count, _cur_spriteid);
- _grm_sprites[GRFLocation(_cur_grffile->grfid, _nfo_line)] = _cur_spriteid;
- _cur_spriteid += count;
+ grfmsg(4, "ParamSet: GRM: Allocated %d sprites at %d", count, _cur.spriteid);
+ _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)] = _cur.spriteid;
+ _cur.spriteid += count;
}
}
/* Ignore GRM result during reservation */
src1 = 0;
- } else if (_cur_stage == GLS_ACTIVATION) {
+ } else if (_cur.stage == GLS_ACTIVATION) {
switch (feature) {
case 0x00: // Trains
case 0x01: // Road Vehicles
@@ -5991,13 +5999,13 @@ static void ParamSet(ByteReader *buf)
case 0x03: // Aircraft
if (!_settings_game.vehicle.dynamic_engines) {
src1 = PerformGRM(&_grm_engines[_engine_offsets[feature]], _engine_counts[feature], count, op, target, "vehicles");
- if (_skip_sprites == -1) return;
+ if (_cur.skip_sprites == -1) return;
} else {
/* GRM does not apply for dynamic engine allocation. */
switch (op) {
case 2:
case 3:
- src1 = _cur_grffile->GetParam(target);
+ src1 = _cur.grffile->GetParam(target);
break;
default:
@@ -6011,12 +6019,12 @@ static void ParamSet(ByteReader *buf)
switch (op) {
case 0:
/* Return space reserved during reservation stage */
- src1 = _grm_sprites[GRFLocation(_cur_grffile->grfid, _nfo_line)];
+ src1 = _grm_sprites[GRFLocation(_cur.grffile->grfid, _cur.nfo_line)];
grfmsg(4, "ParamSet: GRM: Using pre-allocated sprites at %d", src1);
break;
case 1:
- src1 = _cur_spriteid;
+ src1 = _cur.spriteid;
break;
default:
@@ -6028,7 +6036,7 @@ static void ParamSet(ByteReader *buf)
case 0x0B: // Cargo
/* There are two ranges: one for cargo IDs and one for cargo bitmasks */
src1 = PerformGRM(_grm_cargos, NUM_CARGO * 2, count, op, target, "cargos");
- if (_skip_sprites == -1) return;
+ if (_cur.skip_sprites == -1) return;
break;
default: grfmsg(1, "ParamSet: GRM: Unsupported feature 0x%X", feature); return;
@@ -6042,7 +6050,7 @@ static void ParamSet(ByteReader *buf)
/* Read another GRF File's parameter */
const GRFFile *file = GetFileByGRFID(data);
GRFConfig *c = GetGRFConfig(data);
- if (c != NULL && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur_grfconfig->flags, GCF_STATIC) && _networking) {
+ if (c != NULL && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) {
/* Disable the read GRF if it is a static NewGRF. */
DisableStaticNewGRFInfluencingNonStaticNewGRFs(c);
src1 = 0;
@@ -6153,7 +6161,7 @@ static void ParamSet(ByteReader *buf)
switch (target) {
case 0x8E: // Y-Offset for train sprites
- _cur_grffile->traininfo_vehicle_pitch = res;
+ _cur.grffile->traininfo_vehicle_pitch = res;
break;
case 0x8F: { // Rail track type cost factors
@@ -6184,7 +6192,7 @@ static void ParamSet(ByteReader *buf)
_misc_grf_features = res;
/* Set train list engine width */
- _cur_grffile->traininfo_vehicle_width = HasGrfMiscBit(GMB_TRAIN_WIDTH_32_PIXELS) ? VEHICLEINFO_FULL_VEHICLE_WIDTH : TRAININFO_DEFAULT_VEHICLE_WIDTH;
+ _cur.grffile->traininfo_vehicle_width = HasGrfMiscBit(GMB_TRAIN_WIDTH_32_PIXELS) ? VEHICLEINFO_FULL_VEHICLE_WIDTH : TRAININFO_DEFAULT_VEHICLE_WIDTH;
/* Remove the local flags from the global flags */
ClrBit(_misc_grf_features, GMB_TRAIN_WIDTH_32_PIXELS);
@@ -6196,9 +6204,9 @@ static void ParamSet(ByteReader *buf)
default:
if (target < 0x80) {
- _cur_grffile->param[target] = res;
+ _cur.grffile->param[target] = res;
/* param is zeroed by default */
- if (target + 1U > _cur_grffile->param_end) _cur_grffile->param_end = target + 1;
+ if (target + 1U > _cur.grffile->param_end) _cur.grffile->param_end = target + 1;
} else {
grfmsg(7, "ParamSet: Skipping unknown target 0x%02X", target);
}
@@ -6220,11 +6228,11 @@ static void SafeGRFInhibit(ByteReader *buf)
uint32 grfid = buf->ReadDWord();
/* GRF is unsafe it if tries to deactivate other GRFs */
- if (grfid != _cur_grfconfig->ident.grfid) {
- SetBit(_cur_grfconfig->flags, GCF_UNSAFE);
+ if (grfid != _cur.grfconfig->ident.grfid) {
+ SetBit(_cur.grfconfig->flags, GCF_UNSAFE);
/* Skip remainder of GRF */
- _skip_sprites = -1;
+ _cur.skip_sprites = -1;
return;
}
@@ -6246,10 +6254,10 @@ static void GRFInhibit(ByteReader *buf)
GRFConfig *file = GetGRFConfig(grfid);
/* Unset activation flag */
- if (file != NULL && file != _cur_grfconfig) {
+ if (file != NULL && file != _cur.grfconfig) {
grfmsg(2, "GRFInhibit: Deactivating file '%s'", file->filename);
GRFError *error = DisableGrf(STR_NEWGRF_ERROR_FORCEFULLY_DISABLED, file);
- error->data = strdup(_cur_grfconfig->GetName());
+ error->data = strdup(_cur.grfconfig->GetName());
}
}
}
@@ -6264,7 +6272,7 @@ static void FeatureTownName(ByteReader *buf)
* B num-parts Number of parts in this definition
* V parts The parts */
- uint32 grfid = _cur_grffile->grfid;
+ uint32 grfid = _cur.grffile->grfid;
GRFTownName *townname = AddGRFTownName(grfid);
@@ -6274,7 +6282,7 @@ static void FeatureTownName(ByteReader *buf)
if (HasBit(id, 7)) {
/* Final definition */
ClrBit(id, 7);
- bool new_scheme = _cur_grffile->grf_version >= 7;
+ bool new_scheme = _cur.grffile->grf_version >= 7;
byte lang = buf->ReadByte();
@@ -6350,17 +6358,17 @@ static void DefineGotoLabel(ByteReader *buf)
GRFLabel *label = MallocT<GRFLabel>(1);
label->label = nfo_label;
- label->nfo_line = _nfo_line;
+ label->nfo_line = _cur.nfo_line;
label->pos = FioGetPos();
label->next = NULL;
/* Set up a linked list of goto targets which we will search in an Action 0x7/0x9 */
- if (_cur_grffile->label == NULL) {
- _cur_grffile->label = label;
+ if (_cur.grffile->label == NULL) {
+ _cur.grffile->label = label;
} else {
/* Attach the label to the end of the list */
GRFLabel *l;
- for (l = _cur_grffile->label; l->next != NULL; l = l->next) {}
+ for (l = _cur.grffile->label; l->next != NULL; l = l->next) {}
l->next = label;
}
@@ -6376,12 +6384,12 @@ static void GRFSound(ByteReader *buf)
uint16 num = buf->ReadWord();
- _grf_data_blocks = num;
- _grf_data_type = GDT_SOUND;
+ _cur.data_blocks = num;
+ _cur.data_type = GDT_SOUND;
- if (_cur_grffile->sound_offset == 0) {
- _cur_grffile->sound_offset = GetNumSounds();
- _cur_grffile->num_sounds = num;
+ if (_cur.grffile->sound_offset == 0) {
+ _cur.grffile->sound_offset = GetNumSounds();
+ _cur.grffile->num_sounds = num;
}
}
@@ -6392,9 +6400,9 @@ static void SkipAct11(ByteReader *buf)
*
* W num Number of sound files that follow */
- _skip_sprites = buf->ReadWord();
+ _cur.skip_sprites = buf->ReadWord();
- grfmsg(3, "SkipAct11: Skipping %d sprites", _skip_sprites);
+ grfmsg(3, "SkipAct11: Skipping %d sprites", _cur.skip_sprites);
}
static void ImportGRFSound(ByteReader *buf)
@@ -6427,20 +6435,20 @@ static void ImportGRFSound(ByteReader *buf)
/* 'Action 0xFE' */
static void GRFImportBlock(ByteReader *buf)
{
- if (_grf_data_blocks == 0) {
+ if (_cur.data_blocks == 0) {
grfmsg(2, "GRFImportBlock: Unexpected import block, skipping");
return;
}
- _grf_data_blocks--;
+ _cur.data_blocks--;
/* XXX 'Action 0xFE' isn't really specified. It is only mentioned for
* importing sounds, so this is probably all wrong... */
- if (buf->ReadByte() != _grf_data_type) {
+ if (buf->ReadByte() != _cur.data_type) {
grfmsg(1, "GRFImportBlock: Import type mismatch");
}
- switch (_grf_data_type) {
+ switch (_cur.data_type) {
case GDT_SOUND: ImportGRFSound(buf); break;
default: NOT_REACHED();
}
@@ -6498,7 +6506,7 @@ static void LoadGRFSound(ByteReader *buf)
case 'atad': // 'data'
sound->file_size = size;
sound->file_offset = FioGetPos() - buf->Remaining();
- sound->file_slot = _file_index;
+ sound->file_slot = _cur.file_index;
/* Set default volume and priority */
sound->volume = 0x80;
@@ -6542,9 +6550,9 @@ static void LoadFontGlyph(ByteReader *buf)
grfmsg(7, "LoadFontGlyph: Loading %u glyph(s) at 0x%04X for size %u", num_char, base_char, size);
for (uint c = 0; c < num_char; c++) {
- SetUnicodeGlyph(size, base_char + c, _cur_spriteid);
- _nfo_line++;
- LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
+ SetUnicodeGlyph(size, base_char + c, _cur.spriteid);
+ _cur.nfo_line++;
+ LoadNextSprite(_cur.spriteid++, _cur.file_index, _cur.nfo_line);
}
}
}
@@ -6566,13 +6574,13 @@ static void SkipAct12(ByteReader *buf)
buf->ReadByte();
/* Sum up number of characters */
- _skip_sprites += buf->ReadByte();
+ _cur.skip_sprites += buf->ReadByte();
/* Ignore 'base_char' word */
buf->ReadWord();
}
- grfmsg(3, "SkipAct12: Skipping %d sprites", _skip_sprites);
+ grfmsg(3, "SkipAct12: Skipping %d sprites", _cur.skip_sprites);
}
/* Action 0x13 */
@@ -6632,14 +6640,14 @@ static void TranslateGRFStrings(ByteReader *buf)
/** Callback function for 'INFO'->'NAME' to add a translation to the newgrf name. */
static bool ChangeGRFName(byte langid, const char *str)
{
- AddGRFTextToList(&_cur_grfconfig->name->text, langid, _cur_grfconfig->ident.grfid, str);
+ AddGRFTextToList(&_cur.grfconfig->name->text, langid, _cur.grfconfig->ident.grfid, str);
return true;
}
/** Callback function for 'INFO'->'DESC' to add a translation to the newgrf description. */
static bool ChangeGRFDescription(byte langid, const char *str)
{
- AddGRFTextToList(&_cur_grfconfig->info->text, langid, _cur_grfconfig->ident.grfid, str);
+ AddGRFTextToList(&_cur.grfconfig->info->text, langid, _cur.grfconfig->ident.grfid, str);
return true;
}
@@ -6650,7 +6658,7 @@ static bool ChangeGRFNumUsedParams(size_t len, ByteReader *buf)
grfmsg(2, "StaticGRFInfo: expected only 1 byte for 'INFO'->'NPAR' but got " PRINTF_SIZE ", ignoring this field", len);
buf->Skip(len);
} else {
- _cur_grfconfig->num_valid_params = min(buf->ReadByte(), lengthof(_cur_grfconfig->param));
+ _cur.grfconfig->num_valid_params = min(buf->ReadByte(), lengthof(_cur.grfconfig->param));
}
return true;
}
@@ -6674,8 +6682,8 @@ static bool ChangeGRFPalette(size_t len, ByteReader *buf)
break;
}
if (pal != GRFP_GRF_UNSET) {
- _cur_grfconfig->palette &= ~GRFP_GRF_MASK;
- _cur_grfconfig->palette |= pal;
+ _cur.grfconfig->palette &= ~GRFP_GRF_MASK;
+ _cur.grfconfig->palette |= pal;
}
}
return true;
@@ -6689,7 +6697,7 @@ static bool ChangeGRFVersion(size_t len, ByteReader *buf)
buf->Skip(len);
} else {
/* Set min_loadable_version as well (default to minimal compatibility) */
- _cur_grfconfig->version = _cur_grfconfig->min_loadable_version = buf->ReadDWord();
+ _cur.grfconfig->version = _cur.grfconfig->min_loadable_version = buf->ReadDWord();
}
return true;
}
@@ -6701,14 +6709,14 @@ static bool ChangeGRFMinVersion(size_t len, ByteReader *buf)
grfmsg(2, "StaticGRFInfo: expected 4 bytes for 'INFO'->'MINV' but got " PRINTF_SIZE ", ignoring this field", len);
buf->Skip(len);
} else {
- _cur_grfconfig->min_loadable_version = buf->ReadDWord();
- if (_cur_grfconfig->version == 0) {
+ _cur.grfconfig->min_loadable_version = buf->ReadDWord();
+ if (_cur.grfconfig->version == 0) {
grfmsg(2, "StaticGRFInfo: 'MINV' defined before 'VRSN' or 'VRSN' set to 0, ignoring this field");
- _cur_grfconfig->min_loadable_version = 0;
+ _cur.grfconfig->min_loadable_version = 0;
}
- if (_cur_grfconfig->version < _cur_grfconfig->min_loadable_version) {
- grfmsg(2, "StaticGRFInfo: 'MINV' defined as %d, limiting it to 'VRSN'", _cur_grfconfig->min_loadable_version);
- _cur_grfconfig->min_loadable_version = _cur_grfconfig->version;
+ if (_cur.grfconfig->version < _cur.grfconfig->min_loadable_version) {
+ grfmsg(2, "StaticGRFInfo: 'MINV' defined as %d, limiting it to 'VRSN'", _cur.grfconfig->min_loadable_version);
+ _cur.grfconfig->min_loadable_version = _cur.grfconfig->version;
}
}
return true;
@@ -6719,14 +6727,14 @@ static GRFParameterInfo *_cur_parameter; ///< The parameter which info is curren
/** Callback function for 'INFO'->'PARAM'->param_num->'NAME' to set the name of a parameter. */
static bool ChangeGRFParamName(byte langid, const char *str)
{
- AddGRFTextToList(&_cur_parameter->name, langid, _cur_grfconfig->ident.grfid, str);
+ AddGRFTextToList(&_cur_parameter->name, langid, _cur.grfconfig->ident.grfid, str);
return true;
}
/** Callback function for 'INFO'->'PARAM'->param_num->'DESC' to set the description of a parameter. */
static bool ChangeGRFParamDescription(byte langid, const char *str)
{
- AddGRFTextToList(&_cur_parameter->desc, langid, _cur_grfconfig->ident.grfid, str);
+ AddGRFTextToList(&_cur_parameter->desc, langid, _cur.grfconfig->ident.grfid, str);
return true;
}
@@ -6771,7 +6779,7 @@ static bool ChangeGRFParamMask(size_t len, ByteReader *buf)
buf->Skip(len);
} else {
byte param_nr = buf->ReadByte();
- if (param_nr >= lengthof(_cur_grfconfig->param)) {
+ if (param_nr >= lengthof(_cur.grfconfig->param)) {
grfmsg(2, "StaticGRFInfo: invalid parameter number in 'INFO'->'PARA'->'MASK', param %d, ignoring this field", param_nr);
buf->Skip(len - 1);
} else {
@@ -6793,7 +6801,7 @@ static bool ChangeGRFParamDefault(size_t len, ByteReader *buf)
} else {
_cur_parameter->def_value = buf->ReadDWord();
}
- _cur_grfconfig->has_param_defaults = true;
+ _cur.grfconfig->has_param_defaults = true;
return true;
}
@@ -6906,10 +6914,10 @@ static bool ChangeGRFParamValueNames(ByteReader *buf)
SmallPair<uint32, GRFText *> *val_name = _cur_parameter->value_names.Find(id);
if (val_name != _cur_parameter->value_names.End()) {
- AddGRFTextToList(&val_name->second, langid, _cur_grfconfig->ident.grfid, name_string);
+ AddGRFTextToList(&val_name->second, langid, _cur.grfconfig->ident.grfid, name_string);
} else {
GRFText *list = NULL;
- AddGRFTextToList(&list, langid, _cur_grfconfig->ident.grfid, name_string);
+ AddGRFTextToList(&list, langid, _cur.grfconfig->ident.grfid, name_string);
_cur_parameter->value_names.Insert(id, list);
}
@@ -6940,22 +6948,22 @@ static bool HandleParameterInfo(ByteReader *buf)
byte type = buf->ReadByte();
while (type != 0) {
uint32 id = buf->ReadDWord();
- if (type != 'C' || id >= _cur_grfconfig->num_valid_params) {
+ if (type != 'C' || id >= _cur.grfconfig->num_valid_params) {
grfmsg(2, "StaticGRFInfo: all child nodes of 'INFO'->'PARA' should have type 'C' and their parameter number as id");
if (!SkipUnknownInfo(buf, type)) return false;
type = buf->ReadByte();
continue;
}
- if (id >= _cur_grfconfig->param_info.Length()) {
- uint num_to_add = id - _cur_grfconfig->param_info.Length() + 1;
- GRFParameterInfo **newdata = _cur_grfconfig->param_info.Append(num_to_add);
+ if (id >= _cur.grfconfig->param_info.Length()) {
+ uint num_to_add = id - _cur.grfconfig->param_info.Length() + 1;
+ GRFParameterInfo **newdata = _cur.grfconfig->param_info.Append(num_to_add);
MemSetT<GRFParameterInfo *>(newdata, 0, num_to_add);
}
- if (_cur_grfconfig->param_info[id] == NULL) {
- _cur_grfconfig->param_info[id] = new GRFParameterInfo(id);
+ if (_cur.grfconfig->param_info[id] == NULL) {
+ _cur.grfconfig->param_info[id] = new GRFParameterInfo(id);
}
- _cur_parameter = _cur_grfconfig->param_info[id];
+ _cur_parameter = _cur.grfconfig->param_info[id];
/* Read all parameter-data and process each node. */
if (!HandleNodes(buf, _tags_parameters)) return false;
type = buf->ReadByte();
@@ -7071,7 +7079,7 @@ static void GRFDataBlock(ByteReader *buf)
{
/* <FF> <name_len> <name> '\0' <data> */
- if (_grf_data_blocks == 0) {
+ if (_cur.data_blocks == 0) {
grfmsg(2, "GRFDataBlock: unexpected data block, skipping");
return;
}
@@ -7088,9 +7096,9 @@ static void GRFDataBlock(ByteReader *buf)
grfmsg(2, "GRFDataBlock: block name '%s'...", name);
- _grf_data_blocks--;
+ _cur.data_blocks--;
- switch (_grf_data_type) {
+ switch (_cur.data_type) {
case GDT_SOUND: LoadGRFSound(buf); break;
default: NOT_REACHED();
}
@@ -7100,10 +7108,10 @@ static void GRFDataBlock(ByteReader *buf)
/* Used during safety scan on unsafe actions */
static void GRFUnsafe(ByteReader *buf)
{
- SetBit(_cur_grfconfig->flags, GCF_UNSAFE);
+ SetBit(_cur.grfconfig->flags, GCF_UNSAFE);
/* Skip remainder of GRF */
- _skip_sprites = -1;
+ _cur.skip_sprites = -1;
}
@@ -7344,7 +7352,7 @@ static void ResetNewGRF()
}
_grf_files.Clear();
- _cur_grffile = NULL;
+ _cur.grffile = NULL;
}
static void ResetNewGRFErrors()
@@ -7467,20 +7475,20 @@ void ResetPersistentNewGRFData()
static void BuildCargoTranslationMap()
{
- memset(_cur_grffile->cargo_map, 0xFF, sizeof(_cur_grffile->cargo_map));
+ memset(_cur.grffile->cargo_map, 0xFF, sizeof(_cur.grffile->cargo_map));
for (CargoID c = 0; c < NUM_CARGO; c++) {
const CargoSpec *cs = CargoSpec::Get(c);
if (!cs->IsValid()) continue;
- if (_cur_grffile->cargo_max == 0) {
+ if (_cur.grffile->cargo_max == 0) {
/* Default translation table, so just a straight mapping to bitnum */
- _cur_grffile->cargo_map[c] = cs->bitnum;
+ _cur.grffile->cargo_map[c] = cs->bitnum;
} else {
/* Check the translation table for this cargo's label */
- for (uint i = 0; i < _cur_grffile->cargo_max; i++) {
- if (cs->label == _cur_grffile->cargo_list[i]) {
- _cur_grffile->cargo_map[c] = i;
+ for (uint i = 0; i < _cur.grffile->cargo_max; i++) {
+ if (cs->label == _cur.grffile->cargo_list[i]) {
+ _cur.grffile->cargo_map[c] = i;
break;
}
}
@@ -7493,7 +7501,7 @@ static void InitNewGRFFile(const GRFConfig *config)
GRFFile *newfile = GetFileByFilename(config->filename);
if (newfile != NULL) {
/* We already loaded it once. */
- _cur_grffile = newfile;
+ _cur.grffile = newfile;
return;
}
@@ -7529,7 +7537,7 @@ static void InitNewGRFFile(const GRFConfig *config)
MemCpyT(newfile->param, config->param, newfile->param_end);
}
- *_grf_files.Append() = _cur_grffile = newfile;
+ *_grf_files.Append() = _cur.grffile = newfile;
}
@@ -8018,7 +8026,7 @@ static void DecodeSpecialSprite(byte *buf, uint num, GrfLoadingStage stage)
/* 0x14 */ { StaticGRFInfo, NULL, NULL, NULL, NULL, NULL, },
};
- GRFLocation location(_cur_grfconfig->ident.grfid, _nfo_line);
+ GRFLocation location(_cur.grfconfig->ident.grfid, _cur.nfo_line);
GRFLineToSpriteOverride::iterator it = _grf_line_to_action6_sprite_override.find(location);
if (it == _grf_line_to_action6_sprite_override.end()) {
@@ -8076,11 +8084,11 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
* carried out. All others are ignored, because they only need to be
* processed once at initialization. */
if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) {
- _cur_grffile = GetFileByFilename(filename);
- if (_cur_grffile == NULL) usererror("File '%s' lost in cache.\n", filename);
+ _cur.grffile = GetFileByFilename(filename);
+ if (_cur.grffile == NULL) usererror("File '%s' lost in cache.\n", filename);
if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return;
if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return;
- _cur_grffile->is_ottdfile = config->IsOpenTTDBaseGRF();
+ _cur.grffile->is_ottdfile = config->IsOpenTTDBaseGRF();
}
if (file_index > LAST_GRF_SLOT) {
@@ -8091,10 +8099,10 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
}
FioOpenFile(file_index, filename);
- _file_index = file_index; // XXX
- _palette_remap_grf[_file_index] = (config->palette & GRFP_USE_MASK);
+ _cur.file_index = file_index; // XXX
+ _palette_remap_grf[_cur.file_index] = (config->palette & GRFP_USE_MASK);
- _cur_grfconfig = config;
+ _cur.grfconfig = config;
DEBUG(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '%s'", filename);
@@ -8108,28 +8116,28 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
return;
}
- _skip_sprites = 0; // XXX
- _nfo_line = 0;
+ _cur.skip_sprites = 0; // XXX
+ _cur.nfo_line = 0;
ReusableBuffer<byte> buf;
while ((num = FioReadWord()) != 0) {
byte type = FioReadByte();
- _nfo_line++;
+ _cur.nfo_line++;
if (type == 0xFF) {
- if (_skip_sprites == 0) {
+ if (_cur.skip_sprites == 0) {
DecodeSpecialSprite(buf.Allocate(num), num, stage);
/* Stop all processing if we are to skip the remaining sprites */
- if (_skip_sprites == -1) break;
+ if (_cur.skip_sprites == -1) break;
continue;
} else {
FioSkipBytes(num);
}
} else {
- if (_skip_sprites == 0) {
+ if (_cur.skip_sprites == 0) {
grfmsg(0, "LoadNewGRFFile: Unexpected sprite, disabling");
DisableGrf(STR_NEWGRF_ERROR_UNEXPECTED_SPRITE);
break;
@@ -8139,7 +8147,7 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
SkipSpriteData(type, num - 8);
}
- if (_skip_sprites > 0) _skip_sprites--;
+ if (_cur.skip_sprites > 0) _cur.skip_sprites--;
}
}
@@ -8425,7 +8433,7 @@ void LoadNewGRF(uint load_index, uint file_index)
if (c->status != GCS_NOT_FOUND) c->status = GCS_UNKNOWN;
}
- _cur_spriteid = load_index;
+ _cur.spriteid = load_index;
/* Load newgrf sprites
* in each loading stage, (try to) open each file specified in the config
@@ -8439,7 +8447,7 @@ void LoadNewGRF(uint load_index, uint file_index)
uint slot = file_index;
- _cur_stage = stage;
+ _cur.stage = stage;
for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
if (stage > GLS_INIT && HasBit(c->flags, GCF_INIT_ONLY)) continue;
@@ -8456,13 +8464,13 @@ void LoadNewGRF(uint load_index, uint file_index)
SetBit(c->flags, GCF_RESERVED);
} else if (stage == GLS_ACTIVATION) {
ClrBit(c->flags, GCF_RESERVED);
- assert(GetFileByGRFID(c->ident.grfid) == _cur_grffile);
- ClearTemporaryNewGRFData(_cur_grffile);
+ assert(GetFileByGRFID(c->ident.grfid) == _cur.grffile);
+ ClearTemporaryNewGRFData(_cur.grffile);
BuildCargoTranslationMap();
- DEBUG(sprite, 2, "LoadNewGRF: Currently %i sprites are loaded", _cur_spriteid);
+ DEBUG(sprite, 2, "LoadNewGRF: Currently %i sprites are loaded", _cur.spriteid);
} else if (stage == GLS_INIT && HasBit(c->flags, GCF_INIT_ONLY)) {
/* We're not going to activate this, so free whatever data we allocated */
- ClearTemporaryNewGRFData(_cur_grffile);
+ ClearTemporaryNewGRFData(_cur.grffile);
}
}
}