[Scummvm-cvs-logs] SF.net SVN: scummvm: [31607] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sun Apr 20 17:16:58 CEST 2008


Revision: 31607
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31607&view=rev
Author:   lordhoto
Date:     2008-04-20 08:16:58 -0700 (Sun, 20 Apr 2008)

Log Message:
-----------
Fixed bad usage of functor objects.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/kyra.cpp
    scummvm/trunk/engines/kyra/kyra_v2.cpp
    scummvm/trunk/engines/kyra/kyra_v3.cpp
    scummvm/trunk/engines/kyra/script_v1.cpp
    scummvm/trunk/engines/kyra/script_v2.cpp
    scummvm/trunk/engines/kyra/script_v3.cpp

Modified: scummvm/trunk/engines/kyra/kyra.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra.cpp	2008-04-20 15:11:14 UTC (rev 31606)
+++ scummvm/trunk/engines/kyra/kyra.cpp	2008-04-20 15:16:58 UTC (rev 31607)
@@ -189,6 +189,10 @@
 }
 
 KyraEngine::~KyraEngine() {
+	for (Common::Array<const Opcode*>::iterator i = _opcodes.begin(); i != _opcodes.end(); ++i)
+		delete *i;
+	_opcodes.clear();
+
 	delete _res;
 	delete _staticres;
 	delete _sound;

Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-04-20 15:11:14 UTC (rev 31606)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-04-20 15:16:58 UTC (rev 31607)
@@ -176,6 +176,14 @@
 	for (int i = 0; i < 19; i++)
 		delete [] _conversationState[i];
 	delete [] _conversationState;
+
+	for (Common::Array<const Opcode*>::iterator i = _opcodesTemporary.begin(); i != _opcodesTemporary.end(); ++i)
+		delete *i;
+	_opcodesTemporary.clear();
+
+	for (Common::Array<const TIMOpcode*>::iterator i = _timOpcodes.begin(); i != _timOpcodes.end(); ++i)
+		delete *i;
+	_timOpcodes.clear();
 }
 
 Movie *KyraEngine_v2::createWSAMovie() {

Modified: scummvm/trunk/engines/kyra/kyra_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v3.cpp	2008-04-20 15:11:14 UTC (rev 31606)
+++ scummvm/trunk/engines/kyra/kyra_v3.cpp	2008-04-20 15:16:58 UTC (rev 31607)
@@ -156,6 +156,10 @@
 	delete [] _sceneStrings;
 	delete [] _talkObjectList;
 	delete [] _moveFacingTable;
+
+	for (Common::Array<const Opcode*>::iterator i = _opcodesTemporary.begin(); i != _opcodesTemporary.end(); ++i)
+		delete *i;
+	_opcodesTemporary.clear();
 }
 
 int KyraEngine_v3::init() {

Modified: scummvm/trunk/engines/kyra/script_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v1.cpp	2008-04-20 15:11:14 UTC (rev 31606)
+++ scummvm/trunk/engines/kyra/script_v1.cpp	2008-04-20 15:16:58 UTC (rev 31607)
@@ -1821,210 +1821,209 @@
 #pragma mark -
 
 typedef Functor1Mem<ScriptState*, int, KyraEngine_v1> OpcodeV1;
-#define Opcode(x) OpcodeV1(this, &KyraEngine_v1::x)
+#define SetOpcodeTable(x) table = &x;
+#define Opcode(x) table->push_back(new OpcodeV1(this, &KyraEngine_v1::x))
 void KyraEngine_v1::setupOpcodeTable() {
-	static const OpcodeV1 opcodeTable[] = {
-		// 0x00
-		Opcode(o1_magicInMouseItem),
-		Opcode(o1_characterSays),
-		Opcode(o1_pauseTicks),
-		Opcode(o1_drawSceneAnimShape),
-		// 0x04
-		Opcode(o1_queryGameFlag),
-		Opcode(o1_setGameFlag),
-		Opcode(o1_resetGameFlag),
-		Opcode(o1_runNPCScript),
-		// 0x08
-		Opcode(o1_setSpecialExitList),
-		Opcode(o1_blockInWalkableRegion),
-		Opcode(o1_blockOutWalkableRegion),
-		Opcode(o1_walkPlayerToPoint),
-		// 0x0c
-		Opcode(o1_dropItemInScene),
-		Opcode(o1_drawAnimShapeIntoScene),
-		Opcode(o1_createMouseItem),
-		Opcode(o1_savePageToDisk),
-		// 0x10
-		Opcode(o1_sceneAnimOn),
-		Opcode(o1_sceneAnimOff),
-		Opcode(o1_getElapsedSeconds),
-		Opcode(o1_mouseIsPointer),
-		// 0x14
-		Opcode(o1_destroyMouseItem),
-		Opcode(o1_runSceneAnimUntilDone),
-		Opcode(o1_fadeSpecialPalette),
-		Opcode(o1_playAdlibSound),
-		// 0x18
-		Opcode(o1_playAdlibScore),
-		Opcode(o1_phaseInSameScene),
-		Opcode(o1_setScenePhasingFlag),
-		Opcode(o1_resetScenePhasingFlag),
-		// 0x1c
-		Opcode(o1_queryScenePhasingFlag),
-		Opcode(o1_sceneToDirection),
-		Opcode(o1_setBirthstoneGem),
-		Opcode(o1_placeItemInGenericMapScene),
-		// 0x20
-		Opcode(o1_setBrandonStatusBit),
-		Opcode(o1_pauseSeconds),
-		Opcode(o1_getCharactersLocation),
-		Opcode(o1_runNPCSubscript),
-		// 0x24
-		Opcode(o1_magicOutMouseItem),
-		Opcode(o1_internalAnimOn),
-		Opcode(o1_forceBrandonToNormal),
-		Opcode(o1_poisonDeathNow),
-		// 0x28
-		Opcode(o1_setScaleMode),
-		Opcode(o1_openWSAFile),
-		Opcode(o1_closeWSAFile),
-		Opcode(o1_runWSAFromBeginningToEnd),
-		// 0x2c
-		Opcode(o1_displayWSAFrame),
-		Opcode(o1_enterNewScene),
-		Opcode(o1_setSpecialEnterXAndY),
-		Opcode(o1_runWSAFrames),
-		// 0x30
-		Opcode(o1_popBrandonIntoScene),
-		Opcode(o1_restoreAllObjectBackgrounds),
-		Opcode(o1_setCustomPaletteRange),
-		Opcode(o1_loadPageFromDisk),
-		// 0x34
-		Opcode(o1_customPrintTalkString),
-		Opcode(o1_restoreCustomPrintBackground),
-		Opcode(o1_hideMouse),
-		Opcode(o1_showMouse),
-		// 0x38
-		Opcode(o1_getCharacterX),
-		Opcode(o1_getCharacterY),
-		Opcode(o1_changeCharactersFacing),
-		Opcode(o1_copyWSARegion),
-		// 0x3c
-		Opcode(o1_printText),
-		Opcode(o1_random),
-		Opcode(o1_loadSoundFile),
-		Opcode(o1_displayWSAFrameOnHidPage),
-		// 0x40
-		Opcode(o1_displayWSASequentialFrames),
-		Opcode(o1_drawCharacterStanding),
-		Opcode(o1_internalAnimOff),
-		Opcode(o1_changeCharactersXAndY),
-		// 0x44
-		Opcode(o1_clearSceneAnimatorBeacon),
-		Opcode(o1_querySceneAnimatorBeacon),
-		Opcode(o1_refreshSceneAnimator),
-		Opcode(o1_placeItemInOffScene),
-		// 0x48
-		Opcode(o1_wipeDownMouseItem),
-		Opcode(o1_placeCharacterInOtherScene),
-		Opcode(o1_getKey),
-		Opcode(o1_specificItemInInventory),
-		// 0x4c
-		Opcode(o1_popMobileNPCIntoScene),
-		Opcode(o1_mobileCharacterInScene),
-		Opcode(o1_hideMobileCharacter),
-		Opcode(o1_unhideMobileCharacter),
-		// 0x50
-		Opcode(o1_setCharactersLocation),
-		Opcode(o1_walkCharacterToPoint),
-		Opcode(o1_specialEventDisplayBrynnsNote),
-		Opcode(o1_specialEventRemoveBrynnsNote),
-		// 0x54
-		Opcode(o1_setLogicPage),
-		Opcode(o1_fatPrint),
-		Opcode(o1_preserveAllObjectBackgrounds),
-		Opcode(o1_updateSceneAnimations),
-		// 0x58
-		Opcode(o1_sceneAnimationActive),
-		Opcode(o1_setCharactersMovementDelay),
-		Opcode(o1_getCharactersFacing),
-		Opcode(o1_bkgdScrollSceneAndMasksRight),
-		// 0x5c
-		Opcode(o1_dispelMagicAnimation),
-		Opcode(o1_findBrightestFireberry),
-		Opcode(o1_setFireberryGlowPalette),
-		Opcode(o1_setDeathHandlerFlag),
-		// 0x60
-		Opcode(o1_drinkPotionAnimation),
-		Opcode(o1_makeAmuletAppear),
-		Opcode(o1_drawItemShapeIntoScene),
-		Opcode(o1_setCharactersCurrentFrame),
-		// 0x64
-		Opcode(o1_waitForConfirmationMouseClick),
-		Opcode(o1_pageFlip),
-		Opcode(o1_setSceneFile),
-		Opcode(o1_getItemInMarbleVase),
-		// 0x68
-		Opcode(o1_setItemInMarbleVase),
-		Opcode(o1_addItemToInventory),
-		Opcode(o1_intPrint),
-		Opcode(o1_shakeScreen),
-		// 0x6c
-		Opcode(o1_createAmuletJewel),
-		Opcode(o1_setSceneAnimCurrXY),
-		Opcode(o1_poisonBrandonAndRemaps),
-		Opcode(o1_fillFlaskWithWater),
-		// 0x70
-		Opcode(o1_getCharactersMovementDelay),
-		Opcode(o1_getBirthstoneGem),
-		Opcode(o1_queryBrandonStatusBit),
-		Opcode(o1_playFluteAnimation),
-		// 0x74
-		Opcode(o1_playWinterScrollSequence),
-		Opcode(o1_getIdolGem),
-		Opcode(o1_setIdolGem),
-		Opcode(o1_totalItemsInScene),
-		// 0x78
-		Opcode(o1_restoreBrandonsMovementDelay),
-		Opcode(o1_setMousePos),
-		Opcode(o1_getMouseState),
-		Opcode(o1_setEntranceMouseCursorTrack),
-		// 0x7c
-		Opcode(o1_itemAppearsOnGround),
-		Opcode(o1_setNoDrawShapesFlag),
-		Opcode(o1_fadeEntirePalette),
-		Opcode(o1_itemOnGroundHere),
-		// 0x80
-		Opcode(o1_queryCauldronState),
-		Opcode(o1_setCauldronState),
-		Opcode(o1_queryCrystalState),
-		Opcode(o1_setCrystalState),
-		// 0x84
-		Opcode(o1_setPaletteRange),
-		Opcode(o1_shrinkBrandonDown),
-		Opcode(o1_growBrandonUp),
-		Opcode(o1_setBrandonScaleXAndY),
-		// 0x88
-		Opcode(o1_resetScaleMode),
-		Opcode(o1_getScaleDepthTableValue),
-		Opcode(o1_setScaleDepthTableValue),
-		Opcode(o1_message),
-		// 0x8c
-		Opcode(o1_checkClickOnNPC),
-		Opcode(o1_getFoyerItem),
-		Opcode(o1_setFoyerItem),
-		Opcode(o1_setNoItemDropRegion),
-		// 0x90
-		Opcode(o1_walkMalcolmOn),
-		Opcode(o1_passiveProtection),
-		Opcode(o1_setPlayingLoop),
-		Opcode(o1_brandonToStoneSequence),
-		// 0x94
-		Opcode(o1_brandonHealingSequence),
-		Opcode(o1_protectCommandLine),
-		Opcode(o1_pauseMusicSeconds),
-		Opcode(o1_resetMaskRegion),
-		// 0x98
-		Opcode(o1_setPaletteChangeFlag),
-		Opcode(o1_fillRect),
-		Opcode(o1_vocUnload),
-		Opcode(o1_vocLoad),
-		// 0x9c
-		Opcode(o1_dummy)
-	};
+	Common::Array<const Opcode *> *table = 0;
 
-	for (int i = 0; i < ARRAYSIZE(opcodeTable); ++i)
-		_opcodes.push_back(&opcodeTable[i]);
+	SetOpcodeTable(_opcodes);
+	// 0x00
+	Opcode(o1_magicInMouseItem);
+	Opcode(o1_characterSays);
+	Opcode(o1_pauseTicks);
+	Opcode(o1_drawSceneAnimShape);
+	// 0x04
+	Opcode(o1_queryGameFlag);
+	Opcode(o1_setGameFlag);
+	Opcode(o1_resetGameFlag);
+	Opcode(o1_runNPCScript);
+	// 0x08
+	Opcode(o1_setSpecialExitList);
+	Opcode(o1_blockInWalkableRegion);
+	Opcode(o1_blockOutWalkableRegion);
+	Opcode(o1_walkPlayerToPoint);
+	// 0x0c
+	Opcode(o1_dropItemInScene);
+	Opcode(o1_drawAnimShapeIntoScene);
+	Opcode(o1_createMouseItem);
+	Opcode(o1_savePageToDisk);
+	// 0x10
+	Opcode(o1_sceneAnimOn);
+	Opcode(o1_sceneAnimOff);
+	Opcode(o1_getElapsedSeconds);
+	Opcode(o1_mouseIsPointer);
+	// 0x14
+	Opcode(o1_destroyMouseItem);
+	Opcode(o1_runSceneAnimUntilDone);
+	Opcode(o1_fadeSpecialPalette);
+	Opcode(o1_playAdlibSound);
+	// 0x18
+	Opcode(o1_playAdlibScore);
+	Opcode(o1_phaseInSameScene);
+	Opcode(o1_setScenePhasingFlag);
+	Opcode(o1_resetScenePhasingFlag);
+	// 0x1c
+	Opcode(o1_queryScenePhasingFlag);
+	Opcode(o1_sceneToDirection);
+	Opcode(o1_setBirthstoneGem);
+	Opcode(o1_placeItemInGenericMapScene);
+	// 0x20
+	Opcode(o1_setBrandonStatusBit);
+	Opcode(o1_pauseSeconds);
+	Opcode(o1_getCharactersLocation);
+	Opcode(o1_runNPCSubscript);
+	// 0x24
+	Opcode(o1_magicOutMouseItem);
+	Opcode(o1_internalAnimOn);
+	Opcode(o1_forceBrandonToNormal);
+	Opcode(o1_poisonDeathNow);
+	// 0x28
+	Opcode(o1_setScaleMode);
+	Opcode(o1_openWSAFile);
+	Opcode(o1_closeWSAFile);
+	Opcode(o1_runWSAFromBeginningToEnd);
+	// 0x2c
+	Opcode(o1_displayWSAFrame);
+	Opcode(o1_enterNewScene);
+	Opcode(o1_setSpecialEnterXAndY);
+	Opcode(o1_runWSAFrames);
+	// 0x30
+	Opcode(o1_popBrandonIntoScene);
+	Opcode(o1_restoreAllObjectBackgrounds);
+	Opcode(o1_setCustomPaletteRange);
+	Opcode(o1_loadPageFromDisk);
+	// 0x34
+	Opcode(o1_customPrintTalkString);
+	Opcode(o1_restoreCustomPrintBackground);
+	Opcode(o1_hideMouse);
+	Opcode(o1_showMouse);
+	// 0x38
+	Opcode(o1_getCharacterX);
+	Opcode(o1_getCharacterY);
+	Opcode(o1_changeCharactersFacing);
+	Opcode(o1_copyWSARegion);
+	// 0x3c
+	Opcode(o1_printText);
+	Opcode(o1_random);
+	Opcode(o1_loadSoundFile);
+	Opcode(o1_displayWSAFrameOnHidPage);
+	// 0x40
+	Opcode(o1_displayWSASequentialFrames);
+	Opcode(o1_drawCharacterStanding);
+	Opcode(o1_internalAnimOff);
+	Opcode(o1_changeCharactersXAndY);
+	// 0x44
+	Opcode(o1_clearSceneAnimatorBeacon);
+	Opcode(o1_querySceneAnimatorBeacon);
+	Opcode(o1_refreshSceneAnimator);
+	Opcode(o1_placeItemInOffScene);
+	// 0x48
+	Opcode(o1_wipeDownMouseItem);
+	Opcode(o1_placeCharacterInOtherScene);
+	Opcode(o1_getKey);
+	Opcode(o1_specificItemInInventory);
+	// 0x4c
+	Opcode(o1_popMobileNPCIntoScene);
+	Opcode(o1_mobileCharacterInScene);
+	Opcode(o1_hideMobileCharacter);
+	Opcode(o1_unhideMobileCharacter);
+	// 0x50
+	Opcode(o1_setCharactersLocation);
+	Opcode(o1_walkCharacterToPoint);
+	Opcode(o1_specialEventDisplayBrynnsNote);
+	Opcode(o1_specialEventRemoveBrynnsNote);
+	// 0x54
+	Opcode(o1_setLogicPage);
+	Opcode(o1_fatPrint);
+	Opcode(o1_preserveAllObjectBackgrounds);
+	Opcode(o1_updateSceneAnimations);
+	// 0x58
+	Opcode(o1_sceneAnimationActive);
+	Opcode(o1_setCharactersMovementDelay);
+	Opcode(o1_getCharactersFacing);
+	Opcode(o1_bkgdScrollSceneAndMasksRight);
+	// 0x5c
+	Opcode(o1_dispelMagicAnimation);
+	Opcode(o1_findBrightestFireberry);
+	Opcode(o1_setFireberryGlowPalette);
+	Opcode(o1_setDeathHandlerFlag);
+	// 0x60
+	Opcode(o1_drinkPotionAnimation);
+	Opcode(o1_makeAmuletAppear);
+	Opcode(o1_drawItemShapeIntoScene);
+	Opcode(o1_setCharactersCurrentFrame);
+	// 0x64
+	Opcode(o1_waitForConfirmationMouseClick);
+	Opcode(o1_pageFlip);
+	Opcode(o1_setSceneFile);
+	Opcode(o1_getItemInMarbleVase);
+	// 0x68
+	Opcode(o1_setItemInMarbleVase);
+	Opcode(o1_addItemToInventory);
+	Opcode(o1_intPrint);
+	Opcode(o1_shakeScreen);
+	// 0x6c
+	Opcode(o1_createAmuletJewel);
+	Opcode(o1_setSceneAnimCurrXY);
+	Opcode(o1_poisonBrandonAndRemaps);
+	Opcode(o1_fillFlaskWithWater);
+	// 0x70
+	Opcode(o1_getCharactersMovementDelay);
+	Opcode(o1_getBirthstoneGem);
+	Opcode(o1_queryBrandonStatusBit);
+	Opcode(o1_playFluteAnimation);
+	// 0x74
+	Opcode(o1_playWinterScrollSequence);
+	Opcode(o1_getIdolGem);
+	Opcode(o1_setIdolGem);
+	Opcode(o1_totalItemsInScene);
+	// 0x78
+	Opcode(o1_restoreBrandonsMovementDelay);
+	Opcode(o1_setMousePos);
+	Opcode(o1_getMouseState);
+	Opcode(o1_setEntranceMouseCursorTrack);
+	// 0x7c
+	Opcode(o1_itemAppearsOnGround);
+	Opcode(o1_setNoDrawShapesFlag);
+	Opcode(o1_fadeEntirePalette);
+	Opcode(o1_itemOnGroundHere);
+	// 0x80
+	Opcode(o1_queryCauldronState);
+	Opcode(o1_setCauldronState);
+	Opcode(o1_queryCrystalState);
+	Opcode(o1_setCrystalState);
+	// 0x84
+	Opcode(o1_setPaletteRange);
+	Opcode(o1_shrinkBrandonDown);
+	Opcode(o1_growBrandonUp);
+	Opcode(o1_setBrandonScaleXAndY);
+	// 0x88
+	Opcode(o1_resetScaleMode);
+	Opcode(o1_getScaleDepthTableValue);
+	Opcode(o1_setScaleDepthTableValue);
+	Opcode(o1_message);
+	// 0x8c
+	Opcode(o1_checkClickOnNPC);
+	Opcode(o1_getFoyerItem);
+	Opcode(o1_setFoyerItem);
+	Opcode(o1_setNoItemDropRegion);
+	// 0x90
+	Opcode(o1_walkMalcolmOn);
+	Opcode(o1_passiveProtection);
+	Opcode(o1_setPlayingLoop);
+	Opcode(o1_brandonToStoneSequence);
+	// 0x94
+	Opcode(o1_brandonHealingSequence);
+	Opcode(o1_protectCommandLine);
+	Opcode(o1_pauseMusicSeconds);
+	Opcode(o1_resetMaskRegion);
+	// 0x98
+	Opcode(o1_setPaletteChangeFlag);
+	Opcode(o1_fillRect);
+	Opcode(o1_vocUnload);
+	Opcode(o1_vocLoad);
+	// 0x9c
+	Opcode(o1_dummy);
 }
 #undef Opcode
 

Modified: scummvm/trunk/engines/kyra/script_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v2.cpp	2008-04-20 15:11:14 UTC (rev 31606)
+++ scummvm/trunk/engines/kyra/script_v2.cpp	2008-04-20 15:16:58 UTC (rev 31607)
@@ -1873,262 +1873,258 @@
 #pragma mark -
 
 typedef Functor1Mem<ScriptState*, int, KyraEngine_v2> OpcodeV2;
-#define Opcode(x) OpcodeV2(this, &KyraEngine_v2::x)
-#define OpcodeUnImpl() OpcodeV2(this, 0)
+#define SetOpcodeTable(x) table = &x;
+#define Opcode(x) table->push_back(new OpcodeV2(this, &KyraEngine_v2::x))
+#define OpcodeUnImpl() table->push_back(new OpcodeV2(this, 0))
 
 typedef Functor2Mem<const TIM*, const uint16*, int, KyraEngine_v2> TIMOpcodeV2;
-#define OpcodeTim(x) TIMOpcodeV2(this, &KyraEngine_v2::x)
-#define OpcodeTimUnImpl() TIMOpcodeV2(this, 0)
+#define OpcodeTim(x) _timOpcodes.push_back(new TIMOpcodeV2(this, &KyraEngine_v2::x))
+#define OpcodeTimUnImpl() _timOpcodes.push_back(TIMOpcodeV2(this, 0))
 
 void KyraEngine_v2::setupOpcodeTable() {
-	static const OpcodeV2 opcodeTable[] = {
-		// 0x00
-		Opcode(o2_setCharacterFacingRefresh),
-		Opcode(o2_setCharacterPos),
-		Opcode(o2_defineObject),
-		Opcode(o2_refreshCharacter),
-		// 0x04
-		Opcode(o2_getCharacterX),
-		Opcode(o2_getCharacterY),
-		Opcode(o2_getCharacterFacing),
-		Opcode(o2_getCharacterScene),
-		// 0x08
-		Opcode(o2_setSceneComment),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o2_setCharacterAnimFrame),
-		// 0x0c
-		Opcode(o2_setCharacterFacing),
-		Opcode(o2_trySceneChange),
-		Opcode(o2_moveCharacter),
-		Opcode(o2_customCharacterChat),
-		// 0x10
-		Opcode(o2_soundFadeOut),
-		Opcode(o2_showChapterMessage),
-		Opcode(o2_restoreTalkTextMessageBkgd),
-		OpcodeUnImpl(),
-		// 0x14
-		Opcode(o2_wsaClose),
-		Opcode(o2_backUpScreen),
-		Opcode(o2_restoreScreen),
-		Opcode(o2_displayWsaFrame),
-		// 0x18
-		Opcode(o2_displayWsaSequentialFramesLooping),
-		Opcode(o2_wsaOpen),
-		Opcode(o2_displayWsaSequentialFrames),
-		Opcode(o2_displayWsaSequence),
-		// 0x1c
-		Opcode(o2_addItemToInventory),
-		Opcode(o2_drawShape),
-		Opcode(o2_addItemToCurScene),
-		Opcode(o2_dummy),	// the original used this opcode to limit the mouse range temporary,
-							// since that is of no use and not really important we just use a dummy here
-		// 0x20
-		Opcode(o2_checkForItem),
-		Opcode(o2_loadSoundFile),
-		Opcode(o2_removeItemSlotFromInventory),
-		Opcode(o2_defineItem),
-		// 0x24
-		Opcode(o2_removeItemFromInventory),
-		Opcode(o2_countItemInInventory),
-		Opcode(o2_countItemsInScene),
-		Opcode(o2_queryGameFlag),
-		// 0x28
-		Opcode(o2_resetGameFlag),
-		Opcode(o2_setGameFlag),
-		Opcode(o2_setHandItem),
-		Opcode(o2_removeHandItem),
-		// 0x2c
-		Opcode(o2_handItemSet),
-		Opcode(o2_hideMouse),
-		Opcode(o2_addSpecialExit),
-		Opcode(o2_setMousePos),
-		// 0x30
-		Opcode(o2_showMouse),
-		OpcodeUnImpl(),
-		Opcode(o2_wipeDownMouseItem),
-		Opcode(o2_getElapsedSecs),
-		// 0x34
-		Opcode(o2_getTimerDelay),
-		Opcode(o2_playSoundEffect),
-		Opcode(o2_delaySecs),
-		Opcode(o2_delay),
-		// 0x38
-		Opcode(o2_dummy),
-		Opcode(o2_setTimerDelay),
-		Opcode(o2_setScaleTableItem),
-		Opcode(o2_setDrawLayerTableItem),
-		// 0x3c
-		Opcode(o2_setCharPalEntry),
-		Opcode(o2_loadZShapes),
-		Opcode(o2_drawSceneShape),
-		Opcode(o2_drawSceneShapeOnPage),
-		// 0x40
-		Opcode(o2_disableAnimObject),
-		Opcode(o2_enableAnimObject),
-		Opcode(o2_dummy),
-		Opcode(o2_loadPalette384),
-		// 0x44
-		Opcode(o2_setPalette384),
-		Opcode(o2_restoreBackBuffer),
-		Opcode(o2_backUpInventoryGfx),
-		Opcode(o2_disableSceneAnim),
-		// 0x48
-		Opcode(o2_enableSceneAnim),
-		Opcode(o2_restoreInventoryGfx),
-		Opcode(o2_setSceneAnimPos2),
-		Opcode(o2_update),
-		// 0x4c
-		OpcodeUnImpl(),
-		Opcode(o2_fadeScenePal),
-		Opcode(o2_dummy),
-		Opcode(o2_dummy),
-		// 0x50
-		Opcode(o2_enterNewSceneEx),
-		Opcode(o2_switchScene),
-		Opcode(o2_getShapeFlag1),
-		Opcode(o2_setPathfinderFlag),
-		// 0x54
-		Opcode(o2_getSceneExitToFacing),
-		Opcode(o2_setLayerFlag),
-		Opcode(o2_setZanthiaPos),
-		Opcode(o2_loadMusicTrack),
-		// 0x58
-		Opcode(o2_playWanderScoreViaMap),
-		Opcode(o2_playSoundEffect),
-		Opcode(o2_setSceneAnimPos),
-		Opcode(o2_blockInRegion),
-		// 0x5c
-		Opcode(o2_blockOutRegion),
-		OpcodeUnImpl(),
-		Opcode(o2_setCauldronState),
-		Opcode(o2_showItemString),
-		// 0x60
-		Opcode(o2_getRand),
-		Opcode(o2_isAnySoundPlaying),
-		Opcode(o2_setDeathHandlerFlag),
-		Opcode(o2_setDrawNoShapeFlag),
-		// 0x64
-		Opcode(o2_setRunFlag),
-		Opcode(o2_showLetter),
-		OpcodeUnImpl(),
-		Opcode(o2_fillRect),
-		// 0x68
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o2_waitForConfirmationClick),
-		// 0x6c
-		Opcode(o2_encodeShape),
-		Opcode(o2_defineRoomEntrance),
-		Opcode(o2_runTemporaryScript),
-		Opcode(o2_setSpecialSceneScriptRunTime),
-		// 0x70
-		Opcode(o2_defineSceneAnim),
-		Opcode(o2_updateSceneAnim),
-		Opcode(o2_updateSceneAnim),
-		Opcode(o2_addToSceneAnimPosAndUpdate),
-		// 0x74
-		Opcode(o2_useItemOnMainChar),
-		Opcode(o2_startDialogue),
-		Opcode(o2_zanthRandomChat),
-		Opcode(o2_setupDialogue),
-		// 0x78
-		Opcode(o2_getDlgIndex),
-		Opcode(o2_defineRoom),
-		Opcode(o2_addCauldronStateTableEntry),
-		Opcode(o2_setCountDown),
-		// 0x7c
-		Opcode(o2_getCountDown),
-		Opcode(o2_dummy),
-		Opcode(o2_dummy),
-		Opcode(o2_pressColorKey),
-		// 0x80
-		Opcode(o2_objectChat),
-		Opcode(o2_chapterChange),
-		Opcode(o2_getColorCodeFlag1),
-		Opcode(o2_setColorCodeFlag1),
-		// 0x84
-		Opcode(o2_getColorCodeFlag2),
-		Opcode(o2_setColorCodeFlag2),
-		Opcode(o2_getColorCodeValue),
-		Opcode(o2_setColorCodeValue),
-		// 0x88
-		Opcode(o2_countItemInstances),
-		Opcode(o2_removeItemFromScene),
-		Opcode(o2_initObject),
-		Opcode(o2_npcChat),
-		// 0x8c
-		Opcode(o2_deinitObject),
-		Opcode(o2_playTimSequence),
-		Opcode(o2_makeBookOrCauldronAppear),
-		Opcode(o2_setSpecialSceneScriptState),
-		// 0x90
-		Opcode(o2_clearSpecialSceneScriptState),
-		Opcode(o2_querySpecialSceneScriptState),
-		Opcode(o2_resetInputColorCode),
-		Opcode(o2_setHiddenItemsEntry),
-		// 0x94
-		Opcode(o2_getHiddenItemsEntry),
-		Opcode(o2_mushroomEffect),
-		Opcode(o2_wsaClose),
-		Opcode(o2_meanWhileScene),
-		// 0x98
-		Opcode(o2_customChat),
-		Opcode(o2_customChatFinish),
-		Opcode(o2_setupSceneAnimation),
-		Opcode(o2_stopSceneAnimation),
-		// 0x9c
-		Opcode(o2_disableTimer),
-		Opcode(o2_enableTimer),
-		Opcode(o2_setTimerCountdown),
-		Opcode(o2_processPaletteIndex),
-		// 0xa0
-		Opcode(o2_updateTwoSceneAnims),
-		Opcode(o2_getRainbowRoomData),
-		Opcode(o2_drawSceneShapeEx),
-		Opcode(o2_getBoolFromStack),
-		// 0xa4
-		Opcode(o2_getSfxDriver),
-		Opcode(o2_getVocSupport),
-		Opcode(o2_getMusicDriver),
-		Opcode(o2_setVocHigh),
-		// 0xa8
-		Opcode(o2_getVocHigh),
-		Opcode(o2_zanthiaChat),
-		Opcode(o2_isVoiceEnabled),
-		Opcode(o2_isVoicePlaying),
-		// 0xac
-		Opcode(o2_stopVoicePlaying),
-		Opcode(o2_getGameLanguage),
-		Opcode(o2_demoFinale),
-		Opcode(o2_dummy),
-	};
+	Common::Array<const Opcode*> *table = 0;
 
