[Scummvm-cvs-logs] CVS: scummvm/scumm script.cpp,1.10,1.11 script_v1.cpp,1.16,1.17 script_v2.cpp,1.48,1.49 scumm.h,1.58,1.59

Max Horn fingolfin at users.sourceforge.net
Wed Nov 6 08:46:01 CET 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv27733

Modified Files:
	script.cpp script_v1.cpp script_v2.cpp scumm.h 
Log Message:
why keep a seperate opcode entry & opcode description table if we can have it both in one (note that the descriptions were in fact outdated in some cases! also note, this is really just a refactoring, no functionality is changed except that opcode descriptions are now in sync with the opcode procs, that's why I am commiting this at all)

Index: script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- script.cpp	3 Nov 2002 15:12:39 -0000	1.10
+++ script.cpp	6 Nov 2002 16:44:57 -0000	1.11
@@ -283,7 +283,7 @@
 		_opcode = fetchScriptByte();
 		_scriptPointerStart = _scriptPointer;
 		vm.slot[_currentScript].didexec = 1;
-		debug(8, "Script %d: [%X] %s()", vm.slot[_currentScript].number, _opcode, _opcodes_lookup[_opcode]);
+		debug(8, "Script %d: [%X] %s()", vm.slot[_currentScript].number, _opcode, _opcodes[_opcode].desc);
 		op = getOpcode(_opcode);
 		(this->*op) ();
 	}
