[Scummvm-git-logs] scummvm-tools master -> 7c1089ae403a81aa6ef3ba3a4c9f2bfb911b58cf
sev-
noreply at scummvm.org
Mon Jan 2 23:52:58 UTC 2023
This automated email contains information about 13 new commits which have been
pushed to the 'scummvm-tools' repo located at https://github.com/scummvm/scummvm-tools .
Summary:
4f0cbf267c GOB: add v7 opcodes (Adibou2/Adi4) in degob
f61a3d7ad8 GOB: fix o1_loadMultObject
9ea5f8c825 GOB: fix o1_copySprite
d26fc3e3bc GOB: more informative o1_loadMultObject
95e1138cd0 GOB: fix missing cases in o1_palLoad
a3b6e31586 GOB: add support of IDE files in degob (named function offsets)
462e36e94e GOB: --lib mode in degob to use named function offsets as entry points
2b7d4c90e6 GOB: more detailed degob --help message
33918927b4 GOB: fix o7_oemToANSI not being written to degob output
6cb3a5c6a3 GOB: fix an incorrect indentation
fc86ad2002 GOB: revert "fix missing cases in o1_palLoad", which introduced a regression
9665c9e68f GOB: correctly add missing cases 55 and 56 in o1_palLoad
7c1089ae40 GOB: GPLv2 -> GPLv3 in degob_script_v7.cpp
Commit: 4f0cbf267ce5adea4aa88585ad0c7a7bfb851e18
https://github.com/scummvm/scummvm-tools/commit/4f0cbf267ce5adea4aa88585ad0c7a7bfb851e18
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: add v7 opcodes (Adibou2/Adi4) in degob
Changed paths:
A engines/gob/degob_script_v7.cpp
Makefile.common
engines/gob/degob.cpp
engines/gob/degob_script.h
engines/gob/degob_script_v2.cpp
diff --git a/Makefile.common b/Makefile.common
index e9fafb79..0cd11e01 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -138,6 +138,7 @@ degob_OBJS := \
engines/gob/degob_script_v4.o \
engines/gob/degob_script_v5.o \
engines/gob/degob_script_v6.o \
+ engines/gob/degob_script_v7.o \
engines/gob/degob_script_bargon.o \
engines/gob/degob_script_fascin.o \
engines/gob/degob_script_littlered.o \
@@ -205,6 +206,7 @@ degob_OBJS := \
engines/gob/degob_script_v4.o \
engines/gob/degob_script_v5.o \
engines/gob/degob_script_v6.o \
+ engines/gob/degob_script_v7.o \
engines/gob/degob_script_bargon.o \
engines/gob/degob_script_fascin.o \
engines/gob/degob_script_geisha.o \
diff --git a/engines/gob/degob.cpp b/engines/gob/degob.cpp
index fbb865eb..e1843d88 100644
--- a/engines/gob/degob.cpp
+++ b/engines/gob/degob.cpp
@@ -126,6 +126,7 @@ void printHelp(const char *bin) {
printf(" Urban - Urban Runner\n");
printf(" Geisha - Geisha\n");
printf(" LittleRed - Once Upon A Time: Little Red Riding Hood\n");
+ printf(" Adibou2 - Adibou 2\n");
}
int getVersion(const char *verStr) {
@@ -153,6 +154,8 @@ int getVersion(const char *verStr) {
return 10;
else if (!scumm_stricmp(verStr, "LittleRed"))
return 11;
+ else if (!scumm_stricmp(verStr, "Adibou2"))
+ return 12;
return -1;
}
@@ -199,13 +202,16 @@ Script *initScript(byte *totData, uint32 totSize, ExtTable *extTable, int versio
break;
case 9:
return new Script_v6(totData, totSize, extTable);
- break;
+ break;
case 10:
return new Script_Geisha(totData, totSize, extTable);
break;
case 11:
return new Script_LittleRed(totData, totSize, extTable);
break;
+ case 12:
+ return new Script_v7(totData, totSize, extTable);
+ break;
}
return 0;
}
diff --git a/engines/gob/degob_script.h b/engines/gob/degob_script.h
index d4800ff5..135c8a65 100644
--- a/engines/gob/degob_script.h
+++ b/engines/gob/degob_script.h
@@ -622,4 +622,47 @@ protected:
void o6_createSprite(FuncParams ¶ms);
};
+class Script_v7 : public Script_v6 {
+public:
+ Script_v7(byte *totData, uint32 totSize, ExtTable *extTable = 0);
+ virtual ~Script_v7();
+
+protected:
+ typedef void (Script_v7::*OpcodeDrawProcV7)(FuncParams &);
+ typedef void (Script_v7::*OpcodeFuncProcV7)(FuncParams &);
+ typedef void (Script_v7::*OpcodeGoblinProcV7)(FuncParams &);
+ struct OpcodeDrawEntryV7 {
+ FuncType type;
+ OpcodeDrawProcV7 proc;
+ const char *desc;
+ const Param params[16];
+ };
+ struct OpcodeFuncEntryV7 {
+ FuncType type;
+ OpcodeFuncProcV7 proc;
+ const char *desc;
+ const Param params[16];
+ };
+ struct OpcodeGoblinEntryV7 {
+ FuncType type;
+ OpcodeGoblinProcV7 proc;
+ const char *desc;
+ const Param params[16];
+ };
+ const OpcodeDrawEntryV7 *_opcodesDrawV7;
+ const OpcodeFuncEntryV7 *_opcodesFuncV7;
+ const OpcodeGoblinEntryV7 *_opcodesGoblinV7;
+ static const int _goblinFuncLookUp[][2];
+
+ virtual void setupOpcodes();
+ virtual void drawOpcode(byte i, FuncParams ¶ms);
+ virtual void funcOpcode(byte i, byte j, FuncParams ¶ms);
+ virtual void goblinOpcode(int i, FuncParams ¶ms);
+
+ void o7_loadCursor(FuncParams ¶ms);
+ void oPlaytoons_printText(FuncParams ¶ms);
+ void o7_oemToANSI(FuncParams ¶ms);
+ void oPlaytoons_freeSprite(FuncParams ¶ms);
+};
+
#endif // DEGOB_SCRIPT_H
diff --git a/engines/gob/degob_script_v2.cpp b/engines/gob/degob_script_v2.cpp
index f489e78c..162737c6 100644
--- a/engines/gob/degob_script_v2.cpp
+++ b/engines/gob/degob_script_v2.cpp
@@ -886,7 +886,7 @@ void Script_v2::o2_loadMapObjects(FuncParams ¶ms) {
id = (int16) readUint16();
print("%d", id);
- if (id != -1) {
+ if ((uint16) id < 65520) {
int16 count = (int16) readUint16();
print(", %d", count);
for (int i = 0; i < count; i++)
diff --git a/engines/gob/degob_script_v7.cpp b/engines/gob/degob_script_v7.cpp
new file mode 100644
index 00000000..e6ef58b9
--- /dev/null
+++ b/engines/gob/degob_script_v7.cpp
@@ -0,0 +1,784 @@
+/* ScummVM Tools
+ *
+ * ScummVM Tools is the legal property of its developers, whose
+ * names are too numerous to list here. Please refer to the
+ * COPYRIGHT file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* GobEngine Script disassembler */
+
+#include "degob_script.h"
+#include "common/util.h"
+
+#define OPCODET(x) _OPCODET(Script_v7, x)
+#define OPCODEF(x) _OPCODEF(Script_v7, x)
+#define OPCODEB(x) _OPCODEB(Script_v, x)
+
+const int Script_v7::_goblinFuncLookUp[][2] = {
+ {0, 0},
+ {1, 1},
+ {2, 2},
+ {4, 3},
+ {5, 4},
+ {6, 5},
+ {7, 6},
+ {8, 7},
+ {9, 8},
+ {10, 9},
+ {12, 10},
+ {13, 71},
+ {14, 12},
+ {15, 13},
+ {16, 14},
+ {21, 15},
+ {22, 16},
+ {23, 17},
+ {24, 18},
+ {25, 19},
+ {26, 20},
+ {27, 21},
+ {28, 22},
+ {29, 23},
+ {30, 24},
+ {32, 25},
+ {33, 26},
+ {34, 27},
+ {35, 28},
+ {36, 29},
+ {37, 30},
+ {40, 31},
+ {41, 32},
+ {42, 33},
+ {43, 34},
+ {44, 35},
+ {50, 36},
+ {52, 37},
+ {53, 38},
+ {100, 39},
+ {152, 40},
+ {200, 41},
+ {201, 42},
+ {202, 43},
+ {203, 44},
+ {204, 45},
+ {250, 46},
+ {251, 47},
+ {252, 48},
+ {500, 49},
+ {502, 50},
+ {503, 51},
+ {600, 52},
+ {601, 53},
+ {602, 54},
+ {603, 55},
+ {604, 56},
+ {605, 57},
+ {1000, 58},
+ {1001, 59},
+ {1002, 60},
+ {1003, 61},
+ {1004, 62},
+ {1005, 63},
+ {1006, 64},
+ {1008, 65},
+ {1009, 66},
+ {1010, 67},
+ {1011, 68},
+ {1015, 69},
+ {2005, 70},
+ {3, 71},
+ {420, 72},
+ {513, 73}
+};
+
+Script_v7::Script_v7(byte *totData, uint32 totSize, ExtTable *extTable) :
+ Script_v6(totData, totSize, extTable) {
+
+ setupOpcodes();
+}
+
+Script_v7::~Script_v7() {
+}
+
+void Script_v7::setupOpcodes() {
+ static const OpcodeDrawEntryV7 opcodesDraw[256] = {
+ /* 00 */
+ {OPCODEF(o2_loadMult), {PARAM_NONE}},
+ {OPCODEF(o2_playMult), {PARAM_NONE}},
+ {OPCODET(o2_freeMultKeys), {PARAM_UINT16}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 04 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODET(o1_initCursor), {PARAM_VARINDEX, PARAM_VARINDEX, PARAM_INT16, PARAM_INT16, PARAM_INT16}},
+ /* 08 */
+ {OPCODET(o1_initCursorAnim), {PARAM_EXPR, PARAM_INT16, PARAM_INT16, PARAM_INT16}},
+ {OPCODET(o1_clearCursorAnim), {PARAM_EXPR}},
+ {OPCODET(o2_setRenderFlags), {PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 0C */
+ {OPCODET(o2_draw0x0C), {PARAM_NONE}},
+ {OPCODET(o7_setCursorToLoadFromExec), {PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 10 */
+ {OPCODEF(o1_loadAnim), {PARAM_NONE}},
+ {OPCODET(o1_freeAnim), {PARAM_EXPR}},
+ {OPCODET(o1_updateAnim), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_UINT16}},
+ {OPCODET(o2_multSub), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ /* 14 */
+ {OPCODET(o2_initMult), {PARAM_INT16, PARAM_INT16, PARAM_INT16, PARAM_INT16, PARAM_INT16, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX}},
+ {OPCODET(o1_freeMult), {PARAM_NONE}},
+ {OPCODET(o1_animate), {PARAM_NONE}},
+ {OPCODEF(o2_loadMultObject), {PARAM_NONE}},
+ /* 18 */
+ {OPCODET(o1_getAnimLayerInfo), {PARAM_EXPR, PARAM_EXPR, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX}},
+ {OPCODET(o1_getObjAnimSize), {PARAM_EXPR, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX}},
+ {OPCODEF(o1_loadStatic), {PARAM_NONE}},
+ {OPCODET(o1_freeStatic), {PARAM_EXPR}},
+ /* 1C */
+ {OPCODET(o2_renderStatic), {PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o2_loadCurLayer), {PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 20 */
+ {OPCODET(o2_playCDTrack), {PARAM_EXPR}},
+ {OPCODET(o2_waitCDTrackEnd), {PARAM_NONE}},
+ {OPCODET(o2_stopCD), {PARAM_NONE}},
+ {OPCODET(o2_readLIC), {PARAM_EXPR}},
+ /* 24 */
+ {OPCODET(o2_freeLIC), {PARAM_NONE}},
+ {OPCODET(o2_getCDTrackPos), {PARAM_VARINDEX, PARAM_VARINDEX}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 28 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 2C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 30 */
+ {OPCODET(o2_loadFontToSprite), {PARAM_INT16, PARAM_INT16, PARAM_INT16, PARAM_INT16, PARAM_INT16}},
+ {OPCODET(o1_freeFontToSprite), {PARAM_INT16}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 34 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 38 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 3C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 40 */
+ {OPCODEF(o2_totSub), {PARAM_NONE}},
+ {OPCODET(o2_switchTotSub), {PARAM_UINT16, PARAM_UINT16}},
+ {OPCODEF(o2_pushVars), {PARAM_NONE}},
+ {OPCODEF(o2_popVars), {PARAM_NONE}},
+ /* 44 */
+ {OPCODET(o7_displayWarning), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o7_logString), {PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 48 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 4C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 50 */
+ {OPCODEF(o2_loadMapObjects), {PARAM_NONE}},
+ {OPCODET(o2_freeGoblins), {PARAM_NONE}},
+ {OPCODET(o2_moveGoblin), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o2_writeGoblinPos), {PARAM_VARINDEX, PARAM_VARINDEX, PARAM_EXPR}},
+ /* 54 */
+ {OPCODET(o2_stopGoblin), {PARAM_EXPR}},
+ {OPCODET(o2_setGoblinState), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o2_placeGoblin), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o7_intToString), {PARAM_VARINDEX, PARAM_VARINDEX}},
+ /* 58 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODET(o7_callFunction), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o7_loadFunctions), {PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 5C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 60 */
+ {OPCODET(o7_copyFile), {PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o5_deleteFile), {PARAM_EXPR}},
+ {OPCODET(o7_moveFile), {PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 64 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 68 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 6C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 70 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 74 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 78 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 7C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 80 */
+ {OPCODET(o2_initScreen), {PARAM_UINT8, PARAM_UINT8, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o2_scroll), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o2_setScrollOffset), {PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o4_playVmdOrMusic), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ /* 84 */
+ {OPCODET(o2_getImdInfo), {PARAM_EXPR, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX, PARAM_VARINDEX}},
+ {OPCODET(oPlaytoons_openItk), {PARAM_EXPR}},
+ {OPCODET(o2_closeItk), {PARAM_NONE}},
+ {OPCODET(o2_setImdFrontSurf), {PARAM_NONE}},
+ /* 88 */
+ {OPCODET(o2_resetImdFrontSurf), {PARAM_NONE}},
+ {OPCODET(o7_draw0x89), {PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o7_findFile), {PARAM_EXPR, PARAM_VARINDEX, PARAM_VARINDEX}},
+ {OPCODET(o7_findCDFile),{PARAM_VARINDEX, PARAM_VARINDEX}},
+ /* 8C */
+ {OPCODET(o7_getSystemProperty), {PARAM_EXPR, PARAM_VARINDEX}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 90 */
+ {OPCODET(o7_loadImage), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODET(o7_setVolume), {PARAM_EXPR}},
+ /* 94 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODET(o7_zeroVar), {PARAM_VARINDEX}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 98 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 9C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* A0 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODET(o7_getINIValue), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_VARINDEX}},
+ {OPCODET(o7_setINIValue), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* A4 */
+ {OPCODET(o7_loadIFFPalette), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* A8 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* AC */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* B0 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* B4 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* B8 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* BC */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* C0 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* C4 */
+ {OPCODET(o7_opendBase), {PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o7_closedBase), {PARAM_EXPR}},
+ {OPCODET(o7_getDBString), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* C8 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* CC */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* D0 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* D4 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* D8 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* DC */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* E0 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* E4 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* E8 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* EC */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* F0 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* F4 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* F8 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* FC */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ };
+
+ static const OpcodeFuncEntryV7 opcodesFunc[80] = {
+ /* 00 */
+ {OPCODEF(o1_callSub), {PARAM_NONE}},
+ {OPCODEF(o1_callSub), {PARAM_NONE}},
+ {OPCODET(o1_printTotText), {PARAM_INT16}},
+ {OPCODEF(o7_loadCursor), {PARAM_NONE}},
+ /* 04 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODEF(o1_switch), {PARAM_NONE}},
+ {OPCODEF(o1_repeatUntil), {PARAM_NONE}},
+ {OPCODEF(o1_whileDo), {PARAM_NONE}},
+ /* 08 */
+ {OPCODEF(o1_if), {PARAM_NONE}},
+ {OPCODEF(o6_assign), {PARAM_NONE}},
+ {OPCODEF(o1_loadSpriteToPos), {PARAM_NONE}},
+ {OPCODEF(oPlaytoons_printText), {PARAM_NONE}},
+ /* 0C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 10 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODEF(o2_printText), {PARAM_NONE}},
+ {OPCODEF(o1_loadTot), {PARAM_NONE}},
+ {OPCODEF(o1_palLoad), {PARAM_NONE}},
+ /* 14 */
+ {OPCODET(o1_keyFunc), {PARAM_INT16}},
+ {OPCODET(o1_capturePush), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o1_capturePop), {PARAM_NONE}},
+ {OPCODET(o2_animPalInit), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR}},
+ /* 18 */
+ {OPCODET(o2_addHotspot), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_UINT16}},
+ {OPCODET(o2_removeHotspot), {PARAM_EXPR}},
+ {OPCODET(o3_getTotTextItemPart), {PARAM_UINT16, PARAM_VARINDEX, PARAM_EXPR}},
+ {OPCODET(oPlaytoons_F_1B), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_UINT16}},
+ /* 1C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODEF(o1_drawOperations), {PARAM_NONE}},
+ {OPCODEF(o1_setcmdCount), {PARAM_NONE}},
+ /* 20 */
+ {OPCODEF(o1_return), {PARAM_NONE}},
+ {OPCODET(o1_renewTimeInVars), {PARAM_NONE}},
+ {OPCODET(o1_speakerOn), {PARAM_EXPR}},
+ {OPCODET(o1_speakerOff), {PARAM_NONE}},
+ /* 24 */
+ {OPCODET(o1_putPixel), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODEF(o2_goblinFunc), {PARAM_NONE}},
+ {OPCODEF(o6_createSprite), {PARAM_NONE}},
+ {OPCODEF(oPlaytoons_freeSprite), {PARAM_NONE}},
+ /* 28 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 2C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 30 */
+ {OPCODEF(o1_returnTo), {PARAM_NONE}},
+ {OPCODET(o1_loadSpriteContent), {PARAM_INT16, PARAM_INT16, PARAM_INT16}},
+ {OPCODET(o3_copySprite), {PARAM_INT16, PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_INT16}},
+ {OPCODET(o1_fillRect), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ /* 34 */
+ {OPCODET(o1_drawLine), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o1_strToLong), {PARAM_VARINDEX, PARAM_VARINDEX}},
+ {OPCODET(o1_invalidate), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o1_setBackDelta), {PARAM_EXPR, PARAM_EXPR}},
+ /* 38 */
+ {OPCODET(o1_playSound), {PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o2_stopSound), {PARAM_EXPR}},
+ {OPCODEF(o2_loadSound), {PARAM_NONE}},
+ {OPCODET(o1_freeSoundSlot), {PARAM_EXPR}},
+ /* 3C */
+ {OPCODET(o1_waitEndPlay), {PARAM_NONE}},
+ {OPCODET(o1_playComposition), {PARAM_VARINDEX, PARAM_EXPR}},
+ {OPCODET(o2_getFreeMem), {PARAM_VARINDEX, PARAM_VARINDEX}},
+ {OPCODET(o2_checkData), {PARAM_EXPR, PARAM_VARINDEX}},
+ /* 40 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODET(o1_cleanupStr), {PARAM_VARINDEX}},
+ {OPCODET(o1_insertStr), {PARAM_VARINDEX, PARAM_EXPR}},
+ {OPCODET(o1_cutStr), {PARAM_VARINDEX, PARAM_EXPR, PARAM_EXPR}},
+ /* 44 */
+ {OPCODET(o1_strstr), {PARAM_VARINDEX, PARAM_EXPR, PARAM_VARINDEX}},
+ {OPCODEF(o5_istrlen), {PARAM_NONE}},
+ {OPCODET(o1_setMousePos), {PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o1_setFrameRate), {PARAM_EXPR}},
+ /* 48 */
+ {OPCODET(o1_animatePalette), {PARAM_NONE}},
+ {OPCODET(o1_animateCursor), {PARAM_NONE}},
+ {OPCODET(o1_blitCursor), {PARAM_NONE}},
+ {OPCODET(o1_loadFont), {PARAM_EXPR, PARAM_INT16}},
+ /* 4C */
+ {OPCODET(o1_freeFont), {PARAM_INT16}},
+ {OPCODET(o7_readData), {PARAM_EXPR, PARAM_VARINDEX, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o2_writeData), {PARAM_EXPR, PARAM_VARINDEX, PARAM_EXPR, PARAM_EXPR}},
+ {OPCODET(o1_manageDataFile), {PARAM_EXPR}},
+ };
+
+ static const OpcodeGoblinEntryV7 opcodesGoblin[74] = {
+ /* 00 */
+ {OPCODEF(o1_dummy), {PARAM_NONE}},
+ {OPCODET(o2_startInfogrames), {PARAM_UINT16}},
+ {OPCODET(o2_stopInfogrames), {PARAM_UINT16}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 04 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 08 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODEF(o2_playInfogrames), {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 0C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 10 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 14 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 18 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 1C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 20 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 24 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODET(o3_wobble), {PARAM_NONE}},
+ /* 28 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 2C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 30 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 34 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 38 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 3C */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 40 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ /* 44 */
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {TYPE_NONE, 0, 0, {PARAM_NONE}},
+ {OPCODEF(o1_dummy), {PARAM_NONE}},
+ {OPCODEF(o7_oemToANSI), {PARAM_NONE}},
+ {OPCODET(o7_gob0x201), {PARAM_UINT16}}
+ };
+
+ _opcodesDrawV7 = opcodesDraw;
+ _opcodesFuncV7 = opcodesFunc;
+ _opcodesGoblinV7 = opcodesGoblin;
+}
+
+void Script_v7::drawOpcode(byte i, FuncParams ¶ms) {
+ FuncType type = _opcodesDrawV7[i].type;
+ params.desc = _opcodesDrawV7[i].desc;
+ OpcodeDrawProcV7 op = _opcodesDrawV7[i].proc;
+
+ if (type == TYPE_NONE)
+ warning("No such opcodeDraw: %d", i);
+ if ((type == TYPE_TEXTDESC) || (type == TYPE_BOTHDESC))
+ printFuncDesc(params, _opcodesDrawV7[i].params);
+ if ((type == TYPE_FUNCDESC) || (type == TYPE_BOTHDESC))
+ (this->*op)(params);
+}
+
+void Script_v7::funcOpcode(byte i, byte j, FuncParams ¶ms) {
+ int n = i*16 + j;
+ FuncType type = TYPE_NONE;
+ OpcodeFuncProcV7 op = 0;
+
+ if ((i <= 4) && (j <= 15)) {
+ op = _opcodesFuncV7[n].proc;
+ params.desc = _opcodesFuncV7[n].desc;
+ type = _opcodesFuncV7[n].type;
+ }
+
+ if (type == TYPE_NONE)
+ error("No such opcodeFunc: %d.%d", i, j);
+ if ((type == TYPE_TEXTDESC) || (type == TYPE_BOTHDESC))
+ printFuncDesc(params, _opcodesFuncV7[n].params);
+ if ((type == TYPE_FUNCDESC) || (type == TYPE_BOTHDESC))
+ (this->*op)(params);
+}
+
+void Script_v7::goblinOpcode(int i, FuncParams ¶ms) {
+ int n = -1;
+ for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++)
+ if (_goblinFuncLookUp[j][0] == i) {
+ n = _goblinFuncLookUp[j][1];
+ break;
+ }
+
+ FuncType type = TYPE_NONE;
+ OpcodeGoblinProcV7 op = 0;
+
+ if (n >= 0) {
+ op = _opcodesGoblinV7[n].proc;
+ params.desc = _opcodesGoblinV7[n].desc;
+ type = _opcodesGoblinV7[n].type;
+ }
+
+ if (type == TYPE_NONE) {
+ warning("No such opcodeGoblin: %d (%d)", i, n);
+ o1_dummy(params);
+ }
+ if ((type == TYPE_TEXTDESC) || (type == TYPE_BOTHDESC)) {
+ const Param *param = _opcodesGoblinV7[n].params;
+ if (*param == PARAM_GOB)
+ printFuncDesc(params);
+ else
+ printFuncDesc(params, param);
+ }
+ if ((type == TYPE_FUNCDESC) || (type == TYPE_BOTHDESC))
+ (this->*op)(params);
+}
+
+void Script_v7::o7_loadCursor(FuncParams ¶ms) {
+ int16 id = (int16) readUint16();
+
+ startFunc(params);
+ print("%d, ", id);
+ if (id == -1) {
+ print("%s, ", peekString());
+ skip(9);
+ print("%d, ", readUint16());
+ print("%d", (int8) readUint8());
+ } else if (id == -2) {
+ print("%d, ", readUint16());
+ print("%d, ", readUint16());
+ print("%d", (int8) readUint8());
+ } else {
+ print("%d", (int8) readUint8());
+ }
+ endFunc();
+}
+
+
+void Script_v7::oPlaytoons_printText(FuncParams ¶ms)
+{
+ startFunc(params);
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+ print("%s", readExpr().c_str());
+
+ do {
+ print(", \"");
+ for (int i = 0; (((char) (peekUint8())) != '.') && (peekUint8() != 200); i++)
+ print("%c", (char) readUint8());
+
+ if (peekUint8() != 200) {
+ skip(1);
+
+ print("\", ");
+ switch (peekUint8()) {
+ case 16:
+ case 17:
+ case 18:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ print("%s", readVarIndex().c_str());
+ break;
+ }
+ skip(1);
+ } else
+ print("\"");
+
+ } while (peekUint8() != 200);
+
+ endFunc();
+
+ skip(1);
+}
+
+void Script_v7::o7_oemToANSI(FuncParams ¶ms)
+{
+ skip(2);
+}
+
+void Script_v7::oPlaytoons_freeSprite(FuncParams ¶ms)
+{
+ startFunc(params);
+ if (peekUint8(1) == 0)
+ print("%d", readUint16());
+ else
+ print("%s", readExpr().c_str());
+ endFunc();
+}
\ No newline at end of file
Commit: f61a3d7ad830fa6b840f52bde794abfbb287e3eb
https://github.com/scummvm/scummvm-tools/commit/f61a3d7ad830fa6b840f52bde794abfbb287e3eb
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: fix o1_loadMultObject
Changed paths:
engines/gob/degob_script_v1.cpp
diff --git a/engines/gob/degob_script_v1.cpp b/engines/gob/degob_script_v1.cpp
index 9dff22a2..5d2b2b99 100644
--- a/engines/gob/degob_script_v1.cpp
+++ b/engines/gob/degob_script_v1.cpp
@@ -1128,10 +1128,16 @@ void Script_v1::o1_loadMultObject(FuncParams ¶ms) {
print("%s, ", readExpr().c_str());
print("%s, ", readExpr().c_str());
print("%s", readExpr().c_str());
- endFunc();
for (int i = 0; i < 11; i++)
- readExpr();
+ {
+ if (peekUint8() != 99)
+ readExpr();
+ else
+ skip(1);
+ }
+
+ endFunc();
}
void Script_v1::o1_dummy(FuncParams ¶ms) {
Commit: 9ea5f8c82505bf038e8555153f9298a22c6942e1
https://github.com/scummvm/scummvm-tools/commit/9ea5f8c82505bf038e8555153f9298a22c6942e1
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: fix o1_copySprite
Changed paths:
engines/gob/degob_script.cpp
engines/gob/degob_script.h
engines/gob/degob_script_v1.cpp
engines/gob/degob_script_v7.cpp
diff --git a/engines/gob/degob_script.cpp b/engines/gob/degob_script.cpp
index 7f4b2254..05e38e29 100644
--- a/engines/gob/degob_script.cpp
+++ b/engines/gob/degob_script.cpp
@@ -251,13 +251,13 @@ void Script::seek(uint32 off, int whence) {
}
}
-uint8 Script::peekUint8() const { return *_ptr; }
-uint16 Script::peekUint16() const { return READ_LE_UINT16(_ptr); }
-uint32 Script::peekUint32() const { return READ_LE_UINT32(_ptr); }
+uint8 Script::peekUint8(int32 offset) const { return *(_ptr + offset); }
+uint16 Script::peekUint16(int32 offset) const { return READ_LE_UINT16(_ptr + offset); }
+uint32 Script::peekUint32(int32 offset) const { return READ_LE_UINT32(_ptr + offset); }
uint8 Script::readUint8() { uint8 i = peekUint8(); _ptr += 1; return i; }
uint16 Script::readUint16() { uint16 i = peekUint16(); _ptr += 2; return i; }
uint32 Script::readUint32() { uint32 i = peekUint32(); _ptr += 4; return i; }
-const char *Script::peekString() const { return (char *) _ptr; }
+const char *Script::peekString(int32 offset) const { return (char *) _ptr + offset; }
const char *Script::readString() { const char *i = peekString(); _ptr += strlen(i) + 1; return i; }
void Script::skipExpr(char stopToken) {
diff --git a/engines/gob/degob_script.h b/engines/gob/degob_script.h
index 135c8a65..1b712187 100644
--- a/engines/gob/degob_script.h
+++ b/engines/gob/degob_script.h
@@ -136,10 +136,10 @@ protected:
uint32 readUint32();
const char *readString();
- uint8 peekUint8() const;
- uint16 peekUint16() const;
- uint32 peekUint32() const;
- const char *peekString() const;
+ uint8 peekUint8(int32 offset = 0) const;
+ uint16 peekUint16(int32 offset = 0) const;
+ uint32 peekUint32(int32 offset = 0) const;
+ const char *peekString(int32 offset = 0) const;
void skipExpr(char stopToken = 99);
std::string readExpr(char stopToken = 99);
@@ -248,6 +248,7 @@ protected:
void o1_loadMultObject(FuncParams ¶ms);
void o1_dummy(FuncParams ¶ms);
+ void o1_copySprite(FuncParams ¶ms);
};
class Script_v2 : public Script_v1 {
diff --git a/engines/gob/degob_script_v1.cpp b/engines/gob/degob_script_v1.cpp
index 5d2b2b99..efe42806 100644
--- a/engines/gob/degob_script_v1.cpp
+++ b/engines/gob/degob_script_v1.cpp
@@ -1145,3 +1145,26 @@ void Script_v1::o1_dummy(FuncParams ¶ms) {
uint16 size = readUint16();
skip(size * 2);
}
+
+void Script_v1::o1_copySprite(FuncParams ¶ms) {
+ startFunc(params);
+ if (peekUint8(1) == 0)
+ print("%d, ", readUint16());
+ else
+ print("%s, ", readExpr().c_str());
+
+ if (peekUint8(1) == 0)
+ print("%d, ", readUint16());
+ else
+ print("%s, ", readExpr().c_str());
+
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
+
+ print("%d", readUint16());
+ endFunc();
+}
\ No newline at end of file
diff --git a/engines/gob/degob_script_v7.cpp b/engines/gob/degob_script_v7.cpp
index e6ef58b9..241bc6f6 100644
--- a/engines/gob/degob_script_v7.cpp
+++ b/engines/gob/degob_script_v7.cpp
@@ -502,7 +502,7 @@ void Script_v7::setupOpcodes() {
/* 30 */
{OPCODEF(o1_returnTo), {PARAM_NONE}},
{OPCODET(o1_loadSpriteContent), {PARAM_INT16, PARAM_INT16, PARAM_INT16}},
- {OPCODET(o3_copySprite), {PARAM_INT16, PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_INT16}},
+ {OPCODEF(o1_copySprite), {PARAM_INT16, PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_INT16}},
{OPCODET(o1_fillRect), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
/* 34 */
{OPCODET(o1_drawLine), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
Commit: d26fc3e3bcfcc59c6771066e6a1498f165700979
https://github.com/scummvm/scummvm-tools/commit/d26fc3e3bcfcc59c6771066e6a1498f165700979
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: more informative o1_loadMultObject
Changed paths:
engines/gob/degob_script_v1.cpp
engines/gob/degob_script_v7.cpp
diff --git a/engines/gob/degob_script_v1.cpp b/engines/gob/degob_script_v1.cpp
index efe42806..6abc7aad 100644
--- a/engines/gob/degob_script_v1.cpp
+++ b/engines/gob/degob_script_v1.cpp
@@ -1127,12 +1127,52 @@ void Script_v1::o1_loadMultObject(FuncParams ¶ms) {
startFunc(params);
print("%s, ", readExpr().c_str());
print("%s, ", readExpr().c_str());
- print("%s", readExpr().c_str());
+ print("%s, ", readExpr().c_str());
for (int i = 0; i < 11; i++)
{
if (peekUint8() != 99)
- readExpr();
+ {
+ switch (i) {
+ case 0:
+ printf("animation=");
+ break;
+ case 1:
+ printf("layer=");
+ break;
+ case 2:
+ printf("frame=");
+ break;
+ case 3:
+ printf("animType=");
+ break;
+ case 4:
+ printf("order=");
+ break;
+ case 5:
+ printf("isPaused=");
+ break;
+ case 6:
+ printf("isStatic=");
+ break;
+ case 7:
+ printf("maxTick=");
+ break;
+ case 8:
+ printf("maxFrame=");
+ break;
+ case 9:
+ printf("newLayer=");
+ break;
+ case 10:
+ printf("newAnimation=");
+ break;
+ default:
+ printf("unknownField=");
+ }
+
+ printf("%s%s", readExpr().c_str(), (i < 10)?", ":"");
+ }
else
skip(1);
}
diff --git a/engines/gob/degob_script_v7.cpp b/engines/gob/degob_script_v7.cpp
index 241bc6f6..f9a666a9 100644
--- a/engines/gob/degob_script_v7.cpp
+++ b/engines/gob/degob_script_v7.cpp
@@ -502,7 +502,7 @@ void Script_v7::setupOpcodes() {
/* 30 */
{OPCODEF(o1_returnTo), {PARAM_NONE}},
{OPCODET(o1_loadSpriteContent), {PARAM_INT16, PARAM_INT16, PARAM_INT16}},
- {OPCODEF(o1_copySprite), {PARAM_INT16, PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_INT16}},
+ {OPCODEF(o1_copySprite), {PARAM_NONE}},
{OPCODET(o1_fillRect), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
/* 34 */
{OPCODET(o1_drawLine), {PARAM_INT16, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR, PARAM_EXPR}},
Commit: 95e1138cd09a8e8817ed150a1b35e4cd085b25c3
https://github.com/scummvm/scummvm-tools/commit/95e1138cd09a8e8817ed150a1b35e4cd085b25c3
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: fix missing cases in o1_palLoad
Changed paths:
engines/gob/degob_script_v1.cpp
diff --git a/engines/gob/degob_script_v1.cpp b/engines/gob/degob_script_v1.cpp
index 6abc7aad..055b6dd5 100644
--- a/engines/gob/degob_script_v1.cpp
+++ b/engines/gob/degob_script_v1.cpp
@@ -926,6 +926,14 @@ void Script_v1::o1_palLoad(FuncParams ¶ms) {
break;
case 53:
+ skip(2);
+ return;
+
+ case 55:
+ skip(2);
+ break;
+
+ case 56:
skip(2);
break;
@@ -933,6 +941,57 @@ void Script_v1::o1_palLoad(FuncParams ¶ms) {
skip(4);
break;
}
+
+ if ((cmd & 0x7F) == 0x30) {
+ skip(48);
+ return;
+ }
+
+ cmd &= 0x7F;
+
+ if (cmd == 49) {
+ bool allZero = true;
+
+ for (int i = 2; i < 18; i++) {
+ if (peekUint8() != 0) {
+ allZero = false;
+ break;
+ }
+ }
+ if (!allZero) {
+ skip(48);
+ return;
+ }
+
+ for (int i = 0; i < 18; i++) {
+ skip(1);
+ }
+
+ return;
+ }
+
+ switch (cmd) {
+ case 50:
+ for (int i = 0; i < 16; i++)
+ readUint8();
+ break;
+
+ case 52:
+ for (int i = 0; i < 16; i++) {
+ readUint8();
+ readUint8();
+ readUint8();
+ }
+ break;
+
+ case 53:
+ readUint16();
+ break;
+
+ default:
+ break;
+
+ }
}
void Script_v1::o1_loadSpriteToPos(FuncParams ¶ms) {
Commit: a3b6e3158611e83e398c3ca27f4d19cd66831c30
https://github.com/scummvm/scummvm-tools/commit/a3b6e3158611e83e398c3ca27f4d19cd66831c30
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: add support of IDE files in degob (named function offsets)
Changed paths:
engines/gob/degob.cpp
engines/gob/degob_script.cpp
engines/gob/degob_script.h
diff --git a/engines/gob/degob.cpp b/engines/gob/degob.cpp
index e1843d88..4593ebba 100644
--- a/engines/gob/degob.cpp
+++ b/engines/gob/degob.cpp
@@ -47,11 +47,22 @@ int main(int argc, char **argv) {
return -1;
}
- byte *totData = 0, *extData = 0, *extComData = 0;
- uint32 totSize = 0, extSize = 0, extComSize = 0;
+ byte *totData = 0, *extData = 0, *extComData = 0, *ideData = 0;
+ uint32 totSize = 0, extSize = 0, extComSize = 0, ideSize = 0;
int32 offset = -1;
totData = readFile(argv[2], totSize);
+ std::string ideFilename = argv[2];
+
+ size_t extPos = ideFilename.find_last_of('.');
+ if (extPos == std::string::npos)
+ ideFilename += ".IDE";
+ else {
+ ideFilename.replace(extPos, ideFilename.length() - extPos, ".IDE");
+ }
+
+ if (Common::Filename(ideFilename).exists())
+ ideData = readFile(ideFilename.c_str(), ideSize);
ExtTable *extTable = 0;
if (argc > 3) {
@@ -97,6 +108,10 @@ int main(int argc, char **argv) {
return -1;
}
+ if (ideData) {
+ script->loadIDE(ideData);
+ delete[] ideData;
+ }
printInfo(*script);
printf("-----\n");
@@ -237,6 +252,7 @@ void printInfo(Script &script) {
printf("None\n");
printf("# of variables: %d (%d bytes)\n", script.getVarsCount(), script.getVarsCount() * 4);
+ printf("# of named functions: %d\n", script.getFuncNamesCount());
printf("AnimDataSize: %d bytes\n", script.getAnimDataSize());
printf("Text center code starts at: 0x%04X\n", script.getTextCenter());
printf("Script code starts at: 0x%04X\n", script.getStart());
diff --git a/engines/gob/degob_script.cpp b/engines/gob/degob_script.cpp
index 05e38e29..c3921b1d 100644
--- a/engines/gob/degob_script.cpp
+++ b/engines/gob/degob_script.cpp
@@ -198,6 +198,7 @@ uint8 Script::getVerScript() const { return _verScript; }
uint8 Script::getVerIMEX() const { return _verIMEX; }
uint8 Script::getSuffixIM() const { return _suffixIM; }
uint8 Script::getSuffixEX() const { return _suffixEX; }
+uint32 Script::getFuncNamesCount() const { return _funcOffsetsNames.size(); }
void Script::putString(const char *s) const {
printf("%s", s);
@@ -840,6 +841,39 @@ void Script::loadProperties(byte *data) {
_textCenter = READ_LE_UINT16(data + 0x7E);
}
+void Script::loadIDE(const byte *ideData) {
+ const byte *ptr = ideData;
+ char buffer[17];
+
+ uint16 count = *(const uint16 *)ptr;
+ ptr += 2;
+ for (uint32 i = 0; i < count; i++) {
+
+ // skip function type
+ byte functionType = *ptr;
+ ++ptr;
+
+ memcpy(buffer, ptr, 17);
+ buffer[16] = '\0';
+ ptr += 17;
+
+ // skip unknown word
+ ptr += 2;
+
+ // Read offset
+ uint16 offset = *(const uint16 *)ptr;
+ ptr += 2;
+
+ // skip unknown word
+ ptr += 2;
+
+ if ((functionType != 0x47) && (functionType != 0x67))
+ continue;
+
+ _funcOffsetsNames[offset] = buffer;
+ }
+}
+
void Script::funcBlock(int16 retFlag) {
FuncParams params;
byte cmd;
@@ -905,6 +939,12 @@ void Script::deGob(int32 offset) {
}
void Script::deGobFunction() {
+ if (!_funcOffsetsNames.empty()) {
+ auto it = _funcOffsetsNames.find(getPos());
+ if (it != _funcOffsetsNames.end()) {
+ print("--- %s ---\n", it->second.c_str());
+ }
+ }
printIndent();
print("sub_%d {\n", getPos());
incIndent();
diff --git a/engines/gob/degob_script.h b/engines/gob/degob_script.h
index 1b712187..67abefb0 100644
--- a/engines/gob/degob_script.h
+++ b/engines/gob/degob_script.h
@@ -26,6 +26,7 @@
#include <string>
#include <list>
+#include <map>
#include "common/scummsys.h"
@@ -82,8 +83,9 @@ public:
uint8 getVerIMEX() const;
uint8 getSuffixIM() const;
uint8 getSuffixEX() const;
+ uint32 getFuncNamesCount() const;
- void deGob(int32 offset = -1);
+ void loadIDE(const byte *ideData);
protected:
enum FuncType {
@@ -171,6 +173,7 @@ protected:
ExtTable *_extTable;
std::list<uint32> _funcOffsets;
+ std::map<uint32, std::string> _funcOffsetsNames;
// Script properties
uint16 _start, _textCenter;
Commit: 462e36e94ed0210557309e1ae8c4088de486311d
https://github.com/scummvm/scummvm-tools/commit/462e36e94ed0210557309e1ae8c4088de486311d
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: --lib mode in degob to use named function offsets as entry points
Changed paths:
engines/gob/degob.cpp
engines/gob/degob_script.cpp
engines/gob/degob_script.h
diff --git a/engines/gob/degob.cpp b/engines/gob/degob.cpp
index 4593ebba..48cae38f 100644
--- a/engines/gob/degob.cpp
+++ b/engines/gob/degob.cpp
@@ -65,6 +65,7 @@ int main(int argc, char **argv) {
ideData = readFile(ideFilename.c_str(), ideSize);
ExtTable *extTable = 0;
+ bool libMode = false;
if (argc > 3) {
int n = 3;
@@ -88,6 +89,11 @@ int main(int argc, char **argv) {
n++;
}
+ if (!strncmp(argv[n], "--lib", 5)) {
+ libMode = true;
+ n++;
+ }
+
if (argc > n) {
extData = readFile(argv[n], extSize);
@@ -115,7 +121,7 @@ int main(int argc, char **argv) {
printInfo(*script);
printf("-----\n");
- script->deGob(offset);
+ script->deGob(offset, libMode);
delete[] totData;
delete[] extData;
@@ -126,7 +132,7 @@ int main(int argc, char **argv) {
}
void printHelp(const char *bin) {
- printf("Usage: %s <version> <file.tot> [-o <offset>] [<file.ext>] [<commun.ext>]\n\n", bin);
+ printf("Usage: %s <version> <file.tot> [-o <offset>] [--lib] [<file.ext>] [<commun.ext>]\n\n", bin);
printf("The disassembled script will be written to stdout.\n\n");
printf("Supported versions:\n");
printf(" Gob1 - Gobliiins 1\n");
diff --git a/engines/gob/degob_script.cpp b/engines/gob/degob_script.cpp
index c3921b1d..1ef8dd3e 100644
--- a/engines/gob/degob_script.cpp
+++ b/engines/gob/degob_script.cpp
@@ -827,7 +827,7 @@ void Script::endFunc() const {
void Script::loadProperties(byte *data) {
_start = READ_LE_UINT16(data + 0x64);
- assert(_start >= 128);
+ //assert(_start >= 128) -> pure "library" files may have no defined entry point (_start = 0)
_varsCount = READ_LE_UINT16(data + 0x2C);
_totTextCount = READ_LE_UINT32(data + 0x30);
@@ -923,13 +923,20 @@ void Script::addFuncOffset(uint32 offset) {
_funcOffsets.push_back(offset);
}
-void Script::deGob(int32 offset) {
+void Script::deGob(int32 offset, bool isLib) {
_funcOffsets.clear();
- if (offset < 0)
- addStartingOffsets();
- else
- _funcOffsets.push_back(offset);
+ if (isLib) {
+ // Use functions from IDE file as entry points
+ for (auto it = _funcOffsetsNames.begin(); it != _funcOffsetsNames.end(); ++it)
+ addFuncOffset(it->first);
+ } else {
+ if (offset < 0)
+ addStartingOffsets();
+ else
+ _funcOffsets.push_back(offset);
+ }
+
for (std::list<uint32>::iterator it = _funcOffsets.begin(); it != _funcOffsets.end(); ++it) {
seek(*it);
diff --git a/engines/gob/degob_script.h b/engines/gob/degob_script.h
index 67abefb0..1ce5692f 100644
--- a/engines/gob/degob_script.h
+++ b/engines/gob/degob_script.h
@@ -87,6 +87,8 @@ public:
void loadIDE(const byte *ideData);
+ void deGob(int32 offset = -1, bool isLib = false);
+
protected:
enum FuncType {
TYPE_NONE = 0, // No description
Commit: 2b7d4c90e6ba6acccb9821c18839889a0245627d
https://github.com/scummvm/scummvm-tools/commit/2b7d4c90e6ba6acccb9821c18839889a0245627d
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: more detailed degob --help message
Changed paths:
engines/gob/degob.cpp
diff --git a/engines/gob/degob.cpp b/engines/gob/degob.cpp
index 48cae38f..9eef3768 100644
--- a/engines/gob/degob.cpp
+++ b/engines/gob/degob.cpp
@@ -148,6 +148,13 @@ void printHelp(const char *bin) {
printf(" Geisha - Geisha\n");
printf(" LittleRed - Once Upon A Time: Little Red Riding Hood\n");
printf(" Adibou2 - Adibou 2\n");
+ printf("\n");
+ printf("<file.tot>\n\tthe .tot file to decompile\n\n");
+ printf("-o <offset>\n\tscript entry point in the .tot file, defaults to the value read in script header\n\n");
+ printf("--lib\n\tlibrary mode: all offsets from .IDE named functions file are used as entry points\n\n");
+ printf("<file.ext>\n\texternal script resource file (<script name>.EXT)\n\n");
+ printf("<commun.ext>\n\texternal common script resource file (commun.EXn)\n\n");
+
}
int getVersion(const char *verStr) {
Commit: 33918927b4d8079b3b78ca80ae4dcada1f57d233
https://github.com/scummvm/scummvm-tools/commit/33918927b4d8079b3b78ca80ae4dcada1f57d233
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: fix o7_oemToANSI not being written to degob output
Changed paths:
engines/gob/degob_script_v7.cpp
diff --git a/engines/gob/degob_script_v7.cpp b/engines/gob/degob_script_v7.cpp
index f9a666a9..861e123c 100644
--- a/engines/gob/degob_script_v7.cpp
+++ b/engines/gob/degob_script_v7.cpp
@@ -770,6 +770,8 @@ void Script_v7::oPlaytoons_printText(FuncParams ¶ms)
void Script_v7::o7_oemToANSI(FuncParams ¶ms)
{
+ startFunc(params);
+ endFunc();
skip(2);
}
Commit: 6cb3a5c6a38cfbdeb7b79af615b3d4e95d9eb46b
https://github.com/scummvm/scummvm-tools/commit/6cb3a5c6a38cfbdeb7b79af615b3d4e95d9eb46b
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: fix an incorrect indentation
Changed paths:
engines/gob/degob.cpp
diff --git a/engines/gob/degob.cpp b/engines/gob/degob.cpp
index 9eef3768..f0f09bdd 100644
--- a/engines/gob/degob.cpp
+++ b/engines/gob/degob.cpp
@@ -230,7 +230,7 @@ Script *initScript(byte *totData, uint32 totSize, ExtTable *extTable, int versio
break;
case 9:
return new Script_v6(totData, totSize, extTable);
- break;
+ break;
case 10:
return new Script_Geisha(totData, totSize, extTable);
break;
Commit: fc86ad20023c5fdef46eab86df137c7a865b05b5
https://github.com/scummvm/scummvm-tools/commit/fc86ad20023c5fdef46eab86df137c7a865b05b5
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: revert "fix missing cases in o1_palLoad", which introduced a regression
This reverts commit 7c1b07d4a2d71a04b7a295222df74c262cadbefd.
Changed paths:
engines/gob/degob_script_v1.cpp
diff --git a/engines/gob/degob_script_v1.cpp b/engines/gob/degob_script_v1.cpp
index 055b6dd5..6abc7aad 100644
--- a/engines/gob/degob_script_v1.cpp
+++ b/engines/gob/degob_script_v1.cpp
@@ -926,14 +926,6 @@ void Script_v1::o1_palLoad(FuncParams ¶ms) {
break;
case 53:
- skip(2);
- return;
-
- case 55:
- skip(2);
- break;
-
- case 56:
skip(2);
break;
@@ -941,57 +933,6 @@ void Script_v1::o1_palLoad(FuncParams ¶ms) {
skip(4);
break;
}
-
- if ((cmd & 0x7F) == 0x30) {
- skip(48);
- return;
- }
-
- cmd &= 0x7F;
-
- if (cmd == 49) {
- bool allZero = true;
-
- for (int i = 2; i < 18; i++) {
- if (peekUint8() != 0) {
- allZero = false;
- break;
- }
- }
- if (!allZero) {
- skip(48);
- return;
- }
-
- for (int i = 0; i < 18; i++) {
- skip(1);
- }
-
- return;
- }
-
- switch (cmd) {
- case 50:
- for (int i = 0; i < 16; i++)
- readUint8();
- break;
-
- case 52:
- for (int i = 0; i < 16; i++) {
- readUint8();
- readUint8();
- readUint8();
- }
- break;
-
- case 53:
- readUint16();
- break;
-
- default:
- break;
-
- }
}
void Script_v1::o1_loadSpriteToPos(FuncParams ¶ms) {
Commit: 9665c9e68f8eb5cdeb3e0d4b8c8d74bb5fda4429
https://github.com/scummvm/scummvm-tools/commit/9665c9e68f8eb5cdeb3e0d4b8c8d74bb5fda4429
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: correctly add missing cases 55 and 56 in o1_palLoad
Just skipping the right amount of bytes depending on the case is enough here, so cases 53, 55 and 56 are equivalent for degob.
Changed paths:
engines/gob/degob_script_v1.cpp
diff --git a/engines/gob/degob_script_v1.cpp b/engines/gob/degob_script_v1.cpp
index 6abc7aad..cf1e82c9 100644
--- a/engines/gob/degob_script_v1.cpp
+++ b/engines/gob/degob_script_v1.cpp
@@ -926,6 +926,8 @@ void Script_v1::o1_palLoad(FuncParams ¶ms) {
break;
case 53:
+ case 55:
+ case 56:
skip(2);
break;
Commit: 7c1089ae403a81aa6ef3ba3a4c9f2bfb911b58cf
https://github.com/scummvm/scummvm-tools/commit/7c1089ae403a81aa6ef3ba3a4c9f2bfb911b58cf
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-01-03T00:52:51+01:00
Commit Message:
GOB: GPLv2 -> GPLv3 in degob_script_v7.cpp
Changed paths:
engines/gob/degob_script_v7.cpp
diff --git a/engines/gob/degob_script_v7.cpp b/engines/gob/degob_script_v7.cpp
index 861e123c..5eb12bcc 100644
--- a/engines/gob/degob_script_v7.cpp
+++ b/engines/gob/degob_script_v7.cpp
@@ -1,13 +1,13 @@
/* ScummVM Tools
*
- * ScummVM Tools is the legal property of its developers, whose
- * names are too numerous to list here. Please refer to the
- * COPYRIGHT file distributed with this source distribution.
+ * ScummVM Tools is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -15,8 +15,8 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
*/
/* GobEngine Script disassembler */
More information about the Scummvm-git-logs
mailing list