diff -r e9478d949505 -r cded5f3a83c9 newgrf_engine.c --- a/newgrf_engine.c Tue Oct 17 07:33:05 2006 +0000 +++ b/newgrf_engine.c Tue Oct 17 14:52:55 2006 +0000 @@ -58,11 +58,10 @@ int _traininfo_vehicle_pitch = 0; int _traininfo_vehicle_width = 29; -// TODO: We don't support cargo-specific wagon overrides. Pretty exotic... ;-) --pasky - typedef struct WagonOverride { byte *train_id; int trains; + CargoID cargo; const SpriteGroup *group; } WagonOverride; @@ -73,7 +72,7 @@ static WagonOverrides _engine_wagon_overrides[TOTAL_NUM_ENGINES]; -void SetWagonOverrideSprites(EngineID engine, const SpriteGroup *group, byte *train_id, int trains) +void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, byte *train_id, int trains) { WagonOverrides *wos; WagonOverride *wo; @@ -88,12 +87,13 @@ * to prevent leaks. But first we need to refcount the SpriteGroup. * --pasky */ wo->group = group; + wo->cargo = cargo; wo->trains = trains; wo->train_id = malloc(trains); memcpy(wo->train_id, train_id, trains); } -static const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, byte overriding_engine) +static const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, byte overriding_engine) { const WagonOverrides *wos = &_engine_wagon_overrides[engine]; int i; @@ -108,7 +108,7 @@ int j; for (j = 0; j < wo->trains; j++) { - if (wo->train_id[j] == overriding_engine) return wo->group; + if (wo->train_id[j] == overriding_engine && (wo->cargo == cargo || wo->cargo == GC_DEFAULT)) return wo->group; } } return NULL; @@ -872,7 +872,7 @@ group = engine_custom_sprites[engine][cargo]; if (v != NULL && v->type == VEH_Train) { - const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); + const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, cargo, v->u.rail.first_engine); if (overset != NULL) group = overset; } @@ -919,7 +919,7 @@ bool UsesWagonOverride(const Vehicle* v) { assert(v->type == VEH_Train); - return GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine) != NULL; + return GetWagonOverrideSpriteSet(v->engine_type, _global_cargo_id[_opt.landscape][v->cargo_type], v->u.rail.first_engine) != NULL; } /** @@ -949,7 +949,7 @@ group = engine_custom_sprites[engine][cargo]; if (v != NULL && v->type == VEH_Train) { - const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); + const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, cargo, v->u.rail.first_engine); if (overset != NULL) group = overset; } @@ -991,7 +991,7 @@ group = engine_custom_sprites[engine][cargo]; if (v != NULL && v->type == VEH_Train) { - const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); + const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, cargo, v->u.rail.first_engine); if (overset != NULL) group = overset; } @@ -1023,7 +1023,7 @@ group = engine_custom_sprites[v->engine_type][cargo]; if (v->type == VEH_Train) { - const SpriteGroup *overset = GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine); + const SpriteGroup *overset = GetWagonOverrideSpriteSet(v->engine_type, cargo, v->u.rail.first_engine); if (overset != NULL) group = overset; }