mirror of
https://github.com/libretro/scummvm.git
synced 2025-05-13 09:36:21 +00:00
- renaming all opcodes from cmd_* to c1_*
- changing ScriptHelper functions so it will be useable for kyra2 and kyra3 too - unbreaking savegames (increasing the VERSION number since the game flags table got resized to be useable for kyra3) svn-id: r23612
This commit is contained in:
parent
8a0ec2a3e5
commit
ee5621137f
@ -479,7 +479,7 @@ void KyraEngine::startup() {
|
||||
_animator->initAnimStateList();
|
||||
setCharactersInDefaultScene();
|
||||
|
||||
if (!_scriptInterpreter->loadScript("_STARTUP.EMC", _npcScriptData, _opcodeTable, _opcodeTableSize, 0)) {
|
||||
if (!_scriptInterpreter->loadScript("_STARTUP.EMC", _npcScriptData, 0)) {
|
||||
error("Could not load \"_STARTUP.EMC\" script");
|
||||
}
|
||||
_scriptInterpreter->initScript(_scriptMain, _npcScriptData);
|
||||
@ -491,7 +491,7 @@ void KyraEngine::startup() {
|
||||
}
|
||||
|
||||
_scriptInterpreter->unloadScript(_npcScriptData);
|
||||
if (!_scriptInterpreter->loadScript("_NPC.EMC", _npcScriptData, _opcodeTable, _opcodeTableSize, 0)) {
|
||||
if (!_scriptInterpreter->loadScript("_NPC.EMC", _npcScriptData, 0)) {
|
||||
error("Could not load \"_NPC.EMC\" script");
|
||||
}
|
||||
|
||||
@ -1113,4 +1113,14 @@ void KyraEngine::runNpcScript(int func) {
|
||||
}
|
||||
}
|
||||
|
||||
int KyraEngine::runOpcode(ScriptState *script, uint8 opcode) {
|
||||
debugC(9, kDebugLevelMain | kDebugLevelScript, "KyraEngine::runOpcode(%p, %d)", (void *)script, opcode);
|
||||
assert(opcode < _opcodeTableSize);
|
||||
if (_opcodeTable[opcode] == &KyraEngine::c1_dummy)
|
||||
warning("calling unimplemented opcode(0x%.02X)", opcode);
|
||||
int val = (this->*_opcodeTable[opcode])(script);
|
||||
assert(script);
|
||||
return val;
|
||||
}
|
||||
|
||||
} // End of namespace Kyra
|
||||
|
@ -70,7 +70,7 @@ enum {
|
||||
// TODO: this is just the start of makeing the debug output of the kyra engine a bit more useable
|
||||
// in the future we maybe merge some flags and/or create new ones
|
||||
enum kDebugLevels {
|
||||
kDebugLevelScriptFuncs = 1 << 0, // prints debug output of cmd_* functions
|
||||
kDebugLevelScriptFuncs = 1 << 0, // prints debug output of c1_* functions
|
||||
kDebugLevelScript = 1 << 1, // prints debug output of "ScriptHelper" functions
|
||||
kDebugLevelSprites = 1 << 2, // prints debug output of "Sprites" functions
|
||||
kDebugLevelScreen = 1 << 3, // prints debug output of "Screen" functions
|
||||
@ -330,164 +330,165 @@ public:
|
||||
int mouseX() { return _mouseX; }
|
||||
int mouseY() { return _mouseY; }
|
||||
|
||||
// all opcode procs (maybe that is somehow useless atm)
|
||||
int cmd_magicInMouseItem(ScriptState *script);
|
||||
int cmd_characterSays(ScriptState *script);
|
||||
int cmd_pauseTicks(ScriptState *script);
|
||||
int cmd_drawSceneAnimShape(ScriptState *script);
|
||||
int cmd_queryGameFlag(ScriptState *script);
|
||||
int cmd_setGameFlag(ScriptState *script);
|
||||
int cmd_resetGameFlag(ScriptState *script);
|
||||
int cmd_runNPCScript(ScriptState *script);
|
||||
int cmd_setSpecialExitList(ScriptState *script);
|
||||
int cmd_blockInWalkableRegion(ScriptState *script);
|
||||
int cmd_blockOutWalkableRegion(ScriptState *script);
|
||||
int cmd_walkPlayerToPoint(ScriptState *script);
|
||||
int cmd_dropItemInScene(ScriptState *script);
|
||||
int cmd_drawAnimShapeIntoScene(ScriptState *script);
|
||||
int cmd_createMouseItem(ScriptState *script);
|
||||
int cmd_savePageToDisk(ScriptState *script);
|
||||
int cmd_sceneAnimOn(ScriptState *script);
|
||||
int cmd_sceneAnimOff(ScriptState *script);
|
||||
int cmd_getElapsedSeconds(ScriptState *script);
|
||||
int cmd_mouseIsPointer(ScriptState *script);
|
||||
int cmd_destroyMouseItem(ScriptState *script);
|
||||
int cmd_runSceneAnimUntilDone(ScriptState *script);
|
||||
int cmd_fadeSpecialPalette(ScriptState *script);
|
||||
int cmd_playAdlibSound(ScriptState *script);
|
||||
int cmd_playAdlibScore(ScriptState *script);
|
||||
int cmd_phaseInSameScene(ScriptState *script);
|
||||
int cmd_setScenePhasingFlag(ScriptState *script);
|
||||
int cmd_resetScenePhasingFlag(ScriptState *script);
|
||||
int cmd_queryScenePhasingFlag(ScriptState *script);
|
||||
int cmd_sceneToDirection(ScriptState *script);
|
||||
int cmd_setBirthstoneGem(ScriptState *script);
|
||||
int cmd_placeItemInGenericMapScene(ScriptState *script);
|
||||
int cmd_setBrandonStatusBit(ScriptState *script);
|
||||
int cmd_pauseSeconds(ScriptState *script);
|
||||
int cmd_getCharactersLocation(ScriptState *script);
|
||||
int cmd_runNPCSubscript(ScriptState *script);
|
||||
int cmd_magicOutMouseItem(ScriptState *script);
|
||||
int cmd_internalAnimOn(ScriptState *script);
|
||||
int cmd_forceBrandonToNormal(ScriptState *script);
|
||||
int cmd_poisonDeathNow(ScriptState *script);
|
||||
int cmd_setScaleMode(ScriptState *script);
|
||||
int cmd_openWSAFile(ScriptState *script);
|
||||
int cmd_closeWSAFile(ScriptState *script);
|
||||
int cmd_runWSAFromBeginningToEnd(ScriptState *script);
|
||||
int cmd_displayWSAFrame(ScriptState *script);
|
||||
int cmd_enterNewScene(ScriptState *script);
|
||||
int cmd_setSpecialEnterXAndY(ScriptState *script);
|
||||
int cmd_runWSAFrames(ScriptState *script);
|
||||
int cmd_popBrandonIntoScene(ScriptState *script);
|
||||
int cmd_restoreAllObjectBackgrounds(ScriptState *script);
|
||||
int cmd_setCustomPaletteRange(ScriptState *script);
|
||||
int cmd_loadPageFromDisk(ScriptState *script);
|
||||
int cmd_customPrintTalkString(ScriptState *script);
|
||||
int cmd_restoreCustomPrintBackground(ScriptState *script);
|
||||
int cmd_hideMouse(ScriptState *script);
|
||||
int cmd_showMouse(ScriptState *script);
|
||||
int cmd_getCharacterX(ScriptState *script);
|
||||
int cmd_getCharacterY(ScriptState *script);
|
||||
int cmd_changeCharactersFacing(ScriptState *script);
|
||||
int cmd_copyWSARegion(ScriptState *script);
|
||||
int cmd_printText(ScriptState *script);
|
||||
int cmd_random(ScriptState *script);
|
||||
int cmd_loadSoundFile(ScriptState *script);
|
||||
int cmd_displayWSAFrameOnHidPage(ScriptState *script);
|
||||
int cmd_displayWSASequentialFrames(ScriptState *script);
|
||||
int cmd_drawCharacterStanding(ScriptState *script);
|
||||
int cmd_internalAnimOff(ScriptState *script);
|
||||
int cmd_changeCharactersXAndY(ScriptState *script);
|
||||
int cmd_clearSceneAnimatorBeacon(ScriptState *script);
|
||||
int cmd_querySceneAnimatorBeacon(ScriptState *script);
|
||||
int cmd_refreshSceneAnimator(ScriptState *script);
|
||||
int cmd_placeItemInOffScene(ScriptState *script);
|
||||
int cmd_wipeDownMouseItem(ScriptState *script);
|
||||
int cmd_placeCharacterInOtherScene(ScriptState *script);
|
||||
int cmd_getKey(ScriptState *script);
|
||||
int cmd_specificItemInInventory(ScriptState *script);
|
||||
int cmd_popMobileNPCIntoScene(ScriptState *script);
|
||||
int cmd_mobileCharacterInScene(ScriptState *script);
|
||||
int cmd_hideMobileCharacter(ScriptState *script);
|
||||
int cmd_unhideMobileCharacter(ScriptState *script);
|
||||
int cmd_setCharactersLocation(ScriptState *script);
|
||||
int cmd_walkCharacterToPoint(ScriptState *script);
|
||||
int cmd_specialEventDisplayBrynnsNote(ScriptState *script);
|
||||
int cmd_specialEventRemoveBrynnsNote(ScriptState *script);
|
||||
int cmd_setLogicPage(ScriptState *script);
|
||||
int cmd_fatPrint(ScriptState *script);
|
||||
int cmd_preserveAllObjectBackgrounds(ScriptState *script);
|
||||
int cmd_updateSceneAnimations(ScriptState *script);
|
||||
int cmd_sceneAnimationActive(ScriptState *script);
|
||||
int cmd_setCharactersMovementDelay(ScriptState *script);
|
||||
int cmd_getCharactersFacing(ScriptState *script);
|
||||
int cmd_bkgdScrollSceneAndMasksRight(ScriptState *script);
|
||||
int cmd_dispelMagicAnimation(ScriptState *script);
|
||||
int cmd_findBrightestFireberry(ScriptState *script);
|
||||
int cmd_setFireberryGlowPalette(ScriptState *script);
|
||||
int cmd_setDeathHandlerFlag(ScriptState *script);
|
||||
int cmd_drinkPotionAnimation(ScriptState *script);
|
||||
int cmd_makeAmuletAppear(ScriptState *script);
|
||||
int cmd_drawItemShapeIntoScene(ScriptState *script);
|
||||
int cmd_setCharactersCurrentFrame(ScriptState *script);
|
||||
int cmd_waitForConfirmationMouseClick(ScriptState *script);
|
||||
int cmd_pageFlip(ScriptState *script);
|
||||
int cmd_setSceneFile(ScriptState *script);
|
||||
int cmd_getItemInMarbleVase(ScriptState *script);
|
||||
int cmd_setItemInMarbleVase(ScriptState *script);
|
||||
int cmd_addItemToInventory(ScriptState *script);
|
||||
int cmd_intPrint(ScriptState *script);
|
||||
int cmd_shakeScreen(ScriptState *script);
|
||||
int cmd_createAmuletJewel(ScriptState *script);
|
||||
int cmd_setSceneAnimCurrXY(ScriptState *script);
|
||||
int cmd_poisonBrandonAndRemaps(ScriptState *script);
|
||||
int cmd_fillFlaskWithWater(ScriptState *script);
|
||||
int cmd_getCharactersMovementDelay(ScriptState *script);
|
||||
int cmd_getBirthstoneGem(ScriptState *script);
|
||||
int cmd_queryBrandonStatusBit(ScriptState *script);
|
||||
int cmd_playFluteAnimation(ScriptState *script);
|
||||
int cmd_playWinterScrollSequence(ScriptState *script);
|
||||
int cmd_getIdolGem(ScriptState *script);
|
||||
int cmd_setIdolGem(ScriptState *script);
|
||||
int cmd_totalItemsInScene(ScriptState *script);
|
||||
int cmd_restoreBrandonsMovementDelay(ScriptState *script);
|
||||
int cmd_setMousePos(ScriptState *script);
|
||||
int cmd_getMouseState(ScriptState *script);
|
||||
int cmd_setEntranceMouseCursorTrack(ScriptState *script);
|
||||
int cmd_itemAppearsOnGround(ScriptState *script);
|
||||
int cmd_setNoDrawShapesFlag(ScriptState *script);
|
||||
int cmd_fadeEntirePalette(ScriptState *script);
|
||||
int cmd_itemOnGroundHere(ScriptState *script);
|
||||
int cmd_queryCauldronState(ScriptState *script);
|
||||
int cmd_setCauldronState(ScriptState *script);
|
||||
int cmd_queryCrystalState(ScriptState *script);
|
||||
int cmd_setCrystalState(ScriptState *script);
|
||||
int cmd_setPaletteRange(ScriptState *script);
|
||||
int cmd_shrinkBrandonDown(ScriptState *script);
|
||||
int cmd_growBrandonUp(ScriptState *script);
|
||||
int cmd_setBrandonScaleXAndY(ScriptState *script);
|
||||
int cmd_resetScaleMode(ScriptState *script);
|
||||
int cmd_getScaleDepthTableValue(ScriptState *script);
|
||||
int cmd_setScaleDepthTableValue(ScriptState *script);
|
||||
int cmd_message(ScriptState *script);
|
||||
int cmd_checkClickOnNPC(ScriptState *script);
|
||||
int cmd_getFoyerItem(ScriptState *script);
|
||||
int cmd_setFoyerItem(ScriptState *script);
|
||||
int cmd_setNoItemDropRegion(ScriptState *script);
|
||||
int cmd_walkMalcolmOn(ScriptState *script);
|
||||
int cmd_passiveProtection(ScriptState *script);
|
||||
int cmd_setPlayingLoop(ScriptState *script);
|
||||
int cmd_brandonToStoneSequence(ScriptState *script);
|
||||
int cmd_brandonHealingSequence(ScriptState *script);
|
||||
int cmd_protectCommandLine(ScriptState *script);
|
||||
int cmd_pauseMusicSeconds(ScriptState *script);
|
||||
int cmd_resetMaskRegion(ScriptState *script);
|
||||
int cmd_setPaletteChangeFlag(ScriptState *script);
|
||||
int cmd_fillRect(ScriptState *script);
|
||||
int cmd_dummy(ScriptState *script);
|
||||
int cmd_vocUnload(ScriptState *script);
|
||||
int cmd_vocLoad(ScriptState *script);
|
||||
virtual int runOpcode(ScriptState *script, uint8 opcode);
|
||||
protected:
|
||||
int c1_magicInMouseItem(ScriptState *script);
|
||||
int c1_characterSays(ScriptState *script);
|
||||
int c1_pauseTicks(ScriptState *script);
|
||||
int c1_drawSceneAnimShape(ScriptState *script);
|
||||
int c1_queryGameFlag(ScriptState *script);
|
||||
int c1_setGameFlag(ScriptState *script);
|
||||
int c1_resetGameFlag(ScriptState *script);
|
||||
int c1_runNPCScript(ScriptState *script);
|
||||
int c1_setSpecialExitList(ScriptState *script);
|
||||
int c1_blockInWalkableRegion(ScriptState *script);
|
||||
int c1_blockOutWalkableRegion(ScriptState *script);
|
||||
int c1_walkPlayerToPoint(ScriptState *script);
|
||||
int c1_dropItemInScene(ScriptState *script);
|
||||
int c1_drawAnimShapeIntoScene(ScriptState *script);
|
||||
int c1_createMouseItem(ScriptState *script);
|
||||
int c1_savePageToDisk(ScriptState *script);
|
||||
int c1_sceneAnimOn(ScriptState *script);
|
||||
int c1_sceneAnimOff(ScriptState *script);
|
||||
int c1_getElapsedSeconds(ScriptState *script);
|
||||
int c1_mouseIsPointer(ScriptState *script);
|
||||
int c1_destroyMouseItem(ScriptState *script);
|
||||
int c1_runSceneAnimUntilDone(ScriptState *script);
|
||||
int c1_fadeSpecialPalette(ScriptState *script);
|
||||
int c1_playAdlibSound(ScriptState *script);
|
||||
int c1_playAdlibScore(ScriptState *script);
|
||||
int c1_phaseInSameScene(ScriptState *script);
|
||||
int c1_setScenePhasingFlag(ScriptState *script);
|
||||
int c1_resetScenePhasingFlag(ScriptState *script);
|
||||
int c1_queryScenePhasingFlag(ScriptState *script);
|
||||
int c1_sceneToDirection(ScriptState *script);
|
||||
int c1_setBirthstoneGem(ScriptState *script);
|
||||
int c1_placeItemInGenericMapScene(ScriptState *script);
|
||||
int c1_setBrandonStatusBit(ScriptState *script);
|
||||
int c1_pauseSeconds(ScriptState *script);
|
||||
int c1_getCharactersLocation(ScriptState *script);
|
||||
int c1_runNPCSubscript(ScriptState *script);
|
||||
int c1_magicOutMouseItem(ScriptState *script);
|
||||
int c1_internalAnimOn(ScriptState *script);
|
||||
int c1_forceBrandonToNormal(ScriptState *script);
|
||||
int c1_poisonDeathNow(ScriptState *script);
|
||||
int c1_setScaleMode(ScriptState *script);
|
||||
int c1_openWSAFile(ScriptState *script);
|
||||
int c1_closeWSAFile(ScriptState *script);
|
||||
int c1_runWSAFromBeginningToEnd(ScriptState *script);
|
||||
int c1_displayWSAFrame(ScriptState *script);
|
||||
int c1_enterNewScene(ScriptState *script);
|
||||
int c1_setSpecialEnterXAndY(ScriptState *script);
|
||||
int c1_runWSAFrames(ScriptState *script);
|
||||
int c1_popBrandonIntoScene(ScriptState *script);
|
||||
int c1_restoreAllObjectBackgrounds(ScriptState *script);
|
||||
int c1_setCustomPaletteRange(ScriptState *script);
|
||||
int c1_loadPageFromDisk(ScriptState *script);
|
||||
int c1_customPrintTalkString(ScriptState *script);
|
||||
int c1_restoreCustomPrintBackground(ScriptState *script);
|
||||
int c1_hideMouse(ScriptState *script);
|
||||
int c1_showMouse(ScriptState *script);
|
||||
int c1_getCharacterX(ScriptState *script);
|
||||
int c1_getCharacterY(ScriptState *script);
|
||||
int c1_changeCharactersFacing(ScriptState *script);
|
||||
int c1_copyWSARegion(ScriptState *script);
|
||||
int c1_printText(ScriptState *script);
|
||||
int c1_random(ScriptState *script);
|
||||
int c1_loadSoundFile(ScriptState *script);
|
||||
int c1_displayWSAFrameOnHidPage(ScriptState *script);
|
||||
int c1_displayWSASequentialFrames(ScriptState *script);
|
||||
int c1_drawCharacterStanding(ScriptState *script);
|
||||
int c1_internalAnimOff(ScriptState *script);
|
||||
int c1_changeCharactersXAndY(ScriptState *script);
|
||||
int c1_clearSceneAnimatorBeacon(ScriptState *script);
|
||||
int c1_querySceneAnimatorBeacon(ScriptState *script);
|
||||
int c1_refreshSceneAnimator(ScriptState *script);
|
||||
int c1_placeItemInOffScene(ScriptState *script);
|
||||
int c1_wipeDownMouseItem(ScriptState *script);
|
||||
int c1_placeCharacterInOtherScene(ScriptState *script);
|
||||
int c1_getKey(ScriptState *script);
|
||||
int c1_specificItemInInventory(ScriptState *script);
|
||||
int c1_popMobileNPCIntoScene(ScriptState *script);
|
||||
int c1_mobileCharacterInScene(ScriptState *script);
|
||||
int c1_hideMobileCharacter(ScriptState *script);
|
||||
int c1_unhideMobileCharacter(ScriptState *script);
|
||||
int c1_setCharactersLocation(ScriptState *script);
|
||||
int c1_walkCharacterToPoint(ScriptState *script);
|
||||
int c1_specialEventDisplayBrynnsNote(ScriptState *script);
|
||||
int c1_specialEventRemoveBrynnsNote(ScriptState *script);
|
||||
int c1_setLogicPage(ScriptState *script);
|
||||
int c1_fatPrint(ScriptState *script);
|
||||
int c1_preserveAllObjectBackgrounds(ScriptState *script);
|
||||
int c1_updateSceneAnimations(ScriptState *script);
|
||||
int c1_sceneAnimationActive(ScriptState *script);
|
||||
int c1_setCharactersMovementDelay(ScriptState *script);
|
||||
int c1_getCharactersFacing(ScriptState *script);
|
||||
int c1_bkgdScrollSceneAndMasksRight(ScriptState *script);
|
||||
int c1_dispelMagicAnimation(ScriptState *script);
|
||||
int c1_findBrightestFireberry(ScriptState *script);
|
||||
int c1_setFireberryGlowPalette(ScriptState *script);
|
||||
int c1_setDeathHandlerFlag(ScriptState *script);
|
||||
int c1_drinkPotionAnimation(ScriptState *script);
|
||||
int c1_makeAmuletAppear(ScriptState *script);
|
||||
int c1_drawItemShapeIntoScene(ScriptState *script);
|
||||
int c1_setCharactersCurrentFrame(ScriptState *script);
|
||||
int c1_waitForConfirmationMouseClick(ScriptState *script);
|
||||
int c1_pageFlip(ScriptState *script);
|
||||
int c1_setSceneFile(ScriptState *script);
|
||||
int c1_getItemInMarbleVase(ScriptState *script);
|
||||
int c1_setItemInMarbleVase(ScriptState *script);
|
||||
int c1_addItemToInventory(ScriptState *script);
|
||||
int c1_intPrint(ScriptState *script);
|
||||
int c1_shakeScreen(ScriptState *script);
|
||||
int c1_createAmuletJewel(ScriptState *script);
|
||||
int c1_setSceneAnimCurrXY(ScriptState *script);
|
||||
int c1_poisonBrandonAndRemaps(ScriptState *script);
|
||||
int c1_fillFlaskWithWater(ScriptState *script);
|
||||
int c1_getCharactersMovementDelay(ScriptState *script);
|
||||
int c1_getBirthstoneGem(ScriptState *script);
|
||||
int c1_queryBrandonStatusBit(ScriptState *script);
|
||||
int c1_playFluteAnimation(ScriptState *script);
|
||||
int c1_playWinterScrollSequence(ScriptState *script);
|
||||
int c1_getIdolGem(ScriptState *script);
|
||||
int c1_setIdolGem(ScriptState *script);
|
||||
int c1_totalItemsInScene(ScriptState *script);
|
||||
int c1_restoreBrandonsMovementDelay(ScriptState *script);
|
||||
int c1_setMousePos(ScriptState *script);
|
||||
int c1_getMouseState(ScriptState *script);
|
||||
int c1_setEntranceMouseCursorTrack(ScriptState *script);
|
||||
int c1_itemAppearsOnGround(ScriptState *script);
|
||||
int c1_setNoDrawShapesFlag(ScriptState *script);
|
||||
int c1_fadeEntirePalette(ScriptState *script);
|
||||
int c1_itemOnGroundHere(ScriptState *script);
|
||||
int c1_queryCauldronState(ScriptState *script);
|
||||
int c1_setCauldronState(ScriptState *script);
|
||||
int c1_queryCrystalState(ScriptState *script);
|
||||
int c1_setCrystalState(ScriptState *script);
|
||||
int c1_setPaletteRange(ScriptState *script);
|
||||
int c1_shrinkBrandonDown(ScriptState *script);
|
||||
int c1_growBrandonUp(ScriptState *script);
|
||||
int c1_setBrandonScaleXAndY(ScriptState *script);
|
||||
int c1_resetScaleMode(ScriptState *script);
|
||||
int c1_getScaleDepthTableValue(ScriptState *script);
|
||||
int c1_setScaleDepthTableValue(ScriptState *script);
|
||||
int c1_message(ScriptState *script);
|
||||
int c1_checkClickOnNPC(ScriptState *script);
|
||||
int c1_getFoyerItem(ScriptState *script);
|
||||
int c1_setFoyerItem(ScriptState *script);
|
||||
int c1_setNoItemDropRegion(ScriptState *script);
|
||||
int c1_walkMalcolmOn(ScriptState *script);
|
||||
int c1_passiveProtection(ScriptState *script);
|
||||
int c1_setPlayingLoop(ScriptState *script);
|
||||
int c1_brandonToStoneSequence(ScriptState *script);
|
||||
int c1_brandonHealingSequence(ScriptState *script);
|
||||
int c1_protectCommandLine(ScriptState *script);
|
||||
int c1_pauseMusicSeconds(ScriptState *script);
|
||||
int c1_resetMaskRegion(ScriptState *script);
|
||||
int c1_setPaletteChangeFlag(ScriptState *script);
|
||||
int c1_fillRect(ScriptState *script);
|
||||
int c1_dummy(ScriptState *script);
|
||||
int c1_vocUnload(ScriptState *script);
|
||||
int c1_vocLoad(ScriptState *script);
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
#include "kyra/screen.h"
|
||||
#include "kyra/resource.h"
|
||||
|
||||
#define CURRENT_VERSION 5
|
||||
#define CURRENT_VERSION 6
|
||||
|
||||
namespace Kyra {
|
||||
void KyraEngine::loadGame(const char *fileName) {
|
||||
@ -145,8 +145,9 @@ void KyraEngine::loadGame(const char *fileName) {
|
||||
}
|
||||
_timerNextRun = 0;
|
||||
|
||||
memset(_flagsTable, 0, sizeof(_flagsTable));
|
||||
uint32 flagsSize = in->readUint32BE();
|
||||
assert(flagsSize == sizeof(_flagsTable));
|
||||
assert(flagsSize <= sizeof(_flagsTable));
|
||||
in->read(_flagsTable, flagsSize);
|
||||
|
||||
for (int i = 0; i < _roomTableSize; ++i) {
|
||||
|
@ -471,7 +471,7 @@ void KyraEngine::startSceneScript(int brandonAlive) {
|
||||
strcpy(fileNameBuffer, _roomFilenameTable[tableId]);
|
||||
strcat(fileNameBuffer, ".EMC");
|
||||
_scriptInterpreter->unloadScript(_scriptClickData);
|
||||
_scriptInterpreter->loadScript(fileNameBuffer, _scriptClickData, _opcodeTable, _opcodeTableSize, 0);
|
||||
_scriptInterpreter->loadScript(fileNameBuffer, _scriptClickData, 0);
|
||||
_scriptInterpreter->startScript(_scriptClick, 0);
|
||||
_scriptClick->variables[0] = _currentCharacter->sceneId;
|
||||
_scriptClick->variables[7] = brandonAlive;
|
||||
|
@ -71,7 +71,7 @@ ScriptHelper::ScriptHelper(KyraEngine *vm) : _vm(vm) {
|
||||
ScriptHelper::~ScriptHelper() {
|
||||
}
|
||||
|
||||
bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData, KyraEngine::OpcodeProc *opcodes, int opcodeSize, byte *specialPtr) {
|
||||
bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData, byte *specialPtr) {
|
||||
uint32 size = 0;
|
||||
uint8 *data = _vm->resource()->fileData(filename, &size);
|
||||
byte *curData = data;
|
||||
@ -149,8 +149,6 @@ bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData, Kyra
|
||||
return false;
|
||||
}
|
||||
scriptData->dataSize = chunkSize / 2;
|
||||
scriptData->opcodes = opcodes;
|
||||
scriptData->opcodeSize = opcodeSize;
|
||||
|
||||
delete [] data;
|
||||
return true;
|
||||
@ -389,12 +387,7 @@ void ScriptHelper::c1_subSP(ScriptState* script) {
|
||||
}
|
||||
|
||||
void ScriptHelper::c1_execOpcode(ScriptState* script) {
|
||||
assert((uint8)_parameter < script->dataPtr->opcodeSize);
|
||||
if (script->dataPtr->opcodes[(uint8)_parameter] == &KyraEngine::cmd_dummy)
|
||||
warning("calling unimplemented opcode(0x%.02X)", (uint8)_parameter);
|
||||
int val = (_vm->*script->dataPtr->opcodes[(uint8)_parameter])(script);
|
||||
assert(script);
|
||||
script->retValue = val;
|
||||
script->retValue = _vm->runOpcode(script, (uint8)_parameter);
|
||||
}
|
||||
|
||||
void ScriptHelper::c1_ifNotJmp(ScriptState* script) {
|
||||
|
@ -31,9 +31,9 @@ struct ScriptData {
|
||||
byte *data;
|
||||
byte *ordr;
|
||||
uint16 dataSize;
|
||||
KyraEngine::OpcodeProc *opcodes;
|
||||
int opcodeSize;
|
||||
uint16 mustBeFreed;
|
||||
|
||||
int opcodeTable; // indicates which opcode table to use (for Kyra3)
|
||||
};
|
||||
|
||||
struct ScriptState {
|
||||
@ -51,7 +51,7 @@ public:
|
||||
ScriptHelper(KyraEngine *vm);
|
||||
virtual ~ScriptHelper();
|
||||
|
||||
bool loadScript(const char *filename, ScriptData *data, KyraEngine::OpcodeProc *opcodes, int opcodeSize, byte *specialPtr = 0);
|
||||
bool loadScript(const char *filename, ScriptData *data, byte *specialPtr = 0);
|
||||
void unloadScript(ScriptData *data);
|
||||
|
||||
void initScript(ScriptState *scriptState, ScriptData *data);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -815,201 +815,201 @@ const int Screen::_screenDimTableCountK3 = ARRAYSIZE(_screenDimTableK3);
|
||||
void KyraEngine::setupOpcodeTable() {
|
||||
static OpcodeProc opcodeTable[] = {
|
||||
// 0x00
|
||||
Opcode(cmd_magicInMouseItem),
|
||||
Opcode(cmd_characterSays),
|
||||
Opcode(cmd_pauseTicks),
|
||||
Opcode(cmd_drawSceneAnimShape),
|
||||
Opcode(c1_magicInMouseItem),
|
||||
Opcode(c1_characterSays),
|
||||
Opcode(c1_pauseTicks),
|
||||
Opcode(c1_drawSceneAnimShape),
|
||||
// 0x04
|
||||
Opcode(cmd_queryGameFlag),
|
||||
Opcode(cmd_setGameFlag),
|
||||
Opcode(cmd_resetGameFlag),
|
||||
Opcode(cmd_runNPCScript),
|
||||
Opcode(c1_queryGameFlag),
|
||||
Opcode(c1_setGameFlag),
|
||||
Opcode(c1_resetGameFlag),
|
||||
Opcode(c1_runNPCScript),
|
||||
// 0x08
|
||||
Opcode(cmd_setSpecialExitList),
|
||||
Opcode(cmd_blockInWalkableRegion),
|
||||
Opcode(cmd_blockOutWalkableRegion),
|
||||
Opcode(cmd_walkPlayerToPoint),
|
||||
Opcode(c1_setSpecialExitList),
|
||||
Opcode(c1_blockInWalkableRegion),
|
||||
Opcode(c1_blockOutWalkableRegion),
|
||||
Opcode(c1_walkPlayerToPoint),
|
||||
// 0x0c
|
||||
Opcode(cmd_dropItemInScene),
|
||||
Opcode(cmd_drawAnimShapeIntoScene),
|
||||
Opcode(cmd_createMouseItem),
|
||||
Opcode(cmd_savePageToDisk),
|
||||
Opcode(c1_dropItemInScene),
|
||||
Opcode(c1_drawAnimShapeIntoScene),
|
||||
Opcode(c1_createMouseItem),
|
||||
Opcode(c1_savePageToDisk),
|
||||
// 0x10
|
||||
Opcode(cmd_sceneAnimOn),
|
||||
Opcode(cmd_sceneAnimOff),
|
||||
Opcode(cmd_getElapsedSeconds),
|
||||
Opcode(cmd_mouseIsPointer),
|
||||
Opcode(c1_sceneAnimOn),
|
||||
Opcode(c1_sceneAnimOff),
|
||||
Opcode(c1_getElapsedSeconds),
|
||||
Opcode(c1_mouseIsPointer),
|
||||
// 0x14
|
||||
Opcode(cmd_destroyMouseItem),
|
||||
Opcode(cmd_runSceneAnimUntilDone),
|
||||
Opcode(cmd_fadeSpecialPalette),
|
||||
Opcode(cmd_playAdlibSound),
|
||||
Opcode(c1_destroyMouseItem),
|
||||
Opcode(c1_runSceneAnimUntilDone),
|
||||
Opcode(c1_fadeSpecialPalette),
|
||||
Opcode(c1_playAdlibSound),
|
||||
// 0x18
|
||||
Opcode(cmd_playAdlibScore),
|
||||
Opcode(cmd_phaseInSameScene),
|
||||
Opcode(cmd_setScenePhasingFlag),
|
||||
Opcode(cmd_resetScenePhasingFlag),
|
||||
Opcode(c1_playAdlibScore),
|
||||
Opcode(c1_phaseInSameScene),
|
||||
Opcode(c1_setScenePhasingFlag),
|
||||
Opcode(c1_resetScenePhasingFlag),
|
||||
// 0x1c
|
||||
Opcode(cmd_queryScenePhasingFlag),
|
||||
Opcode(cmd_sceneToDirection),
|
||||
Opcode(cmd_setBirthstoneGem),
|
||||
Opcode(cmd_placeItemInGenericMapScene),
|
||||
Opcode(c1_queryScenePhasingFlag),
|
||||
Opcode(c1_sceneToDirection),
|
||||
Opcode(c1_setBirthstoneGem),
|
||||
Opcode(c1_placeItemInGenericMapScene),
|
||||
// 0x20
|
||||
Opcode(cmd_setBrandonStatusBit),
|
||||
Opcode(cmd_pauseSeconds),
|
||||
Opcode(cmd_getCharactersLocation),
|
||||
Opcode(cmd_runNPCSubscript),
|
||||
Opcode(c1_setBrandonStatusBit),
|
||||
Opcode(c1_pauseSeconds),
|
||||
Opcode(c1_getCharactersLocation),
|
||||
Opcode(c1_runNPCSubscript),
|
||||
// 0x24
|
||||
Opcode(cmd_magicOutMouseItem),
|
||||
Opcode(cmd_internalAnimOn),
|
||||
Opcode(cmd_forceBrandonToNormal),
|
||||
Opcode(cmd_poisonDeathNow),
|
||||
Opcode(c1_magicOutMouseItem),
|
||||
Opcode(c1_internalAnimOn),
|
||||
Opcode(c1_forceBrandonToNormal),
|
||||
Opcode(c1_poisonDeathNow),
|
||||
// 0x28
|
||||
Opcode(cmd_setScaleMode),
|
||||
Opcode(cmd_openWSAFile),
|
||||
Opcode(cmd_closeWSAFile),
|
||||
Opcode(cmd_runWSAFromBeginningToEnd),
|
||||
Opcode(c1_setScaleMode),
|
||||
Opcode(c1_openWSAFile),
|
||||
Opcode(c1_closeWSAFile),
|
||||
Opcode(c1_runWSAFromBeginningToEnd),
|
||||
// 0x2c
|
||||
Opcode(cmd_displayWSAFrame),
|
||||
Opcode(cmd_enterNewScene),
|
||||
Opcode(cmd_setSpecialEnterXAndY),
|
||||
Opcode(cmd_runWSAFrames),
|
||||
Opcode(c1_displayWSAFrame),
|
||||
Opcode(c1_enterNewScene),
|
||||
Opcode(c1_setSpecialEnterXAndY),
|
||||
Opcode(c1_runWSAFrames),
|
||||
// 0x30
|
||||
Opcode(cmd_popBrandonIntoScene),
|
||||
Opcode(cmd_restoreAllObjectBackgrounds),
|
||||
Opcode(cmd_setCustomPaletteRange),
|
||||
Opcode(cmd_loadPageFromDisk),
|
||||
Opcode(c1_popBrandonIntoScene),
|
||||
Opcode(c1_restoreAllObjectBackgrounds),
|
||||
Opcode(c1_setCustomPaletteRange),
|
||||
Opcode(c1_loadPageFromDisk),
|
||||
// 0x34
|
||||
Opcode(cmd_customPrintTalkString),
|
||||
Opcode(cmd_restoreCustomPrintBackground),
|
||||
Opcode(cmd_hideMouse),
|
||||
Opcode(cmd_showMouse),
|
||||
Opcode(c1_customPrintTalkString),
|
||||
Opcode(c1_restoreCustomPrintBackground),
|
||||
Opcode(c1_hideMouse),
|
||||
Opcode(c1_showMouse),
|
||||
// 0x38
|
||||
Opcode(cmd_getCharacterX),
|
||||
Opcode(cmd_getCharacterY),
|
||||
Opcode(cmd_changeCharactersFacing),
|
||||
Opcode(cmd_copyWSARegion),
|
||||
Opcode(c1_getCharacterX),
|
||||
Opcode(c1_getCharacterY),
|
||||
Opcode(c1_changeCharactersFacing),
|
||||
Opcode(c1_copyWSARegion),
|
||||
// 0x3c
|
||||
Opcode(cmd_printText),
|
||||
Opcode(cmd_random),
|
||||
Opcode(cmd_loadSoundFile),
|
||||
Opcode(cmd_displayWSAFrameOnHidPage),
|
||||
Opcode(c1_printText),
|
||||
Opcode(c1_random),
|
||||
Opcode(c1_loadSoundFile),
|
||||
Opcode(c1_displayWSAFrameOnHidPage),
|
||||
// 0x40
|
||||
Opcode(cmd_displayWSASequentialFrames),
|
||||
Opcode(cmd_drawCharacterStanding),
|
||||
Opcode(cmd_internalAnimOff),
|
||||
Opcode(cmd_changeCharactersXAndY),
|
||||
Opcode(c1_displayWSASequentialFrames),
|
||||
Opcode(c1_drawCharacterStanding),
|
||||
Opcode(c1_internalAnimOff),
|
||||
Opcode(c1_changeCharactersXAndY),
|
||||
// 0x44
|
||||
Opcode(cmd_clearSceneAnimatorBeacon),
|
||||
Opcode(cmd_querySceneAnimatorBeacon),
|
||||
Opcode(cmd_refreshSceneAnimator),
|
||||
Opcode(cmd_placeItemInOffScene),
|
||||
Opcode(c1_clearSceneAnimatorBeacon),
|
||||
Opcode(c1_querySceneAnimatorBeacon),
|
||||
Opcode(c1_refreshSceneAnimator),
|
||||
Opcode(c1_placeItemInOffScene),
|
||||
// 0x48
|
||||
Opcode(cmd_wipeDownMouseItem),
|
||||
Opcode(cmd_placeCharacterInOtherScene),
|
||||
Opcode(cmd_getKey),
|
||||
Opcode(cmd_specificItemInInventory),
|
||||
Opcode(c1_wipeDownMouseItem),
|
||||
Opcode(c1_placeCharacterInOtherScene),
|
||||
Opcode(c1_getKey),
|
||||
Opcode(c1_specificItemInInventory),
|
||||
// 0x4c
|
||||
Opcode(cmd_popMobileNPCIntoScene),
|
||||
Opcode(cmd_mobileCharacterInScene),
|
||||
Opcode(cmd_hideMobileCharacter),
|
||||
Opcode(cmd_unhideMobileCharacter),
|
||||
Opcode(c1_popMobileNPCIntoScene),
|
||||
Opcode(c1_mobileCharacterInScene),
|
||||
Opcode(c1_hideMobileCharacter),
|
||||
Opcode(c1_unhideMobileCharacter),
|
||||
// 0x50
|
||||
Opcode(cmd_setCharactersLocation),
|
||||
Opcode(cmd_walkCharacterToPoint),
|
||||
Opcode(cmd_specialEventDisplayBrynnsNote),
|
||||
Opcode(cmd_specialEventRemoveBrynnsNote),
|
||||
Opcode(c1_setCharactersLocation),
|
||||
Opcode(c1_walkCharacterToPoint),
|
||||
Opcode(c1_specialEventDisplayBrynnsNote),
|
||||
Opcode(c1_specialEventRemoveBrynnsNote),
|
||||
// 0x54
|
||||
Opcode(cmd_setLogicPage),
|
||||
Opcode(cmd_fatPrint),
|
||||
Opcode(cmd_preserveAllObjectBackgrounds),
|
||||
Opcode(cmd_updateSceneAnimations),
|
||||
Opcode(c1_setLogicPage),
|
||||
Opcode(c1_fatPrint),
|
||||
Opcode(c1_preserveAllObjectBackgrounds),
|
||||
Opcode(c1_updateSceneAnimations),
|
||||
// 0x58
|
||||
Opcode(cmd_sceneAnimationActive),
|
||||
Opcode(cmd_setCharactersMovementDelay),
|
||||
Opcode(cmd_getCharactersFacing),
|
||||
Opcode(cmd_bkgdScrollSceneAndMasksRight),
|
||||
Opcode(c1_sceneAnimationActive),
|
||||
Opcode(c1_setCharactersMovementDelay),
|
||||
Opcode(c1_getCharactersFacing),
|
||||
Opcode(c1_bkgdScrollSceneAndMasksRight),
|
||||
// 0x5c
|
||||
Opcode(cmd_dispelMagicAnimation),
|
||||
Opcode(cmd_findBrightestFireberry),
|
||||
Opcode(cmd_setFireberryGlowPalette),
|
||||
Opcode(cmd_setDeathHandlerFlag),
|
||||
Opcode(c1_dispelMagicAnimation),
|
||||
Opcode(c1_findBrightestFireberry),
|
||||
Opcode(c1_setFireberryGlowPalette),
|
||||
Opcode(c1_setDeathHandlerFlag),
|
||||
// 0x60
|
||||
Opcode(cmd_drinkPotionAnimation),
|
||||
Opcode(cmd_makeAmuletAppear),
|
||||
Opcode(cmd_drawItemShapeIntoScene),
|
||||
Opcode(cmd_setCharactersCurrentFrame),
|
||||
Opcode(c1_drinkPotionAnimation),
|
||||
Opcode(c1_makeAmuletAppear),
|
||||
Opcode(c1_drawItemShapeIntoScene),
|
||||
Opcode(c1_setCharactersCurrentFrame),
|
||||
// 0x64
|
||||
Opcode(cmd_waitForConfirmationMouseClick),
|
||||
Opcode(cmd_pageFlip),
|
||||
Opcode(cmd_setSceneFile),
|
||||
Opcode(cmd_getItemInMarbleVase),
|
||||
Opcode(c1_waitForConfirmationMouseClick),
|
||||
Opcode(c1_pageFlip),
|
||||
Opcode(c1_setSceneFile),
|
||||
Opcode(c1_getItemInMarbleVase),
|
||||
// 0x68
|
||||
Opcode(cmd_setItemInMarbleVase),
|
||||
Opcode(cmd_addItemToInventory),
|
||||
Opcode(cmd_intPrint),
|
||||
Opcode(cmd_shakeScreen),
|
||||
Opcode(c1_setItemInMarbleVase),
|
||||
Opcode(c1_addItemToInventory),
|
||||
Opcode(c1_intPrint),
|
||||
Opcode(c1_shakeScreen),
|
||||
// 0x6c
|
||||
Opcode(cmd_createAmuletJewel),
|
||||
Opcode(cmd_setSceneAnimCurrXY),
|
||||
Opcode(cmd_poisonBrandonAndRemaps),
|
||||
Opcode(cmd_fillFlaskWithWater),
|
||||
Opcode(c1_createAmuletJewel),
|
||||
Opcode(c1_setSceneAnimCurrXY),
|
||||
Opcode(c1_poisonBrandonAndRemaps),
|
||||
Opcode(c1_fillFlaskWithWater),
|
||||
// 0x70
|
||||
Opcode(cmd_getCharactersMovementDelay),
|
||||
Opcode(cmd_getBirthstoneGem),
|
||||
Opcode(cmd_queryBrandonStatusBit),
|
||||
Opcode(cmd_playFluteAnimation),
|
||||
Opcode(c1_getCharactersMovementDelay),
|
||||
Opcode(c1_getBirthstoneGem),
|
||||
Opcode(c1_queryBrandonStatusBit),
|
||||
Opcode(c1_playFluteAnimation),
|
||||
// 0x74
|
||||
Opcode(cmd_playWinterScrollSequence),
|
||||
Opcode(cmd_getIdolGem),
|
||||
Opcode(cmd_setIdolGem),
|
||||
Opcode(cmd_totalItemsInScene),
|
||||
Opcode(c1_playWinterScrollSequence),
|
||||
Opcode(c1_getIdolGem),
|
||||
Opcode(c1_setIdolGem),
|
||||
Opcode(c1_totalItemsInScene),
|
||||
// 0x78
|
||||
Opcode(cmd_restoreBrandonsMovementDelay),
|
||||
Opcode(cmd_setMousePos),
|
||||
Opcode(cmd_getMouseState),
|
||||
Opcode(cmd_setEntranceMouseCursorTrack),
|
||||
Opcode(c1_restoreBrandonsMovementDelay),
|
||||
Opcode(c1_setMousePos),
|
||||
Opcode(c1_getMouseState),
|
||||
Opcode(c1_setEntranceMouseCursorTrack),
|
||||
// 0x7c
|
||||
Opcode(cmd_itemAppearsOnGround),
|
||||
Opcode(cmd_setNoDrawShapesFlag),
|
||||
Opcode(cmd_fadeEntirePalette),
|
||||
Opcode(cmd_itemOnGroundHere),
|
||||
Opcode(c1_itemAppearsOnGround),
|
||||
Opcode(c1_setNoDrawShapesFlag),
|
||||
Opcode(c1_fadeEntirePalette),
|
||||
Opcode(c1_itemOnGroundHere),
|
||||
// 0x80
|
||||
Opcode(cmd_queryCauldronState),
|
||||
Opcode(cmd_setCauldronState),
|
||||
Opcode(cmd_queryCrystalState),
|
||||
Opcode(cmd_setCrystalState),
|
||||
Opcode(c1_queryCauldronState),
|
||||
Opcode(c1_setCauldronState),
|
||||
Opcode(c1_queryCrystalState),
|
||||
Opcode(c1_setCrystalState),
|
||||
// 0x84
|
||||
Opcode(cmd_setPaletteRange),
|
||||
Opcode(cmd_shrinkBrandonDown),
|
||||
Opcode(cmd_growBrandonUp),
|
||||
Opcode(cmd_setBrandonScaleXAndY),
|
||||
Opcode(c1_setPaletteRange),
|
||||
Opcode(c1_shrinkBrandonDown),
|
||||
Opcode(c1_growBrandonUp),
|
||||
Opcode(c1_setBrandonScaleXAndY),
|
||||
// 0x88
|
||||
Opcode(cmd_resetScaleMode),
|
||||
Opcode(cmd_getScaleDepthTableValue),
|
||||
Opcode(cmd_setScaleDepthTableValue),
|
||||
Opcode(cmd_message),
|
||||
Opcode(c1_resetScaleMode),
|
||||
Opcode(c1_getScaleDepthTableValue),
|
||||
Opcode(c1_setScaleDepthTableValue),
|
||||
Opcode(c1_message),
|
||||
// 0x8c
|
||||
Opcode(cmd_checkClickOnNPC),
|
||||
Opcode(cmd_getFoyerItem),
|
||||
Opcode(cmd_setFoyerItem),
|
||||
Opcode(cmd_setNoItemDropRegion),
|
||||
Opcode(c1_checkClickOnNPC),
|
||||
Opcode(c1_getFoyerItem),
|
||||
Opcode(c1_setFoyerItem),
|
||||
Opcode(c1_setNoItemDropRegion),
|
||||
// 0x90
|
||||
Opcode(cmd_walkMalcolmOn),
|
||||
Opcode(cmd_passiveProtection),
|
||||
Opcode(cmd_setPlayingLoop),
|
||||
Opcode(cmd_brandonToStoneSequence),
|
||||
Opcode(c1_walkMalcolmOn),
|
||||
Opcode(c1_passiveProtection),
|
||||
Opcode(c1_setPlayingLoop),
|
||||
Opcode(c1_brandonToStoneSequence),
|
||||
// 0x94
|
||||
Opcode(cmd_brandonHealingSequence),
|
||||
Opcode(cmd_protectCommandLine),
|
||||
Opcode(cmd_pauseMusicSeconds),
|
||||
Opcode(cmd_resetMaskRegion),
|
||||
Opcode(c1_brandonHealingSequence),
|
||||
Opcode(c1_protectCommandLine),
|
||||
Opcode(c1_pauseMusicSeconds),
|
||||
Opcode(c1_resetMaskRegion),
|
||||
// 0x98
|
||||
Opcode(cmd_setPaletteChangeFlag),
|
||||
Opcode(cmd_fillRect),
|
||||
Opcode(cmd_vocUnload),
|
||||
Opcode(cmd_vocLoad),
|
||||
Opcode(cmd_dummy)
|
||||
Opcode(c1_setPaletteChangeFlag),
|
||||
Opcode(c1_fillRect),
|
||||
Opcode(c1_vocUnload),
|
||||
Opcode(c1_vocLoad),
|
||||
Opcode(c1_dummy)
|
||||
};
|
||||
|
||||
_opcodeTable = opcodeTable;
|
||||
|
Loading…
x
Reference in New Issue
Block a user