(svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
peter1138 18 years ago
parent 5aaff3b5a1
commit 29c8142784

@ -3707,6 +3707,29 @@ static void ClearTemporaryNewGRFData(void)
_cur_grffile->spritegroups_count = 0; _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) static void InitNewGRFFile(const GRFConfig *config, int sprite_offset)
{ {
GRFFile *newfile; GRFFile *newfile;
@ -4032,6 +4055,7 @@ void LoadNewGRF(uint load_index, uint file_index)
LoadNewGRFFile(c, slot++, stage); LoadNewGRFFile(c, slot++, stage);
if (stage == GLS_ACTIVATION) { if (stage == GLS_ACTIVATION) {
ClearTemporaryNewGRFData(); ClearTemporaryNewGRFData();
BuildCargoTranslationMap();
DEBUG(sprite, 2, "Currently %i sprites are loaded", _cur_spriteid); DEBUG(sprite, 2, "Currently %i sprites are loaded", _cur_spriteid);
} }
} }

@ -64,6 +64,7 @@ typedef struct GRFFile {
uint8 cargo_max; uint8 cargo_max;
CargoLabel *cargo_list; CargoLabel *cargo_list;
uint8 cargo_map[NUM_CARGO];
} GRFFile; } GRFFile;
extern GRFFile *_first_grffile; extern GRFFile *_first_grffile;

@ -608,7 +608,7 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by
*/ */
const CargoSpec *cs = GetCargo(v->cargo_type); 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 */ case 0x48: return GetVehicleTypeInfo(v->engine_type); /* Vehicle Type Info */

Loading…
Cancel
Save