-	for (int i = 0; i < ARRAYSIZE(opcodeTable); ++i)
-		_opcodes.push_back(&opcodeTable[i]);
+	SetOpcodeTable(_opcodes);
+	// 0x00
+	Opcode(o2_setCharacterFacingRefresh);
+	Opcode(o2_setCharacterPos);
+	Opcode(o2_defineObject);
+	Opcode(o2_refreshCharacter);
+	// 0x04
+	Opcode(o2_getCharacterX);
+	Opcode(o2_getCharacterY);
+	Opcode(o2_getCharacterFacing);
+	Opcode(o2_getCharacterScene);
+	// 0x08
+	Opcode(o2_setSceneComment);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o2_setCharacterAnimFrame);
+	// 0x0c
+	Opcode(o2_setCharacterFacing);
+	Opcode(o2_trySceneChange);
+	Opcode(o2_moveCharacter);
+	Opcode(o2_customCharacterChat);
+	// 0x10
+	Opcode(o2_soundFadeOut);
+	Opcode(o2_showChapterMessage);
+	Opcode(o2_restoreTalkTextMessageBkgd);
+	OpcodeUnImpl();
+	// 0x14
+	Opcode(o2_wsaClose);
+	Opcode(o2_backUpScreen);
+	Opcode(o2_restoreScreen);
+	Opcode(o2_displayWsaFrame);
+	// 0x18
+	Opcode(o2_displayWsaSequentialFramesLooping);
+	Opcode(o2_wsaOpen);
+	Opcode(o2_displayWsaSequentialFrames);
+	Opcode(o2_displayWsaSequence);
+	// 0x1c
+	Opcode(o2_addItemToInventory);
+	Opcode(o2_drawShape);
+	Opcode(o2_addItemToCurScene);
+	Opcode(o2_dummy);	// the original used this opcode to limit the mouse range temporary,
+						// since that is of no use and not really important we just use a dummy here
+	// 0x20
+	Opcode(o2_checkForItem);
+	Opcode(o2_loadSoundFile);
+	Opcode(o2_removeItemSlotFromInventory);
+	Opcode(o2_defineItem);
+	// 0x24
+	Opcode(o2_removeItemFromInventory);
+	Opcode(o2_countItemInInventory);
+	Opcode(o2_countItemsInScene);
+	Opcode(o2_queryGameFlag);
+	// 0x28
+	Opcode(o2_resetGameFlag);
+	Opcode(o2_setGameFlag);
+	Opcode(o2_setHandItem);
+	Opcode(o2_removeHandItem);
+	// 0x2c
+	Opcode(o2_handItemSet);
+	Opcode(o2_hideMouse);
+	Opcode(o2_addSpecialExit);
+	Opcode(o2_setMousePos);
+	// 0x30
+	Opcode(o2_showMouse);
+	OpcodeUnImpl();
+	Opcode(o2_wipeDownMouseItem);
+	Opcode(o2_getElapsedSecs);
+	// 0x34
+	Opcode(o2_getTimerDelay);
+	Opcode(o2_playSoundEffect);
+	Opcode(o2_delaySecs);
+	Opcode(o2_delay);
+	// 0x38
+	Opcode(o2_dummy);
+	Opcode(o2_setTimerDelay);
+	Opcode(o2_setScaleTableItem);
+	Opcode(o2_setDrawLayerTableItem);
+	// 0x3c
+	Opcode(o2_setCharPalEntry);
+	Opcode(o2_loadZShapes);
+	Opcode(o2_drawSceneShape);
+	Opcode(o2_drawSceneShapeOnPage);
+	// 0x40
+	Opcode(o2_disableAnimObject);
+	Opcode(o2_enableAnimObject);
+	Opcode(o2_dummy);
+	Opcode(o2_loadPalette384);
+	// 0x44
+	Opcode(o2_setPalette384);
+	Opcode(o2_restoreBackBuffer);
+	Opcode(o2_backUpInventoryGfx);
+	Opcode(o2_disableSceneAnim);
+	// 0x48
+	Opcode(o2_enableSceneAnim);
+	Opcode(o2_restoreInventoryGfx);
+	Opcode(o2_setSceneAnimPos2);
+	Opcode(o2_update);
+	// 0x4c
+	OpcodeUnImpl();
+	Opcode(o2_fadeScenePal);
+	Opcode(o2_dummy);
+	Opcode(o2_dummy);
+	// 0x50
+	Opcode(o2_enterNewSceneEx);
+	Opcode(o2_switchScene);
+	Opcode(o2_getShapeFlag1);
+	Opcode(o2_setPathfinderFlag);
+	// 0x54
+	Opcode(o2_getSceneExitToFacing);
+	Opcode(o2_setLayerFlag);
+	Opcode(o2_setZanthiaPos);
+	Opcode(o2_loadMusicTrack);
+	// 0x58
+	Opcode(o2_playWanderScoreViaMap);
+	Opcode(o2_playSoundEffect);
+	Opcode(o2_setSceneAnimPos);
+	Opcode(o2_blockInRegion);
+	// 0x5c
+	Opcode(o2_blockOutRegion);
+	OpcodeUnImpl();
+	Opcode(o2_setCauldronState);
+	Opcode(o2_showItemString);
+	// 0x60
+	Opcode(o2_getRand);
+	Opcode(o2_isAnySoundPlaying);
+	Opcode(o2_setDeathHandlerFlag);
+	Opcode(o2_setDrawNoShapeFlag);
+	// 0x64
+	Opcode(o2_setRunFlag);
+	Opcode(o2_showLetter);
+	OpcodeUnImpl();
+	Opcode(o2_fillRect);
+	// 0x68
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o2_waitForConfirmationClick);
+	// 0x6c
+	Opcode(o2_encodeShape);
+	Opcode(o2_defineRoomEntrance);
+	Opcode(o2_runTemporaryScript);
+	Opcode(o2_setSpecialSceneScriptRunTime);
+	// 0x70
+	Opcode(o2_defineSceneAnim);
+	Opcode(o2_updateSceneAnim);
+	Opcode(o2_updateSceneAnim);
+	Opcode(o2_addToSceneAnimPosAndUpdate);
+	// 0x74
+	Opcode(o2_useItemOnMainChar);
+	Opcode(o2_startDialogue);
+	Opcode(o2_zanthRandomChat);
+	Opcode(o2_setupDialogue);
+	// 0x78
+	Opcode(o2_getDlgIndex);
+	Opcode(o2_defineRoom);
+	Opcode(o2_addCauldronStateTableEntry);
+	Opcode(o2_setCountDown);
+	// 0x7c
+	Opcode(o2_getCountDown);
+	Opcode(o2_dummy);
+	Opcode(o2_dummy);
+	Opcode(o2_pressColorKey);
+	// 0x80
+	Opcode(o2_objectChat);
+	Opcode(o2_chapterChange);
+	Opcode(o2_getColorCodeFlag1);
+	Opcode(o2_setColorCodeFlag1);
+	// 0x84
+	Opcode(o2_getColorCodeFlag2);
+	Opcode(o2_setColorCodeFlag2);
+	Opcode(o2_getColorCodeValue);
+	Opcode(o2_setColorCodeValue);
+	// 0x88
+	Opcode(o2_countItemInstances);
+	Opcode(o2_removeItemFromScene);
+	Opcode(o2_initObject);
+	Opcode(o2_npcChat);
+	// 0x8c
+	Opcode(o2_deinitObject);
+	Opcode(o2_playTimSequence);
+	Opcode(o2_makeBookOrCauldronAppear);
+	Opcode(o2_setSpecialSceneScriptState);
+	// 0x90
+	Opcode(o2_clearSpecialSceneScriptState);
+	Opcode(o2_querySpecialSceneScriptState);
+	Opcode(o2_resetInputColorCode);
+	Opcode(o2_setHiddenItemsEntry);
+	// 0x94
+	Opcode(o2_getHiddenItemsEntry);
+	Opcode(o2_mushroomEffect);
+	Opcode(o2_wsaClose);
+	Opcode(o2_meanWhileScene);
+	// 0x98
+	Opcode(o2_customChat);
+	Opcode(o2_customChatFinish);
+	Opcode(o2_setupSceneAnimation);
+	Opcode(o2_stopSceneAnimation);
+	// 0x9c
+	Opcode(o2_disableTimer);
+	Opcode(o2_enableTimer);
+	Opcode(o2_setTimerCountdown);
+	Opcode(o2_processPaletteIndex);
+	// 0xa0
+	Opcode(o2_updateTwoSceneAnims);
+	Opcode(o2_getRainbowRoomData);
+	Opcode(o2_drawSceneShapeEx);
+	Opcode(o2_getBoolFromStack);
+	// 0xa4
+	Opcode(o2_getSfxDriver);
+	Opcode(o2_getVocSupport);
+	Opcode(o2_getMusicDriver);
+	Opcode(o2_setVocHigh);
+	// 0xa8
+	Opcode(o2_getVocHigh);
+	Opcode(o2_zanthiaChat);
+	Opcode(o2_isVoiceEnabled);
+	Opcode(o2_isVoicePlaying);
+	// 0xac
+	Opcode(o2_stopVoicePlaying);
+	Opcode(o2_getGameLanguage);
+	Opcode(o2_demoFinale);
+	Opcode(o2_dummy);
 
