diff options
author | peter1138 <peter1138@openttd.org> | 2006-06-22 21:25:51 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-06-22 21:25:51 +0000 |
commit | 158e0e43f2330c0e02e3c5808f7616e321c18d56 (patch) | |
tree | 2ca84aeef4770b0ff6054fdcae99fcfb3b7f5fac | |
parent | 3753d0b602cc8bc13db9e4022e6b4b97fbfd161c (diff) | |
download | openttd-158e0e43f2330c0e02e3c5808f7616e321c18d56.tar.xz |
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
-rw-r--r-- | newgrf_engine.c | 30 | ||||
-rw-r--r-- | newgrf_spritegroup.h | 1 |
2 files changed, 20 insertions, 11 deletions
diff --git a/newgrf_engine.c b/newgrf_engine.c index 442614df9..5d02d1f62 100644 --- a/newgrf_engine.c +++ b/newgrf_engine.c @@ -502,6 +502,15 @@ static void VehicleSetTriggers(const ResolverObject *object, int triggers) } +static uint32 GetGRFParameter(EngineID engine_type, byte parameter) +{ + const GRFFile *file = GetEngineGRF(engine_type); + + if (parameter >= file->param_end) return 0; + return file->param[parameter]; +} + + static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) { const Vehicle *v = GRV(object); @@ -513,6 +522,7 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by case 0x46: return 0; /* Motion counter */ case 0xC4: return _cur_year; /* Build year */ case 0xDA: return INVALID_VEHICLE; /* Next vehicle */ + case 0x7F: return GetGRFParameter(object->u.vehicle.self_type, parameter); /* Read GRF parameter */ } *available = false; @@ -628,11 +638,7 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by return count; } - case 0x7F: { /* Read GRF parameter */ - const GRFFile *file = GetEngineGRF(v->engine_type); - if (parameter >= file->param_end) return 0; - return file->param[parameter]; - } + case 0x7F: return GetGRFParameter(v->engine_type, parameter); /* Read GRF parameter */ } /* General vehicle properties */ @@ -788,7 +794,7 @@ static const SpriteGroup *VehicleResolveReal(const ResolverObject *object, const } -static inline void NewVehicleResolver(ResolverObject *res, const Vehicle *v) +static inline void NewVehicleResolver(ResolverObject *res, EngineID engine_type, const Vehicle *v) { res->GetRandomBits = &VehicleGetRandomBits; res->GetTriggers = &VehicleGetTriggers; @@ -799,6 +805,8 @@ static inline void NewVehicleResolver(ResolverObject *res, const Vehicle *v) res->u.vehicle.self = v; res->u.vehicle.parent = (v != NULL && v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v; + res->u.vehicle.self_type = engine_type; + res->info_view = false; res->callback = 0; @@ -816,7 +824,7 @@ SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction dire ResolverObject object; CargoID cargo = GC_PURCHASE; - NewVehicleResolver(&object, v); + NewVehicleResolver(&object, engine, v); if (v != NULL) { cargo = _global_cargo_id[_opt.landscape][v->cargo_type]; @@ -855,7 +863,7 @@ SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v, bool info_vie /* Only valid for helicopters */ assert(!(AircraftVehInfo(engine)->subtype & AIR_CTOL)); - NewVehicleResolver(&object, v); + NewVehicleResolver(&object, engine, v); object.info_view = info_view; @@ -896,7 +904,7 @@ uint16 GetVehicleCallback(uint16 callback, uint32 param1, uint32 param2, EngineI ResolverObject object; CargoID cargo; - NewVehicleResolver(&object, v); + NewVehicleResolver(&object, engine, v); object.callback = callback; object.callback_param1 = param1; @@ -941,7 +949,7 @@ uint16 GetVehicleCallbackParent(uint16 callback, uint32 param1, uint32 param2, E ResolverObject object; CargoID cargo; - NewVehicleResolver(&object, v); + NewVehicleResolver(&object, engine, v); object.callback = callback; object.callback_param1 = param1; @@ -982,7 +990,7 @@ static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_rando /* We can't trigger a non-existent vehicle... */ assert(v != NULL); - NewVehicleResolver(&object, v); + NewVehicleResolver(&object, v->engine_type, v); object.trigger = trigger; diff --git a/newgrf_spritegroup.h b/newgrf_spritegroup.h index ad3507a5f..216e2580b 100644 --- a/newgrf_spritegroup.h +++ b/newgrf_spritegroup.h @@ -171,6 +171,7 @@ typedef struct ResolverObject { struct { const struct Vehicle *self; const struct Vehicle *parent; + EngineID self_type; } vehicle; struct { TileIndex tile; |