Mercurial > hg > openttd
changeset 6147:a7aecaae3414 draft
(svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Sat, 24 Feb 2007 23:20:21 +0000 |
parents | 97fbbda2bb08 |
children | 4b171c8e99ce |
files | src/newgrf.cpp src/newgrf.h src/newgrf_engine.cpp |
diffstat | 3 files changed, 26 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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); } }
--- 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;
--- 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 */