-	static const OpcodeV2 opcodeTemporaryTable[] = {
-		Opcode(o2t_defineNewShapes),
-		Opcode(o2t_setCurrentFrame),
-		Opcode(o2t_playSoundEffect),
-		Opcode(o2t_fadeScenePal),
-		Opcode(o2t_setShapeFlag),
-		Opcode(o2_dummy)
-	};
+	SetOpcodeTable(_opcodesTemporary);
 
-	for (int i = 0; i < ARRAYSIZE(opcodeTemporaryTable); ++i)
-		_opcodesTemporary.push_back(&opcodeTemporaryTable[i]);
+	// 0x00
+	Opcode(o2t_defineNewShapes);
+	Opcode(o2t_setCurrentFrame);
+	Opcode(o2t_playSoundEffect);
+	Opcode(o2t_fadeScenePal);
+	// 0x04
+	Opcode(o2t_setShapeFlag);
+	Opcode(o2_dummy);
 
-	static const TIMOpcodeV2 timOpcodeTable[] = {
-		OpcodeTim(t2_initChat),
-		OpcodeTim(t2_updateSceneAnim),
-		OpcodeTim(t2_resetChat),
-		OpcodeTim(t2_playSoundEffect)
-	};
+	// ---- TIM opcodes
 
-	for (int i = 0; i <  ARRAYSIZE(timOpcodeTable); ++i)
-		_timOpcodes.push_back(&timOpcodeTable[i]);
+	// 0x00
+	OpcodeTim(t2_initChat);
+	OpcodeTim(t2_updateSceneAnim);
+	OpcodeTim(t2_resetChat);
+	OpcodeTim(t2_playSoundEffect);
 }
 
 } // end of namespace Kyra

