(svn r4466) -Fix: (FS#71) Game no longer crashes when the last vehicle serving a station has been deleted.
authorcelestar
Tue, 18 Apr 2006 08:50:17 +0000
changeset 3580 607e4245d024
parent 3579 8885d65a2ba7
child 3581 e7bbb67ffc00
(svn r4466) -Fix: (FS#71) Game no longer crashes when the last vehicle serving a station has been deleted.
-Negative side effect: upon loading old games, stations whose last vehicle was a station have (temporarily) lower ratings.
-Positive side effect: station.h no longer includes vehicle.h (breaks the station.h->vehicle.h->rail.h chain)
economy.c
oldloader.c
openttd.c
saveload.c
station.h
station_cmd.c
vehicle.h
--- a/economy.c	Tue Apr 18 07:20:37 2006 +0000
+++ b/economy.c	Tue Apr 18 08:50:17 2006 +0000
@@ -1435,7 +1435,7 @@
 			v->cargo_source = ge->enroute_from;
 			v->cargo_days = ge->enroute_time;
 			result |= 2;
-			st->last_vehicle = v->index;
+			st->last_vehicle_type = v->type;
 		}
 	}
 
--- a/oldloader.c	Tue Apr 18 07:20:37 2006 +0000
+++ b/oldloader.c	Tue Apr 18 08:50:17 2006 +0000
@@ -682,7 +682,7 @@
 	OCL_SVAR(  OC_UINT8, Station, blocked_months_obsolete ),
 	OCL_NULL( 1 ),         // Unknown
 	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Station, airport_flags ),
-	OCL_SVAR( OC_UINT16, Station, last_vehicle ),
+	OCL_NULL( 2 ),         // last_vehicle. now last_vehicle_type
 
 	OCL_NULL( 4 ),         // Junk at end of chunk
 
--- a/openttd.c	Tue Apr 18 07:20:37 2006 +0000
+++ b/openttd.c	Tue Apr 18 08:50:17 2006 +0000
@@ -1403,6 +1403,13 @@
 		}
 	}
 
+	if (CheckSavegameVersion(26)) {
+		Station *st;
+		FOR_ALL_STATIONS(st) {
+			st->last_vehicle_type = VEH_Invalid;
+		}
+	}
+
 	FOR_ALL_PLAYERS(p) p->avail_railtypes = GetPlayerRailtypes(p->index);
 
 	return true;
--- a/saveload.c	Tue Apr 18 07:20:37 2006 +0000
+++ b/saveload.c	Tue Apr 18 08:50:17 2006 +0000
@@ -30,7 +30,7 @@
 #include "variables.h"
 #include <setjmp.h>
 
-const uint16 SAVEGAME_VERSION = 25;
+const uint16 SAVEGAME_VERSION = 26;
 uint16 _sl_version;       /// the major savegame version identifier
 byte   _sl_minor_version; /// the minor savegame version, DO NOT USE!
 
--- a/station.h	Tue Apr 18 07:20:37 2006 +0000
+++ b/station.h	Tue Apr 18 08:50:17 2006 +0000
@@ -7,7 +7,6 @@
 #include "pool.h"
 #include "sprite.h"
 #include "tile.h"
-#include "vehicle.h"
 #include "newgrf_station.h"
 
 typedef struct GoodsEntry {
@@ -72,7 +71,7 @@
 	uint32 airport_flags;
 	StationID index;
 
-	VehicleID last_vehicle;
+	byte last_vehicle_type;
 	GoodsEntry goods[NUM_CARGO];
 
 	/* Stuff that is no longer used, but needed for conversion */
--- a/station_cmd.c	Tue Apr 18 07:20:37 2006 +0000
+++ b/station_cmd.c	Tue Apr 18 08:50:17 2006 +0000
@@ -467,7 +467,7 @@
 	st->delete_ctr = 0;
 	st->facilities = 0;
 
-	st->last_vehicle = INVALID_VEHICLE;
+	st->last_vehicle_type = VEH_Invalid;
 
 	for (ge = st->goods; ge != endof(st->goods); ge++) {
 		ge->waiting_acceptance = 0;
@@ -2317,8 +2317,7 @@
 
 			{
 				byte days = ge->days_since_pickup;
-				if (st->last_vehicle != INVALID_VEHICLE &&
-						GetVehicle(st->last_vehicle)->type == VEH_Ship)
+				if (st->last_vehicle_type == VEH_Ship)
 							days >>= 2;
 				(days > 21) ||
 				(rating += 25, days > 12) ||
@@ -2644,7 +2643,7 @@
 	st->time_since_load = 255;
 	st->time_since_unload = 255;
 	st->delete_ctr = 0;
-	st->last_vehicle = INVALID_VEHICLE;
+	st->last_vehicle_type = VEH_Invalid;
 	st->facilities = FACIL_AIRPORT | FACIL_DOCK;
 	st->build_date = _date;
 
@@ -2817,7 +2816,8 @@
 	SLE_CONDVAR(Station,airport_flags,     SLE_VAR_U32 | SLE_FILE_U16, 0, 2),
 	SLE_CONDVAR(Station,airport_flags,     SLE_UINT32, 3, SL_MAX_VERSION),
 
-	SLE_VAR(Station,last_vehicle,          SLE_UINT16),
+	SLE_CONDNULL(2, 0, 25), /* Ex last-vehicle */
+	SLE_CONDVAR(Station,last_vehicle_type,          SLE_UINT8 , 26, SL_MAX_VERSION),
 
 	// Was custom station class and id
 	SLE_CONDNULL(2, 3, 25),
--- a/vehicle.h	Tue Apr 18 07:20:37 2006 +0000
+++ b/vehicle.h	Tue Apr 18 08:50:17 2006 +0000
@@ -8,6 +8,7 @@
 #include "rail.h"
 
 enum {
+	VEH_Invalid = 0,
 	VEH_Train = 0x10,
 	VEH_Road = 0x11,
 	VEH_Ship = 0x12,