From a5a418a2aa2d886a11d1ecc1059ffb6644de802c Mon Sep 17 00:00:00 2001 From: dmyTRUEk <25669613+dmyTRUEk@users.noreply.github.com> Date: Fri, 8 Mar 2024 16:47:36 +0200 Subject: [PATCH] impl generators, add all quotes from "all characters" page --- .gitignore | 1 + Cargo.lock | 2 +- Cargo.toml | 2 +- data/characters.txt | 24 +- data/quotes.txt | 744 +++++++++++++++++++++++++++++ generate_enum.py | 131 +++-- generate_lib.py | 17 + generate_quotes.py | 123 +++++ src/characters.rs | 48 +- src/main.rs | 13 +- src/quote.rs | 6 +- src/quotes.rs | 1104 ++++++++++++++++++++++++++++++++++++++++++- 12 files changed, 2117 insertions(+), 98 deletions(-) create mode 100644 data/quotes.txt create mode 100644 generate_lib.py create mode 100644 generate_quotes.py diff --git a/.gitignore b/.gitignore index ea8c4bf..71757ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +/__pycache__ diff --git a/Cargo.lock b/Cargo.lock index e22804b..0c2a80f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,7 +10,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "gensoquote" -version = "0.0.0" +version = "0.1.0" dependencies = [ "rand", ] diff --git a/Cargo.toml b/Cargo.toml index c6ee40b..1858a24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gensoquote" -version = "0.0.0" +version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/data/characters.txt b/data/characters.txt index f4ad54a..e89bff2 100644 --- a/data/characters.txt +++ b/data/characters.txt @@ -5,6 +5,8 @@ Unknown // Protagonists Reimu Hakurei Marisa Kirisame +// this is tmp, 'll've to solve it somehow later +Marisa Kirisame and Alice Margatroid // // PC-98 @@ -42,6 +44,18 @@ Yumemi Okazaki //Multi //Mimi-Chan +// Lotus Land Story +Bewitching Lotus Flower +Orange +Kurumi +Dark Mirror +Elly +Hikariko +Yuuka Kazami +Mysterious Orb +Mugetsu +Gengetsu + // Mystic Square Wheel Demon Sara @@ -78,9 +92,9 @@ Letty Whiterock Chen Lily White Prismriver Sisters -//Lyrica Prismriver -//Lunasa Prismriver -//Merlin Prismriver +Lyrica Prismriver +Lunasa Prismriver +Merlin Prismriver Youmu Konpaku Yuyuko Saigyouji Ran Yakumo @@ -108,7 +122,8 @@ Fujiwara no Mokou Aya Shameimaru Medicine Melancholy Komachi Onozuka -Eiki Shiki Yamaxanadu +//Eiki Shiki Yamaxanadu +Eiki Shiki // // Windows 2nd Generation @@ -252,6 +267,7 @@ Marisa's unnamed father // Touhou Sangetsusei //Three Mischievous Fairies +Three Fairies of Light Luna Child Star Sapphire Sunny Milk diff --git a/data/quotes.txt b/data/quotes.txt new file mode 100644 index 0000000..4446320 --- /dev/null +++ b/data/quotes.txt @@ -0,0 +1,744 @@ +// src: https://en.touhouwiki.net/wiki/Characters + +// +// Protagonists +// + +Out of the generations of shrine maidens, her sense of danger is the most lacking and she has meager training, yet her power is considerable. +Hieda no Akyuu +Perfect Memento in Strict Sense +whom_about: Reimu Hakurei + +It ain't magic if it ain't flashy. Danmaku's all about firepower. +Marisa Kirisame +Perfect Memento in Strict Sense + +// +// PC-98 +// + +// Highly Responsive to Prayers +Oh, who cares about some cheap shrine in the middle of nowhere? My goal is to exact revenge on the entire human race. +Mima +Story of Eastern Wonderland, Stage 4 + +// the Story of Eastern Wonderland +I am Rika. Remember it from now on. If only you'd chased me when I ran before, you would've been crushed by the might of my Flying Tank, Evil Eye Σ!! +Rika +Story of Eastern Wonderland, Extra Stage + +It isn't you I want!! I want your power, you fool!! +Meira +Story of Eastern Wonderland, Stage 2 + +My power? What do you mean? +Reimu Hakurei +Story of Eastern Wonderland, Stage 2 + +// Phantasmagoria of Dim.Dream +Ah, only one person is left. It looks like my final enemy is a magic-user like me. I've gotta do my best! +Ellen +Phantasmagoria of Dim.Dream + +Hey, that was no big deal. Is the next one the last? And she's a shrine maiden, too. +Kotohime +Phantasmagoria of Dim.Dream + +There's only one person left. Huh, is that right! These people are no problem... +Kana Anaberal +Phantasmagoria of Dim.Dream + +This may look small, but it's a lethal weapon. If you value your life, you'll do as I say. +Chiyuri Kitashirakawa +Phantasmagoria of Dim.Dream + +That's right; I've finally found the beautiful power called 'magic' in this world. I won't settle for just observations anymore. I'm going to take you back as a test specimen, study that power, and then make it mine!! +Yumemi Okazaki +Phantasmagoria of Dim.Dream +whom_to: Reimu Hakurei + +// Lotus Land Story +Ahaha, you shouldn't underestimate me just because I'm the first stage boss! I'll bang, shoot, and pop your head off! +Orange +Lotus Land Story, Stage 1 + +Hmm, hang on. Didn't I just see you before? +Marisa Kirisame +Lotus Land Story, Stage 2 + +That's right! I'm the gatekeeper of the lake, Kurumi. Nice to meet you. +Kurumi +Lotus Land Story, Stage 2 + +This is the entrance to the mansion on the boundary between the Fantasy World and the real world... I'm the guardian here, Elly. +Elly +Lotus Land Story, Stage 3 + +Massacres are a kind of game, too. It doesn't matter whether it's humans or Makai residents +Yuuka Kazami +Mystic Square +whom_to: Shinki + +I'm Mugetsu. And this is my world. It seems like you just barged your way in, but... +Mugetsu +Lotus Land Story, Extra Stage + +Anyway, I'm Gengetsu, Mugetsu's older sister. I don't really know what's going on, but, since she left it to me, all I have to do is beat you, right? +Gengetsu +Lotus Land Story, Extra Stage + +// Mystic Square +You're a cocky one, aren't you? I wonder if we'll have to fight. +Sara +Mystic Square, Stage 1 +whom_to: Marisa Kirisame + +Well, Makai is a nice place, so why don't you relax and do some sightseeing while you're here? +Louise +Mystic Square, Stage 2 + +Oh well, it doesn't matter if you really are youkai or not. I have the grimoire you're looking for. I am the magician you're looking for. Whether you are youkai or not. YOU ARE MY ENEMIES! +Alice Margatroid +Strange and Bright Nature Deity Chapter 6 + +Hyaaa! +Three Fairies of Light +Strange and Bright Nature Deity Chapter 6 + +Why you little! ...... Now you've done it! I'm through playing around!! +Yuki +Mystic Square, Stage 4 + +Why don't you try a bit harder? +Mai +Mystic Square, Stage 4 + +I will, now that the dead weight is gone. I'll defeat you for sure!! +Mima +Mystic Square, Stage 4 + +You musn't dirty your hands dealing with this kind of person! I shall deal with her promptly, so please, step back, Lady Shinki. +Yumeko +Mystic Square, Stage 5 +whom_about: Yuuka Kazami +whom_to: Shinki + +Defeat me? How ridiculous!! A shrine maiden is nothing more than a dog of the gods. +Shinki +Mystic Square, Stage 6 +whom_to: Reimu Hakurei + +// Embodiment of Scarlet Devil +Is the person in front of me the edible kind? +Rumia +Embodiment of Scarlet Devil, Stage 1 + +Have you ever heard the saying good medicine tastes bad\"?\" +Reimu Hakurei +Embodiment of Scarlet Devil, Stage 1 + +Like I care! I'm the fairy who shall soon lord over Gensokyo! I can go anywhere and do anything I want! +Cirno +Hidden Star in Four Seasons, Stage 2 + +You are a little strong, but your power is still no match for mine! +Hong Meiling +Touhou Hisoutensoku + +Let's see... How to take out the black thing in front of me without having to do anything... +Patchouli Knowledge +Embodiment of Scarlet Devil +whom_to: Marisa Kirisame + +The only human who lives in the house where devils dwell and leader of the maids. A mysterious girl who works in a place that normal humans don't dare approach. Nobody had ever seen her before she started working at the mansion. +Hieda no Akyuu +Perfect Memento in Strict Sense + +Looks like it's going to be a fun night. +Remilia Scarlet +Embodiment of Scarlet Devil, Stage 6 + +Looks like it's going to be a long night. +Reimu Hakurei +Embodiment of Scarlet Devil, Stage 6 + +I just want to destroy the indestructible. Especially you, who no one else can destroy! Here I come! +Flandre Scarlet +Touhou Gouyoku Ibun +whom_to: Yuuma Toutetsu + +// Perfect Cherry Blossom +On top of that, there's a freaky flying maid coming towards me. +Letty Whiterock +Perfect Cherry Blossom +whom_to: Sakuya Izayoi + +Why not get put to sleep at an animal shelter? The Buddhist Paradise is warm, they say. +Sakuya Izayoi +Perfect Cherry Blossom, Stage 2 + +Humans? Posing a threat to us? Impossible, impossible, absolutely impossible! To think that you would oppose us... +Chen +Perfect Cherry Blossom, Stage 2 + +Rainbows are the bass sounds of this world. Exceeding the rainbows are illusionary sounds. That's where I come in. +Lyrica Prismriver +Phantasmagoria of Flower View + +Unwanted noise should be drowned out. +Lunasa Prismriver +Perfect Cherry Blossom, Stage 4 + +Alright, then. My good friend, would you kindly open this door? +Marisa Kirisame +Perfect Cherry Blossom, Stage 4 + +Won't you listen to just one song first, my good friend? +Merlin Prismriver +Perfect Cherry Blossom, Stage 4 + +The things that cannot be cut by my Roukanken, forged by youkai... are next to none! +Youmu Konpaku +Perfect Cherry Blossom, Stage 5 + +Just a little longer. A little longer and the Saigyou Ayakashi will be in full bloom... +Yuyuko Saigyouji +Perfect Cherry Blossom, Stage 6 + +Chen is my shikigami. She has recovered, and grown stronger than before. +Ran Yakumo +Perfect Cherry Blossom, Extra Stage + +... She was supposed to be strong? Wait, she's your shikigami? Aren't you a shikigami yourself? +Reimu Hakurei +Perfect Cherry Blossom, Extra Stage + +To start with, she is a youkai that you do not want to deal with. Even besides the fundamental issue of the danger of her ability, this youkai will appear anywhere unexpectedly, her character is lacking in human sentiment, and her behavioral principles are completely different from those of humans, to name a few of her issues. +Hieda no Akyuu +Perfect Memento in Strict Sense + +At any rate, with just a little more spring, the Saigyou Ayakashi will soon reach full bloom. The small trace of spring that you've brought here... will give us the last step needed. +Youmu Konpaku +Perfect Cherry Blossom, Stage 5 + +// Immaterial and Missing Power +I've been watching all of you this whole time. You all responded to my 'foregathering ability' without noticing, and came to these feasts. Do you know what this means? It means none of you can defeat me. +Suika Ibuki +Immaterial and Missing Power + +// Imperishable Night +They say a half-inch bug has only one-tenth an inch of soul. +Sakuya Izayoi +Imperishable Night, Stage 1 + +That's 80% smaller. +Remilia Scarlet +Imperishable Night, Stage 1 + +There's no human that doesn't fear me on night roads. If I wanted, I could call enough youkai here to eradicate every human in this land. +Mystia Lorelei +Imperishable Night, Stage 2 +whom_to: Marisa Kirisame and Alice Margatroid + +I've been waiting. You've got some guts, challenging me on the night of the full moon. I won't let you lay one finger on that human! +Keine Kamishirasawa +Imperishable Night, Extra Stage + +Wait a second, hold it right there. Do I look like a rabbit that would try to trick people~? +Tewi Inaba +Phantasmagoria of Flower View Episode 8 + +You really do. It is said that although the rabbit is supposed to cross the river, it tricked and crossed the shark. +Komachi Onozuka +Phantasmagoria of Flower View Episode 8 + +You're too late. I've sealed all the doors. You can't take the princess away now, can you? +Reisen Udongein Inaba +Imperishable Night, Stage 5 + +Young children like yourself can't stand a chance against me, an eternal being. All the scarlet history that you've built up--- Divided by my history, the result is zero. From eternity's point of view, you are but a mere instant. +Eirin Yagokoro +Imperishable Night, Stage 6 + +The human body houses a fragile, round soul. What those humans live on is a huge, round orb below. And, what the superior people live on... is that lunatic orb behind me. +Kaguya Houraisan +Imperishable Night, Stage 6 + +I can't die, but I can't keep fighting like this. My body hurts all over. +Fujiwara no Mokou +Imperishable Night, Extra Stage + +// Phantasmagoria of Flower View +You don't seem related to the incident, so without further ado, allow me to blow you into the next week! +Aya Shameimaru +Hidden Star in Four Seasons, Stage 1 +whom_to: Eternity Larva + +It's not good spreading the smell of poison so much. It'll make others want to run. +Yuuka Kazami +Phantasmagoria of Flower View Episode 7 + +Poison? Oh, poison. It's my life. That won't change. +Medicine Melancholy +Phantasmagoria of Flower View Episode 7 + +Well, usherin' souls over is out of my jurisdiction. I'm just a humble ferryman. +Komachi Onozuka +Scarlet Weather Rhapsody, Stage 6 + +You bear a large sin. You abandoned your allies, leaving them to die, while you're the only one here living happily. That's right, you're a bit too selfish. +Eiki Shiki +Phantasmagoria of Flower View Reisen's Scenario + +... +Reisen Udongein Inaba +Phantasmagoria of Flower View Reisen's Scenario + +// +// Windows 2nd Generation +// + +// Mountain of Faith +I'm just one amongst the multitudes of gods. There are many more here just like me. +Minoriko Aki +Mountain of Faith, Stage 1 + +I'm sure we've met before, but I'm just here to gather misfortune, now. +Hina Kagiyama +Mountain of Faith, Stage 2 + +Hey human. Kappa and humans have been sworn friends since ancient times, so let me tell you something. +Nitori Kawashiro +Mountain of Faith, Stage 3 + +Sworn friends? Are you sure you haven't mistaken an old enemy for a friend? +Reimu Hakurei +Mountain of Faith, Stage 3 + +I'm Sanae, a wind priestess, descendent of a long-forgotten line of gods incarnate in the outside world. Sometimes, humans that revere a god are themselves revered. Sometimes, shrine maidens can become gods. Since you're a shrine maiden, are you prepared for such things to happen? +Sanae Kochiya +Mountain of Faith, Stage 5 + +I don't care if I become a god or not. But if you say you want a fight, you'd better be ready for one! +Reimu Hakurei +Mountain of Faith, Stage 5 + +A god must eliminate all who oppose their struggle for faith, one by one. +Kanako Yasaka +Mountain of Faith, Stage 6 + +Pay more respect to the earth. Otherwise, who knows? You might even get cursed. Heh heh. +Suwako Moriya +Touhou Hisoutensoku + +// Scarlet Weather Rhapsody +Getting straight to the point, an earthquake is going to occur. +Iku Nagae +Scarlet Weather Rhapsody, Stage 3 + +I know, if you've nothing to do how about killing some time with me? +Tenshi Hinanawi +Scarlet Weather Rhapsody, Stage 1 + +You're the one with too much time on your hands, you know. +Yuyuko Saigyouji +Scarlet Weather Rhapsody, Stage 1 + +// Subterranean Animism +I'll show you how great the power of the youkai who were banished underground is! +Yamame Kurodani +Subterranean Animism, Stage 1 + +I don't have anything against you, but I can make up lots of reasons to attack you. +Parsee Mizuhashi +Subterranean Animism, Stage 2 + +Ahahahaha! Why would we want to do that now? This place may have been Hell once, but now it's our paradise. We're even thankful for the sages above ground. They won't let anyone come bother us here. But more importantly, you! You're strong for a human, And it looks like you know Suika, too. I haven't been this excited in a long time! +Yuugi Hoshiguma +Subterranean Animism, Stage 3 +whom_to: Reimu Hakurei + +Here's where it really begins. Now, sleep with this trauma that will leave you sleepless! +Satori Komeiji +Subterranean Animism + +If I kill you, human, my hellfire cart will get heavy~♪ Man, carrying off corpses is fun! +Rin Kaenbyou +Subterranean Animism, Stage 5 +whom_to: Reimu Hakurei + +Lord Yatagarasu, the Black Sun. Thank you for giving me your power. The sunlight that rains down on the Earth is a nuclear furnace that will create new atoms. My ultimate nuclear fusion will burn up every body, heart, phantom, and fairy! +Utsuho Reiuji +Subterranean Animism, Stage 6 + +// *^_^* +Read your mind? I've already closed my satori eye. Reading people's minds only makes you depressed, there's nothing good about it. +Koishi Komeiji +Subterranean Animism, Extra Stage +whom_to: Reimu Hakurei + +// Undefined Fantastic Object +My mice do like the taste of human flesh. They say that cheese just can't compare to certain other red foods. +Nazrin +Undefined Fantastic Object, Stage 1 + +Booooo! Did that surprise you? +Kogasa Tatara +Undefined Fantastic Object, Stage 2 + +If you're collecting the floating treasure, then you're trying to revive my sister too, right? +Ichirin Kumoi +Undefined Fantastic Object, Stage 3 + +I'm headed towards a completely submerged and sorrowful hell. Those who can't make use of the water would just get in my way. Even if it's Lady Hijiri. +Minamitsu Murasa +Touhou Gouyoku Ibun, Stage 2 + +Just a simple enemy ... ... Still, even if you are an enemy, there's no denying that you were chosen by the treasure. However, if you've chosen to follow the wrong path ... Then I'll have you bow down before this pagoda of Bishamonten! +Shou Toramaru +Undefined Fantastic Object, Stage 5 + +Hmph, you should have said that from the start. After all, I'll beat anyone who's a friend to youkai! +Reimu Hakurei +Undefined Fantastic Object, Stage 6 + +Humans haven't changed since my days in the temple. How weak and rash you are! Now, namusan ―― ! +Byakuren Hijiri +Undefined Fantastic Object, Stage 6 + +Oh, I found the mysterious shining thing! Is this really an alien encounter? +Sanae Kochiya +Undefined Fantastic Object, Extra Stage + +What's an alien? +Nue Houjuu +Undefined Fantastic Object, Extra Stage + +// Touhou Hisoutensoku + +// Double Spoiler +The kappas were the ones who made my camera, y'know~ They can be kinda rude, but they're really good at high-tech stuff. +Hatate Himekaidou +Double Spoiler Level 4 + +// Ten Desires +An echo spirit, huh? So all you do is parrot things back? +Marisa Kirisame +Ten Desires, Stage 2 + +That is all I do, so don't tease me about it. +Kyouko Kasodani +Ten Desires, Stage 2 + +Rotten as I may be, I'm a jiang shi. Right! I remembered! We were revived to protect the mausoleum! +Yoshika Miyako +Ten Desires, Stage 4 + +My faithful servant. Go eradicate the one who would deny this resurrection! +Seiga Kaku +Ten Desires, Stage 4 + +Mmph, your body is covered with the stench of death. +Youmu Konpaku +Ten Desires, Stage 5 + +Aye, for I art no longer among the living. We are of a like kind, are we not? Art thou not also a shikaisen? +Mononobe no Futo +Ten Desires, Stage 5 + +Two beings revived to eternal life must join together in combat, and join together in study of the Tao! Now, try to defeat me! And I will be resurrected as a statesman of eternal life! +Toyosatomimi no Miko +Ten Desires, Stage 6 + +I once had enough power to hold sway over one third (of the tanuki) of Japan. But perhaps that's a thing of the past, now. To think I lost to a human like this... +Mamizou Futatsuiwa +Ten Desires, Extra Stage + +// Hopeless Masquerade +Since I had to memorize emotions logically, I got good at reading the emotions of others. +Hata no Kokoro +Antinomy of Common Flowers, Stage 3 + +// +// Windows 3rd Generation +// + +// Double Dealing Character +Oh, a mermaid? Is that all? You're just a small fry. +Reimu Hakurei +Double Dealing Character, Stage 1 + +It's been ages since anyone took us seriously. It's about time for us youkai to flourish! +Wakasagihime +Double Dealing Character, Stage 1 + +I'll make you too scared to walk around, day or night! +Sekibanki +Double Dealing Character, Stage 2 + +You've come to exterminate me, haven't you? +Kagerou Imaizumi +Double Dealing Character, Stage 3 + +All the other tools like me have gained power. We've behaved ourselves so far, but it'll be our era from now on. +Benben Tsukumo +Double Dealing Character, Stage 4 + +Let the soul repose performance begin! +Yatsuhashi Tsukumo +Double Dealing Character, Extra Stage + +Okay, that does it! This isn't the time to run away or hide, I'll make enemies out of them all! +Seija Kijin +Impossible Spell Card, 8th Day + +Someone like you, who was born into power, wouldn't know the joy of finally obtaining it. However, if you look at your purification rod, you can see that you feel hesitation. I have the power of dreams here in my hand.This is our treasure, the Miracle Mallet! +Shinmyoumaru Sukuna +Double Dealing Character, Stage 6 +whom_to: Reimu Hakurei + +I have obtained the magic to become independent. I no longer require the powers of the Miracle Mallet. +Raiko Horikawa +Double Dealing Character, Extra Stage + +// Urban Legend in Limbo +You shouldn't underestimate humans these days. One can find just about anything by searching on the net, after all! +Sumireko Usami +Urban Legend in Limbo. Kasen's scenario + +// Legacy of Lunatic Kingdom +This is Seiran. I've made contact with a belligerent earthling. Now proceeding with purification. +Seiran +Legacy of Lunatic Kingdom, Stage 1 + +Ahh, there are some pretty strong people on Earth, huh? You've got all sorts of food, too. I wish I had been born on Earth... +Ringo +Legacy of Lunatic Kingdom, Stage 2 + +Every time you dream, you've visited Gensokyo. Normally what's happening is that you expel your dream self, which is then taken over by your real self. By being in the Dream World, you're currently an irregularity. +Doremy Sweet +Antinomy of Common Flowers, Stage 3 + +I am Sagume, a being who can change the world's course with my words. Now that I've gone and talked about it, fate will begin to change again. +Sagume Kishin +Legacy of Lunatic Kingdom, Stage 4 + +Kyahahahaha! Something real interesting is going on~! Hey, fairies! Let's crank up the speed! It's lunatic tiiiime! Welcome to a world of madness! +Clownpiece +Legacy of Lunatic Kingdom, Stage 5 + +Though she now lives on another heavenly body, and I am unable to meet with her... Even if we are unable to dwell together under Heaven, my hatred alone will be refined. Now, show me! Just what an earthling risking her life is capable of! And behold! This pristine spiritual force that rejects life and death! +Junko +Legacy of Lunatic Kingdom, Stage 6 +whom_to: Reimu Hakurei + +So what are we going with? Two on one? Or should I call in my other two selves and make it four on one? +Hecatia Lapislazuli +Legacy of Lunatic Kingdom, Extra Stage + +// Antinomy of Common Flowers +Maybe you'd be happier slipping into the crowd and then, I dunno, dropping dead? +Joon Yorigami +Antinomy of Common Flowers Yukari's Scenario + +I've never been serious about this until now. If I let it all out, everyone will be unlucky, including me! But I've had enough. Who cares about winning or losing? When I'm done here, we'll all be losers. The shrine maiden, me, and you too, Joon! +Shion Yorigami +Antinomy of Common Flowers Yukari's scenario + +// Hidden Star in Four Seasons +Come on! Get some exercise, and taste this summer heat with your whole body! +Eternity Larva +Hidden Star in Four Seasons, Stage 1 + +Oh, sorry about that. I'm Marisa the magician. I'm not sure why, but it seems like the season around this one area has turned into autumn? +Marisa Kirisame +Hidden Star in Four Seasons, Stage 2 + +I don't know nothin' 'bout that. More importantly, you should git outta here. If you stick around here any longer, I'll slice you open an' sun-dry you! +Nemuno Sakata +Hidden Star in Four Seasons, Stage 2 + +I've been protecting shrines and temples from simple enemies all the time until now. It's, like, volunteer work? +Aunn Komano +Hidden Star in Four Seasons, Stage 3 + +Huh, I see. I hadn't noticed at all. I'm sorry. +Reimu Hakurei +Hidden Star in Four Seasons, Stage 3 + +My, what's going on? I'm practically overflowing with magic power... I've just got to try this out on the human in front of me! +Narumi Yatadera +Hidden Star in Four Seasons, Stage 4 + +Now, this might be a bit sudden, but let's start your test! +Satono Nishida +Hidden Star in Four Seasons, Stage 5 + +Test? What are you even talking about? +Reimu Hakurei +Hidden Star in Four Seasons, Stage 5 + +Now, if you're too weak, our Master will get real mad at us... +Satono Nishida +Hidden Star in Four Seasons, Stage 5 +whom_to: Reimu Hakurei + +So you'd better give us all you've got! If you die, welp, that's the end of that! +Mai Teireida +Hidden Star in Four Seasons, Stage 5 +whom_to: Reimu Hakurei + +Clownpiece, was it? Tell the big shots of hell that... Be sure to let them know. Gensokyo is home to a terrifying secret god. Got that? +Okina Matara +Visionary Fairies in Shrine Chapter 15 +whom_to: Clownpiece + +// Wily Beast and Weakest Creature +How dare you mock the art of stone-stacking! Unforgivable! Dieee! +Eika Ebisu +Wily Beast and Weakest Creature, Stage 1 + +I'm an ushi-oni. I live by the River. If you want to turn back now, I can send you home safely... +Urumi Ushizaki +Wily Beast and Weakest Creature, Stage 2 + +So you're already familiar with me. Let's get straight to the point, then. I shall hereby test whether you are capable of surviving Hell. +Kutaka Niwatari +Wily Beast and Weakest Creature, Stage 3 + +I am the leader of the Kiketsu family. Do you really need any further explanation? +Yachie Kicchou +Wily Beast and Weakest Creature, Stage 4 + +Huh? What the...? Now that I think about it, I feel like I never had any questions... +Reimu Hakurei +Wily Beast and Weakest Creature, Stage 4 + +That aura I feel from you... Could you be a wolf spirit? To think that a wolf would be smart enough to rely on a living human... +Mayumi Joutouguu +Wily Beast and Weakest Creature, Stage 5 + +You built up this whole plan, and now you flee in the face of the enemy...! Truly the height of idiocy. Don't think for a second that I'll let you escape after you violated my sacred territory to this extent. I'll destroy your body of flesh, and build you anew from soil and water! You shall be an idol without a single flaw, told of for ages and ages to come! +Keiki Haniyasushin +Wily Beast and Weakest Creature, Stage 6 + +Your power, swiftness, bravery and knowledge in facing down danmaku... All in perfect balance! I-I'm moved! +Saki Kurokoma +Wily Beast and Weakest Creature, Extra Stage + +// Touhou Gouyoku Ibun +Seriously? This is what petroleum is? +Joon Yorigami +Sunken Fossil World Joon and Shion's Scenario + +Yep, absolutely. In the Outside World, they even use tons of the stuff while knowing full well what it is! Petroleum has always been produced from organic beings. This liquid has always been made from the fear, pleasure, grief, loathing, and resentment of living creatures! Now get out of here, you pair of eternal poors! +Yuuma Toutetsu +Sunken Fossil World Joon and Shion's Scenario + +// Unconnected Marketeers +Those cards are dangerous items. They sure ain't cat toys, I can tell you that much. +Marisa Kirisame +Unconnected Marketeers, Stage 1 + +Hmph! You might say that... but you want 'em too, don'tcha? And they're not dangerous or anything. I mean, everyone's collecting 'em! +Mike Goutokuji +Unconnected Marketeers, Stage 1 + +Pretty lucky for me to have found someone with cards on 'em this quick. +Marisa Kirisame +Unconnected Marketeers, Stage 2 + +Cards, eh...? I guess you've been sniffing around for them after all. These are too much for you puny little humans to handle! Begone from our mountain! +Takane Yamashiro +Unconnected Marketeers, Stage 2 + +What are these cards? Who's making 'em? +Marisa Kirisame +Unconnected Marketeers, Stage 3 + +...You don't need to know about that. Uh, actually, I don't know either. It's not somethin' I need to do business, after all. +Sannyo Komakusa +Unconnected Marketeers, Stage 3 + +Splendid! To think that the Yin-Yang Orb that I crafted has been mastered to such a degree. It is an honor to the Tamatsukuri-be. +Misumaru Tamatsukuri +Unconnected Marketeers, Stage 4 + +When you betray someone, you don't do it with your own hands. A wonderful idea, in my opinion. +Tsukasa Kudamaki +Unconnected Marketeers, Stage 5 +whom_to: Megumu Iizunamaru + +The Ability Cards? I don't just 'know' about them. I created them, as a matter of fact! +Megumu Iizunamaru +Unconnected Marketeers, Stage 5 + +You foul barbarian... How long are you going to believe that you can use violence to hold dominion over objects? Possession of an object can only be controlled by the god of the markets. As long as they possess something, none can escape from the hands of God! The market has been opened! Let us return all things to nothing! +Chimata Tenkyuu +Unconnected Marketeers, Stage 6 + +Tremble in joy! The mountain shall be your grave! +Momoyo Himemushi +Unconnected Marketeers, Extra Stage + +// Unfinished Dream of All Living Ghost + +// +// Print Works +// + +// Touhou Kourindou + +// Touhou Sangetsusei +Sorry to say, but the night is my specialty. This is where your advance ends! +Luna Child +Fairy Wars, Stage 3 + +// Touhou Bougetsushou +As the leader of the moon's emissaries, I'll have to act with maximum beauty. +Watatsuki no Yorihime +Silent Sinner in Blue Chapter 13 + +My mortal enemy, Chang'e. Are you watching!? Look at the numerous lives and deaths, the impurities, this poor soul brings! +Junko +Legacy of Lunatic Kingdom, Stage 6 +whom_to: Marisa Kirisame + +// Touhou Ibarakasen +Do you think that classical, behind-the-times youkai like yourselves can stand up to this era's humans and their collective knowledge? +Sumireko Usami +Urban Legend in Limbo Kasen's scenario + +Humans truly have become foolish. Have you forgotten the enigmatic terror of the youkai? Have you forgotten the mind-numbing darkness of the night? +Kasen Ibaraki +Urban Legend in Limbo Kasen's scenario + +// Touhou Suzunaan +Miss Reimu's been keeping an eye on me? +Kosuzu Motoori +Forbidden Scrollery Chapter 49 + +Indeed. As you're well aware, she's a human who specializes in youkai extermination. She especially hates it when humans admire youkai the way you do. +Yukari Yakumo +Forbidden Scrollery Chapter 49 + +// Touhou Chireikiden +Ignorance is such a cruel thing. A youkai cannot fight a vengeful spirit, because inside, you're all the same. +Mizuchi Miyadeguchi +Cheating Detective Satori + +// Touhou Suichouka + +// Fanbooks + +// +// Music CDs +// +Let's wake up! Dreams are things to be made into reality. The world of dreams can be made into reality! +Renko Usami +Changeability of Strange Dream + +In Gensokyo, youkai are the enemies of humanity. This rule must be upheld as an undeniable truth. If we don't, everything would fall apart at once. Our entire society is built on a delicate balance. +Hieda no Akyuu +Forbidden Scrollery Chapter 19 +whom_to: Kosuzu Motoori diff --git a/generate_enum.py b/generate_enum.py index 02f8819..d50b971 100644 --- a/generate_enum.py +++ b/generate_enum.py @@ -3,87 +3,78 @@ import os import sys +from generate_lib import * + def main(): filepath_input = sys.argv[1] - filename_input = os.path.basename(filepath_input) - assert filename_input.endswith(".txt"), "input file name must end with `.txt`" - enum_name_lowercase = filename_input[:-4] - assert enum_name_lowercase.endswith('s'), f"`enum_name_lowercase` should end with `s`, but it is: `{enum_name_lowercase}`" - enum_name_camelcase = enum_name_lowercase[0].upper() + enum_name_lowercase[1:-1] - filename_output = "src/" + enum_name_lowercase + ".rs" - output = [] + enum_name_lowercase, enum_name_camelcase, filepath_output = parse_filepath_input(filepath_input) + with open(filepath_input, 'r') as file_input: file_input_lines = file_input.readlines() - lines = map(str.strip, file_input_lines) - src = next(lines) - assert src.startswith("src: "), f"first line must contain `src: ...`, but it is: `{src}`" - assert next(lines) == "", "second line mustn't contain any information" - output.append(f"//! Enum of all official Touhou {enum_name_lowercase}.") - output.append( "//!") - output.append(f"//! {src}") - output.append("") - output.append("// DO NOT EDIT THIS FILE BY HANDS!") - output.append("// INSTEAD EDIT CORRESPONDING FILE!") - output.append("") - output.append("use crate::to_str::ToStr;") - output.append("") - output.append("#[allow(non_camel_case_types, dead_code)]") - output.append("#[derive(Debug)]") - output.append(f"pub enum {enum_name_camelcase} {{") - for line in lines: - if line.startswith('//'): - output.append('\t' + line) - continue - elif line == "": - output.append("") - continue - name = line - assert ',' not in name, f"name should not contains `,`, but it is: `{name}`" - ident = name_to_identifier(name) - assert is_ascii_numeric(ident), f"`ident` must be alpha-numeric, but it is: `{ident}`" - output.append('\t' + ident + ',') - output.append(f"}}") - output.append("") - # TODO: write "impl " - output.append(f"impl ToStr for {enum_name_camelcase} {{") - output.append("\tfn to_str(&self) -> &str {") - output.append("\t\tmatch self {") - lines = map(str.strip, file_input_lines) - next(lines); next(lines) - for line in lines: - if line.startswith('//'): - output.append('\t'*3 + line) - continue - elif line == "": - output.append("") - continue - name = line - ident = name_to_identifier(name) - assert is_ascii_numeric(ident), f"`ident` must be alpha-numeric, but it is: `{ident}`" - output.append('\t'*3 + f'Self::{ident} => "{name}",') - output.append("\t\t}") - output.append("\t}") - output.append(f"}}") - with open(filename_output, 'w') as file_output: - file_output.write('\n'.join(output) + '\n') + lines = map(str.strip, file_input_lines) + output = [] + src = next(lines) + assert src.startswith("src: "), f"first line must contain `src: ...`, but it is: `{src}`" + assert next(lines) == "", "second line mustn't contain any information" + output.append(f"//! Enum of all official Touhou {enum_name_lowercase}.") + output.append( "//!") + output.append(f"//! {src}") + output.append("") + output.append("// DO NOT EDIT THIS FILE BY HANDS!") + output.append("// INSTEAD EDIT CORRESPONDING FILE!") + output.append("") + output.append("use crate::to_str::ToStr;") + output.append("") + output.append("#[allow(non_camel_case_types, dead_code)]") + output.append("#[derive(Debug)]") + output.append(f"pub enum {enum_name_camelcase} {{") + for line in lines: + if line.startswith("//"): + output.append('\t' + line) + continue + elif line == "": + output.append("") + continue + name = line + ident = name_to_identifier(name) + output.append('\t' + ident + ',') + output.append(f"}}") + output.append("") + output.append(f"impl ToStr for {enum_name_camelcase} {{") + output.append("\tfn to_str(&self) -> &str {") + output.append("\t\tmatch self {") + lines = map(str.strip, file_input_lines) + next(lines); next(lines) + for line in lines: + if line.startswith("//"): + output.append('\t'*3 + line) + continue + elif line == "": + output.append("") + continue + name = line + ident = name_to_identifier(name) + output.append('\t'*3 + f'Self::{ident} => "{name}",') + output.append("\t\t}") + output.append("\t}") + output.append(f"}}") + with open(filepath_output, 'w') as file_output: + file_output.write('\n'.join(output) + '\n') -def name_to_identifier(text: str) -> str: - return ( - text - .replace(' ', '_') - .replace('-', '_') - .replace("'", '') - .replace('Σ', "Sigma") - .replace('.', "_") - ) +def parse_filepath_input(filepath_input: str) -> tuple[str, str, str]: + filename_input = os.path.basename(filepath_input) + assert filename_input.endswith(".txt"), "input file name must end with `.txt`" + enum_name_lowercase = filename_input[:-4] + assert enum_name_lowercase.endswith('s'), f"`enum_name_lowercase` should end with `s`, but it is: `{enum_name_lowercase}`" + enum_name_camelcase = enum_name_lowercase[0].upper() + enum_name_lowercase[1:-1] + filepath_output = "src/" + enum_name_lowercase + ".rs" + return enum_name_lowercase, enum_name_camelcase, filepath_output -def is_ascii_numeric(ident: str) -> bool: - return ident[0].isascii() and all(map(lambda c: c.isascii() or c.isnumeric(), ident)) if __name__ == "__main__": diff --git a/generate_lib.py b/generate_lib.py new file mode 100644 index 0000000..000fa07 --- /dev/null +++ b/generate_lib.py @@ -0,0 +1,17 @@ +# common code for generate + +def name_to_identifier(name: str) -> str: + assert ',' not in name, f"`name` should not contains `,`, but it is: `{name}`" + ident = ( + name + .replace(' ', '_') + .replace('-', '_') + .replace("'", '') + .replace('.', "_") + .replace('Σ', "Sigma") + ) + assert is_ascii_numeric(ident), f"`ident` must be alpha-numeric, but it is: `{ident}`" + return ident + +def is_ascii_numeric(ident: str) -> bool: + return ident[0].isascii() and all(map(lambda c: c.isascii() or c.isnumeric(), ident)) diff --git a/generate_quotes.py b/generate_quotes.py new file mode 100644 index 0000000..b02ded2 --- /dev/null +++ b/generate_quotes.py @@ -0,0 +1,123 @@ +# generate rust quotes file + +from dataclasses import dataclass + +from generate_lib import * + +def main(): + with open("./data/quotes.txt", 'r') as file_input: + file_input_lines = file_input.readlines() + + lines = list(map(str.strip, file_input_lines)) + output = [] + + output.append(f"//! ALL Touhou quotes.") + output.append("") + output.append("// DO NOT EDIT THIS FILE BY HANDS!") + output.append("// INSTEAD EDIT CORRESPONDING FILE!") + output.append("") + output.append("use crate::{") + # output.append("\tartbooks::Artbook::*,") + output.append("\tcharacters::Character::*,") + # output.append("\tgames::Game::*,") + output.append("\tquote::Quote,") + # output.append("\tsource::Source::*,") + output.append("};") + output.append("") + output.append(f"pub const QUOTES: &[Quote] = &[") + + quote: None | Quote = None + for line in lines: + if line.startswith("//"): + if quote is not None: + output.extend(quote.to_lines()) + quote = None + output.append('\t' + line) + elif line == "": + if quote is not None: + output.extend(quote.to_lines()) + quote = None + # if not ((i > 0 and lines[i-1].startswith("\t//")) and (i < len(lines)-1 and lines[i+1].startswith("\tQuote {"))): + output.append("") + else: + if quote is None: + quote = Quote(text=line, char="", src=None, whom_about=None, whom_to=None) + elif quote.char == "": + quote.char = name_to_identifier(line) + elif quote.char != "" and quote.src is None: + quote.src = line + elif line.startswith("whom_about: "): + whom_about = line[12:] + quote.whom_about = name_to_identifier(whom_about) + elif line.startswith("whom_to: "): + whom_to = line[9:] + quote.whom_to = name_to_identifier(whom_to) + else: + print(quote) + print(line) + raise Exception("this should be unrechable!") + + if quote is not None: + output.extend(quote.to_lines()) + quote = None + + output.append("];") + + # file_output_lines = '\n'.join(output[12:]) + '\n' + # file_output_lines = ( + # "".join(file_output_lines) + # .replace("\n\n\n", "uvqknj") # totally random tmp string + # .replace("\n\n", "\n") + # .replace("uvqknj", "\n\n") + # ).splitlines() + # file_output_lines = output[:12] + file_output_lines + + # new_output = [] + # for i, line in enumerate(output): + # if not ((i > 0 and output[i-1].startswith("\t//")) and (i < len(output)-1 and output[i+1].startswith("\tQuote {"))): + # new_output.append(output[i]) + # output = new_output + + output = '\n'.join(output) + '\n' + + output = output.replace("},\n\n\tQuote {", "},\n\tQuote {") + + with open("./src/quotes.rs", 'w') as file_output: + file_output.write(output) + + + +@dataclass +class Quote: + text: str + char: str + src: None | str + whom_about: None | str + whom_to: None | str + + def to_lines(self) -> list[str]: + lines = [ + "\tQuote {", + f"\t\ttext: \"{self.text}\",", + f"\t\tchar: {self.char},", + ] + if self.src is not None: + # type_, src_name = self.src.split(maxsplit=1) + # type_ = type_[1].upper() + type_[2:] + # src_name = name_to_identifier(src_name) + lines.append(f"\t\tsrc: Some(\"{self.src}\"),") + if self.whom_about is not None: + whom_about = name_to_identifier(self.whom_about) + lines.append(f"\t\twhom_about: Some({whom_about}),") + if self.whom_to is not None: + whom_to = name_to_identifier(self.whom_to) + lines.append(f"\t\twhom_to: Some({whom_to}),") + if self.src is None or self.whom_about is None or self.whom_to is None: + lines.append("\t\t..Quote::default()") + lines.append("\t},") + return lines + + + +if __name__ == "__main__": + main() diff --git a/src/characters.rs b/src/characters.rs index 055d87a..2d16914 100644 --- a/src/characters.rs +++ b/src/characters.rs @@ -15,6 +15,8 @@ pub enum Character { // Protagonists Reimu_Hakurei, Marisa_Kirisame, + // this is tmp, 'll've to solve it somehow later + Marisa_Kirisame_and_Alice_Margatroid, // // PC-98 @@ -52,6 +54,18 @@ pub enum Character { //Multi //Mimi-Chan + // Lotus Land Story + Bewitching_Lotus_Flower, + Orange, + Kurumi, + Dark_Mirror, + Elly, + Hikariko, + Yuuka_Kazami, + Mysterious_Orb, + Mugetsu, + Gengetsu, + // Mystic Square Wheel_Demon, Sara, @@ -88,9 +102,9 @@ pub enum Character { Chen, Lily_White, Prismriver_Sisters, - //Lyrica Prismriver - //Lunasa Prismriver - //Merlin Prismriver + Lyrica_Prismriver, + Lunasa_Prismriver, + Merlin_Prismriver, Youmu_Konpaku, Yuyuko_Saigyouji, Ran_Yakumo, @@ -118,7 +132,8 @@ pub enum Character { Aya_Shameimaru, Medicine_Melancholy, Komachi_Onozuka, - Eiki_Shiki_Yamaxanadu, + //Eiki Shiki Yamaxanadu + Eiki_Shiki, // // Windows 2nd Generation @@ -262,6 +277,7 @@ pub enum Character { // Touhou Sangetsusei //Three Mischievous Fairies + Three_Fairies_of_Light, Luna_Child, Star_Sapphire, Sunny_Milk, @@ -337,6 +353,8 @@ impl ToStr for Character { // Protagonists Self::Reimu_Hakurei => "Reimu Hakurei", Self::Marisa_Kirisame => "Marisa Kirisame", + // this is tmp, 'll've to solve it somehow later + Self::Marisa_Kirisame_and_Alice_Margatroid => "Marisa Kirisame and Alice Margatroid", // // PC-98 @@ -374,6 +392,18 @@ impl ToStr for Character { //Multi //Mimi-Chan + // Lotus Land Story + Self::Bewitching_Lotus_Flower => "Bewitching Lotus Flower", + Self::Orange => "Orange", + Self::Kurumi => "Kurumi", + Self::Dark_Mirror => "Dark Mirror", + Self::Elly => "Elly", + Self::Hikariko => "Hikariko", + Self::Yuuka_Kazami => "Yuuka Kazami", + Self::Mysterious_Orb => "Mysterious Orb", + Self::Mugetsu => "Mugetsu", + Self::Gengetsu => "Gengetsu", + // Mystic Square Self::Wheel_Demon => "Wheel Demon", Self::Sara => "Sara", @@ -410,9 +440,9 @@ impl ToStr for Character { Self::Chen => "Chen", Self::Lily_White => "Lily White", Self::Prismriver_Sisters => "Prismriver Sisters", - //Lyrica Prismriver - //Lunasa Prismriver - //Merlin Prismriver + Self::Lyrica_Prismriver => "Lyrica Prismriver", + Self::Lunasa_Prismriver => "Lunasa Prismriver", + Self::Merlin_Prismriver => "Merlin Prismriver", Self::Youmu_Konpaku => "Youmu Konpaku", Self::Yuyuko_Saigyouji => "Yuyuko Saigyouji", Self::Ran_Yakumo => "Ran Yakumo", @@ -440,7 +470,8 @@ impl ToStr for Character { Self::Aya_Shameimaru => "Aya Shameimaru", Self::Medicine_Melancholy => "Medicine Melancholy", Self::Komachi_Onozuka => "Komachi Onozuka", - Self::Eiki_Shiki_Yamaxanadu => "Eiki Shiki Yamaxanadu", + //Eiki Shiki Yamaxanadu + Self::Eiki_Shiki => "Eiki Shiki", // // Windows 2nd Generation @@ -584,6 +615,7 @@ impl ToStr for Character { // Touhou Sangetsusei //Three Mischievous Fairies + Self::Three_Fairies_of_Light => "Three Fairies of Light", Self::Luna_Child => "Luna Child", Self::Star_Sapphire => "Star Sapphire", Self::Sunny_Milk => "Sunny Milk", diff --git a/src/main.rs b/src/main.rs index ca5f391..bb0e2e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,23 +2,24 @@ use rand::{thread_rng, Rng}; -mod artbooks; +// mod artbooks; mod characters; -mod games; +// mod games; mod quote; mod quotes; -mod source; +// mod source; mod to_str; use crate::{quote::Quote, quotes::QUOTES, to_str::ToStr}; fn main() { let random_quote_index: usize = get_random_quote_index(); - let Quote { text, char, src, whom_about } = "ES[random_quote_index]; + let Quote { text, char, src, whom_about, whom_to } = "ES[random_quote_index]; let char: &'static str = char.to_str(); + let maybe_to = if let Some(whom_to) = whom_to { format!(" to {}", whom_to.to_str()) } else { format!("") }; let maybe_about = if let Some(whom_about) = whom_about { format!(" about {}", whom_about.to_str()) } else { format!("") }; - let maybe_src = if let Some(src) = src { format!(", \"{}\"", src.to_str())} else { format!("") }; - println!("\"{text}\"\n-- {char}{maybe_about}{maybe_src}"); + let maybe_src = if let Some(src) = src { format!(", \"{}\"", src)} else { format!("") }; + println!("\"{text}\"\n-- {char}{maybe_to}{maybe_about}{maybe_src}"); } fn get_random_quote_index() -> usize { diff --git a/src/quote.rs b/src/quote.rs index b31773c..ec6fcc5 100644 --- a/src/quote.rs +++ b/src/quote.rs @@ -1,13 +1,14 @@ //! Quote struct. -use crate::{characters::Character, source::Source}; +use crate::characters::Character; pub struct Quote { pub text: &'static str, pub char: Character, - pub src: Option, + pub src: Option<&'static str>, /// `char` says `text` about who? pub whom_about: Option, + pub whom_to: Option, } impl Quote { @@ -17,6 +18,7 @@ impl Quote { char: Character::Unknown, src: None, whom_about: None, + whom_to: None, } } } diff --git a/src/quotes.rs b/src/quotes.rs index 70e12c9..1ee2914 100644 --- a/src/quotes.rs +++ b/src/quotes.rs @@ -1,24 +1,1116 @@ -//! ALL touhou quotes. +//! ALL Touhou quotes. + +// DO NOT EDIT THIS FILE BY HANDS! +// INSTEAD EDIT CORRESPONDING FILE! use crate::{ - artbooks::Artbook::*, characters::Character::*, - games::Game::*, quote::Quote, - source::Source::*, }; pub const QUOTES: &[Quote] = &[ + // src: https://en.touhouwiki.net/wiki/Characters + + // + // Protagonists + // + Quote { text: "Out of the generations of shrine maidens, her sense of danger is the most lacking and she has meager training, yet her power is considerable.", char: Hieda_no_Akyuu, - src: Some(Artbook(Perfect_Memento_in_Strict_Sense)), + src: Some("Perfect Memento in Strict Sense"), whom_about: Some(Reimu_Hakurei), + ..Quote::default() }, Quote { text: "It ain't magic if it ain't flashy. Danmaku's all about firepower.", char: Marisa_Kirisame, - src: Some(Artbook(Perfect_Memento_in_Strict_Sense)), + src: Some("Perfect Memento in Strict Sense"), + ..Quote::default() + }, + + // + // PC-98 + // + + // Highly Responsive to Prayers + Quote { + text: "Oh, who cares about some cheap shrine in the middle of nowhere? My goal is to exact revenge on the entire human race.", + char: Mima, + src: Some("Story of Eastern Wonderland, Stage 4"), + ..Quote::default() + }, + + // the Story of Eastern Wonderland + Quote { + text: "I am Rika. Remember it from now on. If only you'd chased me when I ran before, you would've been crushed by the might of my Flying Tank, Evil Eye Σ!!", + char: Rika, + src: Some("Story of Eastern Wonderland, Extra Stage"), + ..Quote::default() + }, + Quote { + text: "It isn't you I want!! I want your power, you fool!!", + char: Meira, + src: Some("Story of Eastern Wonderland, Stage 2"), + ..Quote::default() + }, + Quote { + text: "My power? What do you mean?", + char: Reimu_Hakurei, + src: Some("Story of Eastern Wonderland, Stage 2"), + ..Quote::default() + }, + + // Phantasmagoria of Dim.Dream + Quote { + text: "Ah, only one person is left. It looks like my final enemy is a magic-user like me. I've gotta do my best!", + char: Ellen, + src: Some("Phantasmagoria of Dim.Dream"), + ..Quote::default() + }, + Quote { + text: "Hey, that was no big deal. Is the next one the last? And she's a shrine maiden, too.", + char: Kotohime, + src: Some("Phantasmagoria of Dim.Dream"), + ..Quote::default() + }, + Quote { + text: "There's only one person left. Huh, is that right! These people are no problem...", + char: Kana_Anaberal, + src: Some("Phantasmagoria of Dim.Dream"), + ..Quote::default() + }, + Quote { + text: "This may look small, but it's a lethal weapon. If you value your life, you'll do as I say.", + char: Chiyuri_Kitashirakawa, + src: Some("Phantasmagoria of Dim.Dream"), + ..Quote::default() + }, + Quote { + text: "That's right; I've finally found the beautiful power called 'magic' in this world. I won't settle for just observations anymore. I'm going to take you back as a test specimen, study that power, and then make it mine!!", + char: Yumemi_Okazaki, + src: Some("Phantasmagoria of Dim.Dream"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + + // Lotus Land Story + Quote { + text: "Ahaha, you shouldn't underestimate me just because I'm the first stage boss! I'll bang, shoot, and pop your head off!", + char: Orange, + src: Some("Lotus Land Story, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Hmm, hang on. Didn't I just see you before?", + char: Marisa_Kirisame, + src: Some("Lotus Land Story, Stage 2"), + ..Quote::default() + }, + Quote { + text: "That's right! I'm the gatekeeper of the lake, Kurumi. Nice to meet you.", + char: Kurumi, + src: Some("Lotus Land Story, Stage 2"), + ..Quote::default() + }, + Quote { + text: "This is the entrance to the mansion on the boundary between the Fantasy World and the real world... I'm the guardian here, Elly.", + char: Elly, + src: Some("Lotus Land Story, Stage 3"), + ..Quote::default() + }, + Quote { + text: "Massacres are a kind of game, too. It doesn't matter whether it's humans or Makai residents", + char: Yuuka_Kazami, + src: Some("Mystic Square"), + whom_to: Some(Shinki), + ..Quote::default() + }, + Quote { + text: "I'm Mugetsu. And this is my world. It seems like you just barged your way in, but...", + char: Mugetsu, + src: Some("Lotus Land Story, Extra Stage"), + ..Quote::default() + }, + Quote { + text: "Anyway, I'm Gengetsu, Mugetsu's older sister. I don't really know what's going on, but, since she left it to me, all I have to do is beat you, right?", + char: Gengetsu, + src: Some("Lotus Land Story, Extra Stage"), + ..Quote::default() + }, + + // Mystic Square + Quote { + text: "You're a cocky one, aren't you? I wonder if we'll have to fight.", + char: Sara, + src: Some("Mystic Square, Stage 1"), + whom_to: Some(Marisa_Kirisame), + ..Quote::default() + }, + Quote { + text: "Well, Makai is a nice place, so why don't you relax and do some sightseeing while you're here?", + char: Louise, + src: Some("Mystic Square, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Oh well, it doesn't matter if you really are youkai or not. I have the grimoire you're looking for. I am the magician you're looking for. Whether you are youkai or not. YOU ARE MY ENEMIES!", + char: Alice_Margatroid, + src: Some("Strange and Bright Nature Deity Chapter 6"), + ..Quote::default() + }, + Quote { + text: "Hyaaa!", + char: Three_Fairies_of_Light, + src: Some("Strange and Bright Nature Deity Chapter 6"), + ..Quote::default() + }, + Quote { + text: "Why you little! ...... Now you've done it! I'm through playing around!!", + char: Yuki, + src: Some("Mystic Square, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Why don't you try a bit harder?", + char: Mai, + src: Some("Mystic Square, Stage 4"), + ..Quote::default() + }, + Quote { + text: "I will, now that the dead weight is gone. I'll defeat you for sure!!", + char: Mima, + src: Some("Mystic Square, Stage 4"), + ..Quote::default() + }, + Quote { + text: "You musn't dirty your hands dealing with this kind of person! I shall deal with her promptly, so please, step back, Lady Shinki.", + char: Yumeko, + src: Some("Mystic Square, Stage 5"), + whom_about: Some(Yuuka_Kazami), + whom_to: Some(Shinki), + }, + Quote { + text: "Defeat me? How ridiculous!! A shrine maiden is nothing more than a dog of the gods.", + char: Shinki, + src: Some("Mystic Square, Stage 6"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + + // Embodiment of Scarlet Devil + Quote { + text: "Is the person in front of me the edible kind?", + char: Rumia, + src: Some("Embodiment of Scarlet Devil, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Have you ever heard the saying good medicine tastes bad\"?\"", + char: Reimu_Hakurei, + src: Some("Embodiment of Scarlet Devil, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Like I care! I'm the fairy who shall soon lord over Gensokyo! I can go anywhere and do anything I want!", + char: Cirno, + src: Some("Hidden Star in Four Seasons, Stage 2"), + ..Quote::default() + }, + Quote { + text: "You are a little strong, but your power is still no match for mine!", + char: Hong_Meiling, + src: Some("Touhou Hisoutensoku"), + ..Quote::default() + }, + Quote { + text: "Let's see... How to take out the black thing in front of me without having to do anything...", + char: Patchouli_Knowledge, + src: Some("Embodiment of Scarlet Devil"), + whom_to: Some(Marisa_Kirisame), + ..Quote::default() + }, + Quote { + text: "The only human who lives in the house where devils dwell and leader of the maids. A mysterious girl who works in a place that normal humans don't dare approach. Nobody had ever seen her before she started working at the mansion.", + char: Hieda_no_Akyuu, + src: Some("Perfect Memento in Strict Sense"), + ..Quote::default() + }, + Quote { + text: "Looks like it's going to be a fun night.", + char: Remilia_Scarlet, + src: Some("Embodiment of Scarlet Devil, Stage 6"), + ..Quote::default() + }, + Quote { + text: "Looks like it's going to be a long night.", + char: Reimu_Hakurei, + src: Some("Embodiment of Scarlet Devil, Stage 6"), + ..Quote::default() + }, + Quote { + text: "I just want to destroy the indestructible. Especially you, who no one else can destroy! Here I come!", + char: Flandre_Scarlet, + src: Some("Touhou Gouyoku Ibun"), + whom_to: Some(Yuuma_Toutetsu), + ..Quote::default() + }, + + // Perfect Cherry Blossom + Quote { + text: "On top of that, there's a freaky flying maid coming towards me.", + char: Letty_Whiterock, + src: Some("Perfect Cherry Blossom"), + whom_to: Some(Sakuya_Izayoi), + ..Quote::default() + }, + Quote { + text: "Why not get put to sleep at an animal shelter? The Buddhist Paradise is warm, they say.", + char: Sakuya_Izayoi, + src: Some("Perfect Cherry Blossom, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Humans? Posing a threat to us? Impossible, impossible, absolutely impossible! To think that you would oppose us...", + char: Chen, + src: Some("Perfect Cherry Blossom, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Rainbows are the bass sounds of this world. Exceeding the rainbows are illusionary sounds. That's where I come in.", + char: Lyrica_Prismriver, + src: Some("Phantasmagoria of Flower View"), + ..Quote::default() + }, + Quote { + text: "Unwanted noise should be drowned out.", + char: Lunasa_Prismriver, + src: Some("Perfect Cherry Blossom, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Alright, then. My good friend, would you kindly open this door?", + char: Marisa_Kirisame, + src: Some("Perfect Cherry Blossom, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Won't you listen to just one song first, my good friend?", + char: Merlin_Prismriver, + src: Some("Perfect Cherry Blossom, Stage 4"), + ..Quote::default() + }, + Quote { + text: "The things that cannot be cut by my Roukanken, forged by youkai... are next to none!", + char: Youmu_Konpaku, + src: Some("Perfect Cherry Blossom, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Just a little longer. A little longer and the Saigyou Ayakashi will be in full bloom...", + char: Yuyuko_Saigyouji, + src: Some("Perfect Cherry Blossom, Stage 6"), + ..Quote::default() + }, + Quote { + text: "Chen is my shikigami. She has recovered, and grown stronger than before.", + char: Ran_Yakumo, + src: Some("Perfect Cherry Blossom, Extra Stage"), + ..Quote::default() + }, + Quote { + text: "... She was supposed to be strong? Wait, she's your shikigami? Aren't you a shikigami yourself?", + char: Reimu_Hakurei, + src: Some("Perfect Cherry Blossom, Extra Stage"), + ..Quote::default() + }, + Quote { + text: "To start with, she is a youkai that you do not want to deal with. Even besides the fundamental issue of the danger of her ability, this youkai will appear anywhere unexpectedly, her character is lacking in human sentiment, and her behavioral principles are completely different from those of humans, to name a few of her issues.", + char: Hieda_no_Akyuu, + src: Some("Perfect Memento in Strict Sense"), + ..Quote::default() + }, + Quote { + text: "At any rate, with just a little more spring, the Saigyou Ayakashi will soon reach full bloom. The small trace of spring that you've brought here... will give us the last step needed.", + char: Youmu_Konpaku, + src: Some("Perfect Cherry Blossom, Stage 5"), + ..Quote::default() + }, + + // Immaterial and Missing Power + Quote { + text: "I've been watching all of you this whole time. You all responded to my 'foregathering ability' without noticing, and came to these feasts. Do you know what this means? It means none of you can defeat me.", + char: Suika_Ibuki, + src: Some("Immaterial and Missing Power"), + ..Quote::default() + }, + + // Imperishable Night + Quote { + text: "They say a half-inch bug has only one-tenth an inch of soul.", + char: Sakuya_Izayoi, + src: Some("Imperishable Night, Stage 1"), + ..Quote::default() + }, + Quote { + text: "That's 80% smaller.", + char: Remilia_Scarlet, + src: Some("Imperishable Night, Stage 1"), + ..Quote::default() + }, + Quote { + text: "There's no human that doesn't fear me on night roads. If I wanted, I could call enough youkai here to eradicate every human in this land.", + char: Mystia_Lorelei, + src: Some("Imperishable Night, Stage 2"), + whom_to: Some(Marisa_Kirisame_and_Alice_Margatroid), + ..Quote::default() + }, + Quote { + text: "I've been waiting. You've got some guts, challenging me on the night of the full moon. I won't let you lay one finger on that human!", + char: Keine_Kamishirasawa, + src: Some("Imperishable Night, Extra Stage"), + ..Quote::default() + }, + Quote { + text: "Wait a second, hold it right there. Do I look like a rabbit that would try to trick people~?", + char: Tewi_Inaba, + src: Some("Phantasmagoria of Flower View Episode 8"), + ..Quote::default() + }, + Quote { + text: "You really do. It is said that although the rabbit is supposed to cross the river, it tricked and crossed the shark.", + char: Komachi_Onozuka, + src: Some("Phantasmagoria of Flower View Episode 8"), + ..Quote::default() + }, + Quote { + text: "You're too late. I've sealed all the doors. You can't take the princess away now, can you?", + char: Reisen_Udongein_Inaba, + src: Some("Imperishable Night, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Young children like yourself can't stand a chance against me, an eternal being. All the scarlet history that you've built up--- Divided by my history, the result is zero. From eternity's point of view, you are but a mere instant.", + char: Eirin_Yagokoro, + src: Some("Imperishable Night, Stage 6"), + ..Quote::default() + }, + Quote { + text: "The human body houses a fragile, round soul. What those humans live on is a huge, round orb below. And, what the superior people live on... is that lunatic orb behind me.", + char: Kaguya_Houraisan, + src: Some("Imperishable Night, Stage 6"), + ..Quote::default() + }, + Quote { + text: "I can't die, but I can't keep fighting like this. My body hurts all over.", + char: Fujiwara_no_Mokou, + src: Some("Imperishable Night, Extra Stage"), + ..Quote::default() + }, + + // Phantasmagoria of Flower View + Quote { + text: "You don't seem related to the incident, so without further ado, allow me to blow you into the next week!", + char: Aya_Shameimaru, + src: Some("Hidden Star in Four Seasons, Stage 1"), + whom_to: Some(Eternity_Larva), + ..Quote::default() + }, + Quote { + text: "It's not good spreading the smell of poison so much. It'll make others want to run.", + char: Yuuka_Kazami, + src: Some("Phantasmagoria of Flower View Episode 7"), + ..Quote::default() + }, + Quote { + text: "Poison? Oh, poison. It's my life. That won't change.", + char: Medicine_Melancholy, + src: Some("Phantasmagoria of Flower View Episode 7"), + ..Quote::default() + }, + Quote { + text: "Well, usherin' souls over is out of my jurisdiction. I'm just a humble ferryman.", + char: Komachi_Onozuka, + src: Some("Scarlet Weather Rhapsody, Stage 6"), + ..Quote::default() + }, + Quote { + text: "You bear a large sin. You abandoned your allies, leaving them to die, while you're the only one here living happily. That's right, you're a bit too selfish.", + char: Eiki_Shiki, + src: Some("Phantasmagoria of Flower View Reisen's Scenario"), + ..Quote::default() + }, + Quote { + text: "...", + char: Reisen_Udongein_Inaba, + src: Some("Phantasmagoria of Flower View Reisen's Scenario"), + ..Quote::default() + }, + + // + // Windows 2nd Generation + // + + // Mountain of Faith + Quote { + text: "I'm just one amongst the multitudes of gods. There are many more here just like me.", + char: Minoriko_Aki, + src: Some("Mountain of Faith, Stage 1"), + ..Quote::default() + }, + Quote { + text: "I'm sure we've met before, but I'm just here to gather misfortune, now.", + char: Hina_Kagiyama, + src: Some("Mountain of Faith, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Hey human. Kappa and humans have been sworn friends since ancient times, so let me tell you something.", + char: Nitori_Kawashiro, + src: Some("Mountain of Faith, Stage 3"), + ..Quote::default() + }, + Quote { + text: "Sworn friends? Are you sure you haven't mistaken an old enemy for a friend?", + char: Reimu_Hakurei, + src: Some("Mountain of Faith, Stage 3"), + ..Quote::default() + }, + Quote { + text: "I'm Sanae, a wind priestess, descendent of a long-forgotten line of gods incarnate in the outside world. Sometimes, humans that revere a god are themselves revered. Sometimes, shrine maidens can become gods. Since you're a shrine maiden, are you prepared for such things to happen?", + char: Sanae_Kochiya, + src: Some("Mountain of Faith, Stage 5"), + ..Quote::default() + }, + Quote { + text: "I don't care if I become a god or not. But if you say you want a fight, you'd better be ready for one!", + char: Reimu_Hakurei, + src: Some("Mountain of Faith, Stage 5"), + ..Quote::default() + }, + Quote { + text: "A god must eliminate all who oppose their struggle for faith, one by one.", + char: Kanako_Yasaka, + src: Some("Mountain of Faith, Stage 6"), + ..Quote::default() + }, + Quote { + text: "Pay more respect to the earth. Otherwise, who knows? You might even get cursed. Heh heh.", + char: Suwako_Moriya, + src: Some("Touhou Hisoutensoku"), + ..Quote::default() + }, + + // Scarlet Weather Rhapsody + Quote { + text: "Getting straight to the point, an earthquake is going to occur.", + char: Iku_Nagae, + src: Some("Scarlet Weather Rhapsody, Stage 3"), + ..Quote::default() + }, + Quote { + text: "I know, if you've nothing to do how about killing some time with me?", + char: Tenshi_Hinanawi, + src: Some("Scarlet Weather Rhapsody, Stage 1"), + ..Quote::default() + }, + Quote { + text: "You're the one with too much time on your hands, you know.", + char: Yuyuko_Saigyouji, + src: Some("Scarlet Weather Rhapsody, Stage 1"), + ..Quote::default() + }, + + // Subterranean Animism + Quote { + text: "I'll show you how great the power of the youkai who were banished underground is!", + char: Yamame_Kurodani, + src: Some("Subterranean Animism, Stage 1"), + ..Quote::default() + }, + Quote { + text: "I don't have anything against you, but I can make up lots of reasons to attack you.", + char: Parsee_Mizuhashi, + src: Some("Subterranean Animism, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Ahahahaha! Why would we want to do that now? This place may have been Hell once, but now it's our paradise. We're even thankful for the sages above ground. They won't let anyone come bother us here. But more importantly, you! You're strong for a human, And it looks like you know Suika, too. I haven't been this excited in a long time!", + char: Yuugi_Hoshiguma, + src: Some("Subterranean Animism, Stage 3"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + Quote { + text: "Here's where it really begins. Now, sleep with this trauma that will leave you sleepless!", + char: Satori_Komeiji, + src: Some("Subterranean Animism"), + ..Quote::default() + }, + Quote { + text: "If I kill you, human, my hellfire cart will get heavy~♪ Man, carrying off corpses is fun!", + char: Rin_Kaenbyou, + src: Some("Subterranean Animism, Stage 5"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + Quote { + text: "Lord Yatagarasu, the Black Sun. Thank you for giving me your power. The sunlight that rains down on the Earth is a nuclear furnace that will create new atoms. My ultimate nuclear fusion will burn up every body, heart, phantom, and fairy!", + char: Utsuho_Reiuji, + src: Some("Subterranean Animism, Stage 6"), + ..Quote::default() + }, + + // *^_^* + Quote { + text: "Read your mind? I've already closed my satori eye. Reading people's minds only makes you depressed, there's nothing good about it.", + char: Koishi_Komeiji, + src: Some("Subterranean Animism, Extra Stage"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + + // Undefined Fantastic Object + Quote { + text: "My mice do like the taste of human flesh. They say that cheese just can't compare to certain other red foods.", + char: Nazrin, + src: Some("Undefined Fantastic Object, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Booooo! Did that surprise you?", + char: Kogasa_Tatara, + src: Some("Undefined Fantastic Object, Stage 2"), + ..Quote::default() + }, + Quote { + text: "If you're collecting the floating treasure, then you're trying to revive my sister too, right?", + char: Ichirin_Kumoi, + src: Some("Undefined Fantastic Object, Stage 3"), + ..Quote::default() + }, + Quote { + text: "I'm headed towards a completely submerged and sorrowful hell. Those who can't make use of the water would just get in my way. Even if it's Lady Hijiri.", + char: Minamitsu_Murasa, + src: Some("Touhou Gouyoku Ibun, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Just a simple enemy ... ... Still, even if you are an enemy, there's no denying that you were chosen by the treasure. However, if you've chosen to follow the wrong path ... Then I'll have you bow down before this pagoda of Bishamonten!", + char: Shou_Toramaru, + src: Some("Undefined Fantastic Object, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Hmph, you should have said that from the start. After all, I'll beat anyone who's a friend to youkai!", + char: Reimu_Hakurei, + src: Some("Undefined Fantastic Object, Stage 6"), + ..Quote::default() + }, + Quote { + text: "Humans haven't changed since my days in the temple. How weak and rash you are! Now, namusan ―― !", + char: Byakuren_Hijiri, + src: Some("Undefined Fantastic Object, Stage 6"), + ..Quote::default() + }, + Quote { + text: "Oh, I found the mysterious shining thing! Is this really an alien encounter?", + char: Sanae_Kochiya, + src: Some("Undefined Fantastic Object, Extra Stage"), + ..Quote::default() + }, + Quote { + text: "What's an alien?", + char: Nue_Houjuu, + src: Some("Undefined Fantastic Object, Extra Stage"), + ..Quote::default() + }, + + // Touhou Hisoutensoku + + // Double Spoiler + Quote { + text: "The kappas were the ones who made my camera, y'know~ They can be kinda rude, but they're really good at high-tech stuff.", + char: Hatate_Himekaidou, + src: Some("Double Spoiler Level 4"), + ..Quote::default() + }, + + // Ten Desires + Quote { + text: "An echo spirit, huh? So all you do is parrot things back?", + char: Marisa_Kirisame, + src: Some("Ten Desires, Stage 2"), + ..Quote::default() + }, + Quote { + text: "That is all I do, so don't tease me about it.", + char: Kyouko_Kasodani, + src: Some("Ten Desires, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Rotten as I may be, I'm a jiang shi. Right! I remembered! We were revived to protect the mausoleum!", + char: Yoshika_Miyako, + src: Some("Ten Desires, Stage 4"), + ..Quote::default() + }, + Quote { + text: "My faithful servant. Go eradicate the one who would deny this resurrection!", + char: Seiga_Kaku, + src: Some("Ten Desires, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Mmph, your body is covered with the stench of death.", + char: Youmu_Konpaku, + src: Some("Ten Desires, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Aye, for I art no longer among the living. We are of a like kind, are we not? Art thou not also a shikaisen?", + char: Mononobe_no_Futo, + src: Some("Ten Desires, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Two beings revived to eternal life must join together in combat, and join together in study of the Tao! Now, try to defeat me! And I will be resurrected as a statesman of eternal life!", + char: Toyosatomimi_no_Miko, + src: Some("Ten Desires, Stage 6"), + ..Quote::default() + }, + Quote { + text: "I once had enough power to hold sway over one third (of the tanuki) of Japan. But perhaps that's a thing of the past, now. To think I lost to a human like this...", + char: Mamizou_Futatsuiwa, + src: Some("Ten Desires, Extra Stage"), + ..Quote::default() + }, + + // Hopeless Masquerade + Quote { + text: "Since I had to memorize emotions logically, I got good at reading the emotions of others.", + char: Hata_no_Kokoro, + src: Some("Antinomy of Common Flowers, Stage 3"), + ..Quote::default() + }, + + // + // Windows 3rd Generation + // + + // Double Dealing Character + Quote { + text: "Oh, a mermaid? Is that all? You're just a small fry.", + char: Reimu_Hakurei, + src: Some("Double Dealing Character, Stage 1"), + ..Quote::default() + }, + Quote { + text: "It's been ages since anyone took us seriously. It's about time for us youkai to flourish!", + char: Wakasagihime, + src: Some("Double Dealing Character, Stage 1"), + ..Quote::default() + }, + Quote { + text: "I'll make you too scared to walk around, day or night!", + char: Sekibanki, + src: Some("Double Dealing Character, Stage 2"), + ..Quote::default() + }, + Quote { + text: "You've come to exterminate me, haven't you?", + char: Kagerou_Imaizumi, + src: Some("Double Dealing Character, Stage 3"), + ..Quote::default() + }, + Quote { + text: "All the other tools like me have gained power. We've behaved ourselves so far, but it'll be our era from now on.", + char: Benben_Tsukumo, + src: Some("Double Dealing Character, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Let the soul repose performance begin!", + char: Yatsuhashi_Tsukumo, + src: Some("Double Dealing Character, Extra Stage"), + ..Quote::default() + }, + Quote { + text: "Okay, that does it! This isn't the time to run away or hide, I'll make enemies out of them all!", + char: Seija_Kijin, + src: Some("Impossible Spell Card, 8th Day"), + ..Quote::default() + }, + Quote { + text: "Someone like you, who was born into power, wouldn't know the joy of finally obtaining it. However, if you look at your purification rod, you can see that you feel hesitation. I have the power of dreams here in my hand.This is our treasure, the Miracle Mallet!", + char: Shinmyoumaru_Sukuna, + src: Some("Double Dealing Character, Stage 6"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + Quote { + text: "I have obtained the magic to become independent. I no longer require the powers of the Miracle Mallet.", + char: Raiko_Horikawa, + src: Some("Double Dealing Character, Extra Stage"), + ..Quote::default() + }, + + // Urban Legend in Limbo + Quote { + text: "You shouldn't underestimate humans these days. One can find just about anything by searching on the net, after all!", + char: Sumireko_Usami, + src: Some("Urban Legend in Limbo. Kasen's scenario"), + ..Quote::default() + }, + + // Legacy of Lunatic Kingdom + Quote { + text: "This is Seiran. I've made contact with a belligerent earthling. Now proceeding with purification.", + char: Seiran, + src: Some("Legacy of Lunatic Kingdom, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Ahh, there are some pretty strong people on Earth, huh? You've got all sorts of food, too. I wish I had been born on Earth...", + char: Ringo, + src: Some("Legacy of Lunatic Kingdom, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Every time you dream, you've visited Gensokyo. Normally what's happening is that you expel your dream self, which is then taken over by your real self. By being in the Dream World, you're currently an irregularity.", + char: Doremy_Sweet, + src: Some("Antinomy of Common Flowers, Stage 3"), + ..Quote::default() + }, + Quote { + text: "I am Sagume, a being who can change the world's course with my words. Now that I've gone and talked about it, fate will begin to change again.", + char: Sagume_Kishin, + src: Some("Legacy of Lunatic Kingdom, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Kyahahahaha! Something real interesting is going on~! Hey, fairies! Let's crank up the speed! It's lunatic tiiiime! Welcome to a world of madness!", + char: Clownpiece, + src: Some("Legacy of Lunatic Kingdom, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Though she now lives on another heavenly body, and I am unable to meet with her... Even if we are unable to dwell together under Heaven, my hatred alone will be refined. Now, show me! Just what an earthling risking her life is capable of! And behold! This pristine spiritual force that rejects life and death!", + char: Junko, + src: Some("Legacy of Lunatic Kingdom, Stage 6"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + Quote { + text: "So what are we going with? Two on one? Or should I call in my other two selves and make it four on one?", + char: Hecatia_Lapislazuli, + src: Some("Legacy of Lunatic Kingdom, Extra Stage"), + ..Quote::default() + }, + + // Antinomy of Common Flowers + Quote { + text: "Maybe you'd be happier slipping into the crowd and then, I dunno, dropping dead?", + char: Joon_Yorigami, + src: Some("Antinomy of Common Flowers Yukari's Scenario"), + ..Quote::default() + }, + Quote { + text: "I've never been serious about this until now. If I let it all out, everyone will be unlucky, including me! But I've had enough. Who cares about winning or losing? When I'm done here, we'll all be losers. The shrine maiden, me, and you too, Joon!", + char: Shion_Yorigami, + src: Some("Antinomy of Common Flowers Yukari's scenario"), + ..Quote::default() + }, + + // Hidden Star in Four Seasons + Quote { + text: "Come on! Get some exercise, and taste this summer heat with your whole body!", + char: Eternity_Larva, + src: Some("Hidden Star in Four Seasons, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Oh, sorry about that. I'm Marisa the magician. I'm not sure why, but it seems like the season around this one area has turned into autumn?", + char: Marisa_Kirisame, + src: Some("Hidden Star in Four Seasons, Stage 2"), + ..Quote::default() + }, + Quote { + text: "I don't know nothin' 'bout that. More importantly, you should git outta here. If you stick around here any longer, I'll slice you open an' sun-dry you!", + char: Nemuno_Sakata, + src: Some("Hidden Star in Four Seasons, Stage 2"), + ..Quote::default() + }, + Quote { + text: "I've been protecting shrines and temples from simple enemies all the time until now. It's, like, volunteer work?", + char: Aunn_Komano, + src: Some("Hidden Star in Four Seasons, Stage 3"), + ..Quote::default() + }, + Quote { + text: "Huh, I see. I hadn't noticed at all. I'm sorry.", + char: Reimu_Hakurei, + src: Some("Hidden Star in Four Seasons, Stage 3"), + ..Quote::default() + }, + Quote { + text: "My, what's going on? I'm practically overflowing with magic power... I've just got to try this out on the human in front of me!", + char: Narumi_Yatadera, + src: Some("Hidden Star in Four Seasons, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Now, this might be a bit sudden, but let's start your test!", + char: Satono_Nishida, + src: Some("Hidden Star in Four Seasons, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Test? What are you even talking about?", + char: Reimu_Hakurei, + src: Some("Hidden Star in Four Seasons, Stage 5"), + ..Quote::default() + }, + Quote { + text: "Now, if you're too weak, our Master will get real mad at us...", + char: Satono_Nishida, + src: Some("Hidden Star in Four Seasons, Stage 5"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + Quote { + text: "So you'd better give us all you've got! If you die, welp, that's the end of that!", + char: Mai_Teireida, + src: Some("Hidden Star in Four Seasons, Stage 5"), + whom_to: Some(Reimu_Hakurei), + ..Quote::default() + }, + Quote { + text: "Clownpiece, was it? Tell the big shots of hell that... Be sure to let them know. Gensokyo is home to a terrifying secret god. Got that?", + char: Okina_Matara, + src: Some("Visionary Fairies in Shrine Chapter 15"), + whom_to: Some(Clownpiece), + ..Quote::default() + }, + + // Wily Beast and Weakest Creature + Quote { + text: "How dare you mock the art of stone-stacking! Unforgivable! Dieee!", + char: Eika_Ebisu, + src: Some("Wily Beast and Weakest Creature, Stage 1"), + ..Quote::default() + }, + Quote { + text: "I'm an ushi-oni. I live by the River. If you want to turn back now, I can send you home safely...", + char: Urumi_Ushizaki, + src: Some("Wily Beast and Weakest Creature, Stage 2"), + ..Quote::default() + }, + Quote { + text: "So you're already familiar with me. Let's get straight to the point, then. I shall hereby test whether you are capable of surviving Hell.", + char: Kutaka_Niwatari, + src: Some("Wily Beast and Weakest Creature, Stage 3"), + ..Quote::default() + }, + Quote { + text: "I am the leader of the Kiketsu family. Do you really need any further explanation?", + char: Yachie_Kicchou, + src: Some("Wily Beast and Weakest Creature, Stage 4"), + ..Quote::default() + }, + Quote { + text: "Huh? What the...? Now that I think about it, I feel like I never had any questions...", + char: Reimu_Hakurei, + src: Some("Wily Beast and Weakest Creature, Stage 4"), + ..Quote::default() + }, + Quote { + text: "That aura I feel from you... Could you be a wolf spirit? To think that a wolf would be smart enough to rely on a living human...", + char: Mayumi_Joutouguu, + src: Some("Wily Beast and Weakest Creature, Stage 5"), + ..Quote::default() + }, + Quote { + text: "You built up this whole plan, and now you flee in the face of the enemy...! Truly the height of idiocy. Don't think for a second that I'll let you escape after you violated my sacred territory to this extent. I'll destroy your body of flesh, and build you anew from soil and water! You shall be an idol without a single flaw, told of for ages and ages to come!", + char: Keiki_Haniyasushin, + src: Some("Wily Beast and Weakest Creature, Stage 6"), + ..Quote::default() + }, + Quote { + text: "Your power, swiftness, bravery and knowledge in facing down danmaku... All in perfect balance! I-I'm moved!", + char: Saki_Kurokoma, + src: Some("Wily Beast and Weakest Creature, Extra Stage"), + ..Quote::default() + }, + + // Touhou Gouyoku Ibun + Quote { + text: "Seriously? This is what petroleum is?", + char: Joon_Yorigami, + src: Some("Sunken Fossil World Joon and Shion's Scenario"), + ..Quote::default() + }, + Quote { + text: "Yep, absolutely. In the Outside World, they even use tons of the stuff while knowing full well what it is! Petroleum has always been produced from organic beings. This liquid has always been made from the fear, pleasure, grief, loathing, and resentment of living creatures! Now get out of here, you pair of eternal poors!", + char: Yuuma_Toutetsu, + src: Some("Sunken Fossil World Joon and Shion's Scenario"), + ..Quote::default() + }, + + // Unconnected Marketeers + Quote { + text: "Those cards are dangerous items. They sure ain't cat toys, I can tell you that much.", + char: Marisa_Kirisame, + src: Some("Unconnected Marketeers, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Hmph! You might say that... but you want 'em too, don'tcha? And they're not dangerous or anything. I mean, everyone's collecting 'em!", + char: Mike_Goutokuji, + src: Some("Unconnected Marketeers, Stage 1"), + ..Quote::default() + }, + Quote { + text: "Pretty lucky for me to have found someone with cards on 'em this quick.", + char: Marisa_Kirisame, + src: Some("Unconnected Marketeers, Stage 2"), + ..Quote::default() + }, + Quote { + text: "Cards, eh...? I guess you've been sniffing around for them after all. These are too much for you puny little humans to handle! Begone from our mountain!", + char: Takane_Yamashiro, + src: Some("Unconnected Marketeers, Stage 2"), + ..Quote::default() + }, + Quote { + text: "What are these cards? Who's making 'em?", + char: Marisa_Kirisame, + src: Some("Unconnected Marketeers, Stage 3"), + ..Quote::default() + }, + Quote { + text: "...You don't need to know about that. Uh, actually, I don't know either. It's not somethin' I need to do business, after all.", + char: Sannyo_Komakusa, + src: Some("Unconnected Marketeers, Stage 3"), + ..Quote::default() + }, + Quote { + text: "Splendid! To think that the Yin-Yang Orb that I crafted has been mastered to such a degree. It is an honor to the Tamatsukuri-be.", + char: Misumaru_Tamatsukuri, + src: Some("Unconnected Marketeers, Stage 4"), + ..Quote::default() + }, + Quote { + text: "When you betray someone, you don't do it with your own hands. A wonderful idea, in my opinion.", + char: Tsukasa_Kudamaki, + src: Some("Unconnected Marketeers, Stage 5"), + whom_to: Some(Megumu_Iizunamaru), + ..Quote::default() + }, + Quote { + text: "The Ability Cards? I don't just 'know' about them. I created them, as a matter of fact!", + char: Megumu_Iizunamaru, + src: Some("Unconnected Marketeers, Stage 5"), + ..Quote::default() + }, + Quote { + text: "You foul barbarian... How long are you going to believe that you can use violence to hold dominion over objects? Possession of an object can only be controlled by the god of the markets. As long as they possess something, none can escape from the hands of God! The market has been opened! Let us return all things to nothing!", + char: Chimata_Tenkyuu, + src: Some("Unconnected Marketeers, Stage 6"), + ..Quote::default() + }, + Quote { + text: "Tremble in joy! The mountain shall be your grave!", + char: Momoyo_Himemushi, + src: Some("Unconnected Marketeers, Extra Stage"), + ..Quote::default() + }, + + // Unfinished Dream of All Living Ghost + + // + // Print Works + // + + // Touhou Kourindou + + // Touhou Sangetsusei + Quote { + text: "Sorry to say, but the night is my specialty. This is where your advance ends!", + char: Luna_Child, + src: Some("Fairy Wars, Stage 3"), + ..Quote::default() + }, + + // Touhou Bougetsushou + Quote { + text: "As the leader of the moon's emissaries, I'll have to act with maximum beauty.", + char: Watatsuki_no_Yorihime, + src: Some("Silent Sinner in Blue Chapter 13"), + ..Quote::default() + }, + Quote { + text: "My mortal enemy, Chang'e. Are you watching!? Look at the numerous lives and deaths, the impurities, this poor soul brings!", + char: Junko, + src: Some("Legacy of Lunatic Kingdom, Stage 6"), + whom_to: Some(Marisa_Kirisame), + ..Quote::default() + }, + + // Touhou Ibarakasen + Quote { + text: "Do you think that classical, behind-the-times youkai like yourselves can stand up to this era's humans and their collective knowledge?", + char: Sumireko_Usami, + src: Some("Urban Legend in Limbo Kasen's scenario"), + ..Quote::default() + }, + Quote { + text: "Humans truly have become foolish. Have you forgotten the enigmatic terror of the youkai? Have you forgotten the mind-numbing darkness of the night?", + char: Kasen_Ibaraki, + src: Some("Urban Legend in Limbo Kasen's scenario"), + ..Quote::default() + }, + + // Touhou Suzunaan + Quote { + text: "Miss Reimu's been keeping an eye on me?", + char: Kosuzu_Motoori, + src: Some("Forbidden Scrollery Chapter 49"), + ..Quote::default() + }, + Quote { + text: "Indeed. As you're well aware, she's a human who specializes in youkai extermination. She especially hates it when humans admire youkai the way you do.", + char: Yukari_Yakumo, + src: Some("Forbidden Scrollery Chapter 49"), + ..Quote::default() + }, + + // Touhou Chireikiden + Quote { + text: "Ignorance is such a cruel thing. A youkai cannot fight a vengeful spirit, because inside, you're all the same.", + char: Mizuchi_Miyadeguchi, + src: Some("Cheating Detective Satori"), + ..Quote::default() + }, + + // Touhou Suichouka + + // Fanbooks + + // + // Music CDs + // + Quote { + text: "Let's wake up! Dreams are things to be made into reality. The world of dreams can be made into reality!", + char: Renko_Usami, + src: Some("Changeability of Strange Dream"), + ..Quote::default() + }, + Quote { + text: "In Gensokyo, youkai are the enemies of humanity. This rule must be upheld as an undeniable truth. If we don't, everything would fall apart at once. Our entire society is built on a delicate balance.", + char: Hieda_no_Akyuu, + src: Some("Forbidden Scrollery Chapter 19"), + whom_to: Some(Kosuzu_Motoori), ..Quote::default() }, ];