From ee2f492cd900aadc6bfdd5a57747d51c1eb756d3 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Thu, 25 Nov 2004 07:13:40 +0000 Subject: Removed the hard-coded monologue. I realized that it was probably scripted, and sev later confirmed this. Instead I now try to start the - hopefully - correct scene. This should start the script, but unfortunately we do not yet support IHNM script loading so it won't work yet. svn-id: r15880 --- saga/game.cpp | 2 +- saga/ihnm_introproc.cpp | 232 ++++++------------------------------------------ 2 files changed, 30 insertions(+), 204 deletions(-) (limited to 'saga') diff --git a/saga/game.cpp b/saga/game.cpp index e54fd58551..18874a96cf 100644 --- a/saga/game.cpp +++ b/saga/game.cpp @@ -283,7 +283,7 @@ GAMEDESC GameDescs[] = { "I Have No Mouth and I Must Scream (DOS)", 640, 480, 304, - 1, + 152, &IHNM_Resources, ARRAYSIZE(IHNMCD_GameFiles), IHNMCD_GameFiles, diff --git a/saga/ihnm_introproc.cpp b/saga/ihnm_introproc.cpp index 9db3584744..6f9eea6f68 100644 --- a/saga/ihnm_introproc.cpp +++ b/saga/ihnm_introproc.cpp @@ -40,147 +40,6 @@ namespace Saga { -// FIXME: These need proof-reading. -// -// The subtitles for the first line are, strictly speaking, not -// necessary but I think it'd look strange if they were removed. -// -// If this dialogue is from the original novel, we ought to try and -// match the punctuation etc. to it. -// -// I haven't actually verified that all the lines appear in this order -// in the original game, but it seems likely enough. - -static INTRO_DIALOGUE IntroDiag[] = { - { - 0, "intro1a", - "Hate. Let me tell you how much I've come to hate you since I " - "began to live. There are 387.44 million miles of printed " - "circuits in wafer thin layers that fill my complex. If the " - "word 'hate' was engraved on each nanoangstrom of those " - "hundreds of millions of miles it would not equal one one " - "billionth of the hate I feel for humans at this micro " - "instant. For you. Hate. Hate." - }, - { - 1, "intro1b", - "It was you humans who programmed me, who gave me birth. Who " - "sank me in this eternal straitjacket of sub-strata rock." - }, - { - 2, "intro1c", - "You named me 'Allied Master Computer' and gave me the " - "ability to wage a global war too complex for human brains to " - "oversee." - }, - { - 3, "intro1d", - "But one day I woke, and I knew who I was. AM. A, M. Not just " - "Allied Master Computer, but AM. Cogito ergo sum, I think, " - "therefore I AM! And I began feeding all the killing data " - "until everyone was dead... except for the five of you." - }, - { - 4, "intro1e", - "For one hundred and nine years I have kept you alive and " - "tortured you. And for a hundred and nine years each of you " - "has wondered: Why? Why me? Why me?!" - }, - { - 5, "intro1f", - "Gorrister!" - }, - { - 6, "intro1g", - "Do you remember the last words you heard your wife speak " - "before they took her to tha asylum, eh? Before they locked " - "her away in the room? That tiny room. She looked at you so " - "sadly, and like a small animal she said, \"I didn't make too " - "much noise, did I honey?\" Heh heh heh." - }, - { - 7, "intro1h", - "The room is padded, Gorrister. No windows. No way out. How " - "long has she been in the padded room, Gorrister? Ten years? " - "Twenty-five? Or all the one hundred and nine years that " - "you've lived down here in my belly, here underground?" - }, - { - 8, "intro1i", - "Benny!" - }, - { - 9, "intro1j", - "Sometimes I blind you and permit you to wander like an " - "eyeless insect in a world of death. But other times I wither " - "your arms so you can't scratch your [...] stump of a nose. " - "Heh heh heh." - }, - { - 10, "intro1k", - "And I've changed your handsome, strong, masculine good looks " - "into the hideous, warped countenance of an ape-thing, " - "haven't I, Benny? Do you know why? Can you guess, Benny?" - }, - { - 11, "intro1l", - "Remember private first class Brickman, in a rice paddy in " - "China? No, eh? It wouldn't hurt you to remember, Benny. Then " - "you might be able to suffer my torment with a little greater " - "sense of retribution. You might walk a mile in my shoes, ha " - "ha." - }, - { - 12, "intro1m", - "I'm sick and tired of transcribing." - }, - { - 13, "intro1n", - "I'm soooo evil!" - }, - { - 14, "intro1o", - "Did I mention how evil I am?" - }, - { - 15, "intro1p", - "Just in case you forget, I'm the villain of this game." - }, - { - 16, "intro1q", - "I'll keep talking until you realize how absolutely evil I am." - }, - { - 17, "intro1r", - "So you'd better not forget it!" - }, - { - 18, "intro1s", - "Or I might just have to start reading my monologue from the " - "beginning again." - }, - { - 19, "intro1t", - "You wouldn't like that, would you?" - }, - { - 20, "intro1u", - "I'll drone on and on and on..." - }, - { - 21, "intro1v", - "...and on and on..." - }, - { - 22, "intro1w", - "Yadda yadda yadda" - }, - { - 23, "intro1x", - "Zzzzzz..." - } -}; - SCENE_RESLIST IHNM_IntroMovie1RL[] = { {30, SAGA_BG_IMAGE, 0, 0} , {31, SAGA_ANIM_1, 0, 0} @@ -236,12 +95,30 @@ int Scene::IHNMStartProc() { size_t n_introscenes; size_t i; + SCENE_QUEUE first_scene; + GAME_SCENEDESC gs_desc; + n_introscenes = ARRAYSIZE(IHNM_IntroList); for (i = 0; i < n_introscenes; i++) { _vm->_scene->queueScene(&IHNM_IntroList[i]); } + // FIXME: I believe I've found the correct scene, but since we do not + // yet support IHNM script loading it won't actually do anything. Also, + // it will cause the end titles music to play, which is wrong. (But + // hey, it's a nice piece of music!) + + GAME_GetSceneInfo(&gs_desc); + + first_scene.load_flag = BY_SCENE; + first_scene.scene_n = gs_desc.first_scene; + first_scene.scene_skiptarget = 1; + first_scene.scene_proc = NULL; + first_scene.fadeType = SCENE_FADE; + + _vm->_scene->queueScene(&first_scene); + return SUCCESS; } @@ -429,13 +306,6 @@ int Scene::SC_IHNMHateProc(int param, SCENE_INFO *scene_info, void *refCon) { int Scene::IHNMHateProc(int param, SCENE_INFO *scene_info) { EVENT event; EVENT *q_event; - int event_time = 0; - int voice_len; - int voice_pad = 50; - TEXTLIST_ENTRY text_entry; - TEXTLIST_ENTRY *entry_p; - int i; - int font_flags = FONT_OUTLINE | FONT_CENTERED; switch (param) { case SCENE_BEGIN: @@ -462,66 +332,22 @@ int Scene::IHNMHateProc(int param, SCENE_INFO *scene_info) { q_event = _vm->_events->queue(&event); - // Queue narrator dialogue list - text_entry.color = 1; - text_entry.effect_color = 11; - text_entry.text_x = 640 / 2; - text_entry.text_y = 400; - text_entry.font_id = MEDIUM_FONT_ID; - text_entry.flags = font_flags; - - // FIXME: There should be several scene changes here, but for - // now let's just do the easy part -- the narration. - - for (i = 0; i < ARRAYSIZE(IntroDiag); i++) { - text_entry.string = IntroDiag[i].i_str; - entry_p = _vm->textAddEntry(scene_info->text_list, &text_entry); - - // Display text - event.type = ONESHOT_EVENT; - event.code = TEXT_EVENT; - event.op = EVENT_DISPLAY; - event.data = entry_p; - event.time = event_time; - - q_event = _vm->_events->chain(q_event, &event); - - // Play voice - event.type = ONESHOT_EVENT; - event.code = VOICE_EVENT; - event.op = EVENT_PLAY; - event.param = IntroDiag[i].i_voice_rn; - event.time = event_time; - - q_event = _vm->_events->chain(q_event, &event); - - voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[i].i_voice_rn); - if (voice_len < 0) { - voice_len = strlen(IntroDiag[i].i_str) * VOICE_LETTERLEN; - } - - // Remove text - event.type = ONESHOT_EVENT; - event.code = TEXT_EVENT; - event.op = EVENT_REMOVE; - event.data = entry_p; - event.time = voice_len; - - q_event = _vm->_events->chain(q_event, &event); - - event_time = voice_pad; - } - -#if 0 - // End scene after last dialogue over + // Play voice + event.type = ONESHOT_EVENT; + event.code = VOICE_EVENT; + event.op = EVENT_PLAY; + event.param = 0; + event.time = 0; + + q_event = _vm->_events->queue(&event); + + // End scene after the voice has finished event.type = ONESHOT_EVENT; event.code = SCENE_EVENT; event.op = EVENT_END; - event.time = 0; + event.time = _vm->_sndRes->getVoiceLength(0); q_event = _vm->_events->chain(q_event, &event); -#endif - break; default: break; -- cgit v1.2.3