Modified: scummvm/trunk/engines/kyra/script_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-20 15:11:14 UTC (rev 31606)
+++ scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-20 15:16:58 UTC (rev 31607)
@@ -581,248 +581,244 @@
 }
 
 typedef Functor1Mem<ScriptState*, int, KyraEngine_v3> OpcodeV3;
-#define Opcode(x) OpcodeV3(this, &KyraEngine_v3::x)
-#define OpcodeUnImpl() OpcodeV3(this, 0)
+#define SetOpcodeTable(x) table = &x;
+#define Opcode(x) table->push_back(new OpcodeV3(this, &KyraEngine_v3::x))
+#define OpcodeUnImpl() table->push_back(new OpcodeV3(this, 0))
 void KyraEngine_v3::setupOpcodeTable() {
-	static const OpcodeV3 opcodeTable[] = {
-		// 0x00
-		Opcode(o3_getMalcolmShapes),
-		Opcode(o3_setCharacterPos),
-		Opcode(o3_defineObject),
-		Opcode(o3_refreshCharacter),
-		// 0x04
-		Opcode(o3_getCharacterX),
-		Opcode(o3_getCharacterY),
-		Opcode(o3_getCharacterFacing),
-		Opcode(o3_getCharacterScene),
-		// 0x08
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		// 0x0c
-		OpcodeUnImpl(),
-		Opcode(o3_trySceneChange),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x10
-		OpcodeUnImpl(),
-		Opcode(o3_showSceneFileMessage),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		// 0x14
-		OpcodeUnImpl(),
-		Opcode(o3_showBadConscience),
-		Opcode(o3_dummy),
-		Opcode(o3_hideBadConscience),
-		// 0x18
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x1c
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_objectChat),
-		// 0x20
-		Opcode(o3_checkForItem),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		Opcode(o3_defineItem),
-		// 0x24
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_queryGameFlag),
-		// 0x28
-		Opcode(o3_resetGameFlag),
-		Opcode(o3_setGameFlag),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x2c
-		Opcode(o3_getHandItem),
-		Opcode(o3_hideMouse),
-		Opcode(o3_addSpecialExit),
-		Opcode(o3_setMousePos),
-		// 0x30
-		Opcode(o3_showMouse),
-		Opcode(o3_badConscienceChat),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		// 0x34
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		Opcode(o3_delay),
-		// 0x38
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_setSceneFilename),
-		OpcodeUnImpl(),
-		// 0x3c
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_drawSceneShape),
-		// 0x40
-		Opcode(o3_checkInRect),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		// 0x44
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		// 0x48
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		Opcode(o3_update),
-		// 0x4c
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x50
-		Opcode(o3_enterNewScene),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		// 0x54
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		Opcode(o3_setMalcolmPos),
-		Opcode(o3_stopMusic),
-		// 0x58
-		Opcode(o3_playMusicTrack),
-		Opcode(o3_playSoundEffect),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x5c
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x60
-		Opcode(o3_getRand),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x64
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		// 0x68
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x6c
-		Opcode(o3_dummy),
-		Opcode(o3_defineRoomEntrance),
-		OpcodeUnImpl(),
-		Opcode(o3_setSpecialSceneScriptRunTime),
-		// 0x70
-		Opcode(o3_defineSceneAnim),
-		Opcode(o3_dummy),
-		Opcode(o3_updateSceneAnim),
-		Opcode(o3_dummy),
-		// 0x74
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x78
-		OpcodeUnImpl(),
-		Opcode(o3_defineScene),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0x7c
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		// 0x80
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		// 0x84
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		// 0x88
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		// 0x8c
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		Opcode(o3_setSpecialSceneScriptState),
-		// 0x90
-		Opcode(o3_clearSpecialSceneScriptState),
-		Opcode(o3_querySpecialSceneScriptState),
-		Opcode(o3_dummy),
-		Opcode(o3_setHiddenItemsEntry),
-		// 0x94
-		Opcode(o3_getHiddenItemsEntry),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		// 0x98
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_setupSceneAnimObject),
-		Opcode(o3_removeSceneAnimObject),
-		// 0x9c
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0xa0
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		Opcode(o3_dummy),
-		// 0xa4
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		Opcode(o3_setVocHigh),
-		// 0xa8
-		Opcode(o3_getVocHigh),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		OpcodeUnImpl(),
-		// 0xac
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-		OpcodeUnImpl(),
-		Opcode(o3_dummy),
-	};
+	Common::Array<const Opcode*> *table = 0;
 
