diff options
author | Johannes Schickel | 2008-03-18 19:06:53 +0000 |
---|---|---|
committer | Johannes Schickel | 2008-03-18 19:06:53 +0000 |
commit | cbc4c789dac2ba466f69d7d14c2a5f7bf0dd742d (patch) | |
tree | 6c36d3caad6b5eebb4d3c18aef5e275e3b35244e /engines | |
parent | 80a73d4ae6b4bc157173b8016cb871adc4fd915d (diff) | |
download | scummvm-rg350-cbc4c789dac2ba466f69d7d14c2a5f7bf0dd742d.tar.gz scummvm-rg350-cbc4c789dac2ba466f69d7d14c2a5f7bf0dd742d.tar.bz2 scummvm-rg350-cbc4c789dac2ba466f69d7d14c2a5f7bf0dd742d.zip |
Implemented showing of credits after completing game.
svn-id: r31186
Diffstat (limited to 'engines')
-rw-r--r-- | engines/kyra/animator_v2.cpp | 5 | ||||
-rw-r--r-- | engines/kyra/kyra_v2.cpp | 12 | ||||
-rw-r--r-- | engines/kyra/kyra_v2.h | 4 | ||||
-rw-r--r-- | engines/kyra/script_v2.cpp | 21 |
4 files changed, 33 insertions, 9 deletions
diff --git a/engines/kyra/animator_v2.cpp b/engines/kyra/animator_v2.cpp index 5e78387c79..d763d96422 100644 --- a/engines/kyra/animator_v2.cpp +++ b/engines/kyra/animator_v2.cpp @@ -62,6 +62,11 @@ KyraEngine_v2::AnimObj *KyraEngine_v2::initAnimList(AnimObj *list, AnimObj *entr } KyraEngine_v2::AnimObj *KyraEngine_v2::addToAnimListSorted(AnimObj *list, AnimObj *add) { + if (!list) { + add->nextObject = 0; + return add; + } + if (add->yPos1 <= list->yPos1) { add->nextObject = list; return add; diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp index b009b31f0f..4999163f13 100644 --- a/engines/kyra/kyra_v2.cpp +++ b/engines/kyra/kyra_v2.cpp @@ -55,6 +55,8 @@ KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags) : KyraEngi _demoShapeDefs = 0; _sequenceSoundList = 0; + _showCredits = false; + _gamePlayBuffer = 0; _cCodeBuffer = _optionsBuffer = _chapterBuffer = 0; @@ -240,7 +242,6 @@ int KyraEngine_v2::go() { _menuChoice = 4; } else { seq_playSequences(kSequenceVirgin, kSequenceZanfaun); - //seq_playSequences(kSequenceFunters, kSequenceFrash); } _res->unloadAllPakFiles(); @@ -260,6 +261,9 @@ int KyraEngine_v2::go() { startup(); runLoop(); cleanup(); + + if (_showCredits) + seq_playSequences(kSequenceFunters, kSequenceFrash); } return 0; @@ -387,7 +391,8 @@ void KyraEngine_v2::runLoop() { _screen->updateScreen(); _quitFlag = false; - while (!_quitFlag) { + _runFlag = true; + while (!_quitFlag && _runFlag) { //if (_deathHandler >= 0) { // removeHandItem(); // waitTicks(5); @@ -571,7 +576,8 @@ bool KyraEngine_v2::handleInputUnkSub(int x, int y) { if (queryGameFlag(0x1ED)) { _sound->beginFadeOut(); _screen->fadeToBlack(); - _quitFlag = true; + _showCredits = true; + _runFlag = false; } return _sceneScriptState.regs[3] != 0; diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h index 9417e85fbc..cfd11a425d 100644 --- a/engines/kyra/kyra_v2.h +++ b/engines/kyra/kyra_v2.h @@ -300,6 +300,9 @@ protected: void loadItemShapes(); // run + bool _runFlag; + bool _showCredits; + void update(); void updateWithText(); @@ -1035,6 +1038,7 @@ protected: int o2_getRand(ScriptState *script); int o2_setDeathHandlerFlag(ScriptState *script); int o2_setDrawNoShapeFlag(ScriptState *script); + int o2_setRunFlag(ScriptState *script); int o2_showLetter(ScriptState *script); int o2_fillRect(ScriptState *script); int o2_waitForConfirmationClick(ScriptState *script); diff --git a/engines/kyra/script_v2.cpp b/engines/kyra/script_v2.cpp index 0f0d1a6731..65a4f8cb63 100644 --- a/engines/kyra/script_v2.cpp +++ b/engines/kyra/script_v2.cpp @@ -240,7 +240,7 @@ int KyraEngine_v2::o2_displayWsaFrame(ScriptState *script) { _wsaSlots[slot]->setX(x); _wsaSlots[slot]->setY(y); _wsaSlots[slot]->setDrawPage(dstPage); - _wsaSlots[slot]->displayFrame(frame, copyParam | 0xC000); + _wsaSlots[slot]->displayFrame(frame, copyParam | 0xC000, 0, 0); _screen->updateScreen(); if (backUp) @@ -282,7 +282,7 @@ int KyraEngine_v2::o2_displayWsaSequentialFramesLooping(ScriptState *script) { if (startFrame < endFrame) { for (int i = startFrame; i <= endFrame && !skipFlag(); ++i) { uint32 endTime = _system->getMillis() + waitTime * _tickLength; - _wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags); + _wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags, 0, 0); _screen->updateScreen(); do { @@ -295,7 +295,7 @@ int KyraEngine_v2::o2_displayWsaSequentialFramesLooping(ScriptState *script) { } else { for (int i = startFrame; i >= endFrame && !skipFlag(); --i) { uint32 endTime = _system->getMillis() + waitTime * _tickLength; - _wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags); + _wsaSlots[slot]->displayFrame(i, 0xC000 | copyFlags, 0, 0); _screen->updateScreen(); do { @@ -338,7 +338,7 @@ int KyraEngine_v2::o2_displayWsaSequentialFrames(ScriptState *script) { while (currentFrame <= lastFrame && !skipFlag()) { uint32 endTime = _system->getMillis() + frameDelay; - _wsaSlots[index]->displayFrame(currentFrame++, copyParam); + _wsaSlots[index]->displayFrame(currentFrame++, copyParam, 0, 0); _screen->updateScreen(); delayUntil(endTime); } @@ -368,7 +368,7 @@ int KyraEngine_v2::o2_displayWsaSequence(ScriptState *script) { while (currentFrame <= lastFrame && !skipFlag()) { uint32 endTime = _system->getMillis() + frameDelay; - _wsaSlots[index]->displayFrame(currentFrame++, copyParam); + _wsaSlots[index]->displayFrame(currentFrame++, copyParam, 0, 0); if (doUpdate) update(); _screen->updateScreen(); @@ -896,6 +896,15 @@ int KyraEngine_v2::o2_setDrawNoShapeFlag(ScriptState *script) { return 0; } +int KyraEngine_v2::o2_setRunFlag(ScriptState *script) { + debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_setRunFlag(%p) (%d)", (const void *)script, stackPos(0)); + // this is usually just _runFlag, but since this is just used when the game should play the credits + // we handle it a bit different :-) + _showCredits = true; + _runFlag = false; + return 0; +} + int KyraEngine_v2::o2_showLetter(ScriptState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_showLetter(%p) (%d)", (const void *)script, stackPos(0)); const int letter = stackPos(0); @@ -1782,7 +1791,7 @@ void KyraEngine_v2::setupOpcodeTable() { Opcode(o2_setDeathHandlerFlag), Opcode(o2_setDrawNoShapeFlag), // 0x64 - OpcodeUnImpl(), + Opcode(o2_setRunFlag), Opcode(o2_showLetter), OpcodeUnImpl(), Opcode(o2_fillRect), |