aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/kyra/kyra.cpp4
-rw-r--r--engines/kyra/kyra_v2.cpp8
-rw-r--r--engines/kyra/kyra_v3.cpp4
-rw-r--r--engines/kyra/script_v1.cpp405
-rw-r--r--engines/kyra/script_v2.cpp500
-rw-r--r--engines/kyra/script_v3.cpp476
6 files changed, 702 insertions, 695 deletions
diff --git a/engines/kyra/kyra.cpp b/engines/kyra/kyra.cpp
index 2b09567b55..5ee2c1ed0c 100644
--- a/engines/kyra/kyra.cpp
+++ b/engines/kyra/kyra.cpp
@@ -189,6 +189,10 @@ int KyraEngine::init() {
}
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;
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp
index 8f48e2896e..4ee81eb070 100644
--- a/engines/kyra/kyra_v2.cpp
+++ b/engines/kyra/kyra_v2.cpp
@@ -176,6 +176,14 @@ KyraEngine_v2::~KyraEngine_v2() {
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() {
diff --git a/engines/kyra/kyra_v3.cpp b/engines/kyra/kyra_v3.cpp
index ef0cb41367..f6250693c5 100644
--- a/engines/kyra/kyra_v3.cpp
+++ b/engines/kyra/kyra_v3.cpp
@@ -156,6 +156,10 @@ KyraEngine_v3::~KyraEngine_v3() {
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() {
diff --git a/engines/kyra/script_v1.cpp b/engines/kyra/script_v1.cpp
index 901812e8e5..226bf140d9 100644
--- a/engines/kyra/script_v1.cpp
+++ b/engines/kyra/script_v1.cpp
@@ -1821,210 +1821,209 @@ int KyraEngine_v1::o1_dummy(ScriptState *script) {
#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)
- };
-
- for (int i = 0; i < ARRAYSIZE(opcodeTable); ++i)
- _opcodes.push_back(&opcodeTable[i]);
+ Common::Array<const Opcode *> *table = 0;
+
+ 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
diff --git a/engines/kyra/script_v2.cpp b/engines/kyra/script_v2.cpp
index 13e3f02c3e..0c2f1d2c24 100644
--- a/engines/kyra/script_v2.cpp
+++ b/engines/kyra/script_v2.cpp
@@ -1873,262 +1873,258 @@ int KyraEngine_v2::t2_playSoundEffect(const TIM *tim, const uint16 *param) {
#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),
- };
-
- for (int i = 0; i < ARRAYSIZE(opcodeTable); ++i)
- _opcodes.push_back(&opcodeTable[i]);
-
- static const OpcodeV2 opcodeTemporaryTable[] = {
- Opcode(o2t_defineNewShapes),
- Opcode(o2t_setCurrentFrame),
- Opcode(o2t_playSoundEffect),
- Opcode(o2t_fadeScenePal),
- Opcode(o2t_setShapeFlag),
- Opcode(o2_dummy)
- };
-
- for (int i = 0; i < ARRAYSIZE(opcodeTemporaryTable); ++i)
- _opcodesTemporary.push_back(&opcodeTemporaryTable[i]);
-
- static const TIMOpcodeV2 timOpcodeTable[] = {
- OpcodeTim(t2_initChat),
- OpcodeTim(t2_updateSceneAnim),
- OpcodeTim(t2_resetChat),
- OpcodeTim(t2_playSoundEffect)
- };
-
- for (int i = 0; i < ARRAYSIZE(timOpcodeTable); ++i)
- _timOpcodes.push_back(&timOpcodeTable[i]);
+ Common::Array<const Opcode*> *table = 0;
+
+ 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);
+
+ SetOpcodeTable(_opcodesTemporary);
+
+ // 0x00
+ Opcode(o2t_defineNewShapes);
+ Opcode(o2t_setCurrentFrame);
+ Opcode(o2t_playSoundEffect);
+ Opcode(o2t_fadeScenePal);
+ // 0x04
+ Opcode(o2t_setShapeFlag);
+ Opcode(o2_dummy);
+
+ // ---- TIM opcodes
+
+ // 0x00
+ OpcodeTim(t2_initChat);
+ OpcodeTim(t2_updateSceneAnim);
+ OpcodeTim(t2_resetChat);
+ OpcodeTim(t2_playSoundEffect);
}
} // end of namespace Kyra
diff --git a/engines/kyra/script_v3.cpp b/engines/kyra/script_v3.cpp
index 3aea21fca4..58fe9f9087 100644
--- a/engines/kyra/script_v3.cpp
+++ b/engines/kyra/script_v3.cpp
@@ -581,248 +581,244 @@ int KyraEngine_v3::o3t_getMalcolmShapes(ScriptState *script) {
}
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),
- };
-
- for (int i = 0; i < ARRAYSIZE(opcodeTable); ++i)
- _opcodes.push_back(&opcodeTable[i]);
-
- static const OpcodeV3 tempOpcodeTable[] = {
- Opcode(o3t_defineNewShapes),
- Opcode(o3t_setCurrentFrame),
- Opcode(o3t_playSoundEffect),
- Opcode(o3_dummy),
- // 0x0a
- OpcodeUnImpl(),
- Opcode(o3_getRand),
- Opcode(o3_dummy)
- };
+ Common::Array<const Opcode*> *table = 0;
+
+ 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);
- 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