Add initial support for loading ChillPP v14.7 savegames

This commit is contained in:
Jonathan G Rennison
2020-01-01 23:14:00 +00:00
parent 71db9ebc3b
commit 5dc1027c6b
14 changed files with 288 additions and 21 deletions

View File

@@ -202,6 +202,7 @@ public:
static void InvalidateAllFrom(SourceType src_type, SourceID src); static void InvalidateAllFrom(SourceType src_type, SourceID src);
static void InvalidateAllFrom(StationID sid); static void InvalidateAllFrom(StationID sid);
static void AfterLoad(); static void AfterLoad();
static void PostVehiclesAfterLoad();
static bool ValidateDeferredCargoPayments(); static bool ValidateDeferredCargoPayments();
}; };
@@ -586,6 +587,11 @@ public:
uint Truncate(uint max_move = UINT_MAX, StationCargoAmountMap *cargo_per_source = nullptr); uint Truncate(uint max_move = UINT_MAX, StationCargoAmountMap *cargo_per_source = nullptr);
uint Reroute(uint max_move, StationCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge); uint Reroute(uint max_move, StationCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge);
void AfterLoadIncreaseReservationCount(uint count)
{
this->reserved_count += count;
}
/** /**
* Are two the two CargoPackets mergeable in the context of * Are two the two CargoPackets mergeable in the context of
* a list of CargoPackets for a Vehicle? * a list of CargoPackets for a Vehicle?

View File

@@ -794,7 +794,7 @@ bool AfterLoadGame()
/* The value of _date_fract got divided, so make sure that old games are converted correctly. */ /* The value of _date_fract got divided, so make sure that old games are converted correctly. */
if (IsSavegameVersionBefore(SLV_11, 1) || (IsSavegameVersionBefore(SLV_147) && _date_fract > DAY_TICKS)) _date_fract /= 885; if (IsSavegameVersionBefore(SLV_11, 1) || (IsSavegameVersionBefore(SLV_147) && _date_fract > DAY_TICKS)) _date_fract /= 885;
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP) || SlXvIsFeaturePresent(XSLFI_JOKERPP)) { if (SlXvIsFeaturePresent(XSLFI_SPRINGPP) || SlXvIsFeaturePresent(XSLFI_JOKERPP) || SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
assert(_settings_game.economy.day_length_factor >= 1); assert(_settings_game.economy.day_length_factor >= 1);
_tick_skip_counter = _date_fract % _settings_game.economy.day_length_factor; _tick_skip_counter = _date_fract % _settings_game.economy.day_length_factor;
_date_fract /= _settings_game.economy.day_length_factor; _date_fract /= _settings_game.economy.day_length_factor;
@@ -803,7 +803,7 @@ bool AfterLoadGame()
} }
/* Set day length factor to 1 if loading a pre day length savegame */ /* Set day length factor to 1 if loading a pre day length savegame */
if (SlXvIsFeatureMissing(XSLFI_VARIABLE_DAY_LENGTH) && SlXvIsFeatureMissing(XSLFI_SPRINGPP) && SlXvIsFeatureMissing(XSLFI_JOKERPP)) { if (SlXvIsFeatureMissing(XSLFI_VARIABLE_DAY_LENGTH) && SlXvIsFeatureMissing(XSLFI_SPRINGPP) && SlXvIsFeatureMissing(XSLFI_JOKERPP) && SlXvIsFeatureMissing(XSLFI_CHILLPP)) {
_settings_game.economy.day_length_factor = 1; _settings_game.economy.day_length_factor = 1;
} }
@@ -945,6 +945,8 @@ bool AfterLoadGame()
/* Update all vehicles */ /* Update all vehicles */
AfterLoadVehicles(true); AfterLoadVehicles(true);
CargoPacket::PostVehiclesAfterLoad();
/* Update template vehicles */ /* Update template vehicles */
AfterLoadTemplateVehicles(); AfterLoadTemplateVehicles();
@@ -3333,6 +3335,16 @@ bool AfterLoadGame()
} }
} }
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
// re-arrange vehicle_flags
Vehicle *v;
FOR_ALL_VEHICLES(v) {
SB(v->vehicle_flags, VF_AUTOMATE_TIMETABLE, 1, GB(v->vehicle_flags, 7, 1));
SB(v->vehicle_flags, VF_PATHFINDER_LOST, 1, GB(v->vehicle_flags, 8, 1));
SB(v->vehicle_flags, VF_SERVINT_IS_CUSTOM, 7, 0);
}
}
if (IsSavegameVersionBefore(SLV_188)) { if (IsSavegameVersionBefore(SLV_188)) {
/* Fix articulated road vehicles. /* Fix articulated road vehicles.
* Some curves were shorter than other curves. * Some curves were shorter than other curves.
@@ -3437,6 +3449,14 @@ bool AfterLoadGame()
_jokerpp_auto_separation.clear(); _jokerpp_auto_separation.clear();
_jokerpp_non_auto_separation.clear(); _jokerpp_non_auto_separation.clear();
} }
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_RAILWAY) && HasSignals(t)) {
if (GetSignalType(t, TRACK_LOWER) == 7) SetSignalType(t, TRACK_LOWER, SIGTYPE_NORMAL);
if (GetSignalType(t, TRACK_UPPER) == 7) SetSignalType(t, TRACK_UPPER, SIGTYPE_NORMAL);
}
}
}
/* /*
* Only keep order-backups for network clients (and when replaying). * Only keep order-backups for network clients (and when replaying).

View File

@@ -10,6 +10,7 @@
#include "../stdafx.h" #include "../stdafx.h"
#include "../vehicle_base.h" #include "../vehicle_base.h"
#include "../station_base.h" #include "../station_base.h"
#include "../scope_info.h"
#include "../3rdparty/cpp-btree/btree_map.h" #include "../3rdparty/cpp-btree/btree_map.h"
#include "saveload.h" #include "saveload.h"
@@ -87,6 +88,27 @@ extern btree::btree_map<uint64, Money> _cargo_packet_deferred_payments;
} }
} }
/**
* Savegame conversion for cargopackets.
*/
/* static */ void CargoPacket::PostVehiclesAfterLoad()
{
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
extern std::map<VehicleID, CargoPacketList> _veh_cpp_packets;
for (auto &iter : _veh_cpp_packets) {
if (iter.second.empty()) continue;
Vehicle *v = Vehicle::Get(iter.first);
Station *st = Station::Get(v->First()->last_station_visited);
assert_msg(st != nullptr, "%s", scope_dumper().VehicleInfo(v));
for (CargoPacket *cp : iter.second) {
st->goods[v->cargo_type].cargo.AfterLoadIncreaseReservationCount(cp->count);
v->cargo.Append(cp, VehicleCargoList::MTA_LOAD);
}
}
_veh_cpp_packets.clear();
}
}
/** /**
* Wrapper function to get the CargoPacket's internal structure while * Wrapper function to get the CargoPacket's internal structure while
* some of the variables itself are private. * some of the variables itself are private.

View File

@@ -67,7 +67,7 @@ static const SaveLoad _cargopayment_desc[] = {
SLE_REF(CargoPayment, front, REF_VEHICLE), SLE_REF(CargoPayment, front, REF_VEHICLE),
SLE_VAR(CargoPayment, route_profit, SLE_INT64), SLE_VAR(CargoPayment, route_profit, SLE_INT64),
SLE_VAR(CargoPayment, visual_profit, SLE_INT64), SLE_VAR(CargoPayment, visual_profit, SLE_INT64),
SLE_CONDVAR(CargoPayment, visual_transfer, SLE_INT64, SLV_181, SL_MAX_VERSION), SLE_CONDVAR_X(CargoPayment, visual_transfer, SLE_INT64, SLV_181, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_CHILLPP)),
SLE_END() SLE_END()
}; };

View File

@@ -256,6 +256,23 @@ bool SlXvCheckSpecialSavegameVersions()
_sl_is_faked_ext = true; _sl_is_faked_ext = true;
return true; return true;
} }
if (_sl_version >= SL_CHILLPP_232 && _sl_version <= SL_CHILLPP_233) { /* 232 - 233 */
DEBUG(sl, 1, "Loading a ChillPP v14.7 savegame version %d as version 160", _sl_version);
_sl_xv_feature_versions[XSLFI_CHILLPP] = _sl_version;
_sl_xv_feature_versions[XSLFI_ZPOS_32_BIT] = 1;
_sl_xv_feature_versions[XSLFI_TOWN_CARGO_ADJ] = 1;
_sl_xv_feature_versions[XSLFI_TRAFFIC_LIGHTS] = 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_SIG_TUNNEL_BRIDGE] = 1;
_sl_xv_feature_versions[XSLFI_RAIL_AGEING] = 1;
_sl_xv_discardable_chunk_ids.push_back('LGRP');
_sl_xv_discardable_chunk_ids.push_back('SSIG');
_sl_version = SLV_160;
_sl_is_faked_ext = true;
return true;
}
return false; return false;
} }

