(svn r4896) - NewGRF: add support for vehicle property 0x25 (user defined data) used by variable 0x42.
authorpeter1138
Wed, 17 May 2006 08:20:36 +0000
changeset 3862 898c8212afa1
parent 3861 1bc622ec64e8
child 3863 62f1303f4bb4
(svn r4896) - NewGRF: add support for vehicle property 0x25 (user defined data) used by variable 0x42.
engine.h
newgrf.c
newgrf_engine.c
table/engines.h
--- a/engine.h	Wed May 17 07:16:49 2006 +0000
+++ b/engine.h	Wed May 17 08:20:36 2006 +0000
@@ -30,6 +30,7 @@
 	                    //       kind of visual effect to generate for a vehicle (default, steam, diesel, electric).
 	                    //       Same goes for the callback result, which atm is only used to check if a wagon is powered.
 	byte shorten_factor;	// length on main map for this type is 8 - shorten_factor
+	byte user_def_data; ///! Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles
 } RailVehicleInfo;
 
 typedef struct ShipVehicleInfo {
--- a/newgrf.c	Wed May 17 07:16:49 2006 +0000
+++ b/newgrf.c	Wed May 17 08:20:36 2006 +0000
@@ -437,6 +437,10 @@
 			}
 			break;
 
+		case 0x25: /* User-defined bit mask to set when checking veh. var. 42 */
+			FOR_EACH_OBJECT rvi[i].user_def_data = grf_load_byte(&buf);
+			break;
+
 		case 0x27: /* Miscellaneous flags */
 			FOR_EACH_OBJECT ei[i].misc_flags = grf_load_byte(&buf);
 			break;
@@ -454,7 +458,6 @@
 		case 0x1C: /* Refit cost */
 		case 0x1F: /* Tractive effort */
 		case 0x20: /* Air drag */
-		case 0x25: /* User-defined bit mask to set when checking veh. var. 42 */
 		case 0x26: /* Retire vehicle early */
 			/* TODO */
 			FOR_EACH_OBJECT grf_load_byte(&buf);
--- a/newgrf_engine.c	Wed May 17 07:16:49 2006 +0000
+++ b/newgrf_engine.c	Wed May 17 08:20:36 2006 +0000
@@ -534,6 +534,7 @@
 			byte cargo_classes = 0;
 			uint common_cargo_best = 0;
 			uint common_cargos[NUM_GLOBAL_CID];
+			byte user_def_data = 0;
 			CargoID cargo;
 			CargoID common_cargo_type = GC_PASSENGERS;
 
@@ -547,6 +548,7 @@
 				cargo = _global_cargo_id[_opt.landscape][u->cargo_type];
 				cargo_classes |= _cargo_classes[cargo];
 				common_cargos[cargo]++;
+				user_def_data |= RailVehInfo(u->engine_type)->user_def_data;
 			}
 
 			/* Pick the most common cargo type */
@@ -557,7 +559,7 @@
 				}
 			}
 
-			return cargo_classes | (common_cargo_type << 8);
+			return cargo_classes | (common_cargo_type << 8) | (user_def_data << 24);
 		}
 
 		case 0x43: /* Player information */
--- a/table/engines.h	Wed May 17 07:16:49 2006 +0000
+++ b/table/engines.h	Wed May 17 08:20:36 2006 +0000
@@ -324,7 +324,7 @@
  * @param j cargo_type
  * @param k ai_rank
  */
-#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, d, e, f, g, h, h, i, j, k, 0, 0, 0, 0, 0 }
+#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, d, e, f, g, h, h, i, j, k, 0, 0, 0, 0, 0, 0 }
 #define M RVI_MULTIHEAD
 #define W RVI_WAGON
 #define S 0