(svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
This commit is contained in:
@@ -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 */
|
||||||
|
Reference in New Issue
Block a user