Changeset - r26679:1156340816b0
[Not reviewed]
master
0 5 0
peter1138 - 5 years ago 2019-02-27 07:00:33
peter1138@openttd.org
Change: Add variant property to engines.
5 files changed with 43 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/engine.cpp
Show inline comments
 
@@ -73,6 +73,7 @@ Engine::Engine(VehicleType type, EngineI
 
	this->grf_prop.local_id = base;
 
	this->list_position = base;
 
	this->preview_company = INVALID_COMPANY;
 
	this->display_last_variant = INVALID_ENGINE;
 

	
 
	/* Check if this base engine is within the original engine data range */
 
	if (base >= _engine_counts[type]) {
 
@@ -93,6 +94,8 @@ Engine::Engine(VehicleType type, EngineI
 
		}
 
		/* Set cargo aging period to the default value. */
 
		this->info.cargo_age_period = CARGO_AGING_TICKS;
 
		/* Not a variant */
 
		this->info.variant_id = INVALID_ENGINE;
 
		return;
 
	}
 

	
src/engine_base.h
Show inline comments
 
@@ -21,6 +21,15 @@ struct WagonOverride {
 
	const SpriteGroup *group;
 
};
 

	
 
/** Flags used client-side in the purchase/autorenew engine list. */
 
enum class EngineDisplayFlags : byte {
 
	None        = 0,         ///< No flag set.
 
	HasVariants = (1U << 0), ///< Set if engine has variants.
 
	IsFolded    = (1U << 1), ///< Set if display of variants should be folded (hidden).
 
	Shaded      = (1U << 2), ///< Set if engine should be masked.
 
};
 
DECLARE_ENUM_AS_BIT_SET(EngineDisplayFlags)
 

	
 
typedef Pool<Engine, EngineID, 64, 64000> EnginePool;
 
extern EnginePool _engine_pool;
 

	
 
@@ -45,6 +54,9 @@ struct Engine : EnginePool::PoolItem<&_e
 
	uint8 original_image_index; ///< Original vehicle image index, thus the image index of the overridden vehicle
 
	VehicleType type;           ///< %Vehicle type, ie #VEH_ROAD, #VEH_TRAIN, etc.
 

	
 
	EngineDisplayFlags display_flags; ///< NOSAVE client-side-only display flags for build engine list.
 
	EngineID display_last_variant;    ///< NOSAVE client-side-only last variant selected.
 

	
 
	EngineInfo info;
 

	
 
	union {
src/engine_type.h
Show inline comments
 
@@ -145,6 +145,7 @@ struct EngineInfo {
 
	int8 retire_early;  ///< Number of years early to retire vehicle
 
	StringID string_id; ///< Default name of engine
 
	uint16 cargo_age_period; ///< Number of ticks before carried cargo is aged.
 
	EngineID variant_id;     ///< Engine variant ID. If set, will be treated specially in purchase lists.
 
};
 

	
 
/**
src/newgrf.cpp
Show inline comments
 
@@ -1334,6 +1334,10 @@ static ChangeInfoResult RailVehicleChang
 
				rvi->curve_speed_mod = buf->ReadWord();
 
				break;
 

	
 
			case 0x2F: // Engine variant
 
				ei->variant_id = GetNewEngineID(_cur.grffile, VEH_TRAIN, buf->ReadWord());
 
				break;
 

	
 
			default:
 
				ret = CommonVehicleChangeInfo(ei, prop, buf);
 
				break;
 
@@ -1528,6 +1532,10 @@ static ChangeInfoResult RoadVehicleChang
 
				break;
 
			}
 

	
 
			case 0x26: // Engine variant
 
				ei->variant_id = GetNewEngineID(_cur.grffile, VEH_ROAD, buf->ReadWord());
 
				break;
 

	
 
			default:
 
				ret = CommonVehicleChangeInfo(ei, prop, buf);
 
				break;
 
@@ -1700,6 +1708,10 @@ static ChangeInfoResult ShipVehicleChang
 
				break;
 
			}
 

	
 
			case 0x20: // Engine variant
 
				ei->variant_id = GetNewEngineID(_cur.grffile, VEH_SHIP, buf->ReadWord());
 
				break;
 

	
 
			default:
 
				ret = CommonVehicleChangeInfo(ei, prop, buf);
 
				break;
 
@@ -1854,6 +1866,10 @@ static ChangeInfoResult AircraftVehicleC
 
				avi->max_range = buf->ReadWord();
 
				break;
 

	
 
			case 0x20: // Engine variant
 
				ei->variant_id = GetNewEngineID(_cur.grffile, VEH_AIRCRAFT, buf->ReadWord());
 
				break;
 

	
 
			default:
 
				ret = CommonVehicleChangeInfo(ei, prop, buf);
 
				break;
 
@@ -8983,6 +8999,11 @@ static void FinaliseEngineArray()
 

	
 
		if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue;
 

	
 
		/* Set appropriate flags on variant engine */
 
		if (e->info.variant_id != INVALID_ENGINE) {
 
			Engine::Get(e->info.variant_id)->display_flags |= EngineDisplayFlags::HasVariants;
 
		}
 

	
 
		/* Skip wagons, there livery is defined via the engine */
 
		if (e->type != VEH_TRAIN || e->u.rail.railveh_type != RAILVEH_WAGON) {
 
			LiveryScheme ls = GetEngineLiveryScheme(e->index, INVALID_ENGINE, nullptr);
src/table/engines.h
Show inline comments
 
@@ -24,7 +24,7 @@
 
 * @param f Bitmask of the climates
 
 * @note the 5 between b and f is the load amount
 
 */
 
#define MT(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
 
#define MT(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
 

	
 
/**
 
 * Writes the properties of a multiple-unit train into the EngineInfo struct.
 
@@ -37,7 +37,7 @@
 
 * @param f Bitmask of the climates
 
 * @note the 5 between b and f is the load amount
 
 */
 
#define MM(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_IS_MU, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
 
#define MM(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_IS_MU, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
 

	
 
/**
 
 * Writes the properties of a train carriage into the EngineInfo struct.
 
@@ -50,7 +50,7 @@
 
 * @see MT
 
 * @note the 5 between b and f is the load amount
 
 */
 
#define MW(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
 
#define MW(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
 

	
 
/**
 
 * Writes the properties of a road vehicle into the EngineInfo struct.
 
@@ -63,7 +63,7 @@
 
 * @param f Bitmask of the climates
 
 * @note the 5 between b and f is the load amount
 
 */
 
#define MR(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
 
#define MR(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
 

	
 
/**
 
 * Writes the properties of a ship into the EngineInfo struct.
 
@@ -75,7 +75,7 @@
 
 * @param f Bitmask of the climates
 
 * @note the 10 between b and f is the load amount
 
 */
 
#define MS(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
 
#define MS(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
 

	
 
/**
 
 * Writes the properties of an aeroplane into the EngineInfo struct.
 
@@ -86,7 +86,7 @@
 
 * @param e Bitmask of the climates
 
 * @note the 20 between b and e is the load amount
 
 */
 
#define MA(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, CT_INVALID, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
 
#define MA(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, CT_INVALID, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
 

	
 
/* Climates
 
 * T = Temperate
0 comments (0 inline, 0 general)