changeset 3845:adac418f6282 draft

(svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
author peter1138 <peter1138@openttd.org>
date Sun, 14 May 2006 20:58:12 +0000
parents afa4fb3c19b2
children 36c2ae57fb58
files newgrf.c newgrf_engine.c newgrf_engine.h train_gui.c
diffstat 4 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/newgrf.c
+++ b/newgrf.c
@@ -2457,6 +2457,8 @@
 
 		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 @@
 	// 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();
 }
 
--- a/newgrf_engine.c
+++ b/newgrf_engine.c
@@ -67,6 +67,7 @@
 };
 
 int _traininfo_vehicle_pitch = 0;
+int _traininfo_vehicle_width = 29;
 
 // TODO: We don't support cargo-specific wagon overrides. Pretty exotic... ;-) --pasky
 
--- 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];
--- a/train_gui.c
+++ b/train_gui.c
@@ -357,19 +357,19 @@
  * @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 @@
 		}
 
 		v = v->next;
-	} while (dx < count && v != NULL);
+	} while (WagonLengthToPixels(dx) < count && v != NULL);
 }
 
 static void DrawTrainDepotWindow(Window *w)
@@ -498,7 +498,7 @@
 		}
 	}
 
-	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) {