Initial support for loading savegames from SpringPP v2.0.102/103

Savegame version 220

Bin all extra settings added in SpringPP.
Bin extra features: trip histories, more conditional orders/jump counter,
prev order time, snow-line chunk, town auto adv. campaign, etc.
Fix vehicle flags.
Fix bridges wrt height changes.
Handle 60-bit RIFF chunk sizes.
Doesn't deal with huge airports, loading games with these may
lead to undefined ehaviour.
PAX signals and traffic lights are ignored.
This commit is contained in:
Jonathan G Rennison
2015-07-31 17:34:57 +01:00
parent bd10b0fb0b
commit 39608841f2
9 changed files with 246 additions and 6 deletions

View File

@@ -584,7 +584,7 @@ bool AfterLoadGame()
} }
} }
if (IsSavegameVersionBefore(194)) { if (IsSavegameVersionBefore(194) && SlXvIsFeatureMissing(XSLFI_HEIGHT_8_BIT)) {
_settings_game.construction.max_heightlevel = 15; _settings_game.construction.max_heightlevel = 15;
/* In old savegame versions, the heightlevel was coded in bits 0..3 of the type field */ /* In old savegame versions, the heightlevel was coded in bits 0..3 of the type field */
@@ -599,6 +599,17 @@ bool AfterLoadGame()
SB(_m[t].type, 2, 2, 0); SB(_m[t].type, 2, 2, 0);
} }
} }
} else if (SlXvIsFeaturePresent(XSLFI_HEIGHT_8_BIT)) {
for (TileIndex t = 0; t < map_size; t++) {
SB(_m[t].type, 0, 2, GB(_me[t].m6, 0, 2));
SB(_me[t].m6, 0, 2, 0);
if (MayHaveBridgeAbove(t)) {
SB(_m[t].type, 2, 2, GB(_me[t].m6, 6, 2));
SB(_me[t].m6, 6, 2, 0);
} else {
SB(_m[t].type, 2, 2, 0);
}
}
} }
/* in version 2.1 of the savegame, town owner was unified. */ /* in version 2.1 of the savegame, town owner was unified. */
@@ -2943,6 +2954,15 @@ bool AfterLoadGame()
} }
} }
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) {
// re-arrange vehicle_flags
Vehicle *v;
FOR_ALL_VEHICLES(v) {
SB(v->vehicle_flags, VF_AUTOMATE_TIMETABLE, 1, GB(v->vehicle_flags, 6, 1));
SB(v->vehicle_flags, VF_STOP_LOADING, 4, GB(v->vehicle_flags, 7, 4));
}
}
if (IsSavegameVersionBefore(188)) { if (IsSavegameVersionBefore(188)) {
/* Fix articulated road vehicles. /* Fix articulated road vehicles.
* Some curves were shorter than other curves. * Some curves were shorter than other curves.

View File

@@ -138,6 +138,25 @@ void SlXvCheckSpecialSavegameVersions()
_sl_is_faked_ext = true; _sl_is_faked_ext = true;
_sl_xv_feature_versions[XSLFI_TRACE_RESTRICT] = 1; _sl_xv_feature_versions[XSLFI_TRACE_RESTRICT] = 1;
} }
if (_sl_version == 220) { /* SL_SPRING_2013_v2_0_102 */
DEBUG(sl, 1, "Loading a SpringPP 2013 v2.0.102 savegame version %d as version 187", _sl_version);
_sl_version = 187;
_sl_xv_feature_versions[XSLFI_RIFF_HEADER_60_BIT] = 1;
_sl_xv_feature_versions[XSLFI_HEIGHT_8_BIT] = 1;
_sl_xv_feature_versions[XSLFI_MIGHT_USE_PAX_SIGNALS] = 1;
_sl_xv_feature_versions[XSLFI_TIMETABLES_START_TICKS] = 1;
_sl_xv_feature_versions[XSLFI_VEHICLE_REPAIR_COST] = 1;
_sl_xv_feature_versions[XLSFI_IMPROVED_BREAKDOWNS] = 1;
_sl_xv_feature_versions[XSLFI_INFRA_SHARING] = 1;
_sl_xv_feature_versions[XSLFI_AUTO_TIMETABLE] = 1;
_sl_xv_feature_versions[XSLFI_SPRINGPP] = 1;
_sl_xv_discardable_chunk_ids.push_back('SNOW');
}
} }
/** /**

View File

@@ -36,6 +36,11 @@ enum SlXvFeatureIndex {
XSLFI_INFRA_SHARING, ///< Infrastructure sharing patch XSLFI_INFRA_SHARING, ///< Infrastructure sharing patch
XSLFI_VARIABLE_DAY_LENGTH, ///< Variable day length patch XSLFI_VARIABLE_DAY_LENGTH, ///< Variable day length patch
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
XSLFI_MIGHT_USE_PAX_SIGNALS, ///< This save game might use the pax-signals feature
XSLFI_SPRINGPP, ///< This is a SpringPP game, use this for loading some settings
XSLFI_SIZE, ///< Total count of features, including null feature XSLFI_SIZE, ///< Total count of features, including null feature
}; };

View File

@@ -106,6 +106,7 @@ const SaveLoad *GetOrderDescription()
static const SaveLoad _order_desc[] = { static const SaveLoad _order_desc[] = {
SLE_VAR(Order, type, SLE_UINT8), SLE_VAR(Order, type, SLE_UINT8),
SLE_VAR(Order, flags, SLE_UINT8), SLE_VAR(Order, flags, SLE_UINT8),
SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_VAR(Order, dest, SLE_UINT16), SLE_VAR(Order, dest, SLE_UINT16),
SLE_REF(Order, next, REF_ORDER), SLE_REF(Order, next, REF_ORDER),
SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION), SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION),
@@ -113,6 +114,7 @@ const SaveLoad *GetOrderDescription()
SLE_CONDVAR(Order, wait_time, SLE_UINT16, 67, SL_MAX_VERSION), SLE_CONDVAR(Order, wait_time, SLE_UINT16, 67, SL_MAX_VERSION),
SLE_CONDVAR(Order, travel_time, SLE_UINT16, 67, SL_MAX_VERSION), SLE_CONDVAR(Order, travel_time, SLE_UINT16, 67, SL_MAX_VERSION),
SLE_CONDVAR(Order, max_speed, SLE_UINT16, 172, SL_MAX_VERSION), SLE_CONDVAR(Order, max_speed, SLE_UINT16, 172, SL_MAX_VERSION),
SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
/* Leftover from the minor savegame version stuff /* Leftover from the minor savegame version stuff
* We will never use those free bytes, but we have to keep this line to allow loading of old savegames */ * We will never use those free bytes, but we have to keep this line to allow loading of old savegames */

