aboutsummaryrefslogtreecommitdiff
path: root/engines/saga
diff options
context:
space:
mode:
Diffstat (limited to 'engines/saga')
-rw-r--r--engines/saga/actor.cpp2
-rw-r--r--engines/saga/animation.cpp133
-rw-r--r--engines/saga/animation.h1
-rw-r--r--engines/saga/events.cpp3
-rw-r--r--engines/saga/events.h3
-rw-r--r--engines/saga/interface.cpp1
-rw-r--r--engines/saga/ite_introproc.cpp41
-rw-r--r--engines/saga/palanim.cpp2
-rw-r--r--engines/saga/scene.cpp44
-rw-r--r--engines/saga/script.cpp1
-rw-r--r--engines/saga/sfuncs.cpp24
11 files changed, 126 insertions, 129 deletions
diff --git a/engines/saga/actor.cpp b/engines/saga/actor.cpp
index efe6051f8b..8218f13555 100644
--- a/engines/saga/actor.cpp
+++ b/engines/saga/actor.cpp
@@ -2415,8 +2415,8 @@ void Actor::moveDragon(ActorData *actor) {
event.param4 = -1; // Object
event.param5 = -1; // With Object
event.param6 = -1; // Actor
-
_vm->_events->queue(&event);
+
_dragonHunt = false;
}
} else {
diff --git a/engines/saga/animation.cpp b/engines/saga/animation.cpp
index 2e352c0064..99d1ee2a2a 100644
--- a/engines/saga/animation.cpp
+++ b/engines/saga/animation.cpp
@@ -84,34 +84,38 @@ int Anim::playCutaway(int cut, bool fade) {
Event event;
Event *q_event = NULL;
bool startImmediately = false;
+ byte *resourceData;
+ size_t resourceDataLength;
+ ResourceContext *context = _vm->_resource->getContext(GAME_RESOURCEFILE);
_cutAwayFade = fade;
_vm->_gfx->savePalette();
_vm->_gfx->getCurrentPal(saved_pal);
- // TODO: Fade in and fade out at this point are problematic right now, caused
- // by the fact that we're trying to mix events with direct calls:
- // 1) The background of the animation is shown when _vm->decodeBGImage and
- // bgSurface->blit are called below, before palette fadeout starts
- // 2) Fade in to the animation is currently problematic (it fades in to white)
- // We either have to use non-event calls to fade in/out the palette, or change
- // the background display and animation parts to events
- fade = false; // remove this once palette fadein-fadeout works
-
if (fade) {
static PalEntry cur_pal[PAL_ENTRIES];
- _vm->_gfx->getCurrentPal(cur_pal);
+ _vm->_interface->setFadeMode(kFadeOut);
+ // Fade to black out
+ _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);
+
+ // set fade mode
+ event.type = kEvTImmediate;
+ event.code = kInterfaceEvent;
+ event.op = kEventSetFadeMode;
+ event.param = kNoFade;
+ event.time = 0;
+ event.duration = 0;
+ q_event = _vm->_events->chain(q_event, &event);
}
// Prepare cutaway
@@ -131,46 +135,19 @@ int Anim::playCutaway(int cut, bool fade) {
else
_vm->_interface->setMode(kPanelCutaway);
- // Set the initial background and palette for the cutaway
- ResourceContext *context = _vm->_resource->getContext(GAME_RESOURCEFILE);
-
- byte *resourceData;
- size_t resourceDataLength;
-
- _vm->_resource->loadResource(context, _cutawayList[cut].backgroundResourceId, resourceData, resourceDataLength);
-
- byte *buf;
- size_t buflen;
- int width;
- int height;
-
- _vm->decodeBGImage(resourceData, resourceDataLength, &buf, &buflen, &width, &height);
-
- const PalEntry *palette = (const PalEntry *)_vm->getImagePal(resourceData, resourceDataLength);
-
- Surface *bgSurface = _vm->_render->getBackGroundSurface();
- const Rect rect(width, height);
-
- bgSurface->blit(rect, buf);
- _vm->_frameCount++;
-
- // Handle fade up, if we previously faded down
if (fade) {
+ // Set the initial background and palette for the cutaway
event.type = kEvTImmediate;
- event.code = kPalEvent;
- event.op = kEventBlackToPal;
+ event.code = kCutawayEvent;
+ event.op = kEventShowCutawayBg;
event.time = 0;
- event.duration = kNormalFadeDuration;
- event.data = (PalEntry *)palette;
-
+ event.duration = 0;
+ event.param = _cutawayList[cut].backgroundResourceId;
q_event = _vm->_events->chain(q_event, &event);
} else {
- _vm->_gfx->setPalette(palette);
+ showCutawayBg(_cutawayList[cut].backgroundResourceId);
}
- free(buf);
- free(resourceData);
-
// Play the animation
int cutawaySlot = -1;
@@ -215,7 +192,10 @@ int Anim::playCutaway(int cut, bool fade) {
event.param = MAX_ANIMATIONS + cutawaySlot;
event.time = (40 / 3) * 1000 / _cutawayList[cut].frameRate;
- _vm->_events->queue(&event);
+ if (fade)
+ q_event = _vm->_events->chain(q_event, &event);
+ else
+ _vm->_events->queue(&event);
}
return MAX_ANIMATIONS + cutawaySlot;
@@ -235,7 +215,6 @@ void Anim::returnFromCutaway(void) {
debug(0, "returnFromCutaway()");
-
if (_cutawayActive) {
Event event;
Event *q_event = NULL;
@@ -243,16 +222,26 @@ void Anim::returnFromCutaway(void) {
if (_cutAwayFade) {
static PalEntry cur_pal[PAL_ENTRIES];
- _vm->_gfx->getCurrentPal(cur_pal);
+ _vm->_interface->setFadeMode(kFadeOut);
+ // Fade to black out
+ _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);
+
+ // set fade mode
+ event.type = kEvTImmediate;
+ event.code = kInterfaceEvent;
+ event.op = kEventSetFadeMode;
+ event.param = kNoFade;
+ event.time = 0;
+ event.duration = 0;
+ q_event = _vm->_events->chain(q_event, &event);
}
// Clear the cutaway. Note that this sets _cutawayActive to false
@@ -275,7 +264,6 @@ void Anim::returnFromCutaway(void) {
event.op = kEventResumeAll;
event.time = 0;
event.duration = 0;
-
q_event = _vm->_events->chain(q_event, &event); // chain with the other events
// Draw the scene
@@ -284,7 +272,6 @@ void Anim::returnFromCutaway(void) {
event.op = kEventDraw;
event.time = 0;
event.duration = 0;
-
q_event = _vm->_events->chain(q_event, &event); // chain with the other events
// Handle fade up, if we previously faded down
@@ -295,16 +282,13 @@ void Anim::returnFromCutaway(void) {
event.time = 0;
event.duration = kNormalFadeDuration;
event.data = saved_pal;
-
q_event = _vm->_events->chain(q_event, &event);
-
}
event.type = kEvTOneshot;
event.code = kScriptEvent;
event.op = kEventThreadWake;
event.param = kWaitTypeWakeUp;
-
q_event = _vm->_events->chain(q_event, &event);
}
}
@@ -336,6 +320,45 @@ void Anim::clearCutaway(void) {
}
}
+void Anim::showCutawayBg(int bg) {
+ ResourceContext *context = _vm->_resource->getContext(GAME_RESOURCEFILE);
+
+ byte *resourceData;
+ size_t resourceDataLength;
+ byte *buf;
+ size_t buflen;
+ int width;
+ int height;
+ Event event;
+ static PalEntry pal[PAL_ENTRIES];
+
+ _vm->_resource->loadResource(context, bg, resourceData, resourceDataLength);
+ _vm->decodeBGImage(resourceData, resourceDataLength, &buf, &buflen, &width, &height);
+
+ const byte *palPointer = _vm->getImagePal(resourceData, resourceDataLength);
+ memcpy(pal, palPointer, sizeof(pal));
+ Surface *bgSurface = _vm->_render->getBackGroundSurface();
+ const Rect rect(width, height);
+ bgSurface->blit(rect, buf);
+ _vm->_frameCount++;
+
+ if (_cutAwayFade) {
+ // Handle fade up, if we previously faded down
+ event.type = kEvTImmediate;
+ event.code = kPalEvent;
+ event.op = kEventBlackToPal;
+ event.time = 0;
+ event.duration = kNormalFadeDuration;
+ event.data = pal;
+ _vm->_events->queue(&event);
+ } else {
+ _vm->_gfx->setPalette(pal);
+ }
+
+ free(buf);
+ free(resourceData);
+}
+
void Anim::startVideo(int vid, bool fade) {
debug(0, "startVideo(%d, %d)", vid, fade);
@@ -470,7 +493,6 @@ void Anim::play(uint16 animId, int vectorTime, bool playing) {
event.op = kEventFrame;
event.param = animId;
event.time = 10;
-
_vm->_events->queue(&event);
// Nothing to render here (apart from the background, which is already rendered),
@@ -503,8 +525,8 @@ void Anim::play(uint16 animId, int vectorTime, bool playing) {
event.op = kEventFrame;
event.param = animId;
event.time = 0;
-
_vm->_events->queue(&event);
+
return;
}
@@ -568,7 +590,6 @@ void Anim::play(uint16 animId, int vectorTime, bool playing) {
event.op = kEventFrame;
event.param = animId;
event.time = frameTime;
-
_vm->_events->queue(&event);
}
diff --git a/engines/saga/animation.h b/engines/saga/animation.h
index 90b24340a3..22fc2d36c0 100644
--- a/engines/saga/animation.h
+++ b/engines/saga/animation.h
@@ -119,6 +119,7 @@ public:
void endCutaway(void);
void returnFromCutaway(void);
void clearCutaway(void);
+ void showCutawayBg(int bg);
void startVideo(int vid, bool fade);
void endVideo(void);
diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp
index c36db47620..50297b7ef0 100644
--- a/engines/saga/events.cpp
+++ b/engines/saga/events.cpp
@@ -549,6 +549,9 @@ int Events::handleOneShot(Event *event) {
case kEventClear:
_vm->_anim->clearCutaway();
break;
+ case kEventShowCutawayBg:
+ _vm->_anim->showCutawayBg(event->param);
+ break;
default:
break;
}
diff --git a/engines/saga/events.h b/engines/saga/events.h
index 36130236b4..de4d296eab 100644
--- a/engines/saga/events.h
+++ b/engines/saga/events.h
@@ -117,7 +117,8 @@ enum EventOps {
kEventDissolve = 1,
kEventDissolveBGMask = 2,
// CUTAWAY events
- kEventClear = 1
+ kEventClear = 1,
+ kEventShowCutawayBg = 2
};
enum EventParams {
diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index 201ae58659..bf17240a2c 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -1527,7 +1527,6 @@ void Interface::handleChapterSelectionClick(const Point& mousePoint) {
event.param4 = obj; // Object
event.param5 = 0; // With Object
event.param6 = obj; // Actor
-
_vm->_events->queue(&event);
}
}
diff --git a/engines/saga/ite_introproc.cpp b/engines/saga/ite_introproc.cpp
index 1664969644..1b74d41cb7 100644
--- a/engines/saga/ite_introproc.cpp
+++ b/engines/saga/ite_introproc.cpp
@@ -115,7 +115,6 @@ Event *Scene::ITEQueueDialogue(Event *q_event, int n_dialogues, const IntroDialo
event.op = kEventDisplay;
event.data = entry;
event.time = (i == 0) ? 0 : VOICE_PAD;
-
q_event = _vm->_events->chain(q_event, &event);
// Play voice
@@ -124,7 +123,6 @@ Event *Scene::ITEQueueDialogue(Event *q_event, int n_dialogues, const IntroDialo
event.op = kEventPlay;
event.param = dialogue[i].i_voice_rn;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
voice_len = _vm->_sndRes->getVoiceLength(dialogue[i].i_voice_rn);
@@ -138,7 +136,6 @@ Event *Scene::ITEQueueDialogue(Event *q_event, int n_dialogues, const IntroDialo
event.op = kEventRemove;
event.data = entry;
event.time = voice_len;
-
q_event = _vm->_events->chain(q_event, &event);
}
@@ -265,7 +262,6 @@ Event *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits, const
event.op = kEventDisplay;
event.data = entry;
event.time = delta_time;
-
q_event = _vm->_events->queue(&event);
// Remove text
@@ -274,7 +270,6 @@ Event *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits, const
event.op = kEventRemove;
event.data = entry;
event.time = duration;
-
q_event = _vm->_events->chain(q_event, &event);
y += (_vm->_font->getHeight(font) + line_spacing);
@@ -301,7 +296,6 @@ int Scene::ITEIntroAnimProc(int param) {
event.op = kEventDisplay;
event.param = kEvPSetPalette;
event.time = 0;
-
q_event = _vm->_events->queue(&event);
debug(3, "Intro animation procedure started.");
@@ -340,7 +334,6 @@ int Scene::ITEIntroAnimProc(int param) {
event.op = kEventPlay;
event.param = 0;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
// Queue intro music playback
@@ -350,7 +343,6 @@ int Scene::ITEIntroAnimProc(int param) {
event.param2 = MUSIC_LOOP;
event.op = kEventPlay;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
}
break;
@@ -427,7 +419,6 @@ int Scene::ITEIntroCave1Proc(int param) {
event.code = kPalAnimEvent;
event.op = kEventCycleStart;
event.time = 0;
-
q_event = _vm->_events->queue(&event);
// Queue narrator dialogue list
@@ -438,8 +429,8 @@ int Scene::ITEIntroCave1Proc(int param) {
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = VOICE_PAD;
-
q_event = _vm->_events->chain(q_event, &event);
+
break;
case SCENE_END:
break;
@@ -504,7 +495,6 @@ int Scene::ITEIntroCave2Proc(int param) {
event.op = kEventDissolve;
event.time = 0;
event.duration = DISSOLVE_DURATION;
-
q_event = _vm->_events->queue(&event);
// Begin palette cycling animation for candles
@@ -512,7 +502,6 @@ int Scene::ITEIntroCave2Proc(int param) {
event.code = kPalAnimEvent;
event.op = kEventCycleStart;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
// Queue narrator dialogue list
@@ -523,8 +512,8 @@ int Scene::ITEIntroCave2Proc(int param) {
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = VOICE_PAD;
-
q_event = _vm->_events->chain(q_event, &event);
+
break;
case SCENE_END:
break;
@@ -588,7 +577,6 @@ int Scene::ITEIntroCave3Proc(int param) {
event.op = kEventDissolve;
event.time = 0;
event.duration = DISSOLVE_DURATION;
-
q_event = _vm->_events->queue(&event);
// Begin palette cycling animation for candles
@@ -596,7 +584,6 @@ int Scene::ITEIntroCave3Proc(int param) {
event.code = kPalAnimEvent;
event.op = kEventCycleStart;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
// Queue narrator dialogue list
@@ -607,8 +594,8 @@ int Scene::ITEIntroCave3Proc(int param) {
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = VOICE_PAD;
-
q_event = _vm->_events->chain(q_event, &event);
+
break;
case SCENE_END:
break;
@@ -681,7 +668,6 @@ int Scene::ITEIntroCave4Proc(int param) {
event.op = kEventDissolve;
event.time = 0;
event.duration = DISSOLVE_DURATION;
-
q_event = _vm->_events->queue(&event);
// Begin palette cycling animation for candles
@@ -689,7 +675,6 @@ int Scene::ITEIntroCave4Proc(int param) {
event.code = kPalAnimEvent;
event.op = kEventCycleStart;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
// Queue narrator dialogue list
@@ -700,8 +685,8 @@ int Scene::ITEIntroCave4Proc(int param) {
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = VOICE_PAD;
-
q_event = _vm->_events->chain(q_event, &event);
+
break;
case SCENE_END:
break;
@@ -747,7 +732,6 @@ int Scene::ITEIntroValleyProc(int param) {
event.op = kEventPlay;
event.param = 0;
event.time = 0;
-
q_event = _vm->_events->queue(&event);
// Begin ITE title theme music
@@ -759,7 +743,6 @@ int Scene::ITEIntroValleyProc(int param) {
event.param2 = MUSIC_NORMAL;
event.op = kEventPlay;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
// Pause animation before logo
@@ -768,7 +751,6 @@ int Scene::ITEIntroValleyProc(int param) {
event.op = kEventStop;
event.param = 0;
event.time = 3000;
-
q_event = _vm->_events->chain(q_event, &event);
// Display logo
@@ -777,7 +759,6 @@ int Scene::ITEIntroValleyProc(int param) {
event.op = kEventDissolveBGMask;
event.time = 0;
event.duration = LOGO_DISSOLVE_DURATION;
-
q_event = _vm->_events->chain(q_event, &event);
// Remove logo
@@ -786,7 +767,6 @@ int Scene::ITEIntroValleyProc(int param) {
event.op = kEventDissolve;
event.time = 3000;
event.duration = LOGO_DISSOLVE_DURATION;
-
q_event = _vm->_events->chain(q_event, &event);
// Unpause animation before logo
@@ -795,7 +775,6 @@ int Scene::ITEIntroValleyProc(int param) {
event.op = kEventPlay;
event.time = 0;
event.param = 0;
-
q_event = _vm->_events->chain(q_event, &event);
// Queue game credits list
@@ -806,8 +785,8 @@ int Scene::ITEIntroValleyProc(int param) {
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = 1000;
-
q_event = _vm->_events->chain(q_event, &event);
+
break;
case SCENE_END:
break;
@@ -870,7 +849,6 @@ int Scene::ITEIntroTreeHouseProc(int param) {
event.op = kEventDissolve;
event.time = 0;
event.duration = DISSOLVE_DURATION;
-
q_event = _vm->_events->queue(&event);
if (_vm->_anim->hasAnimation(0)) {
@@ -882,7 +860,6 @@ int Scene::ITEIntroTreeHouseProc(int param) {
event.op = kEventPlay;
event.param = 0;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
}
@@ -895,8 +872,8 @@ int Scene::ITEIntroTreeHouseProc(int param) {
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = 1000;
-
q_event = _vm->_events->chain(q_event, &event);
+
break;
case SCENE_END:
break;
@@ -950,7 +927,6 @@ int Scene::ITEIntroFairePathProc(int param) {
event.op = kEventDissolve;
event.time = 0;
event.duration = DISSOLVE_DURATION;
-
q_event = _vm->_events->queue(&event);
// Begin title screen background animation
@@ -961,7 +937,6 @@ int Scene::ITEIntroFairePathProc(int param) {
event.op = kEventPlay;
event.param = 0;
event.time = 0;
-
q_event = _vm->_events->chain(q_event, &event);
// Queue game credits list
@@ -973,8 +948,8 @@ int Scene::ITEIntroFairePathProc(int param) {
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = 1000;
-
q_event = _vm->_events->chain(q_event, &event);
+
break;
case SCENE_END:
break;
@@ -1005,7 +980,6 @@ int Scene::ITEIntroFaireTentProc(int param) {
event.op = kEventDissolve;
event.time = 0;
event.duration = DISSOLVE_DURATION;
-
q_event_start = _vm->_events->queue(&event);
// End scene after momentary pause
@@ -1014,6 +988,7 @@ int Scene::ITEIntroFaireTentProc(int param) {
event.op = kEventEnd;
event.time = 5000;
q_event = _vm->_events->chain(q_event_start, &event);
+
break;
case SCENE_END:
break;
diff --git a/engines/saga/palanim.cpp b/engines/saga/palanim.cpp
index 19c2fc4d40..f318b815cc 100644
--- a/engines/saga/palanim.cpp
+++ b/engines/saga/palanim.cpp
@@ -131,7 +131,6 @@ int PalAnim::cycleStart() {
event.code = kPalAnimEvent;
event.op = kEventCycleStep;
event.time = PALANIM_CYCLETIME;
-
_vm->_events->queue(&event);
return SUCCESS;
@@ -178,7 +177,6 @@ int PalAnim::cycleStep(int vectortime) {
event.code = kPalAnimEvent;
event.op = kEventCycleStep;
event.time = vectortime + PALANIM_CYCLETIME;
-
_vm->_events->queue(&event);
return SUCCESS;
diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp
index 1cc1eeda02..e2ad92428f 100644
--- a/engines/saga/scene.cpp
+++ b/engines/saga/scene.cpp
@@ -785,7 +785,6 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
event.param4 = _sceneNumber; // Object
event.param5 = loadSceneParams->actorsEntrance; // With Object
event.param6 = 0; // Actor
-
q_event = _vm->_events->chain(q_event, &event);
}
@@ -807,7 +806,6 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
event.time = 0;
event.duration = kNormalFadeDuration;
event.data = _bg.pal;
-
q_event = _vm->_events->chain(q_event, &event);
// set fade mode
@@ -836,14 +834,12 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
event.param2 = MUSIC_DEFAULT;
event.op = kEventPlay;
event.time = 0;
-
_vm->_events->queue(&event);
} else {
event.type = kEvTOneshot;
event.code = kMusicEvent;
event.op = kEventStop;
event.time = 0;
-
_vm->_events->queue(&event);
}
}
@@ -854,7 +850,6 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
event.op = kEventDisplay;
event.param = kEvPSetPalette;
event.time = 0;
-
_vm->_events->queue(&event);
// Begin palette cycle animation if present
@@ -862,7 +857,6 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
event.code = kPalAnimEvent;
event.op = kEventCycleStart;
event.time = 0;
-
q_event = _vm->_events->queue(&event);
// Start the scene main script
@@ -877,7 +871,6 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
event.param4 = _sceneNumber; // Object
event.param5 = loadSceneParams->actorsEntrance; // With Object
event.param6 = 0; // Actor
-
_vm->_events->queue(&event);
}
@@ -1326,22 +1319,31 @@ void Scene::clearPlacard() {
Event event;
Event *q_event;
- _vm->_gfx->getCurrentPal(cur_pal);
+ _vm->_interface->setFadeMode(kFadeOut);
+ // Fade to black out
+ _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);
+ // set fade mode
+ event.type = kEvTImmediate;
+ event.code = kInterfaceEvent;
+ event.op = kEventSetFadeMode;
+ event.param = kNoFade;
+ event.time = 0;
+ event.duration = 0;
+ q_event = _vm->_events->chain(q_event, &event);
+
event.type = kEvTOneshot;
event.code = kTextEvent;
event.op = kEventRemove;
event.data = _vm->_script->getPlacardTextEntry();
-
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTImmediate;
@@ -1349,7 +1351,6 @@ void Scene::clearPlacard() {
event.op = kEventRestoreMode;
event.time = 0;
event.duration = 0;
-
q_event = _vm->_events->chain(q_event, &event);
_vm->_scene->getBGPal(pal);
@@ -1360,20 +1361,17 @@ void Scene::clearPlacard() {
event.time = 0;
event.duration = kNormalFadeDuration;
event.data = pal;
-
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTOneshot;
event.code = kCursorEvent;
event.op = kEventShow;
-
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTOneshot;
event.code = kScriptEvent;
event.op = kEventThreadWake;
event.param = kWaitTypePlacard;
-
q_event = _vm->_events->chain(q_event, &event);
}
@@ -1395,30 +1393,37 @@ void Scene::showPsychicProfile(const char *text) {
event.type = kEvTOneshot;
event.code = kCursorEvent;
event.op = kEventHide;
-
q_event = _vm->_events->queue(&event);
- _vm->_gfx->getCurrentPal(cur_pal);
+ _vm->_interface->setFadeMode(kFadeOut);
+ // Fade to black out
+ _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->chain(q_event, &event);
+ // set fade mode
+ event.type = kEvTImmediate;
+ event.code = kInterfaceEvent;
+ event.op = kEventSetFadeMode;
+ event.param = kNoFade;
+ event.time = 0;
+ event.duration = 0;
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTOneshot;
event.code = kInterfaceEvent;
event.op = kEventClearStatus;
-
q_event = _vm->_events->chain(q_event, &event);
// Set the background and palette for the psychic profile
event.type = kEvTOneshot;
event.code = kPsychicProfileBgEvent;
-
q_event = _vm->_events->chain(q_event, &event);
_vm->_scene->_textList.clear();
@@ -1442,7 +1447,6 @@ void Scene::showPsychicProfile(const char *text) {
event.code = kTextEvent;
event.op = kEventDisplay;
event.data = _psychicProfileTextEntry;
-
q_event = _vm->_events->chain(q_event, &event);
}
@@ -1454,14 +1458,12 @@ void Scene::showPsychicProfile(const char *text) {
event.time = 0;
event.duration = kNormalFadeDuration;
event.data = pal;
-
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTOneshot;
event.code = kScriptEvent;
event.op = kEventThreadWake;
event.param = kWaitTypePlacard;
-
q_event = _vm->_events->chain(q_event, &event);
}
diff --git a/engines/saga/script.cpp b/engines/saga/script.cpp
index 49071ecc60..8012d5af32 100644
--- a/engines/saga/script.cpp
+++ b/engines/saga/script.cpp
@@ -505,7 +505,6 @@ void Script::doVerb() {
event.param4 = _pendingObject[0]; // Object
event.param5 = _pendingObject[1]; // With Object
event.param6 = (objectType == kGameObjectActor) ? _pendingObject[0] : ID_PROTAG; // Actor
-
_vm->_events->queue(&event);
} else {
diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp
index 62ae2e45cc..4f37cda51b 100644
--- a/engines/saga/sfuncs.cpp
+++ b/engines/saga/sfuncs.cpp
@@ -431,7 +431,6 @@ void Script::sfScriptDoAction(SCRIPTFUNC_PARAMS) {
event.param4 = theObject; // Object
event.param5 = withObject; // With Object
event.param6 = objectId;
-
_vm->_events->queue(&event);
}
@@ -1177,24 +1176,32 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
event.type = kEvTOneshot;
event.code = kCursorEvent;
event.op = kEventHide;
-
q_event = _vm->_events->queue(&event);
- _vm->_gfx->getCurrentPal(cur_pal);
+ _vm->_interface->setFadeMode(kFadeOut);
+ // Fade to black out
+ _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->chain(q_event, &event);
+ // set fade mode
+ event.type = kEvTImmediate;
+ event.code = kInterfaceEvent;
+ event.op = kEventSetFadeMode;
+ event.param = kNoFade;
+ event.time = 0;
+ event.duration = 0;
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTOneshot;
event.code = kInterfaceEvent;
event.op = kEventClearStatus;
-
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTOneshot;
@@ -1206,7 +1213,6 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
event.param3 = _vm->_scene->getHeight();
event.param4 = 0;
event.param5 = _vm->getDisplayWidth();
-
q_event = _vm->_events->chain(q_event, &event);
// Put the text in the center of the viewport, assuming it will fit on
@@ -1231,25 +1237,21 @@ void Script::sfPlacard(SCRIPTFUNC_PARAMS) {
event.code = kTextEvent;
event.op = kEventDisplay;
event.data = _placardTextEntry;
-
q_event = _vm->_events->chain(q_event, &event);
_vm->_scene->getBGPal(pal);
-
event.type = kEvTImmediate;
event.code = kPalEvent;
event.op = kEventBlackToPal;
event.time = 0;
event.duration = kNormalFadeDuration;
event.data = pal;
-
q_event = _vm->_events->chain(q_event, &event);
event.type = kEvTOneshot;
event.code = kScriptEvent;
event.op = kEventThreadWake;
event.param = kWaitTypePlacard;
-
q_event = _vm->_events->chain(q_event, &event);
}
@@ -1738,7 +1740,6 @@ void Script::sfScriptFade(SCRIPTFUNC_PARAMS) {
static PalEntry cur_pal[PAL_ENTRIES];
_vm->_gfx->getCurrentPal(cur_pal);
-
event.type = kEvTImmediate;
event.code = kPalEvent;
event.op = kEventPalFade;
@@ -1749,7 +1750,6 @@ void Script::sfScriptFade(SCRIPTFUNC_PARAMS) {
event.param2 = endingBrightness;
event.param3 = firstPalEntry;
event.param4 = lastPalEntry - firstPalEntry + 1;
-
_vm->_events->queue(&event);
}
@@ -1798,7 +1798,6 @@ void Script::sfAddIHNMDemoHelpTextLine(SCRIPTFUNC_PARAMS) {
event.code = kTextEvent;
event.op = kEventDisplay;
event.data = _psychicProfileTextEntry;
-
_vm->_events->queue(&event);
_ihnmDemoCurrentY += 10;
@@ -1932,7 +1931,6 @@ void Script::sfQueueMusic(SCRIPTFUNC_PARAMS) {
// change
// FIXME: If this is too short for other cases apart from chapter
// point change, set it back to 1000
-
_vm->_events->queue(&event);
if (!_vm->_scene->haveChapterPointsChanged()) {