[Scummvm-git-logs] scummvm master -> c4457ce4436e0f037198c47953c26d0f4ca4d532
dreammaster
noreply at scummvm.org
Wed Jun 1 01:49:13 UTC 2022
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
8e55de7b77 AGS: Changed sccmd_info array from being global objects
b47407e804 AGS: Fix shadowed StringMap warnings
c4457ce443 AGS: Changed ComponentHandlers array from being global objects
Commit: 8e55de7b7792152dc9a9a31f6e3101199e791f70
https://github.com/scummvm/scummvm/commit/8e55de7b7792152dc9a9a31f6e3101199e791f70
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-05-31T18:33:21-07:00
Commit Message:
AGS: Changed sccmd_info array from being global objects
Changed paths:
engines/ags/ags.cpp
engines/ags/engine/script/cc_instance.cpp
engines/ags/engine/script/cc_instance.h
diff --git a/engines/ags/ags.cpp b/engines/ags/ags.cpp
index 413367bc944..526c0c6104f 100644
--- a/engines/ags/ags.cpp
+++ b/engines/ags/ags.cpp
@@ -52,6 +52,7 @@
#include "ags/engine/main/main.h"
#include "ags/engine/main/quit.h"
#include "ags/engine/platform/base/ags_platform_driver.h"
+#include "ags/engine/script/cc_instance.h"
#include "ags/engine/script/script.h"
#include "ags/engine/ac/route_finder.h"
#include "ags/shared/core/asset_manager.h"
@@ -75,6 +76,7 @@ AGSEngine::AGSEngine(OSystem *syst, const AGSGameDescription *gameDesc) : Engine
_gfxDriver(nullptr), _globals(nullptr), _forceTextAA(false) {
g_vm = this;
+ AGS3::script_commands_init();
_events = new EventsManager();
_globals = new ::AGS3::Globals();
@@ -99,6 +101,7 @@ AGSEngine::~AGSEngine() {
delete _events;
delete _music;
delete _globals;
+ AGS3::script_commands_free();
}
uint32 AGSEngine::getFeatures() const {
diff --git a/engines/ags/engine/script/cc_instance.cpp b/engines/ags/engine/script/cc_instance.cpp
index 384a61c3065..d2a08dc877a 100644
--- a/engines/ags/engine/script/cc_instance.cpp
+++ b/engines/ags/engine/script/cc_instance.cpp
@@ -76,82 +76,97 @@ struct ScriptCommandInfo {
bool ArgIsReg[3];
};
-const ScriptCommandInfo sccmd_info[CC_NUM_SCCMDS] = {
- ScriptCommandInfo(0 , "NULL" , 0, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_ADD , "addi" , 2, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_SUB , "subi" , 2, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_REGTOREG , "mov" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_WRITELIT , "memwritelit" , 2, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_RET , "ret" , 0, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_LITTOREG , "movl" , 2, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMREAD , "memread4" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMWRITE , "memwrite4" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MULREG , "mul" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_DIVREG , "div" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_ADDREG , "add" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_SUBREG , "sub" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_BITAND , "and" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_BITOR , "or" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_ISEQUAL , "cmpeq" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_NOTEQUAL , "cmpne" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_GREATER , "gt" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_LESSTHAN , "lt" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_GTE , "gte" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_LTE , "lte" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_AND , "land" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_OR , "lor" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_CALL , "call" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMREADB , "memread1" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMREADW , "memread2" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMWRITEB , "memwrite1" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMWRITEW , "memwrite2" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_JZ , "jzi" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_PUSHREG , "push" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_POPREG , "pop" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_JMP , "jmpi" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_MUL , "muli" , 2, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_CALLEXT , "farcall" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_PUSHREAL , "farpush" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_SUBREALSTACK , "farsubsp" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_LINENUM , "sourceline" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_CALLAS , "callscr" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_THISBASE , "thisaddr" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_NUMFUNCARGS , "setfuncargs" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_MODREG , "mod" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_XORREG , "xor" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_NOTREG , "not" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_SHIFTLEFT , "shl" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_SHIFTRIGHT , "shr" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_CALLOBJ , "callobj" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_CHECKBOUNDS , "checkbounds" , 2, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMWRITEPTR , "memwrite.ptr" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMREADPTR , "memread.ptr" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_MEMZEROPTR , "memwrite.ptr.0" , 0, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_MEMINITPTR , "meminit.ptr" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_LOADSPOFFS , "load.sp.offs" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_CHECKNULL , "checknull.ptr" , 0, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_FADD , "faddi" , 2, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_FSUB , "fsubi" , 2, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_FMULREG , "fmul" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_FDIVREG , "fdiv" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_FADDREG , "fadd" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_FSUBREG , "fsub" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_FGREATER , "fgt" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_FLESSTHAN , "flt" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_FGTE , "fgte" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_FLTE , "flte" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_ZEROMEMORY , "zeromem" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_CREATESTRING , "newstring" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_STRINGSEQUAL , "streq" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_STRINGSNOTEQ , "strne" , 2, kScOpTwoArgsAreReg),
- ScriptCommandInfo(SCMD_CHECKNULLREG , "checknull" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_LOOPCHECKOFF , "loopcheckoff" , 0, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_MEMZEROPTRND , "memwrite.ptr.0.nd" , 0, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_JNZ , "jnzi" , 1, kScOpNoArgIsReg),
- ScriptCommandInfo(SCMD_DYNAMICBOUNDS , "dynamicbounds" , 1, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_NEWARRAY , "newarray" , 3, kScOpOneArgIsReg),
- ScriptCommandInfo(SCMD_NEWUSEROBJECT , "newuserobject" , 2, kScOpOneArgIsReg),
+struct ScriptCommands {
+ const ScriptCommandInfo _items[CC_NUM_SCCMDS] = {
+ ScriptCommandInfo(0 , "NULL" , 0, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_ADD , "addi" , 2, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_SUB , "subi" , 2, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_REGTOREG , "mov" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_WRITELIT , "memwritelit" , 2, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_RET , "ret" , 0, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_LITTOREG , "movl" , 2, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMREAD , "memread4" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMWRITE , "memwrite4" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MULREG , "mul" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_DIVREG , "div" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_ADDREG , "add" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_SUBREG , "sub" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_BITAND , "and" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_BITOR , "or" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_ISEQUAL , "cmpeq" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_NOTEQUAL , "cmpne" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_GREATER , "gt" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_LESSTHAN , "lt" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_GTE , "gte" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_LTE , "lte" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_AND , "land" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_OR , "lor" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_CALL , "call" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMREADB , "memread1" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMREADW , "memread2" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMWRITEB , "memwrite1" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMWRITEW , "memwrite2" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_JZ , "jzi" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_PUSHREG , "push" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_POPREG , "pop" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_JMP , "jmpi" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_MUL , "muli" , 2, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_CALLEXT , "farcall" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_PUSHREAL , "farpush" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_SUBREALSTACK , "farsubsp" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_LINENUM , "sourceline" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_CALLAS , "callscr" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_THISBASE , "thisaddr" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_NUMFUNCARGS , "setfuncargs" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_MODREG , "mod" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_XORREG , "xor" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_NOTREG , "not" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_SHIFTLEFT , "shl" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_SHIFTRIGHT , "shr" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_CALLOBJ , "callobj" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_CHECKBOUNDS , "checkbounds" , 2, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMWRITEPTR , "memwrite.ptr" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMREADPTR , "memread.ptr" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_MEMZEROPTR , "memwrite.ptr.0" , 0, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_MEMINITPTR , "meminit.ptr" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_LOADSPOFFS , "load.sp.offs" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_CHECKNULL , "checknull.ptr" , 0, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_FADD , "faddi" , 2, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_FSUB , "fsubi" , 2, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_FMULREG , "fmul" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_FDIVREG , "fdiv" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_FADDREG , "fadd" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_FSUBREG , "fsub" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_FGREATER , "fgt" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_FLESSTHAN , "flt" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_FGTE , "fgte" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_FLTE , "flte" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_ZEROMEMORY , "zeromem" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_CREATESTRING , "newstring" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_STRINGSEQUAL , "streq" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_STRINGSNOTEQ , "strne" , 2, kScOpTwoArgsAreReg),
+ ScriptCommandInfo(SCMD_CHECKNULLREG , "checknull" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_LOOPCHECKOFF , "loopcheckoff" , 0, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_MEMZEROPTRND , "memwrite.ptr.0.nd" , 0, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_JNZ , "jnzi" , 1, kScOpNoArgIsReg),
+ ScriptCommandInfo(SCMD_DYNAMICBOUNDS , "dynamicbounds" , 1, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_NEWARRAY , "newarray" , 3, kScOpOneArgIsReg),
+ ScriptCommandInfo(SCMD_NEWUSEROBJECT , "newuserobject" , 2, kScOpOneArgIsReg),
+ };
+
+ const ScriptCommandInfo &operator[](uint idx) {
+ return _items[idx];
+ }
};
+static ScriptCommands *g_commands;
+
+void script_commands_init() {
+ g_commands = new ScriptCommands();
+}
+
+void script_commands_free() {
+ delete g_commands;
+}
const char *regnames[] = { "null", "sp", "mar", "ax", "bx", "cx", "op", "dx" };
@@ -450,7 +465,7 @@ int ccInstance::Run(int32_t curpc) {
return -1;
}
- codeOp.ArgCount = sccmd_info[codeOp.Instruction.Code].ArgCount;
+ codeOp.ArgCount = (*g_commands)[codeOp.Instruction.Code].ArgCount;
if (pc + codeOp.ArgCount >= codeInst->codesize) {
cc_error("unexpected end of code data (%d; %d)", pc + codeOp.ArgCount, codeInst->codesize);
return -1;
@@ -1258,7 +1273,7 @@ void ccInstance::DumpInstruction(const ScriptOperation &op) const {
debugN("Line %3d, IP:%8d (SP:%p) ", line_num, pc, (void *)(registers[SREG_SP].RValue));
- const ScriptCommandInfo &cmd_info = sccmd_info[op.Instruction.Code];
+ const ScriptCommandInfo &cmd_info = (*g_commands)[op.Instruction.Code];
debugN("%s", cmd_info.CmdName);
for (int i = 0; i < cmd_info.ArgCount; ++i) {
@@ -1606,10 +1621,10 @@ static int DetermineScriptLine(const int32_t *code, size_t codesz, size_t at_pc)
for (size_t pc = 0; (pc <= at_pc) && (pc < codesz); ++pc) {
int op = code[pc] & INSTANCE_ID_REMOVEMASK;
if (op < 0 || op >= CC_NUM_SCCMDS) return -1;
- if (pc + sccmd_info[op].ArgCount >= codesz) return -1;
+ if (pc + (*g_commands)[op].ArgCount >= codesz) return -1;
if (op == SCMD_LINENUM)
line = code[pc + 1];
- pc += sccmd_info[op].ArgCount;
+ pc += (*g_commands)[op].ArgCount;
}
return line;
}
@@ -1690,7 +1705,7 @@ bool ccInstance::ReadOperation(ScriptOperation &op, int32_t at_pc)
op.Instruction.InstanceId = (op.Instruction.Code >> INSTANCE_ID_SHIFT) & INSTANCE_ID_MASK;
op.Instruction.Code &= INSTANCE_ID_REMOVEMASK; // now this is pure instruction code
- int want_args = sccmd_info[op.Instruction.Code].ArgCount;
+ int want_args = (*g_commands)[op.Instruction.Code].ArgCount;
if (at_pc + want_args >= codesize)
{
cc_error("unexpected end of code data at %d", at_pc + want_args);
diff --git a/engines/ags/engine/script/cc_instance.h b/engines/ags/engine/script/cc_instance.h
index 3895d68ed14..7bcf0bc20ae 100644
--- a/engines/ags/engine/script/cc_instance.h
+++ b/engines/ags/engine/script/cc_instance.h
@@ -215,6 +215,9 @@ protected:
void PopFromFuncCallStack(FunctionCallStack &func_callstack, int32_t num_entries);
};
+extern void script_commands_init();
+extern void script_commands_free();
+
} // namespace AGS3
#endif
Commit: b47407e80485495d0a0ca1d7f0e7c6bf69c448c3
https://github.com/scummvm/scummvm/commit/b47407e80485495d0a0ca1d7f0e7c6bf69c448c3
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-05-31T18:35:39-07:00
Commit Message:
AGS: Fix shadowed StringMap warnings
Changed paths:
engines/ags/globals.cpp
engines/ags/globals.h
diff --git a/engines/ags/globals.cpp b/engines/ags/globals.cpp
index 83cd4a8e778..0a3f56dca54 100644
--- a/engines/ags/globals.cpp
+++ b/engines/ags/globals.cpp
@@ -368,7 +368,7 @@ Globals::Globals() {
// translation.cpp globals
_trans = new AGS::Shared::Translation();
- _transtree = new StringMap();
+ _transtree = new AGS::Shared::StringMap();
// walk_behind.cpp globals
Common::fill(_walkBehindLeft, _walkBehindLeft + MAX_WALK_BEHINDS, 0);
diff --git a/engines/ags/globals.h b/engines/ags/globals.h
index 0e68f9efb65..5a22f037d13 100644
--- a/engines/ags/globals.h
+++ b/engines/ags/globals.h
@@ -61,7 +61,6 @@ namespace AGS3 {
using String = AGS::Shared::String;
using Version = AGS::Shared::Version;
-using StringMap = AGS::Shared::StringMap;
namespace AGS {
namespace Shared {
@@ -1347,7 +1346,7 @@ public:
*/
AGS::Shared::Translation *_trans;
- StringMap *_transtree = nullptr;
+ AGS::Shared::StringMap *_transtree = nullptr;
String _trans_name, _trans_filename;
long _lang_offs_start = 0;
char _transFileName[MAX_PATH_SZ] = { 0 };
Commit: c4457ce4436e0f037198c47953c26d0f4ca4d532
https://github.com/scummvm/scummvm/commit/c4457ce4436e0f037198c47953c26d0f4ca4d532
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-05-31T18:46:33-07:00
Commit Message:
AGS: Changed ComponentHandlers array from being global objects
Changed paths:
engines/ags/ags.cpp
engines/ags/engine/game/savegame_components.cpp
engines/ags/engine/game/savegame_components.h
diff --git a/engines/ags/ags.cpp b/engines/ags/ags.cpp
index 526c0c6104f..30b79d049f1 100644
--- a/engines/ags/ags.cpp
+++ b/engines/ags/ags.cpp
@@ -47,6 +47,7 @@
#include "ags/engine/debugging/debug_log.h"
#include "ags/shared/debugging/out.h"
#include "ags/engine/game/savegame.h"
+#include "ags/engine/game/savegame_components.h"
#include "ags/engine/main/config.h"
#include "ags/engine/main/engine.h"
#include "ags/engine/main/main.h"
@@ -77,6 +78,7 @@ AGSEngine::AGSEngine(OSystem *syst, const AGSGameDescription *gameDesc) : Engine
g_vm = this;
AGS3::script_commands_init();
+ AGS3::Engine::SavegameComponents::component_handlers_init();
_events = new EventsManager();
_globals = new ::AGS3::Globals();
@@ -101,6 +103,7 @@ AGSEngine::~AGSEngine() {
delete _events;
delete _music;
delete _globals;
+ AGS3::Engine::SavegameComponents::component_handlers_free();
AGS3::script_commands_free();
}
diff --git a/engines/ags/engine/game/savegame_components.cpp b/engines/ags/engine/game/savegame_components.cpp
index 5abf4003012..4bc8a5ae073 100644
--- a/engines/ags/engine/game/savegame_components.cpp
+++ b/engines/ags/engine/game/savegame_components.cpp
@@ -1021,128 +1021,141 @@ struct ComponentHandler {
};
// Array of supported components
-static const ComponentHandler ComponentHandlers[] = {
- {
- "Game State",
- kGSSvgVersion_350_10,
- kGSSvgVersion_Initial,
- WriteGameState,
- ReadGameState
- },
- {
- "Audio",
- 2,
- 0,
- WriteAudio,
- ReadAudio
- },
- {
- "Characters",
- 2,
- 0,
- WriteCharacters,
- ReadCharacters
- },
- {
- "Dialogs",
- 0,
- 0,
- WriteDialogs,
- ReadDialogs
- },
- {
- "GUI",
- kGuiSvgVersion_36025,
- kGuiSvgVersion_Initial,
- WriteGUI,
- ReadGUI
- },
- {
- "Inventory Items",
- 0,
- 0,
- WriteInventory,
- ReadInventory
- },
- {
- "Mouse Cursors",
- 1,
- 0,
- WriteMouseCursors,
- ReadMouseCursors
- },
- {
- "Views",
- 0,
- 0,
- WriteViews,
- ReadViews
- },
- {
- "Dynamic Sprites",
- 0,
- 0,
- WriteDynamicSprites,
- ReadDynamicSprites
- },
- {
- "Overlays",
- 3,
- 0,
- WriteOverlays,
- ReadOverlays
- },
- {
- "Dynamic Surfaces",
- 0,
- 0,
- WriteDynamicSurfaces,
- ReadDynamicSurfaces
- },
- {
- "Script Modules",
- 0,
- 0,
- WriteScriptModules,
- ReadScriptModules
- },
- {
- "Room States",
- 3,
- 0,
- WriteRoomStates,
- ReadRoomStates
- },
- {
- "Loaded Room State",
- 3, // must correspond to "Room States"
- 0,
- WriteThisRoom,
- ReadThisRoom
- },
- {
- "Managed Pool",
- 0,
- 0,
- WriteManagedPool,
- ReadManagedPool
- },
- {
- "Plugin Data",
- 0,
- 0,
- WritePluginData,
- ReadPluginData
- },
- { nullptr, 0, 0, nullptr, nullptr } // end of array
+struct ComponentHandlers {
+ const ComponentHandler _items[17] = {
+ {
+ "Game State",
+ kGSSvgVersion_350_10,
+ kGSSvgVersion_Initial,
+ WriteGameState,
+ ReadGameState
+ },
+ {
+ "Audio",
+ 2,
+ 0,
+ WriteAudio,
+ ReadAudio
+ },
+ {
+ "Characters",
+ 2,
+ 0,
+ WriteCharacters,
+ ReadCharacters
+ },
+ {
+ "Dialogs",
+ 0,
+ 0,
+ WriteDialogs,
+ ReadDialogs
+ },
+ {
+ "GUI",
+ kGuiSvgVersion_36025,
+ kGuiSvgVersion_Initial,
+ WriteGUI,
+ ReadGUI
+ },
+ {
+ "Inventory Items",
+ 0,
+ 0,
+ WriteInventory,
+ ReadInventory
+ },
+ {
+ "Mouse Cursors",
+ 1,
+ 0,
+ WriteMouseCursors,
+ ReadMouseCursors
+ },
+ {
+ "Views",
+ 0,
+ 0,
+ WriteViews,
+ ReadViews
+ },
+ {
+ "Dynamic Sprites",
+ 0,
+ 0,
+ WriteDynamicSprites,
+ ReadDynamicSprites
+ },
+ {
+ "Overlays",
+ 3,
+ 0,
+ WriteOverlays,
+ ReadOverlays
+ },
+ {
+ "Dynamic Surfaces",
+ 0,
+ 0,
+ WriteDynamicSurfaces,
+ ReadDynamicSurfaces
+ },
+ {
+ "Script Modules",
+ 0,
+ 0,
+ WriteScriptModules,
+ ReadScriptModules
+ },
+ {
+ "Room States",
+ 3,
+ 0,
+ WriteRoomStates,
+ ReadRoomStates
+ },
+ {
+ "Loaded Room State",
+ 3, // must correspond to "Room States"
+ 0,
+ WriteThisRoom,
+ ReadThisRoom
+ },
+ {
+ "Managed Pool",
+ 0,
+ 0,
+ WriteManagedPool,
+ ReadManagedPool
+ },
+ {
+ "Plugin Data",
+ 0,
+ 0,
+ WritePluginData,
+ ReadPluginData
+ },
+ { nullptr, 0, 0, nullptr, nullptr } // end of array
+ };
+ const ComponentHandler &operator[](uint idx) {
+ return _items[idx];
+ }
};
+ComponentHandlers *g_componentHandlers;
+
+void component_handlers_init() {
+ g_componentHandlers = new ComponentHandlers();
+}
+void component_handlers_free() {
+ delete g_componentHandlers;
+}
typedef std::map<String, ComponentHandler> HandlersMap;
void GenerateHandlersMap(HandlersMap &map) {
map.clear();
- for (int i = 0; !ComponentHandlers[i].Name.IsEmpty(); ++i)
- map[ComponentHandlers[i].Name] = ComponentHandlers[i];
+ for (int i = 0; !(*g_componentHandlers)[i].Name.IsEmpty(); ++i)
+ map[(*g_componentHandlers)[i].Name] = (*g_componentHandlers)[i];
}
// A helper struct to pass to (de)serialization handlers
@@ -1263,11 +1276,11 @@ HSaveError WriteComponent(Stream *out, const ComponentHandler &hdlr) {
HSaveError WriteAllCommon(Stream *out) {
const String ComponentListTag = "Components";
WriteFormatTag(out, ComponentListTag, true);
- for (int type = 0; !ComponentHandlers[type].Name.IsEmpty(); ++type) {
- HSaveError err = WriteComponent(out, ComponentHandlers[type]);
+ for (int type = 0; !(*g_componentHandlers)[type].Name.IsEmpty(); ++type) {
+ HSaveError err = WriteComponent(out, (*g_componentHandlers)[type]);
if (!err) {
return new SavegameError(kSvgErr_ComponentSerialization,
- String::FromFormat("Component: (#%d) %s", type, ComponentHandlers[type].Name.GetCStr()),
+ String::FromFormat("Component: (#%d) %s", type, (*g_componentHandlers)[type].Name.GetCStr()),
err);
}
update_polled_stuff_if_runtime();
diff --git a/engines/ags/engine/game/savegame_components.h b/engines/ags/engine/game/savegame_components.h
index 1aad5c4b132..9a696711cf9 100644
--- a/engines/ags/engine/game/savegame_components.h
+++ b/engines/ags/engine/game/savegame_components.h
@@ -41,6 +41,10 @@ struct PreservedParams;
struct RestoredData;
namespace SavegameComponents {
+
+extern void component_handlers_init();
+extern void component_handlers_free();
+
// Reads all available components from the stream
HSaveError ReadAll(Stream *in, SavegameVersion svg_version, const PreservedParams &pp, RestoredData &r_data);
// Writes a full list of common components to the stream
More information about the Scummvm-git-logs
mailing list