View File

@@ -1695,6 +1695,12 @@ static void SlLoadChunk(const ChunkHandler *ch)
/* Read length */ /* Read length */
len = (SlReadByte() << 16) | ((m >> 4) << 24); len = (SlReadByte() << 16) | ((m >> 4) << 24);
len += SlReadUint16(); len += SlReadUint16();
if (SlXvIsFeaturePresent(XSLFI_RIFF_HEADER_60_BIT)) {
if (len != 0) {
SlErrorCorrupt("RIFF chunk too large");
}
len = SlReadUint32();
}
_sl.obj_len = len; _sl.obj_len = len;
endoffs = _sl.reader->GetSize() + len; endoffs = _sl.reader->GetSize() + len;
ch->load_proc(); ch->load_proc();
@@ -1741,6 +1747,12 @@ static void SlLoadCheckChunk(const ChunkHandler *ch)
/* Read length */ /* Read length */
len = (SlReadByte() << 16) | ((m >> 4) << 24); len = (SlReadByte() << 16) | ((m >> 4) << 24);
len += SlReadUint16(); len += SlReadUint16();
if (SlXvIsFeaturePresent(XSLFI_RIFF_HEADER_60_BIT)) {
if (len != 0) {
SlErrorCorrupt("RIFF chunk too large");
}
len = SlReadUint32();
}
_sl.obj_len = len; _sl.obj_len = len;
endoffs = _sl.reader->GetSize() + len; endoffs = _sl.reader->GetSize() + len;
if (ch && ch->load_check_proc) { if (ch && ch->load_check_proc) {

View File

@@ -424,7 +424,9 @@ static const SaveLoad _station_desc[] = {
SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION), SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION),
SLE_VAR(Station, airport.type, SLE_UINT8), SLE_VAR(Station, airport.type, SLE_UINT8),
SLE_CONDVAR(Station, airport.layout, SLE_UINT8, 145, SL_MAX_VERSION), SLE_CONDVAR(Station, airport.layout, SLE_UINT8, 145, SL_MAX_VERSION),
SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_VAR(Station, airport.flags, SLE_UINT64), SLE_VAR(Station, airport.flags, SLE_UINT64),
SLE_CONDNULL_X(8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, 145, SL_MAX_VERSION), SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, 145, SL_MAX_VERSION),
SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, 145, 160), SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, 145, 160),
SLE_CONDREF(Station, airport.psa, REF_STORAGE, 161, SL_MAX_VERSION), SLE_CONDREF(Station, airport.psa, REF_STORAGE, 161, SL_MAX_VERSION),