@@ -861,7 +861,7 @@
 int Scumm::pop()
 {
 	if ((_scummStackPos < 1) || ((unsigned int)_scummStackPos > ARRAYSIZE(_scummStack))) {
-		error("No items on stack to pop() for %s (0x%X) at [%d-%d]\n", _opcodes_lookup[_opcode], _opcode, _roomResource, vm.slot[_currentScript].number);
+		error("No items on stack to pop() for %s (0x%X) at [%d-%d]\n", _opcodes[_opcode].desc, _opcode, _roomResource, vm.slot[_currentScript].number);
 	}
 
 	return _scummStack[--_scummStackPos];

Index: script_v1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v1.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- script_v1.cpp	5 Nov 2002 17:46:25 -0000	1.16
+++ script_v1.cpp	6 Nov 2002 16:44:57 -0000	1.17
@@ -25,657 +25,334 @@
 #include "actor.h"
 #include "scumm/sound.h"
 
+#define OPCODE(x)	{ &Scumm::x, #x }
+
 void Scumm::setupOpcodes()
 {
-	static const OpcodeProc opcode_list[] = {
-		/* 00 */
-		&Scumm::o5_stopObjectCode,
-		&Scumm::o5_putActor,
-		&Scumm::o5_startMusic,
-		&Scumm::o5_getActorRoom,
-		/* 04 */
-		&Scumm::o5_isGreaterEqual,
-		&Scumm::o5_drawObject,
-		&Scumm::o5_getActorElevation,
-		&Scumm::o5_setState,
-		/* 08 */
-		&Scumm::o5_isNotEqual,
-		&Scumm::o5_faceActor,
-		&Scumm::o5_startScript,
-		&Scumm::o5_getVerbEntrypoint,
-		/* 0C */
-		&Scumm::o5_resourceRoutines,
-		&Scumm::o5_walkActorToActor,
-		&Scumm::o5_putActorAtObject,
-		&Scumm::o5_getObjectState,
-		/* 10 */
-		&Scumm::o5_getObjectOwner,
-		&Scumm::o5_animateActor,
-		&Scumm::o5_panCameraTo,
-		&Scumm::o5_actorSet,
-		/* 14 */
-		&Scumm::o5_print,
-		&Scumm::o5_actorFromPos,
-		&Scumm::o5_getRandomNr,
-		&Scumm::o5_and,
-		/* 18 */
-		&Scumm::o5_jumpRelative,
-		&Scumm::o5_doSentence,
-		&Scumm::o5_move,
-		&Scumm::o5_multiply,
-		/* 1C */
-		&Scumm::o5_startSound,
-		&Scumm::o5_ifClassOfIs,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_isActorInBox,
-		/* 20 */
-		&Scumm::o5_stopMusic,
-		&Scumm::o5_putActor,
-		&Scumm::o5_getAnimCounter,
-		&Scumm::o5_getActorY,
-		/* 24 */
-		&Scumm::o5_loadRoomWithEgo,
-		&Scumm::o5_pickupObject,
-		&Scumm::o5_setVarRange,
-		&Scumm::o5_stringOps,
-		/* 28 */
-		&Scumm::o5_equalZero,
-		&Scumm::o5_setOwnerOf,
-		&Scumm::o5_startScript,
-		&Scumm::o5_delayVariable,
-		/* 2C */
-		&Scumm::o5_cursorCommand,
-		&Scumm::o5_putActorInRoom,
-		&Scumm::o5_delay,
-		&Scumm::o5_ifState,
-		/* 30 */
-		&Scumm::o5_matrixOps,
-		&Scumm::o5_getInventoryCount,
-		&Scumm::o5_setCameraAt,
-		&Scumm::o5_roomOps,
-		/* 34 */
-		&Scumm::o5_getDist,
-		&Scumm::o5_findObject,
-		&Scumm::o5_walkActorToObject,
-		&Scumm::o5_startObject,
-		/* 38 */
-		&Scumm::o5_lessOrEqual,
-		&Scumm::o5_doSentence,
-		&Scumm::o5_subtract,
-		&Scumm::o5_getActorScale,
-		/* 3C */
-		&Scumm::o5_stopSound,
-		&Scumm::o5_findInventory,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_drawBox,
-		/* 40 */
-		&Scumm::o5_cutscene,
-		&Scumm::o5_putActor,
-		&Scumm::o5_chainScript,
-		&Scumm::o5_getActorX,
-		/* 44 */
-		&Scumm::o5_isLess,
-		&Scumm::o5_drawObject,
-		&Scumm::o5_increment,
-		&Scumm::o5_setState,
-		/* 48 */
-		&Scumm::o5_isEqual,
-		&Scumm::o5_faceActor,
-		&Scumm::o5_startScript,
-		&Scumm::o5_getVerbEntrypoint,
-		/* 4C */
-		&Scumm::o5_soundKludge,
-		&Scumm::o5_walkActorToActor,
-		&Scumm::o5_putActorAtObject,
-		&Scumm::o5_ifState,
-		/* 50 */
-		&Scumm::o5_pickupObjectOld,
-		&Scumm::o5_animateActor,
-		&Scumm::o5_actorFollowCamera,
-		&Scumm::o5_actorSet,
-		/* 54 */
-		&Scumm::o5_setObjectName,
-		&Scumm::o5_actorFromPos,
-		&Scumm::o5_getActorMoving,
-		&Scumm::o5_or,
-		/* 58 */
-		&Scumm::o5_overRide,
-		&Scumm::o5_doSentence,
-		&Scumm::o5_add,
-		&Scumm::o5_divide,
-		/* 5C */
-		&Scumm::o5_oldRoomEffect,
-		&Scumm::o5_setClass,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_isActorInBox,
-		/* 60 */
-		&Scumm::o5_freezeScripts,
-		&Scumm::o5_putActor,
-		&Scumm::o5_stopScript,
-		&Scumm::o5_getActorFacing,
-		/* 64 */
-		&Scumm::o5_loadRoomWithEgo,
-		&Scumm::o5_pickupObject,
-		&Scumm::o5_getClosestObjActor,
-		&Scumm::o5_dummy,
-		/* 68 */
-		&Scumm::o5_getScriptRunning,
-		&Scumm::o5_setOwnerOf,
-		&Scumm::o5_startScript,
-		&Scumm::o5_debug,
-		/* 6C */
-		&Scumm::o5_getActorWidth,
-		&Scumm::o5_putActorInRoom,
-		&Scumm::o5_stopObjectScript,
-		&Scumm::o5_ifState,
-		/* 70 */
-		&Scumm::o5_lights,
-		&Scumm::o5_getActorCostume,
-		&Scumm::o5_loadRoom,
-		&Scumm::o5_roomOps,
-		/* 74 */
-		&Scumm::o5_getDist,
-		&Scumm::o5_findObject,
-		&Scumm::o5_walkActorToObject,
-		&Scumm::o5_startObject,
-		/* 78 */
-		&Scumm::o5_isGreater,				/* less? */
-		&Scumm::o5_doSentence,
-		&Scumm::o5_verbOps,
-		&Scumm::o5_getActorWalkBox,
-		/* 7C */
-		&Scumm::o5_isSoundRunning,
-		&Scumm::o5_findInventory,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_drawBox,
-		/* 80 */
-		&Scumm::o5_breakHere,
-		&Scumm::o5_putActor,
-		&Scumm::o5_startMusic,
-		&Scumm::o5_getActorRoom,
-		/* 84 */
-		&Scumm::o5_isGreaterEqual,	/* less equal? */
-		&Scumm::o5_drawObject,
-		&Scumm::o5_getActorElevation,
-		&Scumm::o5_setState,
-		/* 88 */
-		&Scumm::o5_isNotEqual,
-		&Scumm::o5_faceActor,
-		&Scumm::o5_startScript,
-		&Scumm::o5_getVerbEntrypoint,
-		/* 8C */
-		&Scumm::o5_resourceRoutines,
-		&Scumm::o5_walkActorToActor,
-		&Scumm::o5_putActorAtObject,
-		&Scumm::o5_getObjectState,
-		/* 90 */
-		&Scumm::o5_getObjectOwner,
-		&Scumm::o5_animateActor,
-		&Scumm::o5_panCameraTo,
-		&Scumm::o5_actorSet,
-		/* 94 */
-		&Scumm::o5_print,
-		&Scumm::o5_actorFromPos,
-		&Scumm::o5_getRandomNr,
-		&Scumm::o5_and,
-		/* 98 */
-		&Scumm::o5_quitPauseRestart,
-		&Scumm::o5_doSentence,
-		&Scumm::o5_move,
-		&Scumm::o5_multiply,
-		/* 9C */
-		&Scumm::o5_startSound,
-		&Scumm::o5_ifClassOfIs,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_isActorInBox,
-		/* A0 */
-		&Scumm::o5_stopObjectCode,
-		&Scumm::o5_putActor,
-		&Scumm::o5_getAnimCounter,
-		&Scumm::o5_getActorY,
-		/* A4 */
-		&Scumm::o5_loadRoomWithEgo,
-		&Scumm::o5_pickupObject,
-		&Scumm::o5_setVarRange,
-		&Scumm::o5_dummy,
-		/* A8 */
-		&Scumm::o5_notEqualZero,
-		&Scumm::o5_setOwnerOf,
-		&Scumm::o5_startScript,
-		&Scumm::o5_saveRestoreVerbs,
-		/* AC */
-		&Scumm::o5_expression,
-		&Scumm::o5_putActorInRoom,
-		&Scumm::o5_wait,
-		&Scumm::o5_ifState,
-		/* B0 */
-		&Scumm::o5_matrixOps,
-		&Scumm::o5_getInventoryCount,
-		&Scumm::o5_setCameraAt,
-		&Scumm::o5_roomOps,
-		/* B4 */
-		&Scumm::o5_getDist,
-		&Scumm::o5_findObject,
-		&Scumm::o5_walkActorToObject,
-		&Scumm::o5_startObject,
-		/* B8 */
-		&Scumm::o5_lessOrEqual,
-		&Scumm::o5_doSentence,
-		&Scumm::o5_subtract,
-		&Scumm::o5_getActorScale,
-		/* BC */
-		&Scumm::o5_stopSound,
-		&Scumm::o5_findInventory,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_drawBox,
-		/* C0 */
-		&Scumm::o5_endCutscene,
-		&Scumm::o5_putActor,
-		&Scumm::o5_chainScript,
-		&Scumm::o5_getActorX,
-		/* C4 */
-		&Scumm::o5_isLess,
-		&Scumm::o5_drawObject,
-		&Scumm::o5_decrement,
-		&Scumm::o5_setState,
-		/* C8 */
-		&Scumm::o5_isEqual,
-		&Scumm::o5_faceActor,
-		&Scumm::o5_startScript,
-		&Scumm::o5_getVerbEntrypoint,
-		/* CC */
-		&Scumm::o5_pseudoRoom,
-		&Scumm::o5_walkActorToActor,
-		&Scumm::o5_putActorAtObject,
-		&Scumm::o5_ifState,
-		/* D0 */
-		&Scumm::o5_pickupObjectOld,
-		&Scumm::o5_animateActor,
-		&Scumm::o5_actorFollowCamera,
-		&Scumm::o5_actorSet,
-		/* D4 */
-		&Scumm::o5_setObjectName,
-		&Scumm::o5_actorFromPos,
-		&Scumm::o5_getActorMoving,
-		&Scumm::o5_or,
-		/* D8 */
-		&Scumm::o5_printEgo,
-		&Scumm::o5_doSentence,
-		&Scumm::o5_add,
-		&Scumm::o5_divide,
-		/* DC */
-		&Scumm::o5_oldRoomEffect,
-		&Scumm::o5_setClass,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_isActorInBox,
-		/* E0 */
-		&Scumm::o5_freezeScripts,
-		&Scumm::o5_putActor,
-		&Scumm::o5_stopScript,
-		&Scumm::o5_getActorFacing,
-		/* E4 */
-		&Scumm::o5_loadRoomWithEgo,
-		&Scumm::o5_pickupObject,
-		&Scumm::o5_getClosestObjActor,
-		&Scumm::o5_dummy,
-		/* E8 */
-		&Scumm::o5_getScriptRunning,
-		&Scumm::o5_setOwnerOf,
-		&Scumm::o5_startScript,
-		&Scumm::o5_debug,
-		/* EC */
-		&Scumm::o5_getActorWidth,
-		&Scumm::o5_putActorInRoom,
-		&Scumm::o5_stopObjectScript,
-		&Scumm::o5_ifState,
-		/* F0 */
-		&Scumm::o5_lights,
-		&Scumm::o5_getActorCostume,
-		&Scumm::o5_loadRoom,
-		&Scumm::o5_roomOps,
-		/* F4 */
-		&Scumm::o5_getDist,
-		&Scumm::o5_findObject,
-		&Scumm::o5_walkActorToObject,
-		&Scumm::o5_startObject,
-		/* F8 */
-		&Scumm::o5_isGreater,
-		&Scumm::o5_doSentence,
-		&Scumm::o5_verbOps,
-		&Scumm::o5_getActorWalkBox,
-		/* FC */
-		&Scumm::o5_isSoundRunning,
-		&Scumm::o5_findInventory,
-		&Scumm::o5_walkActorTo,
-		&Scumm::o5_drawBox
-	};
-
-	static const char *opcode_lookup[] = {
+	static const OpcodeEntry opcodes[256] = {
 		/* 00 */
-		"o5_stopObjectCode",
-		"o5_putActor",
-		"o5_startMusic",
-		"o5_getActorRoom",
+		OPCODE(o5_stopObjectCode),
+		OPCODE(o5_putActor),
+		OPCODE(o5_startMusic),
+		OPCODE(o5_getActorRoom),
 		/* 04 */
-		"o5_isGreaterEqual",
-		"o5_drawObject",
-		"o5_getActorElevation",
-		"o5_setState",
+		OPCODE(o5_isGreaterEqual),
+		OPCODE(o5_drawObject),
+		OPCODE(o5_getActorElevation),
+		OPCODE(o5_setState),
 		/* 08 */
-		"o5_isNotEqual",
-		"o5_faceActor",
-		"o5_startScript",
-		"o5_getVerbEntrypoint",
+		OPCODE(o5_isNotEqual),
+		OPCODE(o5_faceActor),
+		OPCODE(o5_startScript),
+		OPCODE(o5_getVerbEntrypoint),
 		/* 0C */
-		"o5_resourceRoutines",
-		"o5_walkActorToActor",
-		"o5_putActorAtObject",
-		"o5_getObjectState",
+		OPCODE(o5_resourceRoutines),
+		OPCODE(o5_walkActorToActor),
+		OPCODE(o5_putActorAtObject),
+		OPCODE(o5_getObjectState),
 		/* 10 */
-		"o5_getObjectOwner",
-		"o5_animateActor",
-		"o5_panCameraTo",
-		"o5_actorSet",
+		OPCODE(o5_getObjectOwner),
+		OPCODE(o5_animateActor),
+		OPCODE(o5_panCameraTo),
+		OPCODE(o5_actorSet),
 		/* 14 */
-		"o5_print",
-		"o5_actorFromPos",
-		"o5_getRandomNr",
-		"o5_and",
+		OPCODE(o5_print),
+		OPCODE(o5_actorFromPos),
+		OPCODE(o5_getRandomNr),
+		OPCODE(o5_and),
 		/* 18 */
-		"o5_jumpRelative",
-		"o5_doSentence",
-		"o5_move",
-		"o5_multiply",
+		OPCODE(o5_jumpRelative),
+		OPCODE(o5_doSentence),
+		OPCODE(o5_move),
+		OPCODE(o5_multiply),
 		/* 1C */
-		"o5_startSound",
-		"o5_ifClassOfIs",
-		"o5_walkActorTo",
-		"o5_isActorInBox",
+		OPCODE(o5_startSound),
+		OPCODE(o5_ifClassOfIs),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_isActorInBox),
 		/* 20 */
-		"o5_stopMusic",
-		"o5_putActor",
-		"o5_getAnimCounter",
-		"o5_getActorY",
+		OPCODE(o5_stopMusic),
+		OPCODE(o5_putActor),
+		OPCODE(o5_getAnimCounter),
+		OPCODE(o5_getActorY),
 		/* 24 */
-		"o5_loadRoomWithEgo",
-		"o5_pickupObject",
-		"o5_setVarRange",
-		"o5_stringOps",
+		OPCODE(o5_loadRoomWithEgo),
+		OPCODE(o5_pickupObject),
+		OPCODE(o5_setVarRange),
+		OPCODE(o5_stringOps),
 		/* 28 */
-		"o5_equalZero",
-		"o5_setOwnerOf",
-		"o5_startScript",
-		"o5_delayVariable",
+		OPCODE(o5_equalZero),
+		OPCODE(o5_setOwnerOf),
+		OPCODE(o5_startScript),
+		OPCODE(o5_delayVariable),
 		/* 2C */
-		"o5_cursorCommand",
-		"o5_putActorInRoom",
-		"o5_delay",
-		"o5_ifNotState",
+		OPCODE(o5_cursorCommand),
+		OPCODE(o5_putActorInRoom),
+		OPCODE(o5_delay),
+		OPCODE(o5_ifNotState),
 		/* 30 */
-		"o5_matrixOps",
-		"o5_getInventoryCount",
-		"o5_setCameraAt",
-		"o5_roomOps",
+		OPCODE(o5_matrixOps),
+		OPCODE(o5_getInventoryCount),
+		OPCODE(o5_setCameraAt),
+		OPCODE(o5_roomOps),
 		/* 34 */
-		"o5_getDist",
-		"o5_findObject",
-		"o5_walkActorToObject",
-		"o5_startObject",
+		OPCODE(o5_getDist),
+		OPCODE(o5_findObject),
+		OPCODE(o5_walkActorToObject),
+		OPCODE(o5_startObject),
 		/* 38 */
-		"o5_lessOrEqual",
-		"o5_doSentence",
-		"o5_subtract",
-		"o5_getActorScale",
+		OPCODE(o5_lessOrEqual),
+		OPCODE(o5_doSentence),
+		OPCODE(o5_subtract),
+		OPCODE(o5_getActorScale),
 		/* 3C */
-		"o5_stopSound",
-		"o5_findInventory",
-		"o5_walkActorTo",
-		"o5_drawBox",
+		OPCODE(o5_stopSound),
+		OPCODE(o5_findInventory),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_drawBox),
 		/* 40 */
-		"o5_cutscene",
-		"o5_putActor",
-		"o5_chainScript",
-		"o5_getActorX",
+		OPCODE(o5_cutscene),
+		OPCODE(o5_putActor),
+		OPCODE(o5_chainScript),
+		OPCODE(o5_getActorX),
 		/* 44 */
-		"o5_isLess",
-		"o5_drawObject",
-		"o5_increment",
-		"o5_setState",
+		OPCODE(o5_isLess),
+		OPCODE(o5_drawObject),
+		OPCODE(o5_increment),
+		OPCODE(o5_setState),
 		/* 48 */
-		"o5_isEqual",
-		"o5_faceActor",
-		"o5_startScript",
-		"o5_getVerbEntrypoint",
+		OPCODE(o5_isEqual),
+		OPCODE(o5_faceActor),
+		OPCODE(o5_startScript),
+		OPCODE(o5_getVerbEntrypoint),
 		/* 4C */
-		"o5_soundKludge",
-		"o5_walkActorToActor",
-		"o5_putActorAtObject",
-		"o5_ifState",
+		OPCODE(o5_soundKludge),
+		OPCODE(o5_walkActorToActor),
+		OPCODE(o5_putActorAtObject),
+		OPCODE(o5_ifState),
 		/* 50 */
-		"o5_pickupObjectOld",
-		"o5_animateActor",
-		"o5_actorFollowCamera",
-		"o5_actorSet",
+		OPCODE(o5_pickupObjectOld),
+		OPCODE(o5_animateActor),
+		OPCODE(o5_actorFollowCamera),
+		OPCODE(o5_actorSet),
 		/* 54 */
-		"o5_setObjectName",
-		"o5_actorFromPos",
-		"o5_getActorMoving",
-		"o5_or",
+		OPCODE(o5_setObjectName),
+		OPCODE(o5_actorFromPos),
+		OPCODE(o5_getActorMoving),
+		OPCODE(o5_or),
 		/* 58 */
-		"o5_overRide",
-		"o5_doSentence",
-		"o5_add",
-		"o5_divide",
+		OPCODE(o5_overRide),
+		OPCODE(o5_doSentence),
+		OPCODE(o5_add),
+		OPCODE(o5_divide),
 		/* 5C */
-		"o5_oldRoomEffect",
-		"o5_setClass",
-		"o5_walkActorTo",
-		"o5_isActorInBox",
+		OPCODE(o5_oldRoomEffect),
+		OPCODE(o5_setClass),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_isActorInBox),
 		/* 60 */
-		"o5_freezeScripts",
-		"o5_putActor",
-		"o5_stopScript",
-		"o5_getActorFacing",
+		OPCODE(o5_freezeScripts),
+		OPCODE(o5_putActor),
+		OPCODE(o5_stopScript),
+		OPCODE(o5_getActorFacing),
 		/* 64 */
-		"o5_loadRoomWithEgo",
-		"o5_pickupObject",
-		"o5_getClosestObjActor",
-		"o5_dummy",
+		OPCODE(o5_loadRoomWithEgo),
+		OPCODE(o5_pickupObject),
+		OPCODE(o5_getClosestObjActor),
+		OPCODE(o5_dummy),
 		/* 68 */
-		"o5_getScriptRunning",
-		"o5_setOwnerOf",
-		"o5_startScript",
-		"o5_debug",
+		OPCODE(o5_getScriptRunning),
+		OPCODE(o5_setOwnerOf),
+		OPCODE(o5_startScript),
+		OPCODE(o5_debug),
 		/* 6C */
-		"o5_getActorWidth",
-		"o5_putActorInRoom",
-		"o5_stopObjectScript",
-		"o5_ifNotState",
+		OPCODE(o5_getActorWidth),
+		OPCODE(o5_putActorInRoom),
+		OPCODE(o5_stopObjectScript),
+		OPCODE(o5_ifNotState),
 		/* 70 */
-		"o5_lights",
-		"o5_getActorCostume",
-		"o5_loadRoom",
-		"o5_roomOps",
+		OPCODE(o5_lights),
+		OPCODE(o5_getActorCostume),
+		OPCODE(o5_loadRoom),
+		OPCODE(o5_roomOps),
 		/* 74 */
-		"o5_getDist",
-		"o5_findObject",
-		"o5_walkActorToObject",
-		"o5_startObject",
+		OPCODE(o5_getDist),
+		OPCODE(o5_findObject),
+		OPCODE(o5_walkActorToObject),
+		OPCODE(o5_startObject),
 		/* 78 */
-		"o5_isGreater",							/* less? */
-		"o5_doSentence",
-		"o5_verbOps",
-		"o5_getActorWalkBox",
+		OPCODE(o5_isGreater),				/* less? */
+		OPCODE(o5_doSentence),
+		OPCODE(o5_verbOps),
+		OPCODE(o5_getActorWalkBox),
 		/* 7C */
-		"o5_isSoundRunning",
-		"o5_findInventory",
-		"o5_walkActorTo",
-		"o5_drawBox",
+		OPCODE(o5_isSoundRunning),
+		OPCODE(o5_findInventory),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_drawBox),
 		/* 80 */
