mirror of https://github.com/OpenTTD/OpenTTD
(svn r9825) -Codechange: [NewGRF] Add support for early vehicle retirement.
parent
3cc31aae86
commit
c9018d3e7c
|
@ -70,6 +70,16 @@ static void CalcEngineReliability(Engine *e)
|
||||||
{
|
{
|
||||||
uint age = e->age;
|
uint age = e->age;
|
||||||
|
|
||||||
|
/* Check for early retirement */
|
||||||
|
if (e->player_avail != 0 && !_patches.never_expire_vehicles) {
|
||||||
|
uint retire_early = EngInfo(e - _engines)->retire_early;
|
||||||
|
if (retire_early > 0 && age >= e->duration_phase_1 + e->duration_phase_2 - retire_early * 12) {
|
||||||
|
/* Early retirement is enabled and we're past the date... */
|
||||||
|
e->player_avail = 0;
|
||||||
|
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (age < e->duration_phase_1) {
|
if (age < e->duration_phase_1) {
|
||||||
uint start = e->reliability_start;
|
uint start = e->reliability_start;
|
||||||
e->reliability = age * (e->reliability_max - start) / e->duration_phase_1 + start;
|
e->reliability = age * (e->reliability_max - start) / e->duration_phase_1 + start;
|
||||||
|
|
|
@ -105,6 +105,7 @@ struct EngineInfo {
|
||||||
byte refit_cost;
|
byte refit_cost;
|
||||||
byte misc_flags;
|
byte misc_flags;
|
||||||
byte callbackmask;
|
byte callbackmask;
|
||||||
|
byte retire_early; ///< Number of years early to retire vehicle
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Engine {
|
struct Engine {
|
||||||
|
|
|
@ -531,6 +531,10 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
FOR_EACH_OBJECT rvi[i].user_def_data = grf_load_byte(&buf);
|
FOR_EACH_OBJECT rvi[i].user_def_data = grf_load_byte(&buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x26: // Retire vehicle early
|
||||||
|
FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x27: // Miscellaneous flags
|
case 0x27: // Miscellaneous flags
|
||||||
FOR_EACH_OBJECT {
|
FOR_EACH_OBJECT {
|
||||||
ei[i].misc_flags = grf_load_byte(&buf);
|
ei[i].misc_flags = grf_load_byte(&buf);
|
||||||
|
@ -553,7 +557,6 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
/* @todo air drag and retire vehicle early
|
/* @todo air drag and retire vehicle early
|
||||||
* Fall-through for unimplemented one byte long properties. */
|
* Fall-through for unimplemented one byte long properties. */
|
||||||
case 0x20: // Air drag
|
case 0x20: // Air drag
|
||||||
case 0x26: // Retire vehicle early
|
|
||||||
FOR_EACH_OBJECT grf_load_byte(&buf);
|
FOR_EACH_OBJECT grf_load_byte(&buf);
|
||||||
ret = true;
|
ret = true;
|
||||||
break;
|
break;
|
||||||
|
@ -650,6 +653,10 @@ static bool RoadVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
|
FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x1B: // Retire vehicle early
|
||||||
|
FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x1C: // Miscellaneous flags
|
case 0x1C: // Miscellaneous flags
|
||||||
FOR_EACH_OBJECT {
|
FOR_EACH_OBJECT {
|
||||||
ei[i].misc_flags = grf_load_byte(&buf);
|
ei[i].misc_flags = grf_load_byte(&buf);
|
||||||
|
@ -671,7 +678,6 @@ static bool RoadVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
|
|
||||||
case 0x18: // Tractive effort
|
case 0x18: // Tractive effort
|
||||||
case 0x19: // Air drag
|
case 0x19: // Air drag
|
||||||
case 0x1B: // Retire vehicle early
|
|
||||||
/* @todo */
|
/* @todo */
|
||||||
FOR_EACH_OBJECT grf_load_byte(&buf);
|
FOR_EACH_OBJECT grf_load_byte(&buf);
|
||||||
ret = true;
|
ret = true;
|
||||||
|
@ -758,6 +764,10 @@ static bool ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
|
FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x16: // Retire vehicle early
|
||||||
|
FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x17: // Miscellaneous flags
|
case 0x17: // Miscellaneous flags
|
||||||
FOR_EACH_OBJECT {
|
FOR_EACH_OBJECT {
|
||||||
ei[i].misc_flags = grf_load_byte(&buf);
|
ei[i].misc_flags = grf_load_byte(&buf);
|
||||||
|
@ -779,7 +789,6 @@ static bool ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
|
|
||||||
case 0x14: // Ocean speed fraction
|
case 0x14: // Ocean speed fraction
|
||||||
case 0x15: // Canal speed fraction
|
case 0x15: // Canal speed fraction
|
||||||
case 0x16: // Retire vehicle early
|
|
||||||
/* @todo */
|
/* @todo */
|
||||||
FOR_EACH_OBJECT grf_load_byte(&buf);
|
FOR_EACH_OBJECT grf_load_byte(&buf);
|
||||||
ret = true;
|
ret = true;
|
||||||
|
@ -871,6 +880,10 @@ static bool AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, byte *
|
||||||
FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
|
FOR_EACH_OBJECT ei[i].refit_cost = grf_load_byte(&buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x16: // Retire vehicle early
|
||||||
|
FOR_EACH_OBJECT ei[i].retire_early = grf_load_byte(&buf);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x17: // Miscellaneous flags
|
case 0x17: // Miscellaneous flags
|
||||||
FOR_EACH_OBJECT {
|
FOR_EACH_OBJECT {
|
||||||
ei[i].misc_flags = grf_load_byte(&buf);
|
ei[i].misc_flags = grf_load_byte(&buf);
|
||||||
|
@ -890,12 +903,6 @@ static bool AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, byte *
|
||||||
FOR_EACH_OBJECT ei[i].base_intro = grf_load_dword(&buf);
|
FOR_EACH_OBJECT ei[i].base_intro = grf_load_dword(&buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x16: // Retire vehicle early
|
|
||||||
/* @todo */
|
|
||||||
FOR_EACH_OBJECT grf_load_byte(&buf);
|
|
||||||
ret = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = true;
|
ret = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
* @note the 0x80 in parameter b sets the "is carriage bit"
|
* @note the 0x80 in parameter b sets the "is carriage bit"
|
||||||
* @note the 5 between d and e is the load amount
|
* @note the 5 between d and e is the load amount
|
||||||
*/
|
*/
|
||||||
#define MK(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, e, 0, 8, 0, 0 }
|
#define MK(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, e, 0, 8, 0, 0, 0 }
|
||||||
|
|
||||||
/** Writes the properties of a train carriage into the EngineInfo struct.
|
/** Writes the properties of a train carriage into the EngineInfo struct.
|
||||||
* @param a Introduction date
|
* @param a Introduction date
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
* @see MK
|
* @see MK
|
||||||
* @note the 5 between d and e is the load amount
|
* @note the 5 between d and e is the load amount
|
||||||
*/
|
*/
|
||||||
#define MW(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b | 0x80, 5, e, 0, 8, 0, 0 }
|
#define MW(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b | 0x80, 5, e, 0, 8, 0, 0, 0 }
|
||||||
|
|
||||||
/** Writes the properties of a ship into the EngineInfo struct.
|
/** Writes the properties of a ship into the EngineInfo struct.
|
||||||
* @param a Introduction date
|
* @param a Introduction date
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
* @see MK
|
* @see MK
|
||||||
* @note the 10 between d and e is the load amount
|
* @note the 10 between d and e is the load amount
|
||||||
*/
|
*/
|
||||||
#define MS(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, e, 0, 8, 0, 0 }
|
#define MS(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, e, 0, 8, 0, 0, 0 }
|
||||||
|
|
||||||
/** Writes the properties of an aeroplane into the EngineInfo struct.
|
/** Writes the properties of an aeroplane into the EngineInfo struct.
|
||||||
* @param a Introduction date
|
* @param a Introduction date
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
* @see MK
|
* @see MK
|
||||||
* @note the 20 between d and e is the load amount
|
* @note the 20 between d and e is the load amount
|
||||||
*/
|
*/
|
||||||
#define MA(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, 0, 8, 0, 0 }
|
#define MA(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, 0, 8, 0, 0, 0 }
|
||||||
|
|
||||||
// Climates
|
// Climates
|
||||||
// T = Temperate
|
// T = Temperate
|
||||||
|
|
Loading…
Reference in New Issue