summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron@openttd.org>2005-10-18 11:23:58 +0000
committertron <tron@openttd.org>2005-10-18 11:23:58 +0000
commitf3de17256046ed3286ba17d130c7701a8729ac16 (patch)
tree000f00442c2db76662d897b20b8ca8d16bb0a4ba
parentd4752ba0da4c6387020167b3acee938ed14d9a66 (diff)
downloadopenttd-f3de17256046ed3286ba17d130c7701a8729ac16.tar.xz
(svn r3059) Use bitfields to encode railtype and climates of engines instead of manual shifting/anding
-rw-r--r--engine.c4
-rw-r--r--engine.h3
-rw-r--r--newgrf.c6
-rw-r--r--table/engines.h4
-rw-r--r--vehicle_gui.c2
5 files changed, 9 insertions, 10 deletions
diff --git a/engine.c b/engine.c
index b2f369d01..2825c7c9f 100644
--- a/engine.c
+++ b/engine.c
@@ -183,7 +183,7 @@ void StartupEngines(void)
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 @@ void StartupEngines(void)
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;
}
diff --git a/engine.h b/engine.h
index 4fbb3aa33..30c4acfa2 100644
--- a/engine.h
+++ b/engine.h
@@ -70,7 +70,8 @@ typedef struct EngineInfo {
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 {
diff --git a/newgrf.c b/newgrf.c
index d534181df..93905ed23 100644
--- a/newgrf.c
+++ b/newgrf.c
@@ -215,8 +215,7 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
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 @@ static void VehicleChangeInfo(byte *buf, int len)
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 */
diff --git a/table/engines.h b/table/engines.h
index b1d6c2976..bba258287 100644
--- a/table/engines.h
+++ b/table/engines.h
@@ -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
diff --git a/vehicle_gui.c b/vehicle_gui.c
index b7a03acf8..ce28ca7fc 100644
--- a/vehicle_gui.c
+++ b/vehicle_gui.c
@@ -409,7 +409,7 @@ static int CDECL VehicleMaxSpeedSorter(const void *a, const void *b)
// 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