From e29d60b21bc1f7a01ebdd63361fd298eb36ff074 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 14 May 2006 20:58:12 +0000 Subject: [PATCH] (svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons. --- newgrf.c | 7 +++++++ newgrf_engine.c | 1 + newgrf_engine.h | 1 + train_gui.c | 10 +++++----- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/newgrf.c b/newgrf.c index 8f26af7d6c..f304ba60f3 100644 --- a/newgrf.c +++ b/newgrf.c @@ -2457,6 +2457,8 @@ static void ParamSet(byte *buf, int len) case 0x9E: /* Miscellaneous GRF features */ _misc_grf_features = res; + /* Set train list engine width */ + _traininfo_vehicle_width = HASBIT(res, 3) ? 32 : 29; break; default: @@ -2648,6 +2650,11 @@ static void ResetNewGRFData(void) // Add engine type to engine data. This is needed for the refit precalculation. AddTypeToEngines(); + /* Reset misc GRF features and train list display variables */ + _misc_grf_features = 0; + _traininfo_vehicle_pitch = 0; + _traininfo_vehicle_width = 29; + InitializeSpriteGroupPool(); } diff --git a/newgrf_engine.c b/newgrf_engine.c index 8e8a5c8028..2ce4d16e79 100644 --- a/newgrf_engine.c +++ b/newgrf_engine.c @@ -67,6 +67,7 @@ static const uint16 _cargo_classes[NUM_GLOBAL_CID] = { }; int _traininfo_vehicle_pitch = 0; +int _traininfo_vehicle_width = 29; // TODO: We don't support cargo-specific wagon overrides. Pretty exotic... ;-) --pasky diff --git a/newgrf_engine.h b/newgrf_engine.h index b5d1aaff33..f41aad6c21 100644 --- a/newgrf_engine.h +++ b/newgrf_engine.h @@ -9,6 +9,7 @@ */ extern int _traininfo_vehicle_pitch; +extern int _traininfo_vehicle_width; VARDEF const uint32 _default_refitmasks[NUM_VEHICLE_TYPES]; VARDEF const CargoID _global_cargo_id[NUM_LANDSCAPE][NUM_CARGO]; diff --git a/train_gui.c b/train_gui.c index b8bb9f2bdc..bed0b9cd6f 100644 --- a/train_gui.c +++ b/train_gui.c @@ -357,19 +357,19 @@ static void ShowBuildTrainWindow(TileIndex tile) * @return Number of pixels across. */ static int WagonLengthToPixels(int len) { - return (len * 29) / 8; + return (len * _traininfo_vehicle_width) / 8; } static void DrawTrainImage(const Vehicle *v, int x, int y, int count, int skip, VehicleID selection) { int dx = 0; - count *= 8; + count *= 29; do { if (--skip < 0) { int width = v->u.rail.cached_veh_length; - if (dx + width <= count) { + if (WagonLengthToPixels(dx + width) <= count) { PalSpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); DrawSprite(GetTrainImage(v, DIR_W) | pal, x + 14 + WagonLengthToPixels(dx), y + 6 + (is_custom_sprite(RailVehInfo(v->engine_type)->image_index) ? _traininfo_vehicle_pitch : 0)); if (v->index == selection) @@ -379,7 +379,7 @@ static void DrawTrainImage(const Vehicle *v, int x, int y, int count, int skip, } v = v->next; - } while (dx < count && v != NULL); + } while (WagonLengthToPixels(dx) < count && v != NULL); } static void DrawTrainDepotWindow(Window *w) @@ -498,7 +498,7 @@ static int GetVehicleFromTrainDepotWndPt(const Window *w, int x, int y, GetDepot } } - x -= 29; /* free wagons don't have an initial loco. */ + x -= _traininfo_vehicle_width; /* free wagons don't have an initial loco. */ /* and then the list of free wagons */ FOR_ALL_VEHICLES(v) {