(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
authorpeter1138
Mon, 26 Sep 2005 18:43:58 +0000
changeset 2463 de2605ed3758
parent 2462 2475587ac5de
child 2464 3dee59d241c0
(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
engine.h
newgrf.c
table/engines.h
train_cmd.c
--- a/engine.h	Mon Sep 26 13:38:12 2005 +0000
+++ b/engine.h	Mon Sep 26 18:43:58 2005 +0000
@@ -241,31 +241,37 @@
 
 /* Access Vehicle Data */
 //#include "table/engines.h"
-extern EngineInfo _engine_info[TOTAL_NUM_ENGINES];
-extern RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES];
-extern ShipVehicleInfo _ship_vehicle_info[NUM_SHIP_ENGINES];
-extern AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES];
-extern RoadVehicleInfo _road_vehicle_info[NUM_ROAD_ENGINES];
+extern const EngineInfo orig_engine_info[TOTAL_NUM_ENGINES];
+extern const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES];
+extern const ShipVehicleInfo orig_ship_vehicle_info[NUM_SHIP_ENGINES];
+extern const AircraftVehicleInfo orig_aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES];
+extern const RoadVehicleInfo orig_road_vehicle_info[NUM_ROAD_ENGINES];
 
-static inline RailVehicleInfo *RailVehInfo(uint e)
+EngineInfo _engine_info[TOTAL_NUM_ENGINES];
+RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES];
+ShipVehicleInfo _ship_vehicle_info[NUM_SHIP_ENGINES];
+AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES];
+RoadVehicleInfo _road_vehicle_info[NUM_ROAD_ENGINES];
+
+static inline const RailVehicleInfo *RailVehInfo(uint e)
 {
 	assert(e < lengthof(_rail_vehicle_info));
 	return &_rail_vehicle_info[e];
 }
 
-static inline ShipVehicleInfo *ShipVehInfo(uint e)
+static inline const ShipVehicleInfo *ShipVehInfo(uint e)
 {
 	assert(e - SHIP_ENGINES_INDEX < lengthof(_ship_vehicle_info));
 	return &_ship_vehicle_info[e - SHIP_ENGINES_INDEX];
 }
 
-static inline AircraftVehicleInfo *AircraftVehInfo(uint e)
+static inline const AircraftVehicleInfo *AircraftVehInfo(uint e)
 {
 	assert(e - AIRCRAFT_ENGINES_INDEX < lengthof(_aircraft_vehicle_info));
 	return &_aircraft_vehicle_info[e - AIRCRAFT_ENGINES_INDEX];
 }
 
-static inline RoadVehicleInfo *RoadVehInfo(uint e)
+static inline const RoadVehicleInfo *RoadVehInfo(uint e)
 {
 	assert(e - ROAD_ENGINES_INDEX < lengthof(_road_vehicle_info));
 	return &_road_vehicle_info[e - ROAD_ENGINES_INDEX];
--- a/newgrf.c	Mon Sep 26 13:38:12 2005 +0000
+++ b/newgrf.c	Mon Sep 26 18:43:58 2005 +0000
@@ -2191,6 +2191,20 @@
 	                   | (_patches.wagon_speed_limits ? (1 << 0x1D) : 0); /* wagonspeedlimits */
 }
 
+/**
+ * Reset all NewGRF loaded data
+ * TODO
+ */
+static void ResetNewGRFData(void)
+{
+	// Copy/reset original engine info data
+	memcpy(&_engine_info, &orig_engine_info, sizeof(orig_engine_info));
+	memcpy(&_rail_vehicle_info, &orig_rail_vehicle_info, sizeof(orig_rail_vehicle_info));
+	memcpy(&_ship_vehicle_info, &orig_ship_vehicle_info, sizeof(orig_ship_vehicle_info));
+	memcpy(&_aircraft_vehicle_info, &orig_aircraft_vehicle_info, sizeof(orig_aircraft_vehicle_info));
+	memcpy(&_road_vehicle_info, &orig_road_vehicle_info, sizeof(orig_road_vehicle_info));
+}
+
 static void InitNewGRFFile(const char* filename, int sprite_offset)
 {
 	GRFFile *newfile;
@@ -2374,6 +2388,8 @@
 		initialized = true;
 	}
 
