[Scummvm-cvs-logs] SF.net SVN: scummvm: [28205] scummvm/trunk/engines/gob

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Wed Jul 25 23:48:47 CEST 2007


Revision: 28205
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28205&view=rev
Author:   drmccoy
Date:     2007-07-25 14:48:47 -0700 (Wed, 25 Jul 2007)

Log Message:
-----------
- Added Inter_Woodruff, alongside with the first Stub (OpcodeFunc 0x18)
- Yet another safety check
- Removed another hard-coded screen height

Modified Paths:
--------------
    scummvm/trunk/engines/gob/gob.cpp
    scummvm/trunk/engines/gob/goblin_v2.cpp
    scummvm/trunk/engines/gob/inter.h
    scummvm/trunk/engines/gob/module.mk
    scummvm/trunk/engines/gob/util.cpp

Added Paths:
-----------
    scummvm/trunk/engines/gob/inter_woodruff.cpp

Modified: scummvm/trunk/engines/gob/gob.cpp
===================================================================
--- scummvm/trunk/engines/gob/gob.cpp	2007-07-25 21:02:30 UTC (rev 28204)
+++ scummvm/trunk/engines/gob/gob.cpp	2007-07-25 21:48:47 UTC (rev 28205)
@@ -261,60 +261,60 @@
 			_saveLoad = new SaveLoad_v2(this, _targetName.c_str());
 			break;
 
-		case kGameTypeGob3:
-			_init = new Init_v3(this);
+		case kGameTypeBargon:
+			_init = new Init_v2(this);
 			_video = new Video_v2(this);
-			_inter = new Inter_v3(this);
+			_inter = new Inter_Bargon(this);
 			_parse = new Parse_v2(this);
 			_mult = new Mult_v2(this);
-			_draw = new Draw_v2(this);
+			_draw = new Draw_Bargon(this);
 			_game = new Game_v2(this);
 			_map = new Map_v2(this);
-			_goblin = new Goblin_v3(this);
+			_goblin = new Goblin_v2(this);
 			_scenery = new Scenery_v2(this);
-			_saveLoad = new SaveLoad_v3(this, _targetName.c_str());
+			_saveLoad = new SaveLoad_v2(this, _targetName.c_str());
 			break;
 
-		case kGameTypeWoodruff:
-			_init = new Init_v3(this);
+		case kGameTypeWeen:
+			_init = new Init_v2(this);
 			_video = new Video_v2(this);
-			_inter = new Inter_v3(this);
+			_inter = new Inter_v2(this);
 			_parse = new Parse_v2(this);
 			_mult = new Mult_v2(this);
 			_draw = new Draw_v2(this);
 			_game = new Game_v2(this);
 			_map = new Map_v2(this);
-			_goblin = new Goblin_v3(this);
+			_goblin = new Goblin_v2(this);
 			_scenery = new Scenery_v2(this);
-			_saveLoad = new SaveLoad_v3(this, _targetName.c_str());
+			_saveLoad = new SaveLoad_v2(this, _targetName.c_str());
 			break;
 
-		case kGameTypeBargon:
-			_init = new Init_v2(this);
+		case kGameTypeGob3:
+			_init = new Init_v3(this);
 			_video = new Video_v2(this);
-			_inter = new Inter_Bargon(this);
+			_inter = new Inter_v3(this);
 			_parse = new Parse_v2(this);
 			_mult = new Mult_v2(this);
-			_draw = new Draw_Bargon(this);
+			_draw = new Draw_v2(this);
 			_game = new Game_v2(this);
 			_map = new Map_v2(this);
-			_goblin = new Goblin_v2(this);
+			_goblin = new Goblin_v3(this);
 			_scenery = new Scenery_v2(this);
-			_saveLoad = new SaveLoad_v2(this, _targetName.c_str());
+			_saveLoad = new SaveLoad_v3(this, _targetName.c_str());
 			break;
 
-		case kGameTypeWeen:
-			_init = new Init_v2(this);
+		case kGameTypeWoodruff:
+			_init = new Init_v3(this);
 			_video = new Video_v2(this);
-			_inter = new Inter_v2(this);
+			_inter = new Inter_Woodruff(this);
 			_parse = new Parse_v2(this);
 			_mult = new Mult_v2(this);
 			_draw = new Draw_v2(this);
 			_game = new Game_v2(this);
 			_map = new Map_v2(this);
-			_goblin = new Goblin_v2(this);
+			_goblin = new Goblin_v3(this);
 			_scenery = new Scenery_v2(this);
-			_saveLoad = new SaveLoad_v2(this, _targetName.c_str());
+			_saveLoad = new SaveLoad_v3(this, _targetName.c_str());
 			break;
 
 		default:

