taisei/src/dialog/reimu.c
Andrei Alexeyev 51648b2f0d
stage1: implement boss appearing mid-dialogue
Also reflow the dialogue a bit
2020-03-04 22:26:51 +02:00

655 lines
20 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* This software is licensed under the terms of the MIT License.
* See COPYING for further information.
* ---
* Copyright (c) 2011-2019, Lukas Weber <laochailan@web.de>.
* Copyright (c) 2012-2019, Andrei Alexeyev <akari@taisei-project.org>.
*/
#include "taisei.h"
#include "dialog_macros.h"
/*
* Stage 1
*/
DIALOG_TASK(reimu, Stage1PreBoss) {
// Initialization, must be at the very top.
DIALOG_BEGIN(Stage1PreBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(cirno);
// Hide cirno for now, to be revealed later.
HIDE(cirno);
// "normal" is the default face.
// FACE(reimu, normal);
// FOCUS() to make an actor stand out.
// Focused actors are fully bright and appear in front of the rest.
// Only one actor can be focused at a time.
FOCUS(reimu);
// Lets wait a bit, then change Reimus expression.
// All timings are in frames (60 = 1 sec).
WAIT_SKIPPABLE(60);
FACE(reimu, unamused);
// MSG() makes the actor say a line, and then waits an unspecified amount of time (skippable).
// The timeout is determined by the dialog_util_estimate_wait_timeout_from_text() function in dialog.c
// MSG() also implies FOCUS()
MSG(reimu, "Unseasonable snow? I wonder if its that Secret God again…");
MSG(cirno, "Secret God?");
// EVENT()s are handled by stage code.
// You can find the list of events per dialogue in dialog_interface.h
// All of them should be signaled eventually.
EVENT(boss_appears);
// Wait until the boss slides in.
// WAIT() can not be skipped.
WAIT(30);
WAIT_SKIPPABLE(60);
// Reveal Cirnos portrait
SHOW(cirno);
MSG(cirno, "What, are you *that* impressed by my invincible magic?!");
FACE(reimu, sigh);
MSG(reimu, "Right, of course, I completely forgot about you from before.");
MSG(reimu, "I shouldve known.");
// Titles are not yet implemented, but this should work once they are.
// Right now this does nothing.
TITLE(cirno, "Cirno", "Thermodynamic Ice Fairy");
MSG(cirno, "Known better than to intrude on my secret lair!");
FACE(reimu, normal);
MSG(reimu, "Well, if youre excited, I guess something really is going on.");
MSG(reimu, "Id ask if youd just let me through, but…");
EVENT(music_changes);
FACE(cirno, angry);
MSG(cirno, "No way! Prepare to be chilled to the bone!");
// MSG_UNSKIPPABLE() is like MSG(), but cant be skipped and takes an explicit timeout.
//MSG_UNSKIPPABLE(cirno, 300, "You cant skip this one!");
// Teardown, must be at the very bottom.
DIALOG_END();
}
DIALOG_TASK(reimu, Stage1PostBoss) {
DIALOG_BEGIN(Stage1PostBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(cirno);
// VARIANT() changes the base body sprite.
// Bosses currently only have a "defeated" variant with some clothing damage, to be used in post-battle scenes.
// Ellys is called "beaten" and is slightly subdued.
VARIANT(cirno, defeated);
// Bosses also have a "defeated" face to go along with the variant, but all the other faces can be used as well.
// Its best to set the face to "defeated" in the beginning of a post-battle dialogue, and change it later if needed.
FACE(cirno, defeated);
SHOW(cirno);
FACE(reimu, happy);
MSG(cirno, "Cool down! I didnt mean it like that!");
MSG(reimu, "I did say you could just let me through, you know.");
MSG(cirno, "I dont remember that! You broke the rules! I wasnt ready yet…");
DIALOG_END();
}
/*
* Stage 2
*/
DIALOG_TASK(reimu, Stage2PreBoss) {
DIALOG_BEGIN(Stage2PreBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(hina);
HIDE(hina);
FOCUS(reimu);
WAIT_SKIPPABLE(60);
FACE(reimu, unamused);
MSG(reimu, "Hmm… the mountain is unusually quiet today.");
MSG(reimu, "With those annoyingly-talkative yōkai gone, it feels practically deserted.");
EVENT(boss_appears);
MSG_UNSKIPPABLE(hina, 180, "Ah yes, its Ms. Hakurei.");
SHOW(hina);
FACE(hina, normal);
MSG(hina, "I thought you might come.");
FACE(hina, concerned);
MSG(hina, "But once again, youre trying to go places you shouldnt.");
MSG(hina, "What a troubled girl…");
FACE(reimu, unamused);
MSG(reimu, "So much for deserted");
FACE(reimu, normal);
MSG(reimu, "Do you even know what youre protecting me from this time?");
TITLE(hina, "Kagiyama Hina", "Gyroscopic Pestilence God");
FACE(hina, normal);
MSG(hina, "You should know that Yōkai Mountain is especially dangeorus today.");
FACE(hina, concerned);
MSG(hina, "You ought to turn back now, my dear.");
FACE(reimu, unamused);
MSG(reimu, "(She… she completely ignored my question.)");
MSG(reimu, "Does it matter that the Gods asked me to come this time?");
EVENT(music_changes);
MSG(hina, "Dear, Im certain I know better than the mountain Gods.");
MSG(hina, "If you do not turn back immediately, Ill have to repel you by force.");
FACE(reimu, sigh);
MSG(reimu, "So annoying…");
DIALOG_END();
}
DIALOG_TASK(reimu, Stage2PostBoss) {
DIALOG_BEGIN(Stage2PostBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(hina);
WAIT(30);
VARIANT(hina, defeated);
FACE(hina, defeated);
FACE(reimu, normal);
MSG(hina, "So I lost… you can keep going then, I suppose.");
MSG(reimu, "You should know by now that I can handle it. Why are you being so overbearing?");
MSG(hina, "Just dont say I didnt warn you, when you inevitably get mauled by whatevers out there…");
FACE(reimu, sigh);
MSG(reimu, "(Ignored again…)");
DIALOG_END();
}
/*
* Stage 3
*/
DIALOG_TASK(reimu, Stage3PreBoss) {
DIALOG_BEGIN(Stage3PreBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(wriggle);
HIDE(wriggle);
FACE(reimu, normal);
MSG(reimu, "Ugh, what an unsettling feeling. Its giving me the creeps.");
MSG(reimu, "But aside from everyone being whipped up into a frenzy, I cant see anything abnormal yet.");
EVENT(boss_appears);
SHOW(wriggle);
MSG(wriggle, "Well, to your human eyes, insects may seem normal");
WAIT(60);
FACE(wriggle, proud);
MSG(wriggle, "… but there was a time when we ruled supreme!");
FACE(reimu, puzzled);
MSG(reimu, "Eh? You? Arent you a bit far from home?");
MSG(reimu, "Besides, ruled supreme? Ive never heard of insects ruling over Gensōkyō.");
TITLE(wriggle, "Wriggle Nightbug", "Insect Rights Activist");
FACE(wriggle, outraged);
MSG(wriggle, "Home? But youve intruded on my secret lair!");
FACE(reimu, sigh);
MSG(reimu, "Again with the secret lair");
FACE(wriggle, proud);
MSG(wriggle, "Havent you heard of the Car—…");
MSG(wriggle, "Carb—…");
MSG(wriggle, "That period of history?");
MSG(wriggle, "It was the greatest time, everyone shouldve heard of it!");
FACE(reimu, normal);
MSG(reimu, "Seems pretty far-fetched to me, honestly. But you yōkai are always coming up with the craziest theories…");
FACE(wriggle, outraged);
MSG(wriggle, "Dont lump giant insects with common yōkai!");
FACE(wriggle, proud);
MSG(wriggle, "Im going to restore us to our rightful glory of old!");
FACE(reimu, puzzled);
MSG(reimu, "Giant insects? But youre tiny.");
FACE(reimu, unamused);
MSG(reimu, "And I still dont know what you mean by glory of old.");
EVENT(music_changes);
MSG(wriggle, "You dont seem very educated about our history.");
MSG(wriggle, "So allow me to be your teacher!");
DIALOG_END();
}
DIALOG_TASK(reimu, Stage3PostBoss) {
DIALOG_BEGIN(Stage3PostBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(wriggle);
VARIANT(wriggle, defeated);
FACE(wriggle, defeated);
FACE(reimu, smug);
MSG(reimu, "Giant insects roaming Gensōkyō, huh?");
MSG(reimu, "Sounds like one of Sanaes nuclear experiments…");
MSG(wriggle, "B-but I saw it clearly… the fate of insectkind…");
FACE(reimu, normal);
MSG(reimu, "Dont you have a pretty sweet deal as it is, though?");
MSG(reimu, "You practically own Gensōkyōs forests.");
MSG(wriggle, "But cant we ever hope for more…?");
DIALOG_END();
}
/*
* Stage 4
*/
DIALOG_TASK(reimu, Stage4PreBoss) {
DIALOG_BEGIN(Stage4PreBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(kurumi);
HIDE(kurumi);
FACE(reimu, puzzled);
MSG(reimu, "Huh? Theres a mansion jutting out of this tower?");
FACE(reimu, sigh);
MSG(reimu, "This makes even less sense than usual.");
EVENT(boss_appears);
WAIT(30);
FACE(reimu, normal);
MSG(reimu, "And who are you supposed to be?");
SHOW(kurumi);
FACE(kurumi, tsun);
MSG(kurumi, "Oi, thats what I should be asking!");
FACE(reimu, puzzled);
MSG(reimu, "");
FACE(reimu, normal);
MSG(reimu, "And what are you doing, anyways?");
MSG(reimu, "Are you behind all these… strange thoughts everyones having?");
FACE(kurumi, normal);
TITLE(kurumi, "Kurumi", "High-Society Phlebotomist");
MSG(kurumi, "I have no idea what you mean by strange thoughts, but Ill be honest with you…");
MSG(kurumi, "Your clothing is giving me some strange thoughts!");
MSG(kurumi, "Whered you even get it, the trash?!");
FACE(reimu, unamused);
MSG(reimu, "Ugh, another prissy mansion-dweller.");
FACE(reimu, sigh);
MSG(reimu, "And to think I thought I remembered you from somewhere. Absolutely not.");
MSG(reimu, "Just… stop whatever it is youre doing, at once.");
FACE(kurumi, dissatisfied);
MSG(kurumi, "Once you get some fashion sense, maybe I will!");
FACE(reimu, unamused);
MSG(reimu, "… so you *are* behind this, huh?");
FACE(reimu, sigh);
MSG(reimu, "Havent you ever seen a shrine maiden before?");
FACE(kurumi, normal);
MSG(kurumi, "Youre a shrine maiden?");
MSG(kurumi, "More like… BAD maiden!");
FACE(reimu, unamused);
MSG(reimu, "T-this is what a shrine maiden wears. Its a uniform.");
MSG(kurumi, "Uniform? Are you kidding me?");
MSG(kurumi, "Ive seen a real shrine maiden before, and she didnt look anything like you!");
MSG(kurumi, "Whats with those patterns, anwyays? Its completely unorthodox!");
MSG(reimu, "… ARGH!");
//FACE(reimu, furious);
MSG(reimu, "Listen! Its HARD to find clothes I can wear every day on the job!");
MSG(reimu, "It has to fit a certain style! And only a few fabrics feel good to wear!");
FACE(reimu, unamused);
MSG(reimu, "I cant stand scratchy wool or slippery silk!");
MSG(reimu, "Everything else feels terrible again my skin—");
//FACE(reimu, furious);
MSG(reimu, "… damnit! Now Im all worked up!");
EVENT(music_changes);
MSG(reimu, "I hate prissy mansion dwellers!");
MSG(reimu, "Lets just get this over with!");
DIALOG_END();
}
DIALOG_TASK(reimu, Stage4PostBoss) {
DIALOG_BEGIN(Stage4PostBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(kurumi);
VARIANT(kurumi, defeated);
FACE(kurumi, defeated);
FACE(reimu, unamused);
MSG(reimu, "Thats what you get for insulting my outfit like that.");
MSG(kurumi, "Ouch ouch ouch…");
MSG(kurumi, "Wait, what happened?");
MSG(reimu, "What do you mean what happened?");
FACE(kurumi, normal);
MSG(kurumi, "Wait! Arent you that girl from a long while back?");
FACE(reimu, puzzled);
//FACE(reimu, unsettled);
MSG(reimu, "I dont remember you at all? Its just that unsettling feeling again…");
MSG(reimu, "So familiar…");
FACE(reimu, sigh);
MSG(reimu, "Its annoying, whatever it is. Make it stop, or tell me how to make it stop.");
FACE(kurumi, defeated);
MSG(kurumi, "(Ugh, her clothes really do suck though…)");
MSG(kurumi, "I was supposed to keep people out until my friend completed their plan…");
MSG(kurumi, "But then I started feeling weird and kept talking like I had no filter?");
MSG(kurumi, "It was kinda liberating but also made me really rude?!");
MSG(reimu, "(Just another victim…?)");
FACE(reimu, normal);
MSG(reimu, "Stick around. I want to talk to you after I settle this.");
DIALOG_END();
}
/*
* Stage 5
*/
DIALOG_TASK(reimu, Stage5PreBoss) {
DIALOG_BEGIN(Stage5PreBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(iku);
HIDE(iku);
FACE(reimu, puzzled);
//FACE(reimu, unsettled);
MSG(reimu, "Ive got a bad feeling about this…");
MSG(reimu, "Or maybe Im just feeling nauseous with this towers constant spinning.");
EVENT(boss_appears);
WAIT(60);
SHOW(iku);
FACE(iku, normal);
MSG(iku, "Perchance it a side effect of the towers presence?");
MSG(reimu, "What did you attack me for earlier?");
TITLE(iku, "Nagae Iku", "Fulminologist of the Heavens");
MSG(iku, "Ah, apologies. It must have been friendly fire.");
FACE(iku, eyes_closed);
MSG(iku, "Things are quite hectic here. I beg your understanding.");
MSG(iku, "It has been a while, has it not?");
FACE(reimu, normal);
MSG(reimu, "Err, right, yes, it has been a while.");
FACE(iku, serious);
MSG(iku, "To get straight to the point, this tower is unlike anything I have seen before.");
MSG(iku, "Since word spread through the clouds, Ive learned that the culprit is connected to parallel universes.");
FACE(reimu, puzzled);
MSG(reimu, "You mean like Otherworlds? Thats not too out of the ordinary these days though.");
//FACE(reimu, unsettled);
MSG(reimu, "This feels different though. Its like the walls are sucking up faith into a void.");
MSG(reimu, "Im surprised the fairies are surviving at all…");
FACE(reimu, normal);
MSG(reimu, "But what are you doing here? Arent you worried about being affected?");
FACE(iku, eyes_closed);
MSG(iku, "It is not just the Netherworld and Gensōkyō being affected.");
FACE(iku, serious);
MSG(iku, "In Bhava-agra, the Eldest Daughters personality has experienced some changes, too.");
FACE(reimu, surprised);
MSG(reimu, "Its spreading that fast?!");
FACE(iku, smile);
MSG(iku, "Initially, I had no plans towards interfering. I am not one to take the lead.");
FACE(iku, serious);
MSG(iku, "However, the towers psychological effects began to intensify, and…");
FACE(reimu, sigh);
MSG(reimu, "Do people have that little faith in me…?");
FACE(iku, eyes_closed);
MSG(iku, "As more minds began to fall prey, I considered a theory…");
MSG(iku, "Is this machine incompatible with the existence of fantasy?");
FACE(iku, normal);
MSG(iku, "That may be why you feel a sense of dread about the place.");
FACE(reimu, normal);
MSG(reimu, "Well, that settles it. Wheres the owner of this place?");
FACE(iku, smile);
MSG(iku, "To be frank, I am not sure whether you are up to the task.");
MSG(iku, "You are still relatively composed, yes, but your mental state seems to be deteriorating.");
FACE(reimu, unamused);
MSG(reimu, "I dont trust anyone else to get this done!");
EVENT(music_changes);
MSG(iku, "You are still so worrisome. You ought to go home before you lose yourself.");
//FACE(reimu, furious);
MSG(reimu, "No!");
FACE(iku, serious);
MSG(iku, "I beg your pardon?");
FACE(reimu, unamused);
MSG(reimu, "Dont keep telling me how little you think of me. Im sick of it!");
MSG(reimu, "Im going to give everyone a reason to have faith in me!");
MSG(iku, "It seems your resolve is unbreakable. Very well, then.");
MSG(iku, "Allow me to test your resistance to their infuriating machine!");
DIALOG_END();
}
DIALOG_TASK(reimu, Stage5PostMidBoss) {
DIALOG_BEGIN(Stage5PostMidBoss);
ACTOR_LEFT(reimu);
FACE(reimu, surprised);
// should be only one message with a fixed 120-frames timeout
MSG_UNSKIPPABLE(reimu, 120, "The oarfish? Whys SHE here?");
DIALOG_END();
}
DIALOG_TASK(reimu, Stage5PostBoss) {
DIALOG_BEGIN(Stage5PostBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(iku);
VARIANT(iku, defeated);
FACE(iku, defeated);
//FACE(reimu, unsettled);
FACE(reimu, sigh);
MSG(iku, "Ah…");
MSG(iku, "I was wrong for doubting you.");
MSG(reimu, "Somehow I dont feel too satisfied by that.");
FACE(iku, eyes_closed);
MSG(iku, "To be honest with you, Im glad you arrived after all.");
MSG(iku, "I know now that I would not have been able to defeat her.");
MSG(iku, "Since youre still able to think clearly, perhaps Gensōkyō will be saved after all.");
FACE(reimu, normal);
MSG(reimu, "But youre right. This is bigger than Gensōkyō.");
MSG(reimu, "Ill need to take this seriously.");
FACE(iku, normal);
MSG(iku, "Good. Keep climbing until you reach the top floor. You will undoubtedly meet her there.");
DIALOG_END();
}
/*
* Stage 6
*/
DIALOG_TASK(reimu, Stage6PreBoss) {
DIALOG_BEGIN(Stage6PreBoss);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(elly);
HIDE(elly);
EVENT(boss_appears);
MSG_UNSKIPPABLE(elly, 180, "Well, well, well. It seems a rat snuck into our tower.");
SHOW(elly);
//FACE(elly, smug);
MSG(elly, "How strange. You shouldve lost your mind by now.");
//FACE(reimu, unsettled);
FACE(reimu, unamused);
MSG(reimu, "I dont really care why youre doing this, just turn it off.");
TITLE(elly, "Elly", "The Theoretical Reaper");
FACE(elly, angry);
MSG(elly, "Bold of you to barge into MY tower and give ME orders!");
MSG(elly, "I still remember what you did to Lady Kazami and I back then!");
FACE(reimu, sigh);
MSG(reimu, "And what was that, again?");
MSG(reimu, "Im getting a familiar feeling just looking at you, but…");
FACE(elly, shouting);
MSG(elly, "Is this a joke?! Are you trying to mock me?!");
//FACE(reimu, outraged);
FACE(reimu, unamused);
MSG(reimu, "I think I wouldve remembered a giant tower that makes people go mad with power!");
MSG(reimu, "The least you can do when accusing someone is to tell them what theyve supposedly done!");
//FACE(elly, smug);
FACE(elly, normal);
MSG(elly, "Ah. I see.");
MSG(elly, "Fine. I will.");
MSG(elly, "This tower is a recent invention. Its mere existence is revolutionary in several scientific fields.");
MSG(elly, "The folks of this Gensōkyō ought to have been thankful for its vast scientific knowledge…");
MSG(elly, "But alas, we had other plans.");
FACE(reimu, unamused);
MSG(reimu, "Somehow, it feels like more of a punishment.");
MSG(reimu, "Ever heard of ignorance is bliss?");
MSG(reimu, "There wont be anyone to rule over, or whatever, if you make them all go off.");
MSG(elly, "The Tower of Babel is capable of enlightening those fortunate to be around it.");
MSG(elly, "Anyone unable to comprehend its brilliance will be driven to madness.");
FACE(elly, shouting);
MSG(elly, "But the residents of this Gensōkyō mean less than nothing to us! This is simply retribution!");
//FACE(reimu, unsettled);
FACE(reimu, normal);
MSG(reimu, "This Gensōkyō…?");
MSG(reimu, "Parallel universes, is that it? Like what Iku told me…");
FACE(elly, normal);
MSG(elly, "Hmm? Is that what this Gensōkyō is?");
FACE(reimu, unamused);
MSG(reimu, "You tell me! Youre the megalomaniac!");
MSG(reimu, "Do you hate me because some other Reimu did something? Is that it?!");
MSG(reimu, "But then what does that have to do with any of us?!");
MSG(reimu, "For a scientist, youre not making a whole lot of sense!");
FACE(elly, angry);
MSG(elly, "Perhaps youve simply forgotten, like you have of the rest of us!");
MSG(elly, "Only the privileged, such as Lady Kazami, made it out! The rest of us were lost!");
//FACE(reimu, unsettled);
FACE(reimu, normal);
MSG(reimu, "You mean Kazami Yūka? And I suppose… Alice, too?");
MSG(reimu, "I remember when I first met Alice, she made weird comments like you, too.");
FACE(reimu, unamused);
MSG(reimu, "But she didnt go around threatening everyone, did she?!");
FACE(elly, angry);
MSG(elly, "We werent as lucky! And as reparations, we will take control of this Gensōkyō!");
MSG(elly, "We will make it so we will NEVER be forgotten!");
FACE(reimu, sigh);
MSG(reimu, "Even in Gensōkyō, you can be forgotten, huh?");
MSG(reimu, "What a miserable thought. No wonder I felt terrible just seeing this place!");
MSG(reimu, "Turn it off, or being forgotten will be the least of your worries!");
EVENT(music_changes);
FACE(elly, shouting);
MSG(elly, "Its too late for that! Soon, all of Gensōkyō will become enlightened!");
MSG(elly, "Dont you understand, pitiful shrine maiden? Science is an unfathomable power, surpassed by nothing!");
MSG(elly, "We will subjugate this world at any cost!");
DIALOG_END();
}
DIALOG_TASK(reimu, Stage6PreFinal) {
DIALOG_BEGIN(Stage6PreFinal);
ACTOR_LEFT(reimu);
ACTOR_RIGHT(elly);
VARIANT(elly, beaten);
FACE(elly, shouting);
FACE(reimu, unamused);
MSG(reimu, "Is that it? Are you finally done?!");
MSG(elly, "Y-you think this is over?! The time of reckoning is upon you!");
MSG(elly, "Gaze upon the ultimate truth of the universe, and tremble!");
DIALOG_END();
}
/*
* Register the tasks
*/
#define EXPORT_DIALOG_TASKS_CHARACTER reimu
#include "export_dialog_tasks.inc.h"