summaryrefslogtreecommitdiff
path: root/src/newgrf_engine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/newgrf_engine.cpp')
-rw-r--r--src/newgrf_engine.cpp37
1 files changed, 12 insertions, 25 deletions
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp
index 27320ce61..b54251e93 100644
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -44,7 +44,7 @@ void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *
WagonOverride *wo;
assert(engine < TOTAL_NUM_ENGINES);
- assert(cargo < NUM_GLOBAL_CID);
+ assert(cargo < NUM_CARGO + 1); // Include CT_DEFAULT pseudo cargo. CT_PURCHASE does not apply to overrides.
wos = &_engine_wagon_overrides[engine];
wos->overrides_count++;
@@ -76,7 +76,7 @@ static const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID car
int j;
for (j = 0; j < wo->trains; j++) {
- if (wo->train_id[j] == overriding_engine && (wo->cargo == cargo || wo->cargo == GC_DEFAULT)) return wo->group;
+ if (wo->train_id[j] == overriding_engine && (wo->cargo == cargo || wo->cargo == CT_DEFAULT)) return wo->group;
}
}
return NULL;
@@ -105,17 +105,14 @@ void UnloadWagonOverrides(void)
}
}
-// 0 - 28 are cargos, 29 is default, 30 is the advert (purchase list)
-// (It isn't and shouldn't be like this in the GRF files since new cargo types
-// may appear in future - however it's more convenient to store it like this in
-// memory. --pasky)
-static const SpriteGroup *_engine_custom_sprites[TOTAL_NUM_ENGINES][NUM_GLOBAL_CID];
+/* Space for NUM_CARGO real cargos and 2 pseudo cargos, CT_DEFAULT and CT_PURCHASE */
+static const SpriteGroup *_engine_custom_sprites[TOTAL_NUM_ENGINES][NUM_CARGO + 2];
static const GRFFile *_engine_grf[TOTAL_NUM_ENGINES];
void SetCustomEngineSprites(EngineID engine, byte cargo, const SpriteGroup *group)
{
- assert(engine < TOTAL_NUM_ENGINES);
- assert(cargo < NUM_GLOBAL_CID);
+ assert(engine < lengthof(_engine_custom_sprites));
+ assert(cargo < lengthof(*_engine_custom_sprites));
if (_engine_custom_sprites[engine][cargo] != NULL) {
grfmsg(6, "SetCustomEngineSprites: engine %d cargo %d already has group -- replacing", engine, cargo);
@@ -128,15 +125,8 @@ void SetCustomEngineSprites(EngineID engine, byte cargo, const SpriteGroup *grou
*/
void UnloadCustomEngineSprites(void)
{
- EngineID engine;
- CargoID cargo;
-
- for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
- for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) {
- _engine_custom_sprites[engine][cargo] = NULL;
- }
- _engine_grf[engine] = 0;
- }
+ memset(_engine_custom_sprites, 0, sizeof(_engine_custom_sprites));
+ memset(_engine_grf, 0, sizeof(_engine_grf));
}
static const SpriteGroup *heli_rotor_custom_sprites[NUM_AIRCRAFT_ENGINES];
@@ -818,12 +808,9 @@ static const SpriteGroup *GetVehicleSpriteGroup(EngineID engine, const Vehicle *
CargoID cargo;
if (v == NULL) {
- cargo = GC_PURCHASE;
+ cargo = CT_PURCHASE;
} else {
- const CargoSpec *cs = GetCargo(v->cargo_type);
- assert(cs->IsValid());
-
- cargo = cs->bitnum;
+ cargo = v->cargo_type;
if (v->type == VEH_Train) {
group = GetWagonOverrideSpriteSet(engine, cargo, v->u.rail.first_engine);
@@ -836,7 +823,7 @@ static const SpriteGroup *GetVehicleSpriteGroup(EngineID engine, const Vehicle *
if (group != NULL) return group;
/* Fall back to the default set if the selected cargo type is not defined */
- return _engine_custom_sprites[engine][GC_DEFAULT];
+ return _engine_custom_sprites[engine][CT_DEFAULT];
}
@@ -888,7 +875,7 @@ SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v, bool info_vie
bool UsesWagonOverride(const Vehicle* v)
{
assert(v->type == VEH_Train);
- return GetWagonOverrideSpriteSet(v->engine_type, GetCargo(v->cargo_type)->bitnum, v->u.rail.first_engine) != NULL;
+ return GetWagonOverrideSpriteSet(v->engine_type, v->cargo_type, v->u.rail.first_engine) != NULL;
}
/**