(svn r3059) Use bitfields to encode railtype and climates of engines instead of manual shifting/anding
This commit is contained in:
		
							
								
								
									
										4
									
								
								engine.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								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; | ||||
| 		} | ||||
|   | ||||
							
								
								
									
										3
									
								
								engine.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								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 { | ||||
|   | ||||
							
								
								
									
										6
									
								
								newgrf.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								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 */ | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 tron
					tron