mirror of https://github.com/OpenTTD/OpenTTD
(svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
parent
2f6a46632a
commit
85ec21e8c5
|
@ -77,10 +77,6 @@ bool _have_2cc = false;
|
||||||
/* Set if there are any newhouses loaded. */
|
/* Set if there are any newhouses loaded. */
|
||||||
bool _have_newhouses = false;
|
bool _have_newhouses = false;
|
||||||
|
|
||||||
/* Default cargo translation table. By default there are 27 possible cargo types */
|
|
||||||
static const uint _default_cargo_max = 27;
|
|
||||||
static CargoLabel _default_cargo_list[_default_cargo_max];
|
|
||||||
|
|
||||||
|
|
||||||
enum GrfDataType {
|
enum GrfDataType {
|
||||||
GDT_SOUND,
|
GDT_SOUND,
|
||||||
|
@ -2354,14 +2350,35 @@ static CargoID TranslateCargo(uint8 feature, uint8 ctype)
|
||||||
if (feature == GSF_STATION && ctype == 0xFE) return CT_DEFAULT_NA;
|
if (feature == GSF_STATION && ctype == 0xFE) return CT_DEFAULT_NA;
|
||||||
if (ctype == 0xFF) return CT_PURCHASE;
|
if (ctype == 0xFF) return CT_PURCHASE;
|
||||||
|
|
||||||
|
if (_cur_grffile->cargo_max == 0) {
|
||||||
|
/* No cargo table, so use bitnum values */
|
||||||
|
if (ctype >= 32) {
|
||||||
|
grfmsg(1, "FeatureMapSpriteGroup: Cargo bitnum %d out of range (max 31), skipping.", ctype);
|
||||||
|
return CT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
||||||
|
const CargoSpec *cs = GetCargo(c);
|
||||||
|
if (!cs->IsValid()) continue;
|
||||||
|
|
||||||
|
if (cs->bitnum == ctype) {
|
||||||
|
grfmsg(6, "FeatureMapSpriteGroup: Cargo bitnum %d mapped to cargo type %d.", ctype, c);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
grfmsg(5, "FeatureMapSpriteGroup: Cargo bitnum %d not available in this climate, skipping.", ctype);
|
||||||
|
return CT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if the cargo type is out of bounds of the cargo translation table */
|
/* Check if the cargo type is out of bounds of the cargo translation table */
|
||||||
if (ctype >= (_cur_grffile->cargo_max == 0 ? _default_cargo_max : _cur_grffile->cargo_max)) {
|
if (ctype >= _cur_grffile->cargo_max) {
|
||||||
grfmsg(1, "FeatureMapSpriteGroup: Cargo type %d out of range (max %d), skipping.", ctype, (_cur_grffile->cargo_max == 0 ? _default_cargo_max : _cur_grffile->cargo_max) - 1);
|
grfmsg(1, "FeatureMapSpriteGroup: Cargo type %d out of range (max %d), skipping.", ctype, _cur_grffile->cargo_max - 1);
|
||||||
return CT_INVALID;
|
return CT_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look up the cargo label from the translation table */
|
/* Look up the cargo label from the translation table */
|
||||||
CargoLabel cl = _cur_grffile->cargo_max == 0 ? _default_cargo_list[ctype] : _cur_grffile->cargo_list[ctype];
|
CargoLabel cl = _cur_grffile->cargo_list[ctype];
|
||||||
if (cl == 0) {
|
if (cl == 0) {
|
||||||
grfmsg(5, "FeatureMapSpriteGroup: Cargo type %d not available in this climate, skipping.", ctype);
|
grfmsg(5, "FeatureMapSpriteGroup: Cargo type %d not available in this climate, skipping.", ctype);
|
||||||
return CT_INVALID;
|
return CT_INVALID;
|
||||||
|
@ -4160,13 +4177,6 @@ static void ResetNewGRFData()
|
||||||
/* Set up the default cargo types */
|
/* Set up the default cargo types */
|
||||||
SetupCargoForClimate(_opt.landscape);
|
SetupCargoForClimate(_opt.landscape);
|
||||||
|
|
||||||
/* Generate default cargo translation table */
|
|
||||||
memset(_default_cargo_list, 0, sizeof(_default_cargo_list));
|
|
||||||
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
|
||||||
const CargoSpec *cs = GetCargo(c);
|
|
||||||
if (cs->IsValid()) _default_cargo_list[cs->bitnum] = cs->label;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset misc GRF features and train list display variables */
|
/* Reset misc GRF features and train list display variables */
|
||||||
_misc_grf_features = 0;
|
_misc_grf_features = 0;
|
||||||
_traininfo_vehicle_pitch = 0;
|
_traininfo_vehicle_pitch = 0;
|
||||||
|
|
Loading…
Reference in New Issue