-	for (int i = 0; i < ARRAYSIZE(opcodeTable); ++i)
-		_opcodes.push_back(&opcodeTable[i]);
+	SetOpcodeTable(_opcodes);
+	// 0x00
+	Opcode(o3_getMalcolmShapes);
+	Opcode(o3_setCharacterPos);
+	Opcode(o3_defineObject);
+	Opcode(o3_refreshCharacter);
+	// 0x04
+	Opcode(o3_getCharacterX);
+	Opcode(o3_getCharacterY);
+	Opcode(o3_getCharacterFacing);
+	Opcode(o3_getCharacterScene);
+	// 0x08
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	// 0x0c
+	OpcodeUnImpl();
+	Opcode(o3_trySceneChange);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x10
+	OpcodeUnImpl();
+	Opcode(o3_showSceneFileMessage);
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	// 0x14
+	OpcodeUnImpl();
+	Opcode(o3_showBadConscience);
+	Opcode(o3_dummy);
+	Opcode(o3_hideBadConscience);
+	// 0x18
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x1c
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_objectChat);
+	// 0x20
+	Opcode(o3_checkForItem);
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	Opcode(o3_defineItem);
+	// 0x24
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_queryGameFlag);
+	// 0x28
+	Opcode(o3_resetGameFlag);
+	Opcode(o3_setGameFlag);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x2c
+	Opcode(o3_getHandItem);
+	Opcode(o3_hideMouse);
+	Opcode(o3_addSpecialExit);
+	Opcode(o3_setMousePos);
+	// 0x30
+	Opcode(o3_showMouse);
+	Opcode(o3_badConscienceChat);
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	// 0x34
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	Opcode(o3_delay);
+	// 0x38
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_setSceneFilename);
+	OpcodeUnImpl();
+	// 0x3c
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_drawSceneShape);
+	// 0x40
+	Opcode(o3_checkInRect);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	// 0x44
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	// 0x48
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	Opcode(o3_update);
+	// 0x4c
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x50
+	Opcode(o3_enterNewScene);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	// 0x54
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	Opcode(o3_setMalcolmPos);
+	Opcode(o3_stopMusic);
+	// 0x58
+	Opcode(o3_playMusicTrack);
+	Opcode(o3_playSoundEffect);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x5c
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x60
+	Opcode(o3_getRand);
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x64
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	// 0x68
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x6c
+	Opcode(o3_dummy);
+	Opcode(o3_defineRoomEntrance);
+	OpcodeUnImpl();
+	Opcode(o3_setSpecialSceneScriptRunTime);
+	// 0x70
+	Opcode(o3_defineSceneAnim);
+	Opcode(o3_dummy);
+	Opcode(o3_updateSceneAnim);
+	Opcode(o3_dummy);
+	// 0x74
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x78
+	OpcodeUnImpl();
+	Opcode(o3_defineScene);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0x7c
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	// 0x80
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	// 0x84
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	// 0x88
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	// 0x8c
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	Opcode(o3_setSpecialSceneScriptState);
+	// 0x90
+	Opcode(o3_clearSpecialSceneScriptState);
+	Opcode(o3_querySpecialSceneScriptState);
+	Opcode(o3_dummy);
+	Opcode(o3_setHiddenItemsEntry);
+	// 0x94
+	Opcode(o3_getHiddenItemsEntry);
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	// 0x98
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_setupSceneAnimObject);
+	Opcode(o3_removeSceneAnimObject);
+	// 0x9c
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0xa0
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	Opcode(o3_dummy);
+	// 0xa4
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	Opcode(o3_setVocHigh);
+	// 0xa8
+	Opcode(o3_getVocHigh);
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	OpcodeUnImpl();
+	// 0xac
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
+	OpcodeUnImpl();
+	Opcode(o3_dummy);
 	
-	static const OpcodeV3 tempOpcodeTable[] = {
-		Opcode(o3t_defineNewShapes),
-		Opcode(o3t_setCurrentFrame),
-		Opcode(o3t_playSoundEffect),
-		Opcode(o3_dummy),
-		// 0x0a
-		OpcodeUnImpl(),
-		Opcode(o3_getRand),
-		Opcode(o3_dummy)
-	};
-	
-	for (int i = 0; i < ARRAYSIZE(tempOpcodeTable); ++i)
-		_opcodesTemporary.push_back(&tempOpcodeTable[i]);
+	SetOpcodeTable(_opcodesTemporary);
+	// 0x00
+	Opcode(o3t_defineNewShapes);
+	Opcode(o3t_setCurrentFrame);
+	Opcode(o3t_playSoundEffect);
+	Opcode(o3_dummy);
+	// 0x0a
+	OpcodeUnImpl();
+	Opcode(o3_getRand);
+	Opcode(o3_dummy);
 }
 
 } // end of namespace Kyra


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