From 88f265d5847d178e389e6d173e4eeb008495b16b Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Wed, 25 Jul 2007 22:55:00 +0000 Subject: Renamed Inter_Woodruff to Inter_v4 svn-id: r28206 --- engines/gob/gob.cpp | 2 +- engines/gob/inter.h | 32 +- engines/gob/inter_v4.cpp | 730 +++++++++++++++++++++++++++++++++++++++++ engines/gob/inter_woodruff.cpp | 730 ----------------------------------------- engines/gob/module.mk | 4 +- 5 files changed, 749 insertions(+), 749 deletions(-) create mode 100644 engines/gob/inter_v4.cpp delete mode 100644 engines/gob/inter_woodruff.cpp diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp index 8c3bb76413..c996b5e8d3 100644 --- a/engines/gob/gob.cpp +++ b/engines/gob/gob.cpp @@ -306,7 +306,7 @@ bool GobEngine::initGameParts() { case kGameTypeWoodruff: _init = new Init_v3(this); _video = new Video_v2(this); - _inter = new Inter_Woodruff(this); + _inter = new Inter_v4(this); _parse = new Parse_v2(this); _mult = new Mult_v2(this); _draw = new Draw_v2(this); diff --git a/engines/gob/inter.h b/engines/gob/inter.h index 70e0af2d4d..59a1ba3ccc 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -481,30 +481,30 @@ protected: bool o3_writeData(OpFuncParams ¶ms); }; -class Inter_Woodruff : public Inter_v3 { +class Inter_v4 : public Inter_v3 { public: - Inter_Woodruff(GobEngine *vm); - virtual ~Inter_Woodruff() {} + Inter_v4(GobEngine *vm); + virtual ~Inter_v4() {} protected: - typedef void (Inter_Woodruff::*OpcodeDrawProcWoodruff)(); - typedef bool (Inter_Woodruff::*OpcodeFuncProcWoodruff)(OpFuncParams &); - typedef void (Inter_Woodruff::*OpcodeGoblinProcWoodruff)(OpGobParams &); - struct OpcodeDrawEntryWoodruff { - OpcodeDrawProcWoodruff proc; + typedef void (Inter_v4::*OpcodeDrawProcV4)(); + typedef bool (Inter_v4::*OpcodeFuncProcV4)(OpFuncParams &); + typedef void (Inter_v4::*OpcodeGoblinProcV4)(OpGobParams &); + struct OpcodeDrawEntryV4 { + OpcodeDrawProcV4 proc; const char *desc; }; - struct OpcodeFuncEntryWoodruff { - OpcodeFuncProcWoodruff proc; + struct OpcodeFuncEntryV4 { + OpcodeFuncProcV4 proc; const char *desc; }; - struct OpcodeGoblinEntryWoodruff { - OpcodeGoblinProcWoodruff proc; + struct OpcodeGoblinEntryV4 { + OpcodeGoblinProcV4 proc; const char *desc; }; - const OpcodeDrawEntryWoodruff *_opcodesDrawWoodruff; - const OpcodeFuncEntryWoodruff *_opcodesFuncWoodruff; - const OpcodeGoblinEntryWoodruff *_opcodesGoblinWoodruff; + const OpcodeDrawEntryV4 *_opcodesDrawV4; + const OpcodeFuncEntryV4 *_opcodesFuncV4; + const OpcodeGoblinEntryV4 *_opcodesGoblinV4; static const int _goblinFuncLookUp[][2]; virtual void setupOpcodes(); @@ -515,7 +515,7 @@ protected: virtual const char *getOpcodeFuncDesc(byte i, byte j); virtual const char *getOpcodeGoblinDesc(int i); - bool oWoodruff_stub0x18(OpFuncParams ¶ms); + bool o4_stub0x18(OpFuncParams ¶ms); }; } // End of namespace Gob diff --git a/engines/gob/inter_v4.cpp b/engines/gob/inter_v4.cpp new file mode 100644 index 0000000000..02b6927f3b --- /dev/null +++ b/engines/gob/inter_v4.cpp @@ -0,0 +1,730 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "common/endian.h" +#include "common/file.h" + +#include "gob/gob.h" +#include "gob/inter.h" +#include "gob/global.h" +#include "gob/dataio.h" +#include "gob/draw.h" +#include "gob/game.h" +#include "gob/parse.h" + +namespace Gob { + +#define OPCODE(x) _OPCODE(Inter_v4, x) + +const int Inter_v4::_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, 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}, + {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} +}; + +Inter_v4::Inter_v4(GobEngine *vm) : Inter_v3(vm) { + setupOpcodes(); +} + +void Inter_v4::setupOpcodes() { + static const OpcodeDrawEntryV4 opcodesDraw[256] = { + /* 00 */ + OPCODE(o1_loadMult), + OPCODE(o2_playMult), + OPCODE(o2_freeMultKeys), + {NULL, ""}, + /* 04 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + OPCODE(o1_initCursor), + /* 08 */ + OPCODE(o1_initCursorAnim), + OPCODE(o1_clearCursorAnim), + OPCODE(o2_setRenderFlags), + {NULL, ""}, + /* 0C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 10 */ + OPCODE(o1_loadAnim), + OPCODE(o1_freeAnim), + OPCODE(o1_updateAnim), + OPCODE(o2_multSub), + /* 14 */ + OPCODE(o2_initMult), + OPCODE(o1_freeMult), + OPCODE(o1_animate), + OPCODE(o2_loadMultObject), + /* 18 */ + OPCODE(o1_getAnimLayerInfo), + OPCODE(o1_getObjAnimSize), + OPCODE(o1_loadStatic), + OPCODE(o1_freeStatic), + /* 1C */ + OPCODE(o2_renderStatic), + OPCODE(o2_loadCurLayer), + {NULL, ""}, + {NULL, ""}, + /* 20 */ + OPCODE(o2_playCDTrack), + OPCODE(o2_waitCDTrackEnd), + OPCODE(o2_stopCD), + OPCODE(o2_readLIC), + /* 24 */ + OPCODE(o2_freeLIC), + OPCODE(o2_getCDTrackPos), + {NULL, ""}, + {NULL, ""}, + /* 28 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 2C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 30 */ + OPCODE(o2_loadFontToSprite), + OPCODE(o1_freeFontToSprite), + {NULL, ""}, + {NULL, ""}, + /* 34 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 38 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 3C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 40 */ + OPCODE(o2_totSub), + OPCODE(o2_switchTotSub), + OPCODE(o2_copyVars), + OPCODE(o2_pasteVars), + /* 44 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 48 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 4C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 50 */ + OPCODE(o2_loadMapObjects), + OPCODE(o2_freeGoblins), + OPCODE(o2_moveGoblin), + OPCODE(o2_writeGoblinPos), + /* 54 */ + OPCODE(o2_stopGoblin), + OPCODE(o2_setGoblinState), + OPCODE(o2_placeGoblin), + {NULL, ""}, + /* 58 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 5C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 60 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 64 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 68 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 6C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 70 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 74 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 78 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 7C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 80 */ + OPCODE(o2_initScreen), + OPCODE(o2_scroll), + OPCODE(o2_setScrollOffset), + OPCODE(o2_playImd), + /* 84 */ + OPCODE(o2_getImdInfo), + OPCODE(o2_openItk), + OPCODE(o2_closeItk), + OPCODE(o2_setImdFrontSurf), + /* 88 */ + OPCODE(o2_resetImdFrontSurf), + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 8C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 90 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 94 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 98 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 9C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* A0 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* A4 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* A8 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* AC */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* B0 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* B4 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* B8 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* BC */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* C0 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* C4 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* C8 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* CC */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* D0 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* D4 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* D8 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* DC */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* E0 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* E4 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* E8 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* EC */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* F0 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* F4 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* F8 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* FC */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""} + }; + + static const OpcodeFuncEntryV4 opcodesFunc[80] = { + /* 00 */ + OPCODE(o1_callSub), + OPCODE(o1_callSub), + OPCODE(o1_printTotText), + OPCODE(o1_loadCursor), + /* 04 */ + {NULL, ""}, + OPCODE(o1_switch), + OPCODE(o1_repeatUntil), + OPCODE(o1_whileDo), + /* 08 */ + OPCODE(o1_if), + OPCODE(o2_evaluateStore), + OPCODE(o1_loadSpriteToPos), + {NULL, ""}, + /* 0C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 10 */ + {NULL, ""}, + OPCODE(o2_printText), + OPCODE(o1_loadTot), + OPCODE(o1_palLoad), + /* 14 */ + OPCODE(o1_keyFunc), + OPCODE(o1_capturePush), + OPCODE(o1_capturePop), + OPCODE(o2_animPalInit), + /* 18 */ + OPCODE(o4_stub0x18), + {NULL, ""}, + OPCODE(o3_getTotTextItemPart), + {NULL, ""}, + /* 1C */ + {NULL, ""}, + {NULL, ""}, + OPCODE(o1_drawOperations), + OPCODE(o1_setcmdCount), + /* 20 */ + OPCODE(o1_return), + OPCODE(o1_renewTimeInVars), + OPCODE(o1_speakerOn), + OPCODE(o1_speakerOff), + /* 24 */ + OPCODE(o1_putPixel), + OPCODE(o2_goblinFunc), + OPCODE(o2_createSprite), + OPCODE(o1_freeSprite), + /* 28 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 2C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 30 */ + OPCODE(o1_returnTo), + OPCODE(o1_loadSpriteContent), + OPCODE(o3_copySprite), + OPCODE(o1_fillRect), + /* 34 */ + OPCODE(o1_drawLine), + OPCODE(o1_strToLong), + OPCODE(o1_invalidate), + OPCODE(o1_setBackDelta), + /* 38 */ + OPCODE(o1_playSound), + OPCODE(o2_stopSound), + OPCODE(o2_loadSound), + OPCODE(o1_freeSoundSlot), + /* 3C */ + OPCODE(o1_waitEndPlay), + OPCODE(o1_playComposition), + OPCODE(o2_getFreeMem), + OPCODE(o2_checkData), + /* 40 */ + {NULL, ""}, + 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(o2_readData), + OPCODE(o2_writeData), + OPCODE(o1_manageDataFile), + }; + + static const OpcodeGoblinEntryV4 opcodesGoblin[71] = { + /* 00 */ + OPCODE(o2_loadInfogramesIns), + OPCODE(o2_startInfogrames), + OPCODE(o2_stopInfogrames), + {NULL, ""}, + /* 04 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 08 */ + {NULL, ""}, + OPCODE(o2_playInfogrames), + {NULL, ""}, + {NULL, ""}, + /* 0C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 10 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 14 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 18 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 1C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 20 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 24 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + OPCODE(o2_handleGoblins), + /* 28 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 2C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 30 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 34 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 38 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 3C */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 40 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + /* 44 */ + {NULL, ""}, + {NULL, ""}, + {NULL, ""}, + }; + + _opcodesDrawV4 = opcodesDraw; + _opcodesFuncV4 = opcodesFunc; + _opcodesGoblinV4 = opcodesGoblin; +} + +void Inter_v4::executeDrawOpcode(byte i) { + debugC(1, kDebugDrawOp, "opcodeDraw %d [0x%X] (%s)", + i, i, getOpcodeDrawDesc(i)); + + OpcodeDrawProcV4 op = _opcodesDrawV4[i].proc; + + if (op == NULL) + warning("unimplemented opcodeDraw: %d", i); + else + (this->*op) (); +} + +bool Inter_v4::executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms) { + 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; + } + + OpcodeFuncProcV4 op = _opcodesFuncV4[i*16 + j].proc; + + if (op == NULL) + warning("unimplemented opcodeFunc: %d.%d", i, j); + else + return (this->*op) (params); + + return false; +} + +void Inter_v4::executeGoblinOpcode(int i, OpGobParams ¶ms) { + debugC(1, kDebugGobOp, "opcodeGoblin %d [0x%X] (%s)", + i, i, getOpcodeGoblinDesc(i)); + + OpcodeGoblinProcV4 op = NULL; + + for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) + if (_goblinFuncLookUp[j][0] == i) { + op = _opcodesGoblinV4[_goblinFuncLookUp[j][1]].proc; + break; + } + + if (op == NULL) { + int16 val; + + _vm->_global->_inter_execPtr -= 2; + val = load16(); + _vm->_global->_inter_execPtr += val << 1; + } else + (this->*op) (params); +} + +const char *Inter_v4::getOpcodeDrawDesc(byte i) { + return _opcodesDrawV4[i].desc; +} + +const char *Inter_v4::getOpcodeFuncDesc(byte i, byte j) { + if ((i > 4) || (j > 15)) + return ""; + + return _opcodesFuncV4[i*16 + j].desc; +} + +const char *Inter_v4::getOpcodeGoblinDesc(int i) { + for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) + if (_goblinFuncLookUp[j][0] == i) + return _opcodesGoblinV4[_goblinFuncLookUp[j][1]].desc; + return ""; +} + +bool Inter_v4::o4_stub0x18(OpFuncParams ¶ms) { + int16 val1 = _vm->_parse->parseValExpr(); + int16 val2 = _vm->_parse->parseValExpr(); + int16 val3 = _vm->_parse->parseValExpr(); + int16 val4 = _vm->_parse->parseValExpr(); + int16 val5 = _vm->_parse->parseValExpr(); + int16 val6 = _vm->_parse->parseValExpr(); + int16 val7 = load16(); + + warning("Stub! Woodruff Func 0x18: %d, %d, %d, %d, %d, %d, %d", + val1, val2, val3, val4, val5, val6, val7); + + return false; +} + +} // End of namespace Gob diff --git a/engines/gob/inter_woodruff.cpp b/engines/gob/inter_woodruff.cpp deleted file mode 100644 index d1989c41d7..0000000000 --- a/engines/gob/inter_woodruff.cpp +++ /dev/null @@ -1,730 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM 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. - * - * $URL$ - * $Id$ - * - */ - -#include "common/stdafx.h" -#include "common/endian.h" -#include "common/file.h" - -#include "gob/gob.h" -#include "gob/inter.h" -#include "gob/global.h" -#include "gob/dataio.h" -#include "gob/draw.h" -#include "gob/game.h" -#include "gob/parse.h" - -namespace Gob { - -#define OPCODE(x) _OPCODE(Inter_Woodruff, x) - -const int Inter_Woodruff::_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, 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}, - {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} -}; - -Inter_Woodruff::Inter_Woodruff(GobEngine *vm) : Inter_v3(vm) { - setupOpcodes(); -} - -void Inter_Woodruff::setupOpcodes() { - static const OpcodeDrawEntryWoodruff opcodesDraw[256] = { - /* 00 */ - OPCODE(o1_loadMult), - OPCODE(o2_playMult), - OPCODE(o2_freeMultKeys), - {NULL, ""}, - /* 04 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - OPCODE(o1_initCursor), - /* 08 */ - OPCODE(o1_initCursorAnim), - OPCODE(o1_clearCursorAnim), - OPCODE(o2_setRenderFlags), - {NULL, ""}, - /* 0C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 10 */ - OPCODE(o1_loadAnim), - OPCODE(o1_freeAnim), - OPCODE(o1_updateAnim), - OPCODE(o2_multSub), - /* 14 */ - OPCODE(o2_initMult), - OPCODE(o1_freeMult), - OPCODE(o1_animate), - OPCODE(o2_loadMultObject), - /* 18 */ - OPCODE(o1_getAnimLayerInfo), - OPCODE(o1_getObjAnimSize), - OPCODE(o1_loadStatic), - OPCODE(o1_freeStatic), - /* 1C */ - OPCODE(o2_renderStatic), - OPCODE(o2_loadCurLayer), - {NULL, ""}, - {NULL, ""}, - /* 20 */ - OPCODE(o2_playCDTrack), - OPCODE(o2_waitCDTrackEnd), - OPCODE(o2_stopCD), - OPCODE(o2_readLIC), - /* 24 */ - OPCODE(o2_freeLIC), - OPCODE(o2_getCDTrackPos), - {NULL, ""}, - {NULL, ""}, - /* 28 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 2C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 30 */ - OPCODE(o2_loadFontToSprite), - OPCODE(o1_freeFontToSprite), - {NULL, ""}, - {NULL, ""}, - /* 34 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 38 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 3C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 40 */ - OPCODE(o2_totSub), - OPCODE(o2_switchTotSub), - OPCODE(o2_copyVars), - OPCODE(o2_pasteVars), - /* 44 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 48 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 4C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 50 */ - OPCODE(o2_loadMapObjects), - OPCODE(o2_freeGoblins), - OPCODE(o2_moveGoblin), - OPCODE(o2_writeGoblinPos), - /* 54 */ - OPCODE(o2_stopGoblin), - OPCODE(o2_setGoblinState), - OPCODE(o2_placeGoblin), - {NULL, ""}, - /* 58 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 5C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 60 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 64 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 68 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 6C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 70 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 74 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 78 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 7C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 80 */ - OPCODE(o2_initScreen), - OPCODE(o2_scroll), - OPCODE(o2_setScrollOffset), - OPCODE(o2_playImd), - /* 84 */ - OPCODE(o2_getImdInfo), - OPCODE(o2_openItk), - OPCODE(o2_closeItk), - OPCODE(o2_setImdFrontSurf), - /* 88 */ - OPCODE(o2_resetImdFrontSurf), - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 8C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 90 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 94 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 98 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 9C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* A0 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* A4 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* A8 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* AC */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* B0 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* B4 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* B8 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* BC */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* C0 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* C4 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* C8 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* CC */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* D0 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* D4 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* D8 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* DC */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* E0 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* E4 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* E8 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* EC */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* F0 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* F4 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* F8 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* FC */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""} - }; - - static const OpcodeFuncEntryWoodruff opcodesFunc[80] = { - /* 00 */ - OPCODE(o1_callSub), - OPCODE(o1_callSub), - OPCODE(o1_printTotText), - OPCODE(o1_loadCursor), - /* 04 */ - {NULL, ""}, - OPCODE(o1_switch), - OPCODE(o1_repeatUntil), - OPCODE(o1_whileDo), - /* 08 */ - OPCODE(o1_if), - OPCODE(o2_evaluateStore), - OPCODE(o1_loadSpriteToPos), - {NULL, ""}, - /* 0C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 10 */ - {NULL, ""}, - OPCODE(o2_printText), - OPCODE(o1_loadTot), - OPCODE(o1_palLoad), - /* 14 */ - OPCODE(o1_keyFunc), - OPCODE(o1_capturePush), - OPCODE(o1_capturePop), - OPCODE(o2_animPalInit), - /* 18 */ - OPCODE(oWoodruff_stub0x18), - {NULL, ""}, - OPCODE(o3_getTotTextItemPart), - {NULL, ""}, - /* 1C */ - {NULL, ""}, - {NULL, ""}, - OPCODE(o1_drawOperations), - OPCODE(o1_setcmdCount), - /* 20 */ - OPCODE(o1_return), - OPCODE(o1_renewTimeInVars), - OPCODE(o1_speakerOn), - OPCODE(o1_speakerOff), - /* 24 */ - OPCODE(o1_putPixel), - OPCODE(o2_goblinFunc), - OPCODE(o2_createSprite), - OPCODE(o1_freeSprite), - /* 28 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 2C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 30 */ - OPCODE(o1_returnTo), - OPCODE(o1_loadSpriteContent), - OPCODE(o3_copySprite), - OPCODE(o1_fillRect), - /* 34 */ - OPCODE(o1_drawLine), - OPCODE(o1_strToLong), - OPCODE(o1_invalidate), - OPCODE(o1_setBackDelta), - /* 38 */ - OPCODE(o1_playSound), - OPCODE(o2_stopSound), - OPCODE(o2_loadSound), - OPCODE(o1_freeSoundSlot), - /* 3C */ - OPCODE(o1_waitEndPlay), - OPCODE(o1_playComposition), - OPCODE(o2_getFreeMem), - OPCODE(o2_checkData), - /* 40 */ - {NULL, ""}, - 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(o2_readData), - OPCODE(o2_writeData), - OPCODE(o1_manageDataFile), - }; - - static const OpcodeGoblinEntryWoodruff opcodesGoblin[71] = { - /* 00 */ - OPCODE(o2_loadInfogramesIns), - OPCODE(o2_startInfogrames), - OPCODE(o2_stopInfogrames), - {NULL, ""}, - /* 04 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 08 */ - {NULL, ""}, - OPCODE(o2_playInfogrames), - {NULL, ""}, - {NULL, ""}, - /* 0C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 10 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 14 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 18 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 1C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 20 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 24 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - OPCODE(o2_handleGoblins), - /* 28 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 2C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 30 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 34 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 38 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 3C */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 40 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - /* 44 */ - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - }; - - _opcodesDrawWoodruff = opcodesDraw; - _opcodesFuncWoodruff = opcodesFunc; - _opcodesGoblinWoodruff = opcodesGoblin; -} - -void Inter_Woodruff::executeDrawOpcode(byte i) { - debugC(1, kDebugDrawOp, "opcodeDraw %d [0x%X] (%s)", - i, i, getOpcodeDrawDesc(i)); - - OpcodeDrawProcWoodruff op = _opcodesDrawWoodruff[i].proc; - - if (op == NULL) - warning("unimplemented opcodeDraw: %d", i); - else - (this->*op) (); -} - -bool Inter_Woodruff::executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms) { - 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; - } - - OpcodeFuncProcWoodruff op = _opcodesFuncWoodruff[i*16 + j].proc; - - if (op == NULL) - warning("unimplemented opcodeFunc: %d.%d", i, j); - else - return (this->*op) (params); - - return false; -} - -void Inter_Woodruff::executeGoblinOpcode(int i, OpGobParams ¶ms) { - debugC(1, kDebugGobOp, "opcodeGoblin %d [0x%X] (%s)", - i, i, getOpcodeGoblinDesc(i)); - - OpcodeGoblinProcWoodruff op = NULL; - - for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) - if (_goblinFuncLookUp[j][0] == i) { - op = _opcodesGoblinWoodruff[_goblinFuncLookUp[j][1]].proc; - break; - } - - if (op == NULL) { - int16 val; - - _vm->_global->_inter_execPtr -= 2; - val = load16(); - _vm->_global->_inter_execPtr += val << 1; - } else - (this->*op) (params); -} - -const char *Inter_Woodruff::getOpcodeDrawDesc(byte i) { - return _opcodesDrawWoodruff[i].desc; -} - -const char *Inter_Woodruff::getOpcodeFuncDesc(byte i, byte j) { - if ((i > 4) || (j > 15)) - return ""; - - return _opcodesFuncWoodruff[i*16 + j].desc; -} - -const char *Inter_Woodruff::getOpcodeGoblinDesc(int i) { - for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) - if (_goblinFuncLookUp[j][0] == i) - return _opcodesGoblinWoodruff[_goblinFuncLookUp[j][1]].desc; - return ""; -} - -bool Inter_Woodruff::oWoodruff_stub0x18(OpFuncParams ¶ms) { - int16 val1 = _vm->_parse->parseValExpr(); - int16 val2 = _vm->_parse->parseValExpr(); - int16 val3 = _vm->_parse->parseValExpr(); - int16 val4 = _vm->_parse->parseValExpr(); - int16 val5 = _vm->_parse->parseValExpr(); - int16 val6 = _vm->_parse->parseValExpr(); - int16 val7 = load16(); - - warning("Stub! Woodruff Func 0x18: %d, %d, %d, %d, %d, %d, %d", - val1, val2, val3, val4, val5, val6, val7); - - return false; -} - -} // End of namespace Gob diff --git a/engines/gob/module.mk b/engines/gob/module.mk index 7d90da6260..6c9a8d4b3e 100644 --- a/engines/gob/module.mk +++ b/engines/gob/module.mk @@ -26,9 +26,9 @@ MODULE_OBJS := \ inter.o \ inter_v1.o \ inter_v2.o \ - inter_woodruff.o \ - inter_v3.o \ inter_bargon.o \ + inter_v3.o \ + inter_v4.o \ map.o \ map_v1.o \ map_v2.o \ -- cgit v1.2.3