Index: ps/trunk/binaries/data/mods/public/gui/gamesettings/attributes/GameSpeed.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesettings/attributes/GameSpeed.js +++ ps/trunk/binaries/data/mods/public/gui/gamesettings/attributes/GameSpeed.js @@ -8,7 +8,7 @@ toInitAttributes(attribs) { - attribs.gameSpeed = this.gameSpeed; + attribs.gameSpeed = +this.gameSpeed; } fromInitAttributes(attribs) @@ -27,6 +27,6 @@ setSpeed(speed) { - this.gameSpeed = speed; + this.gameSpeed = +speed; } }; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/GameSpeed.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/GameSpeed.js +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/GameSpeed.js @@ -10,6 +10,13 @@ this.render(); } + onLoad() + { + // We may need to reset after deserializing attributes. + this.previousAllowFastForward = undefined; + this.render(); + } + onPlayerAssignmentsChange() { this.render(); @@ -25,17 +32,22 @@ break; } - if (this.previousAllowFastForward !== allowFastForward) + if (this.previousAllowFastForward === allowFastForward) { - this.previousAllowFastForward = allowFastForward; - let values = prepareForDropdown( - g_Settings.GameSpeeds.filter(speed => !speed.FastForward || allowFastForward)); - - this.dropdown.list = values.Title; - this.dropdown.list_data = values.Speed; + this.setSelectedValue(g_GameSettings.gameSpeed.gameSpeed); + return; } + this.previousAllowFastForward = allowFastForward; + let values = prepareForDropdown( + g_Settings.GameSpeeds.filter(speed => !speed.FastForward || allowFastForward)); + let currentSpeed = +this.dropdown.list_data?.[this.dropdown.selected]; + let resetToDefault = values.Speed.indexOf(currentSpeed) === -1; + + this.dropdown.list = values.Title; + this.dropdown.list_data = values.Speed; - this.setSelectedValue(g_GameSettings.gameSpeed.gameSpeed); + if (resetToDefault) + g_GameSettings.gameSpeed.setSpeed(this.dropdown.list_data[values.Default]); } onSelectionChange(itemIdx) Index: ps/trunk/source/ps/Game.cpp =================================================================== --- ps/trunk/source/ps/Game.cpp +++ ps/trunk/source/ps/Game.cpp @@ -221,8 +221,13 @@ scriptInterface.GetProperty(attribs, "mapType", mapType); float speed; - if (scriptInterface.HasProperty(attribs, "gameSpeed") && scriptInterface.GetProperty(attribs, "gameSpeed", speed)) - SetSimRate(speed); + if (scriptInterface.HasProperty(attribs, "gameSpeed")) + { + if (scriptInterface.GetProperty(attribs, "gameSpeed", speed)) + SetSimRate(speed); + else + LOGERROR("GameSpeed could not be parsed."); + } LDR_BeginRegistering();