(svn r3059) Use bitfields to encode railtype and climates of engines instead of manual shifting/anding
authortron
Tue, 18 Oct 2005 11:23:58 +0000
changeset 2530 b8d5a5284024
parent 2529 97c0b71ee7dd
child 2531 ba58d797514f
(svn r3059) Use bitfields to encode railtype and climates of engines instead of manual shifting/anding
engine.c
engine.h
newgrf.c
table/engines.h
vehicle_gui.c
--- a/engine.c	Tue Oct 18 07:01:00 2005 +0000
+++ b/engine.c	Tue Oct 18 11:23:58 2005 +0000
@@ -183,7 +183,7 @@
 		uint32 r;
 
 		e->age = 0;
-		e->railtype = ei->railtype_climates >> 4;
+		e->railtype = ei->railtype;
 		e->flags = 0;
 		e->player_avail = 0;
 
@@ -217,7 +217,7 @@
 		e->lifelength = ei->lifelength + _patches.extend_vehicle_life;
 
 		// prevent certain engines from ever appearing.
-		if (!HASBIT(ei->railtype_climates, _opt.landscape)) {
+		if (!HASBIT(ei->climates, _opt.landscape)) {
 			e->flags |= ENGINE_AVAILABLE;
 			e->player_avail = 0;
 		}
--- a/engine.h	Tue Oct 18 07:01:00 2005 +0000
+++ b/engine.h	Tue Oct 18 11:23:58 2005 +0000
@@ -70,7 +70,8 @@
 	byte unk2;              ///< Carriages have the highest bit set in this one
 	byte lifelength;
 	byte base_life;
-	byte railtype_climates; ///< contains the railtype in the lower four bits, and a mask to the climates where the vehicle is available in the upper four
+	byte railtype:4;
+	byte climates:4;
 } EngineInfo;
 
 typedef struct Engine {
--- a/newgrf.c	Tue Oct 18 07:01:00 2005 +0000
+++ b/newgrf.c	Tue Oct 18 11:23:58 2005 +0000
@@ -215,8 +215,7 @@
 			FOR_EACH_OBJECT {
 				uint8 tracktype = grf_load_byte(&buf);
 
-				ei[i].railtype_climates &= 0xf;
-				ei[i].railtype_climates |= tracktype << 4;
+				ei[i].railtype = tracktype;
 			}
 		} break;
 		case 0x08: { /* AI passenger service */
@@ -1196,8 +1195,7 @@
 						FOR_EACH_OBJECT {
 							uint8 climates = grf_load_byte(&buf);
 
-							ei[i].railtype_climates &= 0xf0;
-							ei[i].railtype_climates |= climates;
+							ei[i].climates = climates;
 						}
 					}	break;
 					case 0x07: { /* Loading speed */
--- a/table/engines.h	Tue Oct 18 07:01:00 2005 +0000
+++ b/table/engines.h	Tue Oct 18 11:23:58 2005 +0000
@@ -15,7 +15,7 @@
   * @param e Rail Type of the vehicle
   * @param f Bitmask of the climates
   */
-#define MK(a,b,c,d,e,f) {a,b,c,d,((e)<<4)|(f)}
+#define MK(a, b, c, d, e, f) { a, b, c, d, e, f }
 /** Writes the properties of a train carriage into the EngineInfo struct.
   * @see EngineInfo
   * @param a Introduction date
@@ -23,7 +23,7 @@
   * @param f Bitmask of the climates
   * @note the 0x80 in parameter b sets the "is carriage bit"
   */
-#define MW(a,b,c,d,e,f) {a,b|0x80,c,d,((e)<<4)|(f)}
+#define MW(a, b, c, d, e, f) { a, b | 0x80, c, d, e, f }
 
 // Rail types
 // R = Conventional railway
--- a/vehicle_gui.c	Tue Oct 18 07:01:00 2005 +0000
+++ b/vehicle_gui.c	Tue Oct 18 11:23:58 2005 +0000
@@ -409,7 +409,7 @@
 
 // this define is to match engine.c, but engine.c keeps it to itself
 // ENGINE_AVAILABLE is used in ReplaceVehicleWndProc
-#define ENGINE_AVAILABLE ((e->flags & 1 && HASBIT(info->railtype_climates, _opt.landscape)) || HASBIT(e->player_avail, _local_player))
+#define ENGINE_AVAILABLE ((e->flags & 1 && HASBIT(info->climates, _opt.landscape)) || HASBIT(e->player_avail, _local_player))
 
 /*  if show_outdated is selected, it do not sort psudo engines properly but it draws all engines
  *	if used compined with show_cars set to false, it will work as intended. Replace window do it like that