Index: src/newgrf.cpp =================================================================== --- src/newgrf.cpp (revisi¢n: 16884) +++ src/newgrf.cpp (copia de trabajo) @@ -470,6 +470,7 @@ case 0x04: // Model life ei->base_life = grf_load_byte(buf); + ei->never_expire = ei->base_life == 0xFF; break; case 0x06: // Climates available @@ -736,6 +737,11 @@ ei->base_intro = grf_load_dword(&buf); break; + case 0x2B: // Long format model life (years) + ei->base_life = grf_load_word(&buf); + ei->never_expire = ei->base_life == 0xFFFF; + break; + default: ret = CommonVehicleChangeInfo(ei, prop, &buf); break; @@ -876,6 +882,11 @@ AlterVehicleListOrder(e->index, grf_load_extended(&buf)); break; + case 0x21: // Long format model life (years) + ei->base_life = grf_load_word(&buf); + ei->never_expire = ei->base_life == 0xFFFF; + break; + default: ret = CommonVehicleChangeInfo(ei, prop, &buf); break; @@ -989,6 +1000,11 @@ AlterVehicleListOrder(e->index, grf_load_extended(&buf)); break; + case 0x1C: // Long format model life (years) + ei->base_life = grf_load_word(&buf); + ei->never_expire = ei->base_life == 0xFFFF; + break; + default: ret = CommonVehicleChangeInfo(ei, prop, &buf); break; @@ -1098,6 +1114,11 @@ AlterVehicleListOrder(e->index, grf_load_extended(&buf)); break; + case 0x1C: // Long format model life (years) + ei->base_life = grf_load_word(&buf); + ei->never_expire = ei->base_life == 0xFFFF; + break; + default: ret = CommonVehicleChangeInfo(ei, prop, &buf); break; Index: src/engine_type.h =================================================================== --- src/engine_type.h (revisi¢n: 16884) +++ src/engine_type.h (copia de trabajo) @@ -118,6 +118,7 @@ byte callbackmask; int8 retire_early; ///< Number of years early to retire vehicle StringID string_id; ///< Default name of engine + bool never_expire; ///< True if the vehicle never expires (model life 0xFF or extended model life 0xFFFF) }; /** Index: src/engine.cpp =================================================================== --- src/engine.cpp (revisi¢n: 16884) +++ src/engine.cpp (copia de trabajo) @@ -73,6 +73,7 @@ this->info.climates = 0x80; /* Set model life to maximum to make wagons available */ this->info.base_life = 0xFF; + this->info.never_expire = true; return; } @@ -89,7 +90,7 @@ this->info.string_id = STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM + base; /* Set the default model life of original wagons to "infinite" */ - if (this->u.rail.railveh_type == RAILVEH_WAGON) this->info.base_life = 0xFF; + if (this->u.rail.railveh_type == RAILVEH_WAGON) this->info.never_expire = true; break; @@ -430,7 +431,7 @@ uint age = e->age; /* Check for early retirement */ - if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && e->info.base_life != 0xFF) { + if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && !e->info.never_expire) { int retire_early = e->info.retire_early; uint retire_early_max_age = max(0, e->duration_phase_1 + e->duration_phase_2 - retire_early * 12); if (retire_early != 0 && age >= retire_early_max_age) { @@ -443,7 +444,7 @@ if (age < e->duration_phase_1) { uint start = e->reliability_start; e->reliability = age * (e->reliability_max - start) / e->duration_phase_1 + start; - } else if ((age -= e->duration_phase_1) < e->duration_phase_2 || _settings_game.vehicle.never_expire_vehicles || e->info.base_life == 0xFF) { + } else if ((age -= e->duration_phase_1) < e->duration_phase_2 || _settings_game.vehicle.never_expire_vehicles || e->info.never_expire) { /* We are at the peak of this engines life. It will have max reliability. * This is also true if the engines never expire. They will not go bad over time */ e->reliability = e->reliability_max;