View File

@@ -80,11 +80,13 @@ enum SlXvFeatureIndex {
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit 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_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_ZPOS_32_BIT, ///< Vehicle/sign z_pos is 32 bit instead of 8 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_MIGHT_USE_PAX_SIGNALS, ///< This save game might use the pax-signals feature
XSLFI_TRAFFIC_LIGHTS, ///< This save game uses road traffic lights XSLFI_TRAFFIC_LIGHTS, ///< This save game uses road traffic lights
XSLFI_RAIL_AGEING, ///< This save game uses the rail aging patch 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_SPRINGPP, ///< This is a SpringPP game, use this for loading some settings
XSLFI_JOKERPP, ///< This is a JokerPP game, use this for loading some settings XSLFI_JOKERPP, ///< This is a JokerPP game, use this for loading some settings
XSLFI_CHILLPP, ///< This is a ChillPP game, use this for loading some settings
XSLFI_SIZE, ///< Total count of features, including null feature XSLFI_SIZE, ///< Total count of features, including null feature
}; };

View File

@@ -67,6 +67,20 @@ static void Load_MAPT()
static void Load_MAPH() static void Load_MAPH()
{ {
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
if (SlGetFieldLength() != 0) {
_sl_xv_feature_versions[XSLFI_HEIGHT_8_BIT] = 2;
std::array<uint16, MAP_SL_BUF_SIZE> buf;
TileIndex size = MapSize();
for (TileIndex i = 0; i != size;) {
SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT16);
for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) _m[i++].height = buf[j];
}
}
return;
}
std::array<byte, MAP_SL_BUF_SIZE> buf; std::array<byte, MAP_SL_BUF_SIZE> buf;
TileIndex size = MapSize(); TileIndex size = MapSize();