-		"o5_breakHere",
-		"o5_putActor",
-		"o5_startMusic",
-		"o5_getActorRoom",
+		OPCODE(o5_breakHere),
+		OPCODE(o5_putActor),
+		OPCODE(o5_startMusic),
+		OPCODE(o5_getActorRoom),
 		/* 84 */
-		"o5_isGreaterEqual",				/* less equal? */
-		"o5_drawObject",
-		"o5_getActorElevation",
-		"o5_setState",
+		OPCODE(o5_isGreaterEqual),	/* less equal? */
+		OPCODE(o5_drawObject),
+		OPCODE(o5_getActorElevation),
+		OPCODE(o5_setState),
 		/* 88 */
-		"o5_isNotEqual",
-		"o5_faceActor",
-		"o5_startScript",
-		"o5_getVerbEntrypoint",
+		OPCODE(o5_isNotEqual),
+		OPCODE(o5_faceActor),
+		OPCODE(o5_startScript),
+		OPCODE(o5_getVerbEntrypoint),
 		/* 8C */
-		"o5_resourceRoutines",
-		"o5_walkActorToActor",
-		"o5_putActorAtObject",
-		"o5_getObjectState",
+		OPCODE(o5_resourceRoutines),
+		OPCODE(o5_walkActorToActor),
+		OPCODE(o5_putActorAtObject),
+		OPCODE(o5_getObjectState),
 		/* 90 */
