aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJohannes Schickel2008-03-18 19:06:53 +0000
committerJohannes Schickel2008-03-18 19:06:53 +0000
commitcbc4c789dac2ba466f69d7d14c2a5f7bf0dd742d (patch)
tree6c36d3caad6b5eebb4d3c18aef5e275e3b35244e /engines
parent80a73d4ae6b4bc157173b8016cb871adc4fd915d (diff)
downloadscummvm-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.cpp5
-rw-r--r--engines/kyra/kyra_v2.cpp12
-rw-r--r--engines/kyra/kyra_v2.h4
-rw-r--r--engines/kyra/script_v2.cpp21
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),