summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-05-14 20:58:12 +0000
committerpeter1138 <peter1138@openttd.org>2006-05-14 20:58:12 +0000
commite29d60b21bc1f7a01ebdd63361fd298eb36ff074 (patch)
tree8260a44cadafb1c8be32e224224c0ca1a2615f04
parent77a3900d5d1bb8fe24cf584d3be6e7f6f423a252 (diff)
downloadopenttd-e29d60b21bc1f7a01ebdd63361fd298eb36ff074.tar.xz
(svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
-rw-r--r--newgrf.c7
-rw-r--r--newgrf_engine.c1
-rw-r--r--newgrf_engine.h1
-rw-r--r--train_gui.c10
4 files changed, 14 insertions, 5 deletions
diff --git a/newgrf.c b/newgrf.c
index 8f26af7d6..f304ba60f 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 8e8a5c802..2ce4d16e7 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 b5d1aaff3..f41aad6c2 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 b8bb9f2bd..bed0b9cd6 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) {