-		"o5_getObjectOwner",
-		"o5_animateActor",
-		"o5_panCameraTo",
-		"o5_actorSet",
+		OPCODE(o5_getObjectOwner),
+		OPCODE(o5_animateActor),
+		OPCODE(o5_panCameraTo),
+		OPCODE(o5_actorSet),
 		/* 94 */
-		"o5_print",
-		"o5_actorFromPos",
-		"o5_getRandomNr",
-		"o5_and",
+		OPCODE(o5_print),
+		OPCODE(o5_actorFromPos),
+		OPCODE(o5_getRandomNr),
+		OPCODE(o5_and),
 		/* 98 */
-		"o5_quitPauseRestart",
-		"o5_doSentence",
-		"o5_move",
-		"o5_multiply",
+		OPCODE(o5_quitPauseRestart),
+		OPCODE(o5_doSentence),
+		OPCODE(o5_move),
+		OPCODE(o5_multiply),
 		/* 9C */
-		"o5_startSound",
-		"o5_ifClassOfIs",
-		"o5_walkActorTo",
-		"o5_isActorInBox",
+		OPCODE(o5_startSound),
+		OPCODE(o5_ifClassOfIs),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_isActorInBox),
 		/* A0 */
-		"o5_stopObjectCode",
-		"o5_putActor",
-		"o5_getAnimCounter",
-		"o5_getActorY",
+		OPCODE(o5_stopObjectCode),
+		OPCODE(o5_putActor),
+		OPCODE(o5_getAnimCounter),
+		OPCODE(o5_getActorY),
 		/* A4 */
-		"o5_loadRoomWithEgo",
-		"o5_pickupObject",
-		"o5_setVarRange",
-		"o5_dummy",
+		OPCODE(o5_loadRoomWithEgo),
+		OPCODE(o5_pickupObject),
+		OPCODE(o5_setVarRange),
+		OPCODE(o5_dummy),
 		/* A8 */
-		"o5_notEqualZero",
-		"o5_setOwnerOf",
-		"o5_startScript",
-		"o5_saveRestoreVerbs",
+		OPCODE(o5_notEqualZero),
+		OPCODE(o5_setOwnerOf),
+		OPCODE(o5_startScript),
+		OPCODE(o5_saveRestoreVerbs),
 		/* AC */
-		"o5_expression",
-		"o5_putActorInRoom",
-		"o5_wait",
-		"o5_ifNotState",
+		OPCODE(o5_expression),
+		OPCODE(o5_putActorInRoom),
+		OPCODE(o5_wait),
+		OPCODE(o5_ifNotState),
 		/* B0 */
-		"o5_matrixOps",
-		"o5_getInventoryCount",
-		"o5_setCameraAt",
-		"o5_roomOps",
+		OPCODE(o5_matrixOps),
+		OPCODE(o5_getInventoryCount),
+		OPCODE(o5_setCameraAt),
+		OPCODE(o5_roomOps),
 		/* B4 */
-		"o5_getDist",
-		"o5_findObject",
-		"o5_walkActorToObject",
-		"o5_startObject",
+		OPCODE(o5_getDist),
+		OPCODE(o5_findObject),
+		OPCODE(o5_walkActorToObject),
+		OPCODE(o5_startObject),
 		/* B8 */
-		"o5_lessOrEqual",
-		"o5_doSentence",
-		"o5_subtract",
-		"o5_getActorScale",
+		OPCODE(o5_lessOrEqual),
+		OPCODE(o5_doSentence),
+		OPCODE(o5_subtract),
+		OPCODE(o5_getActorScale),
 		/* BC */