View File

@@ -328,6 +328,8 @@ enum SaveLoadVersion : uint16 {
SL_JOKER_1_25 = 284, SL_JOKER_1_25 = 284,
SL_JOKER_1_26 = 285, SL_JOKER_1_26 = 285,
SL_JOKER_1_27 = 286, SL_JOKER_1_27 = 286,
SL_CHILLPP_232 = 232,
SL_CHILLPP_233 = 233,
}; };
/** Save or load result codes. */ /** Save or load result codes. */

View File

@@ -24,8 +24,8 @@ static const SaveLoad _sign_desc[] = {
SLE_CONDVAR(Sign, x, SLE_INT32, SLV_5, SL_MAX_VERSION), SLE_CONDVAR(Sign, x, SLE_INT32, SLV_5, SL_MAX_VERSION),
SLE_CONDVAR(Sign, y, SLE_INT32, SLV_5, SL_MAX_VERSION), SLE_CONDVAR(Sign, y, SLE_INT32, SLV_5, SL_MAX_VERSION),
SLE_CONDVAR(Sign, owner, SLE_UINT8, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(Sign, owner, SLE_UINT8, SLV_6, SL_MAX_VERSION),
SLE_CONDVAR(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), SLE_CONDVAR_X(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164, SlXvFeatureTest(XSLFTO_AND, XSLFI_ZPOS_32_BIT, 0, 0)),
SLE_CONDVAR(Sign, z, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_CONDVAR_X(Sign, z, SLE_INT32, SLV_164, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_ZPOS_32_BIT)),
SLE_END() SLE_END()
}; };

View File

