aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/inter_v1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gob/inter_v1.cpp')
-rw-r--r--engines/gob/inter_v1.cpp1690
1 files changed, 593 insertions, 1097 deletions
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index ace5a7a3be..d5d5fcad9a 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -34,692 +34,214 @@
#include "gob/dataio.h"
#include "gob/draw.h"
#include "gob/game.h"
+#include "gob/expression.h"
+#include "gob/script.h"
+#include "gob/resources.h"
#include "gob/goblin.h"
#include "gob/inter.h"
#include "gob/map.h"
#include "gob/mult.h"
#include "gob/palanim.h"
-#include "gob/parse.h"
#include "gob/scenery.h"
#include "gob/video.h"
#include "gob/sound/sound.h"
namespace Gob {
-#define OPCODE(x) _OPCODE(Inter_v1, x)
-
-const int Inter_v1::_goblinFuncLookUp[][2] = {
- {1, 0},
- {2, 1},
- {3, 2},
- {4, 3},
- {5, 4},
- {6, 5},
- {7, 6},
- {8, 7},
- {9, 8},
- {10, 9},
- {12, 10},
- {13, 11},
- {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},
- {150, 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}
-};
+#define OPCODEVER Inter_v1
+#define OPCODEDRAW(i, x) _opcodesDraw[i]._OPCODEDRAW(OPCODEVER, x)
+#define OPCODEFUNC(i, x) _opcodesFunc[i]._OPCODEFUNC(OPCODEVER, x)
+#define OPCODEGOB(i, x) _opcodesGob[i]._OPCODEGOB(OPCODEVER, x)
Inter_v1::Inter_v1(GobEngine *vm) : Inter(vm) {
- setupOpcodes();
-}
-
-void Inter_v1::setupOpcodes() {
- static const OpcodeDrawEntryV1 opcodesDraw[256] = {
- /* 00 */
- OPCODE(o1_loadMult),
- OPCODE(o1_playMult),
- OPCODE(o1_freeMultKeys),
- {0, ""},
- /* 04 */
- {0, ""},
- {0, ""},
- {0, ""},
- OPCODE(o1_initCursor),
- /* 08 */
- OPCODE(o1_initCursorAnim),
- OPCODE(o1_clearCursorAnim),
- OPCODE(o1_setRenderFlags),
- {0, ""},
- /* 0C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 10 */
- OPCODE(o1_loadAnim),
- OPCODE(o1_freeAnim),
- OPCODE(o1_updateAnim),
- {0, ""},
- /* 14 */
- OPCODE(o1_initMult),
- OPCODE(o1_freeMult),
- OPCODE(o1_animate),
- OPCODE(o1_loadMultObject),
- /* 18 */
- OPCODE(o1_getAnimLayerInfo),
- OPCODE(o1_getObjAnimSize),
- OPCODE(o1_loadStatic),
- OPCODE(o1_freeStatic),
- /* 1C */
- OPCODE(o1_renderStatic),
- OPCODE(o1_loadCurLayer),
- {0, ""},
- {0, ""},
- /* 20 */
- OPCODE(o1_playCDTrack),
- OPCODE(o1_getCDTrackPos),
- OPCODE(o1_stopCD),
- {0, ""},
- /* 24 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 28 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 2C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 30 */
- OPCODE(o1_loadFontToSprite),
- OPCODE(o1_freeFontToSprite),
- {0, ""},
- {0, ""},
- /* 34 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 38 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 3C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 40 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 44 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 48 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 4C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 50 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 54 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 58 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 5C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 60 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 64 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 68 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 6C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 70 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 74 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 78 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 7C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 80 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 84 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 88 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 8C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 90 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 94 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 98 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 9C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* A0 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* A4 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* A8 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* AC */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* B0 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* B4 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* B8 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* BC */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* C0 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* C4 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* C8 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* CC */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* D0 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* D4 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* D8 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* DC */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* E0 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* E4 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* E8 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* EC */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* F0 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* F4 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* F8 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* FC */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""}
- };
-
- static const OpcodeFuncEntryV1 opcodesFunc[80] = {
- /* 00 */
- OPCODE(o1_callSub),
- OPCODE(o1_callSub),
- OPCODE(o1_printTotText),
- OPCODE(o1_loadCursor),
- /* 04 */
- {0, ""},
- OPCODE(o1_switch),
- OPCODE(o1_repeatUntil),
- OPCODE(o1_whileDo),
- /* 08 */
- OPCODE(o1_if),
- OPCODE(o1_assign),
- OPCODE(o1_loadSpriteToPos),
- {0, ""},
- /* 0C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 10 */
- {0, ""},
- OPCODE(o1_printText),
- OPCODE(o1_loadTot),
- OPCODE(o1_palLoad),
- /* 14 */
- OPCODE(o1_keyFunc),
- OPCODE(o1_capturePush),
- OPCODE(o1_capturePop),
- OPCODE(o1_animPalInit),
- /* 18 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 1C */
- {0, ""},
- {0, ""},
- OPCODE(o1_drawOperations),
- OPCODE(o1_setcmdCount),
- /* 20 */
- OPCODE(o1_return),
- OPCODE(o1_renewTimeInVars),
- OPCODE(o1_speakerOn),
- OPCODE(o1_speakerOff),
- /* 24 */
- OPCODE(o1_putPixel),
- OPCODE(o1_goblinFunc),
- OPCODE(o1_createSprite),
- OPCODE(o1_freeSprite),
- /* 28 */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 2C */
- {0, ""},
- {0, ""},
- {0, ""},
- {0, ""},
- /* 30 */
- OPCODE(o1_returnTo),
- OPCODE(o1_loadSpriteContent),
- OPCODE(o1_copySprite),
- OPCODE(o1_fillRect),
- /* 34 */
- OPCODE(o1_drawLine),
- OPCODE(o1_strToLong),
- OPCODE(o1_invalidate),
- OPCODE(o1_setBackDelta),
- /* 38 */
- OPCODE(o1_playSound),
- OPCODE(o1_stopSound),
- OPCODE(o1_loadSound),
- OPCODE(o1_freeSoundSlot),
- /* 3C */
- OPCODE(o1_waitEndPlay),
- OPCODE(o1_playComposition),
- OPCODE(o1_getFreeMem),
- OPCODE(o1_checkData),
- /* 40 */
- {0, ""},
- OPCODE(o1_prepareStr),
- OPCODE(o1_insertStr),
- OPCODE(o1_cutStr),
- /* 44 */
- OPCODE(o1_strstr),
- OPCODE(o1_istrlen),
- OPCODE(o1_setMousePos),
- OPCODE(o1_setFrameRate),
- /* 48 */
- OPCODE(o1_animatePalette),
- OPCODE(o1_animateCursor),
- OPCODE(o1_blitCursor),
- OPCODE(o1_loadFont),
- /* 4C */
- OPCODE(o1_freeFont),
- OPCODE(o1_readData),
- OPCODE(o1_writeData),
- OPCODE(o1_manageDataFile),
- };
-
- static const OpcodeGoblinEntryV1 opcodesGoblin[71] = {
- /* 00 */
- OPCODE(o1_setState),
- OPCODE(o1_setCurFrame),
- OPCODE(o1_setNextState),
- OPCODE(o1_setMultState),
- /* 04 */
- OPCODE(o1_setOrder),
- OPCODE(o1_setActionStartState),
- OPCODE(o1_setCurLookDir),
- OPCODE(o1_setType),
- /* 08 */
- OPCODE(o1_setNoTick),
- OPCODE(o1_setPickable),
- OPCODE(o1_setXPos),
- OPCODE(o1_setYPos),
- /* 0C */
- OPCODE(o1_setDoAnim),
- OPCODE(o1_setRelaxTime),
- OPCODE(o1_setMaxTick),
- OPCODE(o1_getState),
- /* 10 */
- OPCODE(o1_getCurFrame),
- OPCODE(o1_getNextState),
- OPCODE(o1_getMultState),
- OPCODE(o1_getOrder),
- /* 14 */
- OPCODE(o1_getActionStartState),
- OPCODE(o1_getCurLookDir),
- OPCODE(o1_getType),
- OPCODE(o1_getNoTick),
- /* 18 */
- OPCODE(o1_getPickable),
- OPCODE(o1_getObjMaxFrame),
- OPCODE(o1_getXPos),
- OPCODE(o1_getYPos),
- /* 1C */
- OPCODE(o1_getDoAnim),
- OPCODE(o1_getRelaxTime),
- OPCODE(o1_getMaxTick),
- OPCODE(o1_manipulateMap),
- /* 20 */
- OPCODE(o1_getItem),
- OPCODE(o1_manipulateMapIndirect),
- OPCODE(o1_getItemIndirect),
- OPCODE(o1_setPassMap),
- /* 24 */
- OPCODE(o1_setGoblinPosH),
- OPCODE(o1_getGoblinPosXH),
- OPCODE(o1_getGoblinPosYH),
- OPCODE(o1_setGoblinMultState),
- /* 28 */
- OPCODE(o1_setGoblinUnk14),
- OPCODE(o1_setItemIdInPocket),
- OPCODE(o1_setItemIndInPocket),
- OPCODE(o1_getItemIdInPocket),
- /* 2C */
- OPCODE(o1_getItemIndInPocket),
- OPCODE(o1_setItemPos),
- OPCODE(o1_setGoblinPos),
- OPCODE(o1_setGoblinState),
- /* 30 */
- OPCODE(o1_setGoblinStateRedraw),
- OPCODE(o1_decRelaxTime),
- OPCODE(o1_getGoblinPosX),
- OPCODE(o1_getGoblinPosY),
- /* 34 */
- OPCODE(o1_clearPathExistence),
- OPCODE(o1_setGoblinVisible),
- OPCODE(o1_setGoblinInvisible),
- OPCODE(o1_getObjectIntersect),
- /* 38 */
- OPCODE(o1_getGoblinIntersect),
- OPCODE(o1_setItemPos),
- OPCODE(o1_loadObjects),
- OPCODE(o1_freeObjects),
- /* 3C */
- OPCODE(o1_animateObjects),
- OPCODE(o1_drawObjects),
- OPCODE(o1_loadMap),
- OPCODE(o1_moveGoblin),
- /* 40 */
- OPCODE(o1_switchGoblin),
- OPCODE(o1_loadGoblin),
- OPCODE(o1_writeTreatItem),
- OPCODE(o1_moveGoblin0),
- /* 44 */
- OPCODE(o1_setGoblinTarget),
- OPCODE(o1_setGoblinObjectsPos),
- OPCODE(o1_initGoblin)
- };
-
- _opcodesDrawV1 = opcodesDraw;
- _opcodesFuncV1 = opcodesFunc;
- _opcodesGoblinV1 = opcodesGoblin;
-}
-
-void Inter_v1::executeDrawOpcode(byte i) {
- debugC(1, kDebugDrawOp, "opcodeDraw %d [0x%X] (%s)",
- i, i, getOpcodeDrawDesc(i));
-
- OpcodeDrawProcV1 op = _opcodesDrawV1[i].proc;
-
- if (op == 0)
- warning("unimplemented opcodeDraw: %d", i);
- else
- (this->*op) ();
-}
-
-bool Inter_v1::executeFuncOpcode(byte i, byte j, OpFuncParams &params) {
- debugC(1, kDebugFuncOp, "opcodeFunc %d.%d [0x%X.0x%X] (%s)",
- i, j, i, j, getOpcodeFuncDesc(i, j));
-
- if ((i > 4) || (j > 15)) {
- warning("unimplemented opcodeFunc: %d.%d", i, j);
- return false;
- }
-
- OpcodeFuncProcV1 op = _opcodesFuncV1[i*16 + j].proc;
-
- if (op == 0)
- warning("unimplemented opcodeFunc: %d.%d", i, j);
- else
- return (this->*op) (params);
- return false;
}
-void Inter_v1::executeGoblinOpcode(int i, OpGobParams &params) {
- debugC(1, kDebugGobOp, "opcodeGoblin %d [0x%X] (%s)",
- i, i, getOpcodeGoblinDesc(i));
+void Inter_v1::setupOpcodesDraw() {
+ OPCODEDRAW(0x00, o1_loadMult);
+ OPCODEDRAW(0x01, o1_playMult);
+ OPCODEDRAW(0x02, o1_freeMultKeys);
- OpcodeGoblinProcV1 op = 0;
+ OPCODEDRAW(0x07, o1_initCursor);
+
+ OPCODEDRAW(0x08, o1_initCursorAnim);
+ OPCODEDRAW(0x09, o1_clearCursorAnim);
+ OPCODEDRAW(0x0A, o1_setRenderFlags);
- for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++)
- if (_goblinFuncLookUp[j][0] == i) {
- op = _opcodesGoblinV1[_goblinFuncLookUp[j][1]].proc;
- break;
- }
-
- if (op == 0) {
- warning("unimplemented opcodeGoblin: %d", i);
- _vm->_global->_inter_execPtr -= 2;
- int16 cmd = load16();
- _vm->_global->_inter_execPtr += cmd * 2;
- } else
- (this->*op) (params);
-}
-
-const char *Inter_v1::getOpcodeDrawDesc(byte i) {
- return _opcodesDrawV1[i].desc;
-}
-
-const char *Inter_v1::getOpcodeFuncDesc(byte i, byte j) {
- if ((i > 4) || (j > 15))
- return "";
-
- return _opcodesFuncV1[i*16 + j].desc;
-}
-
-const char *Inter_v1::getOpcodeGoblinDesc(int i) {
- for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++)
- if (_goblinFuncLookUp[j][0] == i)
- return _opcodesGoblinV1[_goblinFuncLookUp[j][1]].desc;
- return "";
-}
-
-void Inter_v1::checkSwitchTable(byte **ppExec) {
+ OPCODEDRAW(0x10, o1_loadAnim);
+ OPCODEDRAW(0x11, o1_freeAnim);
+ OPCODEDRAW(0x12, o1_updateAnim);
+
+ OPCODEDRAW(0x14, o1_initMult);
+ OPCODEDRAW(0x15, o1_freeMult);
+ OPCODEDRAW(0x16, o1_animate);
+ OPCODEDRAW(0x17, o1_loadMultObject);
+
+ OPCODEDRAW(0x18, o1_getAnimLayerInfo);
+ OPCODEDRAW(0x19, o1_getObjAnimSize);
+ OPCODEDRAW(0x1A, o1_loadStatic);
+ OPCODEDRAW(0x1B, o1_freeStatic);
+
+ OPCODEDRAW(0x1C, o1_renderStatic);
+ OPCODEDRAW(0x1D, o1_loadCurLayer);
+
+ OPCODEDRAW(0x20, o1_playCDTrack);
+ OPCODEDRAW(0x21, o1_getCDTrackPos);
+ OPCODEDRAW(0x22, o1_stopCD);
+
+ OPCODEDRAW(0x30, o1_loadFontToSprite);
+ OPCODEDRAW(0x31, o1_freeFontToSprite);
+}
+
+void Inter_v1::setupOpcodesFunc() {
+ OPCODEFUNC(0x00, o1_callSub);
+ OPCODEFUNC(0x01, o1_callSub);
+ OPCODEFUNC(0x02, o1_printTotText);
+ OPCODEFUNC(0x03, o1_loadCursor);
+
+ OPCODEFUNC(0x05, o1_switch);
+ OPCODEFUNC(0x06, o1_repeatUntil);
+ OPCODEFUNC(0x07, o1_whileDo);
+
+ OPCODEFUNC(0x08, o1_if);
+ OPCODEFUNC(0x09, o1_assign);
+ OPCODEFUNC(0x0A, o1_loadSpriteToPos);
+ OPCODEFUNC(0x11, o1_printText);
+ OPCODEFUNC(0x12, o1_loadTot);
+ OPCODEFUNC(0x13, o1_palLoad);
+
+ OPCODEFUNC(0x14, o1_keyFunc);
+ OPCODEFUNC(0x15, o1_capturePush);
+ OPCODEFUNC(0x16, o1_capturePop);
+ OPCODEFUNC(0x17, o1_animPalInit);
+
+ OPCODEFUNC(0x1E, o1_drawOperations);
+ OPCODEFUNC(0x1F, o1_setcmdCount);
+
+ OPCODEFUNC(0x20, o1_return);
+ OPCODEFUNC(0x21, o1_renewTimeInVars);
+ OPCODEFUNC(0x22, o1_speakerOn);
+ OPCODEFUNC(0x23, o1_speakerOff);
+
+ OPCODEFUNC(0x24, o1_putPixel);
+ OPCODEFUNC(0x25, o1_goblinFunc);
+ OPCODEFUNC(0x26, o1_createSprite);
+ OPCODEFUNC(0x27, o1_freeSprite);
+
+ OPCODEFUNC(0x30, o1_returnTo);
+ OPCODEFUNC(0x31, o1_loadSpriteContent);
+ OPCODEFUNC(0x32, o1_copySprite);
+ OPCODEFUNC(0x33, o1_fillRect);
+
+ OPCODEFUNC(0x34, o1_drawLine);
+ OPCODEFUNC(0x35, o1_strToLong);
+ OPCODEFUNC(0x36, o1_invalidate);
+ OPCODEFUNC(0x37, o1_setBackDelta);
+
+ OPCODEFUNC(0x38, o1_playSound);
+ OPCODEFUNC(0x39, o1_stopSound);
+ OPCODEFUNC(0x3A, o1_loadSound);
+ OPCODEFUNC(0x3B, o1_freeSoundSlot);
+
+ OPCODEFUNC(0x3C, o1_waitEndPlay);
+ OPCODEFUNC(0x3D, o1_playComposition);
+ OPCODEFUNC(0x3E, o1_getFreeMem);
+ OPCODEFUNC(0x3F, o1_checkData);
+
+ OPCODEFUNC(0x41, o1_prepareStr);
+ OPCODEFUNC(0x42, o1_insertStr);
+ OPCODEFUNC(0x43, o1_cutStr);
+
+ OPCODEFUNC(0x44, o1_strstr);
+ OPCODEFUNC(0x45, o1_istrlen);
+ OPCODEFUNC(0x46, o1_setMousePos);
+ OPCODEFUNC(0x47, o1_setFrameRate);
+
+ OPCODEFUNC(0x48, o1_animatePalette);
+ OPCODEFUNC(0x49, o1_animateCursor);
+ OPCODEFUNC(0x4A, o1_blitCursor);
+ OPCODEFUNC(0x4B, o1_loadFont);
+
+ OPCODEFUNC(0x4C, o1_freeFont);
+ OPCODEFUNC(0x4D, o1_readData);
+ OPCODEFUNC(0x4E, o1_writeData);
+ OPCODEFUNC(0x4F, o1_manageDataFile);
+}
+
+void Inter_v1::setupOpcodesGob() {
+ OPCODEGOB( 1, o1_setState);
+ OPCODEGOB( 2, o1_setCurFrame);
+ OPCODEGOB( 3, o1_setNextState);
+ OPCODEGOB( 4, o1_setMultState);
+ OPCODEGOB( 5, o1_setOrder);
+ OPCODEGOB( 6, o1_setActionStartState);
+ OPCODEGOB( 7, o1_setCurLookDir);
+ OPCODEGOB( 8, o1_setType);
+ OPCODEGOB( 9, o1_setNoTick);
+ OPCODEGOB( 10, o1_setPickable);
+ OPCODEGOB( 12, o1_setXPos);
+ OPCODEGOB( 13, o1_setYPos);
+ OPCODEGOB( 14, o1_setDoAnim);
+ OPCODEGOB( 15, o1_setRelaxTime);
+ OPCODEGOB( 16, o1_setMaxTick);
+ OPCODEGOB( 21, o1_getState);
+ OPCODEGOB( 22, o1_getCurFrame);
+ OPCODEGOB( 23, o1_getNextState);
+ OPCODEGOB( 24, o1_getMultState);
+ OPCODEGOB( 25, o1_getOrder);
+ OPCODEGOB( 26, o1_getActionStartState);
+ OPCODEGOB( 27, o1_getCurLookDir);
+ OPCODEGOB( 28, o1_getType);
+ OPCODEGOB( 29, o1_getNoTick);
+ OPCODEGOB( 30, o1_getPickable);
+ OPCODEGOB( 32, o1_getObjMaxFrame);
+ OPCODEGOB( 33, o1_getXPos);
+ OPCODEGOB( 34, o1_getYPos);
+ OPCODEGOB( 35, o1_getDoAnim);
+ OPCODEGOB( 36, o1_getRelaxTime);
+ OPCODEGOB( 37, o1_getMaxTick);
+ OPCODEGOB( 40, o1_manipulateMap);
+ OPCODEGOB( 41, o1_getItem);
+ OPCODEGOB( 42, o1_manipulateMapIndirect);
+ OPCODEGOB( 43, o1_getItemIndirect);
+ OPCODEGOB( 44, o1_setPassMap);
+ OPCODEGOB( 50, o1_setGoblinPosH);
+ OPCODEGOB( 52, o1_getGoblinPosXH);
+ OPCODEGOB( 53, o1_getGoblinPosYH);
+ OPCODEGOB( 150, o1_setGoblinMultState);
+ OPCODEGOB( 152, o1_setGoblinUnk14);
+ OPCODEGOB( 200, o1_setItemIdInPocket);
+ OPCODEGOB( 201, o1_setItemIndInPocket);
+ OPCODEGOB( 202, o1_getItemIdInPocket);
+ OPCODEGOB( 203, o1_getItemIndInPocket);
+ OPCODEGOB( 204, o1_setItemPos);
+ OPCODEGOB( 250, o1_setGoblinPos);
+ OPCODEGOB( 251, o1_setGoblinState);
+ OPCODEGOB( 252, o1_setGoblinStateRedraw);
+ OPCODEGOB( 500, o1_decRelaxTime);
+ OPCODEGOB( 502, o1_getGoblinPosX);
+ OPCODEGOB( 503, o1_getGoblinPosY);
+ OPCODEGOB( 600, o1_clearPathExistence);
+ OPCODEGOB( 601, o1_setGoblinVisible);
+ OPCODEGOB( 602, o1_setGoblinInvisible);
+ OPCODEGOB( 603, o1_getObjectIntersect);
+ OPCODEGOB( 604, o1_getGoblinIntersect);
+ OPCODEGOB( 605, o1_setItemPos);
+ OPCODEGOB(1000, o1_loadObjects);
+ OPCODEGOB(1001, o1_freeObjects);
+ OPCODEGOB(1002, o1_animateObjects);
+ OPCODEGOB(1003, o1_drawObjects);
+ OPCODEGOB(1004, o1_loadMap);
+ OPCODEGOB(1005, o1_moveGoblin);
+ OPCODEGOB(1006, o1_switchGoblin);
+ OPCODEGOB(1008, o1_loadGoblin);
+ OPCODEGOB(1009, o1_writeTreatItem);
+ OPCODEGOB(1010, o1_moveGoblin0);
+ OPCODEGOB(1011, o1_setGoblinTarget);
+ OPCODEGOB(1015, o1_setGoblinObjectsPos);
+ OPCODEGOB(2005, o1_initGoblin);
+}
+
+void Inter_v1::checkSwitchTable(uint32 &offset) {
int16 len;
int32 value;
bool found;
@@ -727,56 +249,54 @@ void Inter_v1::checkSwitchTable(byte **ppExec) {
found = false;
notFound = true;
- *ppExec = 0;
- value = VAR_OFFSET(_vm->_parse->parseVarIndex());
+ offset = 0;
+ value = VAR_OFFSET(_vm->_game->_script->readVarIndex());
- len = (int8) *_vm->_global->_inter_execPtr++;
+ len = _vm->_game->_script->readInt8();
while (len != -5) {
for (int i = 0; i < len; i++) {
- evalExpr(0);
+ _vm->_game->_script->evalExpr(0);
if (_terminate)
return;
- if (_vm->_global->_inter_resVal == value) {
+ if (_vm->_game->_script->getResultInt() == value) {
found = true;
notFound = false;
}
}
if (found)
- *ppExec = _vm->_global->_inter_execPtr;
+ offset = _vm->_game->_script->pos();
- _vm->_global->_inter_execPtr +=
- READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ _vm->_game->_script->skip(_vm->_game->_script->peekUint16(2) + 2);
found = false;
- len = (int8) *_vm->_global->_inter_execPtr++;
+ len = _vm->_game->_script->readInt8();
}
- if ((*_vm->_global->_inter_execPtr >> 4) != 4)
+ if ((_vm->_game->_script->peekByte() >> 4) != 4)
return;
- _vm->_global->_inter_execPtr++;
+ _vm->_game->_script->skip(1);
if (notFound)
- *ppExec = _vm->_global->_inter_execPtr;
+ offset = _vm->_game->_script->pos();
- _vm->_global->_inter_execPtr +=
- READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ _vm->_game->_script->skip(_vm->_game->_script->peekUint16(2) + 2);
}
void Inter_v1::o1_loadMult() {
- _vm->_mult->loadMult(load16());
+ _vm->_mult->loadMult(_vm->_game->_script->readInt16());
}
void Inter_v1::o1_playMult() {
int16 checkEscape;
- checkEscape = load16();
+ checkEscape = _vm->_game->_script->readInt16();
_vm->_mult->playMult(VAR(57), -1, checkEscape, 0);
}
void Inter_v1::o1_freeMultKeys() {
- load16();
+ _vm->_game->_script->readInt16();
_vm->_mult->freeMultKeys();
}
@@ -785,20 +305,20 @@ void Inter_v1::o1_initCursor() {
int16 height;
int16 count;
- _vm->_draw->_cursorHotspotXVar = _vm->_parse->parseVarIndex() / 4;
- _vm->_draw->_cursorHotspotYVar = _vm->_parse->parseVarIndex() / 4;
+ _vm->_draw->_cursorHotspotXVar = _vm->_game->_script->readVarIndex() / 4;
+ _vm->_draw->_cursorHotspotYVar = _vm->_game->_script->readVarIndex() / 4;
- width = load16();
+ width = _vm->_game->_script->readInt16();
if (width < 16)
width = 16;
- height = load16();
+ height = _vm->_game->_script->readInt16();
if (height < 16)
height = 16;
_vm->_draw->adjustCoords(0, &width, &height);
- count = load16();
+ count = _vm->_game->_script->readInt16();
if (count < 2)
count = 2;
@@ -846,24 +366,24 @@ void Inter_v1::o1_initCursorAnim() {
int16 ind;
_vm->_draw->_showCursor = 3;
- ind = _vm->_parse->parseValExpr();
- _vm->_draw->_cursorAnimLow[ind] = load16();
- _vm->_draw->_cursorAnimHigh[ind] = load16();
- _vm->_draw->_cursorAnimDelays[ind] = load16();
+ ind = _vm->_game->_script->readValExpr();
+ _vm->_draw->_cursorAnimLow[ind] = _vm->_game->_script->readInt16();
+ _vm->_draw->_cursorAnimHigh[ind] = _vm->_game->_script->readInt16();
+ _vm->_draw->_cursorAnimDelays[ind] = _vm->_game->_script->readInt16();
}
void Inter_v1::o1_clearCursorAnim() {
int16 ind;
_vm->_draw->_showCursor = 0;
- ind = _vm->_parse->parseValExpr();
+ ind = _vm->_game->_script->readValExpr();
_vm->_draw->_cursorAnimLow[ind] = -1;
_vm->_draw->_cursorAnimHigh[ind] = 0;
_vm->_draw->_cursorAnimDelays[ind] = 0;
}
void Inter_v1::o1_setRenderFlags() {
- _vm->_draw->_renderFlags = _vm->_parse->parseValExpr();
+ _vm->_draw->_renderFlags = _vm->_game->_script->readValExpr();
}
void Inter_v1::o1_loadAnim() {
@@ -882,12 +402,12 @@ void Inter_v1::o1_updateAnim() {
int16 layer;
int16 animation;
- evalExpr(&deltaX);
- evalExpr(&deltaY);
- evalExpr(&animation);
- evalExpr(&layer);
- evalExpr(&frame);
- flags = load16();
+ _vm->_game->_script->evalExpr(&deltaX);
+ _vm->_game->_script->evalExpr(&deltaY);
+ _vm->_game->_script->evalExpr(&animation);
+ _vm->_game->_script->evalExpr(&layer);
+ _vm->_game->_script->evalExpr(&frame);
+ flags = _vm->_game->_script->readInt16();
_vm->_scenery->updateAnim(layer, frame, animation, flags,
deltaX, deltaY, 1);
}
@@ -904,14 +424,14 @@ void Inter_v1::o1_initMult() {
oldAnimHeight = _vm->_mult->_animHeight;
oldObjCount = _vm->_mult->_objCount;
- _vm->_mult->_animLeft = load16();
- _vm->_mult->_animTop = load16();
- _vm->_mult->_animWidth = load16();
- _vm->_mult->_animHeight = load16();
- _vm->_mult->_objCount = load16();
- posXVar = _vm->_parse->parseVarIndex();
- posYVar = _vm->_parse->parseVarIndex();
- animDataVar = _vm->_parse->parseVarIndex();
+ _vm->_mult->_animLeft = _vm->_game->_script->readInt16();
+ _vm->_mult->_animTop = _vm->_game->_script->readInt16();
+ _vm->_mult->_animWidth = _vm->_game->_script->readInt16();
+ _vm->_mult->_animHeight = _vm->_game->_script->readInt16();
+ _vm->_mult->_objCount = _vm->_game->_script->readInt16();
+ posXVar = _vm->_game->_script->readVarIndex();
+ posYVar = _vm->_game->_script->readVarIndex();
+ animDataVar = _vm->_game->_script->readVarIndex();
if (_vm->_mult->_objects && (oldObjCount != _vm->_mult->_objCount)) {
@@ -944,8 +464,8 @@ void Inter_v1::o1_initMult() {
uint32 offPosY = i * 4 + (posYVar / 4) * 4;
uint32 offAnim = animDataVar + i * 4 * _vm->_global->_inter_animDataSize;
- _vm->_mult->_objects[i].pPosX = new VariableReference(*_vm->_inter->_variables, offPosX);
- _vm->_mult->_objects[i].pPosY = new VariableReference(*_vm->_inter->_variables, offPosY);
+ _vm->_mult->_objects[i].pPosX = new VariableReference(*_variables, offPosX);
+ _vm->_mult->_objects[i].pPosY = new VariableReference(*_variables, offPosY);
_vm->_mult->_objects[i].pAnimData =
(Mult::Mult_AnimData *) _variables->getAddressOff8(offAnim);
@@ -998,21 +518,21 @@ void Inter_v1::o1_loadMultObject() {
int16 objIndex;
byte *multData;
- evalExpr(&objIndex);
- evalExpr(&val);
+ _vm->_game->_script->evalExpr(&objIndex);
+ _vm->_game->_script->evalExpr(&val);
*_vm->_mult->_objects[objIndex].pPosX = val;
- evalExpr(&val);
+ _vm->_game->_script->evalExpr(&val);
*_vm->_mult->_objects[objIndex].pPosY = val;
debugC(4, kDebugGameFlow, "Loading mult object %d", objIndex);
multData = (byte *) _vm->_mult->_objects[objIndex].pAnimData;
for (int i = 0; i < 11; i++) {
- if (READ_LE_UINT16(_vm->_global->_inter_execPtr) != 99) {
- evalExpr(&val);
+ if (_vm->_game->_script->peekUint16() != 99) {
+ _vm->_game->_script->evalExpr(&val);
multData[i] = val;
} else
- _vm->_global->_inter_execPtr++;
+ _vm->_game->_script->skip(1);
}
}
@@ -1023,13 +543,13 @@ void Inter_v1::o1_getAnimLayerInfo() {
int16 varUnk0;
int16 varFrames;
- evalExpr(&anim);
- evalExpr(&layer);
+ _vm->_game->_script->evalExpr(&anim);
+ _vm->_game->_script->evalExpr(&layer);
- varDX = _vm->_parse->parseVarIndex();
- varDY = _vm->_parse->parseVarIndex();
- varUnk0 = _vm->_parse->parseVarIndex();
- varFrames = _vm->_parse->parseVarIndex();
+ varDX = _vm->_game->_script->readVarIndex();
+ varDY = _vm->_game->_script->readVarIndex();
+ varUnk0 = _vm->_game->_script->readVarIndex();
+ varFrames = _vm->_game->_script->readVarIndex();
_vm->_scenery->writeAnimLayerInfo(anim, layer,
varDX, varDY, varUnk0, varFrames);
@@ -1038,7 +558,7 @@ void Inter_v1::o1_getAnimLayerInfo() {
void Inter_v1::o1_getObjAnimSize() {
int16 objIndex;
- evalExpr(&objIndex);
+ _vm->_game->_script->evalExpr(&objIndex);
Mult::Mult_AnimData &animData = *(_vm->_mult->_objects[objIndex].pAnimData);
if (animData.isStatic == 0)
@@ -1048,10 +568,10 @@ void Inter_v1::o1_getObjAnimSize() {
_vm->_scenery->_toRedrawLeft = MAX(_vm->_scenery->_toRedrawLeft, (int16) 0);
_vm->_scenery->_toRedrawTop = MAX(_vm->_scenery->_toRedrawTop, (int16) 0);
- WRITE_VAR_OFFSET(_vm->_parse->parseVarIndex(), _vm->_scenery->_toRedrawLeft);
- WRITE_VAR_OFFSET(_vm->_parse->parseVarIndex(), _vm->_scenery->_toRedrawTop);
- WRITE_VAR_OFFSET(_vm->_parse->parseVarIndex(), _vm->_scenery->_toRedrawRight);
- WRITE_VAR_OFFSET(_vm->_parse->parseVarIndex(), _vm->_scenery->_toRedrawBottom);
+ WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawLeft);
+ WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawTop);
+ WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawRight);
+ WRITE_VAR_OFFSET(_vm->_game->_script->readVarIndex(), _vm->_scenery->_toRedrawBottom);
}
void Inter_v1::o1_loadStatic() {
@@ -1066,20 +586,20 @@ void Inter_v1::o1_renderStatic() {
int16 layer;
int16 index;
- _vm->_inter->evalExpr(&index);
- _vm->_inter->evalExpr(&layer);
+ _vm->_game->_script->evalExpr(&index);
+ _vm->_game->_script->evalExpr(&layer);
_vm->_scenery->renderStatic(index, layer);
}
void Inter_v1::o1_loadCurLayer() {
- evalExpr(&_vm->_scenery->_curStatic);
- evalExpr(&_vm->_scenery->_curStaticLayer);
+ _vm->_game->_script->evalExpr(&_vm->_scenery->_curStatic);
+ _vm->_game->_script->evalExpr(&_vm->_scenery->_curStaticLayer);
}
void Inter_v1::o1_playCDTrack() {
- evalExpr(0);
+ _vm->_game->_script->evalExpr(0);
_vm->_sound->adlibPlayBgMusic(); // Mac version
- _vm->_sound->cdPlay(_vm->_global->_inter_resStr); // PC CD version
+ _vm->_sound->cdPlay(_vm->_game->_script->getResultStr()); // PC CD version
}
void Inter_v1::o1_getCDTrackPos() {
@@ -1103,15 +623,15 @@ void Inter_v1::o1_stopCD() {
}
void Inter_v1::o1_loadFontToSprite() {
- int16 i = load16();
- _vm->_draw->_fontToSprite[i].sprite = load16();
- _vm->_draw->_fontToSprite[i].base = load16();
- _vm->_draw->_fontToSprite[i].width = load16();
- _vm->_draw->_fontToSprite[i].height = load16();
+ int16 i = _vm->_game->_script->readInt16();
+ _vm->_draw->_fontToSprite[i].sprite = _vm->_game->_script->readInt16();
+ _vm->_draw->_fontToSprite[i].base = _vm->_game->_script->readInt16();
+ _vm->_draw->_fontToSprite[i].width = _vm->_game->_script->readInt16();
+ _vm->_draw->_fontToSprite[i].height = _vm->_game->_script->readInt16();
}
void Inter_v1::o1_freeFontToSprite() {
- int16 i = load16();
+ int16 i = _vm->_game->_script->readInt16();
_vm->_draw->_fontToSprite[i].sprite = -1;
_vm->_draw->_fontToSprite[i].base = -1;
_vm->_draw->_fontToSprite[i].width = -1;
@@ -1119,11 +639,7 @@ void Inter_v1::o1_freeFontToSprite() {
}
bool Inter_v1::o1_callSub(OpFuncParams &params) {
- byte *storedIP;
- uint16 offset;
-
- offset = load16();
- storedIP = _vm->_global->_inter_execPtr;
+ uint16 offset = _vm->_game->_script->readUint16();
debugC(5, kDebugGameFlow, "tot = \"%s\", offset = %d",
_vm->_game->_curTotFile, offset);
@@ -1147,79 +663,89 @@ bool Inter_v1::o1_callSub(OpFuncParams &params) {
return false;
}
- _vm->_global->_inter_execPtr = _vm->_game->_totFileData + offset;
+ _vm->_game->_script->call(offset);
- if ((params.counter == params.cmdCount) && (params.retFlag == 2))
+ if ((params.counter == params.cmdCount) && (params.retFlag == 2)) {
+ _vm->_game->_script->pop(false);
return true;
+ }
callSub(2);
- _vm->_global->_inter_execPtr = storedIP;
+
+ _vm->_game->_script->pop();
return false;
}
bool Inter_v1::o1_printTotText(OpFuncParams &params) {
- _vm->_draw->printTotText(load16());
+ _vm->_draw->printTotText(_vm->_game->_script->readInt16());
return false;
}
bool Inter_v1::o1_loadCursor(OpFuncParams &params) {
- int16 width, height;
- byte *dataBuf;
- int16 id;
- int8 index;
-
- id = load16();
- index = (int8) *_vm->_global->_inter_execPtr++;
+ int16 id = _vm->_game->_script->readInt16();
+ int8 index = _vm->_game->_script->readInt8();
if ((index * _vm->_draw->_cursorWidth) >= _vm->_draw->_cursorSprites->getWidth())
return false;
- dataBuf = _vm->_game->loadTotResource(id, 0, &width, &height);
+ Resource *resource = _vm->_game->_resources->getResource(id);
+ if (!resource)
+ return false;
_vm->_video->fillRect(*_vm->_draw->_cursorSprites,
index * _vm->_draw->_cursorWidth, 0,
index * _vm->_draw->_cursorWidth + _vm->_draw->_cursorWidth - 1,
_vm->_draw->_cursorHeight - 1, 0);
- _vm->_video->drawPackedSprite(dataBuf, width, height,
+ _vm->_video->drawPackedSprite(resource->getData(),
+ resource->getWidth(), resource->getHeight(),
index * _vm->_draw->_cursorWidth, 0, 0, *_vm->_draw->_cursorSprites);
_vm->_draw->_cursorAnimLow[index] = 0;
+ delete resource;
return false;
}
bool Inter_v1::o1_switch(OpFuncParams &params) {
- byte *callAddr;
+ uint32 offset;
+
+ checkSwitchTable(offset);
- checkSwitchTable(&callAddr);
- byte *storedIP = _vm->_global->_inter_execPtr;
- _vm->_global->_inter_execPtr = callAddr;
+ _vm->_game->_script->call(offset);
- if ((params.counter == params.cmdCount) && (params.retFlag == 2))
+ if (offset == 0)
+ _vm->_game->_script->setFinished(true);
+
+ if ((params.counter == params.cmdCount) && (params.retFlag == 2)) {
+ _vm->_game->_script->pop(false);
return true;
+ }
funcBlock(0);
- _vm->_global->_inter_execPtr = storedIP;
+
+ _vm->_game->_script->pop();
return false;
}
bool Inter_v1::o1_repeatUntil(OpFuncParams &params) {
- byte *blockPtr;
int16 size;
bool flag;
_nestLevel[0]++;
- blockPtr = _vm->_global->_inter_execPtr;
+
+ uint32 blockPos = _vm->_game->_script->pos();
do {
- _vm->_global->_inter_execPtr = blockPtr;
- size = READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ _vm->_game->_script->seek(blockPos);
+ size = _vm->_game->_script->peekUint16(2) + 2;
funcBlock(1);
- _vm->_global->_inter_execPtr = blockPtr + size + 1;
- flag = evalBoolResult();
+
+ _vm->_game->_script->seek(blockPos + size + 1);
+
+ flag = _vm->_game->_script->evalBoolResult();
} while (!flag && !_break && !_terminate && !_vm->shouldQuit());
_nestLevel[0]--;
@@ -1232,32 +758,31 @@ bool Inter_v1::o1_repeatUntil(OpFuncParams &params) {
}
bool Inter_v1::o1_whileDo(OpFuncParams &params) {
- byte *blockPtr;
- byte *savedIP;
bool flag;
int16 size;
_nestLevel[0]++;
do {
- savedIP = _vm->_global->_inter_execPtr;
- flag = evalBoolResult();
+ uint32 startPos = _vm->_game->_script->pos();
+
+ flag = _vm->_game->_script->evalBoolResult();
if (_terminate)
return false;
- blockPtr = _vm->_global->_inter_execPtr;
+ uint32 blockPos = _vm->_game->_script->pos();
- size = READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ size = _vm->_game->_script->peekUint16(2) + 2;
if (flag) {
funcBlock(1);
- _vm->_global->_inter_execPtr = savedIP;
+ _vm->_game->_script->seek(startPos);
} else
- _vm->_global->_inter_execPtr += size;
+ _vm->_game->_script->skip(size);
if (_break || _terminate || _vm->shouldQuit()) {
- _vm->_global->_inter_execPtr = blockPtr;
- _vm->_global->_inter_execPtr += size;
+ _vm->_game->_script->seek(blockPos);
+ _vm->_game->_script->skip(size);
break;
}
} while (flag);
@@ -1273,76 +798,65 @@ bool Inter_v1::o1_whileDo(OpFuncParams &params) {
bool Inter_v1::o1_if(OpFuncParams &params) {
byte cmd;
bool boolRes;
- byte *storedIP;
- boolRes = evalBoolResult();
+ boolRes = _vm->_game->_script->evalBoolResult();
if (boolRes) {
if ((params.counter == params.cmdCount) && (params.retFlag == 2))
return true;
- storedIP = _vm->_global->_inter_execPtr;
+ _vm->_game->_script->push();
funcBlock(0);
- _vm->_global->_inter_execPtr = storedIP;
+ _vm->_game->_script->pop();
- _vm->_global->_inter_execPtr +=
- READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ _vm->_game->_script->skip(_vm->_game->_script->peekUint16(2) + 2);
- debugC(5, kDebugGameFlow, "cmd = %d",
- (int16) *_vm->_global->_inter_execPtr);
+ debugC(5, kDebugGameFlow, "cmd = %d", (int16) _vm->_game->_script->peekByte());
- cmd = *_vm->_global->_inter_execPtr >> 4;
- _vm->_global->_inter_execPtr++;
+ cmd = _vm->_game->_script->readByte() >> 4;
if (cmd != 12)
return false;
- _vm->_global->_inter_execPtr +=
- READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ _vm->_game->_script->skip(_vm->_game->_script->peekUint16(2) + 2);
} else {
- _vm->_global->_inter_execPtr +=
- READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ _vm->_game->_script->skip(_vm->_game->_script->peekUint16(2) + 2);
- debugC(5, kDebugGameFlow, "cmd = %d",
- (int16) *_vm->_global->_inter_execPtr);
+ debugC(5, kDebugGameFlow, "cmd = %d", (int16) _vm->_game->_script->peekByte());
- cmd = *_vm->_global->_inter_execPtr >> 4;
- _vm->_global->_inter_execPtr++;
+ cmd = _vm->_game->_script->readByte() >> 4;
if (cmd != 12)
return false;
if ((params.counter == params.cmdCount) && (params.retFlag == 2))
return true;
- storedIP = _vm->_global->_inter_execPtr;
+ _vm->_game->_script->push();
funcBlock(0);
- _vm->_global->_inter_execPtr = storedIP;
+ _vm->_game->_script->pop();
- _vm->_global->_inter_execPtr +=
- READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2;
+ _vm->_game->_script->skip(_vm->_game->_script->peekUint16(2) + 2);
}
return false;
}
bool Inter_v1::o1_assign(OpFuncParams &params) {
- byte *savedPos;
- int16 token;
+ byte destType = _vm->_game->_script->peekByte();
+ int16 dest = _vm->_game->_script->readVarIndex();
+
int16 result;
- int16 varOff;
+ int16 srcType = _vm->_game->_script->evalExpr(&result);
- savedPos = _vm->_global->_inter_execPtr;
- varOff = _vm->_parse->parseVarIndex();
- token = evalExpr(&result);
- switch (savedPos[0]) {
- case 23:
- case 26:
- WRITE_VAR_OFFSET(varOff, _vm->_global->_inter_resVal);
+ switch (destType) {
+ case TYPE_VAR_INT32:
+ case TYPE_ARRAY_INT32:
+ WRITE_VAR_OFFSET(dest, _vm->_game->_script->getResultInt());
break;
- case 25:
- case 28:
- if (token == 20)
- WRITE_VARO_UINT8(varOff, result);
+ case TYPE_VAR_STR:
+ case TYPE_ARRAY_STR:
+ if (srcType == TYPE_IMM_INT16)
+ WRITE_VARO_UINT8(dest, result);
else
- WRITE_VARO_STR(varOff, _vm->_global->_inter_resStr);
+ WRITE_VARO_STR(dest, _vm->_game->_script->getResultStr());
break;
}
@@ -1350,17 +864,17 @@ bool Inter_v1::o1_assign(OpFuncParams &params) {
}
bool Inter_v1::o1_loadSpriteToPos(OpFuncParams &params) {
- _vm->_draw->_spriteLeft = load16();
+ _vm->_draw->_spriteLeft = _vm->_game->_script->readInt16();
- _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr();
- _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
- _vm->_draw->_transparency = *_vm->_global->_inter_execPtr & 1;
- _vm->_draw->_destSurface = ((int16) (*_vm->_global->_inter_execPtr >> 1)) - 1;
+ _vm->_draw->_transparency = _vm->_game->_script->peekByte() & 1;
+ _vm->_draw->_destSurface = ((int16) (_vm->_game->_script->peekByte() >> 1)) - 1;
if (_vm->_draw->_destSurface < 0)
_vm->_draw->_destSurface = 101;
- _vm->_global->_inter_execPtr += 2;
+ _vm->_game->_script->skip(2);
_vm->_draw->spriteOperation(DRAW_LOADSPRITE);
@@ -1371,12 +885,12 @@ bool Inter_v1::o1_printText(OpFuncParams &params) {
char buf[60];
int i;
- _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr();
- _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
- _vm->_draw->_backColor = _vm->_parse->parseValExpr();
- _vm->_draw->_frontColor = _vm->_parse->parseValExpr();
- _vm->_draw->_fontIndex = _vm->_parse->parseValExpr();
+ _vm->_draw->_backColor = _vm->_game->_script->readValExpr();
+ _vm->_draw->_frontColor = _vm->_game->_script->readValExpr();
+ _vm->_draw->_fontIndex = _vm->_game->_script->readValExpr();
_vm->_draw->_destSurface = 21;
_vm->_draw->_textToPrint = buf;
_vm->_draw->_transparency = 0;
@@ -1387,35 +901,35 @@ bool Inter_v1::o1_printText(OpFuncParams &params) {
}
do {
- for (i = 0; (((char) *_vm->_global->_inter_execPtr) != '.') &&
- (*_vm->_global->_inter_execPtr != 200);
- i++, _vm->_global->_inter_execPtr++) {
- buf[i] = (char) *_vm->_global->_inter_execPtr;
+ for (i = 0; ((_vm->_game->_script->peekChar()) != '.') &&
+ (_vm->_game->_script->peekByte() != 200);
+ i++, _vm->_game->_script->skip(1)) {
+ buf[i] = _vm->_game->_script->peekChar();
}
- if (*_vm->_global->_inter_execPtr != 200) {
- _vm->_global->_inter_execPtr++;
- switch (*_vm->_global->_inter_execPtr) {
- case 23:
- case 26:
+ if (_vm->_game->_script->peekByte() != 200) {
+ _vm->_game->_script->skip(1);
+ switch (_vm->_game->_script->peekByte()) {
+ case TYPE_VAR_INT32:
+ case TYPE_ARRAY_INT32:
sprintf(buf + i, "%d",
- VAR_OFFSET(_vm->_parse->parseVarIndex()));
+ VAR_OFFSET(_vm->_game->_script->readVarIndex()));
break;
- case 25:
- case 28:
+ case TYPE_VAR_STR:
+ case TYPE_ARRAY_STR:
sprintf(buf + i, "%s",
- GET_VARO_STR(_vm->_parse->parseVarIndex()));
+ GET_VARO_STR(_vm->_game->_script->readVarIndex()));
break;
}
- _vm->_global->_inter_execPtr++;
+ _vm->_game->_script->skip(1);
} else
buf[i] = 0;
_vm->_draw->spriteOperation(DRAW_PRINTTEXT);
- } while (*_vm->_global->_inter_execPtr != 200);
+ } while (_vm->_game->_script->peekByte() != 200);
- _vm->_global->_inter_execPtr++;
+ _vm->_game->_script->skip(1);
return false;
}
@@ -1424,16 +938,14 @@ bool Inter_v1::o1_loadTot(OpFuncParams &params) {
char buf[20];
int8 size;
- if ((*_vm->_global->_inter_execPtr & 0x80) != 0) {
- _vm->_global->_inter_execPtr++;
- evalExpr(0);
- strncpy0(buf, _vm->_global->_inter_resStr, 15);
+ if ((_vm->_game->_script->peekByte() & 0x80) != 0) {
+ _vm->_game->_script->skip(1);
+ _vm->_game->_script->evalExpr(0);
+ strncpy0(buf, _vm->_game->_script->getResultStr(), 15);
} else {
- size = (int8) *_vm->_global->_inter_execPtr++;
- for (int i = 0; i < size; i++)
- buf[i] = *_vm->_global->_inter_execPtr++;
-
- buf[size] = 0;
+ size = _vm->_game->_script->readInt8();
+ memcpy(buf, _vm->_game->_script->readString(size), size);
+ buf[size] = '\0';
}
// if (_vm->getGameType() == kGameTypeGeisha)
@@ -1450,15 +962,15 @@ bool Inter_v1::o1_loadTot(OpFuncParams &params) {
bool Inter_v1::o1_palLoad(OpFuncParams &params) {
int index1, index2;
- byte *palPtr;
byte cmd;
+ Resource *resource;
- cmd = *_vm->_global->_inter_execPtr++;
+ cmd = _vm->_game->_script->readByte();
switch (cmd & 0x7F) {
case 48:
if ((_vm->_global->_fakeVideoMode < 0x32) ||
(_vm->_global->_fakeVideoMode > 0x63)) {
- _vm->_global->_inter_execPtr += 48;
+ _vm->_game->_script->skip(48);
return false;
}
break;
@@ -1466,35 +978,35 @@ bool Inter_v1::o1_palLoad(OpFuncParams &params) {
case 49:
if ((_vm->_global->_fakeVideoMode != 5) &&
(_vm->_global->_fakeVideoMode != 7)) {
- _vm->_global->_inter_execPtr += 18;
+ _vm->_game->_script->skip(18);
return false;
}
break;
case 50:
if (_vm->_global->_colorCount == 256) {
- _vm->_global->_inter_execPtr += 16;
+ _vm->_game->_script->skip(16);
return false;
}
break;
case 51:
if (_vm->_global->_fakeVideoMode < 0x64) {
- _vm->_global->_inter_execPtr += 2;
+ _vm->_game->_script->skip(2);
return false;
}
break;
case 52:
if (_vm->_global->_colorCount == 256) {
- _vm->_global->_inter_execPtr += 48;
+ _vm->_game->_script->skip(48);
return false;
}
break;
case 53:
if (_vm->_global->_colorCount != 256) {
- _vm->_global->_inter_execPtr += 2;
+ _vm->_game->_script->skip(2);
return false;
}
break;
@@ -1507,14 +1019,14 @@ bool Inter_v1::o1_palLoad(OpFuncParams &params) {
case 61:
if (_vm->_global->_fakeVideoMode < 0x13) {
- _vm->_global->_inter_execPtr += 4;
+ _vm->_game->_script->skip(4);
return false;
}
break;
}
if ((cmd & 0x7F) == 0x30) {
- _vm->_global->_inter_execPtr += 48;
+ _vm->_game->_script->skip(48);
return false;
}
@@ -1525,7 +1037,7 @@ bool Inter_v1::o1_palLoad(OpFuncParams &params) {
bool allZero = true;
for (int i = 2; i < 18; i++) {
- if (_vm->_global->_inter_execPtr[i] != 0) {
+ if (_vm->_game->_script->peekByte(i) != 0) {
allZero = false;
break;
}
@@ -1533,28 +1045,30 @@ bool Inter_v1::o1_palLoad(OpFuncParams &params) {
if (!allZero) {
_vm->_video->clearSurf(*_vm->_draw->_frontSurface);
_vm->_draw->_noInvalidated57 = true;
- _vm->_global->_inter_execPtr += 18;
+ _vm->_game->_script->skip(48);
return false;
}
_vm->_draw->_noInvalidated57 = false;
- for (int i = 0; i < 18; i++, _vm->_global->_inter_execPtr++) {
+ for (int i = 0; i < 18; i++) {
if (i < 2) {
if (!_vm->_draw->_applyPal)
continue;
- _vm->_draw->_unusedPalette1[i] = *_vm->_global->_inter_execPtr;
+ _vm->_draw->_unusedPalette1[i] = _vm->_game->_script->peekByte();
continue;
}
- index1 = *_vm->_global->_inter_execPtr >> 4;
- index2 = (*_vm->_global->_inter_execPtr & 0xF);
+ index1 = _vm->_game->_script->peekByte() >> 4;
+ index2 = _vm->_game->_script->peekByte() & 0xF;
_vm->_draw->_unusedPalette1[i] =
((_vm->_draw->_palLoadData1[index1] +
_vm->_draw->_palLoadData2[index2]) << 8) +
(_vm->_draw->_palLoadData2[index1] +
_vm->_draw->_palLoadData1[index2]);
+
+ _vm->_game->_script->skip(1);
}
_vm->_global->_pPaletteDesc->unused1 = _vm->_draw->_unusedPalette1;
@@ -1564,21 +1078,25 @@ bool Inter_v1::o1_palLoad(OpFuncParams &params) {
switch (cmd) {
case 50:
- for (int i = 0; i < 16; i++, _vm->_global->_inter_execPtr++)
- _vm->_draw->_unusedPalette2[i] = *_vm->_global->_inter_execPtr;
+ for (int i = 0; i < 16; i++)
+ _vm->_draw->_unusedPalette2[i] = _vm->_game->_script->readByte();
break;
case 52:
- for (int i = 0; i < 16; i++, _vm->_global->_inter_execPtr += 3) {
- _vm->_draw->_vgaPalette[i].red = _vm->_global->_inter_execPtr[0];
- _vm->_draw->_vgaPalette[i].green = _vm->_global->_inter_execPtr[1];
- _vm->_draw->_vgaPalette[i].blue = _vm->_global->_inter_execPtr[2];
+ for (int i = 0; i < 16; i++) {
+ _vm->_draw->_vgaPalette[i].red = _vm->_game->_script->readByte();
+ _vm->_draw->_vgaPalette[i].green = _vm->_game->_script->readByte();
+ _vm->_draw->_vgaPalette[i].blue = _vm->_game->_script->readByte();
}
break;
case 53:
- palPtr = _vm->_game->loadTotResource(_vm->_inter->load16());
- memcpy((char *) _vm->_draw->_vgaPalette, palPtr, 768);
+ resource = _vm->_game->_resources->getResource(_vm->_game->_script->readInt16());
+ if (!resource)
+ break;
+
+ memcpy((char *) _vm->_draw->_vgaPalette, resource->getData(), MIN(768, resource->getSize()));
+ delete resource;
break;
case 54:
@@ -1586,11 +1104,15 @@ bool Inter_v1::o1_palLoad(OpFuncParams &params) {
break;
case 61:
- index1 = *_vm->_global->_inter_execPtr++;
- index2 = (*_vm->_global->_inter_execPtr++ - index1 + 1) * 3;
- palPtr = _vm->_game->loadTotResource(_vm->_inter->load16());
+ index1 = _vm->_game->_script->readByte();
+ index2 = (_vm->_game->_script->readByte() - index1 + 1) * 3;
+ resource = _vm->_game->_resources->getResource(_vm->_game->_script->readInt16());
+ if (!resource)
+ break;
+
memcpy((char *) _vm->_draw->_vgaPalette + index1 * 3,
- palPtr + index1 * 3, index2);
+ resource->getData() + index1 * 3, index2);
+ delete resource;
if (_vm->_draw->_applyPal) {
_vm->_draw->_applyPal = false;
@@ -1628,7 +1150,7 @@ bool Inter_v1::o1_keyFunc(OpFuncParams &params) {
int16 key;
uint32 now;
- cmd = load16();
+ cmd = _vm->_game->_script->readInt16();
animPalette();
_vm->_draw->blitInvalidated();
@@ -1643,7 +1165,7 @@ bool Inter_v1::o1_keyFunc(OpFuncParams &params) {
// to become 5000. We deliberately slow down busy-waiting, so we shorten
// the counting, too.
if ((_vm->getGameType() == kGameTypeWeen) && (VAR(59) < 4000) &&
- ((_vm->_global->_inter_execPtr - _vm->_game->_totFileData) == 729) &&
+ (_vm->_game->_script->pos() == 729) &&
!scumm_stricmp(_vm->_game->_curTotFile, "intro5.tot"))
WRITE_VAR(59, 4000);
@@ -1689,10 +1211,10 @@ bool Inter_v1::o1_capturePush(OpFuncParams &params) {
int16 left, top;
int16 width, height;
- left = _vm->_parse->parseValExpr();
- top = _vm->_parse->parseValExpr();
- width = _vm->_parse->parseValExpr();
- height = _vm->_parse->parseValExpr();
+ left = _vm->_game->_script->readValExpr();
+ top = _vm->_game->_script->readValExpr();
+ width = _vm->_game->_script->readValExpr();
+ height = _vm->_game->_script->readValExpr();
if ((width < 0) || (height < 0))
return false;
@@ -1711,24 +1233,24 @@ bool Inter_v1::o1_capturePop(OpFuncParams &params) {
}
bool Inter_v1::o1_animPalInit(OpFuncParams &params) {
- _animPalDir[0] = load16();
- _animPalLowIndex[0] = _vm->_parse->parseValExpr();
- _animPalHighIndex[0] = _vm->_parse->parseValExpr();
+ _animPalDir[0] = _vm->_game->_script->readInt16();
+ _animPalLowIndex[0] = _vm->_game->_script->readValExpr();
+ _animPalHighIndex[0] = _vm->_game->_script->readValExpr();
return false;
}
bool Inter_v1::o1_drawOperations(OpFuncParams &params) {
byte cmd;
- cmd = *_vm->_global->_inter_execPtr++;
+ cmd = _vm->_game->_script->readByte();
- executeDrawOpcode(cmd);
+ executeOpcodeDraw(cmd);
return false;
}
bool Inter_v1::o1_setcmdCount(OpFuncParams &params) {
- params.cmdCount = *_vm->_global->_inter_execPtr++;
+ params.cmdCount = _vm->_game->_script->readByte();
params.counter = 0;
return false;
}
@@ -1737,7 +1259,7 @@ bool Inter_v1::o1_return(OpFuncParams &params) {
if (params.retFlag != 2)
_break = true;
- _vm->_global->_inter_execPtr = 0;
+ _vm->_game->_script->setFinished(true);
return true;
}
@@ -1747,7 +1269,7 @@ bool Inter_v1::o1_renewTimeInVars(OpFuncParams &params) {
}
bool Inter_v1::o1_speakerOn(OpFuncParams &params) {
- _vm->_sound->speakerOn(_vm->_parse->parseValExpr(), -1);
+ _vm->_sound->speakerOn(_vm->_game->_script->readValExpr(), -1);
return false;
}
@@ -1757,11 +1279,11 @@ bool Inter_v1::o1_speakerOff(OpFuncParams &params) {
}
bool Inter_v1::o1_putPixel(OpFuncParams &params) {
- _vm->_draw->_destSurface = load16();
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
- _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr();
- _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr();
- _vm->_draw->_frontColor = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_frontColor = _vm->_game->_script->readValExpr();
_vm->_draw->spriteOperation(DRAW_PUTPIXEL);
return false;
}
@@ -1773,33 +1295,33 @@ bool Inter_v1::o1_goblinFunc(OpFuncParams &params) {
gobParams.extraData = 0;
gobParams.objDesc = 0;
- gobParams.retVarPtr.set(*_vm->_inter->_variables, 236);
+ gobParams.retVarPtr.set(*_variables, 236);
- cmd = load16();
- _vm->_global->_inter_execPtr += 2;
+ cmd = _vm->_game->_script->readInt16();
+ _vm->_game->_script->skip(2);
if ((cmd > 0) && (cmd < 17)) {
objDescSet = true;
- gobParams.extraData = load16();
+ gobParams.extraData = _vm->_game->_script->readInt16();
gobParams.objDesc = _vm->_goblin->_objects[gobParams.extraData];
- gobParams.extraData = load16();
+ gobParams.extraData = _vm->_game->_script->readInt16();
}
if ((cmd > 90) && (cmd < 107)) {
objDescSet = true;
- gobParams.extraData = load16();
+ gobParams.extraData = _vm->_game->_script->readInt16();
gobParams.objDesc = _vm->_goblin->_goblins[gobParams.extraData];
- gobParams.extraData = load16();
+ gobParams.extraData = _vm->_game->_script->readInt16();
cmd -= 90;
}
if ((cmd > 110) && (cmd < 128)) {
objDescSet = true;
- gobParams.extraData = load16();
+ gobParams.extraData = _vm->_game->_script->readInt16();
gobParams.objDesc = _vm->_goblin->_goblins[gobParams.extraData];
cmd -= 90;
} else if ((cmd > 20) && (cmd < 38)) {
objDescSet = true;
- gobParams.extraData = load16();
+ gobParams.extraData = _vm->_game->_script->readInt16();
gobParams.objDesc = _vm->_goblin->_objects[gobParams.extraData];
}
@@ -1815,7 +1337,7 @@ bool Inter_v1::o1_goblinFunc(OpFuncParams &params) {
if ((cmd < 40) && objDescSet && !gobParams.objDesc)
return false;
- executeGoblinOpcode(cmd, gobParams);
+ executeOpcodeGob(cmd, gobParams);
return false;
}
@@ -1825,31 +1347,31 @@ bool Inter_v1::o1_createSprite(OpFuncParams &params) {
int16 width, height;
int16 flag;
- if (_vm->_global->_inter_execPtr[1] == 0) {
- index = load16();
- width = load16();
- height = load16();
+ if (_vm->_game->_script->peekByte(1) == 0) {
+ index = _vm->_game->_script->readInt16();
+ width = _vm->_game->_script->readInt16();
+ height = _vm->_game->_script->readInt16();
} else {
- index = _vm->_parse->parseValExpr();
- width = _vm->_parse->parseValExpr();
- height = _vm->_parse->parseValExpr();
+ index = _vm->_game->_script->readValExpr();
+ width = _vm->_game->_script->readValExpr();
+ height = _vm->_game->_script->readValExpr();
}
- flag = load16();
+ flag = _vm->_game->_script->readInt16();
_vm->_draw->initSpriteSurf(index, width, height, flag ? 2 : 0);
return false;
}
bool Inter_v1::o1_freeSprite(OpFuncParams &params) {
- _vm->_draw->freeSprite(load16());
+ _vm->_draw->freeSprite(_vm->_game->_script->readInt16());
return false;
}
bool Inter_v1::o1_returnTo(OpFuncParams &params) {
if (params.retFlag == 1) {
_break = true;
- _vm->_global->_inter_execPtr = 0;
+ _vm->_game->_script->setFinished(true);
return true;
}
@@ -1858,14 +1380,14 @@ bool Inter_v1::o1_returnTo(OpFuncParams &params) {
*_breakFromLevel = *_nestLevel;
_break = true;
- _vm->_global->_inter_execPtr = 0;
+ _vm->_game->_script->setFinished(true);
return true;
}
bool Inter_v1::o1_loadSpriteContent(OpFuncParams &params) {
- _vm->_draw->_spriteLeft = load16();
- _vm->_draw->_destSurface = load16();
- _vm->_draw->_transparency = load16();
+ _vm->_draw->_spriteLeft = _vm->_game->_script->readInt16();
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
+ _vm->_draw->_transparency = _vm->_game->_script->readInt16();
_vm->_draw->_destSpriteX = 0;
_vm->_draw->_destSpriteY = 0;
@@ -1874,25 +1396,25 @@ bool Inter_v1::o1_loadSpriteContent(OpFuncParams &params) {
}
bool Inter_v1::o1_copySprite(OpFuncParams &params) {
- if (_vm->_global->_inter_execPtr[1] == 0)
- _vm->_draw->_sourceSurface = load16();
+ if (_vm->_game->_script->peekByte(1) == 0)
+ _vm->_draw->_sourceSurface = _vm->_game->_script->readInt16();
else
- _vm->_draw->_sourceSurface = _vm->_parse->parseValExpr();
+ _vm->_draw->_sourceSurface = _vm->_game->_script->readValExpr();
- if (_vm->_global->_inter_execPtr[1] == 0)
- _vm->_draw->_destSurface = load16();
+ if (_vm->_game->_script->peekByte(1) == 0)
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
else
- _vm->_draw->_destSurface = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSurface = _vm->_game->_script->readValExpr();
- _vm->_draw->_spriteLeft = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteTop = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteRight = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteBottom = _vm->_parse->parseValExpr();
+ _vm->_draw->_spriteLeft = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteTop = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteBottom = _vm->_game->_script->readValExpr();
- _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr();
- _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
- _vm->_draw->_transparency = load16();
+ _vm->_draw->_transparency = _vm->_game->_script->readInt16();
_vm->_draw->spriteOperation(DRAW_BLITSURF);
return false;
@@ -1901,14 +1423,14 @@ bool Inter_v1::o1_copySprite(OpFuncParams &params) {
bool Inter_v1::o1_fillRect(OpFuncParams &params) {
int16 destSurf;
- _vm->_draw->_destSurface = destSurf = load16();
+ _vm->_draw->_destSurface = destSurf = _vm->_game->_script->readInt16();
- _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr();
- _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteRight = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteBottom = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteBottom = _vm->_game->_script->readValExpr();
- _vm->_draw->_backColor = _vm->_parse->parseValExpr();
+ _vm->_draw->_backColor = _vm->_game->_script->readValExpr();
if (!_vm->_draw->_spritesArray[(destSurf >= 100) ? (destSurf - 80) : destSurf])
return false;
@@ -1927,14 +1449,14 @@ bool Inter_v1::o1_fillRect(OpFuncParams &params) {
}
bool Inter_v1::o1_drawLine(OpFuncParams &params) {
- _vm->_draw->_destSurface = load16();
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
- _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr();
- _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteRight = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteBottom = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteBottom = _vm->_game->_script->readValExpr();
- _vm->_draw->_frontColor = _vm->_parse->parseValExpr();
+ _vm->_draw->_frontColor = _vm->_game->_script->readValExpr();
_vm->_draw->spriteOperation(DRAW_DRAWLINE);
return false;
}
@@ -1945,28 +1467,28 @@ bool Inter_v1::o1_strToLong(OpFuncParams &params) {
int16 destVar;
int32 res;
- strVar = _vm->_parse->parseVarIndex();
+ strVar = _vm->_game->_script->readVarIndex();
strncpy0(str, GET_VARO_STR(strVar), 19);
res = atoi(str);
- destVar = _vm->_parse->parseVarIndex();
+ destVar = _vm->_game->_script->readVarIndex();
WRITE_VAR_OFFSET(destVar, res);
return false;
}
bool Inter_v1::o1_invalidate(OpFuncParams &params) {
- _vm->_draw->_destSurface = load16();
- _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr();
- _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr();
- _vm->_draw->_spriteRight = _vm->_parse->parseValExpr();
- _vm->_draw->_frontColor = _vm->_parse->parseValExpr();
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+ _vm->_draw->_frontColor = _vm->_game->_script->readValExpr();
_vm->_draw->spriteOperation(DRAW_INVALIDATE);
return false;
}
bool Inter_v1::o1_setBackDelta(OpFuncParams &params) {
- _vm->_draw->_backDeltaX = _vm->_parse->parseValExpr();
- _vm->_draw->_backDeltaY = _vm->_parse->parseValExpr();
+ _vm->_draw->_backDeltaX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_backDeltaY = _vm->_game->_script->readValExpr();
return false;
}
@@ -1977,9 +1499,9 @@ bool Inter_v1::o1_playSound(OpFuncParams &params) {
int16 index;
int16 endRep;
- index = _vm->_parse->parseValExpr();
- repCount = _vm->_parse->parseValExpr();
- frequency = _vm->_parse->parseValExpr();
+ index = _vm->_game->_script->readValExpr();
+ repCount = _vm->_game->_script->readValExpr();
+ frequency = _vm->_game->_script->readValExpr();
SoundDesc *sample = _vm->_sound->sampleGetBySlot(index);
@@ -2002,7 +1524,7 @@ bool Inter_v1::o1_playSound(OpFuncParams &params) {
}
if (sample->getType() == SOUND_ADL) {
- _vm->_sound->adlibLoad(sample->getData(), sample->size(), index);
+ _vm->_sound->adlibLoadADL(sample->getData(), sample->size(), index);
_vm->_sound->adlibSetRepeating(repCount - 1);
_vm->_sound->adlibPlay();
} else {
@@ -2015,7 +1537,7 @@ bool Inter_v1::o1_playSound(OpFuncParams &params) {
bool Inter_v1::o1_stopSound(OpFuncParams &params) {
_vm->_sound->adlibStop();
- _vm->_sound->blasterStop(_vm->_parse->parseValExpr());
+ _vm->_sound->blasterStop(_vm->_game->_script->readValExpr());
_soundEndTimeKey = 0;
return false;
@@ -2041,8 +1563,8 @@ bool Inter_v1::o1_playComposition(OpFuncParams &params) {
int16 dataVar;
int16 freqVal;
- dataVar = _vm->_parse->parseVarIndex();
- freqVal = _vm->_parse->parseValExpr();
+ dataVar = _vm->_game->_script->readVarIndex();
+ freqVal = _vm->_game->_script->readValExpr();
for (int i = 0; i < 50; i++)
composition[i] = (int16) VAR_OFFSET(dataVar + i * 4);
@@ -2054,8 +1576,8 @@ bool Inter_v1::o1_getFreeMem(OpFuncParams &params) {
int16 freeVar;
int16 maxFreeVar;
- freeVar = _vm->_parse->parseVarIndex();
- maxFreeVar = _vm->_parse->parseVarIndex();
+ freeVar = _vm->_game->_script->readVarIndex();
+ maxFreeVar = _vm->_game->_script->readVarIndex();
// HACK
WRITE_VAR_OFFSET(freeVar, 1000000);
@@ -2067,22 +1589,22 @@ bool Inter_v1::o1_checkData(OpFuncParams &params) {
int16 handle;
int16 varOff;
- evalExpr(0);
- varOff = _vm->_parse->parseVarIndex();
- handle = _vm->_dataIO->openData(_vm->_global->_inter_resStr);
+ _vm->_game->_script->evalExpr(0);
+ varOff = _vm->_game->_script->readVarIndex();
+ handle = _vm->_dataIO->openData(_vm->_game->_script->getResultStr());
WRITE_VAR_OFFSET(varOff, handle);
if (handle >= 0)
_vm->_dataIO->closeData(handle);
else
- warning("File \"%s\" not found", _vm->_global->_inter_resStr);
+ warning("File \"%s\" not found", _vm->_game->_script->getResultStr());
return false;
}
bool Inter_v1::o1_prepareStr(OpFuncParams &params) {
int16 strVar;
- strVar = _vm->_parse->parseVarIndex();
+ strVar = _vm->_game->_script->readVarIndex();
_vm->_util->prepareStr(GET_VARO_FSTR(strVar));
return false;
}
@@ -2091,12 +1613,12 @@ bool Inter_v1::o1_insertStr(OpFuncParams &params) {
int16 pos;
int16 strVar;
- strVar = _vm->_parse->parseVarIndex();
- evalExpr(0);
- pos = _vm->_parse->parseValExpr();
+ strVar = _vm->_game->_script->readVarIndex();
+ _vm->_game->_script->evalExpr(0);
+ pos = _vm->_game->_script->readValExpr();
char *str = GET_VARO_FSTR(strVar);
- _vm->_util->insertStr(_vm->_global->_inter_resStr, str, pos);
+ _vm->_util->insertStr(_vm->_game->_script->getResultStr(), str, pos);
return false;
}
@@ -2105,9 +1627,9 @@ bool Inter_v1::o1_cutStr(OpFuncParams &params) {
int16 pos;
int16 size;
- strVar = _vm->_parse->parseVarIndex();
- pos = _vm->_parse->parseValExpr();
- size = _vm->_parse->parseValExpr();
+ strVar = _vm->_game->_script->readVarIndex();
+ pos = _vm->_game->_script->readValExpr();
+ size = _vm->_game->_script->readValExpr();
_vm->_util->cutFromStr(GET_VARO_STR(strVar), pos, size);
return false;
}
@@ -2117,11 +1639,11 @@ bool Inter_v1::o1_strstr(OpFuncParams &params) {
int16 resVar;
int16 pos;
- strVar = _vm->_parse->parseVarIndex();
- evalExpr(0);
- resVar = _vm->_parse->parseVarIndex();
+ strVar = _vm->_game->_script->readVarIndex();
+ _vm->_game->_script->evalExpr(0);
+ resVar = _vm->_game->_script->readVarIndex();
- char *res = strstr(GET_VARO_STR(strVar), _vm->_global->_inter_resStr);
+ char *res = strstr(GET_VARO_STR(strVar), _vm->_game->_script->getResultStr());
pos = res ? (res - (GET_VARO_STR(strVar))) : -1;
WRITE_VAR_OFFSET(resVar, pos);
return false;
@@ -2131,17 +1653,17 @@ bool Inter_v1::o1_istrlen(OpFuncParams &params) {
int16 len;
int16 strVar;
- strVar = _vm->_parse->parseVarIndex();
+ strVar = _vm->_game->_script->readVarIndex();
len = strlen(GET_VARO_STR(strVar));
- strVar = _vm->_parse->parseVarIndex();
+ strVar = _vm->_game->_script->readVarIndex();
WRITE_VAR_OFFSET(strVar, len);
return false;
}
bool Inter_v1::o1_setMousePos(OpFuncParams &params) {
- _vm->_global->_inter_mouseX = _vm->_parse->parseValExpr();
- _vm->_global->_inter_mouseY = _vm->_parse->parseValExpr();
+ _vm->_global->_inter_mouseX = _vm->_game->_script->readValExpr();
+ _vm->_global->_inter_mouseY = _vm->_game->_script->readValExpr();
_vm->_global->_inter_mouseX -= _vm->_video->_scrollOffsetX;
_vm->_global->_inter_mouseY -= _vm->_video->_scrollOffsetY;
if (_vm->_global->_useMouse != 0)
@@ -2151,7 +1673,7 @@ bool Inter_v1::o1_setMousePos(OpFuncParams &params) {
}
bool Inter_v1::o1_setFrameRate(OpFuncParams &params) {
- _vm->_util->setFrameRate(_vm->_parse->parseValExpr());
+ _vm->_util->setFrameRate(_vm->_game->_script->readValExpr());
return false;
}
@@ -2177,27 +1699,23 @@ bool Inter_v1::o1_blitCursor(OpFuncParams &params) {
bool Inter_v1::o1_loadFont(OpFuncParams &params) {
int16 index;
- evalExpr(0);
- index = load16();
+ _vm->_game->_script->evalExpr(0);
+ index = _vm->_game->_script->readInt16();
delete _vm->_draw->_fonts[index];
_vm->_draw->animateCursor(4);
- if (_vm->_game->_extHandle >= 0)
- _vm->_dataIO->closeData(_vm->_game->_extHandle);
_vm->_draw->_fonts[index] =
- _vm->_util->loadFont(_vm->_global->_inter_resStr);
+ _vm->_util->loadFont(_vm->_game->_script->getResultStr());
- if (_vm->_game->_extHandle >= 0)
- _vm->_game->_extHandle = _vm->_dataIO->openData(_vm->_game->_curExtFile);
return false;
}
bool Inter_v1::o1_freeFont(OpFuncParams &params) {
int16 index;
- index = load16();
+ index = _vm->_game->_script->readInt16();
delete _vm->_draw->_fonts[index];
_vm->_draw->_fonts[index] = 0;
return false;
@@ -2210,17 +1728,14 @@ bool Inter_v1::o1_readData(OpFuncParams &params) {
int16 offset;
int16 handle;
- evalExpr(0);
- dataVar = _vm->_parse->parseVarIndex();
- size = _vm->_parse->parseValExpr();
- offset = _vm->_parse->parseValExpr();
+ _vm->_game->_script->evalExpr(0);
+ dataVar = _vm->_game->_script->readVarIndex();
+ size = _vm->_game->_script->readValExpr();
+ offset = _vm->_game->_script->readValExpr();
retSize = 0;
- if (_vm->_game->_extHandle >= 0)
- _vm->_dataIO->closeData(_vm->_game->_extHandle);
-
WRITE_VAR(1, 1);
- handle = _vm->_dataIO->openData(_vm->_global->_inter_resStr);
+ handle = _vm->_dataIO->openData(_vm->_game->_script->getResultStr());
if (handle >= 0) {
DataStream *stream = _vm->_dataIO->openAsStream(handle, true);
@@ -2241,8 +1756,6 @@ bool Inter_v1::o1_readData(OpFuncParams &params) {
delete stream;
}
- if (_vm->_game->_extHandle >= 0)
- _vm->_game->_extHandle = _vm->_dataIO->openData(_vm->_game->_curExtFile);
return false;
}
@@ -2255,22 +1768,22 @@ bool Inter_v1::o1_writeData(OpFuncParams &params) {
// (Gobliiins 1 doesn't use save file), so we just warn should it be
// called regardless.
- evalExpr(0);
- dataVar = _vm->_parse->parseVarIndex();
- size = _vm->_parse->parseValExpr();
- offset = _vm->_parse->parseValExpr();
+ _vm->_game->_script->evalExpr(0);
+ dataVar = _vm->_game->_script->readVarIndex();
+ size = _vm->_game->_script->readValExpr();
+ offset = _vm->_game->_script->readValExpr();
- warning("Attempted to write to file \"%s\"", _vm->_global->_inter_resStr);
+ warning("Attempted to write to file \"%s\"", _vm->_game->_script->getResultStr());
WRITE_VAR(1, 0);
return false;
}
bool Inter_v1::o1_manageDataFile(OpFuncParams &params) {
- evalExpr(0);
+ _vm->_game->_script->evalExpr(0);
- if (_vm->_global->_inter_resStr[0] != 0)
- _vm->_dataIO->openDataFile(_vm->_global->_inter_resStr);
+ if (_vm->_game->_script->getResultStr()[0] != 0)
+ _vm->_dataIO->openDataFile(_vm->_game->_script->getResultStr());
else
_vm->_dataIO->closeDataFile();
return false;
@@ -2434,16 +1947,16 @@ void Inter_v1::o1_getMaxTick(OpGobParams &params) {
}
void Inter_v1::o1_manipulateMap(OpGobParams &params) {
- int16 xPos = load16();
- int16 yPos = load16();
- int16 item = load16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
+ int16 item = _vm->_game->_script->readInt16();
manipulateMap(xPos, yPos, item);
}
void Inter_v1::o1_getItem(OpGobParams &params) {
- int16 xPos = load16();
- int16 yPos = load16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
if ((_vm->_map->getItem(xPos, yPos) & 0xFF00) != 0)
params.retVarPtr = (uint32) ((_vm->_map->getItem(xPos, yPos) & 0xFF00) >> 8);
@@ -2452,9 +1965,9 @@ void Inter_v1::o1_getItem(OpGobParams &params) {
}
void Inter_v1::o1_manipulateMapIndirect(OpGobParams &params) {
- int16 xPos = load16();
- int16 yPos = load16();
- int16 item = load16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
+ int16 item = _vm->_game->_script->readInt16();
xPos = VAR(xPos);
yPos = VAR(yPos);
@@ -2464,8 +1977,8 @@ void Inter_v1::o1_manipulateMapIndirect(OpGobParams &params) {
}
void Inter_v1::o1_getItemIndirect(OpGobParams &params) {
- int16 xPos = load16();
- int16 yPos = load16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
xPos = VAR(xPos);
yPos = VAR(yPos);
@@ -2477,17 +1990,17 @@ void Inter_v1::o1_getItemIndirect(OpGobParams &params) {
}
void Inter_v1::o1_setPassMap(OpGobParams &params) {
- int16 xPos = load16();
- int16 yPos = load16();
- int16 val = load16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
+ int16 val = _vm->_game->_script->readInt16();
_vm->_map->setPass(xPos, yPos, val);
}
void Inter_v1::o1_setGoblinPosH(OpGobParams &params) {
int16 layer;
- int16 item = load16();
- int16 xPos = load16();
- int16 yPos = load16();
+ int16 item = _vm->_game->_script->readInt16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
_vm->_goblin->_gobPositions[item].x = xPos * 2;
_vm->_goblin->_gobPositions[item].y = yPos * 2;
@@ -2522,20 +2035,20 @@ void Inter_v1::o1_setGoblinPosH(OpGobParams &params) {
}
void Inter_v1::o1_getGoblinPosXH(OpGobParams &params) {
- int16 item = load16();
+ int16 item = _vm->_game->_script->readInt16();
params.retVarPtr = (uint32) (_vm->_goblin->_gobPositions[item].x >> 1);
}
void Inter_v1::o1_getGoblinPosYH(OpGobParams &params) {
- int16 item = load16();
+ int16 item = _vm->_game->_script->readInt16();
params.retVarPtr = (uint32) (_vm->_goblin->_gobPositions[item].y >> 1);
}
void Inter_v1::o1_setGoblinMultState(OpGobParams &params) {
int16 layer;
- int16 item = load16();
- int16 xPos = load16();
- int16 yPos = load16();
+ int16 item = _vm->_game->_script->readInt16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
params.objDesc = _vm->_goblin->_goblins[item];
if (yPos == 0) {
@@ -2594,18 +2107,18 @@ void Inter_v1::o1_setGoblinMultState(OpGobParams &params) {
}
void Inter_v1::o1_setGoblinUnk14(OpGobParams &params) {
- int16 item = load16();
- int16 val = load16();
+ int16 item = _vm->_game->_script->readInt16();
+ int16 val = _vm->_game->_script->readInt16();
params.objDesc = _vm->_goblin->_objects[item];
params.objDesc->unk14 = val;
}
void Inter_v1::o1_setItemIdInPocket(OpGobParams &params) {
- _vm->_goblin->_itemIdInPocket = load16();
+ _vm->_goblin->_itemIdInPocket = _vm->_game->_script->readInt16();
}
void Inter_v1::o1_setItemIndInPocket(OpGobParams &params) {
- _vm->_goblin->_itemIndInPocket = load16();
+ _vm->_goblin->_itemIndInPocket = _vm->_game->_script->readInt16();
}
void Inter_v1::o1_getItemIdInPocket(OpGobParams &params) {
@@ -2618,9 +2131,9 @@ void Inter_v1::o1_getItemIndInPocket(OpGobParams &params) {
void Inter_v1::o1_setGoblinPos(OpGobParams &params) {
int16 layer;
- int16 item = load16();
- int16 xPos = load16();
- int16 yPos = load16();
+ int16 item = _vm->_game->_script->readInt16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
_vm->_goblin->_gobPositions[item].x = xPos;
_vm->_goblin->_gobPositions[item].y = yPos;
@@ -2655,8 +2168,8 @@ void Inter_v1::o1_setGoblinPos(OpGobParams &params) {
void Inter_v1::o1_setGoblinState(OpGobParams &params) {
int16 layer;
- int16 item = load16();
- int16 state = load16();
+ int16 item = _vm->_game->_script->readInt16();
+ int16 state = _vm->_game->_script->readInt16();
params.objDesc = _vm->_goblin->_goblins[item];
params.objDesc->nextState = state;
@@ -2680,8 +2193,8 @@ void Inter_v1::o1_setGoblinState(OpGobParams &params) {
void Inter_v1::o1_setGoblinStateRedraw(OpGobParams &params) {
int16 layer;
- int16 item = load16();
- int16 state = load16();
+ int16 item = _vm->_game->_script->readInt16();
+ int16 state = _vm->_game->_script->readInt16();
params.objDesc = _vm->_goblin->_objects[item];
params.objDesc->nextState = state;
@@ -2708,7 +2221,7 @@ void Inter_v1::o1_setGoblinStateRedraw(OpGobParams &params) {
}
void Inter_v1::o1_decRelaxTime(OpGobParams &params) {
- params.extraData = load16();
+ params.extraData = _vm->_game->_script->readInt16();
params.objDesc = _vm->_goblin->_objects[params.extraData];
params.objDesc->relaxTime--;
@@ -2722,12 +2235,12 @@ void Inter_v1::o1_decRelaxTime(OpGobParams &params) {
}
void Inter_v1::o1_getGoblinPosX(OpGobParams &params) {
- int16 item = load16();
+ int16 item = _vm->_game->_script->readInt16();
params.retVarPtr = (uint32) _vm->_goblin->_gobPositions[item].x;
}
void Inter_v1::o1_getGoblinPosY(OpGobParams &params) {
- int16 item = load16();
+ int16 item = _vm->_game->_script->readInt16();
params.retVarPtr = (uint32) _vm->_goblin->_gobPositions[item].y;
}
@@ -2736,18 +2249,18 @@ void Inter_v1::o1_clearPathExistence(OpGobParams &params) {
}
void Inter_v1::o1_setGoblinVisible(OpGobParams &params) {
- params.extraData = load16();
+ params.extraData = _vm->_game->_script->readInt16();
_vm->_goblin->_goblins[params.extraData]->visible = 1;
}
void Inter_v1::o1_setGoblinInvisible(OpGobParams &params) {
- params.extraData = load16();
+ params.extraData = _vm->_game->_script->readInt16();
_vm->_goblin->_goblins[params.extraData]->visible = 0;
}
void Inter_v1::o1_getObjectIntersect(OpGobParams &params) {
- params.extraData = load16();
- int16 item = load16();
+ params.extraData = _vm->_game->_script->readInt16();
+ int16 item = _vm->_game->_script->readInt16();
params.objDesc = _vm->_goblin->_objects[params.extraData];
if (_vm->_goblin->objIntersected(params.objDesc,
@@ -2758,8 +2271,8 @@ void Inter_v1::o1_getObjectIntersect(OpGobParams &params) {
}
void Inter_v1::o1_getGoblinIntersect(OpGobParams &params) {
- params.extraData = load16();
- int16 item = load16();
+ params.extraData = _vm->_game->_script->readInt16();
+ int16 item = _vm->_game->_script->readInt16();
params.objDesc = _vm->_goblin->_goblins[params.extraData];
if (_vm->_goblin->objIntersected(params.objDesc,
@@ -2770,10 +2283,10 @@ void Inter_v1::o1_getGoblinIntersect(OpGobParams &params) {
}
void Inter_v1::o1_setItemPos(OpGobParams &params) {
- int16 item = load16();
- int16 xPos = load16();
- int16 yPos = load16();
- int16 val = load16();
+ int16 item = _vm->_game->_script->readInt16();
+ int16 xPos = _vm->_game->_script->readInt16();
+ int16 yPos = _vm->_game->_script->readInt16();
+ int16 val = _vm->_game->_script->readInt16();
_vm->_map->_itemPoses[item].x = xPos;
_vm->_map->_itemPoses[item].y = yPos;
@@ -2781,12 +2294,9 @@ void Inter_v1::o1_setItemPos(OpGobParams &params) {
}
void Inter_v1::o1_loadObjects(OpGobParams &params) {
- params.extraData = load16();
- if (_vm->_game->_extHandle >= 0)
- _vm->_dataIO->closeData(_vm->_game->_extHandle);
+ params.extraData = _vm->_game->_script->readInt16();
_vm->_goblin->loadObjects((char *) VAR_ADDRESS(params.extraData));
- _vm->_game->_extHandle = _vm->_dataIO->openData(_vm->_game->_curExtFile);
}
void Inter_v1::o1_freeObjects(OpGobParams &params) {
@@ -2811,8 +2321,8 @@ void Inter_v1::o1_loadMap(OpGobParams &params) {
void Inter_v1::o1_moveGoblin(OpGobParams &params) {
int16 item;
- params.extraData = load16();
- int16 xPos = load16();
+ params.extraData = _vm->_game->_script->readInt16();
+ int16 xPos = _vm->_game->_script->readInt16();
if ((uint16) VAR(xPos) == 0) {
item =
@@ -2837,9 +2347,9 @@ void Inter_v1::o1_loadGoblin(OpGobParams &params) {
}
void Inter_v1::o1_writeTreatItem(OpGobParams &params) {
- params.extraData = load16();
- int16 cmd = load16();
- int16 xPos = load16();
+ params.extraData = _vm->_game->_script->readInt16();
+ int16 cmd = _vm->_game->_script->readInt16();
+ int16 xPos = _vm->_game->_script->readInt16();
if ((uint16) VAR(xPos) == 0) {
WRITE_VAR(cmd, _vm->_goblin->treatItem((uint16) VAR(params.extraData)));
@@ -2855,7 +2365,7 @@ void Inter_v1::o1_moveGoblin0(OpGobParams &params) {
}
void Inter_v1::o1_setGoblinTarget(OpGobParams &params) {
- params.extraData = load16();
+ params.extraData = _vm->_game->_script->readInt16();
if (VAR(params.extraData) != 0)
_vm->_goblin->_goesAtTarget = 1;
else
@@ -2863,11 +2373,11 @@ void Inter_v1::o1_setGoblinTarget(OpGobParams &params) {
}
void Inter_v1::o1_setGoblinObjectsPos(OpGobParams &params) {
- params.extraData = load16();
+ params.extraData = _vm->_game->_script->readInt16();
params.extraData = VAR(params.extraData);
_vm->_goblin->_objects[10]->xPos = params.extraData;
- params.extraData = load16();
+ params.extraData = _vm->_game->_script->readInt16();
params.extraData = VAR(params.extraData);
_vm->_goblin->_objects[10]->yPos = params.extraData;
}
@@ -2961,38 +2471,24 @@ void Inter_v1::o1_initGoblin(OpGobParams &params) {
}
int16 Inter_v1::loadSound(int16 slot) {
- byte *dataPtr;
- int16 id;
- uint32 dataSize;
- SoundSource source;
-
if (slot == -1)
- slot = _vm->_parse->parseValExpr();
+ slot = _vm->_game->_script->readValExpr();
- id = load16();
- if (id == -1) {
- _vm->_global->_inter_execPtr += 9;
+ uint16 id = _vm->_game->_script->readUint16();
+ if (id == 0xFFFF) {
+ _vm->_game->_script->skip(9);
return 0;
}
- if (id >= 30000) {
- source = SOUND_EXT;
-
- dataPtr = (byte *) _vm->_game->loadExtData(id, 0, 0, &dataSize);
- } else {
- int16 totSize;
-
- source = SOUND_TOT;
+ Resource *resource = _vm->_game->_resources->getResource(id);
+ if (!resource)
+ return 0;
- dataPtr = (byte *) _vm->_game->loadTotResource(id, &totSize);
- dataSize = (uint32) ((int32) totSize);
- }
+ SoundDesc *sample = _vm->_sound->sampleGetBySlot(slot);
+ if (!sample)
+ return 0;
- if (dataPtr) {
- SoundDesc *sample = _vm->_sound->sampleGetBySlot(slot);
- if (sample)
- sample->load(SOUND_SND, source, dataPtr, dataSize);
- }
+ sample->load(SOUND_SND, resource);
return 0;
}