-		"o5_stopSound",
-		"o5_findInventory",
-		"o5_walkActorTo",
-		"o5_drawBox",
+		OPCODE(o5_stopSound),
+		OPCODE(o5_findInventory),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_drawBox),
 		/* C0 */
-		"o5_endCutscene",
-		"o5_putActor",
-		"o5_chainScript",
-		"o5_getActorX",
+		OPCODE(o5_endCutscene),
+		OPCODE(o5_putActor),
+		OPCODE(o5_chainScript),
+		OPCODE(o5_getActorX),
 		/* C4 */
-		"o5_isLess",
-		"o5_drawObject",
-		"o5_decrement",
-		"o5_setState",
+		OPCODE(o5_isLess),
+		OPCODE(o5_drawObject),
+		OPCODE(o5_decrement),
+		OPCODE(o5_setState),
 		/* C8 */
-		"o5_isEqual",
-		"o5_faceActor",
-		"o5_startScript",
-		"o5_getVerbEntrypoint",
+		OPCODE(o5_isEqual),
+		OPCODE(o5_faceActor),
+		OPCODE(o5_startScript),
+		OPCODE(o5_getVerbEntrypoint),
 		/* CC */
-		"o5_pseudoRoom",
-		"o5_walkActorToActor",
-		"o5_putActorAtObject",
-		"o5_ifState",
+		OPCODE(o5_pseudoRoom),
+		OPCODE(o5_walkActorToActor),
+		OPCODE(o5_putActorAtObject),
+		OPCODE(o5_ifState),
 		/* D0 */
-		"o5_pickupObjectOld",
-		"o5_animateActor",
-		"o5_actorFollowCamera",
-		"o5_actorSet",
+		OPCODE(o5_pickupObjectOld),
+		OPCODE(o5_animateActor),
+		OPCODE(o5_actorFollowCamera),
+		OPCODE(o5_actorSet),
 		/* D4 */
-		"o5_setObjectName",
-		"o5_actorFromPos",
-		"o5_getActorMoving",
-		"o5_or",
+		OPCODE(o5_setObjectName),
+		OPCODE(o5_actorFromPos),
+		OPCODE(o5_getActorMoving),
+		OPCODE(o5_or),
 		/* D8 */
-		"o5_printEgo",
-		"o5_doSentence",
-		"o5_add",
-		"o5_divide",
+		OPCODE(o5_printEgo),
+		OPCODE(o5_doSentence),
+		OPCODE(o5_add),
+		OPCODE(o5_divide),
 		/* DC */
-		"o5_oldRoomEffect",
-		"o5_setClass",
-		"o5_walkActorTo",
-		"o5_isActorInBox",
+		OPCODE(o5_oldRoomEffect),
+		OPCODE(o5_setClass),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_isActorInBox),
 		/* E0 */
-		"o5_freezeScripts",
-		"o5_putActor",
-		"o5_stopScript",
-		"o5_getActorFacing",
+		OPCODE(o5_freezeScripts),
+		OPCODE(o5_putActor),
+		OPCODE(o5_stopScript),
+		OPCODE(o5_getActorFacing),
 		/* E4 */
-		"o5_loadRoomWithEgo",
-		"o5_pickupObject",
-		"o5_getClosestObjActor",
-		"o5_dummy",
+		OPCODE(o5_loadRoomWithEgo),
+		OPCODE(o5_pickupObject),
+		OPCODE(o5_getClosestObjActor),
+		OPCODE(o5_dummy),
 		/* E8 */
-		"o5_getScriptRunning",
-		"o5_setOwnerOf",
-		"o5_startScript",
-		"o5_debug",
+		OPCODE(o5_getScriptRunning),
+		OPCODE(o5_setOwnerOf),
+		OPCODE(o5_startScript),
+		OPCODE(o5_debug),
 		/* EC */
-		"o5_getActorWidth",
-		"o5_putActorInRoom",
-		"o5_stopObjectScript",
-		"o5_ifNotState",
+		OPCODE(o5_getActorWidth),
+		OPCODE(o5_putActorInRoom),
+		OPCODE(o5_stopObjectScript),
+		OPCODE(o5_ifNotState),
 		/* F0 */
-		"o5_lights",
-		"o5_getActorCostume",
-		"o5_loadRoom",
-		"o5_roomOps",
+		OPCODE(o5_lights),
+		OPCODE(o5_getActorCostume),
+		OPCODE(o5_loadRoom),
+		OPCODE(o5_roomOps),
 		/* F4 */
-		"o5_getDist",
-		"o5_findObject",
-		"o5_walkActorToObject",
-		"o5_startObject",
+		OPCODE(o5_getDist),
+		OPCODE(o5_findObject),
+		OPCODE(o5_walkActorToObject),
+		OPCODE(o5_startObject),
 		/* F8 */
-		"o5_isGreater",
-		"o5_doSentence",
-		"o5_verbOps",
-		"o5_getActorWalkBox",
+		OPCODE(o5_isGreater),
+		OPCODE(o5_doSentence),
+		OPCODE(o5_verbOps),
+		OPCODE(o5_getActorWalkBox),
 		/* FC */
-		"o5_isSoundRunning",
-		"o5_findInventory",
-		"o5_walkActorTo",
-		"o5_drawBox",
+		OPCODE(o5_isSoundRunning),
+		OPCODE(o5_findInventory),
+		OPCODE(o5_walkActorTo),
+		OPCODE(o5_drawBox)
 	};
 
-
-	_opcodes = opcode_list;
-	_opcodes_lookup = opcode_lookup;
+	_opcodes = opcodes;
 }
 
 void Scumm::o5_actorFollowCamera()
