aboutsummaryrefslogtreecommitdiff
path: root/engines/lure/intro.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lure/intro.cpp')
-rw-r--r--engines/lure/intro.cpp58
1 files changed, 40 insertions, 18 deletions
diff --git a/engines/lure/intro.cpp b/engines/lure/intro.cpp
index 41146742b7..ae4199051e 100644
--- a/engines/lure/intro.cpp
+++ b/engines/lure/intro.cpp
@@ -26,20 +26,26 @@
#include "lure/intro.h"
#include "lure/animseq.h"
#include "lure/events.h"
+#include "lure/sound.h"
namespace Lure {
struct AnimRecord {
uint16 resourceId;
uint8 paletteIndex;
- bool initialPause;
- bool endingPause;
+ uint16 initialPause;
+ uint16 endingPause;
+ uint8 soundNumber;
};
static const uint16 start_screens[] = {0x18, 0x1A, 0x1E, 0x1C, 0};
-static const AnimRecord anim_screens[] = {{0x40, 0, true, true}, {0x42, 1, false, true},
- {0x44, 2, false, false}, {0x24, 3, false, true}, {0x46, 3, false, false},
- {0, 0, false, false}};
+static const AnimRecord anim_screens[] = {
+ {0x40, 0, 0x35A, 0xC8, 0}, // The kingdom was at peace
+ {0x42, 1, 0, 0x5FA, 1}, // Cliff overhang
+ {0x44, 2, 0, 0, 2}, // Siluette in moonlight
+ {0x24, 3, 0, 0x328 + 0x24, 0xff}, // Exposition of reaching town
+ {0x46, 3, 0, 0, 3}, // Skorl approaches
+ {0, 0, 0, 0, 0xff}};
// showScreen
// Shows a screen by loading it from the given resource, and then fading it in
@@ -73,25 +79,38 @@ bool Introduction::show() {
if (showScreen(start_screens[ctr], start_screens[ctr] + 1, 5000))
return true;
- AnimationSequence *anim;
- bool result;
-
// Animated screens
+ AnimationSequence *anim;
+ bool result;
+ uint8 currentSound = 0xff;
PaletteCollection coll(0x32);
const AnimRecord *curr_anim = anim_screens;
for (; curr_anim->resourceId; ++curr_anim) {
+ // Handle sound selection
+ if (curr_anim->soundNumber != 0xff) {
+ if (currentSound != 0xff)
+ // Fade out the previous sound
+ Sound.fadeOut();
+
+ currentSound = curr_anim->soundNumber;
+ Sound.musicInterface_Play(currentSound, 0);
+ // DEBUG TEST
+// g_system->delayMillis(1000);
+// Sound.musicInterface_Play(1, 1);
+ }
+
bool fadeIn = curr_anim == anim_screens;
anim = new AnimationSequence(_screen, _system, curr_anim->resourceId,
coll.getPalette(curr_anim->paletteIndex), fadeIn);
- if (curr_anim->initialPause)
- if (events.interruptableDelay(12000)) return true;
+ if (curr_anim->initialPause != 0)
+ if (events.interruptableDelay(curr_anim->initialPause * 1000 / 50)) return true;
result = false;
switch (anim->show()) {
case ABORT_NONE:
- if (curr_anim->endingPause) {
- result = events.interruptableDelay(12000);
+ if (curr_anim->endingPause != 0) {
+ result = events.interruptableDelay(curr_anim->endingPause * 1000 / 50);
}
break;
@@ -104,7 +123,10 @@ bool Introduction::show() {
}
delete anim;
- if (result) return true;
+ if (result) {
+ Sound.musicInterface_KillAll();
+ return true;
+ }
}
// Show battle pictures one frame at a time
@@ -118,12 +140,12 @@ bool Introduction::show() {
if (result) break;
} while (anim->step());
delete anim;
- if (result) return true;
-
- // Show final introduction screen
-
- showScreen(0x22, 0x21, 10000);
+
+ if (!result)
+ // Show final introduction screen
+ showScreen(0x22, 0x21, 10000);
+ Sound.musicInterface_KillAll();
return false;
}