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_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_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
|
# Map generation messages
|
||||||
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Map generation aborted...{}... no suitable town locations
|
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
|
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... there is no town in this scenario
|
||||||
|
@@ -56,6 +56,7 @@
|
|||||||
#include "../order_backup.h"
|
#include "../order_backup.h"
|
||||||
#include "../error.h"
|
#include "../error.h"
|
||||||
#include "../disaster_vehicle.h"
|
#include "../disaster_vehicle.h"
|
||||||
|
#include "../tracerestrict.h"
|
||||||
|
|
||||||
|
|
||||||
#include "saveload_internal.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;
|
_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 +600,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 +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)) {
|
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.
|
||||||
@@ -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 */
|
/* Station acceptance is some kind of cache */
|
||||||
if (IsSavegameVersionBefore(127)) {
|
if (IsSavegameVersionBefore(127)) {
|
||||||
Station *st;
|
Station *st;
|
||||||
|
@@ -140,6 +140,40 @@ 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_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_ORDER_OCCUPANCY, ///< Running average of order occupancy
|
||||||
XSLFI_MORE_COND_ORDERS, ///< More conditional orders patch
|
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
|
XSLFI_SIZE, ///< Total count of features, including null feature
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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),
|
||||||
|
@@ -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) {
|
||||||
|
@@ -190,7 +190,8 @@ static const SaveLoad _old_station_desc[] = {
|
|||||||
|
|
||||||
SLE_VAR(Station, time_since_load, SLE_UINT8),
|
SLE_VAR(Station, time_since_load, SLE_UINT8),
|
||||||
SLE_VAR(Station, time_since_unload, 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, owner, SLE_UINT8),
|
||||||
SLE_VAR(Station, facilities, SLE_UINT8),
|
SLE_VAR(Station, facilities, SLE_UINT8),
|
||||||
SLE_VAR(Station, airport.type, 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_CONDVAR(GoodsEntry, status, SLE_UINT8, 68, SL_MAX_VERSION),
|
||||||
SLE_CONDNULL(2, 51, 67),
|
SLE_CONDNULL(2, 51, 67),
|
||||||
SLE_VAR(GoodsEntry, time_since_pickup, SLE_UINT8),
|
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),
|
SLE_VAR(GoodsEntry, rating, SLE_UINT8),
|
||||||
SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
|
SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
|
||||||
SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67),
|
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_REF(BaseStation, town, REF_TOWN),
|
||||||
SLE_VAR(BaseStation, string_id, SLE_STRINGID),
|
SLE_VAR(BaseStation, string_id, SLE_STRINGID),
|
||||||
SLE_STR(BaseStation, name, SLE_STR | SLF_ALLOW_CONTROL, 0),
|
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, owner, SLE_UINT8),
|
||||||
SLE_VAR(BaseStation, facilities, SLE_UINT8),
|
SLE_VAR(BaseStation, facilities, SLE_UINT8),
|
||||||
SLE_VAR(BaseStation, build_date, SLE_INT32),
|
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_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),
|
||||||
|
@@ -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,8 +257,14 @@ 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);
|
||||||
}
|
}
|
||||||
for (int i = TE_BEGIN; i < NUM_TE; i++) {
|
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) {
|
||||||
SlObject(&t->received[i], _town_received_desc);
|
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;
|
if (IsSavegameVersionBefore(166)) return;
|
||||||
@@ -281,8 +297,14 @@ 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)) {
|
||||||
SlObject(&t->received[i], _town_received_desc);
|
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) {
|
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, day_counter, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, tick_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_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8),
|
||||||
SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, 158, SL_MAX_VERSION),
|
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(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((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()
|
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, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION),
|
||||||
SLE_CONDVAR(Aircraft, last_direction, 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_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, turn_counter, SLE_UINT8, 136, SL_MAX_VERSION),
|
||||||
SLE_CONDVAR(Aircraft, flags, SLE_UINT8, 167, 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_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 +883,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
|
||||||
|
@@ -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.
|
* Given a name of setting, return a setting description of it.
|
||||||
* @param name Name of the setting to return a setting description of
|
* @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 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,
|
* @return Pointer to the setting description of setting \a name if it can be found,
|
||||||
* \c NULL indicates failure to obtain the description
|
* \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;
|
const SettingDesc *sd;
|
||||||
|
|
||||||
/* First check all full names */
|
/* First check all full names */
|
||||||
for (*i = 0, sd = _settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
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;
|
if (strcmp(sd->desc.name, name) == 0) return sd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Then check the shortcut variant of the name. */
|
/* Then check the shortcut variant of the name. */
|
||||||
for (*i = 0, sd = _settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
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, '.');
|
const char *short_name = strchr(sd->desc.name, '.');
|
||||||
if (short_name != NULL) {
|
if (short_name != NULL) {
|
||||||
short_name++;
|
short_name++;
|
||||||
@@ -2094,7 +2097,8 @@ const SettingDesc *GetSettingFromName(const char *name, uint *i)
|
|||||||
if (strncmp(name, "company.", 8) == 0) name += 8;
|
if (strncmp(name, "company.", 8) == 0) name += 8;
|
||||||
/* And finally the company-based settings */
|
/* And finally the company-based settings */
|
||||||
for (*i = 0, sd = _company_settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
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;
|
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");
|
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
|
* Save and load handler for settings, except for those which go in the PATX chunk
|
||||||
* @param osd SettingDesc struct containing all information
|
* @param osd SettingDesc struct containing all information
|
||||||
@@ -2214,9 +2241,15 @@ void IConsoleListSettings(const char *prefilter)
|
|||||||
*/
|
*/
|
||||||
static void LoadSettings(const SettingDesc *osd, void *object)
|
static void LoadSettings(const SettingDesc *osd, void *object)
|
||||||
{
|
{
|
||||||
|
extern uint16 _sl_version;
|
||||||
|
|
||||||
for (; osd->save.cmd != SL_END; osd++) {
|
for (; osd->save.cmd != SL_END; osd++) {
|
||||||
if (osd->patx_name != NULL) continue;
|
if (osd->patx_name != NULL) continue;
|
||||||
const SaveLoad *sld = &osd->save;
|
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);
|
void *ptr = GetVariableAddress(object, sld);
|
||||||
|
|
||||||
if (!SlObjectMember(ptr, sld)) continue;
|
if (!SlObjectMember(ptr, sld)) continue;
|
||||||
@@ -2238,6 +2271,7 @@ static void SaveSettings(const SettingDesc *sd, void *object)
|
|||||||
size_t length = 0;
|
size_t length = 0;
|
||||||
for (i = sd; i->save.cmd != SL_END; i++) {
|
for (i = sd; i->save.cmd != SL_END; i++) {
|
||||||
if (i->patx_name != NULL) continue;
|
if (i->patx_name != NULL) continue;
|
||||||
|
if (i->xref != NULL) continue;
|
||||||
length += SlCalcObjMemberLength(object, &i->save);
|
length += SlCalcObjMemberLength(object, &i->save);
|
||||||
}
|
}
|
||||||
SlSetLength(length);
|
SlSetLength(length);
|
||||||
|
@@ -112,6 +112,7 @@ struct SettingDesc {
|
|||||||
SettingDescBase desc; ///< Settings structure (going to configuration file)
|
SettingDescBase desc; ///< Settings structure (going to configuration file)
|
||||||
SaveLoad save; ///< Internal structure (going to savegame, parts to config)
|
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 *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;
|
bool IsEditable(bool do_command = false) const;
|
||||||
SettingType GetType() const;
|
SettingType GetType() const;
|
||||||
@@ -126,7 +127,7 @@ struct SettingDesc {
|
|||||||
* offset in a certain struct */
|
* offset in a certain struct */
|
||||||
typedef SettingDesc SettingDescGlobVarList;
|
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, int32 value, bool force_newgame = false);
|
||||||
bool SetSettingValue(uint index, const char *value, bool force_newgame = false);
|
bool SetSettingValue(uint index, const char *value, bool force_newgame = false);
|
||||||
void SetCompanySetting(uint index, int32 value);
|
void SetCompanySetting(uint index, int32 value);
|
||||||
|
@@ -20,6 +20,7 @@ static const SettingDesc _company_settings[] = {
|
|||||||
[templates]
|
[templates]
|
||||||
SDT_BOOL = SDT_BOOL($base, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extver, NULL),
|
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_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()
|
SDT_END = SDT_END()
|
||||||
|
|
||||||
[defaults]
|
[defaults]
|
||||||
@@ -74,6 +75,11 @@ base = CompanySettings
|
|||||||
var = renew_keep_length
|
var = renew_keep_length
|
||||||
def = false
|
def = false
|
||||||
|
|
||||||
|
;; allow_autoreplace_to_self
|
||||||
|
[SDT_NULL]
|
||||||
|
length = 1
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)
|
||||||
|
|
||||||
[SDT_BOOL]
|
[SDT_BOOL]
|
||||||
base = CompanySettings
|
base = CompanySettings
|
||||||
var = vehicle.servint_ispercent
|
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.
|
/* Macros for various objects to go in the configuration file.
|
||||||
* This section is for global variables */
|
* 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)\
|
#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)\
|
#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)
|
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)
|
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)\
|
#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.
|
/* Macros for various objects to go in the configuration file.
|
||||||
* This section is for structures where their various members are saved */
|
* 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)\
|
#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)\
|
#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)
|
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)
|
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)\
|
#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)\
|
#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)\
|
#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)
|
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_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_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_NULL = SDT_NULL($length, $from, $to, $extver),
|
||||||
|
SDT_XREF = SDT_XREF( $from, $to, $extver, $xref),
|
||||||
SDT_END = SDT_END()
|
SDT_END = SDT_END()
|
||||||
|
|
||||||
[defaults]
|
[defaults]
|
||||||
@@ -97,6 +98,7 @@ to = SL_MAX_VERSION
|
|||||||
cat = SC_ADVANCED
|
cat = SC_ADVANCED
|
||||||
extver = SlXvFeatureTest()
|
extver = SlXvFeatureTest()
|
||||||
patxname = NULL
|
patxname = NULL
|
||||||
|
xref = <this parameter must be set>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -335,6 +337,14 @@ min = 0
|
|||||||
max = 3
|
max = 3
|
||||||
cat = SC_BASIC
|
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]
|
[SDT_BOOL]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = order.timetable_automated
|
var = order.timetable_automated
|
||||||
@@ -435,6 +445,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
|
||||||
@@ -562,6 +573,10 @@ str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH
|
|||||||
strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT
|
||||||
strval = STR_CONFIG_SETTING_TILE_LENGTH
|
strval = STR_CONFIG_SETTING_TILE_LENGTH
|
||||||
|
|
||||||
|
[SDT_XREF]
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)
|
||||||
|
xref = ""construction.simulated_wormhole_signals""
|
||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = construction.max_bridge_height
|
var = construction.max_bridge_height
|
||||||
@@ -606,7 +621,11 @@ 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
|
[SDT_XREF]
|
||||||
|
xref = ""construction.maximum_signal_evaluations""
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||||
|
|
||||||
|
;; construction.longbridges
|
||||||
[SDT_NULL]
|
[SDT_NULL]
|
||||||
length = 1
|
length = 1
|
||||||
to = 158
|
to = 158
|
||||||
@@ -648,6 +667,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
|
||||||
@@ -657,6 +686,10 @@ 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
|
||||||
|
|
||||||
|
[SDT_XREF]
|
||||||
|
xref = ""economy.town_cargo_factor""
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = economy.found_town
|
var = economy.found_town
|
||||||
@@ -1030,6 +1063,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
|
||||||
@@ -1171,6 +1209,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
|
||||||
@@ -1214,6 +1257,10 @@ strhelp = STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT
|
|||||||
strval = STR_CONFIG_SETTING_PLANE_CRASHES_NONE
|
strval = STR_CONFIG_SETTING_PLANE_CRASHES_NONE
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
|
||||||
|
[SDT_XREF]
|
||||||
|
xref = ""vehicle.improved_breakdowns""
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
||||||
|
|
||||||
[SDT_BOOL]
|
[SDT_BOOL]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = vehicle.improved_breakdowns
|
var = vehicle.improved_breakdowns
|
||||||
@@ -1246,6 +1293,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
|
||||||
@@ -1339,6 +1392,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
|
||||||
@@ -1396,10 +1459,22 @@ def = false
|
|||||||
str = STR_CONFIG_SETTING_MULTIPINDTOWN
|
str = STR_CONFIG_SETTING_MULTIPINDTOWN
|
||||||
strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
|
||||||
|
|
||||||
|
;; economy.allow_automatic_industries
|
||||||
|
[SDT_NULL]
|
||||||
|
length = 1
|
||||||
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)
|
||||||
|
|
||||||
[SDT_NULL]
|
[SDT_NULL]
|
||||||
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
|
||||||
@@ -1511,6 +1586,59 @@ strhelp = STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT
|
|||||||
strval = STR_CONFIG_SETTING_PERCENTAGE
|
strval = STR_CONFIG_SETTING_PERCENTAGE
|
||||||
cat = SC_EXPERT
|
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]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = economy.town_growth_rate
|
var = economy.town_growth_rate
|
||||||
@@ -1558,6 +1686,43 @@ from = 77
|
|||||||
def = true
|
def = true
|
||||||
cat = SC_EXPERT
|
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]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = construction.maximum_signal_evaluations
|
var = construction.maximum_signal_evaluations
|
||||||
@@ -2015,6 +2180,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
|
||||||
@@ -2320,6 +2490,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
|
||||||
|
@@ -559,7 +559,7 @@ void SetTraceRestrictTypeAndNormalise(TraceRestrictItem &item, TraceRestrictItem
|
|||||||
* Sets the "signal has a trace restrict mapping" bit
|
* Sets the "signal has a trace restrict mapping" bit
|
||||||
* This looks for mappings with that tile index
|
* This looks for mappings with that tile index
|
||||||
*/
|
*/
|
||||||
void SetIsSignalRestrictedBit(TileIndex t)
|
void TraceRestrictSetIsSignalRestrictedBit(TileIndex t)
|
||||||
{
|
{
|
||||||
// First mapping for this tile, or later
|
// First mapping for this tile, or later
|
||||||
TraceRestrictMapping::iterator lower_bound = _tracerestrictprogram_mapping.lower_bound(MakeTraceRestrictRefId(t, static_cast<Track>(0)));
|
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);
|
TileIndex tile = GetTraceRestrictRefIdTileIndex(ref);
|
||||||
Track track = GetTraceRestrictRefIdTrack(ref);
|
Track track = GetTraceRestrictRefIdTrack(ref);
|
||||||
SetIsSignalRestrictedBit(tile);
|
TraceRestrictSetIsSignalRestrictedBit(tile);
|
||||||
MarkTileDirtyByTile(tile);
|
MarkTileDirtyByTile(tile);
|
||||||
YapfNotifyTrackLayoutChange(tile, track);
|
YapfNotifyTrackLayoutChange(tile, track);
|
||||||
}
|
}
|
||||||
@@ -614,7 +614,7 @@ void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref)
|
|||||||
|
|
||||||
TileIndex tile = GetTraceRestrictRefIdTileIndex(ref);
|
TileIndex tile = GetTraceRestrictRefIdTileIndex(ref);
|
||||||
Track track = GetTraceRestrictRefIdTrack(ref);
|
Track track = GetTraceRestrictRefIdTrack(ref);
|
||||||
SetIsSignalRestrictedBit(tile);
|
TraceRestrictSetIsSignalRestrictedBit(tile);
|
||||||
MarkTileDirtyByTile(tile);
|
MarkTileDirtyByTile(tile);
|
||||||
YapfNotifyTrackLayoutChange(tile, track);
|
YapfNotifyTrackLayoutChange(tile, track);
|
||||||
|
|
||||||
|
@@ -489,6 +489,7 @@ static inline Track GetTraceRestrictRefIdTrack(TraceRestrictRefId ref)
|
|||||||
return static_cast<Track>(ref & 7);
|
return static_cast<Track>(ref & 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TraceRestrictSetIsSignalRestrictedBit(TileIndex t);
|
||||||
void TraceRestrictCreateProgramMapping(TraceRestrictRefId ref, TraceRestrictProgram *prog);
|
void TraceRestrictCreateProgramMapping(TraceRestrictRefId ref, TraceRestrictProgram *prog);
|
||||||
void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref);
|
void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user