@@ -1383,9 +1060,19 @@
 {
 	int a = getVarOrDirectWord(0x80);
 	int b = getVarOrDirectByte(0x40);
-	bool isNegated = (_opcode & 0x20) ? true : false;
 
-	if ((getState(a) != b) ^ isNegated)
+	if (getState(a) != b)
+		o5_jumpRelative();
+	else
+		ignoreScriptWord();
+}
+
+void Scumm::o5_ifNotState()
+{
+	int a = getVarOrDirectWord(0x80);
+	int b = getVarOrDirectByte(0x40);
+
+	if (getState(a) == b)
 		o5_jumpRelative();
 	else
 		ignoreScriptWord();

Index: script_v2.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v2.cpp,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -d -r1.48 -r1.49
--- script_v2.cpp	6 Nov 2002 14:19:50 -0000	1.48
+++ script_v2.cpp	6 Nov 2002 16:44:57 -0000	1.49
@@ -33,656 +33,335 @@
 
 #include "dialogs.h"		// FIXME: This is just for the FT-INSANE warning. 
 				// Remove when INSANE is implemented
+
+#define OPCODE(x)	{ &Scumm::x, #x }
+
 void Scumm::setupOpcodes2()
 {
-	static const OpcodeProc opcode_list[256] = {
-		/* 00 */
-		&Scumm::o6_pushByte,
-		&Scumm::o6_pushWord,
-		&Scumm::o6_pushByteVar,
-		&Scumm::o6_pushWordVar,
-		/* 04 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteArrayRead,
-		&Scumm::o6_wordArrayRead,
-		/* 08 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteArrayIndexedRead,
-		&Scumm::o6_wordArrayIndexedRead,
-		/* 0C */
-		&Scumm::o6_dup,
-		&Scumm::o6_zero,
-		&Scumm::o6_eq,
-		&Scumm::o6_neq,
-		/* 10 */
-		&Scumm::o6_gt,
-		&Scumm::o6_lt,
-		&Scumm::o6_le,
-		&Scumm::o6_ge,
-		/* 14 */
-		&Scumm::o6_add,
-		&Scumm::o6_sub,
-		&Scumm::o6_mul,
-		&Scumm::o6_div,
-		/* 18 */
-		&Scumm::o6_land,
-		&Scumm::o6_lor,
-		&Scumm::o6_kill,
-		&Scumm::o6_invalid,
-		/* 1C */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 20 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 24 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 28 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 2C */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 30 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 34 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 38 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 3C */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* 40 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_writeByteVar,
-		&Scumm::o6_writeWordVar,
-		/* 44 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteArrayWrite,
-		&Scumm::o6_wordArrayWrite,
-		/* 48 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteArrayIndexedWrite,
-		&Scumm::o6_wordArrayIndexedWrite,
-		/* 4C */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteVarInc,
-		&Scumm::o6_wordVarInc,
-		/* 50 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteArrayInc,
-		&Scumm::o6_wordArrayInc,
-		/* 54 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteVarDec,
-		&Scumm::o6_wordVarDec,
-		/* 58 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_byteArrayDec,
-		&Scumm::o6_wordArrayDec,
-		/* 5C */
-		&Scumm::o6_jumpTrue,
-		&Scumm::o6_jumpFalse,
-		&Scumm::o6_startScriptEx,
-		&Scumm::o6_startScript,
-		/* 60 */
-		&Scumm::o6_startObject,
-		&Scumm::o6_setObjectState,
-		&Scumm::o6_setObjectXY,
-		&Scumm::o6_drawBlastObject,
-		/* 64 */
-		&Scumm::o6_setBlastObjectWindow,
-		&Scumm::o6_stopObjectCode,
-		&Scumm::o6_stopObjectCode,
-		&Scumm::o6_endCutscene,
-		/* 68 */
-		&Scumm::o6_cutScene,
-		&Scumm::o6_stopMusic,
-		&Scumm::o6_freezeUnfreeze,
-		&Scumm::o6_cursorCommand,
-		/* 6C */
-		&Scumm::o6_breakHere,
-		&Scumm::o6_ifClassOfIs,
-		&Scumm::o6_setClass,
-		&Scumm::o6_getState,
-		/* 70 */
-		&Scumm::o6_setState,
-		&Scumm::o6_setOwner,
-		&Scumm::o6_getOwner,
-		&Scumm::o6_jump,
-		/* 74 */
-		&Scumm::o6_startSound,
-		&Scumm::o6_stopSound,
-		&Scumm::o6_startMusic,
-		&Scumm::o6_stopObjectScript,
-		/* 78 */
-		&Scumm::o6_panCameraTo,
-		&Scumm::o6_actorFollowCamera,
-		&Scumm::o6_setCameraAt,
-		&Scumm::o6_loadRoom,
-		/* 7C */
-		&Scumm::o6_stopScript,
-		&Scumm::o6_walkActorToObj,
-		&Scumm::o6_walkActorTo,
-		&Scumm::o6_putActorInRoom,
-		/* 80 */
-		&Scumm::o6_putActorAtObject,
-		&Scumm::o6_faceActor,
-		&Scumm::o6_animateActor,
-		&Scumm::o6_doSentence,
-		/* 84 */
-		&Scumm::o6_pickupObject,
-		&Scumm::o6_loadRoomWithEgo,
-		&Scumm::o6_invalid,
-		&Scumm::o6_getRandomNumber,
-		/* 88 */
-		&Scumm::o6_getRandomNumberRange,
-		&Scumm::o6_invalid,
-		&Scumm::o6_getActorMoving,
-		&Scumm::o6_getScriptRunning,
-		/* 8C */
-		&Scumm::o6_getActorRoom,
-		&Scumm::o6_getObjectX,
-		&Scumm::o6_getObjectY,
-		&Scumm::o6_getObjectOldDir,
-		/* 90 */
-		&Scumm::o6_getActorWalkBox,
-		&Scumm::o6_getActorCostume,
-		&Scumm::o6_findInventory,
-		&Scumm::o6_getInventoryCount,
-		/* 94 */
-		&Scumm::o6_getVerbFromXY,
-		&Scumm::o6_beginOverride,
-		&Scumm::o6_endOverride,
-		&Scumm::o6_setObjectName,
-		/* 98 */
-		&Scumm::o6_isSoundRunning,
-		&Scumm::o6_setBoxFlags,
-		&Scumm::o6_createBoxMatrix,
-		&Scumm::o6_resourceRoutines,
-		/* 9C */
-		&Scumm::o6_roomOps,
-		&Scumm::o6_actorSet,
-		&Scumm::o6_verbOps,
-		&Scumm::o6_getActorFromXY,
-		/* A0 */
-		&Scumm::o6_findObject,
-		&Scumm::o6_pseudoRoom,
-		&Scumm::o6_getActorElevation,
-		&Scumm::o6_getVerbEntrypoint,
-		/* A4 */
-		&Scumm::o6_arrayOps,
-		&Scumm::o6_saveRestoreVerbs,
-		&Scumm::o6_drawBox,
-		&Scumm::o6_invalid,
-		/* A8 */
-		&Scumm::o6_getActorWidth,
-		&Scumm::o6_wait,
-		&Scumm::o6_getActorScaleX,
-		&Scumm::o6_getActorAnimCounter1,
-		/* AC */
-		&Scumm::o6_soundKludge,
-		&Scumm::o6_isAnyOf,
-		&Scumm::o6_quitPauseRestart,
-		&Scumm::o6_isActorInBox,
-		/* B0 */
-		&Scumm::o6_delay,
-		&Scumm::o6_delayLonger,
-		&Scumm::o6_delayVeryLong,
-		&Scumm::o6_stopSentence,
-		/* B4 */
-		&Scumm::o6_print_0,
-		&Scumm::o6_print_1,
-		&Scumm::o6_print_2,
-		&Scumm::o6_print_3,
-		/* B8 */
-		&Scumm::o6_printActor,
-		&Scumm::o6_printEgo,
-		&Scumm::o6_talkActor,
-		&Scumm::o6_talkEgo,
-		/* BC */
-		&Scumm::o6_dim,
-		&Scumm::o5_dummy,
-		&Scumm::o6_runVerbCodeQuick,
-		&Scumm::o6_runScriptQuick,
-		/* C0 */
-		&Scumm::o6_dim2,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* C4 */
-		&Scumm::o6_abs,
-		&Scumm::o6_distObjectObject,
-		&Scumm::o6_distObjectPt,
-		&Scumm::o6_distPtPt,
-		/* C8 */
-		&Scumm::o6_kernelFunction,
-		&Scumm::o6_miscOps,
-		&Scumm::o6_delayFrames,
-		&Scumm::o6_pickOneOf,
-		/* CC */
-		&Scumm::o6_pickOneOfDefault,
-		&Scumm::o6_unknownCD,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* D0 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_getAnimateVariable,
-		&Scumm::o6_invalid,
-		/* D4 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_jumpToScript,
-		&Scumm::o6_band,
-		&Scumm::o6_bor,
-		/* D8 */
-		&Scumm::o6_isRoomScriptRunning,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* DC */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* E0 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* E4 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* E8 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* EC */
-		&Scumm::o6_getActorPriority,
-		&Scumm::o6_getObjectNewDir,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* F0 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* F4 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* F8 */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		/* FC */
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-		&Scumm::o6_invalid,
-	};
-
-	static const char *opcode_lookup[] = {
+	static const OpcodeEntry opcodes[256] = {
 		/* 00 */
-		"o6_pushByte",
-		"o6_pushWord",
-		"o6_pushByteVar",
-		"o6_pushWordVar",
+		OPCODE(o6_pushByte),
+		OPCODE(o6_pushWord),
+		OPCODE(o6_pushByteVar),
+		OPCODE(o6_pushWordVar),
 		/* 04 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteArrayRead",
-		"o6_wordArrayRead",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteArrayRead),
+		OPCODE(o6_wordArrayRead),
 		/* 08 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteArrayIndexedRead",
-		"o6_wordArrayIndexedRead",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteArrayIndexedRead),
+		OPCODE(o6_wordArrayIndexedRead),
 		/* 0C */
-		"o6_dup",
-		"o6_zero",
-		"o6_eq",
-		"o6_neq",
+		OPCODE(o6_dup),
+		OPCODE(o6_zero),
+		OPCODE(o6_eq),
+		OPCODE(o6_neq),
 		/* 10 */
-		"o6_gt",
-		"o6_lt",
-		"o6_le",
-		"o6_ge",
+		OPCODE(o6_gt),
+		OPCODE(o6_lt),
+		OPCODE(o6_le),
+		OPCODE(o6_ge),
 		/* 14 */
-		"o6_add",
-		"o6_sub",
-		"o6_mul",
-		"o6_div",
+		OPCODE(o6_add),
+		OPCODE(o6_sub),
+		OPCODE(o6_mul),
+		OPCODE(o6_div),
 		/* 18 */
-		"o6_land",
-		"o6_lor",
-		"o6_kill",
-		"o6_invalid",
+		OPCODE(o6_land),
+		OPCODE(o6_lor),
+		OPCODE(o6_kill),
+		OPCODE(o6_invalid),
 		/* 1C */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 20 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 24 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 28 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 2C */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 30 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 34 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 38 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 3C */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 40 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_writeByteVar",
-		"o6_writeWordVar",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_writeByteVar),
+		OPCODE(o6_writeWordVar),
 		/* 44 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteArrayWrite",
-		"o6_wordArrayWrite",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteArrayWrite),
+		OPCODE(o6_wordArrayWrite),
 		/* 48 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteArrayIndexedWrite",
-		"o6_wordArrayIndexedWrite",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteArrayIndexedWrite),
+		OPCODE(o6_wordArrayIndexedWrite),
 		/* 4C */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteVarInc",
-		"o6_wordVarInc",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteVarInc),
+		OPCODE(o6_wordVarInc),
 		/* 50 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteArrayInc",
-		"o6_wordArrayInc",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteArrayInc),
+		OPCODE(o6_wordArrayInc),
 		/* 54 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteVarDec",
-		"o6_wordVarDec",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteVarDec),
+		OPCODE(o6_wordVarDec),
 		/* 58 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_byteArrayDec",
-		"o6_wordArrayDec",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_byteArrayDec),
+		OPCODE(o6_wordArrayDec),
 		/* 5C */
-		"o6_jumpTrue",
-		"o6_jumpFalse",
-		"o6_startScriptEx",
-		"o6_startScript",
+		OPCODE(o6_jumpTrue),
+		OPCODE(o6_jumpFalse),
+		OPCODE(o6_startScriptEx),
+		OPCODE(o6_startScript),
 		/* 60 */
-		"o6_startObject",
-		"o6_setObjectState",
-		"o6_setObjectXY",
-		"o6_drawBlastObject",
+		OPCODE(o6_startObject),
+		OPCODE(o6_setObjectState),
+		OPCODE(o6_setObjectXY),
+		OPCODE(o6_drawBlastObject),
 		/* 64 */
-		"o6_invalid",
-		"o6_stopObjectCode",
-		"o6_stopObjectCode",
-		"o6_endCutscene",
+		OPCODE(o6_setBlastObjectWindow),
+		OPCODE(o6_stopObjectCode),
+		OPCODE(o6_stopObjectCode),
+		OPCODE(o6_endCutscene),
 		/* 68 */
-		"o6_cutScene",
-		"o6_stopMusic",
-		"o6_freezeUnfreeze",
-		"o6_cursorCommand",
+		OPCODE(o6_cutScene),
+		OPCODE(o6_stopMusic),
+		OPCODE(o6_freezeUnfreeze),
+		OPCODE(o6_cursorCommand),
 		/* 6C */
-		"o6_breakHere",
-		"o6_ifClassOfIs",
-		"o6_setClass",
-		"o6_getState",
+		OPCODE(o6_breakHere),
+		OPCODE(o6_ifClassOfIs),
+		OPCODE(o6_setClass),
+		OPCODE(o6_getState),
 		/* 70 */
-		"o6_setState",
-		"o6_setOwner",
-		"o6_getOwner",
-		"o6_jump",
+		OPCODE(o6_setState),
+		OPCODE(o6_setOwner),
+		OPCODE(o6_getOwner),
+		OPCODE(o6_jump),
 		/* 74 */
-		"o6_startSound",
-		"o6_stopSound",
-		"o6_startMusic",
-		"o6_stopObjectScript",
+		OPCODE(o6_startSound),
+		OPCODE(o6_stopSound),
+		OPCODE(o6_startMusic),
+		OPCODE(o6_stopObjectScript),
 		/* 78 */
-		"o6_panCameraTo",
-		"o6_actorFollowCamera",
-		"o6_setCameraAt",
-		"o6_loadRoom",
+		OPCODE(o6_panCameraTo),
+		OPCODE(o6_actorFollowCamera),
+		OPCODE(o6_setCameraAt),
+		OPCODE(o6_loadRoom),
 		/* 7C */
-		"o6_stopScript",
-		"o6_walkActorToObj",
-		"o6_walkActorTo",
-		"o6_putActorInRoom",
+		OPCODE(o6_stopScript),
+		OPCODE(o6_walkActorToObj),
+		OPCODE(o6_walkActorTo),
+		OPCODE(o6_putActorInRoom),
 		/* 80 */
-		"o6_putActorAtObject",
-		"o6_faceActor",
-		"o6_animateActor",
-		"o6_doSentence",
+		OPCODE(o6_putActorAtObject),
+		OPCODE(o6_faceActor),
+		OPCODE(o6_animateActor),
+		OPCODE(o6_doSentence),
 		/* 84 */
-		"o6_pickupObject",
-		"o6_loadRoomWithEgo",
-		"o6_invalid",
-		"o6_getRandomNumber",
+		OPCODE(o6_pickupObject),
+		OPCODE(o6_loadRoomWithEgo),
+		OPCODE(o6_invalid),
+		OPCODE(o6_getRandomNumber),
 		/* 88 */
-		"o6_getRandomNumberRange",
-		"o6_invalid",
-		"o6_getActorMoving",
-		"o6_getScriptRunning",
+		OPCODE(o6_getRandomNumberRange),
+		OPCODE(o6_invalid),
+		OPCODE(o6_getActorMoving),
+		OPCODE(o6_getScriptRunning),
 		/* 8C */
-		"o6_getActorRoom",
-		"o6_getObjectX",
-		"o6_getObjectY",
-		"o6_getObjectOldDir",
+		OPCODE(o6_getActorRoom),
+		OPCODE(o6_getObjectX),
+		OPCODE(o6_getObjectY),
+		OPCODE(o6_getObjectOldDir),
 		/* 90 */
-		"o6_getActorWalkBox",
-		"o6_getActorCostume",
-		"o6_findInventory",
-		"o6_getInventoryCount",
+		OPCODE(o6_getActorWalkBox),
+		OPCODE(o6_getActorCostume),
+		OPCODE(o6_findInventory),
+		OPCODE(o6_getInventoryCount),
 		/* 94 */
-		"o6_getVerbFromXY",
-		"o6_beginOverride",
-		"o6_endOverride",
-		"o6_setObjectName",
+		OPCODE(o6_getVerbFromXY),
+		OPCODE(o6_beginOverride),
+		OPCODE(o6_endOverride),
+		OPCODE(o6_setObjectName),
 		/* 98 */
-		"o6_isSoundRunning",
-		"o6_setBoxFlags",
-		"o6_createBoxMatrix",
-		"o6_resourceRoutines",
+		OPCODE(o6_isSoundRunning),
+		OPCODE(o6_setBoxFlags),
+		OPCODE(o6_createBoxMatrix),
+		OPCODE(o6_resourceRoutines),
 		/* 9C */
-		"o6_roomOps",
-		"o6_actorSet",
-		"o6_verbOps",
-		"o6_getActorFromXY",
+		OPCODE(o6_roomOps),
+		OPCODE(o6_actorSet),
+		OPCODE(o6_verbOps),
+		OPCODE(o6_getActorFromXY),
 		/* A0 */
-		"o6_findObject",
-		"o6_pseudoRoom",
-		"o6_getActorElevation",
-		"o6_getVerbEntrypoint",
+		OPCODE(o6_findObject),
+		OPCODE(o6_pseudoRoom),
+		OPCODE(o6_getActorElevation),
+		OPCODE(o6_getVerbEntrypoint),
 		/* A4 */
-		"o6_arrayOps",
-		"o6_saveRestoreVerbs",
-		"o6_drawBox",
-		"o6_invalid",
+		OPCODE(o6_arrayOps),
+		OPCODE(o6_saveRestoreVerbs),
+		OPCODE(o6_drawBox),
+		OPCODE(o6_invalid),
 		/* A8 */
-		"o6_getActorWidth",
-		"o6_wait",
-		"o6_getActorScaleX",
-		"o6_getActorAnimCounter1",
+		OPCODE(o6_getActorWidth),
+		OPCODE(o6_wait),
+		OPCODE(o6_getActorScaleX),
+		OPCODE(o6_getActorAnimCounter1),
 		/* AC */
-		"o6_soundKludge",
-		"o6_isAnyOf",
-		"o6_quitPauseRestart",
-		"o6_isActorInBox",
+		OPCODE(o6_soundKludge),
+		OPCODE(o6_isAnyOf),
+		OPCODE(o6_quitPauseRestart),
+		OPCODE(o6_isActorInBox),
 		/* B0 */
-		"o6_delay",
-		"o6_delayLonger",
-		"o6_delayVeryLong",
-		"o6_stopSentence",
+		OPCODE(o6_delay),
+		OPCODE(o6_delayLonger),
+		OPCODE(o6_delayVeryLong),
+		OPCODE(o6_stopSentence),
 		/* B4 */
-		"o6_print_0",
-		"o6_print_1",
-		"o6_print_2",
-		"o6_print_3",
+		OPCODE(o6_print_0),
+		OPCODE(o6_print_1),
+		OPCODE(o6_print_2),
+		OPCODE(o6_print_3),
 		/* B8 */
-		"o6_printActor",
-		"o6_printEgo",
-		"o6_talkActor",
-		"o6_talkEgo",
+		OPCODE(o6_printActor),
+		OPCODE(o6_printEgo),
+		OPCODE(o6_talkActor),
+		OPCODE(o6_talkEgo),
 		/* BC */
-		"o6_dim",
-		"o6_invalid",
-		"o6_runVerbCodeQuick",
-		"o6_runScriptQuick",
+		OPCODE(o6_dim),
+		OPCODE(o5_dummy),
+		OPCODE(o6_runVerbCodeQuick),
+		OPCODE(o6_runScriptQuick),
 		/* C0 */
-		"o6_dim2",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_dim2),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* C4 */
-		"o6_abs",
-		"o6_distObjectObject",
-		"o6_distObjectPt",
-		"o6_distPtPt",
+		OPCODE(o6_abs),
+		OPCODE(o6_distObjectObject),
+		OPCODE(o6_distObjectPt),
+		OPCODE(o6_distPtPt),
 		/* C8 */
-		"o6_kernelFunction",
-		"o6_miscOps",
-		"o6_breakMaybe",
-		"o6_pickOneOf",
+		OPCODE(o6_kernelFunction),
+		OPCODE(o6_miscOps),
+		OPCODE(o6_delayFrames),
+		OPCODE(o6_pickOneOf),
 		/* CC */
-		"o6_pickOneOfDefault",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_pickOneOfDefault),
+		OPCODE(o6_unknownCD),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* D0 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_getAnimateVariable",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_getAnimateVariable),
+		OPCODE(o6_invalid),
 		/* D4 */
