Fix 39e90ec: Integers for scripts are 64bit, but saved as 32bit (#9415)

This commit is contained in:
Loïc Guilloux 2021-07-06 21:09:08 +02:00 committed by GitHub
parent 8913ae9ba8
commit ddafc0de05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 6 deletions

View File

@ -335,6 +335,7 @@ enum SaveLoadVersion : uint16 {
SLV_RIFF_TO_ARRAY, ///< 294 PR#9375 Changed many CH_RIFF chunks to CH_ARRAY chunks.
SLV_TABLE_CHUNKS, ///< 295 PR#9322 Introduction of CH_TABLE and CH_SPARSE_TABLE.
SLV_SCRIPT_INT64, ///< 296 PR#9415 SQInteger is 64bit but was saved as 32bit.
SL_MAX_VERSION, ///< Highest possible saveload version
};

View File

@ -39,7 +39,7 @@
* data from the loaded game.
* - Finally, #Start is called to start execution of the script.
*
* See also http://wiki.openttd.org/AI:Save/Load for more details.
* See also https://wiki.openttd.org/en/Development/Script/Save%20and%20Load for more details.
*
* @api ai game
*/
@ -91,7 +91,7 @@ public:
* notified of the call. To avoid race-conditions between #Save and the
* other script code, change variables directly after a #Sleep, it is
* very unlikely, to get interrupted at that point in the execution.
* See also http://wiki.openttd.org/AI:Save/Load for more details.
* See also https://wiki.openttd.org/en/Development/Script/Save%20and%20Load for more details.
*
* @note No other information is saved than the table returned by #Save.
* For example all pending events are lost as soon as the game is loaded.

View File

@ -364,8 +364,8 @@ static const SaveLoad _script_byte[] = {
SQInteger res;
sq_getinteger(vm, index, &res);
if (!test) {
int value = (int)res;
SlCopy(&value, 1, SLE_INT32);
int64 value = (int64)res;
SlCopy(&value, 1, SLE_INT64);
}
return true;
}
@ -564,8 +564,8 @@ bool ScriptInstance::IsPaused()
SlObject(nullptr, _script_byte);
switch (_script_sl_byte) {
case SQSL_INT: {
int value;
SlCopy(&value, 1, SLE_INT32);
int64 value;
SlCopy(&value, 1, IsSavegameVersionBefore(SLV_SCRIPT_INT64) ? SLE_INT32 : SLE_INT64);
if (vm != nullptr) sq_pushinteger(vm, (SQInteger)value);
return true;
}