diff options
Diffstat (limited to 'saga/scene.cpp')
-rw-r--r-- | saga/scene.cpp | 122 |
1 files changed, 120 insertions, 2 deletions
diff --git a/saga/scene.cpp b/saga/scene.cpp index 18b470374c..0e00aa9264 100644 --- a/saga/scene.cpp +++ b/saga/scene.cpp @@ -39,6 +39,8 @@ #include "render.h" #include "rscfile_mod.h" #include "text_mod.h" +#include "sound.h" +#include "music.h" #include "scene_mod.h" #include "scene.h" @@ -302,7 +304,7 @@ int SCENE_Change(int scene_num) { } SCENE_End(); - SCENE_Load(scene_num, BY_SCENE, DefaultSceneProc, NULL); + SCENE_Load(scene_num, BY_SCENE, defaultScene, NULL); return R_SUCCESS; } @@ -476,7 +478,7 @@ int SCENE_Load(int scene_num, int load_flag, R_SCENE_PROC scene_proc, R_SCENE_DE SceneModule.scene_loaded = 1; if (scene_proc == NULL) { - SceneModule.scene_proc = DefaultSceneProc; + SceneModule.scene_proc = defaultScene; } else { SceneModule.scene_proc = scene_proc; } @@ -840,4 +842,120 @@ void CF_sceneinfo(int argc, char *argv[], void *refCon) { CON_Print(fmt, "Music R#", SceneModule.desc.music_rn); } +int initialScene(int param, R_SCENE_INFO *scene_info) { + R_EVENT event; + R_EVENT *q_event; + int delay_time = 0; + static PALENTRY current_pal[R_PAL_ENTRIES]; + PALENTRY *pal; + + switch (param) { + case SCENE_BEGIN: + _vm->_music->stop(); + _vm->_sound->stopVoice(); + + // Fade palette to black from intro scene + GFX_GetCurrentPal(current_pal); + + event.type = R_CONTINUOUS_EVENT; + event.code = R_PAL_EVENT; + event.op = EVENT_PALTOBLACK; + event.time = 0; + event.duration = PALETTE_FADE_DURATION; + event.data = current_pal; + + delay_time += PALETTE_FADE_DURATION; + + q_event = EVENT_Queue(&event); + + // Activate user interface + event.type = R_ONESHOT_EVENT; + event.code = R_INTERFACE_EVENT; + event.op = EVENT_ACTIVATE; + event.time = 0; + + q_event = EVENT_Chain(q_event, &event); + + // Set first scene background w/o changing palette + event.type = R_ONESHOT_EVENT; + event.code = R_BG_EVENT; + event.op = EVENT_DISPLAY; + event.param = NO_SET_PALETTE; + event.time = 0; + + q_event = EVENT_Chain(q_event, &event); + + // Fade in to first scene background palette + SCENE_GetBGPal(&pal); + + event.type = R_CONTINUOUS_EVENT; + event.code = R_PAL_EVENT; + event.op = EVENT_BLACKTOPAL; + event.time = delay_time; + event.duration = PALETTE_FADE_DURATION; + event.data = pal; + + q_event = EVENT_Chain(q_event, &event); + + event.code = R_PALANIM_EVENT; + event.op = EVENT_CYCLESTART; + event.time = 0; + + q_event = EVENT_Chain(q_event, &event); + + _vm->_anim->setFlag(0, ANIM_LOOP); + _vm->_anim->play(0, delay_time); + + debug(0, "InitialSceneproc(): Scene started"); + break; + case SCENE_END: + break; + default: + warning("Illegal scene procedure parameter"); + break; + } + + return 0; +} + +int defaultScene(int param, R_SCENE_INFO *scene_info) { + R_EVENT event; + + switch (param) { + case SCENE_BEGIN: + // Set scene background + event.type = R_ONESHOT_EVENT; + event.code = R_BG_EVENT; + event.op = EVENT_DISPLAY; + event.param = SET_PALETTE; + event.time = 0; + + EVENT_Queue(&event); + + // Activate user interface + event.type = R_ONESHOT_EVENT; + event.code = R_INTERFACE_EVENT; + event.op = EVENT_ACTIVATE; + event.time = 0; + + EVENT_Queue(&event); + + // Begin palette cycle animation if present + event.type = R_ONESHOT_EVENT; + event.code = R_PALANIM_EVENT; + event.op = EVENT_CYCLESTART; + event.time = 0; + + EVENT_Queue(&event); + break; + case SCENE_END: + break; + default: + warning("Illegal scene procedure parameter"); + break; + } + + return 0; +} + } // End of namespace Saga |