summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2007-10-13 02:23:11 +0000
committerglx <glx@openttd.org>2007-10-13 02:23:11 +0000
commitac9f287f205d561dd863649abe67f9b2b764ffc2 (patch)
treebf1a8fa343d89f308517e78ca707b1847cda4ffe /src
parent63f54c43b3ec8ad83c7b9e0303139e3b100100bf (diff)
downloadopenttd-ac9f287f205d561dd863649abe67f9b2b764ffc2.tar.xz
(svn r11252) -Revert r11239, Fix r9620: cargo translation was not done correctly
Diffstat (limited to 'src')
-rw-r--r--src/newgrf.cpp19
-rw-r--r--src/newgrf_cargo.cpp20
-rw-r--r--src/newgrf_cargo.h2
3 files changed, 15 insertions, 26 deletions
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 */