Merge branch 'save_ext_spp' into jgrpp
This commit is contained in:
@@ -4567,6 +4567,9 @@ STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data integrity
|
||||
STR_GAME_SAVELOAD_NOT_AVAILABLE :<not available>
|
||||
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Game was saved in version without tram support. All trams have been removed
|
||||
|
||||
STR_GAME_SAVELOAD_ERROR_HUGE_AIRPORTS_PRESENT :Savegame uses huge airports
|
||||
STR_GAME_SAVELOAD_ERROR_HELI_OILRIG_BUG :Savegame has a helicopter on approach to a buggy oil rig
|
||||
|
||||
# Map generation messages
|
||||
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Map generation aborted...{}... no suitable town locations
|
||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... there is no town in this scenario
|
||||
|
@@ -56,6 +56,7 @@
|
||||
#include "../order_backup.h"
|
||||
#include "../error.h"
|
||||
#include "../disaster_vehicle.h"
|
||||
#include "../tracerestrict.h"
|
||||
|
||||
|
||||
#include "saveload_internal.h"
|
||||
@@ -584,7 +585,7 @@ bool AfterLoadGame()
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSavegameVersionBefore(194)) {
|
||||
if (IsSavegameVersionBefore(194) && SlXvIsFeatureMissing(XSLFI_HEIGHT_8_BIT)) {
|
||||
_settings_game.construction.max_heightlevel = 15;
|
||||
|
||||
/* In old savegame versions, the heightlevel was coded in bits 0..3 of the type field */
|
||||
@@ -599,6 +600,17 @@ bool AfterLoadGame()
|
||||
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. */
|
||||
@@ -2943,6 +2955,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)) {
|
||||
/* Fix articulated road vehicles.
|
||||
* Some curves were shorter than other curves.
|
||||
@@ -3037,6 +3058,110 @@ bool AfterLoadGame()
|
||||
}
|
||||
}
|
||||
|
||||
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 1, 1)) {
|
||||
/*
|
||||
* Cost scaling changes:
|
||||
* SpringPP v2.0.102 divides all prices by the difficulty factor, effectively making things about 8 times cheaper.
|
||||
* Adjust the inflation factor to compensate for this, as otherwise the game is unplayable on load if inflation has been running for a while.
|
||||
* To avoid making things too cheap, clamp the price inflation factor to no lower than the payment inflation factor.
|
||||
*/
|
||||
|
||||
DEBUG(sl, 3, "Inflation prices: %f", _economy.inflation_prices / 65536.0);
|
||||
DEBUG(sl, 3, "Inflation payments: %f", _economy.inflation_payment / 65536.0);
|
||||
|
||||
_economy.inflation_prices >>= 3;
|
||||
if (_economy.inflation_prices < _economy.inflation_payment) {
|
||||
_economy.inflation_prices = _economy.inflation_payment;
|
||||
}
|
||||
|
||||
DEBUG(sl, 3, "New inflation prices: %f", _economy.inflation_prices / 65536.0);
|
||||
}
|
||||
|
||||
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) {
|
||||
/*
|
||||
* Reject huge airports
|
||||
* Annoyingly SpringPP v2.0.102 has a bug where it uses the same ID for AT_INTERCONTINENTAL2 and AT_OILRIG,
|
||||
*/
|
||||
Station *st;
|
||||
FOR_ALL_STATIONS(st) {
|
||||
if (st->airport.tile == INVALID_TILE) continue;
|
||||
StringID err = INVALID_STRING_ID;
|
||||
if (st->airport.type == 9) {
|
||||
if (st->dock_tile != INVALID_TILE && IsOilRig(st->dock_tile)) {
|
||||
/* this airport is probably an oil rig, not a huge airport */
|
||||
} else {
|
||||
err = STR_GAME_SAVELOAD_ERROR_HUGE_AIRPORTS_PRESENT;
|
||||
}
|
||||
st->airport.type = AT_OILRIG;
|
||||
} else if (st->airport.type == 10) {
|
||||
err = STR_GAME_SAVELOAD_ERROR_HUGE_AIRPORTS_PRESENT;
|
||||
}
|
||||
if (err != INVALID_STRING_ID) {
|
||||
SetSaveLoadError(err);
|
||||
/* Restore the signals */
|
||||
ResetSignalHandlers();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 1, 1)) {
|
||||
/*
|
||||
* Reject helicopters aproaching oil rigs using the wrong aircraft movement data
|
||||
* Annoyingly SpringPP v2.0.102 has a bug where it uses the same ID for AT_INTERCONTINENTAL2 and AT_OILRIG
|
||||
*/
|
||||
Aircraft *v;
|
||||
FOR_ALL_AIRCRAFT(v) {
|
||||
Station *st = GetTargetAirportIfValid(v);
|
||||
if (st != NULL && st->dock_tile != INVALID_TILE && IsOilRig(st->dock_tile)) {
|
||||
/* aircraft is on approach to an oil rig, bail out now */
|
||||
SetSaveLoadError(STR_GAME_SAVELOAD_ERROR_HELI_OILRIG_BUG);
|
||||
/* Restore the signals */
|
||||
ResetSignalHandlers();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SlXvIsFeaturePresent(XSLFI_MIGHT_USE_PAX_SIGNALS) || SlXvIsFeatureMissing(XSLFI_TRACE_RESTRICT)) {
|
||||
for (TileIndex t = 0; t < map_size; t++) {
|
||||
if (HasStationTileRail(t)) {
|
||||
/* clear station PAX bit */
|
||||
ClrBit(_me[t].m6, 6);
|
||||
}
|
||||
if (IsTileType(t, MP_RAILWAY) && HasSignals(t)) {
|
||||
/*
|
||||
* tracerestrict uses same bit as 1st PAX signals bit
|
||||
* only conditionally clear the bit, don't bother checking for whether to set it
|
||||
*/
|
||||
if (IsRestrictedSignal(t)) {
|
||||
TraceRestrictSetIsSignalRestrictedBit(t);
|
||||
}
|
||||
|
||||
/* clear 2nd signal PAX bit */
|
||||
ClrBit(_m[t].m2, 13);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SlXvIsFeaturePresent(XSLFI_TRAFFIC_LIGHTS)) {
|
||||
/* remove traffic lights */
|
||||
for (TileIndex t = 0; t < map_size; t++) {
|
||||
if (IsTileType(t, MP_ROAD) && (GetRoadTileType(t) == ROAD_TILE_NORMAL)) {
|
||||
DeleteAnimatedTile(t);
|
||||
ClrBit(_me[t].m7, 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SlXvIsFeaturePresent(XSLFI_RAIL_AGEING)) {
|
||||
/* remove rail aging data */
|
||||
for (TileIndex t = 0; t < map_size; t++) {
|
||||
if (IsPlainRailTile(t)) {
|
||||
SB(_me[t].m7, 0, 8, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Station acceptance is some kind of cache */
|
||||
if (IsSavegameVersionBefore(127)) {
|
||||
Station *st;
|
||||
|
@@ -140,6 +140,40 @@ void SlXvCheckSpecialSavegameVersions()
|
||||
_sl_is_faked_ext = true;
|
||||
_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_SPRINGPP] = 1;
|
||||
} else if (_sl_version == 221) { /* SL_SPRING_2013_v2_1_108 */
|
||||
DEBUG(sl, 1, "Loading a SpringPP 2013 v2.1.108 savegame version %d as version 188", _sl_version);
|
||||
|
||||
_sl_version = 188;
|
||||
_sl_xv_feature_versions[XSLFI_SPRINGPP] = 2;
|
||||
} else if (_sl_version == 222) { /* SL_SPRING_2013_v2_1_147 */
|
||||
DEBUG(sl, 1, "Loading a SpringPP 2013 v2.1.147 savegame version %d as version 194", _sl_version);
|
||||
|
||||
_sl_version = 194;
|
||||
_sl_xv_feature_versions[XSLFI_SPRINGPP] = 3;
|
||||
}
|
||||
|
||||
if (_sl_xv_feature_versions[XSLFI_SPRINGPP]) {
|
||||
_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_TRAFFIC_LIGHTS] = 1;
|
||||
_sl_xv_feature_versions[XSLFI_RAIL_AGEING] = 1;
|
||||
|
||||
_sl_xv_feature_versions[XSLFI_TIMETABLES_START_TICKS] = 1;
|
||||
_sl_xv_feature_versions[XSLFI_VEHICLE_REPAIR_COST] = 1;
|
||||
_sl_xv_feature_versions[XSLFI_IMPROVED_BREAKDOWNS] = 1;
|
||||
_sl_xv_feature_versions[XSLFI_INFRA_SHARING] = 1;
|
||||
_sl_xv_feature_versions[XSLFI_AUTO_TIMETABLE] = 1;
|
||||
_sl_xv_feature_versions[XSLFI_MORE_COND_ORDERS] = 1;
|
||||
|
||||
_sl_xv_discardable_chunk_ids.push_back('SNOW');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -38,6 +38,13 @@ enum SlXvFeatureIndex {
|
||||
XSLFI_ORDER_OCCUPANCY, ///< Running average of order occupancy
|
||||
XSLFI_MORE_COND_ORDERS, ///< More conditional orders 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_TRAFFIC_LIGHTS, ///< This save game uses road traffic lights
|
||||
XSLFI_RAIL_AGEING, ///< This save game uses the rail aging patch
|
||||
XSLFI_SPRINGPP, ///< This is a SpringPP game, use this for loading some settings
|
||||
|
||||
XSLFI_SIZE, ///< Total count of features, including null feature
|
||||
};
|
||||
|
||||
|
@@ -106,6 +106,7 @@ const SaveLoad *GetOrderDescription()
|
||||
static const SaveLoad _order_desc[] = {
|
||||
SLE_VAR(Order, type, 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_REF(Order, next, REF_ORDER),
|
||||
SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION),
|
||||
|
@@ -1695,6 +1695,12 @@ static void SlLoadChunk(const ChunkHandler *ch)
|
||||
/* Read length */
|
||||
len = (SlReadByte() << 16) | ((m >> 4) << 24);
|
||||
len += SlReadUint16();
|
||||
if (SlXvIsFeaturePresent(XSLFI_RIFF_HEADER_60_BIT)) {
|
||||
if (len != 0) {
|
||||
SlErrorCorrupt("RIFF chunk too large");
|
||||
}
|
||||
len = SlReadUint32();
|
||||
}
|
||||
_sl.obj_len = len;
|
||||
endoffs = _sl.reader->GetSize() + len;
|
||||
ch->load_proc();
|
||||
@@ -1741,6 +1747,12 @@ static void SlLoadCheckChunk(const ChunkHandler *ch)
|
||||
/* Read length */
|
||||
len = (SlReadByte() << 16) | ((m >> 4) << 24);
|
||||
len += SlReadUint16();
|
||||
if (SlXvIsFeaturePresent(XSLFI_RIFF_HEADER_60_BIT)) {
|
||||
if (len != 0) {
|
||||
SlErrorCorrupt("RIFF chunk too large");
|
||||
}
|
||||
len = SlReadUint32();
|
||||
}
|
||||
_sl.obj_len = len;
|
||||
endoffs = _sl.reader->GetSize() + len;
|
||||
if (ch && ch->load_check_proc) {
|
||||
|
@@ -190,7 +190,8 @@ static const SaveLoad _old_station_desc[] = {
|
||||
|
||||
SLE_VAR(Station, time_since_load, SLE_UINT8),
|
||||
SLE_VAR(Station, time_since_unload, SLE_UINT8),
|
||||
SLE_VAR(Station, delete_ctr, SLE_UINT8),
|
||||
SLE_CONDVAR_X(Station, delete_ctr, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 2)),
|
||||
SLE_CONDVAR_X(Station, delete_ctr, SLE_FILE_U16 | SLE_VAR_U8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)),
|
||||
SLE_VAR(Station, owner, SLE_UINT8),
|
||||
SLE_VAR(Station, facilities, SLE_UINT8),
|
||||
SLE_VAR(Station, airport.type, SLE_UINT8),
|
||||
@@ -270,6 +271,7 @@ const SaveLoad *GetGoodsDesc()
|
||||
SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, 68, SL_MAX_VERSION),
|
||||
SLE_CONDNULL(2, 51, 67),
|
||||
SLE_VAR(GoodsEntry, time_since_pickup, SLE_UINT8),
|
||||
SLE_CONDNULL_X(6, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)),
|
||||
SLE_VAR(GoodsEntry, rating, SLE_UINT8),
|
||||
SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
|
||||
SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67),
|
||||
@@ -393,7 +395,8 @@ static const SaveLoad _base_station_desc[] = {
|
||||
SLE_REF(BaseStation, town, REF_TOWN),
|
||||
SLE_VAR(BaseStation, string_id, SLE_STRINGID),
|
||||
SLE_STR(BaseStation, name, SLE_STR | SLF_ALLOW_CONTROL, 0),
|
||||
SLE_VAR(BaseStation, delete_ctr, SLE_UINT8),
|
||||
SLE_CONDVAR_X(Station, delete_ctr, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 2)),
|
||||
SLE_CONDVAR_X(Station, delete_ctr, SLE_FILE_U16 | SLE_VAR_U8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)),
|
||||
SLE_VAR(BaseStation, owner, SLE_UINT8),
|
||||
SLE_VAR(BaseStation, facilities, SLE_UINT8),
|
||||
SLE_VAR(BaseStation, build_date, SLE_INT32),
|
||||
@@ -424,7 +427,9 @@ static const SaveLoad _station_desc[] = {
|
||||
SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION),
|
||||
SLE_VAR(Station, airport.type, SLE_UINT8),
|
||||
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_CONDNULL_X(8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
|
||||
SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, 145, SL_MAX_VERSION),
|
||||
SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, 145, 160),
|
||||
SLE_CONDREF(Station, airport.psa, REF_STORAGE, 161, SL_MAX_VERSION),
|
||||
|
@@ -137,6 +137,7 @@ static const SaveLoad _town_desc[] = {
|
||||
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, 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 */
|
||||
SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, 103),
|
||||
SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, 104, SL_MAX_VERSION),
|
||||
@@ -217,6 +218,15 @@ static const SaveLoad _town_received_desc[] = {
|
||||
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()
|
||||
{
|
||||
Save_NewGRFMapping(_house_mngr);
|
||||
@@ -247,8 +257,14 @@ static void RealSave_Town(Town *t)
|
||||
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||
SlObject(&t->supplied[i], _town_supplied_desc);
|
||||
}
|
||||
for (int i = TE_BEGIN; i < NUM_TE; i++) {
|
||||
SlObject(&t->received[i], _town_received_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++) {
|
||||
SlObject(&t->received[i], _town_received_desc);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSavegameVersionBefore(166)) return;
|
||||
@@ -281,8 +297,14 @@ static void Load_TOWN()
|
||||
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||
SlObject(&t->supplied[i], _town_supplied_desc);
|
||||
}
|
||||
for (int i = TE_BEGIN; i < TE_END; i++) {
|
||||
SlObject(&t->received[i], _town_received_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++) {
|
||||
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) {
|
||||
|
@@ -645,7 +645,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
|
||||
|
||||
SLE_VAR(Vehicle, day_counter, SLE_UINT8),
|
||||
SLE_VAR(Vehicle, tick_counter, SLE_UINT8),
|
||||
SLE_CONDVAR(Vehicle, running_ticks, SLE_UINT8, 88, SL_MAX_VERSION),
|
||||
SLE_CONDVAR_X(Vehicle, running_ticks, SLE_UINT8, 88, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 2)),
|
||||
SLE_CONDVAR_X(Vehicle, running_ticks, SLE_FILE_U16 | SLE_VAR_U8, 88, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)),
|
||||
|
||||
SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8),
|
||||
SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, 158, SL_MAX_VERSION),
|
||||
@@ -726,10 +727,17 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
|
||||
|
||||
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_CONDNULL_X(4, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
|
||||
SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, 67, SL_MAX_VERSION),
|
||||
|
||||
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((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 70, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)),
|
||||
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()
|
||||
};
|
||||
|
||||
@@ -799,6 +807,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
|
||||
SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION),
|
||||
SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, 2, SL_MAX_VERSION),
|
||||
SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, 2, SL_MAX_VERSION),
|
||||
SLE_CONDNULL_X(2, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
|
||||
|
||||
SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, 136, SL_MAX_VERSION),
|
||||
SLE_CONDVAR(Aircraft, flags, SLE_UINT8, 167, SL_MAX_VERSION),
|
||||
@@ -813,6 +822,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
|
||||
|
||||
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_UINT32, 6, SL_MAX_VERSION),
|
||||
|
||||
@@ -872,6 +883,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
|
||||
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_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_CONDNULL(16, 2, 143), // old reserved space
|
||||
|
@@ -2066,24 +2066,27 @@ bool SetSettingValue(uint index, const char *value, bool force_newgame)
|
||||
|
||||
/**
|
||||
* Given a name of setting, return a setting description of it.
|
||||
* @param name Name of the setting to return a setting description of
|
||||
* @param i Pointer to an integer that will contain the index of the setting after the call, if it is successful.
|
||||
* @param name Name of the setting to return a setting description of
|
||||
* @param i Pointer to an integer that will contain the index of the setting after the call, if it is successful.
|
||||
* @param ignore_version Return a setting even if it not valid for the current savegame version
|
||||
* @return Pointer to the setting description of setting \a name if it can be found,
|
||||
* \c NULL indicates failure to obtain the description
|
||||
*/
|
||||
const SettingDesc *GetSettingFromName(const char *name, uint *i)
|
||||
const SettingDesc *GetSettingFromName(const char *name, uint *i, bool ignore_version)
|
||||
{
|
||||
const SettingDesc *sd;
|
||||
|
||||
/* First check all full names */
|
||||
for (*i = 0, sd = _settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
if (sd->desc.name == NULL) continue;
|
||||
if (!ignore_version && !SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
if (strcmp(sd->desc.name, name) == 0) return sd;
|
||||
}
|
||||
|
||||
/* Then check the shortcut variant of the name. */
|
||||
for (*i = 0, sd = _settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
if (sd->desc.name == NULL) continue;
|
||||
if (!ignore_version && !SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
const char *short_name = strchr(sd->desc.name, '.');
|
||||
if (short_name != NULL) {
|
||||
short_name++;
|
||||
@@ -2094,7 +2097,8 @@ const SettingDesc *GetSettingFromName(const char *name, uint *i)
|
||||
if (strncmp(name, "company.", 8) == 0) name += 8;
|
||||
/* And finally the company-based settings */
|
||||
for (*i = 0, sd = _company_settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
if (sd->desc.name == NULL) continue;
|
||||
if (!ignore_version && !SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
if (strcmp(sd->desc.name, name) == 0) return sd;
|
||||
}
|
||||
|
||||
@@ -2206,6 +2210,29 @@ void IConsoleListSettings(const char *prefilter)
|
||||
IConsolePrintF(CC_WARNING, "Use 'setting' command to change a value");
|
||||
}
|
||||
|
||||
/**
|
||||
* Load handler for settings, which don't go in the PATX chunk, and which are a cross-reference to another setting
|
||||
* @param osd SettingDesc struct containing all information
|
||||
* @param object can be either NULL in which case we load global variables or
|
||||
* a pointer to a struct which is getting saved
|
||||
*/
|
||||
static void LoadSettingsXref(const SettingDesc *osd, void *object) {
|
||||
DEBUG(sl, 3, "PATS chunk: Loading xref setting: '%s'", osd->xref);
|
||||
uint index = 0;
|
||||
const SettingDesc *setting_xref = GetSettingFromName(osd->xref, &index, true);
|
||||
assert(setting_xref != NULL);
|
||||
|
||||
// Generate a new SaveLoad from the xref target using the version params from the source
|
||||
SaveLoad sld = setting_xref->save;
|
||||
sld.version_from = osd->save.version_from;
|
||||
sld.version_to = osd->save.version_to;
|
||||
sld.ext_feature_test = osd->save.ext_feature_test;
|
||||
void *ptr = GetVariableAddress(object, &sld);
|
||||
|
||||
if (!SlObjectMember(ptr, &sld)) return;
|
||||
if (IsNumericType(sld.conv)) Write_ValidateSetting(ptr, setting_xref, ReadValue(ptr, sld.conv));
|
||||
}
|
||||
|
||||
/**
|
||||
* Save and load handler for settings, except for those which go in the PATX chunk
|
||||
* @param osd SettingDesc struct containing all information
|
||||
@@ -2214,9 +2241,15 @@ void IConsoleListSettings(const char *prefilter)
|
||||
*/
|
||||
static void LoadSettings(const SettingDesc *osd, void *object)
|
||||
{
|
||||
extern uint16 _sl_version;
|
||||
|
||||
for (; osd->save.cmd != SL_END; osd++) {
|
||||
if (osd->patx_name != NULL) continue;
|
||||
const SaveLoad *sld = &osd->save;
|
||||
if (osd->xref != NULL) {
|
||||
if (sld->ext_feature_test.IsFeaturePresent(_sl_version, sld->version_from, sld->version_to)) LoadSettingsXref(osd, object);
|
||||
continue;
|
||||
}
|
||||
void *ptr = GetVariableAddress(object, sld);
|
||||
|
||||
if (!SlObjectMember(ptr, sld)) continue;
|
||||
@@ -2238,6 +2271,7 @@ static void SaveSettings(const SettingDesc *sd, void *object)
|
||||
size_t length = 0;
|
||||
for (i = sd; i->save.cmd != SL_END; i++) {
|
||||
if (i->patx_name != NULL) continue;
|
||||
if (i->xref != NULL) continue;
|
||||
length += SlCalcObjMemberLength(object, &i->save);
|
||||
}
|
||||
SlSetLength(length);
|
||||
|
@@ -112,6 +112,7 @@ struct SettingDesc {
|
||||
SettingDescBase desc; ///< Settings structure (going to configuration file)
|
||||
SaveLoad save; ///< Internal structure (going to savegame, parts to config)
|
||||
const char *patx_name; ///< Name to save/load setting from in PATX chunk, if NULL save/load from PATS chunk as normal
|
||||
const char *xref; ///< Name of SettingDesc to use instead of the contents of this one, useful for loading legacy savegames, if NULL save/load as normal
|
||||
|
||||
bool IsEditable(bool do_command = false) const;
|
||||
SettingType GetType() const;
|
||||
@@ -126,7 +127,7 @@ struct SettingDesc {
|
||||
* offset in a certain struct */
|
||||
typedef SettingDesc SettingDescGlobVarList;
|
||||
|
||||
const SettingDesc *GetSettingFromName(const char *name, uint *i);
|
||||
const SettingDesc *GetSettingFromName(const char *name, uint *i, bool ignore_version = false);
|
||||
bool SetSettingValue(uint index, int32 value, bool force_newgame = false);
|
||||
bool SetSettingValue(uint index, const char *value, bool force_newgame = false);
|
||||
void SetCompanySetting(uint index, int32 value);
|
||||
|
@@ -20,6 +20,7 @@ static const SettingDesc _company_settings[] = {
|
||||
[templates]
|
||||
SDT_BOOL = SDT_BOOL($base, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extver, NULL),
|
||||
SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extver, NULL),
|
||||
SDT_NULL = SDT_NULL($length, $from, $to, $extver),
|
||||
SDT_END = SDT_END()
|
||||
|
||||
[defaults]
|
||||
@@ -74,6 +75,11 @@ base = CompanySettings
|
||||
var = renew_keep_length
|
||||
def = false
|
||||
|
||||
;; allow_autoreplace_to_self
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)
|
||||
|
||||
[SDT_BOOL]
|
||||
base = CompanySettings
|
||||
var = vehicle.servint_ispercent
|
||||
|
@@ -62,7 +62,7 @@ static size_t ConvertLandscape(const char *value);
|
||||
/* Macros for various objects to go in the configuration file.
|
||||
* This section is for global variables */
|
||||
#define SDTG_GENERAL(name, sdt_cmd, sle_cmd, type, flags, guiflags, var, length, def, min, max, interval, full, str, strhelp, strval, proc, from, to, cat, extver, patxname)\
|
||||
{NSD_GENERAL(name, def, sdt_cmd, guiflags, min, max, interval, full, str, strhelp, strval, proc, NULL, cat), SLEG_GENERAL_X(sle_cmd, var, type | flags, length, from, to, extver), patxname}
|
||||
{NSD_GENERAL(name, def, sdt_cmd, guiflags, min, max, interval, full, str, strhelp, strval, proc, NULL, cat), SLEG_GENERAL_X(sle_cmd, var, type | flags, length, from, to, extver), patxname, NULL}
|
||||
|
||||
#define SDTG_VAR(name, type, flags, guiflags, var, def, min, max, interval, str, strhelp, strval, proc, from, to, cat, extver, patxname)\
|
||||
SDTG_GENERAL(name, SDT_NUMX, SL_VAR, type, flags, guiflags, var, 0, def, min, max, interval, NULL, str, strhelp, strval, proc, from, to, cat, extver, patxname)
|
||||
@@ -83,14 +83,14 @@ static size_t ConvertLandscape(const char *value);
|
||||
SDTG_GENERAL(name, SDT_MANYOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, 0, 0, full, str, strhelp, strval, proc, from, to, cat, extver, patxname)
|
||||
|
||||
#define SDTG_NULL(length, from, to, extver)\
|
||||
{{"", NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLEG_NULL_X(length, from, to, extver), NULL}
|
||||
{{"", NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLEG_NULL_X(length, from, to, extver), NULL, NULL}
|
||||
|
||||
#define SDTG_END() {{NULL, NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLEG_END(), NULL}
|
||||
#define SDTG_END() {{NULL, NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLEG_END(), NULL, NULL}
|
||||
|
||||
/* Macros for various objects to go in the configuration file.
|
||||
* This section is for structures where their various members are saved */
|
||||
#define SDT_GENERAL(name, sdt_cmd, sle_cmd, type, flags, guiflags, base, var, length, def, min, max, interval, full, str, strhelp, strval, proc, load, from, to, cat, extver, patxname)\
|
||||
{NSD_GENERAL(name, def, sdt_cmd, guiflags, min, max, interval, full, str, strhelp, strval, proc, load, cat), SLE_GENERAL_X(sle_cmd, base, var, type | flags, length, from, to, extver), patxname}
|
||||
{NSD_GENERAL(name, def, sdt_cmd, guiflags, min, max, interval, full, str, strhelp, strval, proc, load, cat), SLE_GENERAL_X(sle_cmd, base, var, type | flags, length, from, to, extver), patxname, NULL}
|
||||
|
||||
#define SDT_VAR(base, var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, proc, from, to, cat, extver, patxname)\
|
||||
SDT_GENERAL(#var, SDT_NUMX, SL_VAR, type, flags, guiflags, base, var, 1, def, min, max, interval, NULL, str, strhelp, strval, proc, NULL, from, to, cat, extver, patxname)
|
||||
@@ -114,7 +114,7 @@ static size_t ConvertLandscape(const char *value);
|
||||
SDT_GENERAL(#var, SDT_MANYOFMANY, SL_VAR, type, flags, guiflags, base, var, 1, def, 0, 0, 0, full, str, strhelp, strval, proc, NULL, from, to, cat, extver, patxname)
|
||||
|
||||
#define SDT_NULL(length, from, to, extver)\
|
||||
{{"", NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLE_CONDNULL_X(length, from, to, extver), NULL}
|
||||
{{"", NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLE_CONDNULL_X(length, from, to, extver), NULL, NULL}
|
||||
|
||||
|
||||
#define SDTC_VAR(var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, proc, from, to, cat, extver, patxname)\
|
||||
@@ -132,5 +132,8 @@ static size_t ConvertLandscape(const char *value);
|
||||
#define SDTC_OMANY(var, type, flags, guiflags, def, max, full, str, strhelp, strval, proc, from, to, cat, extver, patxname)\
|
||||
SDTG_GENERAL(#var, SDT_ONEOFMANY, SL_VAR, type, flags, guiflags, _settings_client.var, 1, def, 0, max, 0, full, str, strhelp, strval, proc, from, to, cat, extver, patxname)
|
||||
|
||||
#define SDT_END() {{NULL, NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLE_END(), NULL}
|
||||
#define SDT_XREF(from, to, extver, xref)\
|
||||
{{"", NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLE_CONDNULL_X(0, from, to, extver), NULL, xref}
|
||||
|
||||
#define SDT_END() {{NULL, NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLE_END(), NULL, NULL}
|
||||
|
||||
|
@@ -81,6 +81,7 @@ SDT_OMANY = SDT_OMANY($base, $var, $type, $flags, $guiflags, $def,
|
||||
SDT_STR = SDT_STR($base, $var, $type, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extver, $patxname),
|
||||
SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extver, $patxname),
|
||||
SDT_NULL = SDT_NULL($length, $from, $to, $extver),
|
||||
SDT_XREF = SDT_XREF( $from, $to, $extver, $xref),
|
||||
SDT_END = SDT_END()
|
||||
|
||||
[defaults]
|
||||
@@ -97,6 +98,7 @@ to = SL_MAX_VERSION
|
||||
cat = SC_ADVANCED
|
||||
extver = SlXvFeatureTest()
|
||||
patxname = NULL
|
||||
xref = <this parameter must be set>
|
||||
|
||||
|
||||
|
||||
@@ -335,6 +337,14 @@ min = 0
|
||||
max = 3
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""order.timetable_automated""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""order.timetable_separation""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_BOOL]
|
||||
base = GameSettings
|
||||
var = order.timetable_automated
|
||||
@@ -435,6 +445,7 @@ strhelp = STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT
|
||||
strval = STR_JUST_INT
|
||||
proc = ChangeMaxHeightLevel
|
||||
cat = SC_BASIC
|
||||
extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_HEIGHT_8_BIT)
|
||||
|
||||
[SDT_BOOL]
|
||||
base = GameSettings
|
||||
@@ -562,6 +573,10 @@ str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH
|
||||
strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT
|
||||
strval = STR_CONFIG_SETTING_TILE_LENGTH
|
||||
|
||||
[SDT_XREF]
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)
|
||||
xref = ""construction.simulated_wormhole_signals""
|
||||
|
||||
[SDT_VAR]
|
||||
base = GameSettings
|
||||
var = construction.max_bridge_height
|
||||
@@ -606,7 +621,11 @@ from = 0
|
||||
cat = SC_BASIC
|
||||
patxname = ""signal_tunnel_bridge.construction.simulated_wormhole_signals""
|
||||
|
||||
# construction.longbridges
|
||||
[SDT_XREF]
|
||||
xref = ""construction.maximum_signal_evaluations""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
;; construction.longbridges
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
to = 158
|
||||
@@ -648,6 +667,16 @@ strhelp = STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT
|
||||
strval = STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT
|
||||
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]
|
||||
base = GameSettings
|
||||
var = economy.allow_town_roads
|
||||
@@ -657,6 +686,10 @@ def = true
|
||||
str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS
|
||||
strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.town_cargo_factor""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_VAR]
|
||||
base = GameSettings
|
||||
var = economy.found_town
|
||||
@@ -1030,6 +1063,11 @@ def = false
|
||||
str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES
|
||||
strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT
|
||||
|
||||
;; vehicle.exact_intro_date
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_VAR]
|
||||
base = GameSettings
|
||||
var = vehicle.max_trains
|
||||
@@ -1171,6 +1209,11 @@ strhelp = STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT
|
||||
strval = STR_JUST_COMMA
|
||||
proc = UpdateConsists
|
||||
|
||||
;; vehicle.freight_mult_to_passengers
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
; order.timetabling
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
@@ -1214,6 +1257,10 @@ strhelp = STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT
|
||||
strval = STR_CONFIG_SETTING_PLANE_CRASHES_NONE
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""vehicle.improved_breakdowns""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_BOOL]
|
||||
base = GameSettings
|
||||
var = vehicle.improved_breakdowns
|
||||
@@ -1246,6 +1293,12 @@ var = order.selectgoods
|
||||
def = true
|
||||
cat = SC_EXPERT
|
||||
|
||||
;; economy.deliver_goods
|
||||
;; vehicle.cargo_wait_time
|
||||
[SDT_NULL]
|
||||
length = 2
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = gui.sg_new_nonstop
|
||||
from = 22
|
||||
@@ -1339,6 +1392,16 @@ str = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS
|
||||
strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT
|
||||
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]
|
||||
base = GameSettings
|
||||
@@ -1396,10 +1459,22 @@ def = false
|
||||
str = STR_CONFIG_SETTING_MULTIPINDTOWN
|
||||
strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
|
||||
|
||||
;; economy.allow_automatic_industries
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)
|
||||
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
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]
|
||||
base = GameSettings
|
||||
var = economy.bribe
|
||||
@@ -1511,6 +1586,59 @@ strhelp = STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT
|
||||
strval = STR_CONFIG_SETTING_PERCENTAGE
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.day_length_factor""
|
||||
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)
|
||||
|
||||
; note that this has changed format in SpringPP 2.1.147
|
||||
[SDT_XREF]
|
||||
xref = ""vehicle.pay_for_repair""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""vehicle.repair_cost""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
;; economy.town_consumption_rate
|
||||
[SDT_NULL]
|
||||
length = 1
|
||||
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]
|
||||
base = GameSettings
|
||||
var = economy.town_growth_rate
|
||||
@@ -1558,6 +1686,43 @@ from = 77
|
||||
def = true
|
||||
cat = SC_EXPERT
|
||||
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.infrastructure_sharing[0]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.infrastructure_sharing[1]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.infrastructure_sharing[2]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.infrastructure_sharing[3]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.sharing_fee[0]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.sharing_fee[1]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.sharing_fee[2]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.sharing_fee[3]""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_XREF]
|
||||
xref = ""economy.sharing_payment_in_debt""
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_VAR]
|
||||
base = GameSettings
|
||||
var = construction.maximum_signal_evaluations
|
||||
@@ -2015,6 +2180,11 @@ min = 0
|
||||
max = 100000
|
||||
cat = SC_EXPERT
|
||||
|
||||
# pf.npf.npf_road_trafficlight_penalty
|
||||
[SDT_NULL]
|
||||
length = 4
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_VAR]
|
||||
base = GameSettings
|
||||
var = pf.npf.npf_road_dt_occupied_penalty
|
||||
@@ -2320,6 +2490,11 @@ min = 0
|
||||
max = 1000000
|
||||
cat = SC_EXPERT
|
||||
|
||||
# pf.yapf.road_trafficlight_penalty
|
||||
[SDT_NULL]
|
||||
length = 4
|
||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||
|
||||
[SDT_VAR]
|
||||
base = GameSettings
|
||||
var = pf.yapf.road_stop_penalty
|
||||
|
@@ -559,7 +559,7 @@ void SetTraceRestrictTypeAndNormalise(TraceRestrictItem &item, TraceRestrictItem
|
||||
* Sets the "signal has a trace restrict mapping" bit
|
||||
* This looks for mappings with that tile index
|
||||
*/
|
||||
void SetIsSignalRestrictedBit(TileIndex t)
|
||||
void TraceRestrictSetIsSignalRestrictedBit(TileIndex t)
|
||||
{
|
||||
// First mapping for this tile, or later
|
||||
TraceRestrictMapping::iterator lower_bound = _tracerestrictprogram_mapping.lower_bound(MakeTraceRestrictRefId(t, static_cast<Track>(0)));
|
||||
@@ -590,7 +590,7 @@ void TraceRestrictCreateProgramMapping(TraceRestrictRefId ref, TraceRestrictProg
|
||||
|
||||
TileIndex tile = GetTraceRestrictRefIdTileIndex(ref);
|
||||
Track track = GetTraceRestrictRefIdTrack(ref);
|
||||
SetIsSignalRestrictedBit(tile);
|
||||
TraceRestrictSetIsSignalRestrictedBit(tile);
|
||||
MarkTileDirtyByTile(tile);
|
||||
YapfNotifyTrackLayoutChange(tile, track);
|
||||
}
|
||||
@@ -614,7 +614,7 @@ void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref)
|
||||
|
||||
TileIndex tile = GetTraceRestrictRefIdTileIndex(ref);
|
||||
Track track = GetTraceRestrictRefIdTrack(ref);
|
||||
SetIsSignalRestrictedBit(tile);
|
||||
TraceRestrictSetIsSignalRestrictedBit(tile);
|
||||
MarkTileDirtyByTile(tile);
|
||||
YapfNotifyTrackLayoutChange(tile, track);
|
||||
|
||||
|
@@ -489,6 +489,7 @@ static inline Track GetTraceRestrictRefIdTrack(TraceRestrictRefId ref)
|
||||
return static_cast<Track>(ref & 7);
|
||||
}
|
||||
|
||||
void TraceRestrictSetIsSignalRestrictedBit(TileIndex t);
|
||||
void TraceRestrictCreateProgramMapping(TraceRestrictRefId ref, TraceRestrictProgram *prog);
|
||||
void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref);
|
||||
|
||||
|
Reference in New Issue
Block a user