Modified: scummvm/trunk/engines/gob/goblin_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/goblin_v2.cpp	2007-07-25 21:02:30 UTC (rev 28204)
+++ scummvm/trunk/engines/gob/goblin_v2.cpp	2007-07-25 21:48:47 UTC (rev 28205)
@@ -314,6 +314,9 @@
 	int16 state;
 	int16 layer;
 
+	if (!obj->goblinStates)
+		return;
+
 	movePathFind(obj, 0, 0);
 	playSounds(obj);
 

Modified: scummvm/trunk/engines/gob/inter.h
===================================================================
--- scummvm/trunk/engines/gob/inter.h	2007-07-25 21:02:30 UTC (rev 28204)
+++ scummvm/trunk/engines/gob/inter.h	2007-07-25 21:48:47 UTC (rev 28205)
@@ -481,6 +481,43 @@
 	bool o3_writeData(OpFuncParams &params);
 };
 
+class Inter_Woodruff : public Inter_v3 {
+public:
+	Inter_Woodruff(GobEngine *vm);
+	virtual ~Inter_Woodruff() {}
+
+protected:
+	typedef void (Inter_Woodruff::*OpcodeDrawProcWoodruff)();
+	typedef bool (Inter_Woodruff::*OpcodeFuncProcWoodruff)(OpFuncParams &);
+	typedef void (Inter_Woodruff::*OpcodeGoblinProcWoodruff)(OpGobParams &);
+	struct OpcodeDrawEntryWoodruff {
+		OpcodeDrawProcWoodruff proc;
+		const char *desc;
+	};
+	struct OpcodeFuncEntryWoodruff {
+		OpcodeFuncProcWoodruff proc;
+		const char *desc;
+	};
+	struct OpcodeGoblinEntryWoodruff {
+		OpcodeGoblinProcWoodruff proc;
+		const char *desc;
+	};
+	const OpcodeDrawEntryWoodruff *_opcodesDrawWoodruff;
+	const OpcodeFuncEntryWoodruff *_opcodesFuncWoodruff;
+	const OpcodeGoblinEntryWoodruff *_opcodesGoblinWoodruff;
+	static const int _goblinFuncLookUp[][2];
+
+	virtual void setupOpcodes();
+	virtual void executeDrawOpcode(byte i);
+	virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams &params);
+	virtual void executeGoblinOpcode(int i, OpGobParams &params);
+	virtual const char *getOpcodeDrawDesc(byte i);
+	virtual const char *getOpcodeFuncDesc(byte i, byte j);
+	virtual const char *getOpcodeGoblinDesc(int i);
+
+	bool oWoodruff_stub0x18(OpFuncParams &params);
+};
+
 } // End of namespace Gob
 
 #endif // GOB_INTER_H

Added: scummvm/trunk/engines/gob/inter_woodruff.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_woodruff.cpp	                        (rev 0)
+++ scummvm/trunk/engines/gob/inter_woodruff.cpp	2007-07-25 21:48:47 UTC (rev 28205)
@@ -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_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 &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;
+	}
+
+	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 &params) {
+	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 &params) {
+	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


Property changes on: scummvm/trunk/engines/gob/inter_woodruff.cpp
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Date Rev Author URL Id
Name: svn:eol-style
   + native

Modified: scummvm/trunk/engines/gob/module.mk
===================================================================
--- scummvm/trunk/engines/gob/module.mk	2007-07-25 21:02:30 UTC (rev 28204)
+++ scummvm/trunk/engines/gob/module.mk	2007-07-25 21:48:47 UTC (rev 28205)
@@ -26,6 +26,7 @@
 	inter.o \
 	inter_v1.o \
 	inter_v2.o \
+	inter_woodruff.o \
 	inter_v3.o \
 	inter_bargon.o \
 	map.o \

Modified: scummvm/trunk/engines/gob/util.cpp
===================================================================
--- scummvm/trunk/engines/gob/util.cpp	2007-07-25 21:02:30 UTC (rev 28204)
+++ scummvm/trunk/engines/gob/util.cpp	2007-07-25 21:48:47 UTC (rev 28205)
@@ -126,8 +126,8 @@
 
 	_vm->_global->_speedFactor = MIN(_fastMode + 1, 3);
 	if (scroll && hasMove) {
-		if (y >= (200 - _vm->_video->_splitHeight2)) {
-			y = 200 - _vm->_video->_splitHeight2 - 1;
+		if (y >= (_vm->_height - _vm->_video->_splitHeight2)) {
+			y = _vm->_height - _vm->_video->_splitHeight2 - 1;
 			_vm->_util->setMousePos(x, y);
 		}
 		_vm->_game->evaluateScroll(x, y);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list