View File

@@ -137,6 +137,7 @@ static const SaveLoad _town_desc[] = {
SLE_CONDVAR(Town, have_ratings, SLE_UINT16, 104, SL_MAX_VERSION), SLE_CONDVAR(Town, have_ratings, SLE_UINT16, 104, SL_MAX_VERSION),
SLE_CONDARR(Town, ratings, SLE_INT16, 8, 0, 103), SLE_CONDARR(Town, ratings, SLE_INT16, 8, 0, 103),
SLE_CONDARR(Town, ratings, SLE_INT16, MAX_COMPANIES, 104, SL_MAX_VERSION), SLE_CONDARR(Town, ratings, SLE_INT16, MAX_COMPANIES, 104, SL_MAX_VERSION),
SLE_CONDNULL_X(MAX_COMPANIES, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
/* failed bribe attempts are stored since savegame format 4 */ /* failed bribe attempts are stored since savegame format 4 */
SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, 103), SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, 103),
SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, 104, SL_MAX_VERSION), SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, 104, SL_MAX_VERSION),
@@ -217,6 +218,15 @@ static const SaveLoad _town_received_desc[] = {
SLE_END() SLE_END()
}; };
static const SaveLoad _town_received_desc_spp[] = {
SLE_CONDVAR(TransportedCargoStat<uint16>, old_max, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
SLE_CONDVAR(TransportedCargoStat<uint16>, new_max, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
SLE_CONDVAR(TransportedCargoStat<uint16>, old_act, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
SLE_CONDVAR(TransportedCargoStat<uint16>, new_act, SLE_FILE_U32 | SLE_VAR_U16, 165, SL_MAX_VERSION),
SLE_END()
};
static void Save_HIDS() static void Save_HIDS()
{ {
Save_NewGRFMapping(_house_mngr); Save_NewGRFMapping(_house_mngr);
@@ -247,9 +257,15 @@ static void RealSave_Town(Town *t)
for (CargoID i = 0; i < NUM_CARGO; i++) { for (CargoID i = 0; i < NUM_CARGO; i++) {
SlObject(&t->supplied[i], _town_supplied_desc); SlObject(&t->supplied[i], _town_supplied_desc);
} }
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) {
for (int i = TE_BEGIN; i < NUM_TE; i++) {
SlObject(&t->received[i], _town_received_desc_spp);
}
} else {
for (int i = TE_BEGIN; i < NUM_TE; i++) { for (int i = TE_BEGIN; i < NUM_TE; i++) {
SlObject(&t->received[i], _town_received_desc); SlObject(&t->received[i], _town_received_desc);
} }
}
if (IsSavegameVersionBefore(166)) return; if (IsSavegameVersionBefore(166)) return;
@@ -281,9 +297,15 @@ static void Load_TOWN()
for (CargoID i = 0; i < NUM_CARGO; i++) { for (CargoID i = 0; i < NUM_CARGO; i++) {
SlObject(&t->supplied[i], _town_supplied_desc); SlObject(&t->supplied[i], _town_supplied_desc);
} }
for (int i = TE_BEGIN; i < TE_END; i++) { if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) {
for (int i = TE_BEGIN; i < NUM_TE; i++) {
SlObject(&t->received[i], _town_received_desc_spp);
}
} else {
for (int i = TE_BEGIN; i < NUM_TE; i++) {
SlObject(&t->received[i], _town_received_desc); SlObject(&t->received[i], _town_received_desc);
} }
}
if (t->townnamegrfid == 0 && !IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1) && GB(t->townnametype, 11, 5) != 15) { if (t->townnamegrfid == 0 && !IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1) && GB(t->townnametype, 11, 5) != 15) {
SlErrorCorrupt("Invalid town name generator"); SlErrorCorrupt("Invalid town name generator");

View File

@@ -726,10 +726,16 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, 67, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, 67, SL_MAX_VERSION),
SLE_CONDVAR_X(Vehicle, current_loading_time, SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)), SLE_CONDVAR_X(Vehicle, current_loading_time, SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE)),
SLE_CONDNULL_X(4, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, 67, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, 67, SL_MAX_VERSION),
SLE_CONDNULL(10, 2, 143), // old reserved space SLE_CONDNULL(10, 2, 143), // old reserved space
SLE_CONDNULL_X((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 30, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDNULL_X(2, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_END() SLE_END()
}; };
@@ -813,6 +819,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_VAR(Vehicle, subtype, SLE_UINT8), SLE_VAR(Vehicle, subtype, SLE_UINT8),
SLE_CONDNULL_X(5, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION),
@@ -872,6 +880,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(DisasterVehicle, image_override, SLE_UINT32, 191, SL_MAX_VERSION), SLE_CONDVAR(DisasterVehicle, image_override, SLE_UINT32, 191, SL_MAX_VERSION),
SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, 0, 190), SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, 0, 190),
SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, 191, SL_MAX_VERSION), SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, 191, SL_MAX_VERSION),
SLE_CONDNULL_X(2, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, 194, SL_MAX_VERSION), SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, 194, SL_MAX_VERSION),
SLE_CONDNULL(16, 2, 143), // old reserved space SLE_CONDNULL(16, 2, 143), // old reserved space

