@ -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 ;