From ac9f287f205d561dd863649abe67f9b2b764ffc2 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 13 Oct 2007 02:23:11 +0000 Subject: (svn r11252) -Revert r11239, Fix r9620: cargo translation was not done correctly --- src/newgrf.cpp | 19 +++---------------- src/newgrf_cargo.cpp | 20 +++++++++++--------- src/newgrf_cargo.h | 2 +- 3 files changed, 15 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 09528486b..28ca65342 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1762,7 +1762,7 @@ static bool IndustrytilesChangeInfo(uint indtid, int numinfo, int prop, byte **b case 0x0B: case 0x0C: { uint16 acctp = grf_load_word(&buf); - tsp->accepts_cargo[prop - 0x0A] = GB(acctp, 0, 8); + tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur_grffile); tsp->acceptance[prop - 0x0A] = GB(acctp, 8, 8); } break; @@ -1963,13 +1963,13 @@ static bool IndustriesChangeInfo(uint indid, int numinfo, int prop, byte **bufp, case 0x10: // Production cargo types for (byte j = 0; j < 2; j++) { - indsp->produced_cargo[j] = grf_load_byte(&buf); + indsp->produced_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile); } break; case 0x11: // Acceptance cargo types for (byte j = 0; j < 3; j++) { - indsp->accepts_cargo[j] = grf_load_byte(&buf); + indsp->accepts_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile); } grf_load_byte(&buf); // Unnused, eat it up break; @@ -5237,15 +5237,6 @@ static void FinaliseIndustriesArray() strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->new_industry_text); if (strid != STR_UNDEFINED) indsp->new_industry_text = strid; - for (byte j = 0; j < 2; j++) { - CargoID c = GetCargoTranslation(indsp->produced_cargo[j], indsp->grf_prop.grffile); - indsp->produced_cargo[j] = c; - } - for (byte j = 0; j < 3; j++) { - CargoID c = GetCargoTranslation(indsp->accepts_cargo[j], indsp->grf_prop.grffile); - indsp->accepts_cargo[j] = c; - } - _industry_mngr.SetEntitySpec(indsp); _loaded_newgrf_features.has_newindustries = true; } @@ -5256,10 +5247,6 @@ static void FinaliseIndustriesArray() for (int i = 0; i < NUM_INDUSTRYTILES; i++) { IndustryTileSpec *indtsp = file->indtspec[i]; if (indtsp != NULL) { - for (byte j = 0; j < 3; j++) { - CargoID c = GetCargoTranslation(indtsp->accepts_cargo[j], indtsp->grf_prop.grffile); - indtsp->accepts_cargo[j] = c; - } _industile_mngr.SetEntitySpec(indtsp); } } diff --git a/src/newgrf_cargo.cpp b/src/newgrf_cargo.cpp index 1a731b835..e9323f930 100644 --- a/src/newgrf_cargo.cpp +++ b/src/newgrf_cargo.cpp @@ -98,17 +98,19 @@ uint16 GetCargoCallback(CallbackID callback, uint32 param1, uint32 param2, const } -CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile) +CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile, bool usebit) { /* Pre-version 7 uses the 'climate dependent' ID, i.e. cargo is the cargo ID */ - if (grffile->grf_version < 7) return HASBIT(_cargo_mask, cargo) ? cargo : (CargoID) CT_INVALID; - - /* If the GRF contains a translation table (and the cargo is in bounds) - * then get the cargo ID for the label */ - if (cargo < grffile->cargo_max) return GetCargoIDByLabel(grffile->cargo_list[cargo]); - - /* Else the cargo value is a 'climate independent' 'bitnum' */ - return GetCargoIDByBitnum(cargo); + if (grffile->grf_version < 7) { + if (!usebit) return cargo; + /* Else the cargo value is a 'climate independent' 'bitnum' */ + if (HASBIT(_cargo_mask, cargo)) return GetCargoIDByBitnum(cargo); + } else { + /* If the GRF contains a translation table (and the cargo is in bounds) + * then get the cargo ID for the label */ + if (cargo < grffile->cargo_max) return GetCargoIDByLabel(grffile->cargo_list[cargo]); + } + return CT_INVALID; } uint8 GetReverseCargoTranslation(CargoID cargo, const GRFFile *grffile) diff --git a/src/newgrf_cargo.h b/src/newgrf_cargo.h index 0c6e41af4..25cc59e14 100644 --- a/src/newgrf_cargo.h +++ b/src/newgrf_cargo.h @@ -29,7 +29,7 @@ struct GRFFile; SpriteID GetCustomCargoSprite(const CargoSpec *cs); uint16 GetCargoCallback(CallbackID callback, uint32 param1, uint32 param2, const CargoSpec *cs); -CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile); +CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile, bool usebit = false); uint8 GetReverseCargoTranslation(CargoID cargo, const GRFFile *grffile); #endif /* NEWGRF_CARGO_H */ -- cgit v1.2.3-54-g00ecf