-		"o6_invalid",
-		"o6_jumpToScript",
-		"o6_band",
-		"o6_bor",
+		OPCODE(o6_invalid),
+		OPCODE(o6_jumpToScript),
+		OPCODE(o6_band),
+		OPCODE(o6_bor),
 		/* D8 */
-		"o6_isRoomScriptRunning",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_isRoomScriptRunning),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* DC */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* E0 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* E4 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* E8 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* EC */
-		"o6_invalid",
-		"o6_getObjectNewDir",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_getActorPriority),
+		OPCODE(o6_getObjectNewDir),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* F0 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* F4 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* F8 */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* FC */
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid",
-		"o6_invalid"
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 	};
 
-	_opcodes = opcode_list;
-	_opcodes_lookup = opcode_lookup;
+	_opcodes = opcodes;
 }
 void Scumm::o6_setBlastObjectWindow()
 {																// Set BOMP processing window

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -d -r1.58 -r1.59
--- scumm.h	6 Nov 2002 16:01:34 -0000	1.58
+++ scumm.h	6 Nov 2002 16:44:57 -0000	1.59
@@ -43,6 +43,11 @@
 
 typedef void (Scumm::*OpcodeProc)();
 
+struct OpcodeEntry {
+	OpcodeProc proc;
+	const char *desc;
+};
+
 // Use g_scumm from error() ONLY
 extern Scumm *g_scumm;
 
@@ -60,6 +65,9 @@
 	int x, y;
 };
 
