From 28e90769f74e55ea7c8f75146d5b33e0aa777da8 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 3 Jun 2021 16:55:08 +0200 Subject: [PATCH 1/9] Codechange: use "[[maybe_unused]]" instead of a wide variety of other ways we had While at it, replace OTTD_ASSERT with WITH_ASSERT, as this is always set if assert() is valid. No matter if NDEBUG is set or not. --- src/3rdparty/squirrel/squirrel/sqcompiler.cpp | 3 +-- src/3rdparty/squirrel/squirrel/sqvm.cpp | 6 +----- src/autoreplace_cmd.cpp | 6 ++---- src/core/pool_func.hpp | 8 ++++---- src/core/pool_type.hpp | 8 ++++---- src/engine.cpp | 3 +-- src/gfxinit.cpp | 3 +-- src/industry_cmd.cpp | 3 +-- src/misc/hashtable.hpp | 3 +-- src/pathfinder/npf/npf.cpp | 3 +-- src/saveload/saveload.cpp | 8 +------- src/script/squirrel.cpp | 3 +-- src/spritecache.cpp | 4 +--- src/stdafx.h | 5 ----- src/tgp.cpp | 4 +--- src/town_cmd.cpp | 18 ++++++++++-------- src/townname.cpp | 4 +--- src/tunnelbridge_cmd.cpp | 3 +-- src/vehicle.cpp | 4 +--- src/vehiclelist.cpp | 3 +-- src/widget.cpp | 8 ++------ 21 files changed, 37 insertions(+), 73 deletions(-) diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp index 00e5df04f4..a80e08639b 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp @@ -835,8 +835,7 @@ public: nkeys++; SQInteger val = _fs->PopTarget(); SQInteger key = _fs->PopTarget(); - SQInteger attrs = hasattrs ? _fs->PopTarget():-1; - (void)attrs; // assert only + [[maybe_unused]] SQInteger attrs = hasattrs ? _fs->PopTarget():-1; assert((hasattrs && attrs == key-1) || !hasattrs); unsigned char flags = (hasattrs?NEW_SLOT_ATTRIBUTES_FLAG:0)|(isstatic?NEW_SLOT_STATIC_FLAG:0); SQInteger table = _fs->TopTarget(); //<_can_suspend); @@ -1504,11 +1502,9 @@ bool SQVM::Call(SQObjectPtr &closure,SQInteger nparams,SQInteger stackbase,SQObj default: return false; } -#ifdef WITH_ASSERT if(!_suspended) { assert(_stackbase == prevstackbase); } -#endif return true; } diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index de5617a4d9..9e82944b64 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -596,8 +596,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon assert(RailVehInfo(wagon->engine_type)->railveh_type == RAILVEH_WAGON); /* Sell wagon */ - CommandCost ret = DoCommand(0, wagon->index, 0, DC_EXEC, GetCmdSellVeh(wagon)); - (void)ret; // assert only + [[maybe_unused]] CommandCost ret = DoCommand(0, wagon->index, 0, DC_EXEC, GetCmdSellVeh(wagon)); assert(ret.Succeeded()); new_vehs[i] = nullptr; @@ -650,8 +649,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon assert(Train::From(old_head)->GetNextUnit() == nullptr); for (int i = num_units - 1; i > 0; i--) { - CommandCost ret = CmdMoveVehicle(old_vehs[i], old_head, DC_EXEC | DC_AUTOREPLACE, false); - (void)ret; // assert only + [[maybe_unused]] CommandCost ret = CmdMoveVehicle(old_vehs[i], old_head, DC_EXEC | DC_AUTOREPLACE, false); assert(ret.Succeeded()); } } diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index dea108f08d..3b2d24b145 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -33,9 +33,9 @@ DEFINE_POOL_METHOD(inline)::Pool(const char *name) : first_free(0), first_unused(0), items(0), -#ifdef OTTD_ASSERT +#ifdef WITH_ASSERT checked(0), -#endif /* OTTD_ASSERT */ +#endif /* WITH_ASSERT */ cleaning(false), data(nullptr), alloc_cache(nullptr) @@ -133,10 +133,10 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size) { size_t index = this->FindFirstFree(); -#ifdef OTTD_ASSERT +#ifdef WITH_ASSERT assert(this->checked != 0); this->checked--; -#endif /* OTTD_ASSERT */ +#endif /* WITH_ASSERT */ if (index == NO_FREE_ITEM) { error("%s: no more free items", this->name); } diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 33f952dde4..2201d5cb01 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -90,9 +90,9 @@ struct Pool : PoolBase { size_t first_free; ///< No item with index lower than this is free (doesn't say anything about this one!) size_t first_unused; ///< This and all higher indexes are free (doesn't say anything about first_unused-1 !) size_t items; ///< Number of used indexes (non-nullptr) -#ifdef OTTD_ASSERT +#ifdef WITH_ASSERT size_t checked; ///< Number of items we checked for -#endif /* OTTD_ASSERT */ +#endif /* WITH_ASSERT */ bool cleaning; ///< True if cleaning pool (deleting all items) Titem **data; ///< Pointer to array of pointers to Titem @@ -130,9 +130,9 @@ struct Pool : PoolBase { inline bool CanAllocate(size_t n = 1) { bool ret = this->items <= Tmax_size - n; -#ifdef OTTD_ASSERT +#ifdef WITH_ASSERT this->checked = ret ? n : 0; -#endif /* OTTD_ASSERT */ +#endif /* WITH_ASSERT */ return ret; } diff --git a/src/engine.cpp b/src/engine.cpp index 114cc1db6a..f330cf6048 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -537,8 +537,7 @@ void SetupEngines() /* Assert is safe; there won't be more than 256 original vehicles * in any case, and we just cleaned the pool. */ assert(Engine::CanAllocateItem()); - const Engine *e = new Engine(eid.type, eid.internal_id); - (void)e; // assert only + [[maybe_unused]] const Engine *e = new Engine(eid.type, eid.internal_id); assert(e->index == index); index++; } diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 713f6e5439..8816c8db37 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -101,8 +101,7 @@ static void LoadGrfFileIndexed(const char *filename, const SpriteID *index_tbl, uint end = *index_tbl++; do { - bool b = LoadNextSprite(start, file, sprite_id); - (void)b; // Unused without asserts + [[maybe_unused]] bool b = LoadNextSprite(start, file, sprite_id); assert(b); sprite_id++; } while (++start <= end); diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index d88f7b692f..8be44488db 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2139,8 +2139,7 @@ static Industry *CreateNewIndustry(TileIndex tile, IndustryType type, IndustryAv uint32 seed2 = Random(); Industry *i = nullptr; size_t layout_index = RandomRange((uint32)indspec->layouts.size()); - CommandCost ret = CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, layout_index, seed, GB(seed2, 0, 16), OWNER_NONE, creation_type, &i); - (void)ret; // assert only + [[maybe_unused]] CommandCost ret = CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, layout_index, seed, GB(seed2, 0, 16), OWNER_NONE, creation_type, &i); assert(i != nullptr || ret.Failed()); return i; } diff --git a/src/misc/hashtable.hpp b/src/misc/hashtable.hpp index c7bb600dad..13dadc01ac 100644 --- a/src/misc/hashtable.hpp +++ b/src/misc/hashtable.hpp @@ -239,8 +239,7 @@ public: /** non-const item search & removal */ void Pop(Titem_ &item) { - bool ret = TryPop(item); - (void)ret; // assert only + [[maybe_unused]] bool ret = TryPop(item); assert(ret); } diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 0094521615..604ead52bb 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1045,8 +1045,7 @@ static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start _npf_aystar.user_data = user; /* GO! */ - int r = _npf_aystar.Main(); - (void)r; // assert only + [[maybe_unused]] int r = _npf_aystar.Main(); assert(r != AYSTAR_STILL_BUSY); if (result.best_bird_dist != 0) { diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index f056404b54..01f0e0fd3a 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1474,14 +1474,12 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld) return 0; } -#ifdef OTTD_ASSERT - /** * Check whether the variable size of the variable in the saveload configuration * matches with the actual variable size. * @param sld The saveload configuration to test. */ -static bool IsVariableSizeRight(const SaveLoad &sld) +[[maybe_unused]] static bool IsVariableSizeRight(const SaveLoad &sld) { switch (sld.cmd) { case SL_VAR: @@ -1522,13 +1520,9 @@ static bool IsVariableSizeRight(const SaveLoad &sld) } } -#endif /* OTTD_ASSERT */ - bool SlObjectMember(void *ptr, const SaveLoad &sld) { -#ifdef OTTD_ASSERT assert(IsVariableSizeRight(sld)); -#endif VarType conv = GB(sld.conv, 0, 8); switch (sld.cmd) { diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index aa698af83a..41024b2f9a 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -651,8 +651,7 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const char *filename, SQBool printer } unsigned short bom = 0; if (size >= 2) { - size_t sr = fread(&bom, 1, sizeof(bom), file); - (void)sr; // Inside tar, no point checking return value of fread + [[maybe_unused]] size_t sr = fread(&bom, 1, sizeof(bom), file); } SQLEXREADFUNC func; diff --git a/src/spritecache.cpp b/src/spritecache.cpp index f2840c1b02..cf53aaf558 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -262,9 +262,7 @@ static void ResizeSpriteOut(SpriteLoader::Sprite *sprite, ZoomLevel zoom) SpriteLoader::CommonPixel *dst = sprite[zoom].data; const SpriteLoader::CommonPixel *src = sprite[zoom - 1].data; -#ifdef WITH_ASSERT - const SpriteLoader::CommonPixel *src_end = src + sprite[zoom - 1].height * sprite[zoom - 1].width; -#endif + [[maybe_unused]] const SpriteLoader::CommonPixel *src_end = src + sprite[zoom - 1].height * sprite[zoom - 1].width; for (uint y = 0; y < sprite[zoom].height; y++) { const SpriteLoader::CommonPixel *src_ln = src + sprite[zoom - 1].width; diff --git a/src/stdafx.h b/src/stdafx.h index dc52fc0d53..e593344bf4 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -435,11 +435,6 @@ void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); # define assert(expression) if (unlikely(!(expression))) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression); #endif -/* Asserts are enabled if NDEBUG isn't defined or WITH_ASSERT is defined. */ -#if !defined(NDEBUG) || defined(WITH_ASSERT) -# define OTTD_ASSERT -#endif - #if defined(OPENBSD) /* OpenBSD uses strcasecmp(3) */ # define _stricmp strcasecmp diff --git a/src/tgp.cpp b/src/tgp.cpp index e23b2643df..2c0c479100 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -658,9 +658,7 @@ static void HeightMapCurves(uint level) for (uint t = 0; t < lengthof(curve_maps); t++) { if (!HasBit(corner_bits, t)) continue; -#ifdef WITH_ASSERT - bool found = false; -#endif + [[maybe_unused]] bool found = false; const control_point_t *cm = curve_maps[t].list; for (uint i = 0; i < curve_maps[t].length - 1; i++) { const control_point_t &p1 = cm[i]; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index bc29d39177..d397825afc 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -106,13 +106,17 @@ Town::~Town() * and remove from list of sorted towns */ CloseWindowById(WC_TOWN_VIEW, this->index); - /* Check no industry is related to us. */ #ifdef WITH_ASSERT - for (const Industry *i : Industry::Iterate()) assert(i->town != this); + /* Check no industry is related to us. */ + for (const Industry *i : Industry::Iterate()) { + assert(i->town != this); + } /* ... and no object is related to us. */ - for (const Object *o : Object::Iterate()) assert(o->town != this); -#endif + for (const Object *o : Object::Iterate()) { + assert(o->town != this); + } +#endif /* WITH_ASSERT */ /* Check no tile is related to us. */ for (TileIndex tile = 0; tile < MapSize(); ++tile) { @@ -2177,8 +2181,7 @@ static Town *CreateRandomTown(uint attempts, uint32 townnameparts, TownSize size if (t->cache.population > 0) return t; Backup cur_company(_current_company, OWNER_TOWN, FILE_LINE); - CommandCost rc = DoCommand(t->xy, t->index, 0, DC_EXEC, CMD_DELETE_TOWN); - (void)rc; // assert only + [[maybe_unused]] CommandCost rc = DoCommand(t->xy, t->index, 0, DC_EXEC, CMD_DELETE_TOWN); cur_company.Restore(); assert(rc.Succeeded()); @@ -2279,8 +2282,7 @@ HouseZonesBits GetTownRadiusGroup(const Town *t, TileIndex tile) */ static inline void ClearMakeHouseTile(TileIndex tile, Town *t, byte counter, byte stage, HouseID type, byte random_bits) { - CommandCost cc = DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR); - (void)cc; // assert only + [[maybe_unused]] CommandCost cc = DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR); assert(cc.Succeeded()); IncreaseBuildingCount(t, type); diff --git a/src/townname.cpp b/src/townname.cpp index 519391f14e..bce894bfcf 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -600,9 +600,7 @@ static char *MakeCzechTownName(char *buf, const char *last, uint32 seed) return strecpy(buf, _name_czech_real[SeedModChance(4, lengthof(_name_czech_real), seed)], last); } -#ifdef WITH_ASSERT - const char *orig = buf; -#endif + [[maybe_unused]] const char *orig = buf; /* Probability of prefixes/suffixes * 0..11 prefix, 12..13 prefix+suffix, 14..17 suffix, 18..31 nothing */ diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 05ad1025e8..5181dfdca2 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1846,8 +1846,7 @@ static void ChangeTileOwner_TunnelBridge(TileIndex tile, Owner old_owner, Owner if (tt == TRANSPORT_RAIL) { /* Since all of our vehicles have been removed, it is safe to remove the rail * bridge / tunnel. */ - CommandCost ret = DoCommand(tile, 0, 0, DC_EXEC | DC_BANKRUPT, CMD_LANDSCAPE_CLEAR); - (void)ret; // assert only + [[maybe_unused]] CommandCost ret = DoCommand(tile, 0, 0, DC_EXEC | DC_BANKRUPT, CMD_LANDSCAPE_CLEAR); assert(ret.Succeeded()); } else { /* In any other case, we can safely reassign the ownership to OWNER_NONE. */ diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 3c3125606d..0f40e33dac 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -953,9 +953,7 @@ void CallVehicleTicks() PerformanceAccumulator::Reset(PFE_GL_AIRCRAFT); for (Vehicle *v : Vehicle::Iterate()) { -#ifdef WITH_ASSERT - size_t vehicle_index = v->index; -#endif + [[maybe_unused]] size_t vehicle_index = v->index; /* Vehicle could be deleted in this tick */ if (!v->Tick()) { diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index ea34c443cf..18dbef35f2 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -53,8 +53,7 @@ bool VehicleListIdentifier::UnpackIfValid(uint32 data) /* static */ VehicleListIdentifier VehicleListIdentifier::UnPack(uint32 data) { VehicleListIdentifier result; - bool ret = result.UnpackIfValid(data); - (void)ret; // assert only + [[maybe_unused]] bool ret = result.UnpackIfValid(data); assert(ret); return result; } diff --git a/src/widget.cpp b/src/widget.cpp index 638aa05fe7..abd413ca28 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -1272,9 +1272,7 @@ void NWidgetHorizontal::SetupSmallestSize(Window *w, bool init_array) this->smallest_y = std::max(this->smallest_y, child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom); } /* 1b. Make the container higher if needed to accommodate all children nicely. */ -#ifdef WITH_ASSERT - uint max_smallest = this->smallest_y + 3 * max_vert_fill; // Upper limit to computing smallest height. -#endif + [[maybe_unused]] uint max_smallest = this->smallest_y + 3 * max_vert_fill; // Upper limit to computing smallest height. uint cur_height = this->smallest_y; for (;;) { for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { @@ -1439,9 +1437,7 @@ void NWidgetVertical::SetupSmallestSize(Window *w, bool init_array) this->smallest_x = std::max(this->smallest_x, child_wid->smallest_x + child_wid->padding_left + child_wid->padding_right); } /* 1b. Make the container wider if needed to accommodate all children nicely. */ -#ifdef WITH_ASSERT - uint max_smallest = this->smallest_x + 3 * max_hor_fill; // Upper limit to computing smallest height. -#endif + [[maybe_unused]] uint max_smallest = this->smallest_x + 3 * max_hor_fill; // Upper limit to computing smallest height. uint cur_width = this->smallest_x; for (;;) { for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { From feb2ddbefa5f6f702b996b00dfd92db53a52d174 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 3 Jun 2021 21:18:29 +0200 Subject: [PATCH 2/9] Codechange: rename SettingGuiFlag to SettingFlag (#9332) It is a lovely organicly grown enum, where it started off with GUI-only flags, and after that a few flags got added that can be considered GUI-only (the GUI disables/enables based on them), to only have flags added that has nothing to do with the GUI. So be less confusing, and rename them to what they do. Additionally, I took this opportunity to rename 0ISDISABLED to reflect what it really does. --- src/settings.cpp | 32 +-- src/settings_gui.cpp | 24 +- src/settings_internal.h | 51 ++-- src/table/settings/company_settings.ini | 14 +- src/table/settings/currency_settings.ini | 2 +- src/table/settings/gameopt_settings.ini | 2 +- src/table/settings/misc_settings.ini | 2 +- src/table/settings/settings.ini | 308 +++++++++++------------ src/table/settings/win32_settings.ini | 2 +- src/table/settings/window_settings.ini | 2 +- 10 files changed, 219 insertions(+), 220 deletions(-) diff --git a/src/settings.cpp b/src/settings.cpp index 619d762d2d..aa1e915f88 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -386,9 +386,9 @@ void IntSettingDesc::MakeValueValidAndWrite(const void *object, int32 val) const * Make the value valid given the limitations of this setting. * * In the case of int settings this is ensuring the value is between the minimum and - * maximum value, with a special case for 0 if SGF_0ISDISABLED is set. + * maximum value, with a special case for 0 if SF_GUI_0_IS_SPECIAL is set. * This is generally done by clamping the value so it is within the allowed value range. - * However, for SGF_MULTISTRING the default is used when the value is not valid. + * However, for SF_GUI_DROPDOWN the default is used when the value is not valid. * @param val The value to make valid. */ void IntSettingDesc::MakeValueValid(int32 &val) const @@ -407,8 +407,8 @@ void IntSettingDesc::MakeValueValid(int32 &val) const case SLE_VAR_U16: case SLE_VAR_I32: { /* Override the minimum value. No value below this->min, except special value 0 */ - if (!(this->flags & SGF_0ISDISABLED) || val != 0) { - if (!(this->flags & SGF_MULTISTRING)) { + if (!(this->flags & SF_GUI_0_IS_SPECIAL) || val != 0) { + if (!(this->flags & SF_GUI_DROPDOWN)) { /* Clamp value-type setting to its valid range */ val = Clamp(val, this->min, this->max); } else if (val < this->min || val > (int32)this->max) { @@ -421,8 +421,8 @@ void IntSettingDesc::MakeValueValid(int32 &val) const case SLE_VAR_U32: { /* Override the minimum value. No value below this->min, except special value 0 */ uint32 uval = (uint32)val; - if (!(this->flags & SGF_0ISDISABLED) || uval != 0) { - if (!(this->flags & SGF_MULTISTRING)) { + if (!(this->flags & SF_GUI_0_IS_SPECIAL) || uval != 0) { + if (!(this->flags & SF_GUI_DROPDOWN)) { /* Clamp value-type setting to its valid range */ uval = ClampU(uval, this->min, this->max); } else if (uval < (uint)this->min || uval > this->max) { @@ -743,13 +743,13 @@ void IniSaveWindowSettings(IniFile *ini, const char *grpname, void *desc) */ bool SettingDesc::IsEditable(bool do_command) const { - if (!do_command && !(this->save.conv & SLF_NO_NETWORK_SYNC) && _networking && !_network_server && !(this->flags & SGF_PER_COMPANY)) return false; - if ((this->flags & SGF_NETWORK_ONLY) && !_networking && _game_mode != GM_MENU) return false; - if ((this->flags & SGF_NO_NETWORK) && _networking) return false; - if ((this->flags & SGF_NEWGAME_ONLY) && + if (!do_command && !(this->save.conv & SLF_NO_NETWORK_SYNC) && _networking && !_network_server && !(this->flags & SF_PER_COMPANY)) return false; + if ((this->flags & SF_NETWORK_ONLY) && !_networking && _game_mode != GM_MENU) return false; + if ((this->flags & SF_NO_NETWORK) && _networking) return false; + if ((this->flags & SF_NEWGAME_ONLY) && (_game_mode == GM_NORMAL || - (_game_mode == GM_EDITOR && !(this->flags & SGF_SCENEDIT_TOO)))) return false; - if ((this->flags & SGF_SCENEDIT_ONLY) && _game_mode != GM_EDITOR) return false; + (_game_mode == GM_EDITOR && !(this->flags & SF_SCENEDIT_TOO)))) return false; + if ((this->flags & SF_SCENEDIT_ONLY) && _game_mode != GM_EDITOR) return false; return true; } @@ -759,7 +759,7 @@ bool SettingDesc::IsEditable(bool do_command) const */ SettingType SettingDesc::GetType() const { - if (this->flags & SGF_PER_COMPANY) return ST_COMPANY; + if (this->flags & SF_PER_COMPANY) return ST_COMPANY; return (this->save.conv & SLF_NOT_IN_SAVE) ? ST_CLIENT : ST_GAME; } @@ -1689,7 +1689,7 @@ void IntSettingDesc::ChangeValue(const void *object, int32 newval) const this->Write(object, newval); if (this->post_callback != nullptr) this->post_callback(newval); - if (this->flags & SGF_NO_NETWORK) { + if (this->flags & SF_NO_NETWORK) { GamelogStartAction(GLAT_SETTING); GamelogSetting(this->name, oldval, newval); GamelogStopAction(); @@ -1833,7 +1833,7 @@ CommandCost CmdChangeCompanySetting(TileIndex tile, DoCommandFlag flags, uint32 bool SetSettingValue(const IntSettingDesc *sd, int32 value, bool force_newgame) { const IntSettingDesc *setting = sd->AsIntSetting(); - if ((setting->flags & SGF_PER_COMPANY) != 0) { + if ((setting->flags & SF_PER_COMPANY) != 0) { if (Company::IsValidID(_local_company) && _game_mode != GM_MENU) { return DoCommandP(0, 0, value, CMD_CHANGE_COMPANY_SETTING, nullptr, setting->name); } @@ -1992,7 +1992,7 @@ void IConsoleGetSetting(const char *name, bool force_newgame) sd->FormatValue(value, lastof(value), object); const IntSettingDesc *int_setting = sd->AsIntSetting(); IConsolePrintF(CC_WARNING, "Current value for '%s' is: '%s' (min: %s%d, max: %u)", - name, value, (sd->flags & SGF_0ISDISABLED) ? "(0) " : "", int_setting->min, int_setting->max); + name, value, (sd->flags & SF_GUI_0_IS_SPECIAL) ? "(0) " : "", int_setting->min, int_setting->max); } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index f038617d13..1bd58c13b9 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1147,7 +1147,7 @@ bool SettingEntry::UpdateFilterState(SettingFilter &filter, bool force_visible) static const void *ResolveObject(const GameSettings *settings_ptr, const IntSettingDesc *sd) { - if ((sd->flags & SGF_PER_COMPANY) != 0) { + if ((sd->flags & SF_PER_COMPANY) != 0) { if (Company::IsValidID(_local_company) && _game_mode != GM_MENU) { return &Company::Get(_local_company)->settings; } @@ -1166,13 +1166,13 @@ void SettingEntry::SetValueDParams(uint first_param, int32 value) const if (this->setting->IsBoolSetting()) { SetDParam(first_param++, value != 0 ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF); } else { - if ((this->setting->flags & SGF_MULTISTRING) != 0) { + if ((this->setting->flags & SF_GUI_DROPDOWN) != 0) { SetDParam(first_param++, this->setting->str_val - this->setting->min + value); - } else if ((this->setting->flags & SGF_DISPLAY_ABS) != 0) { + } else if ((this->setting->flags & SF_GUI_NEGATIVE_IS_SPECIAL) != 0) { SetDParam(first_param++, this->setting->str_val + ((value >= 0) ? 1 : 0)); value = abs(value); } else { - SetDParam(first_param++, this->setting->str_val + ((value == 0 && (this->setting->flags & SGF_0ISDISABLED) != 0) ? 1 : 0)); + SetDParam(first_param++, this->setting->str_val + ((value == 0 && (this->setting->flags & SF_GUI_0_IS_SPECIAL) != 0) ? 1 : 0)); } SetDParam(first_param++, value); } @@ -1205,13 +1205,13 @@ void SettingEntry::DrawSetting(GameSettings *settings_ptr, int left, int right, if (sd->IsBoolSetting()) { /* Draw checkbox for boolean-value either on/off */ DrawBoolButton(buttons_left, button_y, value != 0, editable); - } else if ((sd->flags & SGF_MULTISTRING) != 0) { + } else if ((sd->flags & SF_GUI_DROPDOWN) != 0) { /* Draw [v] button for settings of an enum-type */ DrawDropDownButton(buttons_left, button_y, COLOUR_YELLOW, state != 0, editable); } else { /* Draw [<][>] boxes for settings of an integer-type */ DrawArrowButtons(buttons_left, button_y, COLOUR_YELLOW, state, - editable && value != (sd->flags & SGF_0ISDISABLED ? 0 : sd->min), editable && (uint32)value != sd->max); + editable && value != (sd->flags & SF_GUI_0_IS_SPECIAL ? 0 : sd->min), editable && (uint32)value != sd->max); } this->SetValueDParams(1, value); DrawString(text_left, text_right, y + (SETTING_HEIGHT - FONT_HEIGHT_NORMAL) / 2, sd->str, highlight ? TC_WHITE : TC_LIGHT_BLUE); @@ -2182,7 +2182,7 @@ struct GameSettingsWindow : Window { int32 value = sd->Read(ResolveObject(settings_ptr, sd)); /* clicked on the icon on the left side. Either scroller, bool on/off or dropdown */ - if (x < SETTING_BUTTON_WIDTH && (sd->flags & SGF_MULTISTRING)) { + if (x < SETTING_BUTTON_WIDTH && (sd->flags & SF_GUI_DROPDOWN)) { this->SetDisplayedHelpText(pe); if (this->valuedropdown_entry == pe) { @@ -2250,7 +2250,7 @@ struct GameSettingsWindow : Window { if (value < sd->min) value = sd->min; // skip between "disabled" and minimum } else { value -= step; - if (value < sd->min) value = (sd->flags & SGF_0ISDISABLED) ? 0 : sd->min; + if (value < sd->min) value = (sd->flags & SF_GUI_0_IS_SPECIAL) ? 0 : sd->min; } /* Set up scroller timeout for numeric values */ @@ -2271,10 +2271,10 @@ struct GameSettingsWindow : Window { } } else { /* Only open editbox if clicked for the second time, and only for types where it is sensible for. */ - if (this->last_clicked == pe && !sd->IsBoolSetting() && !(sd->flags & SGF_MULTISTRING)) { + if (this->last_clicked == pe && !sd->IsBoolSetting() && !(sd->flags & SF_GUI_DROPDOWN)) { int64 value64 = value; /* Show the correct currency-translated value */ - if (sd->flags & SGF_CURRENCY) value64 *= _currency->rate; + if (sd->flags & SF_GUI_CURRENCY) value64 *= _currency->rate; this->valuewindow_entry = pe; SetDParam(0, value64); @@ -2307,7 +2307,7 @@ struct GameSettingsWindow : Window { long long llvalue = atoll(str); /* Save the correct currency-translated value */ - if (sd->flags & SGF_CURRENCY) llvalue /= _currency->rate; + if (sd->flags & SF_GUI_CURRENCY) llvalue /= _currency->rate; value = (int32)ClampToI32(llvalue); } else { @@ -2348,7 +2348,7 @@ struct GameSettingsWindow : Window { /* Deal with drop down boxes on the panel. */ assert(this->valuedropdown_entry != nullptr); const IntSettingDesc *sd = this->valuedropdown_entry->setting; - assert(sd->flags & SGF_MULTISTRING); + assert(sd->flags & SF_GUI_DROPDOWN); SetSettingValue(sd, index); this->SetDirty(); diff --git a/src/settings_internal.h b/src/settings_internal.h index 632d4081d9..351c66ea3c 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -12,21 +12,20 @@ #include "saveload/saveload.h" -enum SettingGuiFlag : uint16 { - /* 2 bytes allocated for a maximum of 16 flags. */ - SGF_NONE = 0, - SGF_0ISDISABLED = 1 << 0, ///< a value of zero means the feature is disabled - SGF_DISPLAY_ABS = 1 << 1, ///< display absolute value of the setting - SGF_MULTISTRING = 1 << 2, ///< the value represents a limited number of string-options (internally integer) - SGF_NETWORK_ONLY = 1 << 3, ///< this setting only applies to network games - SGF_CURRENCY = 1 << 4, ///< the number represents money, so when reading value multiply by exchange rate - SGF_NO_NETWORK = 1 << 5, ///< this setting does not apply to network games; it may not be changed during the game - SGF_NEWGAME_ONLY = 1 << 6, ///< this setting cannot be changed in a game - SGF_SCENEDIT_TOO = 1 << 7, ///< this setting can be changed in the scenario editor (only makes sense when SGF_NEWGAME_ONLY is set) - SGF_PER_COMPANY = 1 << 8, ///< this setting can be different for each company (saved in company struct) - SGF_SCENEDIT_ONLY = 1 << 9, ///< this setting can only be changed in the scenario editor +enum SettingFlag : uint16 { + SF_NONE = 0, + SF_GUI_0_IS_SPECIAL = 1 << 0, ///< A value of zero is possible and has a custom string (the one after "strval"). + SF_GUI_NEGATIVE_IS_SPECIAL = 1 << 1, ///< A negative value has another string (the one after "strval"). + SF_GUI_DROPDOWN = 1 << 2, ///< The value represents a limited number of string-options (internally integer) presented as dropdown. + SF_GUI_CURRENCY = 1 << 3, ///< The number represents money, so when reading value multiply by exchange rate. + SF_NETWORK_ONLY = 1 << 4, ///< This setting only applies to network games. + SF_NO_NETWORK = 1 << 5, ///< This setting does not apply to network games; it may not be changed during the game. + SF_NEWGAME_ONLY = 1 << 6, ///< This setting cannot be changed in a game. + SF_SCENEDIT_TOO = 1 << 7, ///< This setting can be changed in the scenario editor (only makes sense when SF_NEWGAME_ONLY is set). + SF_SCENEDIT_ONLY = 1 << 8, ///< This setting can only be changed in the scenario editor. + SF_PER_COMPANY = 1 << 9, ///< This setting can be different for each company (saved in company struct). }; -DECLARE_ENUM_AS_BIT_SET(SettingGuiFlag) +DECLARE_ENUM_AS_BIT_SET(SettingFlag) /** * A SettingCategory defines a grouping of the settings. @@ -67,14 +66,14 @@ struct IniItem; /** Properties of config file settings. */ struct SettingDesc { - SettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup) : + SettingDesc(SaveLoad save, const char *name, SettingFlag flags, bool startup) : name(name), flags(flags), startup(startup), save(save) {} virtual ~SettingDesc() {} - const char *name; ///< name of the setting. Used in configuration file and for console - SettingGuiFlag flags; ///< handles how a setting would show up in the GUI (text/currency, etc.) - bool startup; ///< setting has to be loaded directly at startup? - SaveLoad save; ///< Internal structure (going to savegame, parts to config) + const char *name; ///< Name of the setting. Used in configuration file and for console. + SettingFlag flags; ///< Handles how a setting would show up in the GUI (text/currency, etc.). + bool startup; ///< Setting has to be loaded directly at startup?. + SaveLoad save; ///< Internal structure (going to savegame, parts to config). bool IsEditable(bool do_command = false) const; SettingType GetType() const; @@ -138,7 +137,7 @@ struct IntSettingDesc : SettingDesc { */ typedef void PostChangeCallback(int32 value); - IntSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, int32 def, + IntSettingDesc(SaveLoad save, const char *name, SettingFlag flags, bool startup, int32 def, int32 min, uint32 max, int32 interval, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback) : SettingDesc(save, name, flags, startup), def(def), min(min), max(max), interval(interval), @@ -180,7 +179,7 @@ private: /** Boolean setting. */ struct BoolSettingDesc : IntSettingDesc { - BoolSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, bool def, + BoolSettingDesc(SaveLoad save, const char *name, SettingFlag flags, bool startup, bool def, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback) : IntSettingDesc(save, name, flags, startup, def, 0, 1, 0, str, str_help, str_val, cat, @@ -196,7 +195,7 @@ struct BoolSettingDesc : IntSettingDesc { struct OneOfManySettingDesc : IntSettingDesc { typedef size_t OnConvert(const char *value); ///< callback prototype for conversion error - OneOfManySettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, int32 def, + OneOfManySettingDesc(SaveLoad save, const char *name, SettingFlag flags, bool startup, int32 def, int32 max, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback, std::initializer_list many, OnConvert *many_cnvt) : @@ -220,7 +219,7 @@ struct OneOfManySettingDesc : IntSettingDesc { /** Many of many setting. */ struct ManyOfManySettingDesc : OneOfManySettingDesc { - ManyOfManySettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, + ManyOfManySettingDesc(SaveLoad save, const char *name, SettingFlag flags, bool startup, int32 def, StringID str, StringID str_help, StringID str_val, SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback, std::initializer_list many, OnConvert *many_cnvt) : @@ -249,7 +248,7 @@ struct StringSettingDesc : SettingDesc { */ typedef void PostChangeCallback(const std::string &value); - StringSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, const char *def, + StringSettingDesc(SaveLoad save, const char *name, SettingFlag flags, bool startup, const char *def, uint32 max_length, PreChangeCheck pre_check, PostChangeCallback post_callback) : SettingDesc(save, name, flags, startup), def(def == nullptr ? "" : def), max_length(max_length), pre_check(pre_check), post_callback(post_callback) {} @@ -275,7 +274,7 @@ private: /** List/array settings. */ struct ListSettingDesc : SettingDesc { - ListSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, const char *def) : + ListSettingDesc(SaveLoad save, const char *name, SettingFlag flags, bool startup, const char *def) : SettingDesc(save, name, flags, startup), def(def) {} virtual ~ListSettingDesc() {} @@ -289,7 +288,7 @@ struct ListSettingDesc : SettingDesc { /** Placeholder for settings that have been removed, but might still linger in the savegame. */ struct NullSettingDesc : SettingDesc { NullSettingDesc(SaveLoad save) : - SettingDesc(save, "", SGF_NONE, false) {} + SettingDesc(save, "", SF_NONE, false) {} virtual ~NullSettingDesc() {} void FormatValue(char *buf, const char *last, const void *object) const override { NOT_REACHED(); } diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index 5767100651..6b6a17c967 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -24,7 +24,7 @@ SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CompanySettings.$v [defaults] flags = 0 -guiflags = SGF_PER_COMPANY +guiflags = SF_PER_COMPANY interval = 0 str = STR_NULL strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT @@ -50,7 +50,7 @@ cat = SC_BASIC [SDT_VAR] var = engine_renew_months type = SLE_INT16 -guiflags = SGF_PER_COMPANY | SGF_DISPLAY_ABS +guiflags = SF_PER_COMPANY | SF_GUI_NEGATIVE_IS_SPECIAL def = 6 min = -12 max = 12 @@ -61,7 +61,7 @@ strval = STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE [SDT_VAR] var = engine_renew_money type = SLE_UINT -guiflags = SGF_PER_COMPANY | SGF_CURRENCY +guiflags = SF_PER_COMPANY | SF_GUI_CURRENCY def = 100000 min = 0 max = 2000000 @@ -83,7 +83,7 @@ post_cb = UpdateServiceInterval [SDT_VAR] var = vehicle.servint_trains type = SLE_UINT16 -guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED +guiflags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL def = 150 min = 5 max = 800 @@ -96,7 +96,7 @@ post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); } [SDT_VAR] var = vehicle.servint_roadveh type = SLE_UINT16 -guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED +guiflags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL def = 150 min = 5 max = 800 @@ -109,7 +109,7 @@ post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); } [SDT_VAR] var = vehicle.servint_ships type = SLE_UINT16 -guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED +guiflags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL def = 360 min = 5 max = 800 @@ -122,7 +122,7 @@ post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); } [SDT_VAR] var = vehicle.servint_aircraft type = SLE_UINT16 -guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED +guiflags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL def = 100 min = 5 max = 800 diff --git a/src/table/settings/currency_settings.ini b/src/table/settings/currency_settings.ini index a10583150e..8e359d5c02 100644 --- a/src/table/settings/currency_settings.ini +++ b/src/table/settings/currency_settings.ini @@ -19,7 +19,7 @@ SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CurrencySpec.$var [defaults] flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NONE +guiflags = SF_NONE interval = 0 str = STR_NULL strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT diff --git a/src/table/settings/gameopt_settings.ini b/src/table/settings/gameopt_settings.ini index f24adb17a6..195bae365f 100644 --- a/src/table/settings/gameopt_settings.ini +++ b/src/table/settings/gameopt_settings.ini @@ -63,7 +63,7 @@ SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var [defaults] flags = 0 -guiflags = SGF_NONE +guiflags = SF_NONE interval = 0 str = STR_NULL strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index bafdf2369b..45da1db52b 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -37,7 +37,7 @@ SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds st [defaults] flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NONE +guiflags = SF_NONE interval = 0 str = STR_NULL strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 9281ed6624..be4d7ea941 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -77,7 +77,7 @@ SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var [defaults] flags = 0 -guiflags = SGF_NONE +guiflags = SF_NONE interval = 0 str = STR_NULL strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT @@ -119,7 +119,7 @@ max = 3 var = difficulty.number_towns type = SLE_UINT8 from = SLV_97 -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = 2 min = 0 max = 4 @@ -131,7 +131,7 @@ cat = SC_BASIC var = difficulty.industry_density type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = ID_END - 1 min = 0 max = ID_END - 1 @@ -145,7 +145,7 @@ cat = SC_BASIC var = difficulty.max_loan type = SLE_UINT32 from = SLV_97 -guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_CURRENCY +guiflags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_CURRENCY def = 300000 min = 0 max = 2000000000 @@ -159,7 +159,7 @@ cat = SC_BASIC var = difficulty.initial_interest type = SLE_UINT8 from = SLV_97 -guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO +guiflags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO def = 2 min = 2 max = 4 @@ -172,7 +172,7 @@ strval = STR_CONFIG_SETTING_PERCENTAGE var = difficulty.vehicle_costs type = SLE_UINT8 from = SLV_97 -guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING +guiflags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -186,7 +186,7 @@ cat = SC_BASIC var = difficulty.competitor_speed type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 4 @@ -209,7 +209,7 @@ max = 2 var = difficulty.vehicle_breakdowns type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 2 @@ -223,7 +223,7 @@ cat = SC_BASIC var = difficulty.subsidy_multiplier type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 3 @@ -236,7 +236,7 @@ strval = STR_SUBSIDY_X1_5 var = difficulty.construction_cost type = SLE_UINT8 from = SLV_97 -guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING +guiflags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -250,7 +250,7 @@ cat = SC_BASIC var = difficulty.terrain_type type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY +guiflags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY def = 1 min = 0 max = 5 @@ -264,7 +264,7 @@ cat = SC_BASIC var = difficulty.quantity_sea_lakes type = SLE_UINT8 from = SLV_97 -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = 0 min = 0 max = 4 @@ -298,7 +298,7 @@ cat = SC_BASIC var = difficulty.town_council_tolerance type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -326,7 +326,7 @@ cat = SC_BASIC var = game_creation.town_name type = SLE_UINT8 from = SLV_97 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = 0 max = 255 full = _town_names @@ -336,7 +336,7 @@ cat = SC_BASIC var = game_creation.landscape type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY +guiflags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY def = 0 max = 3 full = _climates @@ -356,7 +356,7 @@ to = SLV_164 var = vehicle.road_side type = SLE_UINT8 from = SLV_97 -guiflags = SGF_MULTISTRING | SGF_NO_NETWORK +guiflags = SF_GUI_DROPDOWN | SF_NO_NETWORK def = 1 max = 1 full = _roadsides @@ -372,7 +372,7 @@ cat = SC_BASIC var = construction.map_height_limit type = SLE_UINT8 from = SLV_194 -guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_0ISDISABLED +guiflags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL def = 0 min = MIN_MAP_HEIGHT_LIMIT max = MAX_MAP_HEIGHT_LIMIT @@ -388,7 +388,7 @@ cat = SC_ADVANCED var = game_creation.heightmap_height type = SLE_UINT8 from = SLV_MAPGEN_SETTINGS_REVAMP -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM min = MIN_HEIGHTMAP_HEIGHT max = MAX_MAP_HEIGHT_LIMIT @@ -396,7 +396,7 @@ interval = 1 [SDT_BOOL] var = construction.build_on_slopes -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = true cat = SC_EXPERT @@ -404,7 +404,7 @@ cat = SC_EXPERT var = construction.command_pause_level type = SLE_UINT8 from = SLV_154 -guiflags = SGF_MULTISTRING | SGF_NO_NETWORK +guiflags = SF_GUI_DROPDOWN | SF_NO_NETWORK def = 1 min = 0 max = 3 @@ -491,7 +491,7 @@ strhelp = STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT var = construction.max_bridge_length type = SLE_UINT16 from = SLV_159 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = 64 min = 1 max = MAX_MAP_SIZE @@ -504,7 +504,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH var = construction.max_bridge_height type = SLE_UINT8 from = SLV_194 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = 12 min = 1 max = MAX_TILE_HEIGHT @@ -518,7 +518,7 @@ cat = SC_EXPERT var = construction.max_tunnel_length type = SLE_UINT16 from = SLV_159 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = 64 min = 1 max = MAX_MAP_SIZE @@ -535,7 +535,7 @@ to = SLV_159 [SDT_VAR] var = construction.train_signal_side type = SLE_UINT8 -guiflags = SGF_MULTISTRING | SGF_NO_NETWORK +guiflags = SF_GUI_DROPDOWN | SF_NO_NETWORK def = 1 min = 0 max = 2 @@ -547,7 +547,7 @@ cat = SC_BASIC [SDT_BOOL] var = station.never_expire_airports -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = false str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT @@ -556,7 +556,7 @@ strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT var = economy.town_layout type = SLE_UINT8 from = SLV_59 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = TL_ORIGINAL min = TL_BEGIN max = NUM_TLS - 1 @@ -569,7 +569,7 @@ post_cb = TownFoundingChanged [SDT_BOOL] var = economy.allow_town_roads from = SLV_113 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = true str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT @@ -578,7 +578,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT var = economy.found_town type = SLE_UINT8 from = SLV_128 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = TF_FORBIDDEN min = TF_BEGIN max = TF_END - 1 @@ -592,7 +592,7 @@ cat = SC_BASIC [SDT_BOOL] var = economy.allow_town_level_crossings from = SLV_143 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = true str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT @@ -601,7 +601,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT var = economy.town_cargogen_mode type = SLE_UINT8 from = SLV_TOWN_CARGOGEN -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = TCGM_BITCOUNT min = TCGM_BEGIN max = TCGM_END - 1 @@ -644,7 +644,7 @@ extra = offsetof(LinkGraphSettings, recalc_time) var = linkgraph.distribution_pax type = SLE_UINT8 from = SLV_183 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = DT_MANUAL min = DT_MIN max = DT_MAX @@ -659,7 +659,7 @@ extra = offsetof(LinkGraphSettings, distribution_pax) var = linkgraph.distribution_mail type = SLE_UINT8 from = SLV_183 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = DT_MANUAL min = DT_MIN max = DT_MAX @@ -674,7 +674,7 @@ extra = offsetof(LinkGraphSettings, distribution_mail) var = linkgraph.distribution_armoured type = SLE_UINT8 from = SLV_183 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = DT_MANUAL min = DT_MIN max = DT_MAX @@ -689,7 +689,7 @@ extra = offsetof(LinkGraphSettings, distribution_armoured) var = linkgraph.distribution_default type = SLE_UINT8 from = SLV_183 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = DT_MANUAL min = DT_BEGIN max = DT_MAX_NONSYMMETRIC @@ -761,7 +761,7 @@ extra = offsetof(LinkGraphSettings, short_path_saturation) [SDT_VAR] var = vehicle.train_acceleration_model type = SLE_UINT8 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 1 @@ -775,7 +775,7 @@ post_cb = TrainAccelerationModelChanged var = vehicle.roadveh_acceleration_model type = SLE_UINT8 from = SLV_139 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 1 @@ -843,7 +843,7 @@ to = SLV_159 var = vehicle.smoke_amount type = SLE_UINT8 from = SLV_145 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 2 @@ -895,7 +895,7 @@ cat = SC_EXPERT var = pf.pathfinder_for_trains type = SLE_UINT8 from = SLV_87 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 1 max = 2 @@ -909,7 +909,7 @@ cat = SC_EXPERT var = pf.pathfinder_for_roadvehs type = SLE_UINT8 from = SLV_87 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 1 max = 2 @@ -923,7 +923,7 @@ cat = SC_EXPERT var = pf.pathfinder_for_ships type = SLE_UINT8 from = SLV_87 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 1 max = 2 @@ -936,7 +936,7 @@ cat = SC_EXPERT [SDT_BOOL] var = vehicle.never_expire_vehicles -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = false str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT @@ -991,7 +991,7 @@ cat = SC_BASIC [SDTG_BOOL] name = nullptr -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK var = _old_vds.servint_ispercent def = false to = SLV_120 @@ -999,7 +999,7 @@ to = SLV_120 [SDTG_VAR] name = nullptr type = SLE_UINT16 -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL var = _old_vds.servint_trains def = 150 min = 5 @@ -1009,7 +1009,7 @@ to = SLV_120 [SDTG_VAR] name = nullptr type = SLE_UINT16 -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL var = _old_vds.servint_roadveh def = 150 min = 5 @@ -1019,7 +1019,7 @@ to = SLV_120 [SDTG_VAR] name = nullptr type = SLE_UINT16 -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL var = _old_vds.servint_ships def = 360 min = 5 @@ -1029,7 +1029,7 @@ to = SLV_120 [SDTG_VAR] name = nullptr type = SLE_UINT16 -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL var = _old_vds.servint_aircraft def = 150 min = 5 @@ -1044,7 +1044,7 @@ strhelp = STR_CONFIG_SETTING_NOSERVICE_HELPTEXT [SDT_BOOL] var = vehicle.wagon_speed_limits -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = true str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT @@ -1053,7 +1053,7 @@ post_cb = UpdateConsists [SDT_BOOL] var = vehicle.disable_elrails from = SLV_38 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = false str = STR_CONFIG_SETTING_DISABLE_ELRAILS strhelp = STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT @@ -1064,7 +1064,7 @@ cat = SC_EXPERT var = vehicle.freight_trains type = SLE_UINT8 from = SLV_39 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = 1 min = 1 max = 255 @@ -1084,7 +1084,7 @@ to = SLV_159 var = vehicle.plane_speed type = SLE_UINT8 from = SLV_90 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = 4 min = 1 max = 4 @@ -1095,7 +1095,7 @@ strval = STR_CONFIG_SETTING_PLANE_SPEED_VALUE [SDT_BOOL] var = vehicle.dynamic_engines from = SLV_95 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = true pre_cb = CheckDynamicEngines cat = SC_EXPERT @@ -1104,7 +1104,7 @@ cat = SC_EXPERT var = vehicle.plane_crashes type = SLE_UINT8 from = SLV_138 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 2 @@ -1127,7 +1127,7 @@ def = true [SDT_BOOL] var = order.improved_load -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = true cat = SC_EXPERT @@ -1185,7 +1185,7 @@ post_cb = StationCatchmentChanged [SDT_BOOL] var = order.gradual_loading from = SLV_40 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = true cat = SC_EXPERT @@ -1214,7 +1214,7 @@ cat = SC_EXPERT [SDT_BOOL] var = economy.station_noise_level from = SLV_96 -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = false str = STR_CONFIG_SETTING_NOISE_LEVEL strhelp = STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT @@ -1231,7 +1231,7 @@ post_cb = [](auto) { CloseWindowById(WC_SELECT_STATION, 0); } ## [SDT_BOOL] var = economy.inflation -guiflags = SGF_NO_NETWORK +guiflags = SF_NO_NETWORK def = false str = STR_CONFIG_SETTING_INFLATION strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT @@ -1240,7 +1240,7 @@ cat = SC_BASIC [SDT_VAR] var = construction.raw_industry_construction type = SLE_UINT8 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -1318,7 +1318,7 @@ cat = SC_BASIC [SDT_VAR] var = game_creation.snow_line_height type = SLE_UINT8 -guiflags = SGF_SCENEDIT_ONLY +guiflags = SF_SCENEDIT_ONLY def = DEF_SNOWLINE_HEIGHT min = MIN_SNOWLINE_HEIGHT max = MAX_SNOWLINE_HEIGHT @@ -1332,7 +1332,7 @@ cat = SC_BASIC var = game_creation.snow_coverage type = SLE_UINT8 from = SLV_MAPGEN_SETTINGS_REVAMP -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = DEF_SNOW_COVERAGE min = 0 max = 100 @@ -1346,7 +1346,7 @@ cat = SC_BASIC var = game_creation.desert_coverage type = SLE_UINT8 from = SLV_MAPGEN_SETTINGS_REVAMP -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = DEF_DESERT_COVERAGE min = 0 max = 100 @@ -1379,7 +1379,7 @@ to = SLV_105 var = game_creation.ending_year type = SLE_INT32 from = SLV_ENDING_YEAR -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL def = DEF_END_YEAR min = MIN_YEAR max = MAX_YEAR - 1 @@ -1392,7 +1392,7 @@ cat = SC_ADVANCED [SDT_VAR] var = economy.type type = SLE_UINT8 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = ET_SMOOTH min = ET_BEGIN max = ET_END - 1 @@ -1438,7 +1438,7 @@ cat = SC_EXPERT var = economy.town_growth_rate type = SLE_UINT8 from = SLV_54 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 4 @@ -1450,7 +1450,7 @@ strval = STR_CONFIG_SETTING_TOWN_GROWTH_NONE var = economy.larger_towns type = SLE_UINT8 from = SLV_54 -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL def = 4 min = 0 max = 255 @@ -1486,7 +1486,7 @@ to = SLV_107 var = script.settings_profile type = SLE_UINT8 from = SLV_178 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = SP_EASY min = SP_EASY max = SP_HARD @@ -1531,7 +1531,7 @@ strhelp = STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT var = script.script_max_opcode_till_suspend type = SLE_UINT32 from = SLV_107 -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = 10000 min = 500 max = 250000 @@ -1545,7 +1545,7 @@ cat = SC_EXPERT var = script.script_max_memory_megabytes type = SLE_UINT32 from = SLV_SCRIPT_MEMLIMIT -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = 1024 min = 8 max = 8192 @@ -2119,7 +2119,7 @@ cat = SC_EXPERT var = game_creation.land_generator type = SLE_UINT8 from = SLV_30 -guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY +guiflags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY def = 1 min = 0 max = 1 @@ -2142,7 +2142,7 @@ strhelp = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT var = game_creation.tgen_smoothness type = SLE_UINT8 from = SLV_30 -guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY +guiflags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY def = 1 min = TGEN_SMOOTHNESS_BEGIN max = TGEN_SMOOTHNESS_END - 1 @@ -2155,7 +2155,7 @@ cat = SC_BASIC var = game_creation.variety type = SLE_UINT8 from = SLV_197 -guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY +guiflags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY def = 0 min = 0 max = 5 @@ -2176,7 +2176,7 @@ cat = SC_EXPERT var = game_creation.tree_placer type = SLE_UINT8 from = SLV_30 -guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO +guiflags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_SCENEDIT_TOO def = 2 min = 0 max = 2 @@ -2189,7 +2189,7 @@ cat = SC_BASIC var = game_creation.heightmap_rotation type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 1 @@ -2256,7 +2256,7 @@ cat = SC_BASIC var = construction.extra_tree_placement type = SLE_UINT8 from = SLV_132 -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 3 @@ -2269,7 +2269,7 @@ cat = SC_BASIC var = game_creation.custom_terrain_type type = SLE_UINT8 from = SLV_MAPGEN_SETTINGS_REVAMP -guiflags = SGF_NEWGAME_ONLY +guiflags = SF_NEWGAME_ONLY def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM min = MIN_CUSTOM_TERRAIN_TYPE max = MAX_MAP_HEIGHT_LIMIT @@ -2306,7 +2306,7 @@ cat = SC_EXPERT var = game_creation.amount_of_rivers type = SLE_UINT8 from = SLV_163 -guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY +guiflags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY def = 2 min = 0 max = 3 @@ -2345,7 +2345,7 @@ var = locale.units_velocity type = SLE_UINT8 from = SLV_184 flags = SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 3 full = _locale_units @@ -2360,7 +2360,7 @@ var = locale.units_power type = SLE_UINT8 from = SLV_184 flags = SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _locale_units @@ -2375,7 +2375,7 @@ var = locale.units_weight type = SLE_UINT8 from = SLV_184 flags = SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _locale_units @@ -2390,7 +2390,7 @@ var = locale.units_volume type = SLE_UINT8 from = SLV_184 flags = SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _locale_units @@ -2405,7 +2405,7 @@ var = locale.units_force type = SLE_UINT8 from = SLV_184 flags = SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _locale_units @@ -2420,7 +2420,7 @@ var = locale.units_height type = SLE_UINT8 from = SLV_184 flags = SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _locale_units @@ -2465,7 +2465,7 @@ cat = SC_BASIC var = gui.autosave type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 4 full = _autosave_interval @@ -2484,7 +2484,7 @@ cat = SC_EXPERT var = gui.date_format_in_default_names type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _savegame_date @@ -2504,7 +2504,7 @@ cat = SC_BASIC var = gui.auto_scrolling type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 3 @@ -2517,7 +2517,7 @@ cat = SC_BASIC var = gui.scroll_mode type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 3 @@ -2547,7 +2547,7 @@ ifdef = __APPLE__ var = gui.right_mouse_btn_emulation type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -2579,7 +2579,7 @@ strval = STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE var = gui.hover_delay_ms type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL def = 250 min = 50 max = 6000 @@ -2595,7 +2595,7 @@ flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC str = STR_CONFIG_SETTING_OSK_ACTIVATION strhelp = STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT strval = STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN full = _osk_activation def = 1 min = 0 @@ -2606,7 +2606,7 @@ cat = SC_BASIC var = gui.toolbar_pos type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 2 @@ -2620,7 +2620,7 @@ cat = SC_BASIC var = gui.statusbar_pos type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 2 @@ -2634,7 +2634,7 @@ cat = SC_BASIC var = gui.window_snap_radius type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL def = 10 min = 1 max = 32 @@ -2647,7 +2647,7 @@ cat = SC_EXPERT var = gui.window_soft_limit type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED +guiflags = SF_GUI_0_IS_SPECIAL def = 20 min = 5 max = 255 @@ -2661,7 +2661,7 @@ cat = SC_EXPERT var = gui.zoom_min type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = ZOOM_LVL_MIN min = ZOOM_LVL_MIN max = ZOOM_LVL_OUT_4X @@ -2675,7 +2675,7 @@ startup = true var = gui.zoom_max type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = ZOOM_LVL_MAX min = ZOOM_LVL_OUT_8X max = ZOOM_LVL_MAX @@ -2689,7 +2689,7 @@ startup = true var = gui.sprite_zoom_min type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = ZOOM_LVL_MIN min = ZOOM_LVL_MIN max = ZOOM_LVL_OUT_4X @@ -2717,7 +2717,7 @@ strhelp = STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT var = gui.smallmap_land_colour type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -2730,7 +2730,7 @@ post_cb = RedrawSmallmap var = gui.liveries type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 2 @@ -2743,7 +2743,7 @@ post_cb = InvalidateCompanyLiveryWindow var = gui.starting_colour type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = COLOUR_END min = 0 max = COLOUR_END @@ -2771,7 +2771,7 @@ cat = SC_BASIC var = gui.scrollwheel_scrolling type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -2805,7 +2805,7 @@ cat = SC_BASIC var = gui.advanced_vehicle_list type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 2 @@ -2842,7 +2842,7 @@ cat = SC_BASIC var = gui.loading_indicators type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 2 @@ -2856,7 +2856,7 @@ cat = SC_BASIC var = gui.default_rail_type type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 min = 0 max = 2 @@ -2933,7 +2933,7 @@ cat = SC_BASIC var = gui.order_review_system type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 2 @@ -2961,7 +2961,7 @@ cat = SC_BASIC var = gui.stop_location type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 2 @@ -3022,7 +3022,7 @@ cat = SC_BASIC var = gui.default_signal_type type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 2 @@ -3036,7 +3036,7 @@ cat = SC_BASIC var = gui.cycle_signal_types type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 min = 0 max = 2 @@ -3207,7 +3207,7 @@ cat = SC_EXPERT var = gui.newgrf_default_palette type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 min = 0 max = 1 @@ -3244,7 +3244,7 @@ startup = true var = gui.fast_forward_speed_limit type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED | SGF_NO_NETWORK +guiflags = SF_GUI_0_IS_SPECIAL | SF_NO_NETWORK def = 2500 min = 0 max = 50000 @@ -3370,7 +3370,7 @@ cat = SC_BASIC var = news_display.arrival_player type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3382,7 +3382,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.arrival_other type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _news_display @@ -3394,7 +3394,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.accident type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3406,7 +3406,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.company_info type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3418,7 +3418,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.open type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _news_display @@ -3430,7 +3430,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.close type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _news_display @@ -3442,7 +3442,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.economy type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3454,7 +3454,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.production_player type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _news_display @@ -3466,7 +3466,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.production_other type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 max = 2 full = _news_display @@ -3478,7 +3478,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.production_nobody type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 0 max = 2 full = _news_display @@ -3490,7 +3490,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.advice type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3502,7 +3502,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.new_vehicles type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3514,7 +3514,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.acceptance type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3526,7 +3526,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.subsidies type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 1 max = 2 full = _news_display @@ -3538,7 +3538,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF var = news_display.general type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_MULTISTRING +guiflags = SF_GUI_DROPDOWN def = 2 max = 2 full = _news_display @@ -3577,7 +3577,7 @@ cat = SC_EXPERT var = network.sync_freq type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NOT_IN_CONFIG | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 100 min = 0 max = 100 @@ -3587,7 +3587,7 @@ cat = SC_EXPERT var = network.frame_freq type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NOT_IN_CONFIG | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 0 min = 0 max = 100 @@ -3597,7 +3597,7 @@ cat = SC_EXPERT var = network.commands_per_frame type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 2 min = 1 max = 65535 @@ -3607,7 +3607,7 @@ cat = SC_EXPERT var = network.max_commands_in_queue type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 16 min = 1 max = 65535 @@ -3617,7 +3617,7 @@ cat = SC_EXPERT var = network.bytes_per_frame type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 8 min = 1 max = 65535 @@ -3627,7 +3627,7 @@ cat = SC_EXPERT var = network.bytes_per_frame_burst type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 256 min = 1 max = 65535 @@ -3637,7 +3637,7 @@ cat = SC_EXPERT var = network.max_init_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 100 min = 0 max = 32000 @@ -3647,7 +3647,7 @@ cat = SC_EXPERT var = network.max_join_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 500 min = 0 max = 32000 @@ -3656,7 +3656,7 @@ max = 32000 var = network.max_download_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 1000 min = 0 max = 32000 @@ -3665,7 +3665,7 @@ max = 32000 var = network.max_password_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 2000 min = 0 max = 32000 @@ -3674,7 +3674,7 @@ max = 32000 var = network.max_lag_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 500 min = 0 max = 32000 @@ -3682,14 +3682,14 @@ max = 32000 [SDTC_BOOL] var = network.pause_on_join flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = true [SDTC_VAR] var = network.server_port type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = NETWORK_DEFAULT_PORT min = 0 max = 65535 @@ -3699,7 +3699,7 @@ cat = SC_EXPERT var = network.server_admin_port type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = NETWORK_ADMIN_PORT min = 0 max = 65535 @@ -3708,14 +3708,14 @@ cat = SC_EXPERT [SDTC_BOOL] var = network.server_admin_chat flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = true cat = SC_EXPERT [SDTC_BOOL] var = network.server_advertise flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = false [SDTC_SSTR] @@ -3733,7 +3733,7 @@ var = network.server_password type = SLE_STR length = NETWORK_PASSWORD_LENGTH flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = nullptr pre_cb = ReplaceAsteriskWithEmptyPassword post_cb = [](auto) { NetworkServerUpdateGameInfo(); } @@ -3744,7 +3744,7 @@ var = network.rcon_password type = SLE_STR length = NETWORK_PASSWORD_LENGTH flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = nullptr pre_cb = ReplaceAsteriskWithEmptyPassword cat = SC_BASIC @@ -3754,7 +3754,7 @@ var = network.admin_password type = SLE_STR length = NETWORK_PASSWORD_LENGTH flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = nullptr cat = SC_BASIC @@ -3770,7 +3770,7 @@ var = network.server_name type = SLE_STR length = NETWORK_NAME_LENGTH flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = nullptr pre_cb = NetworkValidateServerName post_cb = [](auto) { UpdateClientConfigValues(); } @@ -3788,20 +3788,20 @@ var = network.network_id type = SLE_STR length = NETWORK_SERVER_ID_LENGTH flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = nullptr [SDTC_BOOL] var = network.autoclean_companies flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = false [SDTC_VAR] var = network.autoclean_unprotected type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY +guiflags = SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY def = 12 min = 0 max = 240 @@ -3810,7 +3810,7 @@ max = 240 var = network.autoclean_protected type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY +guiflags = SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY def = 36 min = 0 max = 240 @@ -3819,7 +3819,7 @@ max = 240 var = network.autoclean_novehicles type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY +guiflags = SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY def = 0 min = 0 max = 240 @@ -3828,7 +3828,7 @@ max = 240 var = network.max_companies type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 15 min = 1 max = MAX_COMPANIES @@ -3839,7 +3839,7 @@ cat = SC_BASIC var = network.max_clients type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 25 min = 2 max = MAX_CLIENTS @@ -3850,7 +3850,7 @@ cat = SC_BASIC var = network.max_spectators type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 15 min = 0 max = MAX_CLIENTS @@ -3861,7 +3861,7 @@ cat = SC_BASIC var = network.restart_game_year type = SLE_INT32 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY +guiflags = SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY def = 0 min = MIN_YEAR max = MAX_YEAR @@ -3871,7 +3871,7 @@ interval = 1 var = network.min_active_clients type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = 0 min = 0 max = MAX_CLIENTS @@ -3879,7 +3879,7 @@ max = MAX_CLIENTS [SDTC_BOOL] var = network.reload_cfg flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY +guiflags = SF_NETWORK_ONLY def = false cat = SC_EXPERT diff --git a/src/table/settings/win32_settings.ini b/src/table/settings/win32_settings.ini index 7a3fb9a5c6..32a5cf5c93 100644 --- a/src/table/settings/win32_settings.ini +++ b/src/table/settings/win32_settings.ini @@ -25,7 +25,7 @@ SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds stor [defaults] flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NONE +guiflags = SF_NONE interval = 0 str = STR_NULL strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT diff --git a/src/table/settings/window_settings.ini b/src/table/settings/window_settings.ini index 17596a4d58..f9301ef2ce 100644 --- a/src/table/settings/window_settings.ini +++ b/src/table/settings/window_settings.ini @@ -21,7 +21,7 @@ SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for WindowDesc.$var ex [defaults] flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NONE +guiflags = SF_NONE interval = 0 str = STR_NULL strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT From 5e44da30101769a177c9cab654336a31c93df09b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 3 Jun 2021 22:07:44 +0200 Subject: [PATCH 3/9] Fix ef991b17: server was trying to free() a packet created with "new CommandPacket()" (#9334) --- src/network/network.cpp | 2 +- src/network/network_server.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index d89789cf94..862169c1d8 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1072,7 +1072,7 @@ void NetworkGameLoop() if (cp != nullptr) { NetworkSendCommand(cp->tile, cp->p1, cp->p2, cp->cmd & ~CMD_FLAGS_MASK, nullptr, cp->text, cp->company); DEBUG(desync, 0, "Injecting: %08x; %02x; %02x; %06x; %08x; %08x; %08x; \"%s\" (%s)", _date, _date_fract, (int)_current_company, cp->tile, cp->p1, cp->p2, cp->cmd, cp->text.c_str(), GetCommandName(cp->cmd)); - free(cp); + delete cp; cp = nullptr; } if (check_sync_state) { diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 49b1c8faf1..5b1da8fa2a 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1758,7 +1758,7 @@ static void NetworkHandleCommandQueue(NetworkClientSocket *cs) CommandPacket *cp; while ((cp = cs->outgoing_queue.Pop()) != nullptr) { cs->SendCommand(cp); - free(cp); + delete cp; } } From d816ff0361a559f0382e40fc7291168418e3683f Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 3 Jun 2021 20:24:19 +0000 Subject: [PATCH 4/9] Update: Translations from eints korean: 1 change by telk5093 --- src/lang/korean.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 9e429e77bb..338fe7cfa9 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2204,7 +2204,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}서버 STR_NETWORK_ERROR_CLIENT_START :{WHITE}접속할 수 없습니다 STR_NETWORK_ERROR_TIMEOUT :{WHITE}접속자 #{NUM}의 입력 시간이 초과되었습니다 STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}프로토콜 오류가 발생되어 연결이 끊어졌습니다 -STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}접속자 이름을 설정하지 않았습니다. 이름은 멀티플레이 창의 상단에서 설정할 수 있습니다. +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}접속자 이름을 지정하지 않았습니다. 접속자이름은 멀티플레이 창 맨 위에서 설정할 수 있습니다. STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}서버 이름을 지정하지 않았습니다. 서버 이름은 멀티플레이 창 맨 위에서 설정할 수 있습니다. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}이 접속자의 게임 버전이 서버의 버전과 일치하지 않습니다 STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}잘못된 비밀번호입니다 From ea23a9cdb66d3e43447af8131f04f5b05a100319 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 4 Jun 2021 20:11:37 +0000 Subject: [PATCH 5/9] Update: Translations from eints korean: 1 change by telk5093 dutch: 1 change by Afoklala french: 1 change by MalaGaM --- src/lang/dutch.txt | 1 + src/lang/french.txt | 1 + src/lang/korean.txt | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index a156876303..aa8ad733de 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2204,6 +2204,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}Kan geen STR_NETWORK_ERROR_TIMEOUT :{WHITE}Verbinding nr. {NUM} kostte te veel tijd STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Er is een protocolfout gedetecteerd en de verbinding werd gesloten STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Je spelernaam is nog niet ingesteld. Je stelt de naam in bovenin het venster Meerdere spelers +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Je servernaam is niet ingesteld. Je kunt de naam instellen bovenin het venster Netwerkspel STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}De revisie van deze client komt niet overeen met de revisie van de server STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Ongeldig wachtwoord STR_NETWORK_ERROR_SERVER_FULL :{WHITE}De server is vol diff --git a/src/lang/french.txt b/src/lang/french.txt index 5b766de94e..bafaed87a8 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2205,6 +2205,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}Échec d STR_NETWORK_ERROR_TIMEOUT :{WHITE}La connexion n°{NBSP}{NUM} a dépassé le temps d'attente STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Une erreur de protocole a été détectée et la connexion a été fermée STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Vous n'avez pas de nom. Il doit être entré en haut de la fenêtre Multijoueur +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Le nom de serveur n'a pas été défini. Le nom peut être défini en haut de la fenêtre multijoueur STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Le numéro de version/révision de ce client ne correspond pas à celui du serveur STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Mot de passe incorrect STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Le serveur est complet diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 338fe7cfa9..552ec2612c 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2204,7 +2204,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}서버 STR_NETWORK_ERROR_CLIENT_START :{WHITE}접속할 수 없습니다 STR_NETWORK_ERROR_TIMEOUT :{WHITE}접속자 #{NUM}의 입력 시간이 초과되었습니다 STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}프로토콜 오류가 발생되어 연결이 끊어졌습니다 -STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}접속자 이름을 지정하지 않았습니다. 접속자이름은 멀티플레이 창 맨 위에서 설정할 수 있습니다. +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}접속자 이름을 지정하지 않았습니다. 접속자 이름은 멀티플레이 창 맨 위에서 설정할 수 있습니다. STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}서버 이름을 지정하지 않았습니다. 서버 이름은 멀티플레이 창 맨 위에서 설정할 수 있습니다. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}이 접속자의 게임 버전이 서버의 버전과 일치하지 않습니다 STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}잘못된 비밀번호입니다 From 3559e55b9145c5b6c146003b357a158c73efee4e Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 5 Jun 2021 19:36:47 +0000 Subject: [PATCH 6/9] Update: Translations from eints spanish (mexican): 1 change by absay latvian: 2 changes by osprinkis --- src/lang/latvian.txt | 3 ++- src/lang/spanish_MX.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index dbc16f5c16..1de03dded7 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2480,7 +2480,7 @@ STR_AIRPORT_METRO :Metropolitēns STR_AIRPORT_INTERNATIONAL :Starptautiskā lidosta STR_AIRPORT_COMMUTER :Ikdienas satiksme STR_AIRPORT_INTERCONTINENTAL :Starpkontinentālā -STR_AIRPORT_HELIPORT :Helikopteru osta +STR_AIRPORT_HELIPORT :Helikopteru lidosta STR_AIRPORT_HELIDEPOT :Helikopteru depo STR_AIRPORT_HELISTATION :Helikopteru stacija @@ -3722,6 +3722,7 @@ STR_REPLACE_MAGLEV_VEHICLES :Magleva transpo STR_REPLACE_ROAD_VEHICLES :Autotransporta līdzekļi STR_REPLACE_TRAM_VEHICLES :Tramvaji +STR_REPLACE_REMOVE_WAGON :{BLACK}Vagona noņemšana ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automātiskā aizvietošana saglabās esošo vilciena garumu noņemot vagonus (sākot no priekšgala), ja mainot lokomotīvi tas kļūtu garāks # Vehicle view diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 310fa82d5e..f314f9deae 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2205,6 +2205,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}No se pu STR_NETWORK_ERROR_TIMEOUT :{WHITE}Tiempo de espera agotado en conexión #{NUM} STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Se produjo un error de protocolo y la conexión fue cerrada STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Aún no tienes nombre de jugador, pero lo puedes poner en la parte superior de la ventana de Multijugador. +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}El servidor aún no tiene nombre, pero lo puedes poner en la parte superior de la ventana de Multijugador. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}La versión de este cliente no corresponde con la versión del servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contraseña incorrecta STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor está completo From c27afdf3f6b8e7e073b70d4935ca1c871855f3ca Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 2 May 2021 22:41:34 +0200 Subject: [PATCH 7/9] Codechange: Remove FOR_ALL_CHUNK_HANDLERS Co-Authored-By: Patric Stout --- src/saveload/ai_sl.cpp | 6 +- src/saveload/airport_sl.cpp | 6 +- src/saveload/animated_tile_sl.cpp | 6 +- src/saveload/autoreplace_sl.cpp | 6 +- src/saveload/cargomonitor_sl.cpp | 8 +- src/saveload/cargopacket_sl.cpp | 6 +- src/saveload/cheat_sl.cpp | 6 +- src/saveload/company_sl.cpp | 6 +- src/saveload/depot_sl.cpp | 6 +- src/saveload/economy_sl.cpp | 12 +- src/saveload/engine_sl.cpp | 10 +- src/saveload/game_sl.cpp | 6 +- src/saveload/gamelog_sl.cpp | 6 +- src/saveload/goal_sl.cpp | 6 +- src/saveload/group_sl.cpp | 6 +- src/saveload/industry_sl.cpp | 14 +- src/saveload/labelmaps_sl.cpp | 6 +- src/saveload/linkgraph_sl.cpp | 6 +- src/saveload/map_sl.cpp | 6 +- src/saveload/misc_sl.cpp | 8 +- src/saveload/newgrf_sl.cpp | 6 +- src/saveload/object_sl.cpp | 6 +- src/saveload/order_sl.cpp | 10 +- src/saveload/saveload.cpp | 220 +++++++++++++++--------------- src/saveload/saveload.h | 22 +-- src/saveload/signs_sl.cpp | 6 +- src/saveload/station_sl.cpp | 6 +- src/saveload/storage_sl.cpp | 6 +- src/saveload/story_sl.cpp | 8 +- src/saveload/strings_sl.cpp | 6 +- src/saveload/subsidy_sl.cpp | 6 +- src/saveload/town_sl.cpp | 6 +- src/saveload/vehicle_sl.cpp | 6 +- src/saveload/waypoint_sl.cpp | 6 +- src/settings.cpp | 8 +- 35 files changed, 272 insertions(+), 198 deletions(-) diff --git a/src/saveload/ai_sl.cpp b/src/saveload/ai_sl.cpp index fcb78f2edd..7eb2a5ce1c 100644 --- a/src/saveload/ai_sl.cpp +++ b/src/saveload/ai_sl.cpp @@ -120,6 +120,8 @@ static void Save_AIPL() } } -extern const ChunkHandler _ai_chunk_handlers[] = { - { 'AIPL', Save_AIPL, Load_AIPL, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler ai_chunk_handlers[] = { + { 'AIPL', Save_AIPL, Load_AIPL, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _ai_chunk_handlers(ai_chunk_handlers); diff --git a/src/saveload/airport_sl.cpp b/src/saveload/airport_sl.cpp index a7470d268f..114e5672ab 100644 --- a/src/saveload/airport_sl.cpp +++ b/src/saveload/airport_sl.cpp @@ -34,7 +34,9 @@ static void Load_ATID() Load_NewGRFMapping(_airporttile_mngr); } -extern const ChunkHandler _airport_chunk_handlers[] = { +static const ChunkHandler airport_chunk_handlers[] = { { 'ATID', Save_ATID, Load_ATID, nullptr, nullptr, CH_ARRAY }, - { 'APID', Save_APID, Load_APID, nullptr, nullptr, CH_ARRAY | CH_LAST }, + { 'APID', Save_APID, Load_APID, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _airport_chunk_handlers(airport_chunk_handlers); diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index 9f03e598d7..2b38421046 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -55,6 +55,8 @@ static void Load_ANIT() * "Definition" imported by the saveload code to be able to load and save * the animated tile table. */ -extern const ChunkHandler _animated_tile_chunk_handlers[] = { - { 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_RIFF | CH_LAST}, +static const ChunkHandler animated_tile_chunk_handlers[] = { + { 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_RIFF }, }; + +extern const ChunkHandlerTable _animated_tile_chunk_handlers(animated_tile_chunk_handlers); diff --git a/src/saveload/autoreplace_sl.cpp b/src/saveload/autoreplace_sl.cpp index ef343fc179..f54866c107 100644 --- a/src/saveload/autoreplace_sl.cpp +++ b/src/saveload/autoreplace_sl.cpp @@ -55,6 +55,8 @@ static void Ptrs_ERNW() } } -extern const ChunkHandler _autoreplace_chunk_handlers[] = { - { 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler autoreplace_chunk_handlers[] = { + { 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _autoreplace_chunk_handlers(autoreplace_chunk_handlers); diff --git a/src/saveload/cargomonitor_sl.cpp b/src/saveload/cargomonitor_sl.cpp index 3ca64d77ef..abb0d59b99 100644 --- a/src/saveload/cargomonitor_sl.cpp +++ b/src/saveload/cargomonitor_sl.cpp @@ -117,7 +117,9 @@ static void LoadPickup() } /** Chunk definition of the cargomonitoring maps. */ -extern const ChunkHandler _cargomonitor_chunk_handlers[] = { - { 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_ARRAY}, - { 'CMPU', SavePickup, LoadPickup, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler cargomonitor_chunk_handlers[] = { + { 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_ARRAY }, + { 'CMPU', SavePickup, LoadPickup, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _cargomonitor_chunk_handlers(cargomonitor_chunk_handlers); diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp index 1b9bb5cb94..96c96cabcb 100644 --- a/src/saveload/cargopacket_sl.cpp +++ b/src/saveload/cargopacket_sl.cpp @@ -126,6 +126,8 @@ static void Load_CAPA() } /** Chunk handlers related to cargo packets. */ -extern const ChunkHandler _cargopacket_chunk_handlers[] = { - { 'CAPA', Save_CAPA, Load_CAPA, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler cargopacket_chunk_handlers[] = { + { 'CAPA', Save_CAPA, Load_CAPA, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _cargopacket_chunk_handlers(cargopacket_chunk_handlers); diff --git a/src/saveload/cheat_sl.cpp b/src/saveload/cheat_sl.cpp index 9af1759221..970e5f3be1 100644 --- a/src/saveload/cheat_sl.cpp +++ b/src/saveload/cheat_sl.cpp @@ -48,6 +48,8 @@ static void Load_CHTS() } /** Chunk handlers related to cheats. */ -extern const ChunkHandler _cheat_chunk_handlers[] = { - { 'CHTS', Save_CHTS, Load_CHTS, nullptr, nullptr, CH_RIFF | CH_LAST}, +static const ChunkHandler cheat_chunk_handlers[] = { + { 'CHTS', Save_CHTS, Load_CHTS, nullptr, nullptr, CH_RIFF }, }; + +extern const ChunkHandlerTable _cheat_chunk_handlers(cheat_chunk_handlers); diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 21d02121b6..4c64376385 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -527,6 +527,8 @@ static void Ptrs_PLYR() } -extern const ChunkHandler _company_chunk_handlers[] = { - { 'PLYR', Save_PLYR, Load_PLYR, Ptrs_PLYR, Check_PLYR, CH_ARRAY | CH_LAST}, +static const ChunkHandler company_chunk_handlers[] = { + { 'PLYR', Save_PLYR, Load_PLYR, Ptrs_PLYR, Check_PLYR, CH_ARRAY }, }; + +extern const ChunkHandlerTable _company_chunk_handlers(company_chunk_handlers); diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp index fb8944dbae..da195416bd 100644 --- a/src/saveload/depot_sl.cpp +++ b/src/saveload/depot_sl.cpp @@ -56,6 +56,8 @@ static void Ptrs_DEPT() } } -extern const ChunkHandler _depot_chunk_handlers[] = { - { 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler depot_chunk_handlers[] = { + { 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _depot_chunk_handlers(depot_chunk_handlers); diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp index 2c785d554a..b51151c146 100644 --- a/src/saveload/economy_sl.cpp +++ b/src/saveload/economy_sl.cpp @@ -94,9 +94,11 @@ static void Ptrs_CAPY() } -extern const ChunkHandler _economy_chunk_handlers[] = { - { 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_ARRAY}, - { 'PRIC', nullptr, Load_PRIC, nullptr, nullptr, CH_RIFF }, - { 'CAPR', nullptr, Load_CAPR, nullptr, nullptr, CH_RIFF }, - { 'ECMY', Save_ECMY, Load_ECMY, nullptr, nullptr, CH_RIFF | CH_LAST}, +static const ChunkHandler economy_chunk_handlers[] = { + { 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_ARRAY }, + { 'PRIC', nullptr, Load_PRIC, nullptr, nullptr, CH_RIFF }, + { 'CAPR', nullptr, Load_CAPR, nullptr, nullptr, CH_RIFF }, + { 'ECMY', Save_ECMY, Load_ECMY, nullptr, nullptr, CH_RIFF }, }; + +extern const ChunkHandlerTable _economy_chunk_handlers(economy_chunk_handlers); diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index eea3a0bcf0..430ae29d19 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -193,8 +193,10 @@ static void Load_EIDS() } } -extern const ChunkHandler _engine_chunk_handlers[] = { - { 'EIDS', Save_EIDS, Load_EIDS, nullptr, nullptr, CH_ARRAY }, - { 'ENGN', Save_ENGN, Load_ENGN, nullptr, nullptr, CH_ARRAY }, - { 'ENGS', nullptr, Load_ENGS, nullptr, nullptr, CH_RIFF | CH_LAST }, +static const ChunkHandler engine_chunk_handlers[] = { + { 'EIDS', Save_EIDS, Load_EIDS, nullptr, nullptr, CH_ARRAY }, + { 'ENGN', Save_ENGN, Load_ENGN, nullptr, nullptr, CH_ARRAY }, + { 'ENGS', nullptr, Load_ENGS, nullptr, nullptr, CH_RIFF }, }; + +extern const ChunkHandlerTable _engine_chunk_handlers(engine_chunk_handlers); diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index 055a5fbfc4..4034df3c96 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -173,7 +173,9 @@ static void Save_GSTR() } } -extern const ChunkHandler _game_chunk_handlers[] = { +static const ChunkHandler game_chunk_handlers[] = { { 'GSTR', Save_GSTR, Load_GSTR, nullptr, nullptr, CH_ARRAY }, - { 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_ARRAY | CH_LAST}, + { 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _game_chunk_handlers(game_chunk_handlers); diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp index 3d236b1368..6569954f87 100644 --- a/src/saveload/gamelog_sl.cpp +++ b/src/saveload/gamelog_sl.cpp @@ -168,6 +168,8 @@ static void Check_GLOG() Load_GLOG_common(_load_check_data.gamelog_action, _load_check_data.gamelog_actions); } -extern const ChunkHandler _gamelog_chunk_handlers[] = { - { 'GLOG', Save_GLOG, Load_GLOG, nullptr, Check_GLOG, CH_RIFF | CH_LAST } +static const ChunkHandler gamelog_chunk_handlers[] = { + { 'GLOG', Save_GLOG, Load_GLOG, nullptr, Check_GLOG, CH_RIFF } }; + +extern const ChunkHandlerTable _gamelog_chunk_handlers(gamelog_chunk_handlers); diff --git a/src/saveload/goal_sl.cpp b/src/saveload/goal_sl.cpp index 2c9d8fde9f..2f66797594 100644 --- a/src/saveload/goal_sl.cpp +++ b/src/saveload/goal_sl.cpp @@ -40,6 +40,8 @@ static void Load_GOAL() } } -extern const ChunkHandler _goal_chunk_handlers[] = { - { 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler goal_chunk_handlers[] = { + { 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _goal_chunk_handlers(goal_chunk_handlers); diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index a6ae263f9d..f41091611c 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -55,6 +55,8 @@ static void Load_GRPS() } } -extern const ChunkHandler _group_chunk_handlers[] = { - { 'GRPS', Save_GRPS, Load_GRPS, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler group_chunk_handlers[] = { + { 'GRPS', Save_GRPS, Load_GRPS, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _group_chunk_handlers(group_chunk_handlers); diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index a59524de67..c75674069e 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -176,10 +176,12 @@ static void Load_ITBL() } } -extern const ChunkHandler _industry_chunk_handlers[] = { - { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, nullptr, CH_ARRAY}, - { 'IIDS', Save_IIDS, Load_IIDS, nullptr, nullptr, CH_ARRAY}, - { 'TIDS', Save_TIDS, Load_TIDS, nullptr, nullptr, CH_ARRAY}, - { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, nullptr, nullptr, CH_RIFF}, - { 'ITBL', Save_ITBL, Load_ITBL, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler industry_chunk_handlers[] = { + { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, nullptr, CH_ARRAY }, + { 'IIDS', Save_IIDS, Load_IIDS, nullptr, nullptr, CH_ARRAY }, + { 'TIDS', Save_TIDS, Load_TIDS, nullptr, nullptr, CH_ARRAY }, + { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, nullptr, nullptr, CH_RIFF }, + { 'ITBL', Save_ITBL, Load_ITBL, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _industry_chunk_handlers(industry_chunk_handlers); diff --git a/src/saveload/labelmaps_sl.cpp b/src/saveload/labelmaps_sl.cpp index 6c2cd1bcac..5a7d6fae98 100644 --- a/src/saveload/labelmaps_sl.cpp +++ b/src/saveload/labelmaps_sl.cpp @@ -121,7 +121,9 @@ static void Load_RAIL() } } -extern const ChunkHandler _labelmaps_chunk_handlers[] = { - { 'RAIL', Save_RAIL, Load_RAIL, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler labelmaps_chunk_handlers[] = { + { 'RAIL', Save_RAIL, Load_RAIL, nullptr, nullptr, CH_ARRAY }, }; +extern const ChunkHandlerTable _labelmaps_chunk_handlers(labelmaps_chunk_handlers); + diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 3983000286..470d00be48 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -280,8 +280,10 @@ static void Ptrs_LGRS() SlObject(&LinkGraphSchedule::instance, GetLinkGraphScheduleDesc()); } -extern const ChunkHandler _linkgraph_chunk_handlers[] = { +static const ChunkHandler linkgraph_chunk_handlers[] = { { 'LGRP', Save_LGRP, Load_LGRP, nullptr, nullptr, CH_ARRAY }, { 'LGRJ', Save_LGRJ, Load_LGRJ, nullptr, nullptr, CH_ARRAY }, - { 'LGRS', Save_LGRS, Load_LGRS, Ptrs_LGRS, nullptr, CH_LAST } + { 'LGRS', Save_LGRS, Load_LGRS, Ptrs_LGRS, nullptr, CH_RIFF } }; + +extern const ChunkHandlerTable _linkgraph_chunk_handlers(linkgraph_chunk_handlers); diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp index d08fc63899..d13900fc64 100644 --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -294,7 +294,7 @@ static void Save_MAP8() } -extern const ChunkHandler _map_chunk_handlers[] = { +static const ChunkHandler map_chunk_handlers[] = { { 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_RIFF }, { 'MAPT', Save_MAPT, Load_MAPT, nullptr, nullptr, CH_RIFF }, { 'MAPH', Save_MAPH, Load_MAPH, nullptr, nullptr, CH_RIFF }, @@ -305,5 +305,7 @@ extern const ChunkHandler _map_chunk_handlers[] = { { 'MAP5', Save_MAP5, Load_MAP5, nullptr, nullptr, CH_RIFF }, { 'MAPE', Save_MAP6, Load_MAP6, nullptr, nullptr, CH_RIFF }, { 'MAP7', Save_MAP7, Load_MAP7, nullptr, nullptr, CH_RIFF }, - { 'MAP8', Save_MAP8, Load_MAP8, nullptr, nullptr, CH_RIFF | CH_LAST }, + { 'MAP8', Save_MAP8, Load_MAP8, nullptr, nullptr, CH_RIFF }, }; + +extern const ChunkHandlerTable _map_chunk_handlers(map_chunk_handlers); diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index ba49c11be4..027d68bae4 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -145,7 +145,9 @@ static void SaveLoad_VIEW() SlGlobList(_view_desc); } -extern const ChunkHandler _misc_chunk_handlers[] = { - { 'DATE', SaveLoad_DATE, SaveLoad_DATE, nullptr, Check_DATE, CH_RIFF}, - { 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, nullptr, nullptr, CH_RIFF | CH_LAST}, +static const ChunkHandler misc_chunk_handlers[] = { + { 'DATE', SaveLoad_DATE, SaveLoad_DATE, nullptr, Check_DATE, CH_RIFF }, + { 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, nullptr, nullptr, CH_RIFF }, }; + +extern const ChunkHandlerTable _misc_chunk_handlers(misc_chunk_handlers); diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp index 3faf9a64a6..f92da0db31 100644 --- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -111,6 +111,8 @@ static void Check_NGRF() Load_NGRF_common(_load_check_data.grfconfig); } -extern const ChunkHandler _newgrf_chunk_handlers[] = { - { 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_ARRAY | CH_LAST } +static const ChunkHandler newgrf_chunk_handlers[] = { + { 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_ARRAY } }; + +extern const ChunkHandlerTable _newgrf_chunk_handlers(newgrf_chunk_handlers); diff --git a/src/saveload/object_sl.cpp b/src/saveload/object_sl.cpp index 40ca8cd110..dcf5fd65cb 100644 --- a/src/saveload/object_sl.cpp +++ b/src/saveload/object_sl.cpp @@ -66,7 +66,9 @@ static void Load_OBID() Load_NewGRFMapping(_object_mngr); } -extern const ChunkHandler _object_chunk_handlers[] = { +static const ChunkHandler object_chunk_handlers[] = { { 'OBID', Save_OBID, Load_OBID, nullptr, nullptr, CH_ARRAY }, - { 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, nullptr, CH_ARRAY | CH_LAST}, + { 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _object_chunk_handlers(object_chunk_handlers); diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index 44080e695d..523a8b804b 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -286,8 +286,10 @@ static void Ptrs_BKOR() } } -extern const ChunkHandler _order_chunk_handlers[] = { - { 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, nullptr, CH_ARRAY}, - { 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, nullptr, CH_ARRAY}, - { 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler order_chunk_handlers[] = { + { 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, nullptr, CH_ARRAY }, + { 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, nullptr, CH_ARRAY }, + { 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _order_chunk_handlers(order_chunk_handlers); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 01f0e0fd3a..3c95e61e2d 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -214,86 +214,92 @@ struct SaveLoadParams { static SaveLoadParams _sl; ///< Parameters used for/at saveload. -/* these define the chunks */ -extern const ChunkHandler _gamelog_chunk_handlers[]; -extern const ChunkHandler _map_chunk_handlers[]; -extern const ChunkHandler _misc_chunk_handlers[]; -extern const ChunkHandler _name_chunk_handlers[]; -extern const ChunkHandler _cheat_chunk_handlers[] ; -extern const ChunkHandler _setting_chunk_handlers[]; -extern const ChunkHandler _company_chunk_handlers[]; -extern const ChunkHandler _engine_chunk_handlers[]; -extern const ChunkHandler _veh_chunk_handlers[]; -extern const ChunkHandler _waypoint_chunk_handlers[]; -extern const ChunkHandler _depot_chunk_handlers[]; -extern const ChunkHandler _order_chunk_handlers[]; -extern const ChunkHandler _town_chunk_handlers[]; -extern const ChunkHandler _sign_chunk_handlers[]; -extern const ChunkHandler _station_chunk_handlers[]; -extern const ChunkHandler _industry_chunk_handlers[]; -extern const ChunkHandler _economy_chunk_handlers[]; -extern const ChunkHandler _subsidy_chunk_handlers[]; -extern const ChunkHandler _cargomonitor_chunk_handlers[]; -extern const ChunkHandler _goal_chunk_handlers[]; -extern const ChunkHandler _story_page_chunk_handlers[]; -extern const ChunkHandler _ai_chunk_handlers[]; -extern const ChunkHandler _game_chunk_handlers[]; -extern const ChunkHandler _animated_tile_chunk_handlers[]; -extern const ChunkHandler _newgrf_chunk_handlers[]; -extern const ChunkHandler _group_chunk_handlers[]; -extern const ChunkHandler _cargopacket_chunk_handlers[]; -extern const ChunkHandler _autoreplace_chunk_handlers[]; -extern const ChunkHandler _labelmaps_chunk_handlers[]; -extern const ChunkHandler _linkgraph_chunk_handlers[]; -extern const ChunkHandler _airport_chunk_handlers[]; -extern const ChunkHandler _object_chunk_handlers[]; -extern const ChunkHandler _persistent_storage_chunk_handlers[]; +static const std::vector &ChunkHandlers() +{ + /* These define the chunks */ + extern const ChunkHandlerTable _gamelog_chunk_handlers; + extern const ChunkHandlerTable _map_chunk_handlers; + extern const ChunkHandlerTable _misc_chunk_handlers; + extern const ChunkHandlerTable _name_chunk_handlers; + extern const ChunkHandlerTable _cheat_chunk_handlers; + extern const ChunkHandlerTable _setting_chunk_handlers; + extern const ChunkHandlerTable _company_chunk_handlers; + extern const ChunkHandlerTable _engine_chunk_handlers; + extern const ChunkHandlerTable _veh_chunk_handlers; + extern const ChunkHandlerTable _waypoint_chunk_handlers; + extern const ChunkHandlerTable _depot_chunk_handlers; + extern const ChunkHandlerTable _order_chunk_handlers; + extern const ChunkHandlerTable _town_chunk_handlers; + extern const ChunkHandlerTable _sign_chunk_handlers; + extern const ChunkHandlerTable _station_chunk_handlers; + extern const ChunkHandlerTable _industry_chunk_handlers; + extern const ChunkHandlerTable _economy_chunk_handlers; + extern const ChunkHandlerTable _subsidy_chunk_handlers; + extern const ChunkHandlerTable _cargomonitor_chunk_handlers; + extern const ChunkHandlerTable _goal_chunk_handlers; + extern const ChunkHandlerTable _story_page_chunk_handlers; + extern const ChunkHandlerTable _ai_chunk_handlers; + extern const ChunkHandlerTable _game_chunk_handlers; + extern const ChunkHandlerTable _animated_tile_chunk_handlers; + extern const ChunkHandlerTable _newgrf_chunk_handlers; + extern const ChunkHandlerTable _group_chunk_handlers; + extern const ChunkHandlerTable _cargopacket_chunk_handlers; + extern const ChunkHandlerTable _autoreplace_chunk_handlers; + extern const ChunkHandlerTable _labelmaps_chunk_handlers; + extern const ChunkHandlerTable _linkgraph_chunk_handlers; + extern const ChunkHandlerTable _airport_chunk_handlers; + extern const ChunkHandlerTable _object_chunk_handlers; + extern const ChunkHandlerTable _persistent_storage_chunk_handlers; -/** Array of all chunks in a savegame, \c nullptr terminated. */ -static const ChunkHandler * const _chunk_handlers[] = { - _gamelog_chunk_handlers, - _map_chunk_handlers, - _misc_chunk_handlers, - _name_chunk_handlers, - _cheat_chunk_handlers, - _setting_chunk_handlers, - _veh_chunk_handlers, - _waypoint_chunk_handlers, - _depot_chunk_handlers, - _order_chunk_handlers, - _industry_chunk_handlers, - _economy_chunk_handlers, - _subsidy_chunk_handlers, - _cargomonitor_chunk_handlers, - _goal_chunk_handlers, - _story_page_chunk_handlers, - _engine_chunk_handlers, - _town_chunk_handlers, - _sign_chunk_handlers, - _station_chunk_handlers, - _company_chunk_handlers, - _ai_chunk_handlers, - _game_chunk_handlers, - _animated_tile_chunk_handlers, - _newgrf_chunk_handlers, - _group_chunk_handlers, - _cargopacket_chunk_handlers, - _autoreplace_chunk_handlers, - _labelmaps_chunk_handlers, - _linkgraph_chunk_handlers, - _airport_chunk_handlers, - _object_chunk_handlers, - _persistent_storage_chunk_handlers, - nullptr, -}; + /** List of all chunks in a savegame. */ + static const ChunkHandlerTable _chunk_handler_tables[] = { + _gamelog_chunk_handlers, + _map_chunk_handlers, + _misc_chunk_handlers, + _name_chunk_handlers, + _cheat_chunk_handlers, + _setting_chunk_handlers, + _veh_chunk_handlers, + _waypoint_chunk_handlers, + _depot_chunk_handlers, + _order_chunk_handlers, + _industry_chunk_handlers, + _economy_chunk_handlers, + _subsidy_chunk_handlers, + _cargomonitor_chunk_handlers, + _goal_chunk_handlers, + _story_page_chunk_handlers, + _engine_chunk_handlers, + _town_chunk_handlers, + _sign_chunk_handlers, + _station_chunk_handlers, + _company_chunk_handlers, + _ai_chunk_handlers, + _game_chunk_handlers, + _animated_tile_chunk_handlers, + _newgrf_chunk_handlers, + _group_chunk_handlers, + _cargopacket_chunk_handlers, + _autoreplace_chunk_handlers, + _labelmaps_chunk_handlers, + _linkgraph_chunk_handlers, + _airport_chunk_handlers, + _object_chunk_handlers, + _persistent_storage_chunk_handlers, + }; -/** - * Iterate over all chunk handlers. - * @param ch the chunk handler iterator - */ -#define FOR_ALL_CHUNK_HANDLERS(ch) \ - for (const ChunkHandler * const *chsc = _chunk_handlers; *chsc != nullptr; chsc++) \ - for (const ChunkHandler *ch = *chsc; ch != nullptr; ch = (ch->flags & CH_LAST) ? nullptr : ch + 1) + static std::vector _chunk_handlers; + + if (_chunk_handlers.empty()) { + for (auto &chunk_handler_table : _chunk_handler_tables) { + for (auto &chunk_handler : chunk_handler_table) { + _chunk_handlers.push_back(chunk_handler); + } + } + } + + return _chunk_handlers; +} /** Null all pointers (convert index -> nullptr) */ static void SlNullPointers() @@ -305,10 +311,10 @@ static void SlNullPointers() * pointers from other pools. */ _sl_version = SAVEGAME_VERSION; - FOR_ALL_CHUNK_HANDLERS(ch) { - if (ch->ptrs_proc != nullptr) { - DEBUG(sl, 3, "Nulling pointers for %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id); - ch->ptrs_proc(); + for (auto &ch : ChunkHandlers()) { + if (ch.ptrs_proc != nullptr) { + DEBUG(sl, 3, "Nulling pointers for %c%c%c%c", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id); + ch.ptrs_proc(); } } @@ -1654,7 +1660,7 @@ void SlAutolength(AutolengthProc *proc, void *arg) * Load a chunk of data (eg vehicles, stations, etc.) * @param ch The chunkhandler that will be used for the operation */ -static void SlLoadChunk(const ChunkHandler *ch) +static void SlLoadChunk(const ChunkHandler &ch) { byte m = SlReadByte(); size_t len; @@ -1666,11 +1672,11 @@ static void SlLoadChunk(const ChunkHandler *ch) switch (m) { case CH_ARRAY: _sl.array_index = 0; - ch->load_proc(); + ch.load_proc(); if (_next_offs != 0) SlErrorCorrupt("Invalid array length"); break; case CH_SPARSE_ARRAY: - ch->load_proc(); + ch.load_proc(); if (_next_offs != 0) SlErrorCorrupt("Invalid array length"); break; default: @@ -1680,7 +1686,7 @@ static void SlLoadChunk(const ChunkHandler *ch) len += SlReadUint16(); _sl.obj_len = len; endoffs = _sl.reader->GetSize() + len; - ch->load_proc(); + ch.load_proc(); if (_sl.reader->GetSize() != endoffs) SlErrorCorrupt("Invalid chunk size"); } else { SlErrorCorrupt("Invalid chunk type"); @@ -1694,7 +1700,7 @@ static void SlLoadChunk(const ChunkHandler *ch) * If the chunkhandler is nullptr, the chunk is skipped. * @param ch The chunkhandler that will be used for the operation */ -static void SlLoadCheckChunk(const ChunkHandler *ch) +static void SlLoadCheckChunk(const ChunkHandler &ch) { byte m = SlReadByte(); size_t len; @@ -1706,15 +1712,15 @@ static void SlLoadCheckChunk(const ChunkHandler *ch) switch (m) { case CH_ARRAY: _sl.array_index = 0; - if (ch->load_check_proc) { - ch->load_check_proc(); + if (ch.load_check_proc) { + ch.load_check_proc(); } else { SlSkipArray(); } break; case CH_SPARSE_ARRAY: - if (ch->load_check_proc) { - ch->load_check_proc(); + if (ch.load_check_proc) { + ch.load_check_proc(); } else { SlSkipArray(); } @@ -1726,8 +1732,8 @@ static void SlLoadCheckChunk(const ChunkHandler *ch) len += SlReadUint16(); _sl.obj_len = len; endoffs = _sl.reader->GetSize() + len; - if (ch->load_check_proc) { - ch->load_check_proc(); + if (ch.load_check_proc) { + ch.load_check_proc(); } else { SlSkipBytes(len); } @@ -1744,18 +1750,18 @@ static void SlLoadCheckChunk(const ChunkHandler *ch) * prefixed by an ID identifying it, followed by data, and terminator where appropriate * @param ch The chunkhandler that will be used for the operation */ -static void SlSaveChunk(const ChunkHandler *ch) +static void SlSaveChunk(const ChunkHandler &ch) { - ChunkSaveLoadProc *proc = ch->save_proc; + ChunkSaveLoadProc *proc = ch.save_proc; /* Don't save any chunk information if there is no save handler. */ if (proc == nullptr) return; - SlWriteUint32(ch->id); - DEBUG(sl, 2, "Saving chunk %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id); + SlWriteUint32(ch.id); + DEBUG(sl, 2, "Saving chunk %c%c%c%c", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id); - _sl.block_mode = ch->flags & CH_TYPE_MASK; - switch (ch->flags & CH_TYPE_MASK) { + _sl.block_mode = ch.type; + switch (ch.type) { case CH_RIFF: _sl.need_length = NL_WANTLENGTH; proc(); @@ -1778,7 +1784,7 @@ static void SlSaveChunk(const ChunkHandler *ch) /** Save all chunks */ static void SlSaveChunks() { - FOR_ALL_CHUNK_HANDLERS(ch) { + for (auto &ch : ChunkHandlers()) { SlSaveChunk(ch); } @@ -1794,7 +1800,7 @@ static void SlSaveChunks() */ static const ChunkHandler *SlFindChunkHandler(uint32 id) { - FOR_ALL_CHUNK_HANDLERS(ch) if (ch->id == id) return ch; + for (auto &ch : ChunkHandlers()) if (ch.id == id) return &ch; return nullptr; } @@ -1809,7 +1815,7 @@ static void SlLoadChunks() ch = SlFindChunkHandler(id); if (ch == nullptr) SlErrorCorrupt("Unknown chunk type"); - SlLoadChunk(ch); + SlLoadChunk(*ch); } } @@ -1824,7 +1830,7 @@ static void SlLoadCheckChunks() ch = SlFindChunkHandler(id); if (ch == nullptr) SlErrorCorrupt("Unknown chunk type"); - SlLoadCheckChunk(ch); + SlLoadCheckChunk(*ch); } } @@ -1833,10 +1839,10 @@ static void SlFixPointers() { _sl.action = SLA_PTRS; - FOR_ALL_CHUNK_HANDLERS(ch) { - if (ch->ptrs_proc != nullptr) { - DEBUG(sl, 3, "Fixing pointers for %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id); - ch->ptrs_proc(); + for (auto &ch : ChunkHandlers()) { + if (ch.ptrs_proc != nullptr) { + DEBUG(sl, 3, "Fixing pointers for %c%c%c%c", ch.id >> 24, ch.id >> 16, ch.id >> 8, ch.id); + ch.ptrs_proc(); } } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 1c763a93fc..41880952e0 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -14,6 +14,7 @@ #include "../strings_type.h" #include "../core/span_type.hpp" #include +#include /** SaveLoad versions * Previous savegame versions, the trunk revision where they were @@ -378,6 +379,13 @@ SaveOrLoadResult LoadWithFilter(struct LoadFilter *reader); typedef void ChunkSaveLoadProc(); typedef void AutolengthProc(void *arg); +/** Type of a chunk. */ +enum ChunkType { + CH_RIFF = 0, + CH_ARRAY = 1, + CH_SPARSE_ARRAY = 2, +}; + /** Handlers and description of chunk. */ struct ChunkHandler { uint32 id; ///< Unique ID (4 letters). @@ -385,9 +393,12 @@ struct ChunkHandler { ChunkSaveLoadProc *load_proc; ///< Load procedure of the chunk. ChunkSaveLoadProc *ptrs_proc; ///< Manipulate pointers in the chunk. ChunkSaveLoadProc *load_check_proc; ///< Load procedure for game preview. - uint32 flags; ///< Flags of the chunk. @see ChunkType + ChunkType type; ///< Type of the chunk. @see ChunkType }; +/** A table of ChunkHandler entries. */ +using ChunkHandlerTable = span; + /** Type of reference (#SLE_REF, #SLE_CONDREF). */ enum SLRefType { REF_ORDER = 0, ///< Load/save a reference to an order. @@ -404,15 +415,6 @@ enum SLRefType { REF_LINK_GRAPH_JOB = 11, ///< Load/save a reference to a link graph job. }; -/** Flags of a chunk. */ -enum ChunkType { - CH_RIFF = 0, - CH_ARRAY = 1, - CH_SPARSE_ARRAY = 2, - CH_TYPE_MASK = 3, - CH_LAST = 8, ///< Last chunk in this array. -}; - /** * VarTypes is the general bitmasked magic type that tells us * certain characteristics about the variable it refers to. For example diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp index 86a1468a56..388a92af92 100644 --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -62,6 +62,8 @@ static void Load_SIGN() } /** Chunk handlers related to signs. */ -extern const ChunkHandler _sign_chunk_handlers[] = { - { 'SIGN', Save_SIGN, Load_SIGN, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler sign_chunk_handlers[] = { + { 'SIGN', Save_SIGN, Load_SIGN, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _sign_chunk_handlers(sign_chunk_handlers); diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index cd1b93138e..75b6043e7a 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -613,8 +613,10 @@ static void Ptrs_ROADSTOP() } } -extern const ChunkHandler _station_chunk_handlers[] = { +static const ChunkHandler station_chunk_handlers[] = { { 'STNS', nullptr, Load_STNS, Ptrs_STNS, nullptr, CH_ARRAY }, { 'STNN', Save_STNN, Load_STNN, Ptrs_STNN, nullptr, CH_ARRAY }, - { 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, nullptr, CH_ARRAY | CH_LAST}, + { 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _station_chunk_handlers(station_chunk_handlers); diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp index a01904e3a1..50f858f116 100644 --- a/src/saveload/storage_sl.cpp +++ b/src/saveload/storage_sl.cpp @@ -44,6 +44,8 @@ static void Save_PSAC() } /** Chunk handler for persistent storages. */ -extern const ChunkHandler _persistent_storage_chunk_handlers[] = { - { 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler persistent_storage_chunk_handlers[] = { + { 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _persistent_storage_chunk_handlers(persistent_storage_chunk_handlers); diff --git a/src/saveload/story_sl.cpp b/src/saveload/story_sl.cpp index 06083fb103..df5b1406f0 100644 --- a/src/saveload/story_sl.cpp +++ b/src/saveload/story_sl.cpp @@ -95,7 +95,9 @@ static void Load_STORY_PAGE() _story_page_next_sort_value = max_sort_value + 1; } -extern const ChunkHandler _story_page_chunk_handlers[] = { - { 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY}, - { 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler story_page_chunk_handlers[] = { + { 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY }, + { 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _story_page_chunk_handlers(story_page_chunk_handlers); diff --git a/src/saveload/strings_sl.cpp b/src/saveload/strings_sl.cpp index dad7eb1abd..52f70b8d58 100644 --- a/src/saveload/strings_sl.cpp +++ b/src/saveload/strings_sl.cpp @@ -131,6 +131,8 @@ static void Load_NAME() } /** Chunk handlers related to strings. */ -extern const ChunkHandler _name_chunk_handlers[] = { - { 'NAME', nullptr, Load_NAME, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler name_chunk_handlers[] = { + { 'NAME', nullptr, Load_NAME, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _name_chunk_handlers(name_chunk_handlers); diff --git a/src/saveload/subsidy_sl.cpp b/src/saveload/subsidy_sl.cpp index dbd04c8adb..b17ae1f252 100644 --- a/src/saveload/subsidy_sl.cpp +++ b/src/saveload/subsidy_sl.cpp @@ -43,6 +43,8 @@ static void Load_SUBS() } } -extern const ChunkHandler _subsidy_chunk_handlers[] = { - { 'SUBS', Save_SUBS, Load_SUBS, nullptr, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler subsidy_chunk_handlers[] = { + { 'SUBS', Save_SUBS, Load_SUBS, nullptr, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _subsidy_chunk_handlers(subsidy_chunk_handlers); diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 3ba25f6406..908ff2dd71 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -296,7 +296,9 @@ static void Ptrs_TOWN() } /** Chunk handler for towns. */ -extern const ChunkHandler _town_chunk_handlers[] = { +static const ChunkHandler town_chunk_handlers[] = { { 'HIDS', Save_HIDS, Load_HIDS, nullptr, nullptr, CH_ARRAY }, - { 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY | CH_LAST}, + { 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _town_chunk_handlers(town_chunk_handlers); diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index e637f03b26..7e9005779d 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -931,6 +931,8 @@ static void Ptrs_VEHS() } } -extern const ChunkHandler _veh_chunk_handlers[] = { - { 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY | CH_LAST}, +static const ChunkHandler veh_chunk_handlers[] = { + { 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY }, }; + +extern const ChunkHandlerTable _veh_chunk_handlers(veh_chunk_handlers); diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 9ad3da1f3b..97e2d12c9f 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -224,6 +224,8 @@ static void Ptrs_WAYP() } } -extern const ChunkHandler _waypoint_chunk_handlers[] = { - { 'CHKP', nullptr, Load_WAYP, Ptrs_WAYP, nullptr, CH_ARRAY | CH_LAST}, +static const ChunkHandler waypoint_chunk_handlers[] = { + { 'CHKP', nullptr, Load_WAYP, Ptrs_WAYP, nullptr, CH_ARRAY }, }; + +extern const ChunkHandlerTable _waypoint_chunk_handlers(waypoint_chunk_handlers); diff --git a/src/settings.cpp b/src/settings.cpp index aa1e915f88..50dc387907 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2085,11 +2085,13 @@ static void Save_PATS() SaveSettings(_settings, &_settings_game); } -extern const ChunkHandler _setting_chunk_handlers[] = { - { 'OPTS', nullptr, Load_OPTS, nullptr, nullptr, CH_RIFF}, - { 'PATS', Save_PATS, Load_PATS, nullptr, Check_PATS, CH_RIFF | CH_LAST}, +static const ChunkHandler setting_chunk_handlers[] = { + { 'OPTS', nullptr, Load_OPTS, nullptr, nullptr, CH_RIFF }, + { 'PATS', Save_PATS, Load_PATS, nullptr, Check_PATS, CH_RIFF }, }; +extern const ChunkHandlerTable _setting_chunk_handlers(setting_chunk_handlers); + static bool IsSignedVarMemType(VarType vt) { switch (GetVarMemType(vt)) { From d835a42c05f6a48f120b47e94a042848a20edd5c Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 6 Jun 2021 19:37:57 +0000 Subject: [PATCH 8/9] Update: Translations from eints english (us): 1 change by 2TallTyler catalan: 5 changes by J0anJosep --- src/lang/catalan.txt | 7 +++++-- src/lang/english_US.txt | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 45eb3a9951..2d9b85ffa8 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2205,6 +2205,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}No s'ha STR_NETWORK_ERROR_TIMEOUT :{WHITE}La connexió #{NUM} ha esgotat el temps d'espera STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}S'ha obtingut un error de protocol i s'ha tancat la connexió STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}No s'ha escollit un nom per al vostre jugador. El nom es pot establir a la part superior de la finestra de mode multijugador. +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}No s'ha establit un nom per al vostre servidor. El nom s'estableix a la part superior de la finestra multijugador. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}La revisió d'aquest client no concorda amb la revisió del servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrasenya incorrecta STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor està ple @@ -3559,7 +3560,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica pe STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina el grup seleccionat STR_GROUP_RENAME_TOOLTIP :{BLACK}Canvia el nom del grup seleccionat STR_GROUP_LIVERY_TOOLTIP :{BLACK}Canvia l'aspecte dels vehicles del grup seleccionat. -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clica per protegir aquest grup de l'autosubstitueix global +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clica per protegir aquest grup de l'autosubstitució global. Ctrl + clic també protegeix els subgrups. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Esborrar grup STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Estàs segur que vols esborrar aquest grup i tots els seus subgrups? @@ -3812,7 +3813,9 @@ STR_REPLACE_MAGLEV_VEHICLES :Trens maglev STR_REPLACE_ROAD_VEHICLES :Automòbils STR_REPLACE_TRAM_VEHICLES :Tramvies +STR_REPLACE_REMOVE_WAGON :{BLACK}Treure vagons ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fer que la substitució automàtica mantingui la llargada del tren eliminant vagons (començant pel front), si substituint la màquina el tren es fa més llarg +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl + clic també ho aplica als subgrups. # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} @@ -4221,7 +4224,7 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostra l STR_AI_GAME_SCRIPT :{BLACK}Script de partida STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Mostra el registre de l'script de partida. -STR_ERROR_AI_NO_AI_FOUND :No s'ha trobat una IA adequada per carregar.{}Aquesta IA és una IA falsa i no farà res.{}Pots descarregar diverses IA via el sistema de "Contingut en línia" +STR_ERROR_AI_NO_AI_FOUND :No s'ha trobat una IA adequada per carregar.{}Aquesta IA és una IA que no fa res.{}Podeu descarregar diverses IA via el sistema de «Contingut en línia». STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels scripts que s'estava executant ha fallat. Si us plau, informeu l'autor de l'script amb una captura de pantalla de la finestra de depuració de l'script d'IA/partida. STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La finestra de depuració de les IA i l'script de partida només està disponible al servidor. diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index a76b1d9079..6155a1f84e 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2204,6 +2204,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}Could no STR_NETWORK_ERROR_TIMEOUT :{WHITE}Connection #{NUM} timed out STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}A protocol error was detected and the connection was closed STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your player name has not been set. The name can be set at the top of the Multiplayer window +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Your server name has not been set. The name can be set at the top of the Multiplayer window STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full From 7572603c9d97215afe62cd79e25048237a637616 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 3 Jun 2021 21:01:00 +0200 Subject: [PATCH 9/9] Codechange: remove the unused SLF_HEX flag --- src/saveload/saveload.h | 2 -- src/settings.cpp | 4 +--- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 41880952e0..ce597affc4 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -490,8 +490,6 @@ enum VarTypes { SLF_NO_NETWORK_SYNC = 1 << 10, ///< do not synchronize over network (but it is saved if SLF_NOT_IN_SAVE is not set) SLF_ALLOW_CONTROL = 1 << 11, ///< allow control codes in the strings SLF_ALLOW_NEWLINE = 1 << 12, ///< allow new lines in the strings - SLF_HEX = 1 << 13, ///< print numbers as hex in the config file (only useful for unsigned) - /* 2 more possible flags */ }; typedef uint32 VarType; diff --git a/src/settings.cpp b/src/settings.cpp index 50dc387907..60ae20d82e 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -274,8 +274,6 @@ void ListSettingDesc::FormatValue(char *buf, const char *last, const void *objec } if (IsSignedVarMemType(this->save.conv)) { buf += seprintf(buf, last, (i == 0) ? "%d" : ",%d", v); - } else if (this->save.conv & SLF_HEX) { - buf += seprintf(buf, last, (i == 0) ? "0x%X" : ",0x%X", v); } else { buf += seprintf(buf, last, (i == 0) ? "%u" : ",%u", v); } @@ -621,7 +619,7 @@ static void IniSaveSettings(IniFile *ini, const SettingTable &settings_table, co void IntSettingDesc::FormatValue(char *buf, const char *last, const void *object) const { uint32 i = (uint32)this->Read(object); - seprintf(buf, last, IsSignedVarMemType(this->save.conv) ? "%d" : (this->save.conv & SLF_HEX) ? "%X" : "%u", i); + seprintf(buf, last, IsSignedVarMemType(this->save.conv) ? "%d" : "%u", i); } void BoolSettingDesc::FormatValue(char *buf, const char *last, const void *object) const