diff options
Diffstat (limited to 'engines/saga/introproc_ite.cpp')
-rw-r--r-- | engines/saga/introproc_ite.cpp | 644 |
1 files changed, 126 insertions, 518 deletions
diff --git a/engines/saga/introproc_ite.cpp b/engines/saga/introproc_ite.cpp index 484ebe1779..3c10cbe1dd 100644 --- a/engines/saga/introproc_ite.cpp +++ b/engines/saga/introproc_ite.cpp @@ -8,12 +8,12 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -28,6 +28,7 @@ #include "saga/animation.h" #include "saga/events.h" #include "saga/font.h" +#include "saga/itedata.h" #include "saga/sndres.h" #include "saga/palanim.h" #include "saga/music.h" @@ -37,10 +38,15 @@ namespace Saga { -using Common::UNK_LANG; -using Common::EN_ANY; -using Common::DE_DEU; -using Common::IT_ITA; +#define INTRO_FRAMETIME 90 +#define INTRO_CAPTION_Y 170 +#define INTRO_DE_CAPTION_Y 160 +#define INTRO_IT_CAPTION_Y 160 +#define INTRO_VOICE_PAD 50 +#define INTRO_VOICE_LETTERLEN 90 + +#define DISSOLVE_DURATION 3000 +#define LOGO_DISSOLVE_DURATION 1000 // Intro scenes #define RID_ITE_INTRO_ANIM_SCENE 1538 @@ -53,9 +59,14 @@ using Common::IT_ITA; #define RID_ITE_FAIREPATH_SCENE 1564 #define RID_ITE_FAIRETENT_SCENE 1567 +// Intro scenes - DOS demo +#define RID_ITE_INTRO_ANIM_SCENE_DOS_DEMO 298 +#define RID_ITE_CAVE_SCENE_DOS_DEMO 302 +#define RID_ITE_VALLEY_SCENE_DOS_DEMO 310 + // ITE intro music -#define MUSIC_1 9 -#define MUSIC_2 10 +#define MUSIC_INTRO 9 +#define MUSIC_TITLE_THEME 10 LoadSceneParams ITE_IntroList[] = { {RID_ITE_INTRO_ANIM_SCENE, kLoadByResourceId, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, @@ -69,22 +80,24 @@ LoadSceneParams ITE_IntroList[] = { {RID_ITE_FAIRETENT_SCENE, kLoadByResourceId, Scene::SC_ITEIntroFaireTentProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE} }; -int Scene::ITEStartProc() { - size_t scenesCount; - size_t i; +LoadSceneParams ITE_DOS_Demo_IntroList[] = { + {RID_ITE_INTRO_ANIM_SCENE_DOS_DEMO, kLoadByResourceId, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_CAVE_SCENE_DOS_DEMO, kLoadByResourceId, Scene::SC_ITEIntroCaveDemoProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE}, + {RID_ITE_VALLEY_SCENE_DOS_DEMO, kLoadByResourceId, Scene::SC_ITEIntroValleyProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE}, +}; +int Scene::ITEStartProc() { LoadSceneParams firstScene; LoadSceneParams tempScene; + bool dosDemo = (_vm->getFeatures() & GF_ITE_DOS_DEMO); + int scenesCount = (!dosDemo) ? ARRAYSIZE(ITE_IntroList) : ARRAYSIZE(ITE_DOS_Demo_IntroList); - scenesCount = ARRAYSIZE(ITE_IntroList); - - for (i = 0; i < scenesCount; i++) { - tempScene = ITE_IntroList[i]; + for (int i = 0; i < scenesCount; i++) { + tempScene = (!dosDemo) ? ITE_IntroList[i] : ITE_DOS_Demo_IntroList[i]; tempScene.sceneDescriptor = _vm->_resource->convertResourceId(tempScene.sceneDescriptor); _vm->_scene->queueScene(tempScene); } - firstScene.loadFlag = kLoadBySceneNumber; firstScene.sceneDescriptor = _vm->getStartSceneNumber(); firstScene.sceneSkipTarget = true; @@ -98,11 +111,11 @@ int Scene::ITEStartProc() { return SUCCESS; } -EventColumns *Scene::ITEQueueDialogue(EventColumns *eventColumns, int n_dialogues, const IntroDialogue dialogue[]) { +EventColumns *Scene::queueIntroDialogue(EventColumns *eventColumns, int n_dialogues, const IntroDialogue dialogue[]) { TextListEntry textEntry; TextListEntry *entry; Event event; - int voice_len; + int voiceLength; int i; // Queue narrator dialogue list @@ -132,7 +145,7 @@ EventColumns *Scene::ITEQueueDialogue(EventColumns *eventColumns, int n_dialogue event.code = kTextEvent; event.op = kEventDisplay; event.data = entry; - event.time = (i == 0) ? 0 : VOICE_PAD; + event.time = (i == 0) ? 0 : INTRO_VOICE_PAD; eventColumns = _vm->_events->chain(eventColumns, event); } @@ -146,9 +159,10 @@ EventColumns *Scene::ITEQueueDialogue(EventColumns *eventColumns, int n_dialogue _vm->_events->chain(eventColumns, event); } - voice_len = _vm->_sndRes->getVoiceLength(dialogue[i].i_voice_rn); - if (voice_len < 0) { - voice_len = strlen(dialogue[i].i_str) * VOICE_LETTERLEN; + voiceLength = _vm->_sndRes->getVoiceLength(dialogue[i].i_voice_rn); + if (voiceLength < 0) { + // Set a default length if no speech file is present + voiceLength = strlen(dialogue[i].i_str) * INTRO_VOICE_LETTERLEN; } // Remove text @@ -156,31 +170,17 @@ EventColumns *Scene::ITEQueueDialogue(EventColumns *eventColumns, int n_dialogue event.code = kTextEvent; event.op = kEventRemove; event.data = entry; - event.time = voice_len; + event.time = voiceLength; _vm->_events->chain(eventColumns, event); } return eventColumns; } -enum { - kCHeader, - kCText -}; - -enum { - kITEPC = (1 << 0), - kITEPCCD = (1 << 1), - kITEMac = (1 << 2), - kITEWyrmKeep = (1 << 3), - kITEAny = 0xffff, - kITENotWyrmKeep = kITEAny & ~kITEWyrmKeep -}; - // Queue a page of credits text. The original interpreter did word-wrapping // automatically. We currently don't. -EventColumns *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits, const IntroCredit credits[]) { +EventColumns *Scene::queueCredits(int delta_time, int duration, int n_credits, const IntroCredit credits[]) { int game; Common::Language lang; bool hasWyrmkeepCredits = (Common::File::exists("credit3n.dlt") || // PC @@ -192,13 +192,13 @@ EventColumns *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits lang = _vm->getLanguage(); if (hasWyrmkeepCredits) - game = kITEWyrmKeep; + game = kITECreditsWyrmKeep; else if (_vm->getPlatform() == Common::kPlatformMacintosh) - game = kITEMac; + game = kITECreditsMac; else if (_vm->getFeatures() & GF_EXTRA_ITE_CREDITS) - game = kITEPCCD; + game = kITECreditsPCCD; else - game = kITEPC; + game = kITECreditsPC; int line_spacing = 0; int paragraph_spacing; @@ -209,7 +209,7 @@ EventColumns *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits int credits_height = 0; for (i = 0; i < n_credits; i++) { - if (credits[i].lang != lang && credits[i].lang != UNK_LANG) { + if (credits[i].lang != lang && credits[i].lang != Common::UNK_LANG) { continue; } @@ -218,12 +218,12 @@ EventColumns *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits } switch (credits[i].type) { - case kCHeader: + case kITECreditsHeader: font = kKnownFontSmall; line_spacing = 4; n_paragraphs++; break; - case kCText: + case kITECreditsText: font = kKnownFontMedium; line_spacing = 2; break; @@ -250,7 +250,7 @@ EventColumns *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits textEntry.point.x = 160; for (i = 0; i < n_credits; i++) { - if (credits[i].lang != lang && credits[i].lang != UNK_LANG) { + if (credits[i].lang != lang && credits[i].lang != Common::UNK_LANG) { continue; } @@ -259,12 +259,12 @@ EventColumns *Scene::ITEQueueCredits(int delta_time, int duration, int n_credits } switch (credits[i].type) { - case kCHeader: + case kITECreditsHeader: font = kKnownFontSmall; line_spacing = 4; y += paragraph_spacing; break; - case kCText: + case kITECreditsText: font = kKnownFontMedium; line_spacing = 2; break; @@ -328,7 +328,7 @@ int Scene::ITEIntroAnimProc(int param) { debug(3, "Intro animation procedure started."); debug(3, "Linking animation resources..."); - _vm->_anim->setFrameTime(0, ITE_INTRO_FRAMETIME); + _vm->_anim->setFrameTime(0, INTRO_FRAMETIME); // Link this scene's animation resources for continuous // playback @@ -355,13 +355,7 @@ int Scene::ITEIntroAnimProc(int param) { _vm->_events->chain(eventColumns, event); // Queue intro music playback - event.type = kEvTOneshot; - event.code = kMusicEvent; - event.param = MUSIC_1; - event.param2 = MUSIC_LOOP; - event.op = kEventPlay; - event.time = 0; - _vm->_events->chain(eventColumns, event); + _vm->_events->chainMusic(eventColumns, MUSIC_INTRO, true); } break; case SCENE_END: @@ -374,14 +368,11 @@ int Scene::ITEIntroAnimProc(int param) { return 0; } -int Scene::SC_ITEIntroCave1Proc(int param, void *refCon) { - return ((Scene *)refCon)->ITEIntroCave1Proc(param); -} - -// Handles first introductory cave painting scene -int Scene::ITEIntroCave1Proc(int param) { +int Scene::ITEIntroCaveCommonProc(int param, int caveScene) { Event event; - EventColumns *eventColumns; + EventColumns *eventColumns = NULL; + const IntroDialogue *dialogue; + int lang = 0; if (_vm->getLanguage() == Common::DE_DEU) @@ -389,202 +380,62 @@ int Scene::ITEIntroCave1Proc(int param) { else if (_vm->getLanguage() == Common::IT_ITA) lang = 2; - static const IntroDialogue dialogue[][4] = { - { { // English - 0, // cave voice 0 - "We see the sky, we see the land, we see the water, " - "and we wonder: Are we the only ones?" - }, - { - 1, // cave voice 1 - "Long before we came to exist, the humans ruled the " - "Earth." - }, - { - 2, // cave voice 2 - "They made marvelous things, and moved whole " - "mountains." - }, - { - 3, // cave voice 3 - "They knew the Secret of Flight, the Secret of " - "Happiness, and other secrets beyond our imagining." - } }, - // ----------------------------------------------------- - { { // German - 0, // cave voice 0 - "Um uns sind der Himmel, das Land und die Seen; und " - "wir fragen uns - sind wir die einzigen?" - }, - { - 1, // cave voice 1 - "Lange vor unserer Zeit herrschten die Menschen " - "\201ber die Erde." - }, - { - 2, // cave voice 2 - "Sie taten wundersame Dinge und versetzten ganze " - "Berge." - }, - { - 3, // cave voice 3 - "Sie kannten das Geheimnis des Fluges, das Geheimnis " - "der Fr\224hlichkeit und andere Geheimnisse, die " - "unsere Vorstellungskraft \201bersteigen." - } }, - // ----------------------------------------------------- - { { // Italian fan translation - 0, // cave voice 0 - "Guardiamo il cielo, guardiamo la terra, guardiamo " - "l'acqua, e ci chiediamo: Siamo forse soli?" - }, - { - 1, // cave voice 1 - "Molto tempo prima che noi esistessimo, gli Umani " - "dominavano la terra." - }, - { - 2, // cave voice 2 - "Fecero cose meravigliose, e mossero intere " - "montagne." - }, - { - 3, // cave voice 3 - "Conoscevano il Segreto del Volo, il Segreto della " - "Felicit\205, ed altri segreti oltre ogni nostra " - "immaginazione." - } } - }; - - int n_dialogues = ARRAYSIZE(dialogue[lang]); - - switch (param) { - case SCENE_BEGIN: - // Begin palette cycling animation for candles - event.type = kEvTOneshot; - event.code = kPalAnimEvent; - event.op = kEventCycleStart; - event.time = 0; - eventColumns = _vm->_events->queue(event); - - // Queue narrator dialogue list - ITEQueueDialogue(eventColumns, n_dialogues, dialogue[lang]); - - // End scene after last dialogue over - event.type = kEvTOneshot; - event.code = kSceneEvent; - event.op = kEventEnd; - event.time = VOICE_PAD; - _vm->_events->chain(eventColumns, event); + int n_dialogues = 0; + switch (caveScene) { + case 1: + n_dialogues = ARRAYSIZE(introDialogueCave1[lang]); + dialogue = introDialogueCave1[lang]; break; - case SCENE_END: + case 2: + n_dialogues = ARRAYSIZE(introDialogueCave2[lang]); + dialogue = introDialogueCave2[lang]; break; - - default: - warning("Illegal scene procedure parameter"); + case 3: + n_dialogues = ARRAYSIZE(introDialogueCave3[lang]); + dialogue = introDialogueCave3[lang]; break; + case 4: + n_dialogues = ARRAYSIZE(introDialogueCave4[lang]); + dialogue = introDialogueCave4[lang]; + break; + default: + error("Invalid cave scene"); } - return 0; -} - -int Scene::SC_ITEIntroCave2Proc(int param, void *refCon) { - return ((Scene *)refCon)->ITEIntroCave2Proc(param); -} - -// Handles second introductory cave painting scene -int Scene::ITEIntroCave2Proc(int param) { - Event event; - EventColumns *eventColumns; - int lang = 0; - - if (_vm->getLanguage() == Common::DE_DEU) - lang = 1; - else if (_vm->getLanguage() == Common::IT_ITA) - lang = 2; - - static const IntroDialogue dialogue[][3] = { - { { // English - 4, // cave voice 4 - "The humans also knew the Secret of Life, and they " - "used it to give us the Four Great Gifts:" - }, - { - 5, // cave voice 5 - "Thinking minds, feeling hearts, speaking mouths, and " - "reaching hands." - }, - { - 6, // cave voice 6 - "We are their children." - } }, - // ----------------------------------------------------- - { { // German - 4, // cave voice 4 - "Au$erdem kannten die Menschen das Geheimnis des " - "Lebens. Und sie nutzten es, um uns die vier gro$en " - "Geschenke zu geben -" - }, - { - 5, // cave voice 5 - "den denkenden Geist, das f\201hlende Herz, den " - "sprechenden Mund und die greifende Hand." - }, - { - 6, // cave voice 6 - "Wir sind ihre Kinder." - } }, - // ----------------------------------------------------- - { { // Italian fan translation - 4, // cave voice 4 - "Gli Umani conoscevano anche il Segreto della Vita, " - "e lo usarono per darci i Quattro Grandi Doni:" - - }, - { - 5, // cave voice 5 - "Il pensiero, le emozioni, la parola e la manualit\205." - - }, - { - 6, // cave voice 6 - "Siamo i loro figli." - } } - }; - - int n_dialogues = ARRAYSIZE(dialogue[lang]); - switch (param) { case SCENE_BEGIN: - // Start 'dissolve' transition to new scene background - event.type = kEvTContinuous; - event.code = kTransitionEvent; - event.op = kEventDissolve; - event.time = 0; - event.duration = DISSOLVE_DURATION; - eventColumns = _vm->_events->queue(event); + if (caveScene > 1) { + // Start 'dissolve' transition to new scene background + event.type = kEvTContinuous; + event.code = kTransitionEvent; + event.op = kEventDissolve; + event.time = 0; + event.duration = DISSOLVE_DURATION; + eventColumns = _vm->_events->queue(event); + } // Begin palette cycling animation for candles event.type = kEvTOneshot; event.code = kPalAnimEvent; event.op = kEventCycleStart; event.time = 0; - _vm->_events->chain(eventColumns, event); + eventColumns = _vm->_events->chain(eventColumns, event); // Queue narrator dialogue list - ITEQueueDialogue(eventColumns, n_dialogues, dialogue[lang]); + queueIntroDialogue(eventColumns, n_dialogues, dialogue); // End scene after last dialogue over event.type = kEvTOneshot; event.code = kSceneEvent; event.op = kEventEnd; - event.time = VOICE_PAD; + event.time = INTRO_VOICE_PAD; _vm->_events->chain(eventColumns, event); break; case SCENE_END: break; + default: warning("Illegal scene procedure parameter"); break; @@ -593,103 +444,41 @@ int Scene::ITEIntroCave2Proc(int param) { return 0; } -int Scene::SC_ITEIntroCave3Proc(int param, void *refCon) { - return ((Scene *)refCon)->ITEIntroCave3Proc(param); -} - -// Handles third introductory cave painting scene -int Scene::ITEIntroCave3Proc(int param) { +int Scene::ITEIntroCaveDemoProc(int param) { Event event; - EventColumns *eventColumns; - int lang = 0; - - if (_vm->getLanguage() == Common::DE_DEU) - lang = 1; - else if (_vm->getLanguage() == Common::IT_ITA) - lang = 2; - - static const IntroDialogue dialogue[][3] = { - { { // English - 7, // cave voice 7 - "They taught us how to use our hands, and how to " - "speak." - }, - { - 8, // cave voice 8 - "They showed us the joy of using our minds." - }, - { - 9, // cave voice 9 - "They loved us, and when we were ready, they surely " - "would have given us the Secret of Happiness." - } }, - // ----------------------------------------------------- - { { // German - 7, // cave voice 7 - "Sie lehrten uns zu sprechen und unsere H\204nde zu " - "benutzen." - }, - { - 8, // cave voice 8 - "Sie zeigten uns die Freude am Denken." - }, - { - 9, // cave voice 9 - "Sie liebten uns, und w\204ren wir bereit gewesen, " - "h\204tten sie uns sicherlich das Geheimnis der " - "Fr\224hlichkeit offenbart." - } }, - // ----------------------------------------------------- - { { // Italian fan translation - 7, // cave voice 7 - "Ci insegnarono come usare le mani e come parlare. " - - }, - { - 8, // cave voice 8 - "Ci mostrarono le gioie che l'uso della mente " - "pu\225 dare. " - }, - { - 9, // cave voice 9 - "Ci amarono, ed una volta pronti, ci avrebbero " - "sicuramente svelato il Segreto della Felicit\205." - - } } - }; - - int n_dialogues = ARRAYSIZE(dialogue[lang]); + EventColumns *eventColumns = NULL; switch (param) { case SCENE_BEGIN: - // Start 'dissolve' transition to new scene background - event.type = kEvTContinuous; - event.code = kTransitionEvent; - event.op = kEventDissolve; - event.time = 0; - event.duration = DISSOLVE_DURATION; - eventColumns = _vm->_events->queue(event); - // Begin palette cycling animation for candles event.type = kEvTOneshot; event.code = kPalAnimEvent; event.op = kEventCycleStart; event.time = 0; - _vm->_events->chain(eventColumns, event); + eventColumns = _vm->_events->chain(eventColumns, event); // Queue narrator dialogue list - ITEQueueDialogue(eventColumns, n_dialogues, dialogue[lang]); + for (int i = 0; i < 11; i++) { + // Play voice + event.type = kEvTOneshot; + event.code = kVoiceEvent; + event.op = kEventPlay; + event.param = i; + event.time = _vm->_sndRes->getVoiceLength(i); + _vm->_events->chain(eventColumns, event); + } // End scene after last dialogue over event.type = kEvTOneshot; event.code = kSceneEvent; event.op = kEventEnd; - event.time = VOICE_PAD; + event.time = INTRO_VOICE_PAD; _vm->_events->chain(eventColumns, event); break; case SCENE_END: break; + default: warning("Illegal scene procedure parameter"); break; @@ -698,122 +487,28 @@ int Scene::ITEIntroCave3Proc(int param) { return 0; } -int Scene::SC_ITEIntroCave4Proc(int param, void *refCon) { - return ((Scene *)refCon)->ITEIntroCave4Proc(param); +int Scene::SC_ITEIntroCaveDemoProc(int param, void *refCon) { + return ((Scene *)refCon)->ITEIntroCaveDemoProc(param); } -// Handles fourth introductory cave painting scene -int Scene::ITEIntroCave4Proc(int param) { - Event event; - EventColumns *eventColumns; - int lang = 0; - - if (_vm->getLanguage() == Common::DE_DEU) - lang = 1; - else if (_vm->getLanguage() == Common::IT_ITA) - lang = 2; - - static const IntroDialogue dialogue[][4] = { - { { // English - 10, // cave voice 10 - "And now we see the sky, the land, and the water that " - "we are heirs to, and we wonder: why did they leave?" - }, - { - 11, // cave voice 11 - "Do they live still, in the stars? In the oceans " - "depths? In the wind?" - }, - { - 12, // cave voice 12 - "We wonder, was their fate good or evil?" - }, - { - 13, // cave voice 13 - "And will we also share the same fate one day?" - } }, - // ----------------------------------------------------- - { { // German - 10, // cave voice 10 - "Und nun sehen wir den Himmel, das Land und die " - "Seen - unser Erbe. Und wir fragen uns - warum " - "verschwanden sie?" - }, - { - 11, // cave voice 11 - "Leben sie noch in den Sternen? In den Tiefen des " - "Ozeans? Im Wind?" - }, - { - 12, // cave voice 12 - "Wir fragen uns - war ihr Schicksal gut oder b\224se?" - }, - { - 13, // cave voice 13 - "Und wird uns eines Tages das gleiche Schicksal " - "ereilen?" - } }, - // ----------------------------------------------------- - { { // Italian fan translation - 10, // cave voice 10 - "Ed ora che guardiamo il cielo, la terra e l'acqua " - "che abbiamo ereditato, pensiamo: Perch\202 partirono?" - - }, - { - 11, // cave voice 11 - "Vivono ancora, nelle stelle? Nelle profondit\205 " - "dell'oceano? Nel vento?" - }, - { - 12, // cave voice 12 - "Ci domandiamo, il loro destino fu felice o nefasto?" - }, - { - 13, // cave voice 13 - "E un giorno, condivideremo anche noi lo stesso " - "destino?" - } } - }; - - int n_dialogues = ARRAYSIZE(dialogue[lang]); - - switch (param) { - case SCENE_BEGIN: - // Start 'dissolve' transition to new scene background - event.type = kEvTContinuous; - event.code = kTransitionEvent; - event.op = kEventDissolve; - event.time = 0; - event.duration = DISSOLVE_DURATION; - eventColumns = _vm->_events->queue(event); - - // Begin palette cycling animation for candles - event.type = kEvTOneshot; - event.code = kPalAnimEvent; - event.op = kEventCycleStart; - event.time = 0; - _vm->_events->chain(eventColumns, event); - - // Queue narrator dialogue list - ITEQueueDialogue(eventColumns, n_dialogues, dialogue[lang]); +// Handles first introductory cave painting scene +int Scene::SC_ITEIntroCave1Proc(int param, void *refCon) { + return ((Scene *)refCon)->ITEIntroCaveCommonProc(param, 1); +} - // End scene after last dialogue over - event.type = kEvTOneshot; - event.code = kSceneEvent; - event.op = kEventEnd; - event.time = VOICE_PAD; - _vm->_events->chain(eventColumns, event); +// Handles second introductory cave painting scene +int Scene::SC_ITEIntroCave2Proc(int param, void *refCon) { + return ((Scene *)refCon)->ITEIntroCaveCommonProc(param, 2); +} - break; - case SCENE_END: - break; - default: - warning("Illegal scene procedure parameter"); - break; - } +// Handles third introductory cave painting scene +int Scene::SC_ITEIntroCave3Proc(int param, void *refCon) { + return ((Scene *)refCon)->ITEIntroCaveCommonProc(param, 3); +} - return 0; +// Handles fourth introductory cave painting scene +int Scene::SC_ITEIntroCave4Proc(int param, void *refCon) { + return ((Scene *)refCon)->ITEIntroCaveCommonProc(param, 4); } int Scene::SC_ITEIntroValleyProc(int param, void *refCon) { @@ -825,23 +520,7 @@ int Scene::ITEIntroValleyProc(int param) { Event event; EventColumns *eventColumns; - static const IntroCredit credits[] = { - {EN_ANY, kITEAny, kCHeader, "Producer"}, - {DE_DEU, kITEAny, kCHeader, "Produzent"}, - {IT_ITA, kITEAny, kCHeader, "Produttore"}, - {UNK_LANG, kITEAny, kCText, "Walter Hochbrueckner"}, - {EN_ANY, kITEAny, kCHeader, "Executive Producer"}, - {DE_DEU, kITEAny, kCHeader, "Ausf\201hrender Produzent"}, - {IT_ITA, kITEAny, kCHeader, "Produttore Esecutivo"}, - {UNK_LANG, kITEAny, kCText, "Robert McNally"}, - {UNK_LANG, kITEWyrmKeep, kCHeader, "2nd Executive Producer"}, - {EN_ANY, kITENotWyrmKeep, kCHeader, "Publisher"}, - {DE_DEU, kITENotWyrmKeep, kCHeader, "Herausgeber"}, - {IT_ITA, kITENotWyrmKeep, kCHeader, "Editore"}, - {UNK_LANG, kITEAny, kCText, "Jon Van Caneghem"} - }; - - int n_credits = ARRAYSIZE(credits); + int n_credits = ARRAYSIZE(creditsValley); switch (param) { case SCENE_BEGIN: @@ -858,13 +537,7 @@ int Scene::ITEIntroValleyProc(int param) { // Begin ITE title theme music _vm->_music->stop(); - event.type = kEvTOneshot; - event.code = kMusicEvent; - event.param = MUSIC_2; - event.param2 = MUSIC_NORMAL; - event.op = kEventPlay; - event.time = 0; - _vm->_events->chain(eventColumns, event); + _vm->_events->chainMusic(eventColumns, MUSIC_TITLE_THEME); // Pause animation before logo event.type = kEvTOneshot; @@ -899,7 +572,7 @@ int Scene::ITEIntroValleyProc(int param) { _vm->_events->chain(eventColumns, event); // Queue game credits list - eventColumns = ITEQueueCredits(9000, CREDIT_DURATION1, n_credits, credits); + eventColumns = queueCredits(9000, CREDIT_DURATION1, n_credits, creditsValley); // End scene after credit display event.type = kEvTOneshot; @@ -928,47 +601,8 @@ int Scene::ITEIntroTreeHouseProc(int param) { Event event; EventColumns *eventColumns; - static const IntroCredit credits1[] = { - {EN_ANY, kITEAny, kCHeader, "Game Design"}, - {DE_DEU, kITEAny, kCHeader, "Spielentwurf"}, - {IT_ITA, kITEAny, kCHeader, "Progetto"}, - {UNK_LANG, kITEAny, kCText, "Talin, Joe Pearce, Robert McNally"}, - {EN_ANY, kITEAny, kCText, "and Carolly Hauksdottir"}, - {DE_DEU, kITEAny, kCText, "und Carolly Hauksdottir"}, - {IT_ITA, kITEAny, kCText, "e Carolly Hauksdottir"}, - {EN_ANY, kITEAny, kCHeader, "Screenplay and Dialog"}, - {EN_ANY, kITEAny, kCText, "Robert Leh, Len Wein, and Bill Rotsler"}, - {DE_DEU, kITEAny, kCHeader, "Geschichte und Dialoge"}, - {DE_DEU, kITEAny, kCText, "Robert Leh, Len Wein und Bill Rotsler"}, - {IT_ITA, kITEAny, kCHeader, "Sceneggiatura e Dialoghi"}, - {IT_ITA, kITEAny, kCText, "Robert Leh, Len Wein e Bill Rotsler"} - }; - - int n_credits1 = ARRAYSIZE(credits1); - - static const IntroCredit credits2[] = { - {UNK_LANG, kITEWyrmKeep, kCHeader, "Art Direction"}, - {UNK_LANG, kITEWyrmKeep, kCText, "Allison Hershey"}, - {EN_ANY, kITEAny, kCHeader, "Art"}, - {DE_DEU, kITEAny, kCHeader, "Grafiken"}, - {IT_ITA, kITEAny, kCHeader, "Grafica"}, - {UNK_LANG, kITEWyrmKeep, kCText, "Ed Lacabanne, Glenn Price, April Lee,"}, - {UNK_LANG, kITENotWyrmKeep, kCText, "Edward Lacabanne, Glenn Price, April Lee,"}, - {UNK_LANG, kITEWyrmKeep, kCText, "Lisa Sample, Brian Dowrick, Reed Waller,"}, - {EN_ANY, kITEWyrmKeep, kCText, "Allison Hershey and Talin"}, - {DE_DEU, kITEWyrmKeep, kCText, "Allison Hershey und Talin"}, - {IT_ITA, kITEWyrmKeep, kCText, "Allison Hershey e Talin"}, - {EN_ANY, kITENotWyrmKeep, kCText, "Lisa Iennaco, Brian Dowrick, Reed"}, - {EN_ANY, kITENotWyrmKeep, kCText, "Waller, Allison Hershey and Talin"}, - {DE_DEU, kITEAny, kCText, "Waller, Allison Hershey und Talin"}, - {IT_ITA, kITEAny, kCText, "Waller, Allison Hershey e Talin"}, - {EN_ANY, kITENotWyrmKeep, kCHeader, "Art Direction"}, - {DE_DEU, kITENotWyrmKeep, kCHeader, "Grafische Leitung"}, - {IT_ITA, kITENotWyrmKeep, kCHeader, "Direzione Grafica"}, - {UNK_LANG, kITENotWyrmKeep, kCText, "Allison Hershey"} - }; - - int n_credits2 = ARRAYSIZE(credits2); + int n_credits1 = ARRAYSIZE(creditsTreeHouse1); + int n_credits2 = ARRAYSIZE(creditsTreeHouse2); switch (param) { case SCENE_BEGIN: @@ -993,8 +627,8 @@ int Scene::ITEIntroTreeHouseProc(int param) { } // Queue game credits list - eventColumns = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1); - eventColumns = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2); + queueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, creditsTreeHouse1); + eventColumns = queueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, creditsTreeHouse2); // End scene after credit display event.type = kEvTOneshot; @@ -1023,34 +657,8 @@ int Scene::ITEIntroFairePathProc(int param) { Event event; EventColumns *eventColumns; - static const IntroCredit credits1[] = { - {EN_ANY, kITEAny, kCHeader, "Programming"}, - {DE_DEU, kITEAny, kCHeader, "Programmiert von"}, - {IT_ITA, kITEAny, kCHeader, "Programmazione"}, - {UNK_LANG, kITEAny, kCText, "Talin, Walter Hochbrueckner,"}, - {EN_ANY, kITEAny, kCText, "Joe Burks and Robert Wiggins"}, - {DE_DEU, kITEAny, kCText, "Joe Burks und Robert Wiggins"}, - {IT_ITA, kITEAny, kCText, "Joe Burks e Robert Wiggins"}, - {EN_ANY, kITEPCCD | kITEWyrmKeep, kCHeader, "Additional Programming"}, - {EN_ANY, kITEPCCD | kITEWyrmKeep, kCText, "John Bolton"}, - {UNK_LANG, kITEMac, kCHeader, "Macintosh Version"}, - {UNK_LANG, kITEMac, kCText, "Michael McNally and Robert McNally"}, - {EN_ANY, kITEAny, kCHeader, "Music and Sound"}, - {DE_DEU, kITEAny, kCHeader, "Musik und Sound"}, - {IT_ITA, kITEAny, kCHeader, "Musica e Sonoro"}, - {UNK_LANG, kITEAny, kCText, "Matt Nathan"} - }; - - int n_credits1 = ARRAYSIZE(credits1); - - static const IntroCredit credits2[] = { - {EN_ANY, kITEAny, kCHeader, "Directed by"}, - {DE_DEU, kITEAny, kCHeader, "Regie"}, - {IT_ITA, kITEAny, kCHeader, "Regia"}, - {UNK_LANG, kITEAny, kCText, "Talin"} - }; - - int n_credits2 = ARRAYSIZE(credits2); + int n_credits1 = ARRAYSIZE(creditsFairePath1); + int n_credits2 = ARRAYSIZE(creditsFairePath2); switch (param) { case SCENE_BEGIN: @@ -1073,8 +681,8 @@ int Scene::ITEIntroFairePathProc(int param) { _vm->_events->chain(eventColumns, event); // Queue game credits list - eventColumns = ITEQueueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, credits1); - eventColumns = ITEQueueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, credits2); + queueCredits(DISSOLVE_DURATION + 2000, CREDIT_DURATION1, n_credits1, creditsFairePath1); + eventColumns = queueCredits(DISSOLVE_DURATION + 7000, CREDIT_DURATION1, n_credits2, creditsFairePath2); // End scene after credit display event.type = kEvTOneshot; |