diff --git a/engine.h b/engine.h --- a/engine.h +++ b/engine.h @@ -219,6 +219,12 @@ extern ShipVehicleInfo _ship_vehicle_inf extern AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES]; extern RoadVehicleInfo _road_vehicle_info[NUM_ROAD_ENGINES]; +static inline const EngineInfo *EngInfo(EngineID e) +{ + assert(e < lengthof(_engine_info)); + return &_engine_info[e]; +} + static inline const RailVehicleInfo* RailVehInfo(EngineID e) { assert(e < lengthof(_rail_vehicle_info)); diff --git a/players.c b/players.c --- a/players.c +++ b/players.c @@ -625,7 +625,7 @@ byte GetPlayerRailtypes(PlayerID p) for (i = 0; i != TOTAL_NUM_ENGINES; i++) { const Engine* e = GetEngine(i); - const EngineInfo *ei = &_engine_info[i]; + const EngineInfo *ei = EngInfo(i); if (e->type == VEH_Train && HASBIT(ei->climates, _opt.landscape) && (HASBIT(e->player_avail, p) || _date >= (e->intro_date + 365)) && diff --git a/train_gui.c b/train_gui.c --- a/train_gui.c +++ b/train_gui.c @@ -92,7 +92,7 @@ void DrawTrainEnginePurchaseInfo(int x, void DrawTrainWagonPurchaseInfo(int x, int y, EngineID engine_number) { const RailVehicleInfo *rvi = RailVehInfo(engine_number); - bool refittable = (_engine_info[engine_number].refit_mask != 0); + bool refittable = (EngInfo(engine_number)->refit_mask != 0); /* Purchase cost */ SetDParam(0, (rvi->base_cost * _price.build_railwagon) >> 8); @@ -910,7 +910,7 @@ static void TrainViewWndProc(Window *w, /* See if any vehicle can be refitted */ for (u = v; u != NULL; u = u->next) { - if (_engine_info[u->engine_type].refit_mask != 0 || + if (EngInfo(u->engine_type)->refit_mask != 0 || (!(RailVehInfo(v->engine_type)->flags & RVI_WAGON) && v->cargo_cap != 0)) { CLRBIT(w->disabled_state, 12); /* We have a refittable carriage, bail out */ diff --git a/vehicle.c b/vehicle.c --- a/vehicle.c +++ b/vehicle.c @@ -694,7 +694,7 @@ bool CanFillVehicle(Vehicle *v) bool CanRefitTo(EngineID engine_type, CargoID cid_to) { CargoID cid = _global_cargo_id[_opt_ptr->landscape][cid_to]; - return HASBIT(_engine_info[engine_type].refit_mask, cid); + return HASBIT(EngInfo(engine_type)->refit_mask, cid); } static void DoDrawVehicle(const Vehicle *v) @@ -2061,7 +2061,7 @@ static PalSpriteID GetEngineColourMap(En byte colour = _player_colors[player]; /* XXX Magic 0x307 is the first company colour remap sprite */ - map = HASBIT(_engine_info[engine_type].misc_flags, EF_USES_2CC) ? + map = HASBIT(EngInfo(engine_type)->misc_flags, EF_USES_2CC) ? (SPR_2CCMAP_BASE + colour + colour * 16) : (PALETTE_RECOLOR_START + colour); return SPRITE_PALETTE(map << PALETTE_SPRITE_START); diff --git a/vehicle_gui.c b/vehicle_gui.c --- a/vehicle_gui.c +++ b/vehicle_gui.c @@ -233,7 +233,7 @@ CargoID DrawVehicleRefitWindow(const Veh * it with the bitmask of available cargo on the current landscape, and * where the bits are set: those are available */ do { - cmask |= _engine_info[u->engine_type].refit_mask; + cmask |= EngInfo(u->engine_type)->refit_mask; u = u->next; } while (v->type == VEH_Train && u != NULL); @@ -461,7 +461,7 @@ static void train_engine_drawing_loop(in EngineID i = GetRailVehAtPosition(j); const Engine *e = GetEngine(i); const RailVehicleInfo *rvi = RailVehInfo(i); - const EngineInfo *info = &_engine_info[i]; + const EngineInfo *info = EngInfo(i); if (!EngineHasReplacementForPlayer(p, i) && _player_num_engines[i] == 0 && show_outdated) continue; @@ -523,7 +523,7 @@ static void SetupScrollStuffForReplaceWi for (i = 0; i < NUM_TRAIN_ENGINES; i++) { EngineID eid = GetRailVehAtPosition(i); const Engine* e = GetEngine(eid); - const EngineInfo* info = &_engine_info[eid]; + const EngineInfo* info = EngInfo(eid); // left window contains compatible engines while right window only contains engines of the selected type if (ENGINE_AVAILABLE && (