@@ -286,8 +286,8 @@ const SaveLoad *GetGoodsDesc()
SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, SLV_14, SLV_65), SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, SLV_14, SLV_65),
SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, SLV_65, SLV_68), SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, SLV_65, SLV_68),
SLE_CONDVAR(GoodsEntry, amount_fract, SLE_UINT8, SLV_150, SL_MAX_VERSION), SLE_CONDVAR(GoodsEntry, amount_fract, SLE_UINT8, SLV_150, SL_MAX_VERSION),
SLEG_CONDPTRDEQ( _packets, REF_CARGO_PACKET, SLV_68, SLV_183), SLEG_CONDPTRDEQ_X( _packets, REF_CARGO_PACKET, SLV_68, SLV_183, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, 0, 0)),
SLEG_CONDVAR( _num_dests, SLE_UINT32, SLV_183, SL_MAX_VERSION), SLEG_CONDVAR_X( _num_dests, SLE_UINT32, SLV_183, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_CHILLPP)),
SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT, SLV_181, SL_MAX_VERSION), SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT, SLV_181, SL_MAX_VERSION),
SLE_CONDVAR(GoodsEntry, link_graph, SLE_UINT16, SLV_183, SL_MAX_VERSION), SLE_CONDVAR(GoodsEntry, link_graph, SLE_UINT16, SLV_183, SL_MAX_VERSION),
SLE_CONDVAR(GoodsEntry, node, SLE_UINT16, SLV_183, SL_MAX_VERSION), SLE_CONDVAR(GoodsEntry, node, SLE_UINT16, SLV_183, SL_MAX_VERSION),
@@ -623,7 +623,7 @@ static void Load_STNN()
} }
fs->SetRawFlags(SlReadUint16()); fs->SetRawFlags(SlReadUint16());
} }
} else { } else if (SlXvIsFeatureMissing(XSLFI_CHILLPP)) {
FlowSaveLoad flow; FlowSaveLoad flow;
FlowStat *fs = nullptr; FlowStat *fs = nullptr;
for (uint32 j = 0; j < _num_flows; ++j) { for (uint32 j = 0; j < _num_flows; ++j) {
@@ -642,9 +642,18 @@ static void Load_STNN()
prev_source = flow.source; prev_source = flow.source;
} }
} }
if (IsSavegameVersionBefore(SLV_183)) { if (IsSavegameVersionBefore(SLV_183) && SlXvIsFeatureMissing(XSLFI_CHILLPP)) {
SwapPackets(&st->goods[i]); SwapPackets(&st->goods[i]);
} else { } else {
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
SlSkipBytes(8);
uint num_links = SlReadUint16();
uint num_flows = SlReadUint32();
SlSkipBytes(6);
SlSkipBytes(18 * num_links);
SlSkipBytes(16 * num_flows);
}
StationCargoPair pair; StationCargoPair pair;
for (uint j = 0; j < _num_dests; ++j) { for (uint j = 0; j < _num_dests; ++j) {
SlObjectLoadFiltered(&pair, _cargo_list_desc); // _cargo_list_desc has no conditionals SlObjectLoadFiltered(&pair, _cargo_list_desc); // _cargo_list_desc has no conditionals
@@ -682,7 +691,7 @@ static void Ptrs_STNN()
FOR_ALL_STATIONS(st) { FOR_ALL_STATIONS(st) {
for (CargoID i = 0; i < num_cargo; i++) { for (CargoID i = 0; i < num_cargo; i++) {
GoodsEntry *ge = &st->goods[i]; GoodsEntry *ge = &st->goods[i];
if (IsSavegameVersionBefore(SLV_183)) { if (IsSavegameVersionBefore(SLV_183) && SlXvIsFeatureMissing(XSLFI_CHILLPP)) {
SwapPackets(ge); SwapPackets(ge);
SlObjectPtrOrNullFiltered(ge, _filtered_goods_desc.data()); SlObjectPtrOrNullFiltered(ge, _filtered_goods_desc.data());
SwapPackets(ge); SwapPackets(ge);

View File

@@ -160,21 +160,32 @@ static const SaveLoad _town_desc[] = {
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, SLV_9, SLV_165), SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), ///< pct_pass_transported / pct_mail_transported, now computed on the fly SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), ///< pct_pass_transported / pct_mail_transported, now computed on the fly
SLE_CONDNULL_X(3, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION), SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION),
@@ -197,6 +208,7 @@ static const SaveLoad _town_desc[] = {
SLE_VAR(Town, road_build_months, SLE_UINT8), SLE_VAR(Town, road_build_months, SLE_UINT8),
SLE_CONDVAR(Town, exclusivity, SLE_UINT8, SLV_2, SL_MAX_VERSION), SLE_CONDVAR(Town, exclusivity, SLE_UINT8, SLV_2, SL_MAX_VERSION),
SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, SLV_2, SL_MAX_VERSION), SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, SLV_2, SL_MAX_VERSION),
SLE_CONDVAR(Town, larger_town, SLE_BOOL, SLV_56, SL_MAX_VERSION), SLE_CONDVAR(Town, larger_town, SLE_BOOL, SLV_56, SL_MAX_VERSION),

View File

@@ -607,6 +607,8 @@ static uint16 _cargo_count;
static uint16 _cargo_paid_for; static uint16 _cargo_paid_for;
static Money _cargo_feeder_share; static Money _cargo_feeder_share;
static uint32 _cargo_loaded_at_xy; static uint32 _cargo_loaded_at_xy;
CargoPacketList _cpp_packets;
std::map<VehicleID, CargoPacketList> _veh_cpp_packets;
/** /**
* Make it possible to make the saveload tables "friends" of other classes. * Make it possible to make the saveload tables "friends" of other classes.
@@ -634,8 +636,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(Vehicle, x_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, x_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6),
SLE_CONDVAR(Vehicle, y_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, y_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), SLE_CONDVAR_X(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164, SlXvFeatureTest(XSLFTO_AND, XSLFI_ZPOS_32_BIT, 0, 0)),
SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_CONDVAR_X(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_ZPOS_32_BIT)),
SLE_VAR(Vehicle, direction, SLE_UINT8), SLE_VAR(Vehicle, direction, SLE_UINT8),
SLE_CONDNULL(2, SL_MIN_VERSION, SLV_58), SLE_CONDNULL(2, SL_MIN_VERSION, SLV_58),
@@ -652,7 +654,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_VAR(Vehicle, vehstatus, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5), SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, SLV_5, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, SLV_5, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, last_loading_station, SLE_UINT16, SLV_182, SL_MAX_VERSION), SLE_CONDVAR_X(Vehicle, last_loading_station, SLE_UINT16, SLV_182, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_CHILLPP)),
SLE_VAR(Vehicle, cargo_type, SLE_UINT8), SLE_VAR(Vehicle, cargo_type, SLE_UINT8),
SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, SLV_35, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, SLV_35, SL_MAX_VERSION),
@@ -664,16 +666,17 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(Vehicle, refit_cap, SLE_UINT16, SLV_182, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, refit_cap, SLE_UINT16, SLV_182, SL_MAX_VERSION),
SLEG_CONDVAR( _cargo_count, SLE_UINT16, SL_MIN_VERSION, SLV_68), SLEG_CONDVAR( _cargo_count, SLE_UINT16, SL_MIN_VERSION, SLV_68),
SLE_CONDPTRDEQ(Vehicle, cargo.packets, REF_CARGO_PACKET, SLV_68, SL_MAX_VERSION), SLE_CONDPTRDEQ(Vehicle, cargo.packets, REF_CARGO_PACKET, SLV_68, SL_MAX_VERSION),
SLEG_CONDPTRDEQ_X( _cpp_packets, REF_CARGO_PACKET, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDARR(Vehicle, cargo.action_counts, SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, SLV_181, SL_MAX_VERSION), SLE_CONDARR(Vehicle, cargo.action_counts, SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, SLV_181, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, cargo_age_counter, SLE_UINT16, SLV_162, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, cargo_age_counter, SLE_UINT16, SLV_162, SL_MAX_VERSION),
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_X(Vehicle, running_ticks, SLE_FILE_U8 | SLE_VAR_U16, SLV_88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool { SLE_CONDVAR_X(Vehicle, running_ticks, SLE_FILE_U8 | SLE_VAR_U16, SLV_88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool {
return version_in_range && !(SlXvIsFeaturePresent(XSLFI_SPRINGPP, 3) || SlXvIsFeaturePresent(XSLFI_JOKERPP) || SlXvIsFeaturePresent(XSLFI_VARIABLE_DAY_LENGTH, 2)); return version_in_range && !(SlXvIsFeaturePresent(XSLFI_SPRINGPP, 3) || SlXvIsFeaturePresent(XSLFI_JOKERPP) || SlXvIsFeaturePresent(XSLFI_CHILLPP) || SlXvIsFeaturePresent(XSLFI_VARIABLE_DAY_LENGTH, 2));
})), })),
SLE_CONDVAR_X(Vehicle, running_ticks, SLE_UINT16, SLV_88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool { SLE_CONDVAR_X(Vehicle, running_ticks, SLE_UINT16, SLV_88, SL_MAX_VERSION, SlXvFeatureTest([](uint16 version, bool version_in_range) -> bool {
return version_in_range && (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 2) || SlXvIsFeaturePresent(XSLFI_JOKERPP) || SlXvIsFeaturePresent(XSLFI_VARIABLE_DAY_LENGTH, 2)); return version_in_range && (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 2) || SlXvIsFeaturePresent(XSLFI_JOKERPP) || SlXvIsFeaturePresent(XSLFI_CHILLPP) || SlXvIsFeaturePresent(XSLFI_VARIABLE_DAY_LENGTH, 2));
})), })),
SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8), SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8),
@@ -797,6 +800,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDNULL(2, SLV_2, SLV_20), SLE_CONDNULL(2, SLV_2, SLV_20),
SLE_CONDVAR(Train, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION), SLE_CONDVAR(Train, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION),
SLE_CONDNULL_X(2 , SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL(11, SLV_2, SLV_144), // old reserved space SLE_CONDNULL(11, SLV_2, SLV_144), // old reserved space
SLE_CONDVAR_X(Train, reverse_distance, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_REVERSE_AT_WAYPOINT)), SLE_CONDVAR_X(Train, reverse_distance, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_REVERSE_AT_WAYPOINT)),
SLE_CONDVAR_X(Train, speed_restriction, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPEED_RESTRICTION)), SLE_CONDVAR_X(Train, speed_restriction, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPEED_RESTRICTION)),
@@ -856,6 +860,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, SLV_2, SL_MAX_VERSION), SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, SLV_2, SL_MAX_VERSION),
SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, SLV_2, SL_MAX_VERSION), SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, SLV_2, SL_MAX_VERSION),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)), SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, SLV_136, SL_MAX_VERSION), SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, SLV_136, SL_MAX_VERSION),
SLE_CONDVAR(Aircraft, flags, SLE_UINT8, SLV_167, SL_MAX_VERSION), SLE_CONDVAR(Aircraft, flags, SLE_UINT8, SLV_167, SL_MAX_VERSION),
@@ -879,8 +884,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), SLE_CONDVAR_X(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164, SlXvFeatureTest(XSLFTO_AND, XSLFI_ZPOS_32_BIT, 0, 0)),
SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_CONDVAR_X(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_ZPOS_32_BIT)),
SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32), SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32),
SLE_CONDNULL(5, SL_MIN_VERSION, SLV_59), SLE_CONDNULL(5, SL_MIN_VERSION, SLV_59),
@@ -912,8 +917,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6),
SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION),
SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), SLE_CONDVAR_X(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164, SlXvFeatureTest(XSLFTO_AND, XSLFI_ZPOS_32_BIT, 0, 0)),
SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_CONDVAR_X(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_ZPOS_32_BIT)),
SLE_VAR(Vehicle, direction, SLE_UINT8), SLE_VAR(Vehicle, direction, SLE_UINT8),
SLE_CONDNULL(5, SL_MIN_VERSION, SLV_58), SLE_CONDNULL(5, SL_MIN_VERSION, SLV_58),
@@ -932,6 +937,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_191), SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_191),
SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, SLV_191, SL_MAX_VERSION), SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, SLV_191, SL_MAX_VERSION),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)), SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, SLV_194, SL_MAX_VERSION), SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, SLV_194, SL_MAX_VERSION),
SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space
@@ -1002,6 +1008,9 @@ void Load_VEHS()
_cargo_count = 0; _cargo_count = 0;
_cpp_packets.clear();
_veh_cpp_packets.clear();
while ((index = SlIterateArray()) != -1) { while ((index = SlIterateArray()) != -1) {
Vehicle *v; Vehicle *v;
VehicleType vtype = (VehicleType)SlReadByte(); VehicleType vtype = (VehicleType)SlReadByte();
@@ -1030,7 +1039,7 @@ void Load_VEHS()
v->last_station_visited = INVALID_STATION; v->last_station_visited = INVALID_STATION;
} }
if (IsSavegameVersionBefore(SLV_182)) v->last_loading_station = INVALID_STATION; if (IsSavegameVersionBefore(SLV_182) && !SlXvIsFeaturePresent(XSLFI_CHILLPP)) v->last_loading_station = INVALID_STATION;
if (IsSavegameVersionBefore(SLV_5)) { if (IsSavegameVersionBefore(SLV_5)) {
/* Convert the current_order.type (which is a mix of type and flags, because /* Convert the current_order.type (which is a mix of type and flags, because
@@ -1041,6 +1050,11 @@ void Load_VEHS()
/* Advanced vehicle lists got added */ /* Advanced vehicle lists got added */
if (IsSavegameVersionBefore(SLV_60)) v->group_id = DEFAULT_GROUP; if (IsSavegameVersionBefore(SLV_60)) v->group_id = DEFAULT_GROUP;
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
_veh_cpp_packets[index] = std::move(_cpp_packets);
_cpp_packets.clear();
}
} }
} }
@@ -1050,7 +1064,9 @@ static void Ptrs_VEHS()
Vehicle *v; Vehicle *v;
FOR_ALL_VEHICLES(v) { FOR_ALL_VEHICLES(v) {
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) _cpp_packets = std::move(_veh_cpp_packets[v->index]);
SlObjectPtrOrNullFiltered(v, GetVehicleDescriptionFiltered(v->type)); SlObjectPtrOrNullFiltered(v, GetVehicleDescriptionFiltered(v->type));
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) _veh_cpp_packets[v->index] = std::move(_cpp_packets);
} }
} }

