(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
This commit is contained in:
		
							
								
								
									
										24
									
								
								engine.h
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								engine.h
									
									
									
									
									
								
							| @@ -241,31 +241,37 @@ static inline bool IsEngineIndex(uint index) | ||||
|  | ||||
| /* 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]; | ||||
|   | ||||
							
								
								
									
										16
									
								
								newgrf.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								newgrf.c
									
									
									
									
									
								
							| @@ -2191,6 +2191,20 @@ static void InitializeGRFSpecial(void) | ||||
| 	                   | (_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 @@ void LoadNewGRF(uint load_index, uint file_index) | ||||
| 		initialized = true; | ||||
| 	} | ||||
|  | ||||
| 	ResetNewGRFData(); | ||||
|  | ||||
| 	/* Load newgrf sprites | ||||
| 	 * in each loading stage, (try to) open each file specified in the config | ||||
| 	 * and load information from it. */ | ||||
|   | ||||
| @@ -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 @@ EngineInfo _engine_info[TOTAL_NUM_ENGINES] = { | ||||
| 	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 @@ RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES] = { | ||||
| 	{ 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 @@ ShipVehicleInfo _ship_vehicle_info[NUM_SHIP_ENGINES] = { | ||||
|  | ||||
| /* 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 @@ AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES] = { | ||||
|  | ||||
| /* 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 | ||||
|   | ||||
| @@ -1516,7 +1516,7 @@ int32 CmdRefitRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) | ||||
| 		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)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 peter1138
					peter1138