changeset 6142:586baa62c8d6 draft

(svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
author peter1138 <peter1138@openttd.org>
date Sat, 24 Feb 2007 19:26:45 +0000
parents 4be07d3ba23b
children bccc948d9804
files src/newgrf.cpp
diffstat 1 files changed, 28 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -364,7 +364,8 @@
 				if (ctype < NUM_CARGO) {
 					rvi[i].cargo_type = ctype;
 				} else {
-					grfmsg(2, "RailVehicleChangeInfo: Invalid cargo type %d, ignoring", ctype);
+					rvi[i].cargo_type = CT_INVALID;
+					grfmsg(2, "RailVehicleChangeInfo: Invalid cargo type %d, using first refittable", ctype);
 				}
 			}
 			break;
@@ -555,7 +556,8 @@
 				if (cargo < NUM_CARGO) {
 					rvi[i].cargo_type = cargo;
 				} else {
-					grfmsg(2, "RoadVehicleChangeInfo: Invalid cargo type %d, ignoring", cargo);
+					rvi[i].cargo_type = CT_INVALID;
+					grfmsg(2, "RoadVehicleChangeInfo: Invalid cargo type %d, using first refittable", cargo);
 				}
 			}
 			break;
@@ -665,17 +667,11 @@
 			FOR_EACH_OBJECT {
 				uint8 cargo = grf_load_byte(&buf);
 
-				// XXX: Need to consult this with patchman yet.
-#if 0
-				// Documentation claims this is already the
-				// per-landscape cargo type id, but newships.grf
-				// assume otherwise.
-				cargo = local_cargo_id_ctype[cargo];
-#endif
 				if (cargo < NUM_CARGO) {
 					svi[i].cargo_type = cargo;
 				} else {
-					grfmsg(2, "ShipVehicleChangeInfo: Invalid cargo type %d, ignoring", cargo);
+					svi[i].cargo_type = CT_INVALID;
+					grfmsg(2, "ShipVehicleChangeInfo: Invalid cargo type %d, using first refittable", cargo);
 				}
 			}
 			break;
@@ -3713,6 +3709,28 @@
 			}
 		}
 		_engine_info[engine].refit_mask = ((mask & ~not_mask) ^ xor_mask) & _cargo_mask;
+
+		if (_engine_info[engine].refit_mask == 0) continue;
+
+		/* Check if this engine's cargo type is valid. If not, set to the first refittable
+		 * cargo type. Apparently cargo_type isn't a common property... */
+		switch (GetEngine(engine)->type) {
+			case VEH_Train: {
+				RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
+				if (rvi->cargo_type == CT_INVALID) rvi->cargo_type = FindFirstRefittableCargo(engine);
+				break;
+			}
+			case VEH_Road: {
+				RoadVehicleInfo *rvi = &_road_vehicle_info[engine - ROAD_ENGINES_INDEX];
+				if (rvi->cargo_type == CT_INVALID) rvi->cargo_type = FindFirstRefittableCargo(engine);
+				break;
+			}
+			case VEH_Ship: {
+				ShipVehicleInfo *svi = &_ship_vehicle_info[engine - SHIP_ENGINES_INDEX];
+				if (svi->cargo_type == CT_INVALID) svi->cargo_type = FindFirstRefittableCargo(engine);
+				break;
+			}
+		}
 	}
 }