From 5fa2b1a3c5b63ddee8a7e3d5dcf4efc8cf9e04ef Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 15 Sep 2007 12:09:56 +0000 Subject: Palette fade in when a cutaway starts in IHNM is working now. Also, the fade mode is properly set in all cases where palette fadeout is used. Some code formatting svn-id: r28904 --- engines/saga/actor.cpp | 2 +- engines/saga/animation.cpp | 133 ++++++++++++++++++++++++----------------- engines/saga/animation.h | 1 + engines/saga/events.cpp | 3 + engines/saga/events.h | 3 +- engines/saga/interface.cpp | 1 - engines/saga/ite_introproc.cpp | 41 +++---------- engines/saga/palanim.cpp | 2 - engines/saga/scene.cpp | 44 +++++++------- engines/saga/script.cpp | 1 - engines/saga/sfuncs.cpp | 24 ++++---- 11 files changed, 126 insertions(+), 129 deletions(-) (limited to 'engines') 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()) { -- cgit v1.2.3