+	ResetNewGRFData();
+
 	/* Load newgrf sprites
 	 * in each loading stage, (try to) open each file specified in the config
 	 * and load information from it. */
--- a/table/engines.h	Mon Sep 26 13:38:12 2005 +0000
+++ b/table/engines.h	Mon Sep 26 18:43:58 2005 +0000
@@ -25,7 +25,7 @@
   */
 #define MW(a,b,c,d,e,f) {a,b|0x80,c,d,((e)<<4)|(f)}
 
-EngineInfo _engine_info[TOTAL_NUM_ENGINES] = {
+const EngineInfo orig_engine_info[TOTAL_NUM_ENGINES] = {
 	MK(  1827,  20,  15,  30,   0,   1), /*   0 Kirby Paul Tank (Steam) */
 	MK( 12784,  20,  22,  30,   0,   6), /*   1 MJS 250 (Diesel) */
 	MK(  9497,  20,  20,  50,   0,   8), /*   2 Ploddyphut Choo-Choo */
@@ -284,7 +284,7 @@
 	MK( 13575,  20,  20,  99,   0,   8), /* 255  */
 };
 
-RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES] = {
+const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
 	// image_index  max_speed (kph)      running_cost_base                 callbackmask    shortened factor
 	// |  flags     |        power (hp)  |    running_cost_class           |   powered wagons power
 	// |  |    base_cost     |    weight      |    capacity                |   |   powered wagons weight
@@ -408,7 +408,7 @@
 	{ 59, 2, 191,   0,       0,  18,     0,   0,  37,   CT_PLASTIC      ,  0,  0,  0,  0,  0 }, /* 115 */
 };
 
-ShipVehicleInfo _ship_vehicle_info[NUM_SHIP_ENGINES] = {
+const ShipVehicleInfo orig_ship_vehicle_info[NUM_SHIP_ENGINES] = {
 	// image_index  cargo_type     cargo_amount                 refittable
 	// |  base_cost |              |    running_cost            |
 	// |  |    max_speed           |    |    sfx                |
@@ -428,7 +428,7 @@
 
 /* subtype: &1: regular aircraft (else chopper); &2: crashes easily on small airports */
 /* sfx from somewhere around SND_45_PLANE_CRASHING are toyland plane-sounds */
-AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES] = {
+const AircraftVehicleInfo orig_aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES] = {
 	// image_index         sfx                         acceleration
 	// |   base_cost       |                           |   max_speed
 	// |   |    running_cost                           |   |    mail_capacity
@@ -479,7 +479,7 @@
 
 /* I hope I got the cargo types right, figuring out which is which for which
  * climate is a bitch */
-RoadVehicleInfo _road_vehicle_info[NUM_ROAD_ENGINES] = {
+const RoadVehicleInfo orig_road_vehicle_info[NUM_ROAD_ENGINES] = {
 	// image_index       sfx                                 max_speed
 	// |    base_cost    |                                   |   capacity
 	// |    |    running_cost                                |   |  cargo_type
--- a/train_cmd.c	Mon Sep 26 13:38:12 2005 +0000
+++ b/train_cmd.c	Mon Sep 26 18:43:58 2005 +0000
@@ -1516,7 +1516,7 @@
 		if (!CanRefitTo(v, new_cid)) continue;
 
 		if (v->cargo_cap != 0) {
-			RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
+			const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
 			uint16 amount = CALLBACK_FAILED;
 
 			if (HASBIT(rvi->callbackmask, CBM_REFIT_CAP)) {