aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/script_v1.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2008-05-11 22:32:37 +0000
committerJohannes Schickel2008-05-11 22:32:37 +0000
commit6e0c56996662dec6ccd9e724161e55562b728d8b (patch)
tree984e1e647cd413e5f1701520511dd339b0dbf44e /engines/kyra/script_v1.cpp
parent6e3c92e2392eb429723e23a4c782e0c1a7037b18 (diff)
downloadscummvm-rg350-6e0c56996662dec6ccd9e724161e55562b728d8b.tar.gz
scummvm-rg350-6e0c56996662dec6ccd9e724161e55562b728d8b.tar.bz2
scummvm-rg350-6e0c56996662dec6ccd9e724161e55562b728d8b.zip
Consisteny fixes:
- Renamed classes *_v1 -> *_LoK - Renamed files *_v1.* -> *_lok.* - Renamed WSAMovieV1 -> WSAMovie_v1 - Renamed WSAMovieV2 -> WSAMovie_v2 svn-id: r32042
Diffstat (limited to 'engines/kyra/script_v1.cpp')
-rw-r--r--engines/kyra/script_v1.cpp2031
1 files changed, 0 insertions, 2031 deletions
diff --git a/engines/kyra/script_v1.cpp b/engines/kyra/script_v1.cpp
deleted file mode 100644
index 6eb02c7511..0000000000
--- a/engines/kyra/script_v1.cpp
+++ /dev/null
@@ -1,2031 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-
-#include "common/endian.h"
-#include "common/system.h"
-
-#include "kyra/kyra_v1.h"
-#include "kyra/script.h"
-#include "kyra/screen.h"
-#include "kyra/sprites.h"
-#include "kyra/wsamovie.h"
-#include "kyra/animator_v1.h"
-#include "kyra/text.h"
-#include "kyra/timer.h"
-
-namespace Kyra {
-int KyraEngine_v1::o1_magicInMouseItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_magicInMouseItem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- magicInMouseItem(stackPos(0), stackPos(1), -1);
- return 0;
-}
-
-int KyraEngine_v1::o1_characterSays(EMCState *script) {
- _skipFlag = false;
- if (_flags.isTalkie) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_characterSays(%p) (%d, '%s', %d, %d)", (const void *)script, stackPos(0), stackPosString(1), stackPos(2), stackPos(3));
- characterSays(stackPos(0), stackPosString(1), stackPos(2), stackPos(3));
- } else {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_characterSays(%p) ('%s', %d, %d)", (const void *)script, stackPosString(0), stackPos(1), stackPos(2));
- const char *string = stackPosString(0);
-
- if ((_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98) && _flags.lang == Common::JA_JPN) {
- static const uint8 townsString1[] = {
- 0x83, 0x75, 0x83, 0x89, 0x83, 0x93, 0x83, 0x83, 0x93, 0x81,
- 0x41, 0x82, 0xDC, 0x82, 0xBD, 0x97, 0x88, 0x82, 0xBD, 0x82,
- 0xCC, 0x82, 0xA9, 0x81, 0x48, 0x00, 0x00, 0x00
- };
- static const uint8 townsString2[] = {
- 0x83, 0x75, 0x83, 0x89, 0x83, 0x93, 0x83, 0x5C, 0x83, 0x93,
- 0x81, 0x41, 0x82, 0xDC, 0x82, 0xBD, 0x97, 0x88, 0x82, 0xBD,
- 0x82, 0xCC, 0x82, 0xA9, 0x81, 0x48, 0x00, 0x00
- };
-
- if (strncmp((const char *)townsString1, string, sizeof(townsString1)) == 0)
- string = (const char *)townsString2;
- }
-
- characterSays(-1, string, stackPos(1), stackPos(2));
- }
-
- return 0;
-}
-
-int KyraEngine_v1::o1_pauseTicks(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_pauseTicks(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- if (stackPos(1)) {
- warning("STUB: special o1_pauseTicks");
- // delete this after correct implementing
- delayWithTicks(stackPos(0));
- } else {
- delayWithTicks(stackPos(0));
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_drawSceneAnimShape(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_drawSceneAnimShape(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- _screen->drawShape(stackPos(4), _sprites->_sceneShapes[stackPos(0)], stackPos(1), stackPos(2), 0, (stackPos(3) != 0) ? 1 : 0);
- return 0;
-}
-
-int KyraEngine_v1::o1_queryGameFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_queryGameFlag(%p) (0x%X)", (const void *)script, stackPos(0));
- return queryGameFlag(stackPos(0));
-}
-
-int KyraEngine_v1::o1_setGameFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setGameFlag(%p) (0x%X)", (const void *)script, stackPos(0));
- return setGameFlag(stackPos(0));
-}
-
-int KyraEngine_v1::o1_resetGameFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_resetGameFlag(%p) (0x%X)", (const void *)script, stackPos(0));
- return resetGameFlag(stackPos(0));
-}
-
-int KyraEngine_v1::o1_runNPCScript(EMCState *script) {
- warning("STUB: o1_runNPCScript");
- return 0;
-}
-
-int KyraEngine_v1::o1_setSpecialExitList(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setSpecialExitList(%p) (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7), stackPos(8), stackPos(9));
-
- for (int i = 0; i < 10; ++i)
- _exitList[i] = stackPos(i);
- _exitListPtr = _exitList;
-
- return 0;
-}
-
-int KyraEngine_v1::o1_blockInWalkableRegion(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_blockInWalkableRegion(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- _screen->blockInRegion(stackPos(0), stackPos(1), stackPos(2)-stackPos(0)+1, stackPos(3)-stackPos(1)+1);
- return 0;
-}
-
-int KyraEngine_v1::o1_blockOutWalkableRegion(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_blockOutWalkableRegion(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- _screen->blockOutRegion(stackPos(0), stackPos(1), stackPos(2)-stackPos(0)+1, stackPos(3)-stackPos(1)+1);
- return 0;
-}
-
-int KyraEngine_v1::o1_walkPlayerToPoint(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_walkPlayerToPoint(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
-
- int normalTimers = stackPos(2);
- if (!normalTimers) {
- _timer->disable(19);
- _timer->disable(14);
- _timer->disable(18);
- }
-
- int reinitScript = handleSceneChange(stackPos(0), stackPos(1), stackPos(2), stackPos(3));
-
- if (!normalTimers) {
- _timer->enable(19);
- _timer->enable(14);
- _timer->enable(18);
- }
-
- if (reinitScript)
- _emc->init(script, script->dataPtr);
-
- if (_sceneChangeState) {
- _sceneChangeState = 0;
- return 1;
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_dropItemInScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_dropItemInScene(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- int item = stackPos(0);
- int xpos = stackPos(1);
- int ypos = stackPos(2);
-
- byte freeItem = findFreeItemInScene(_currentCharacter->sceneId);
- if (freeItem != 0xFF) {
- int sceneId = _currentCharacter->sceneId;
- Room *room = &_roomTable[sceneId];
- room->itemsXPos[freeItem] = xpos;
- room->itemsYPos[freeItem] = ypos;
- room->itemsTable[freeItem] = item;
-
- _animator->animAddGameItem(freeItem, sceneId);
- _animator->updateAllObjectShapes();
- } else {
- if (item == 43)
- placeItemInGenericMapScene(item, 0);
- else
- placeItemInGenericMapScene(item, 1);
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_drawAnimShapeIntoScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_drawAnimShapeIntoScene(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- _screen->hideMouse();
- _animator->restoreAllObjectBackgrounds();
- int shape = stackPos(0);
- int xpos = stackPos(1);
- int ypos = stackPos(2);
- int flags = (stackPos(3) != 0) ? 1 : 0;
- _screen->drawShape(2, _sprites->_sceneShapes[shape], xpos, ypos, 0, flags);
- _screen->drawShape(0, _sprites->_sceneShapes[shape], xpos, ypos, 0, flags);
- _animator->flagAllObjectsForBkgdChange();
- _animator->preserveAnyChangedBackgrounds();
- _animator->flagAllObjectsForRefresh();
- _animator->updateAllObjectShapes();
- _screen->showMouse();
- return 0;
-}
-
-int KyraEngine_v1::o1_createMouseItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_createMouseItem(%p) (%d)", (const void *)script, stackPos(0));
- createMouseItem(stackPos(0));
- return 0;
-}
-
-int KyraEngine_v1::o1_savePageToDisk(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_savePageToDisk(%p) ('%s', %d)", (const void *)script, stackPosString(0), stackPos(1));
- _screen->savePageToDisk(stackPosString(0), stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_sceneAnimOn(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_sceneAnimOn(%p) (%d)", (const void *)script, stackPos(0));
- _sprites->_anims[stackPos(0)].play = true;
- return 0;
-}
-
-int KyraEngine_v1::o1_sceneAnimOff(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_sceneAnimOff(%p) (%d)", (const void *)script, stackPos(0));
- _sprites->_anims[stackPos(0)].play = false;
- return 0;
-}
-
-int KyraEngine_v1::o1_getElapsedSeconds(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getElapsedSeconds(%p) ()", (const void *)script);
- return _system->getMillis() / 1000;
-}
-
-int KyraEngine_v1::o1_mouseIsPointer(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_mouseIsPointer(%p) ()", (const void *)script);
- if (_itemInHand == -1)
- return 1;
- return 0;
-}
-
-int KyraEngine_v1::o1_destroyMouseItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_destroyMouseItem(%p) ()", (const void *)script);
- destroyMouseItem();
- return 0;
-}
-
-int KyraEngine_v1::o1_runSceneAnimUntilDone(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_runSceneAnimUntilDone(%p) (%d)", (const void *)script, stackPos(0));
- _screen->hideMouse();
- _animator->restoreAllObjectBackgrounds();
- _sprites->_anims[stackPos(0)].play = true;
- _animator->sprites()[stackPos(0)].active = 1;
- _animator->flagAllObjectsForBkgdChange();
- _animator->preserveAnyChangedBackgrounds();
- while (_sprites->_anims[stackPos(0)].play) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- delay(10);
- }
- _animator->restoreAllObjectBackgrounds();
- _screen->showMouse();
- return 0;
-}
-
-int KyraEngine_v1::o1_fadeSpecialPalette(EMCState *script) {
- if (_flags.platform == Common::kPlatformAmiga) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_fadeSpecialPalette(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- if (_currentCharacter->sceneId != 45) {
- if (stackPos(0) == 13) {
- memcpy(_screen->getPalette(0), _screen->getPalette(0) + 384*3, 32*3);
- _screen->setScreenPalette(_screen->getPalette(0));
- }
- } else {
- warning("KyraEngine_v1::o1_fadeSpecialPalette not implemented");
- }
- } else {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_fadeSpecialPalette(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- _screen->fadeSpecialPalette(stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_playAdlibSound(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_playAdlibSound(%p) (%d)", (const void *)script, stackPos(0));
- snd_playSoundEffect(stackPos(0));
- return 0;
-}
-
-int KyraEngine_v1::o1_playAdlibScore(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_playAdlibScore(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- snd_playWanderScoreViaMap(stackPos(0), stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_phaseInSameScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_phaseInSameScene(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- transcendScenes(stackPos(0), stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_setScenePhasingFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setScenePhasingFlag(%p) ()", (const void *)script);
- _scenePhasingFlag = 1;
- return 1;
-}
-
-int KyraEngine_v1::o1_resetScenePhasingFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_resetScenePhasingFlag(%p) ()", (const void *)script);
- _scenePhasingFlag = 0;
- return 0;
-}
-
-int KyraEngine_v1::o1_queryScenePhasingFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_queryScenePhasingFlag(%p) ()", (const void *)script);
- return _scenePhasingFlag;
-}
-
-int KyraEngine_v1::o1_sceneToDirection(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_sceneToDirection(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- assert(stackPos(0) < _roomTableSize);
- Room *curRoom = &_roomTable[stackPos(0)];
- uint16 returnValue = 0xFFFF;
- switch (stackPos(1)) {
- case 0:
- returnValue = curRoom->northExit;
- break;
-
- case 2:
- returnValue = curRoom->eastExit;
- break;
-
- case 4:
- returnValue = curRoom->southExit;
- break;
-
- case 6:
- returnValue = curRoom->westExit;
- break;
-
- default:
- break;
- }
- if (returnValue == 0xFFFF)
- return -1;
- return returnValue;
-}
-
-int KyraEngine_v1::o1_setBirthstoneGem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setBirthstoneGem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- int index = stackPos(0);
- if (index < 4 && index >= 0) {
- _birthstoneGemTable[index] = stackPos(1);
- return 1;
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_placeItemInGenericMapScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_placeItemInGenericMapScene(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- placeItemInGenericMapScene(stackPos(0), stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_setBrandonStatusBit(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setBrandonStatusBit(%p) (%d)", (const void *)script, stackPos(0));
- _brandonStatusBit |= stackPos(0);
- return 0;
-}
-
-int KyraEngine_v1::o1_pauseSeconds(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_pauseSeconds(%p) (%d)", (const void *)script, stackPos(0));
- if (stackPos(0) > 0 && !_skipFlag)
- delay(stackPos(0)*1000, true);
- _skipFlag = false;
- return 0;
-}
-
-int KyraEngine_v1::o1_getCharactersLocation(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getCharactersLocation(%p) (%d)", (const void *)script, stackPos(0));
- return _characterList[stackPos(0)].sceneId;
-}
-
-int KyraEngine_v1::o1_runNPCSubscript(EMCState *script) {
- warning("STUB: o1_runNPCSubscript");
- return 0;
-}
-
-int KyraEngine_v1::o1_magicOutMouseItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_magicOutMouseItem(%p) (%d)", (const void *)script, stackPos(0));
- magicOutMouseItem(stackPos(0), -1);
- return 0;
-}
-
-int KyraEngine_v1::o1_internalAnimOn(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_internalAnimOn(%p) (%d)", (const void *)script, stackPos(0));
- _animator->sprites()[stackPos(0)].active = 1;
- return 0;
-}
-
-int KyraEngine_v1::o1_forceBrandonToNormal(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_forceBrandonToNormal(%p) ()", (const void *)script);
- checkAmuletAnimFlags();
- return 0;
-}
-
-int KyraEngine_v1::o1_poisonDeathNow(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_poisonDeathNow(%p) ()", (const void *)script);
- seq_poisonDeathNow(1);
- return 0;
-}
-
-int KyraEngine_v1::o1_setScaleMode(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setScaleMode(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- int len = stackPos(0);
- int setValue1 = stackPos(1);
- int start2 = stackPos(2);
- int setValue2 = stackPos(3);
- for (int i = 0; i < len; ++i)
- _scaleTable[i] = setValue1;
- int temp = setValue2 - setValue1;
- int temp2 = start2 - len;
- for (int i = len, offset = 0; i < start2; ++i, ++offset)
- _scaleTable[i] = (offset * temp) / temp2 + setValue1;
- for (int i = start2; i < 145; ++i)
- _scaleTable[i] = setValue2;
- _scaleMode = 1;
- return _scaleMode;
-}
-
-int KyraEngine_v1::o1_openWSAFile(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_openWSAFile(%p) ('%s', %d, %d, %d)", (const void *)script, stackPosString(0), stackPos(1), stackPos(2), stackPos(3));
-
- const char *filename = stackPosString(0);
- int wsaIndex = stackPos(1);
-
- _movieObjects[wsaIndex]->open(filename, (stackPos(3) != 0) ? 1 : 0, 0);
- assert(_movieObjects[wsaIndex]->opened());
-
- return 0;
-}
-
-int KyraEngine_v1::o1_closeWSAFile(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_closeWSAFile(%p) (%d)", (const void *)script, stackPos(0));
-
- int wsaIndex = stackPos(0);
- if (_movieObjects[wsaIndex])
- _movieObjects[wsaIndex]->close();
-
- return 0;
-}
-
-int KyraEngine_v1::o1_runWSAFromBeginningToEnd(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_runWSAFromBeginningToEnd(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
-
- _screen->hideMouse();
-
- bool running = true;
-
- int xpos = stackPos(0);
- int ypos = stackPos(1);
- int waitTime = stackPos(2);
- int wsaIndex = stackPos(3);
- int worldUpdate = stackPos(4);
- int wsaFrame = 0;
-
- _movieObjects[wsaIndex]->setX(xpos);
- _movieObjects[wsaIndex]->setY(ypos);
- _movieObjects[wsaIndex]->setDrawPage(0);
- while (running) {
- _movieObjects[wsaIndex]->displayFrame(wsaFrame++);
- _animator->_updateScreen = true;
- if (wsaFrame >= _movieObjects[wsaIndex]->frames())
- running = false;
-
- uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- while (_system->getMillis() < continueTime) {
- if (worldUpdate) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- } else {
- _screen->updateScreen();
- }
- if (continueTime - _system->getMillis() >= 10)
- delay(10);
- }
- }
-
- _screen->showMouse();
-
- return 0;
-}
-
-int KyraEngine_v1::o1_displayWSAFrame(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_displayWSAFrame(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- int frame = stackPos(0);
- int xpos = stackPos(1);
- int ypos = stackPos(2);
- int waitTime = stackPos(3);
- int wsaIndex = stackPos(4);
- _screen->hideMouse();
- _movieObjects[wsaIndex]->setX(xpos);
- _movieObjects[wsaIndex]->setY(ypos);
- _movieObjects[wsaIndex]->setDrawPage(0);
- _movieObjects[wsaIndex]->displayFrame(frame);
- _animator->_updateScreen = true;
- uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- while (_system->getMillis() < continueTime) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- if (_skipFlag)
- break;
-
- if (continueTime - _system->getMillis() >= 10)
- delay(10);
- }
- _screen->showMouse();
- return 0;
-}
-
-int KyraEngine_v1::o1_enterNewScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_enterNewScene(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- enterNewScene(stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- return 0;
-}
-
-int KyraEngine_v1::o1_setSpecialEnterXAndY(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setSpecialEnterXAndY(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- _brandonPosX = stackPos(0);
- _brandonPosY = stackPos(1);
- if (_brandonPosX + 1 == 0 && _brandonPosY + 1 == 0)
- _currentCharacter->currentAnimFrame = 88;
- return 0;
-}
-
-int KyraEngine_v1::o1_runWSAFrames(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_runWSAFrames(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
- int xpos = stackPos(0);
- int ypos = stackPos(1);
- int delayTime = stackPos(2);
- int startFrame = stackPos(3);
- int endFrame = stackPos(4);
- int wsaIndex = stackPos(5);
- _screen->hideMouse();
- _movieObjects[wsaIndex]->setX(xpos);
- _movieObjects[wsaIndex]->setY(ypos);
- _movieObjects[wsaIndex]->setDrawPage(0);
- for (; startFrame <= endFrame; ++startFrame) {
- uint32 nextRun = _system->getMillis() + delayTime * _tickLength;
- _movieObjects[wsaIndex]->displayFrame(startFrame);
- _animator->_updateScreen = true;
- while (_system->getMillis() < nextRun) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- if (nextRun - _system->getMillis() >= 10)
- delay(10);
- }
- }
- _screen->showMouse();
- return 0;
-}
-
-int KyraEngine_v1::o1_popBrandonIntoScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_popBrandonIntoScene(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- int changeScaleMode = stackPos(3);
- int xpos = (int16)(stackPos(0) & 0xFFFC);
- int ypos = (int16)(stackPos(1) & 0xFFFE);
- int facing = stackPos(2);
- _currentCharacter->x1 = _currentCharacter->x2 = xpos;
- _currentCharacter->y1 = _currentCharacter->y2 = ypos;
- _currentCharacter->facing = facing;
- _currentCharacter->currentAnimFrame = 7;
- int xOffset = _defaultShapeTable[0].xOffset;
- int yOffset = _defaultShapeTable[0].yOffset;
- int width = _defaultShapeTable[0].w << 3;
- int height = _defaultShapeTable[0].h;
- Animator_v1::AnimObject *curAnim = _animator->actors();
-
- if (changeScaleMode) {
- curAnim->x1 = _currentCharacter->x1;
- curAnim->y1 = _currentCharacter->y1;
- _animator->_brandonScaleY = _scaleTable[_currentCharacter->y1];
- _animator->_brandonScaleX = _animator->_brandonScaleY;
-
- int animWidth = _animator->fetchAnimWidth(curAnim->sceneAnimPtr, _animator->_brandonScaleX) >> 1;
- int animHeight = _animator->fetchAnimHeight(curAnim->sceneAnimPtr, _animator->_brandonScaleY);
-
- animWidth = (xOffset * animWidth) / width;
- animHeight = (yOffset * animHeight) / height;
-
- curAnim->x2 = curAnim->x1 += animWidth;
- curAnim->y2 = curAnim->y1 += animHeight;
- } else {
- curAnim->x2 = curAnim->x1 = _currentCharacter->x1 + xOffset;
- curAnim->y2 = curAnim->y1 = _currentCharacter->y1 + yOffset;
- }
-
- int scaleModeBackup = _scaleMode;
- if (changeScaleMode)
- _scaleMode = 1;
-
- _animator->animRefreshNPC(0);
- _animator->preserveAllBackgrounds();
- _animator->prepDrawAllObjects();
- _animator->copyChangedObjectsForward(0);
-
- _scaleMode = scaleModeBackup;
-
- return 0;
-}
-
-int KyraEngine_v1::o1_restoreAllObjectBackgrounds(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_restoreAllObjectBackgrounds(%p) (%d)", (const void *)script, stackPos(0));
- int disable = stackPos(0);
- int activeBackup = 0;
- if (disable) {
- activeBackup = _animator->actors()->active;
- _animator->actors()->active = 0;
- }
- _animator->restoreAllObjectBackgrounds();
- if (disable)
- _animator->actors()->active = activeBackup;
- return 0;
-}
-
-int KyraEngine_v1::o1_setCustomPaletteRange(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setCustomPaletteRange(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- memcpy(_screen->getPalette(1) + stackPos(1)*3, _specialPalettes[stackPos(0)], stackPos(2)*3);
- return 0;
-}
-
-int KyraEngine_v1::o1_loadPageFromDisk(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_loadPageFromDisk(%p) ('%s', %d)", (const void *)script, stackPosString(0), stackPos(1));
- _screen->loadPageFromDisk(stackPosString(0), stackPos(1));
- _animator->_updateScreen = true;
- return 0;
-}
-
-int KyraEngine_v1::o1_customPrintTalkString(EMCState *script) {
- if (_flags.isTalkie) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_customPrintTalkString(%p) (%d, '%s', %d, %d, %d)", (const void *)script, stackPos(0), stackPosString(1), stackPos(2), stackPos(3), stackPos(4) & 0xFF);
-
- if (speechEnabled()) {
- snd_voiceWaitForFinish();
- snd_playVoiceFile(stackPos(0));
- }
-
- _skipFlag = false;
- if (textEnabled())
- _text->printTalkTextMessage(stackPosString(1), stackPos(2), stackPos(3), stackPos(4) & 0xFF, 0, 2);
- } else {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_customPrintTalkString(%p) ('%s', %d, %d, %d)", (const void *)script, stackPosString(0), stackPos(1), stackPos(2), stackPos(3) & 0xFF);
- _skipFlag = false;
- _text->printTalkTextMessage(stackPosString(0), stackPos(1), stackPos(2), stackPos(3) & 0xFF, 0, 2);
- }
- _screen->updateScreen();
- return 0;
-}
-
-int KyraEngine_v1::o1_restoreCustomPrintBackground(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_restoreCustomPrintBackground(%p) ()", (const void *)script);
- _text->restoreTalkTextMessageBkgd(2, 0);
- return 0;
-}
-
-int KyraEngine_v1::o1_hideMouse(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_hideMouse(%p) ()", (const void *)script);
- _screen->hideMouse();
- return 0;
-}
-
-int KyraEngine_v1::o1_showMouse(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_showMouse(%p) ()", (const void *)script);
- _screen->showMouse();
- return 0;
-}
-
-int KyraEngine_v1::o1_getCharacterX(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getCharacterX(%p) (%d)", (const void *)script, stackPos(0));
- return _characterList[stackPos(0)].x1;
-}
-
-int KyraEngine_v1::o1_getCharacterY(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getCharacterY(%p) (%d)", (const void *)script, stackPos(0));
- return _characterList[stackPos(0)].y1;
-}
-
-int KyraEngine_v1::o1_changeCharactersFacing(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_changeCharactersFacing(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- int character = stackPos(0);
- int facing = stackPos(1);
- int newAnimFrame = stackPos(2);
-
- _animator->restoreAllObjectBackgrounds();
- if (newAnimFrame != -1)
- _characterList[character].currentAnimFrame = newAnimFrame;
- _characterList[character].facing = facing;
- _animator->animRefreshNPC(character);
- _animator->preserveAllBackgrounds();
- _animator->prepDrawAllObjects();
- _animator->copyChangedObjectsForward(0);
-
- return 0;
-}
-
-int KyraEngine_v1::o1_copyWSARegion(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_copyWSARegion(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
- int xpos = stackPos(0);
- int ypos = stackPos(1);
- int width = stackPos(2);
- int height = stackPos(3);
- int srcPage = stackPos(4);
- int dstPage = stackPos(5);
- _screen->copyRegion(xpos, ypos, xpos, ypos, width, height, srcPage, dstPage);
- _animator->_updateScreen = true;
- return 0;
-}
-
-int KyraEngine_v1::o1_printText(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_printText(%p) ('%s', %d, %d, 0x%X, 0x%X)", (const void *)script, stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- if (_flags.lang == Common::JA_JPN && stackPos(3) == 7)
- _screen->printText(stackPosString(0), stackPos(1), stackPos(2), 0, 0x80);
- else
- _screen->printText(stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- _screen->updateScreen();
- return 0;
-}
-
-int KyraEngine_v1::o1_random(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_random(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- assert(stackPos(0) < stackPos(1));
- return _rnd.getRandomNumberRng(stackPos(0), stackPos(1));
-}
-
-int KyraEngine_v1::o1_loadSoundFile(EMCState *script) {
- warning("STUB: o1_loadSoundFile");
- return 0;
-}
-
-int KyraEngine_v1::o1_displayWSAFrameOnHidPage(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_displayWSAFrameOnHidPage(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- int frame = stackPos(0);
- int xpos = stackPos(1);
- int ypos = stackPos(2);
- int waitTime = stackPos(3);
- int wsaIndex = stackPos(4);
-
- _screen->hideMouse();
- uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- _movieObjects[wsaIndex]->setX(xpos);
- _movieObjects[wsaIndex]->setY(ypos);
- _movieObjects[wsaIndex]->setDrawPage(2);
- _movieObjects[wsaIndex]->displayFrame(frame);
- _animator->_updateScreen = true;
- while (_system->getMillis() < continueTime) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- if (_skipFlag)
- break;
-
- if (continueTime - _system->getMillis() >= 10)
- delay(10);
- }
- _screen->showMouse();
-
- return 0;
-}
-
-int KyraEngine_v1::o1_displayWSASequentialFrames(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_displayWSASequentialFrames(%p) (%d, %d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6));
- int startFrame = stackPos(0);
- int endFrame = stackPos(1);
- int xpos = stackPos(2);
- int ypos = stackPos(3);
- int waitTime = stackPos(4);
- int wsaIndex = stackPos(5);
- int maxTime = stackPos(6);
- if (maxTime - 1 <= 0)
- maxTime = 1;
-
- _movieObjects[wsaIndex]->setX(xpos);
- _movieObjects[wsaIndex]->setY(ypos);
- _movieObjects[wsaIndex]->setDrawPage(0);
-
- // Workaround for bug #1498221 "KYRA1: Glitches when meeting Zanthia"
- // the original didn't do a forced screen update after displaying a wsa frame
- // while we have to do it, which make brandon disappear for a short moment,
- // what shouldn't happen. So we're not updating the screen for this special
- // case too.
- if (startFrame == 18 && endFrame == 18 && _currentRoom == 45) {
- _movieObjects[wsaIndex]->displayFrame(18);
- delay(waitTime * _tickLength);
- return 0;
- }
-
- int curTime = 0;
- _screen->hideMouse();
- while (curTime < maxTime) {
- if (endFrame >= startFrame) {
- int frame = startFrame;
- while (endFrame >= frame) {
- uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- _movieObjects[wsaIndex]->displayFrame(frame);
- _animator->_updateScreen = true;
- while (_system->getMillis() < continueTime) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- if (_skipFlag)
- break;
-
- if (continueTime - _system->getMillis() >= 10)
- delay(10);
- }
- ++frame;
- }
- } else {
- int frame = startFrame;
- while (endFrame <= frame) {
- uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- _movieObjects[wsaIndex]->displayFrame(frame);
- _animator->_updateScreen = true;
- while (_system->getMillis() < continueTime) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- if (_skipFlag)
- break;
-
- if (continueTime - _system->getMillis() >= 10)
- delay(10);
- }
- --frame;
- }
- }
-
- if (_skipFlag)
- break;
- else
- ++curTime;
- }
- _screen->showMouse();
-
- return 0;
-}
-
-int KyraEngine_v1::o1_drawCharacterStanding(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_drawCharacterStanding(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- int character = stackPos(0);
- int animFrame = stackPos(1);
- int newFacing = stackPos(2);
- int updateShapes = stackPos(3);
- _characterList[character].currentAnimFrame = animFrame;
- if (newFacing != -1)
- _characterList[character].facing = newFacing;
- _animator->animRefreshNPC(character);
- if (updateShapes)
- _animator->updateAllObjectShapes();
- return 0;
-}
-
-int KyraEngine_v1::o1_internalAnimOff(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_internalAnimOff(%p) (%d)", (const void *)script, stackPos(0));
- _animator->sprites()[stackPos(0)].active = 0;
- return 0;
-}
-
-int KyraEngine_v1::o1_changeCharactersXAndY(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_changeCharactersXAndY(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- Character *ch = &_characterList[stackPos(0)];
- int16 x = stackPos(1);
- int16 y = stackPos(2);
- if (x != -1 && y != -1) {
- x &= 0xFFFC;
- y &= 0xFFFE;
- }
- _animator->restoreAllObjectBackgrounds();
- ch->x1 = ch->x2 = x;
- ch->y1 = ch->y2 = y;
- _animator->preserveAllBackgrounds();
- return 0;
-}
-
-int KyraEngine_v1::o1_clearSceneAnimatorBeacon(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_clearSceneAnimatorBeacon(%p) ()", (const void *)script);
- _sprites->_sceneAnimatorBeaconFlag = 0;
- return 0;
-}
-
-int KyraEngine_v1::o1_querySceneAnimatorBeacon(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_querySceneAnimatorBeacon(%p) ()", (const void *)script);
- return _sprites->_sceneAnimatorBeaconFlag;
-}
-
-int KyraEngine_v1::o1_refreshSceneAnimator(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_refreshSceneAnimator(%p) ()", (const void *)script);
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- return 0;
-}
-
-int KyraEngine_v1::o1_placeItemInOffScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_placeItemInOffScene(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- int item = stackPos(0);
- int xpos = stackPos(1);
- int ypos = stackPos(2);
- int sceneId = stackPos(3);
-
- byte freeItem = findFreeItemInScene(sceneId);
- if (freeItem != 0xFF) {
- assert(sceneId < _roomTableSize);
- Room *room = &_roomTable[sceneId];
-
- room->itemsTable[freeItem] = item;
- room->itemsXPos[freeItem] = xpos;
- room->itemsYPos[freeItem] = ypos;
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_wipeDownMouseItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_wipeDownMouseItem(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- _screen->hideMouse();
- wipeDownMouseItem(stackPos(1), stackPos(2));
- destroyMouseItem();
- _screen->showMouse();
- return 0;
-}
-
-int KyraEngine_v1::o1_placeCharacterInOtherScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_placeCharacterInOtherScene(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
- int id = stackPos(0);
- int sceneId = stackPos(1);
- int xpos = (int16)(stackPos(2) & 0xFFFC);
- int ypos = (int16)(stackPos(3) & 0xFFFE);
- int facing = stackPos(4);
- int animFrame = stackPos(5);
-
- _characterList[id].sceneId = sceneId;
- _characterList[id].x1 = _characterList[id].x2 = xpos;
- _characterList[id].y1 = _characterList[id].y2 = ypos;
- _characterList[id].facing = facing;
- _characterList[id].currentAnimFrame = animFrame;
- return 0;
-}
-
-int KyraEngine_v1::o1_getKey(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getKey(%p) ()", (const void *)script);
- waitForEvent();
- return 0;
-}
-
-int KyraEngine_v1::o1_specificItemInInventory(EMCState *script) {
- warning("STUB: o1_specificItemInInventory");
- return 0;
-}
-
-int KyraEngine_v1::o1_popMobileNPCIntoScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_popMobileNPCIntoScene(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), (int16)(stackPos(4) & 0xFFFC), (int8)(stackPos(5) & 0xFE));
- int character = stackPos(0);
- int sceneId = stackPos(1);
- int animFrame = stackPos(2);
- int facing = stackPos(3);
- int16 xpos = (int16)(stackPos(4) & 0xFFFC);
- int8 ypos = (int16)(stackPos(5) & 0xFFFE);
- Character *curChar = &_characterList[character];
-
- curChar->sceneId = sceneId;
- curChar->currentAnimFrame = animFrame;
- curChar->facing = facing;
- curChar->x1 = curChar->x2 = xpos;
- curChar->y1 = curChar->y2 = ypos;
-
- _animator->animAddNPC(character);
- _animator->updateAllObjectShapes();
- return 0;
-}
-
-int KyraEngine_v1::o1_mobileCharacterInScene(EMCState *script) {
- warning("STUB: o1_mobileCharacterInScene");
- return 0;
-}
-
-int KyraEngine_v1::o1_hideMobileCharacter(EMCState *script) {
- warning("STUB: o1_hideMobileCharacter");
- return 0;
-}
-
-int KyraEngine_v1::o1_unhideMobileCharacter(EMCState *script) {
- warning("STUB: o1_unhideMobileCharacter");
- return 0;
-}
-
-int KyraEngine_v1::o1_setCharactersLocation(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setCharactersLocation(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- Character *ch = &_characterList[stackPos(0)];
- Animator_v1::AnimObject *animObj = &_animator->actors()[stackPos(0)];
- int newScene = stackPos(1);
- if (_currentCharacter->sceneId == ch->sceneId) {
- if (_currentCharacter->sceneId != newScene)
- animObj->active = 0;
- } else if (_currentCharacter->sceneId == newScene) {
- if (_currentCharacter->sceneId != ch->sceneId)
- animObj->active = 1;
- }
-
- ch->sceneId = stackPos(1);
- return 0;
-}
-
-int KyraEngine_v1::o1_walkCharacterToPoint(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_walkCharacterToPoint(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- int character = stackPos(0);
- int toX = stackPos(1);
- int toY = stackPos(2);
- _pathfinderFlag2 = 1;
- uint32 nextFrame;
- int findWayReturn = findWay(_characterList[character].x1, _characterList[character].y1, toX, toY, _movFacingTable, 150);
- _pathfinderFlag2 = 0;
-
- if (_lastFindWayRet < findWayReturn)
- _lastFindWayRet = findWayReturn;
- if (findWayReturn == 0x7D00 || findWayReturn == 0)
- return 0;
-
- int *curPos = _movFacingTable;
- bool running = true;
- while (running) {
- bool forceContinue = false;
- switch (*curPos) {
- case 0:
- _characterList[character].facing = 2;
- break;
-
- case 1:
- _characterList[character].facing = 1;
- break;
-
- case 2:
- _characterList[character].facing = 0;
- break;
-
- case 3:
- _characterList[character].facing = 7;
- break;
-
- case 4:
- _characterList[character].facing = 6;
- break;
-
- case 5:
- _characterList[character].facing = 5;
- break;
-
- case 6:
- _characterList[character].facing = 4;
- break;
-
- case 7:
- _characterList[character].facing = 3;
- break;
-
- case 8:
- running = 0;
- break;
-
- default:
- ++curPos;
- forceContinue = true;
- break;
- }
-
- if (forceContinue || !running)
- continue;
-
- setCharacterPosition(character, 0);
- ++curPos;
-
- nextFrame = _timer->getDelay(5 + character) * _tickLength + _system->getMillis();
- while (_system->getMillis() < nextFrame) {
- _sprites->updateSceneAnims();
- updateMousePointer();
- _timer->update();
- _animator->updateAllObjectShapes();
- updateTextFade();
- if ((nextFrame - _system->getMillis()) >= 10)
- delay(10);
- }
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_specialEventDisplayBrynnsNote(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_specialEventDisplayBrynnsNote(%p) ()", (const void *)script);
- _screen->hideMouse();
- _screen->savePageToDisk("HIDPAGE.TMP", 2);
- _screen->savePageToDisk("SEENPAGE.TMP", 0);
- if (_flags.isTalkie) {
- if (_flags.lang == Common::EN_ANY || _flags.lang == Common::IT_ITA)
- _screen->loadBitmap("NOTEENG.CPS", 3, 3, 0);
- else if (_flags.lang == Common::FR_FRA)
- _screen->loadBitmap("NOTEFRE.CPS", 3, 3, 0);
- else if (_flags.lang == Common::DE_DEU)
- _screen->loadBitmap("NOTEGER.CPS", 3, 3, 0);
- } else {
- _screen->loadBitmap("NOTE.CPS", 3, 3, 0);
- }
- _screen->copyRegion(63, 8, 63, 8, 194, 128, 2, 0);
- _screen->updateScreen();
- _screen->showMouse();
- _screen->setFont(Screen::FID_6_FNT);
- return 0;
-}
-
-int KyraEngine_v1::o1_specialEventRemoveBrynnsNote(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_specialEventRemoveBrynnsNote(%p) ()", (const void *)script);
- _screen->hideMouse();
- _screen->loadPageFromDisk("SEENPAGE.TMP", 0);
- _screen->loadPageFromDisk("HIDPAGE.TMP", 2);
- _screen->updateScreen();
- _screen->showMouse();
- _screen->setFont(Screen::FID_8_FNT);
- return 0;
-}
-
-int KyraEngine_v1::o1_setLogicPage(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setLogicPage(%p) (%d)", (const void *)script, stackPos(0));
- _screen->_curPage = stackPos(0);
- return stackPos(0);
-}
-
-int KyraEngine_v1::o1_fatPrint(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_fatPrint(%p) ('%s', %d, %d, %d, %d, %d)", (const void *)script, stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
-
- // Workaround for bug #1582672 ("KYRA1: Text crippled and drawn wrong")
- // I'm not sure how the original handles this, since it seems to call
- // printText also, maybe it fails somewhere inside...
- // TODO: fix the reason for this workaround
- if (_currentRoom == 117)
- return 0;
- _text->printText(stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
- return 0;
-}
-
-int KyraEngine_v1::o1_preserveAllObjectBackgrounds(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_preserveAllObjectBackgrounds(%p) ()", (const void *)script);
- _animator->preserveAllBackgrounds();
- return 0;
-}
-
-int KyraEngine_v1::o1_updateSceneAnimations(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_updateSceneAnimations(%p) (%d)", (const void *)script, stackPos(0));
- int times = stackPos(0);
- while (times--) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_sceneAnimationActive(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_sceneAnimationActive(%p) (%d)", (const void *)script, stackPos(0));
- return _sprites->_anims[stackPos(0)].play;
-}
-
-int KyraEngine_v1::o1_setCharactersMovementDelay(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setCharactersMovementDelay(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- _timer->setDelay(stackPos(0)+5, stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_getCharactersFacing(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getCharactersFacing(%p) (%d)", (const void *)script, stackPos(0));
- return _characterList[stackPos(0)].facing;
-}
-
-int KyraEngine_v1::o1_bkgdScrollSceneAndMasksRight(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_bkgdScrollSceneAndMasksRight(%p) (%d)", (const void *)script, stackPos(0));
- _screen->copyBackgroundBlock(stackPos(0), 2, 0);
- _screen->copyBackgroundBlock2(stackPos(0));
- // update the whole screen
- _screen->copyRegion(7, 7, 7, 7, 305, 129, 3, 0);
- // Don't do a screen update here, see bug #1910180 "KYRA1: Screen 'flash'"
- // it would cause to draw the screen with a wrong palette and thus look
- // strange for the user. Since this opcode should be just called on scene
- // initialization anyway, there should be no problem with not updating the
- // screen right now.
- return 0;
-}
-
-int KyraEngine_v1::o1_dispelMagicAnimation(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_dispelMagicAnimation(%p) ()", (const void *)script);
- seq_dispelMagicAnimation();
- return 0;
-}
-
-int KyraEngine_v1::o1_findBrightestFireberry(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_findBrightestFireberry(%p) ()", (const void *)script);
- if (_currentCharacter->sceneId >= 187 && _currentCharacter->sceneId <= 198)
- return 29;
-
- if (_currentCharacter->sceneId == 133 || _currentCharacter->sceneId == 137 ||
- _currentCharacter->sceneId == 165 || _currentCharacter->sceneId == 173)
- return 29;
-
- if (_itemInHand == 28)
- return 28;
-
- int brightestFireberry = 107;
- if (_itemInHand >= 29 && _itemInHand <= 33)
- brightestFireberry = _itemInHand;
- for (int i = 0; i < 10; ++i) {
- uint8 item = _currentCharacter->inventoryItems[i];
- if (item == 0xFF)
- continue;
- if (item == 28)
- return 28;
- if (item >= 29 && item <= 33) {
- if (item < brightestFireberry)
- brightestFireberry = item;
- }
- }
- assert(_currentCharacter->sceneId < _roomTableSize);
- Room *curRoom = &_roomTable[_currentCharacter->sceneId];
- for (int i = 0; i < 12; ++i) {
- uint8 item = curRoom->itemsTable[i];
- if (item == 0xFF)
- continue;
- if (item == 28)
- return 28;
- if (item >= 29 && item <= 33) {
- if (item < brightestFireberry)
- brightestFireberry = item;
- }
- }
- if (brightestFireberry == 107)
- return -1;
- return brightestFireberry;
-}
-
-int KyraEngine_v1::o1_setFireberryGlowPalette(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setFireberryGlowPalette(%p) (%d)", (const void *)script, stackPos(0));
- int palIndex = 0;
- switch (stackPos(0)) {
- case 0x1E:
- palIndex = 9;
- break;
-
- case 0x1F:
- palIndex = 10;
- break;
-
- case 0x20:
- palIndex = 11;
- break;
-
- case 0x21:
- case -1:
- palIndex = 12;
- break;
-
- default:
- palIndex = 8;
- break;
- }
- if (_brandonStatusBit & 2) {
- if (_currentCharacter->sceneId != 133 && _currentCharacter->sceneId != 137 &&
- _currentCharacter->sceneId != 165 && _currentCharacter->sceneId != 173 &&
- (_currentCharacter->sceneId < 187 || _currentCharacter->sceneId > 198)) {
- palIndex = 14;
- }
- }
- const uint8 *palette = _specialPalettes[palIndex];
- memcpy(_screen->getPalette(1) + 684, palette, 44);
- return 0;
-}
-
-int KyraEngine_v1::o1_setDeathHandlerFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setDeathHandlerFlag(%p) (%d)", (const void *)script, stackPos(0));
- _deathHandler = stackPos(0);
- return 0;
-}
-
-int KyraEngine_v1::o1_drinkPotionAnimation(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_drinkPotionAnimation(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- seq_playDrinkPotionAnim(stackPos(0), stackPos(1), stackPos(2));
- return 0;
-}
-
-int KyraEngine_v1::o1_makeAmuletAppear(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_makeAmuletAppear(%p) ()", (const void *)script);
- WSAMovieV1 amulet(this);
- amulet.open("AMULET.WSA", 1, 0);
- amulet.setX(224);
- amulet.setY(152);
- amulet.setDrawPage(0);
- if (amulet.opened()) {
- assert(_amuleteAnim);
- _screen->hideMouse();
- snd_playSoundEffect(0x70);
- uint32 nextTime = 0;
- for (int i = 0; _amuleteAnim[i] != 0xFF; ++i) {
- nextTime = _system->getMillis() + 5 * _tickLength;
-
- uint8 code = _amuleteAnim[i];
- if (code == 3 || code == 7)
- snd_playSoundEffect(0x71);
-
- if (code == 5)
- snd_playSoundEffect(0x72);
-
- if (code == 14)
- snd_playSoundEffect(0x73);
-
- amulet.displayFrame(code);
- _animator->_updateScreen = true;
-
- while (_system->getMillis() < nextTime) {
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- if (nextTime - _system->getMillis() >= 10)
- delay(10);
- }
- }
- _screen->showMouse();
- }
- setGameFlag(0x2D);
- return 0;
-}
-
-int KyraEngine_v1::o1_drawItemShapeIntoScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_drawItemShapeIntoScene(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- int item = stackPos(0);
- int x = stackPos(1);
- int y = stackPos(2);
- int flags = stackPos(3);
- int onlyHidPage = stackPos(4);
-
- if (flags)
- flags = 1;
-
- if (onlyHidPage) {
- _screen->drawShape(2, _shapes[216+item], x, y, 0, flags);
- } else {
- _screen->hideMouse();
- _animator->restoreAllObjectBackgrounds();
- _screen->drawShape(2, _shapes[216+item], x, y, 0, flags);
- _screen->drawShape(0, _shapes[216+item], x, y, 0, flags);
- _animator->flagAllObjectsForBkgdChange();
- _animator->preserveAnyChangedBackgrounds();
- _animator->flagAllObjectsForRefresh();
- _animator->updateAllObjectShapes();
- _screen->showMouse();
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_setCharactersCurrentFrame(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setCharactersCurrentFrame(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- _characterList[stackPos(0)].currentAnimFrame = stackPos(1);
- return 0;
-}
-
-int KyraEngine_v1::o1_waitForConfirmationMouseClick(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_waitForConfirmationMouseClick(%p) ()", (const void *)script);
- // if (mouseEnabled) {
- while (!_mousePressFlag) {
- updateMousePointer();
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- delay(10);
- }
-
- while (_mousePressFlag) {
- updateMousePointer();
- _sprites->updateSceneAnims();
- _animator->updateAllObjectShapes();
- delay(10);
- }
- // }
- _gui->processButtonList(_buttonList, 0, 0);
- _skipFlag = false;
- Common::Point mouse = getMousePos();
- script->regs[1] = mouse.x;
- script->regs[2] = mouse.y;
- return 0;
-}
-
-int KyraEngine_v1::o1_pageFlip(EMCState *script) {
- warning("STUB: o1_pageFlip");
- return 0;
-}
-
-int KyraEngine_v1::o1_setSceneFile(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setSceneFile(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- setSceneFile(stackPos(0), stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_getItemInMarbleVase(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getItemInMarbleVase(%p) ()", (const void *)script);
- return _marbleVaseItem;
-}
-
-int KyraEngine_v1::o1_setItemInMarbleVase(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setItemInMarbleVase(%p) (%d)", (const void *)script, stackPos(0));
- _marbleVaseItem = stackPos(0);
- return 0;
-}
-
-int KyraEngine_v1::o1_addItemToInventory(EMCState *script) {
- warning("STUB: o1_addItemToInventory");
- return 0;
-}
-
-int KyraEngine_v1::o1_intPrint(EMCState *script) {
- warning("STUB: o1_intPrint");
- return 0;
-}
-
-int KyraEngine_v1::o1_shakeScreen(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_shakeScreen(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- int waitTicks = stackPos(1);
- int times = stackPos(0);
-
- for (int i = 0; i < times; ++i) {
- _screen->shakeScreen(1);
- delay(waitTicks * _tickLength);
- }
-
- return 0;
-}
-
-int KyraEngine_v1::o1_createAmuletJewel(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_createAmuletJewel(%p) (%d)", (const void *)script, stackPos(0));
- seq_createAmuletJewel(stackPos(0), 0, 0, 0);
- return 0;
-}
-
-int KyraEngine_v1::o1_setSceneAnimCurrXY(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setSceneAnimCurrXY(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- _sprites->_anims[stackPos(0)].x = stackPos(1);
- _sprites->_anims[stackPos(0)].y = stackPos(2);
- return 0;
-}
-
-int KyraEngine_v1::o1_poisonBrandonAndRemaps(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_poisonBrandonAndRemaps(%p) ()", (const void *)script);
- setBrandonPoisonFlags(1);
- return 0;
-}
-
-int KyraEngine_v1::o1_fillFlaskWithWater(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_fillFlaskWithWater(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- seq_fillFlaskWithWater(stackPos(0), stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_getCharactersMovementDelay(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getCharactersMovementDelay(%p) (%d)", (const void *)script, stackPos(0));
- return _timer->getDelay(stackPos(0)+5);
-}
-
-int KyraEngine_v1::o1_getBirthstoneGem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getBirthstoneGem(%p) (%d)", (const void *)script, stackPos(0));
- if (stackPos(0) < 4)
- return _birthstoneGemTable[stackPos(0)];
- return 0;
-}
-
-int KyraEngine_v1::o1_queryBrandonStatusBit(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_queryBrandonStatusBit(%p) (%d)", (const void *)script, stackPos(0));
- if (_brandonStatusBit & stackPos(0))
- return 1;
- return 0;
-}
-
-int KyraEngine_v1::o1_playFluteAnimation(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_playFluteAnimation(%p) ()", (const void *)script);
- seq_playFluteAnimation();
- return 0;
-}
-
-int KyraEngine_v1::o1_playWinterScrollSequence(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_playWinterScrollSequence(%p) (%d)", (const void *)script, stackPos(0));
- if (!stackPos(0))
- seq_winterScroll2();
- else
- seq_winterScroll1();
- return 0;
-}
-
-int KyraEngine_v1::o1_getIdolGem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getIdolGem(%p) (%d)", (const void *)script, stackPos(0));
- return _idolGemsTable[stackPos(0)];
-}
-
-int KyraEngine_v1::o1_setIdolGem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setIdolGem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- _idolGemsTable[stackPos(0)] = stackPos(1);
- return 0;
-}
-
-int KyraEngine_v1::o1_totalItemsInScene(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_totalItemsInScene(%p) (%d)", (const void *)script, stackPos(0));
- return countItemsInScene(stackPos(0));
-}
-
-int KyraEngine_v1::o1_restoreBrandonsMovementDelay(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_restoreBrandonsMovementDelay(%p) ()", (const void *)script);
- setWalkspeed(_configWalkspeed);
- return 0;
-}
-
-int KyraEngine_v1::o1_setMousePos(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setMousePos(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- _system->warpMouse(stackPos(0), stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_getMouseState(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getMouseState(%p) ()", (const void *)script);
- return _mouseState;
-}
-
-int KyraEngine_v1::o1_setEntranceMouseCursorTrack(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setEntranceMouseCursorTrack(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
- _entranceMouseCursorTracks[0] = stackPos(0);
- _entranceMouseCursorTracks[1] = stackPos(1);
- _entranceMouseCursorTracks[2] = stackPos(0) + stackPos(2) - 1;
- _entranceMouseCursorTracks[3] = stackPos(1) + stackPos(3) - 1;
- _entranceMouseCursorTracks[4] = stackPos(4);
- return 0;
-}
-
-int KyraEngine_v1::o1_itemAppearsOnGround(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_itemAppearsOnGround(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
- processItemDrop(_currentCharacter->sceneId, stackPos(0), stackPos(1), stackPos(2), 2, 0);
- return 0;
-}
-
-int KyraEngine_v1::o1_setNoDrawShapesFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setNoDrawShapesFlag(%p) (%d)", (const void *)script, stackPos(0));
- _animator->_noDrawShapesFlag = stackPos(0);
- return 0;
-}
-
-int KyraEngine_v1::o1_fadeEntirePalette(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_fadeEntirePalette(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- int cmd = stackPos(0);
- uint8 *fadePal = 0;
-
- if (_flags.platform == Common::kPlatformAmiga) {
- if (cmd == 0) {
- fadePal = _screen->getPalette(2);
- memset(fadePal, 0, 32*3);
- memcpy(_screen->getPalette(4), _screen->getPalette(0), 32*3);
- } else if (cmd == 1) {
- fadePal = _screen->getPalette(0);
- memcpy(_screen->getPalette(0), _screen->getPalette(4), 32*3);
- } else if (cmd == 2) {
- fadePal = _screen->getPalette(0);
- memset(_screen->getPalette(2), 0, 32*3);
- }
- } else {
- if (cmd == 0) {
- fadePal = _screen->getPalette(2);
- uint8 *screenPal = _screen->getPalette(0);
- uint8 *backUpPal = _screen->getPalette(3);
-
- memcpy(backUpPal, screenPal, sizeof(uint8)*768);
- memset(fadePal, 0, sizeof(uint8)*768);
- } else if (cmd == 1) {
- //fadePal = _screen->getPalette(3);
- warning("unimplemented o1_fadeEntirePalette function");
- return 0;
- } else if (cmd == 2) {
- memset(_screen->getPalette(2), 0, 768);
- memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
- fadePal = _screen->getPalette(0);
- }
- }
-
- _screen->fadePalette(fadePal, stackPos(1));
- return 0;
-}
-
-int KyraEngine_v1::o1_itemOnGroundHere(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_itemOnGroundHere(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- assert(stackPos(0) < _roomTableSize);
- Room *curRoom = &_roomTable[stackPos(0)];
- for (int i = 0; i < 12; ++i) {
- if (curRoom->itemsTable[i] == stackPos(1))
- return 1;
- }
- return 0;
-}
-
-int KyraEngine_v1::o1_queryCauldronState(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_queryCauldronState(%p) ()", (const void *)script);
- return _cauldronState;
-}
-
-int KyraEngine_v1::o1_setCauldronState(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setCauldronState(%p) (%d)", (const void *)script, stackPos(0));
- _cauldronState = stackPos(0);
- return _cauldronState;
-}
-
-int KyraEngine_v1::o1_queryCrystalState(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_queryCrystalState(%p) (%d)", (const void *)script, stackPos(0));
- if (!stackPos(0))
- return _crystalState[0];
- else if (stackPos(0) == 1)
- return _crystalState[1];
- return -1;
-}
-
-int KyraEngine_v1::o1_setCrystalState(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setCrystalState(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- if (!stackPos(0))
- _crystalState[0] = stackPos(1);
- else if (stackPos(0) == 1)
- _crystalState[1] = stackPos(1);
- return stackPos(1);
-}
-
-int KyraEngine_v1::o1_setPaletteRange(EMCState *script) {
- warning("STUB: o1_setPaletteRange");
- return 0;
-}
-
-int KyraEngine_v1::o1_shrinkBrandonDown(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_shrinkBrandonDown(%p) (%d)", (const void *)script, stackPos(0));
- int delayTime = stackPos(0);
- checkAmuletAnimFlags();
- int scaleValue = _scaleTable[_currentCharacter->y1];
- int scale = 0;
-
- if (_scaleMode)
- scale = scaleValue;
- else
- scale = 256;
-
- int scaleModeBackUp = _scaleMode;
- _scaleMode = 1;
- int scaleEnd = scale >> 1;
- for (; scaleEnd <= scale; --scale) {
- _scaleTable[_currentCharacter->y1] = scale;
- _animator->animRefreshNPC(0);
- delayWithTicks(1);
- }
- delayWithTicks(delayTime); // XXX
- _scaleTable[_currentCharacter->y1] = scaleValue;
- _scaleMode = scaleModeBackUp;
- return 0;
-}
-
-int KyraEngine_v1::o1_growBrandonUp(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_growBrandonUp(%p) ()", (const void *)script);
- int scaleValue = _scaleTable[_currentCharacter->y1];
- int scale = 0;
- if (_scaleMode)
- scale = scaleValue;
- else
- scale = 256;
-
- int scaleModeBackUp = _scaleMode;
- _scaleMode = 1;
- for (int curScale = scale >> 1; curScale <= scale; ++curScale) {
- _scaleTable[_currentCharacter->y1] = curScale;
- _animator->animRefreshNPC(0);
- delayWithTicks(1);
- }
- _scaleTable[_currentCharacter->y1] = scaleValue;
- _scaleMode = scaleModeBackUp;
- return 0;
-}
-
-int KyraEngine_v1::o1_setBrandonScaleXAndY(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setBrandonScaleXAndY(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- _animator->_brandonScaleX = stackPos(0);
- _animator->_brandonScaleY = stackPos(1);
- return 0;
-}
-
-int KyraEngine_v1::o1_resetScaleMode(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_resetScaleMode(%p) ()", (const void *)script);
- _scaleMode = 0;
- return 0;
-}
-
-int KyraEngine_v1::o1_getScaleDepthTableValue(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getScaleDepthTableValue(%p) (%d)", (const void *)script, stackPos(0));
- assert(stackPos(0) < ARRAYSIZE(_scaleTable));
- return _scaleTable[stackPos(0)];
-}
-
-int KyraEngine_v1::o1_setScaleDepthTableValue(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setScaleDepthTableValue(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- assert(stackPos(0) < ARRAYSIZE(_scaleTable));
- _scaleTable[stackPos(0)] = stackPos(1);
- return stackPos(1);
-}
-
-int KyraEngine_v1::o1_message(EMCState *script) {
- if (_flags.isTalkie) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_message(%p) (%d, '%s', %d)", (const void *)script, stackPos(0), stackPosString(1), stackPos(2));
- drawSentenceCommand(stackPosString(1), stackPos(2));
- } else {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_message(%p) ('%s', %d)", (const void *)script, stackPosString(0), stackPos(1));
- drawSentenceCommand(stackPosString(0), stackPos(1));
- }
-
- return 0;
-}
-
-int KyraEngine_v1::o1_checkClickOnNPC(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_checkClickOnNPC(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- return checkForNPCScriptRun(stackPos(0), stackPos(1));
-}
-
-int KyraEngine_v1::o1_getFoyerItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_getFoyerItem(%p) (%d)", (const void *)script, stackPos(0));
- assert(stackPos(0) < ARRAYSIZE(_foyerItemTable));
- return _foyerItemTable[stackPos(0)];
-}
-
-int KyraEngine_v1::o1_setFoyerItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setFoyerItem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
- assert(stackPos(0) < ARRAYSIZE(_foyerItemTable));
- _foyerItemTable[stackPos(0)] = stackPos(1);
- return stackPos(1);
-}
-
-int KyraEngine_v1::o1_setNoItemDropRegion(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setNoItemDropRegion(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- addToNoDropRects(stackPos(0), stackPos(1), stackPos(2), stackPos(3));
- return 0;
-}
-
-int KyraEngine_v1::o1_walkMalcolmOn(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_walkMalcolmOn(%p) ()", (const void *)script);
- if (!_malcolmFlag)
- _malcolmFlag = 1;
- return 0;
-}
-
-int KyraEngine_v1::o1_passiveProtection(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_passiveProtection(%p) ()", (const void *)script);
- return 1;
-}
-
-int KyraEngine_v1::o1_setPlayingLoop(EMCState *script) {
- warning("STUB: o1_setPlayingLoop");
- return 0;
-}
-
-int KyraEngine_v1::o1_brandonToStoneSequence(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_brandonToStoneSequence(%p) ()", (const void *)script);
- seq_brandonToStone();
- return 0;
-}
-
-int KyraEngine_v1::o1_brandonHealingSequence(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_brandonHealingSequence(%p) ()", (const void *)script);
- seq_brandonHealing();
- return 0;
-}
-
-int KyraEngine_v1::o1_protectCommandLine(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_protectCommandLine(%p) (%d)", (const void *)script, stackPos(0));
- return stackPos(0);
-}
-
-int KyraEngine_v1::o1_pauseMusicSeconds(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_pauseMusicSeconds(%p) ()", (const void *)script);
- // if music disabled
- // return
- o1_pauseSeconds(script);
- return 0;
-}
-
-int KyraEngine_v1::o1_resetMaskRegion(EMCState *script) {
- warning("STUB: o1_resetMaskRegion");
- return 0;
-}
-
-int KyraEngine_v1::o1_setPaletteChangeFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_setPaletteChangeFlag(%p) (%d)", (const void *)script, stackPos(0));
- _paletteChanged = stackPos(0);
- return _paletteChanged;
-}
-
-int KyraEngine_v1::o1_fillRect(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_fillRect(%p) (%d, %d, %d, %d, %d, 0x%X)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
- int videoPageBackup = _screen->_curPage;
- _screen->_curPage = stackPos(0);
- _screen->fillRect(stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
- _screen->_curPage = videoPageBackup;
- return 0;
-}
-
-int KyraEngine_v1::o1_vocUnload(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_vocUnload(%p) ()", (const void *)script);
- // this should unload all voc files (not needed)
- return 0;
-}
-
-int KyraEngine_v1::o1_vocLoad(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_vocLoad(%p) (%d)", (const void *)script, stackPos(0));
- // this should load the specified voc file (not needed)
- return 0;
-}
-
-int KyraEngine_v1::o1_dummy(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_dummy(%p) ()", (const void *)script);
- return 0;
-}
-
-#pragma mark -
-
-typedef Common::Functor1Mem<EMCState*, int, KyraEngine_v1> OpcodeV1;
-#define SetOpcodeTable(x) table = &x;
-#define Opcode(x) table->push_back(new OpcodeV1(this, &KyraEngine_v1::x))
-void KyraEngine_v1::setupOpcodeTable() {
- 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
-
-} // end of namespace Kyra
-