Merge branch 'improved_breakdowns-sx' into jgrpp
# Conflicts: # src/saveload/extended_ver_sl.cpp # src/settings.cpp
This commit is contained in:
@@ -2898,31 +2898,34 @@ bool AfterLoadGame()
|
||||
|
||||
/* Set some breakdown-related variables to the correct values. */
|
||||
if (SlXvIsFeatureMissing(XSLFI_IMPROVED_BREAKDOWNS)) {
|
||||
Train *v;
|
||||
FOR_ALL_TRAINS(v) {
|
||||
if (v->IsFrontEngine()) {
|
||||
if (v->breakdown_ctr == 1) SetBit(v->flags, VRF_BREAKDOWN_STOPPED);
|
||||
} else if (v->IsEngine() || v->IsMultiheaded()) {
|
||||
/** Non-front engines could have a reliability of 0.
|
||||
* Set it to the reliability of the front engine or the maximum, whichever is lower. */
|
||||
const Engine *e = Engine::Get(v->engine_type);
|
||||
v->reliability_spd_dec = e->reliability_spd_dec;
|
||||
v->reliability = min(v->First()->reliability, e->reliability);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!SlXvIsFeaturePresent(XSLFI_IMPROVED_BREAKDOWNS, 3)) {
|
||||
Vehicle *v;
|
||||
FOR_ALL_VEHICLES(v) {
|
||||
switch(v->type) {
|
||||
case VEH_TRAIN: {
|
||||
if (Train::From(v)->IsFrontEngine()) {
|
||||
if (v->breakdown_ctr == 1) SetBit(Train::From(v)->flags, VRF_BREAKDOWN_STOPPED);
|
||||
} else if (Train::From(v)->IsEngine() || Train::From(v)->IsMultiheaded()) {
|
||||
/** Non-front engines could have a reliability of 0.
|
||||
* Set it to the reliability of the front engine or the maximum, whichever is lower. */
|
||||
const Engine *e = Engine::Get(v->engine_type);
|
||||
v->reliability_spd_dec = e->reliability_spd_dec;
|
||||
v->reliability = min(v->First()->reliability, e->reliability);
|
||||
}
|
||||
}
|
||||
/* FALL THROUGH */
|
||||
case VEH_TRAIN:
|
||||
case VEH_ROAD:
|
||||
v->breakdown_chance = 128;
|
||||
v->breakdown_chance_factor = 128;
|
||||
break;
|
||||
|
||||
case VEH_SHIP:
|
||||
v->breakdown_chance = 64;
|
||||
v->breakdown_chance_factor = 64;
|
||||
break;
|
||||
|
||||
case VEH_AIRCRAFT:
|
||||
v->breakdown_chance = Clamp(64 + (AircraftVehInfo(v->engine_type)->max_speed >> 3), 0, 255);
|
||||
v->breakdown_chance_factor = Clamp(64 + (AircraftVehInfo(v->engine_type)->max_speed >> 3), 0, 255);
|
||||
v->breakdown_severity = 40;
|
||||
break;
|
||||
|
||||
|
@@ -55,7 +55,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_TIMETABLES_START_TICKS, XSCF_NULL, 1, 1, "timetable_start_ticks", NULL, NULL, NULL },
|
||||
{ XSLFI_TOWN_CARGO_ADJ, XSCF_IGNORABLE_UNKNOWN, 1, 1, "town_cargo_adj", NULL, NULL, NULL },
|
||||
{ XSLFI_SIG_TUNNEL_BRIDGE, XSCF_NULL, 1, 1, "signal_tunnel_bridge", NULL, NULL, NULL },
|
||||
{ XSLFI_IMPROVED_BREAKDOWNS, XSCF_NULL, 2, 2, "improved_breakdowns", NULL, NULL, NULL },
|
||||
{ XSLFI_IMPROVED_BREAKDOWNS, XSCF_NULL, 3, 3, "improved_breakdowns", NULL, NULL, NULL },
|
||||
{ XSLFI_TT_WAIT_IN_DEPOT, XSCF_NULL, 1, 1, "tt_wait_in_depot", NULL, NULL, NULL },
|
||||
{ XSLFI_AUTO_TIMETABLE, XSCF_NULL, 3, 3, "auto_timetables", NULL, NULL, NULL },
|
||||
{ XSLFI_VEHICLE_REPAIR_COST, XSCF_NULL, 1, 1, "vehicle_repair_cost", NULL, NULL, NULL },
|
||||
|
@@ -692,6 +692,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
|
||||
SLE_VAR(Vehicle, breakdown_delay, SLE_UINT8),
|
||||
SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8),
|
||||
SLE_VAR(Vehicle, breakdown_chance, SLE_UINT8),
|
||||
SLE_CONDVAR_X(Vehicle, breakdown_chance_factor, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS, 3)),
|
||||
SLE_CONDVAR_X(Vehicle, breakdown_type, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS)),
|
||||
SLE_CONDVAR_X(Vehicle, breakdown_severity, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_IMPROVED_BREAKDOWNS)),
|
||||
SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
|
||||
|
Reference in New Issue
Block a user