aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorFilippos Karapetis2007-06-16 08:53:46 +0000
committerFilippos Karapetis2007-06-16 08:53:46 +0000
commit332a2e23d863f7e0530de8e08e45f57ebd890975 (patch)
tree2f8890a542623fcde03189316c7f9066aa8b9bd6 /engines
parentfb1a6fcbc2ee6376efb74df2a5c744e89a039a0f (diff)
downloadscummvm-rg350-332a2e23d863f7e0530de8e08e45f57ebd890975.tar.gz
scummvm-rg350-332a2e23d863f7e0530de8e08e45f57ebd890975.tar.bz2
scummvm-rg350-332a2e23d863f7e0530de8e08e45f57ebd890975.zip
IHNM: Implemented cutaway fadeout
svn-id: r27445
Diffstat (limited to 'engines')
-rw-r--r--engines/saga/animation.cpp55
-rw-r--r--engines/saga/events.cpp8
-rw-r--r--engines/saga/events.h7
3 files changed, 57 insertions, 13 deletions
diff --git a/engines/saga/animation.cpp b/engines/saga/animation.cpp
index 6566a43efd..0f9a1ddef4 100644
--- a/engines/saga/animation.cpp
+++ b/engines/saga/animation.cpp
@@ -96,8 +96,10 @@ void Anim::playCutaway(int cut, bool fade) {
_vm->_gfx->savePalette();
- // TODO
- /*if (fade) {
+ if (fade) {
+ _vm->_gfx->getCurrentPal(saved_pal);
+ // TODO
+ /*
Event event;
static PalEntry cur_pal[PAL_ENTRIES];
@@ -111,7 +113,8 @@ void Anim::playCutaway(int cut, bool fade) {
event.data = cur_pal;
_vm->_events->queue(&event);
- }*/
+ */
+ }
// Prepare cutaway
_vm->_gfx->showCursor(false);
@@ -219,14 +222,47 @@ void Anim::returnFromCutaway(void) {
debug(0, "returnFromCutaway()");
+
if (_cutawayActive) {
+ Event event;
+ Event *q_event = NULL;
+
+ if (_cutAwayFade) {
+ static PalEntry cur_pal[PAL_ENTRIES];
+
+ _vm->_gfx->getCurrentPal(cur_pal);
+
+ event.type = kEvTImmediate;
+ event.code = kPalEvent;
+ event.op = kEventPalToBlack;
+ event.time = 0;
+ event.duration = kNormalFadeDuration;
+ event.data = cur_pal;
+
+ q_event = _vm->_events->queue(&event);
+ }
+
// Note that clearCutaway() sets _cutawayActive to false.
clearCutaway();
+ // TODO: Clearing the cutaway via an event is better, but it breaks things up
+ /*
+ event.type = kEvTImmediate;
+ event.code = kCutawayEvent;
+ event.op = kEventClearCutaway;
+ event.time = 0;
+ event.duration = 0;
+
+ if (_cutAwayFade)
+ q_event = _vm->_events->chain(q_event, &event); // chain with the other events
+ else
+ q_event = _vm->_events->queue(&event);
+ */
+
+ // Restore the scene
+ _vm->_scene->restoreScene();
// Handle fade up, if we previously faded down
- // TODO
- /*if (_cutAwayFade) {
- Event event;
+ if (_cutAwayFade) {
event.type = kEvTImmediate;
event.code = kPalEvent;
event.op = kEventBlackToPal;
@@ -234,11 +270,8 @@ void Anim::returnFromCutaway(void) {
event.duration = kNormalFadeDuration;
event.data = saved_pal;
- _vm->_events->queue(&event);
- }*/
-
- // Restore the scene
- _vm->_scene->restoreScene();
+ q_event = _vm->_events->chain(q_event, &event);
+ }
// Restore the animations
for (int i = 0; i < MAX_ANIMATIONS; i++) {
diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp
index 0c5830c583..6672cd2477 100644
--- a/engines/saga/events.cpp
+++ b/engines/saga/events.cpp
@@ -469,6 +469,14 @@ int Events::handleOneShot(Event *event) {
default:
break;
}
+ case kCutawayEvent:
+ switch (event->op) {
+ case kEventClearCutaway:
+ _vm->_anim->clearCutaway();
+ break;
+ default:
+ break;
+ }
default:
break;
}
diff --git a/engines/saga/events.h b/engines/saga/events.h
index dbd2382a27..d18f009de3 100644
--- a/engines/saga/events.h
+++ b/engines/saga/events.h
@@ -59,7 +59,8 @@ enum EventCodes {
kActorEvent,
kScriptEvent,
kCursorEvent,
- kGraphicsEvent
+ kGraphicsEvent,
+ kCutawayEvent
};
enum EventOps {
@@ -111,7 +112,9 @@ enum EventOps {
kEventBlackToPal = 2,
// TRANSITION events
kEventDissolve = 1,
- kEventDissolveBGMask = 2
+ kEventDissolveBGMask = 2,
+ // CUTAWAY events
+ kEventClearCutaway = 1
};
enum EventParams {