diff options
-rw-r--r-- | src/newgrf.cpp | 363 |
1 files changed, 124 insertions, 239 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4d04904c7..969915174 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -100,14 +100,14 @@ enum grfspec_feature { typedef void (*SpecialSpriteHandler)(byte *buf, int len); -static const int _vehcounts[4] = { +static const uint _vehcounts[4] = { /* GSF_TRAIN */ NUM_TRAIN_ENGINES, /* GSF_ROAD */ NUM_ROAD_ENGINES, /* GSF_SHIP */ NUM_SHIP_ENGINES, /* GSF_AIRCRAFT */ NUM_AIRCRAFT_ENGINES }; -static const int _vehshifts[4] = { +static const uint _vehshifts[4] = { /* GSF_TRAIN */ 0, /* GSF_ROAD */ ROAD_ENGINES_INDEX, /* GSF_SHIP */ SHIP_ENGINES_INDEX, @@ -881,13 +881,11 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int switch (prop) { case 0x08: /* Class ID */ FOR_EACH_OBJECT { - uint32 classid; - /* Property 0x08 is special; it is where the station is allocated */ if (statspec[i] == NULL) statspec[i] = CallocT<StationSpec>(1); /* Swap classid because we read it in BE meaning WAYP or DFLT */ - classid = grf_load_dword(&buf); + uint32 classid = grf_load_dword(&buf); statspec[i]->sclass = AllocateStationClass(BSWAP32(classid)); } break; @@ -895,13 +893,12 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int case 0x09: /* Define sprite layout */ FOR_EACH_OBJECT { StationSpec *statspec = _cur_grffile->stations[stid + i]; - uint t; statspec->tiles = grf_load_extended(&buf); statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles); statspec->copied_renderdata = false; - for (t = 0; t < statspec->tiles; t++) { + for (uint t = 0; t < statspec->tiles; t++) { DrawTileSprites *dts = &statspec->renderdata[t]; uint seq_count = 0; @@ -1127,11 +1124,9 @@ static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int } for (; numtables-- != 0; tableid++) { - byte sprite; - if (tableid >= 7) { // skip invalid data grfmsg(1, "BridgeChangeInfo: Table %d >= 7, skipping", tableid); - for (sprite = 0; sprite < 32; sprite++) grf_load_dword(&buf); + for (byte sprite = 0; sprite < 32; sprite++) grf_load_dword(&buf); continue; } @@ -1139,7 +1134,7 @@ static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int bridge->sprite_table[tableid] = MallocT<PalSpriteID>(32); } - for (sprite = 0; sprite < 32; sprite++) { + for (byte sprite = 0; sprite < 32; sprite++) { SpriteID image = grf_load_word(&buf); SpriteID pal = grf_load_word(&buf); @@ -1388,10 +1383,6 @@ static void FeatureChangeInfo(byte *buf, int len) /* GSF_SOUNDFX */ SoundEffectChangeInfo, }; - uint8 feature; - uint8 numprops; - uint8 numinfo; - byte engine; EngineInfo *ei = NULL; if (len == 1) { @@ -1401,10 +1392,10 @@ static void FeatureChangeInfo(byte *buf, int len) if (!check_length(len, 6, "FeatureChangeInfo")) return; buf++; - feature = grf_load_byte(&buf); - numprops = grf_load_byte(&buf); - numinfo = grf_load_byte(&buf); - engine = grf_load_byte(&buf); + uint8 feature = grf_load_byte(&buf); + uint8 numprops = grf_load_byte(&buf); + uint8 numinfo = grf_load_byte(&buf); + uint8 engine = grf_load_byte(&buf); grfmsg(6, "FeatureChangeInfo: feature %d, %d properties, to apply to %d+%d", feature, numprops, engine, numinfo); @@ -1461,15 +1452,17 @@ static void FeatureChangeInfo(byte *buf, int len) break; default: - if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) + if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) { ignoring = true; + } break; } break; default: - if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) + if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) { ignoring = true; + } break; } @@ -1480,11 +1473,6 @@ static void FeatureChangeInfo(byte *buf, int len) /* Action 0x00 (GLS_SAFETYSCAN) */ static void SafeChangeInfo(byte *buf, int len) { - uint8 feature; - uint8 numprops; - uint8 numinfo; - uint8 index; - if (len == 1) { grfmsg(8, "Silently ignoring one-byte special sprite 0x00"); return; @@ -1492,10 +1480,10 @@ static void SafeChangeInfo(byte *buf, int len) if (!check_length(len, 6, "SafeChangeInfo")) return; buf++; - feature = grf_load_byte(&buf); - numprops = grf_load_byte(&buf); - numinfo = grf_load_byte(&buf); - index = grf_load_byte(&buf); + uint8 feature = grf_load_byte(&buf); + uint8 numprops = grf_load_byte(&buf); + grf_load_byte(&buf); + grf_load_byte(&buf); if (feature == GSF_BRIDGE && numprops == 1) { uint8 prop = grf_load_byte(&buf); @@ -1514,10 +1502,6 @@ static void SafeChangeInfo(byte *buf, int len) static void InitChangeInfo(byte *buf, int len) { byte *bufend = buf + len; - uint8 feature; - uint8 numprops; - uint8 numinfo; - uint8 index; if (len == 1) { grfmsg(8, "Silently ignoring one-byte special sprite 0x00"); @@ -1526,10 +1510,10 @@ static void InitChangeInfo(byte *buf, int len) if (!check_length(len, 6, "InitChangeInfo")) return; buf++; - feature = grf_load_byte(&buf); - numprops = grf_load_byte(&buf); - numinfo = grf_load_byte(&buf); - index = grf_load_byte(&buf); + uint8 feature = grf_load_byte(&buf); + uint8 numprops = grf_load_byte(&buf); + uint8 numinfo = grf_load_byte(&buf); + uint8 index = grf_load_byte(&buf); while (numprops-- && buf < bufend) { uint8 prop = grf_load_byte(&buf); @@ -1613,19 +1597,13 @@ static void NewSpriteSet(byte *buf, int len) * vehicle directions in each sprite set * Set num-dirs=8, unless your sprites are symmetric. * In that case, use num-dirs=4. - * For stations, must be 12 (hex) for the eighteen - * different sprites that make up a station */ - /* TODO: No stations support. */ - uint8 feature; - uint num_sets; - uint num_ents; - uint i; + */ if (!check_length(len, 4, "NewSpriteSet")) return; buf++; - feature = grf_load_byte(&buf); - num_sets = grf_load_byte(&buf); - num_ents = grf_load_extended(&buf); + uint8 feature = grf_load_byte(&buf); + uint8 num_sets = grf_load_byte(&buf); + uint16 num_ents = grf_load_extended(&buf); _cur_grffile->spriteset_start = _cur_spriteid; _cur_grffile->spriteset_feature = feature; @@ -1636,7 +1614,7 @@ static void NewSpriteSet(byte *buf, int len) _cur_spriteid, feature, num_sets, num_ents, num_sets * num_ents ); - for (i = 0; i < num_sets * num_ents; i++) { + for (uint i = 0; i < num_sets * num_ents; i++) { LoadNextSprite(_cur_spriteid++, _file_index); _nfo_line++; } @@ -1699,18 +1677,15 @@ static void NewSpriteGroup(byte *buf, int len) * otherwise it specifies a number of entries, the exact * meaning depends on the feature * V feature-specific-data (huge mess, don't even look it up --pasky) */ - uint8 feature; - uint8 setid; - uint8 type; SpriteGroup *group = NULL; byte *bufend = buf + len; if (!check_length(len, 5, "NewSpriteGroup")) return; buf++; - feature = grf_load_byte(&buf); - setid = grf_load_byte(&buf); - type = grf_load_byte(&buf); + uint8 feature = grf_load_byte(&buf); + uint8 setid = grf_load_byte(&buf); + uint8 type = grf_load_byte(&buf); if (setid >= _cur_grffile->spritegroups_count) { // Allocate memory for new sprite group references. @@ -1731,7 +1706,6 @@ static void NewSpriteGroup(byte *buf, int len) { byte varadjust; byte varsize; - uint i; /* Check we can load the var size parameter */ if (!check_length(bufend - buf, 1, "NewSpriteGroup (Deterministic) (1)")) return; @@ -1794,7 +1768,7 @@ static void NewSpriteGroup(byte *buf, int len) if (!check_length(bufend - buf, 2 + (2 + 2 * varsize) * group->g.determ.num_ranges, "NewSpriteGroup (Deterministic)")) return; - for (i = 0; i < group->g.determ.num_ranges; i++) { + for (uint i = 0; i < group->g.determ.num_ranges; i++) { group->g.determ.ranges[i].group = GetGroupFromGroupID(setid, type, grf_load_word(&buf)); group->g.determ.ranges[i].low = grf_load_var(varsize, &buf); group->g.determ.ranges[i].high = grf_load_var(varsize, &buf); @@ -1808,16 +1782,13 @@ static void NewSpriteGroup(byte *buf, int len) case 0x80: // Self scope case 0x83: // Parent scope { - byte triggers; - uint i; - if (!check_length(bufend - buf, 7, "NewSpriteGroup (Randomized) (1)")) return; group = AllocateSpriteGroup(); group->type = SGT_RANDOMIZED; group->g.random.var_scope = HASBIT(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF; - triggers = grf_load_byte(&buf); + uint8 triggers = grf_load_byte(&buf); group->g.random.triggers = GB(triggers, 0, 7); group->g.random.cmp_mode = HASBIT(triggers, 7) ? RSG_CMP_ALL : RSG_CMP_ANY; group->g.random.lowest_randbit = grf_load_byte(&buf); @@ -1826,7 +1797,7 @@ static void NewSpriteGroup(byte *buf, int len) if (!check_length(bufend - buf, 2 * group->g.random.num_groups, "NewSpriteGroup (Randomized) (2)")) return; - for (i = 0; i < group->g.random.num_groups; i++) { + for (uint i = 0; i < group->g.random.num_groups; i++) { group->g.random.groups[i] = GetGroupFromGroupID(setid, type, grf_load_word(&buf)); } @@ -1848,7 +1819,6 @@ static void NewSpriteGroup(byte *buf, int len) byte sprites = _cur_grffile->spriteset_numents; byte num_loaded = type; byte num_loading = grf_load_byte(&buf); - uint i; if (_cur_grffile->spriteset_start == 0) { grfmsg(0, "NewSpriteGroup: No sprite set to work on! Skipping"); @@ -1868,13 +1838,13 @@ static void NewSpriteGroup(byte *buf, int len) grfmsg(6, "NewSpriteGroup: New SpriteGroup 0x%02X, %u views, %u loaded, %u loading", setid, sprites, num_loaded, num_loading); - for (i = 0; i < num_loaded; i++) { + for (uint i = 0; i < num_loaded; i++) { uint16 spriteid = grf_load_word(&buf); group->g.real.loaded[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites); grfmsg(8, "NewSpriteGroup: + rg->loaded[%i] = subset %u", i, spriteid); } - for (i = 0; i < num_loading; i++) { + for (uint i = 0; i < num_loading; i++) { uint16 spriteid = grf_load_word(&buf); group->g.real.loading[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites); grfmsg(8, "NewSpriteGroup: + rg->loading[%i] = subset %u", i, spriteid); @@ -1943,26 +1913,22 @@ static void FeatureMapSpriteGroup(byte *buf, int len) static byte *last_engines; static int last_engines_count; - uint8 feature; - uint8 idcount; - bool wagover; - uint8 cidcount; - int c, i; if (!check_length(len, 6, "FeatureMapSpriteGroup")) return; - feature = buf[1]; - idcount = buf[2] & 0x7F; - wagover = (buf[2] & 0x80) == 0x80; + + uint8 feature = buf[1]; + uint8 idcount = buf[2] & 0x7F; + bool wagover = (buf[2] & 0x80) == 0x80; + if (!check_length(len, 3 + idcount, "FeatureMapSpriteGroup")) return; - /* If ``n-id'' (or ``idcount'') is zero, this is a ``feature - * callback''. */ + /* If idcount is zero, this is a feature callback */ if (idcount == 0) { grfmsg(2, "FeatureMapSpriteGroup: Feature callbacks not implemented yet"); return; } - cidcount = buf[3 + idcount]; + uint8 cidcount = buf[3 + idcount]; if (!check_length(len, 4 + idcount + cidcount * 3, "FeatureMapSpriteGroup")) return; grfmsg(6, "FeatureMapSpriteGroup: Feature %d, %d ids, %d cids, wagon override %d", @@ -1977,12 +1943,12 @@ static void FeatureMapSpriteGroup(byte *buf, int len) if (feature == GSF_STATION) { // We do things differently for stations. - for (i = 0; i < idcount; i++) { + for (uint i = 0; i < idcount; i++) { uint8 stid = buf[3 + i]; StationSpec *statspec = _cur_grffile->stations[stid]; byte *bp = &buf[4 + idcount]; - for (c = 0; c < cidcount; c++) { + for (uint c = 0; c < cidcount; c++) { uint8 ctype = grf_load_byte(&bp); uint16 groupid = grf_load_word(&bp); @@ -2009,7 +1975,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len) return; } - for (i = 0; i < idcount; i++) { + for (uint i = 0; i < idcount; i++) { uint8 stid = buf[3 + i]; StationSpec *statspec = _cur_grffile->stations[stid]; @@ -2046,7 +2012,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len) } - for (i = 0; i < idcount; i++) { + for (uint i = 0; i < idcount; i++) { uint8 engine_id = buf[3 + i]; uint8 engine = engine_id + _vehshifts[feature]; byte *bp = &buf[4 + idcount]; @@ -2058,7 +2024,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len) grfmsg(7, "FeatureMapSpriteGroup: [%d] Engine %d...", i, engine); - for (c = 0; c < cidcount; c++) { + for (uint c = 0; c < cidcount; c++) { uint8 ctype = grf_load_byte(&bp); uint16 groupid = grf_load_word(&bp); @@ -2087,7 +2053,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len) grfmsg(8, "-- Default group id 0x%04X", groupid); - for (i = 0; i < idcount; i++) { + for (uint i = 0; i < idcount; i++) { uint8 engine = buf[3 + i] + _vehshifts[feature]; // Don't tell me you don't love duplicated code! @@ -2132,35 +2098,23 @@ static void FeatureNewName(byte *buf, int len) * Word : ID of string to change/add * S data new texts, each of them zero-terminated, after * which the next name begins. */ - /* TODO: No support for changing non-vehicle text. Perhaps we shouldn't - * implement it at all, but it could be useful for some "modpacks" - * (completely new scenarios changing all graphics and logically also - * factory names etc). We should then also support all languages (by - * name), not only the original four ones. --pasky - * All of the above are coming. In Time. Some sooner than others :)*/ - - uint8 feature; - uint8 lang; - uint8 num; - uint16 id; - uint16 endid; + bool new_scheme = _cur_grffile->grf_version >= 7; - bool generic; if (!check_length(len, 6, "FeatureNewName")) return; buf++; - feature = grf_load_byte(&buf); - lang = grf_load_byte(&buf); - num = grf_load_byte(&buf); - generic = HASBIT(lang, 7); - id = generic ? grf_load_word(&buf) : grf_load_byte(&buf); + uint8 feature = grf_load_byte(&buf); + uint8 lang = grf_load_byte(&buf); + uint8 num = grf_load_byte(&buf); + bool generic = HASBIT(lang, 7); + uint16 id = generic ? grf_load_word(&buf) : grf_load_byte(&buf); CLRBIT(lang, 7); if (feature <= GSF_AIRCRAFT && id < _vehcounts[feature]) { id += _vehshifts[feature]; } - endid = id + num; + uint16 endid = id + num; grfmsg(6, "FeatureNewName: About to rename engines %d..%d (feature %d) in language 0x%02X", id, endid, feature, lang); @@ -2260,14 +2214,12 @@ static void GraphicsNew(byte *buf, int len) * V other data Graphics type specific data. Currently unused. */ /* TODO */ - uint8 type; - uint16 num; SpriteID replace = 0; if (!check_length(len, 2, "GraphicsNew")) return; buf++; - type = grf_load_byte(&buf); - num = grf_load_extended(&buf); + uint8 type = grf_load_byte(&buf); + uint16 num = grf_load_extended(&buf); switch (type) { case 0x04: /* Signal graphics */ @@ -2484,22 +2436,15 @@ static void SkipIf(byte *buf, int len) * V value * B num-sprites */ /* TODO: More params. More condition types. */ - uint8 param; - uint8 paramsize; - uint8 condtype; - uint8 numsprites; - uint32 param_val = 0; uint32 cond_val = 0; uint32 mask = 0; bool result; - GRFLabel *label; - GRFLabel *choice = NULL; if (!check_length(len, 6, "SkipIf")) return; buf++; - param = grf_load_byte(&buf); - paramsize = grf_load_byte(&buf); - condtype = grf_load_byte(&buf); + uint8 param = grf_load_byte(&buf); + uint8 paramsize = grf_load_byte(&buf); + uint8 condtype = grf_load_byte(&buf); if (condtype < 2) { /* Always 1 for bit tests, the given value should be ignored. */ @@ -2518,7 +2463,7 @@ static void SkipIf(byte *buf, int len) return; } - param_val = GetParamVal(param, &cond_val); + uint32 param_val = GetParamVal(param, &cond_val); grfmsg(7, "Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val); @@ -2582,13 +2527,14 @@ static void SkipIf(byte *buf, int len) return; } - numsprites = grf_load_byte(&buf); + uint8 numsprites = grf_load_byte(&buf); /* numsprites can be a GOTO label if it has been defined in the GRF * file. The jump will always be the first matching label that follows * the current nfo_line. If no matching label is found, the first matching * label in the file is used. */ - for (label = _cur_grffile->label; label != NULL; label = label->next) { + GRFLabel *choice = NULL; + for (GRFLabel *label = _cur_grffile->label; label != NULL; label = label->next) { if (label->label != numsprites) continue; /* Remember a goto before the current line */ @@ -2624,14 +2570,10 @@ static void SkipIf(byte *buf, int len) /* Action 0x08 (GLS_FILESCAN) */ static void ScanInfo(byte *buf, int len) { - uint8 version; - uint32 grfid; - const char *name; - const char *info; - - if (!check_length(len, 8, "Info")) return; buf++; - version = grf_load_byte(&buf); - grfid = grf_load_dword(&buf); + if (!check_length(len, 8, "Info")) return; + buf++; + grf_load_byte(&buf); + uint32 grfid = grf_load_dword(&buf); _cur_grfconfig->grfid = grfid; @@ -2639,12 +2581,12 @@ static void ScanInfo(byte *buf, int len) if (GB(grfid, 24, 8) == 0xFF) SETBIT(_cur_grfconfig->flags, GCF_SYSTEM); len -= 6; - name = grf_load_string(&buf, len); + const char *name = grf_load_string(&buf, len); _cur_grfconfig->name = TranslateTTDPatchCodes(name); len -= strlen(name) + 1; if (len > 0) { - info = grf_load_string(&buf, len); + const char *info = grf_load_string(&buf, len); _cur_grfconfig->info = TranslateTTDPatchCodes(info); } @@ -2661,15 +2603,12 @@ static void GRFInfo(byte *buf, int len) * 4*B grf-id globally unique ID of this .grf file * S name name of this .grf set * S info string describing the set, and e.g. author and copyright */ - /* TODO: Check version. (We should have own versioning done somehow.) */ - uint8 version; - uint32 grfid; - const char *name; - if (!check_length(len, 8, "GRFInfo")) return; buf++; - version = grf_load_byte(&buf); - grfid = grf_load_dword(&buf); - name = grf_load_string(&buf, len - 6); + if (!check_length(len, 8, "GRFInfo")) return; + buf++; + uint8 version = grf_load_byte(&buf); + uint32 grfid = grf_load_dword(&buf); + const char *name = grf_load_string(&buf, len - 6); _cur_grffile->grfid = grfid; _cur_grffile->grf_version = version; @@ -2689,22 +2628,19 @@ static void SpriteReplace(byte *buf, int len) * Each set: * B num-sprites How many sprites are in this set * W first-sprite First sprite number to replace */ - uint8 num_sets; - uint i; buf++; /* skip action byte */ - num_sets = grf_load_byte(&buf); + uint8 num_sets = grf_load_byte(&buf); - for (i = 0; i < num_sets; i++) { + for (uint i = 0; i < num_sets; i++) { uint8 num_sprites = grf_load_byte(&buf); uint16 first_sprite = grf_load_word(&buf); - uint j; grfmsg(2, "SpriteReplace: [Set %d] Changing %d sprites, beginning with %d", i, num_sprites, first_sprite ); - for (j = 0; j < num_sprites; j++) { + for (uint j = 0; j < num_sprites; j++) { LoadNextSprite(first_sprite + j, _file_index); // XXX _nfo_line++; } @@ -2844,11 +2780,9 @@ static void GRFComment(byte *buf, int len) /* Action 0x0D (GLS_SAFETYSCAN) */ static void SafeParamSet(byte *buf, int len) { - uint8 target; - if (!check_length(len, 5, "SafeParamSet")) return; buf++; - target = grf_load_byte(&buf); + uint8 target = grf_load_byte(&buf); /* Only writing GRF parameters is considered safe */ if (target < 0x80) return; @@ -2889,20 +2823,14 @@ static void ParamSet(byte *buf, int len) * (source2 like in 05, and source1 as well) */ - byte target; - byte oper; - uint32 src1; - uint32 src2; - uint32 data = 0; - uint32 res; - if (!check_length(len, 5, "ParamSet")) return; buf++; - target = grf_load_byte(&buf); - oper = grf_load_byte(&buf); - src1 = grf_load_byte(&buf); - src2 = grf_load_byte(&buf); + uint8 target = grf_load_byte(&buf); + uint8 oper = grf_load_byte(&buf); + uint32 src1 = grf_load_byte(&buf); + uint32 src2 = grf_load_byte(&buf); + uint32 data = 0; if (len >= 8) data = grf_load_dword(&buf); /* You can add 80 to the operation to make it apply only if the target @@ -2911,13 +2839,13 @@ static void ParamSet(byte *buf, int len) * - it has been set to any value in the newgrf(w).cfg parameter list * - it OR A PARAMETER WITH HIGHER NUMBER has been set to any value by * an earlier action D */ - if (oper & 0x80) { + if (HASBIT(oper, 7)) { if (target < 0x80 && target < _cur_grffile->param_end) { grfmsg(7, "Param %u already defined, skipping", target); return; } - oper &= 0x7F; + oper = GB(oper, 0, 7); } if (src2 == 0xFE) { @@ -2945,7 +2873,6 @@ static void ParamSet(byte *buf, int len) uint start = 0; uint size = 0; uint shift = _vehshifts[feature]; - int i; if (op == 6) { /* Return GRFID of set that reserved ID */ @@ -2956,7 +2883,7 @@ static void ParamSet(byte *buf, int len) /* With an operation of 2 or 3, we want to reserve a specific block of IDs */ if (op == 2 || op == 3) start = _cur_grffile->param[target]; - for (i = start; i < _vehcounts[feature]; i++) { + for (uint i = start; i < _vehcounts[feature]; i++) { if (_grm_engines[shift + i] == 0) { size++; } else { @@ -2972,7 +2899,7 @@ static void ParamSet(byte *buf, int len) /* Got the slot... */ if (op == 0 || op == 3) { grfmsg(2, "GRM: Reserving %d vehicles at %d", count, start); - for (i = 0; i < count; i++) _grm_engines[shift + start + i] = _cur_grffile->grfid; + for (uint i = 0; i < count; i++) _grm_engines[shift + start + i] = _cur_grffile->grfid; } src1 = start; } else { @@ -3048,6 +2975,7 @@ static void ParamSet(byte *buf, int len) * cannot be found, a value of 0 is used for the parameter value * instead. */ + uint32 res; switch (oper) { case 0x00: res = src1; @@ -3169,15 +3097,12 @@ static void SafeGRFInhibit(byte *buf, int len) * B num Number of GRFIDs that follow * D grfids GRFIDs of the files to deactivate */ - byte num; - int i; - - if (!check_length(len, 1, "GRFInhibit")) return; - buf++, len--; - num = grf_load_byte(&buf); len--; - if (!check_length(len, 4 * num, "GRFInhibit")) return; + if (!check_length(len, 2, "GRFInhibit")) return; + buf++; + uint8 num = grf_load_byte(&buf); + if (!check_length(len, 2 + 4 * num, "GRFInhibit")) return; - for (i = 0; i < num; i++) { + for (uint i = 0; i < num; i++) { uint32 grfid = grf_load_dword(&buf); /* GRF is unsafe it if tries to deactivate other GRFs */ @@ -3200,15 +3125,12 @@ static void GRFInhibit(byte *buf, int len) * B num Number of GRFIDs that follow * D grfids GRFIDs of the files to deactivate */ - byte num; - int i; - - if (!check_length(len, 1, "GRFInhibit")) return; - buf++, len--; - num = grf_load_byte(&buf); len--; - if (!check_length(len, 4 * num, "GRFInhibit")) return; + if (!check_length(len, 2, "GRFInhibit")) return; + buf++; + uint8 num = grf_load_byte(&buf); + if (!check_length(len, 2 + 4 * num, "GRFInhibit")) return; - for (i = 0; i < num; i++) { + for (uint i = 0; i < num; i++) { uint32 grfid = grf_load_dword(&buf); GRFConfig *file = GetGRFConfig(grfid); @@ -3228,12 +3150,10 @@ static void DefineGotoLabel(byte *buf, int len) * B label The label to define * V comment Optional comment - ignored */ - GRFLabel *label; - if (!check_length(len, 1, "DefineGotoLabel")) return; buf++; len--; - label = MallocT<GRFLabel>(1); + GRFLabel *label = MallocT<GRFLabel>(1); label->label = grf_load_byte(&buf); label->nfo_line = _nfo_line; label->pos = FioGetPos(); @@ -3259,11 +3179,9 @@ static void GRFSound(byte *buf, int len) * * W num Number of sound files that follow */ - uint16 num; - if (!check_length(len, 1, "GRFSound")) return; buf++; - num = grf_load_word(&buf); + uint16 num = grf_load_word(&buf); _grf_data_blocks = num; _grf_data_type = GDT_SOUND; @@ -3325,11 +3243,10 @@ static void GRFImportBlock(byte *buf, int len) static void LoadGRFSound(byte *buf, int len) { byte *buf_start = buf; - FileEntry *se; /* Allocate a sound entry. This is done even if the data is not loaded * so that the indices used elsewhere are still correct. */ - se = AllocateFileEntry(); + FileEntry *se = AllocateFileEntry(); if (grf_load_dword(&buf) != BSWAP32('RIFF')) { grfmsg(1, "LoadGRFSound: Missing RIFF header"); @@ -3394,25 +3311,21 @@ static void LoadFontGlyph(byte *buf, int len) * B num_char Number of consecutive glyphs * W base_char First character index */ - uint8 num_def; - uint i; - buf++; len--; if (!check_length(len, 1, "LoadFontGlyph")) return; - num_def = grf_load_byte(&buf); + uint8 num_def = grf_load_byte(&buf); if (!check_length(len, 1 + num_def * 4, "LoadFontGlyph")) return; - for (i = 0; i < num_def; i++) { + for (uint i = 0; i < num_def; i++) { FontSize size = (FontSize)grf_load_byte(&buf); uint8 num_char = grf_load_byte(&buf); uint16 base_char = grf_load_word(&buf); - uint c; grfmsg(7, "LoadFontGlyph: Loading %u glyph(s) at 0x%04X for size %u", num_char, base_char, size); - for (c = 0; c < num_char; c++) { + for (uint c = 0; c < num_char; c++) { SetUnicodeGlyph(size, base_char + c, _cur_spriteid); LoadNextSprite(_cur_spriteid++, _file_index); _nfo_line++; @@ -3489,17 +3402,14 @@ static void TranslateGRFStrings(byte *buf, int len) /* 'Action 0xFF' */ static void GRFDataBlock(byte *buf, int len) { - byte name_len; - const char *name; - if (_grf_data_blocks == 0) { grfmsg(2, "GRFDataBlock: unexpected data block, skipping"); return; } buf++; - name_len = grf_load_byte(&buf); - name = (const char *)buf; + uint8 name_len = grf_load_byte(&buf); + const char *name = (const char *)buf; buf += name_len + 1; grfmsg(2, "GRFDataBlock: block name '%s'...", name); @@ -3604,20 +3514,15 @@ static void InitializeGRFSpecial() static void ResetCustomStations() { - StationSpec *statspec; - GRFFile *file; - uint i; - uint t; - - for (file = _first_grffile; file != NULL; file = file->next) { + for (GRFFile *file = _first_grffile; file != NULL; file = file->next) { if (file->stations == NULL) continue; - for (i = 0; i < MAX_STATIONS; i++) { + for (uint i = 0; i < MAX_STATIONS; i++) { if (file->stations[i] == NULL) continue; - statspec = file->stations[i]; + StationSpec *statspec = file->stations[i]; /* Release renderdata, if it wasn't copied from another custom station spec */ if (!statspec->copied_renderdata) { - for (t = 0; t < statspec->tiles; t++) { + for (uint t = 0; t < statspec->tiles; t++) { free((void*)statspec->renderdata[t].seq); } free(statspec->renderdata); @@ -3625,9 +3530,8 @@ static void ResetCustomStations() /* Release platforms and layouts */ if (!statspec->copied_layouts) { - uint l, p; - for (l = 0; l < statspec->lengths; l++) { - for (p = 0; p < statspec->platforms[l]; p++) { + for (uint l = 0; l < statspec->lengths; l++) { + for (uint p = 0; p < statspec->platforms[l]; p++) { free(statspec->layouts[l][p]); } free(statspec->layouts[l]); @@ -3648,9 +3552,9 @@ static void ResetCustomStations() static void ResetNewGRF() { - GRFFile *f, *next; + GRFFile *next; - for (f = _first_grffile; f != NULL; f = next) { + for (GRFFile *f = _first_grffile; f != NULL; f = next) { next = f->next; free(f->filename); @@ -3667,8 +3571,6 @@ static void ResetNewGRF() */ static void ResetNewGRFData() { - uint i; - CleanUpStrings(); // Copy/reset original engine info data @@ -3680,11 +3582,9 @@ static void ResetNewGRFData() // Copy/reset original bridge info data // First, free sprite table data - for (i = 0; i < MAX_BRIDGES; i++) { + for (uint i = 0; i < MAX_BRIDGES; i++) { if (_bridge[i].sprite_table != NULL) { - uint j; - - for (j = 0; j < 7; j++) free(_bridge[i].sprite_table[j]); + for (uint j = 0; j < 7; j++) free(_bridge[i].sprite_table[j]); free(_bridge[i].sprite_table); } } @@ -3746,8 +3646,7 @@ static void ResetNewGRFData() static void ClearTemporaryNewGRFData() { /* Clear the GOTO labels used for GRF processing */ - GRFLabel *l; - for (l = _cur_grffile->label; l != NULL;) { + for (GRFLabel *l = _cur_grffile->label; l != NULL;) { GRFLabel *l2 = l->next; free(l); l = l2; @@ -3785,9 +3684,7 @@ static void BuildCargoTranslationMap() static void InitNewGRFFile(const GRFConfig *config, int sprite_offset) { - GRFFile *newfile; - - newfile = GetFileByFilename(config->filename); + GRFFile *newfile = GetFileByFilename(config->filename); if (newfile != NULL) { /* We already loaded it once. */ newfile->sprite_offset = sprite_offset; @@ -3854,17 +3751,14 @@ static const CargoLabel *_default_refitmasks[] = { */ static void CalculateRefitMasks() { - EngineID engine; - - for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { + for (EngineID engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { uint32 mask = 0; uint32 not_mask = 0; uint32 xor_mask = _engine_info[engine].refit_mask; - byte i; if (cargo_allowed[engine] != 0) { // Build up the list of cargo types from the set cargo classes. - for (i = 0; i < NUM_CARGO; i++) { + for (CargoID i = 0; i < NUM_CARGO; i++) { const CargoSpec *cs = GetCargo(i); if (cargo_allowed[engine] & cs->classes) SETBIT(mask, i); if (cargo_disallowed[engine] & cs->classes) SETBIT(not_mask, i); @@ -3958,7 +3852,6 @@ static void DecodeSpecialSprite(uint num, GrfLoadingStage stage) }; byte* buf; - byte action; if (_preload_sprite == NULL) { /* No preloaded sprite to work with; allocate and read the @@ -3976,7 +3869,7 @@ static void DecodeSpecialSprite(uint num, GrfLoadingStage stage) FioSeekTo(num, SEEK_CUR); } - action = buf[0]; + byte action = buf[0]; if (action == 0xFF) { grfmsg(7, "Handling data block in stage %d", stage); @@ -4082,8 +3975,6 @@ void InitDepotWindowBlockSizes(); void LoadNewGRF(uint load_index, uint file_index) { - GrfLoadingStage stage; - InitializeGRFSpecial(); ResetNewGRFData(); @@ -4091,13 +3982,12 @@ void LoadNewGRF(uint load_index, uint file_index) /* Load newgrf sprites * in each loading stage, (try to) open each file specified in the config * and load information from it. */ - for (stage = GLS_LABELSCAN; stage <= GLS_ACTIVATION; stage++) { + for (GrfLoadingStage stage = GLS_LABELSCAN; stage <= GLS_ACTIVATION; stage++) { uint slot = file_index; - GRFConfig *c; _cur_stage = stage; _cur_spriteid = load_index; - for (c = _grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue; // TODO usererror() @@ -4119,8 +4009,3 @@ void LoadNewGRF(uint load_index, uint file_index) /* Set the block size in the depot windows based on vehicle sprite sizes */ InitDepotWindowBlockSizes(); } - - - - - |