View File

@@ -335,6 +335,24 @@ min = 0
max = 3 max = 3
cat = SC_BASIC cat = SC_BASIC
[SDT_BOOL]
base = GameSettings
var = order.timetable_automated
def = true
str = STR_CONFIG_SETTING_TIMETABLE_AUTOMATED
strhelp = STR_CONFIG_SETTING_TIMETABLE_AUTOMATED_HELPTEXT
cat = SC_EXPERT
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_BOOL]
base = GameSettings
var = order.timetable_separation
def = true
str = STR_CONFIG_SETTING_TIMETABLE_SEPARATION
strhelp = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_HELPTEXT
cat = SC_EXPERT
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
var = order.timetable_automated var = order.timetable_automated
@@ -420,6 +438,7 @@ strhelp = STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT
strval = STR_JUST_INT strval = STR_JUST_INT
proc = ChangeMaxHeightLevel proc = ChangeMaxHeightLevel
cat = SC_BASIC cat = SC_BASIC
extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_HEIGHT_8_BIT)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
@@ -582,7 +601,12 @@ from = 0
cat = SC_BASIC cat = SC_BASIC
patxname = ""signal_tunnel_bridge.construction.simulated_wormhole_signals"" patxname = ""signal_tunnel_bridge.construction.simulated_wormhole_signals""
# construction.longbridges ;; construction.maximum_signal_evaluations
[SDT_NULL]
length = 2
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; construction.longbridges
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
to = 158 to = 158
@@ -624,6 +648,16 @@ strhelp = STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT
strval = STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT strval = STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT
proc = TownFoundingChanged proc = TownFoundingChanged
;; economy.town_construction_cost
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.station_rating_type
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
var = economy.allow_town_roads var = economy.allow_town_roads
@@ -633,6 +667,11 @@ def = true
str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS
strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
;; economy.town_cargo_factor
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = economy.found_town var = economy.found_town
@@ -1006,6 +1045,11 @@ def = false
str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES
strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT
;; vehicle.exact_intro_date
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = vehicle.max_trains var = vehicle.max_trains
@@ -1147,6 +1191,11 @@ strhelp = STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT
strval = STR_JUST_COMMA strval = STR_JUST_COMMA
proc = UpdateConsists proc = UpdateConsists
;; vehicle.freight_mult_to_passengers
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
; order.timetabling ; order.timetabling
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
@@ -1198,6 +1247,11 @@ def = false
str = STR_CONFIG_SETTING_IMPROVED_BREAKDOWNS str = STR_CONFIG_SETTING_IMPROVED_BREAKDOWNS
patxname = ""improved_breakdowns.vehicle.improved_breakdowns"" patxname = ""improved_breakdowns.vehicle.improved_breakdowns""
;; vehicle.improved_breakdowns
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
; station.join_stations ; station.join_stations
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
@@ -1222,6 +1276,12 @@ var = order.selectgoods
def = true def = true
cat = SC_EXPERT cat = SC_EXPERT
;; economy.deliver_goods
;; vehicle.cargo_wait_time
[SDT_NULL]
length = 2
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDTC_BOOL] [SDTC_BOOL]
var = gui.sg_new_nonstop var = gui.sg_new_nonstop
from = 22 from = 22
@@ -1315,6 +1375,16 @@ str = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS
strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT
proc = DeleteSelectStationWindow proc = DeleteSelectStationWindow
;; construction.traffic_lights
;; construction.towns_build_traffic_lights
;; construction.allow_building_tls_in_towns
;; construction.traffic_lights_green_phase
;; construction.max_tlc_size
;; construction.max_tlc_distance
[SDT_NULL]
length = 6
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
## ##
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
@@ -1376,6 +1446,13 @@ strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
length = 1 length = 1
to = 140 to = 140
;; economy.minimum_distance_town
;; economy.minimum_distance_industry
;; economy.minimum_distance_ind_town
[SDT_NULL]
length = 6
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
var = economy.bribe var = economy.bribe
@@ -1487,6 +1564,53 @@ strhelp = STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT
strval = STR_CONFIG_SETTING_PERCENTAGE strval = STR_CONFIG_SETTING_PERCENTAGE
cat = SC_EXPERT cat = SC_EXPERT
;; economy.day_length_factor
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.price_mult[0-70]
[SDT_NULL]
length = 71
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.price_rails[0-15]
[SDT_NULL]
length = 16
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.rail_maintenance[0-15]
[SDT_NULL]
length = 16
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.pay_for_repair
;; economy.repair_cost
;; economy.town_consumption_rate
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.town_pop_*
[SDT_NULL]
length = 6
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.town_consumption_rates[0-2][0-2]
[SDT_NULL]
length = 18
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.town_effects[0-2]
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.grow_if_one_delivered
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = economy.town_growth_rate var = economy.town_growth_rate
@@ -1534,6 +1658,21 @@ from = 77
def = true def = true
cat = SC_EXPERT cat = SC_EXPERT
;; economy.infrastructure_sharing[0-3]
[SDT_NULL]
length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.sharing_fee[0-3]
[SDT_NULL]
length = 16
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; economy.sharing_payment_in_debt
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = construction.maximum_signal_evaluations var = construction.maximum_signal_evaluations
@@ -1991,6 +2130,11 @@ min = 0
max = 100000 max = 100000
cat = SC_EXPERT cat = SC_EXPERT
# pf.npf.npf_road_trafficlight_penalty
[SDT_NULL]
length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = pf.npf.npf_road_dt_occupied_penalty var = pf.npf.npf_road_dt_occupied_penalty
@@ -2296,6 +2440,11 @@ min = 0
max = 1000000 max = 1000000
cat = SC_EXPERT cat = SC_EXPERT
# pf.yapf.road_trafficlight_penalty
[SDT_NULL]
length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = pf.yapf.road_stop_penalty var = pf.yapf.road_stop_penalty