View File

@@ -144,6 +144,11 @@ full = _climates
load = ConvertLandscape load = ConvertLandscape
cat = SC_BASIC cat = SC_BASIC
;;game_creation.snow_line_height high
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = game_creation.snow_line_height var = game_creation.snow_line_height
@@ -158,6 +163,11 @@ to = SLV_22
length = 2 length = 2
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP)
;;game_creation.desert_amount + tree_line
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
from = SLV_22 from = SLV_22

View File

@@ -437,12 +437,22 @@ strhelp = STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT
strval = STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE strval = STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE
cat = SC_BASIC cat = SC_BASIC
; Snow line upper byte
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
; Snow line (or snow_line_height * TILE_HEIGHT) ; Snow line (or snow_line_height * TILE_HEIGHT)
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
from = SLV_97 from = SLV_97
to = SLV_164 to = SLV_164
;;game_creation.desert_amount + tree_line
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_OMANY] [SDT_OMANY]
base = GameSettings base = GameSettings
var = vehicle.road_side var = vehicle.road_side
@@ -474,7 +484,12 @@ 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) extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_HEIGHT_8_BIT, 1, 1)
;; construction.allow_more_heightlevels
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
@@ -670,6 +685,11 @@ str = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH
strhelp = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT strhelp = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT
strval = STR_CONFIG_SETTING_TILE_LENGTH strval = STR_CONFIG_SETTING_TILE_LENGTH
;; construction.max_chunnel_exit_length
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_233)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
var = construction.chunnel var = construction.chunnel
@@ -771,6 +791,10 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
xref = ""economy.old_town_cargo_factor"" xref = ""economy.old_town_cargo_factor""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_XREF]
xref = ""economy.day_length_factor""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = economy.found_town var = economy.found_town
@@ -796,6 +820,10 @@ def = true
str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS
strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT
[SDT_XREF]
xref = ""economy.old_town_cargo_factor""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = economy.town_cargogen_mode var = economy.town_cargogen_mode
@@ -1180,6 +1208,11 @@ cat = SC_EXPERT
length = 1 length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP)
;; pf.back_of_one_way_pbs_waiting_point
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = vehicle.max_train_length var = vehicle.max_train_length
@@ -1217,6 +1250,11 @@ strval = STR_CONFIG_SETTING_NONE
length = 1 length = 1
to = SLV_159 to = SLV_159
;; order.gotodepot
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
; path finder ; path finder
[SDT_BOOL] [SDT_BOOL]
@@ -1472,12 +1510,22 @@ proc = UpdateConsists
length = 1 length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; ticks_per_minute
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
; order.timetabling ; order.timetabling
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
from = SLV_67 from = SLV_67
to = SLV_159 to = SLV_159
;; order.timetabling, order.timetable_automated, order.timetable_separation
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = vehicle.plane_speed var = vehicle.plane_speed
@@ -1519,6 +1567,10 @@ cat = SC_BASIC
xref = ""vehicle.improved_breakdowns"" xref = ""vehicle.improved_breakdowns""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_XREF]
xref = ""vehicle.improved_breakdowns""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
var = vehicle.improved_breakdowns var = vehicle.improved_breakdowns
@@ -1885,6 +1937,11 @@ strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
length = 1 length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)
;; construction.extra_industry_placement_logic
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
to = SLV_141 to = SLV_141
@@ -1949,6 +2006,11 @@ cat = SC_BASIC
length = 1 length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP)
; Snow line upper byte
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = game_creation.snow_line_height var = game_creation.snow_line_height
@@ -1962,6 +2024,11 @@ strhelp = STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT
strval = STR_JUST_COMMA strval = STR_JUST_COMMA
cat = SC_BASIC cat = SC_BASIC
;;game_creation.desert_amount + tree_line
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
;;game_creation.desert_amount ;;game_creation.desert_amount
[SDT_NULL] [SDT_NULL]
length = 1 length = 1
@@ -2148,6 +2215,11 @@ str = STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER
strhelp = STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT strhelp = STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT
strval = STR_JUST_COMMA strval = STR_JUST_COMMA
;; economy.town_growth_cargo, economy.town_pop_need_goods, economy.larger_town_growth_cargo, economy.larger_town_pop_need_goods
[SDT_NULL]
length = 10
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
var = economy.mod_road_rebuild var = economy.mod_road_rebuild
@@ -2155,6 +2227,10 @@ from = SLV_77
def = true def = true
cat = SC_EXPERT cat = SC_EXPERT
[SDT_XREF]
xref = ""construction.maximum_signal_evaluations""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = economy.town_min_distance var = economy.town_min_distance
@@ -2208,6 +2284,42 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
xref = ""economy.sharing_payment_in_debt"" xref = ""economy.sharing_payment_in_debt""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[0]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[1]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[2]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[3]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.sharing_fee[0]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.sharing_fee[1]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.sharing_fee[2]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.sharing_fee[3]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_XREF]
xref = ""economy.sharing_payment_in_debt""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = construction.maximum_signal_evaluations var = construction.maximum_signal_evaluations
@@ -2498,6 +2610,16 @@ strhelp = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT
proc = InvalidateCompanyInfrastructureWindow proc = InvalidateCompanyInfrastructureWindow
cat = SC_BASIC cat = SC_BASIC
[SDT_XREF]
xref = ""economy.infrastructure_maintenance""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
;; construction.traffic_lights...
;; linkgraph...
[SDT_NULL]
length = 18
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = economy.random_road_reconstruction var = economy.random_road_reconstruction
@@ -2689,6 +2811,11 @@ cat = SC_EXPERT
length = 4 length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
# pf.npf.npf_road_trafficlight_penalty
[SDT_NULL]
length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = pf.npf.npf_road_dt_occupied_penalty var = pf.npf.npf_road_dt_occupied_penalty
@@ -2999,6 +3126,11 @@ cat = SC_EXPERT
length = 4 length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
# pf.yapf.road_trafficlight_penalty
[SDT_NULL]
length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR] [SDT_VAR]
base = GameSettings base = GameSettings
var = pf.yapf.road_stop_penalty var = pf.yapf.road_stop_penalty
@@ -3246,6 +3378,11 @@ strhelp = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT
strval = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE strval = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE
cat = SC_BASIC cat = SC_BASIC
;; construction.tree_placement_drag_limit, construction.ingame_tree_line_height, construction.tree_growth_rate
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_BOOL] [SDT_BOOL]
base = GameSettings base = GameSettings
var = construction.trees_around_snow_line_enabled var = construction.trees_around_snow_line_enabled