+#include "gfx.h"
+#include "boxes.h"
+
 struct MemBlkHeader {
 	uint32 size;
 };
@@ -265,9 +273,6 @@
 	msClicked = 2
 };
 
-#include "gfx.h"
-#include "boxes.h"
-
 class Scumm : public Engine {
 public:
 	/* Put often used variables at the top.
@@ -450,13 +455,12 @@
 	byte *_scriptPointer, *_scriptOrgPointer, *_scriptPointerStart;
 	byte _opcode, _numNestedScripts, _currentScript;
 	uint16 _curExecScript;
-	const OpcodeProc *_opcodes;
-	const char **_opcodes_lookup;
+	const OpcodeEntry *_opcodes;
 	byte **_lastCodePtr;
 	int _resultVarNumber, _scummStackPos;
 	int16 _localParamList[16],  _scummStack[150];
 	
-	OpcodeProc getOpcode(int i) { return _opcodes[i]; }
+	OpcodeProc getOpcode(int i) { return _opcodes[i].proc; }
 	void initializeLocals(int slot, int16 *vars);
 	int	getScriptSlot();
 	void runScript(int script, int a, int b, int16 *lvarptr);
@@ -985,6 +989,7 @@
 	void o5_isLess();
 	void o5_isNotEqual();
 	void o5_ifState();
+	void o5_ifNotState();
 	void o5_isSoundRunning();
 	void o5_jumpRelative();
 	void o5_lessOrEqual();





More information about the Scummvm-git-logs mailing list