# HG changeset patch # User peter1138 # Date 1172359221 0 # Node ID a7aecaae3414ae6d04747e848b9f1606bd939b3b # Parent 97fbbda2bb0870ebe3e636c7d63c533b1716a746 (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47 diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3707,6 +3707,29 @@ _cur_grffile->spritegroups_count = 0; } +static void BuildCargoTranslationMap() +{ + memset(_cur_grffile->cargo_map, 0xFF, sizeof(_cur_grffile->cargo_map)); + + for (CargoID c = 0; c < NUM_CARGO; c++) { + const CargoSpec *cs = GetCargo(c); + if (!cs->IsValid()) continue; + + if (_cur_grffile->cargo_max == 0) { + /* Default translation table, so just a straight mapping to 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; + break; + } + } + } + } +} + static void InitNewGRFFile(const GRFConfig *config, int sprite_offset) { GRFFile *newfile; @@ -4032,6 +4055,7 @@ LoadNewGRFFile(c, slot++, stage); if (stage == GLS_ACTIVATION) { ClearTemporaryNewGRFData(); + BuildCargoTranslationMap(); DEBUG(sprite, 2, "Currently %i sprites are loaded", _cur_spriteid); } } diff --git a/src/newgrf.h b/src/newgrf.h --- a/src/newgrf.h +++ b/src/newgrf.h @@ -64,6 +64,7 @@ uint8 cargo_max; CargoLabel *cargo_list; + uint8 cargo_map[NUM_CARGO]; } GRFFile; extern GRFFile *_first_grffile; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -608,7 +608,7 @@ */ const CargoSpec *cs = GetCargo(v->cargo_type); - return (cs->classes << 16) | (cs->weight << 8) | cs->bitnum; + return (cs->classes << 16) | (cs->weight << 8) | GetEngineGRF(v->engine_type)->cargo_map[v->cargo_type]; } case 0x48: return GetVehicleTypeInfo(v->engine_type); /* Vehicle Type Info */