Merge tag '14.0-beta1' into jgrpp
# Conflicts: # src/3rdparty/squirrel/squirrel/sqcompiler.cpp # src/aircraft.h # src/animated_tile.h # src/base_consist.h # src/cargotype.h # src/company_gui.cpp # src/console_cmds.cpp # src/core/overflowsafe_type.hpp # src/engine_gui.cpp # src/industry_gui.cpp # src/lang/english.txt # src/music/extmidi.cpp # src/network/core/network_game_info.cpp # src/network/network_server.cpp # src/newgrf.cpp # src/newgrf_industries.cpp # src/order_base.h # src/order_cmd.cpp # src/order_gui.cpp # src/order_type.h # src/os/macosx/misc_osx.cpp # src/os/windows/crashlog_win.cpp # src/rail_gui.cpp # src/rail_gui.h # src/roadveh.h # src/roadveh_cmd.cpp # src/saveload/afterload.cpp # src/saveload/company_sl.cpp # src/saveload/saveload.cpp # src/saveload/saveload.h # src/saveload/saveload_error.hpp # src/script/api/script_town.cpp # src/settingsgen/settingsgen.cpp # src/ship.h # src/ship_cmd.cpp # src/smallmap_gui.cpp # src/spritecache.cpp # src/stdafx.h # src/strgen/strgen.cpp # src/strgen/strgen.h # src/table/settings/script_settings.ini # src/timetable_cmd.cpp # src/timetable_gui.cpp # src/town.h # src/town_cmd.cpp # src/town_cmd.h # src/town_gui.cpp # src/train.h # src/train_cmd.cpp # src/tree_cmd.cpp # src/vehicle.cpp # src/vehicle_base.h # src/vehicle_cmd.cpp # src/vehicle_gui.cpp # src/vehiclelist.cpp # src/waypoint_base.h # src/widget.cpp
This commit is contained in:
@@ -196,7 +196,7 @@ void AfterLoadCompanyStats()
|
||||
}
|
||||
}
|
||||
}
|
||||
FALLTHROUGH;
|
||||
[[fallthrough]];
|
||||
|
||||
case MP_OBJECT:
|
||||
if (GetWaterClass(tile) == WATER_CLASS_CANAL) {
|
||||
|
@@ -209,6 +209,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_NEWGRF_LAST_SERVICE, XSCF_NULL, 1, 1, "slv_newgrf_last_service", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_CARGO_TRAVELLED, XSCF_NULL, 1, 1, "slv_cargo_travelled", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_SHIP_ACCELERATION, XSCF_NULL, 1, 1, "slv_ship_acceleration", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_DEPOT_UNBUNCHING, XSCF_NULL, 1, 1, "slv_depot_unbunching", nullptr, nullptr, "VUBS" },
|
||||
|
||||
{ XSLFI_TABLE_PATS, XSCF_NULL, 1, 1, "table_pats", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_TABLE_MISC_SL, XSCF_NULL, 1, 1, "table_misc_sl", nullptr, nullptr, nullptr },
|
||||
|
@@ -158,6 +158,7 @@ enum SlXvFeatureIndex {
|
||||
XSLFI_NEWGRF_LAST_SERVICE, ///< See: SLV_NEWGRF_LAST_SERVICE (PR #11124)
|
||||
XSLFI_CARGO_TRAVELLED, ///< See: SLV_CARGO_TRAVELLED (PR #11283)
|
||||
XSLFI_SHIP_ACCELERATION, ///< See: SLV_SHIP_ACCELERATION (PR #10734)
|
||||
XSLFI_DEPOT_UNBUNCHING, ///< See: SLV_DEPOT_UNBUNCHING (PR #11945)
|
||||
|
||||
XSLFI_TABLE_PATS, ///< Use upstream table format for PATS
|
||||
XSLFI_TABLE_MISC_SL, ///< Use upstream table format for miscellaneous chunks, so far: DATE, VIEW, MAPS
|
||||
|
@@ -600,10 +600,10 @@ static const OldChunks town_chunk[] = {
|
||||
|
||||
OCL_NULL( 2 ), ///< pct_pass_transported / pct_mail_transported, now computed on the fly
|
||||
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_FOOD].new_act ),
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_WATER].new_act ),
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_FOOD].old_act ),
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TE_WATER].old_act ),
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_FOOD].new_act ),
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_WATER].new_act ),
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_FOOD].old_act ),
|
||||
OCL_SVAR( OC_TTD | OC_UINT16, Town, received[TAE_WATER].old_act ),
|
||||
|
||||
OCL_SVAR( OC_UINT8, Town, road_build_months ),
|
||||
OCL_SVAR( OC_UINT8, Town, fund_buildings_months ),
|
||||
|
@@ -412,7 +412,7 @@ struct ThreadSlErrorException {
|
||||
* @note This function does never return as it throws an exception to
|
||||
* break out of all the saveload code.
|
||||
*/
|
||||
void NORETURN SlError(StringID string, std::string extra_msg)
|
||||
[[noreturn]] void SlError(StringID string, std::string extra_msg)
|
||||
{
|
||||
if (IsNonMainThread() && IsNonGameThread() && _sl.action != SLA_SAVE) {
|
||||
throw ThreadSlErrorException{ string, std::move(extra_msg) };
|
||||
@@ -442,7 +442,7 @@ void NORETURN SlError(StringID string, std::string extra_msg)
|
||||
/**
|
||||
* As SlError, except that it takes a format string and additional parameters
|
||||
*/
|
||||
void NORETURN CDECL SlErrorFmt(StringID string, const char *msg, ...)
|
||||
[[noreturn]] void CDECL SlErrorFmt(StringID string, const char *msg, ...)
|
||||
{
|
||||
va_list va;
|
||||
va_start(va, msg);
|
||||
@@ -458,7 +458,7 @@ void NORETURN CDECL SlErrorFmt(StringID string, const char *msg, ...)
|
||||
* @note This function does never return as it throws an exception to
|
||||
* break out of all the saveload code.
|
||||
*/
|
||||
void NORETURN SlErrorCorrupt(std::string msg)
|
||||
[[noreturn]] void SlErrorCorrupt(std::string msg)
|
||||
{
|
||||
SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, std::move(msg));
|
||||
}
|
||||
@@ -470,7 +470,7 @@ void NORETURN SlErrorCorrupt(std::string msg)
|
||||
* @note This function does never return as it throws an exception to
|
||||
* break out of all the saveload code.
|
||||
*/
|
||||
void NORETURN CDECL SlErrorCorruptFmt(const char *format, ...)
|
||||
[[noreturn]] void CDECL SlErrorCorruptFmt(const char *format, ...)
|
||||
{
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
|
@@ -1067,7 +1067,7 @@ inline void SlLoadTableOrRiffFiltered(const NamedSaveLoadTable &slt)
|
||||
SlLoadTableOrRiffFiltered(SlTableHeaderOrRiff(slt));
|
||||
}
|
||||
|
||||
void NORETURN CDECL SlErrorFmt(StringID string, const char *msg, ...) WARN_FORMAT(2, 3);
|
||||
[[noreturn]] void CDECL SlErrorFmt(StringID string, const char *msg, ...) WARN_FORMAT(2, 3);
|
||||
|
||||
bool SaveloadCrashWithMissingNewGRFs();
|
||||
|
||||
|
@@ -385,6 +385,7 @@ enum SaveLoadVersion : uint16_t {
|
||||
SLV_CALENDAR_SUB_DATE_FRACT, ///< 328 PR#11428 Add sub_date_fract to measure calendar days.
|
||||
SLV_SHIP_ACCELERATION, ///< 329 PR#10734 Start using Vehicle's acceleration field for ships too.
|
||||
SLV_MAX_LOAN_FOR_COMPANY, ///< 330 PR#11224 Separate max loan for each company.
|
||||
SLV_DEPOT_UNBUNCHING, ///< 331 PR#11945 Allow unbunching shared order vehicles at a depot.
|
||||
|
||||
SL_MAX_VERSION, ///< Highest possible saveload version
|
||||
|
||||
@@ -429,9 +430,9 @@ void SlSkipBytes(size_t length);
|
||||
size_t SlGetBytesRead();
|
||||
size_t SlGetBytesWritten();
|
||||
|
||||
void NORETURN SlError(StringID string, std::string extra_msg = {});
|
||||
void NORETURN SlErrorCorrupt(std::string msg);
|
||||
void NORETURN CDECL SlErrorCorruptFmt(const char *format, ...) WARN_FORMAT(1, 2);
|
||||
[[noreturn]] void SlError(StringID string, std::string extra_msg = {});
|
||||
[[noreturn]] void SlErrorCorrupt(std::string msg);
|
||||
[[noreturn]] void CDECL SlErrorCorruptFmt(const char *format, ...) WARN_FORMAT(1, 2);
|
||||
|
||||
bool SaveLoadFileTypeIsScenario();
|
||||
|
||||
|
@@ -212,14 +212,14 @@ static const SaveLoad _town_desc[] = {
|
||||
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, SL_CHILLPP_232)),
|
||||
|
||||
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[TAE_FOOD].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
|
||||
SLE_CONDVAR(Town, received[TAE_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, SL_CHILLPP_232)),
|
||||
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[TAE_FOOD].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
|
||||
SLE_CONDVAR(Town, received[TAE_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, SL_CHILLPP_232)),
|
||||
|
||||
SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION),
|
||||
SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TAE, SLV_165, SL_MAX_VERSION),
|
||||
|
||||
SLE_CONDSSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, SLV_168, SL_MAX_VERSION),
|
||||
|
||||
@@ -307,7 +307,7 @@ static void RealSave_Town(Town *t)
|
||||
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||
SlObjectSaveFiltered(&t->supplied[i], _filtered_town_supplied_desc);
|
||||
}
|
||||
for (int i = TE_BEGIN; i < NUM_TE; i++) {
|
||||
for (int i = TAE_BEGIN; i < NUM_TAE; i++) {
|
||||
SlObjectSaveFiltered(&t->received[i], _filtered_town_received_desc);
|
||||
}
|
||||
}
|
||||
@@ -335,11 +335,11 @@ static void Load_TOWN()
|
||||
SlObjectLoadFiltered(&t->supplied[i], _filtered_town_supplied_desc);
|
||||
}
|
||||
if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) {
|
||||
for (int i = TE_BEGIN; i < NUM_TE; i++) {
|
||||
for (int i = TAE_BEGIN; i < NUM_TAE; i++) {
|
||||
SlObject(&t->received[i], _town_received_desc_spp);
|
||||
}
|
||||
} else {
|
||||
for (int i = TE_BEGIN; i < NUM_TE; i++) {
|
||||
for (int i = TAE_BEGIN; i < NUM_TAE; i++) {
|
||||
SlObjectLoadFiltered(&t->received[i], _filtered_town_received_desc);
|
||||
}
|
||||
}
|
||||
|
@@ -1606,12 +1606,45 @@ void Load_VLKA()
|
||||
}
|
||||
}
|
||||
|
||||
const SaveLoadTable GetVehicleUnbunchStateDescription()
|
||||
{
|
||||
static const SaveLoad _vehicle_unbunch_state_desc[] = {
|
||||
SLE_VAR(VehicleUnbunchState, depot_unbunching_last_departure, SLE_INT64),
|
||||
SLE_VAR(VehicleUnbunchState, depot_unbunching_next_departure, SLE_INT64),
|
||||
SLE_VAR(VehicleUnbunchState, round_trip_time, SLE_INT32),
|
||||
};
|
||||
|
||||
return _vehicle_unbunch_state_desc;
|
||||
}
|
||||
|
||||
void Save_VUBS()
|
||||
{
|
||||
for (Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->unbunch_state != nullptr) {
|
||||
SlSetArrayIndex(v->index);
|
||||
SlObject(v->unbunch_state.get(), GetVehicleUnbunchStateDescription());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Load_VUBS()
|
||||
{
|
||||
int index;
|
||||
while ((index = SlIterateArray()) != -1) {
|
||||
Vehicle *v = Vehicle::GetIfValid(index);
|
||||
assert(v != nullptr);
|
||||
v->unbunch_state.reset(new VehicleUnbunchState());
|
||||
SlObject(v->unbunch_state.get(), GetVehicleUnbunchStateDescription());
|
||||
}
|
||||
}
|
||||
|
||||
static const ChunkHandler veh_chunk_handlers[] = {
|
||||
{ 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'VEOX', Save_VEOX, Load_VEOX, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'VESR', Save_VESR, Load_VESR, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'VENC', Save_VENC, Load_VENC, nullptr, nullptr, CH_RIFF, Special_VENC },
|
||||
{ 'VLKA', Save_VLKA, Load_VLKA, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'VUBS', Save_VUBS, Load_VUBS, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _veh_chunk_handlers(veh_chunk_handlers);
|
||||
|
Reference in New Issue
Block a user