<img class="title" src="twinemedia/img/DateNRule.png" />
<div class="start-buttons show-buttons">
By Jon Cinque
<br />
Inspired by UNDERTALE by Toby Fox
<ul>
<li>[[New Game]]</li>
<li>[[Chapter Select]]</li>
</ul>
See my <a href="https://jonc.dev/twine-games-tutorial" target="_blank">tutorial</a> for info on making your own game with Twine!
<br />
Note: Your choices matter in this game.
<br />
For best experience, turn sound on. Firefox users, please disable blocking sound.
</div><div class="show-buttons">
<ul>
<li>[[New Game]]</li>
<li>[[Toriel]]</li>
<li>[[Dummy|DummyDateStart]]</li>
<li>[[Monster Kid|MonsterKidAppear]]</li>
<li>[[Jerry|JerryDateStart]]</li>
<li>[[Choice|JerryDateEnd]]</li>
<li>[[Sans|SansEnter]]</li>
<li>[[End|SansDateSerious]]</li>
<li>[[Credits]]</li>
</ul>
</div><%
setup.image.src = "twinemedia/img/Intro1.png";
setup.music.play("twinemedia/music/mus_story.ogg");
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|Intro2]]'));
setup.typewriter.write([
"Long ago, two races ruled over Earth: HUMANS and MONSTERS.",
"The two lived harmoniously for eons, until one day, war broke out.",
"HUMANS bested the MONSTERS and sealed them underground using magic.",
"MONSTERS and HUMANS lived separately for many years, until only legends remained.",
"Mt. Ebott, on the surface, was the only portal into the underground.",
"Those who ventured underground from there were never seen again...",
]);
%><%
setup.image.src = "twinemedia/img/Intro2.png";
print(setup.createChatArea('[[Continue|Intro3]]'));
setup.typewriter.write([
"Until the year 20XX, when a CHILD, full of DETERMINATION, went into the underground.",
"Using the power of her SOUL, the CHILD befriended the MONSTERS.",
"Together, they broke the seal.",
"The MONSTERS went to live on the surface, for a new life.",
"Though memories of war had faded, MONSTERS were not accepted by HUMANS.",
"Thus, the CHILD lived with the MONSTERS, to integrate them.",
"Life began anew for all ...",
]);
%><%
setup.music.stop();
setup.image.src = "twinemedia/img/Black.png";
print(setup.createChatArea('[[Continue|Toriel]]'));
setup.typewriter.write([
"Years later, it is now 20YY.",
"The CHILD, now an ADULT, still lives with the MONSTERS.",
"You are that ADULT.",
"Enter the DATE N RULE ...",
]);
%><%
setup.image.src = "twinemedia/img/Toriel.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
setup.music.play("twinemedia/music/mus_house1.ogg");
print(setup.createChatArea('[[Yes|TorielTutoYes]] [[No|TorielTutoNo]]'));
setup.typewriter.write([
"Good morning! It's your mother, TORIEL!",
"I know you are no longer a CHILD, but you always remain my CHILD.",
"Have you seen the beautiful weather today?",
"Overground life is truly awe-inspiring!",
"My CHILD, I apologize, you must tire of hearing this for so many years!",
"You must also tire of being called CHILD.",
"I must continue my efforts to treat you as an ADULT.",
"My goodness, I have spoken so much, without teaching you anything!",
"Do you know how to advance dialogue?"
]);
%><%
print(setup.createChatArea('[[Continue|TorielTuto]]'));
setup.typewriter.write([
"That is good.",
"Such intuition will serve, as it did in the underground.",
"But to be safe, I will still teach you.",
]);
%><%
setup.image.src = "twinemedia/img/TorielFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_3.wav";
print(setup.createChatArea('[[Continue|TorielTuto]]'));
setup.typewriter.write([
"Of course. I cannot expect you to know these things.",
"I will teach you.",
]);
%><%
setup.music.play("twinemedia/music/mus_tension.ogg");
setup.image.src = "twinemedia/img/Toriel.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
print(setup.createChatArea('[[Continue|TorielAdult]]'));
setup.typewriter.write([
"You must use your MOUSE.",
"To CLICK.",
"On the words.",
"That are under the words.",
"That I say.",
"So go ahead.",
"Click 'Continue'.",
"Well done!",
"That will be your lesson for the day, my CHI--",
]);
%><%
setup.music.play("twinemedia/music/mus_house1.ogg");
setup.image.src = "twinemedia/img/TorielFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_2.wav";
print(setup.createChatArea('[[Continue|TorielLit]]'));
setup.typewriter.write(["--my ADULT!"]);
%><%
setup.image.src = "twinemedia/img/Toriel.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
print(setup.createChatArea('[[Continue|TorielLitBleat]]'));
setup.typewriter.write([
"Every day here teaches us so much.",
"It is no surprise that you did not want to stay underground.",
"Also, the sunshine makes me feel positively ~~lit~~!",
]);
%><%
setup.image.src = "twinemedia/img/TorielFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|TorielVideogames]]'));
setup.typewriter.write([
"* (TORIEL laughs until she bleats.)",
"* (You are embarrassed.)",
"* (She is not.)",
]);
%><%
setup.image.src = "twinemedia/img/Toriel.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
print(setup.createChatArea('[[Yes|TorielVideogamesYes]] [[No|TorielVideogamesNo]]'));
setup.typewriter.write([
"As you see, television and computers have taught me much about HUMANS.",
"For example, did you know that their VIDEO-GAMES depict MONSTERS as enemies?",
]);
%><%
setup.image.src = "twinemedia/img/TorielFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_2.wav";
print(setup.createChatArea('[[Continue|TorielLove]]'));
setup.typewriter.write([
"Oh my, so you knew that you could hurt us for EXP and LV?",
"Such a good CHILD!",
]);
%><%
setup.image.src = "twinemedia/img/TorielFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_2.wav";
print(setup.createChatArea('[[Continue|TorielLove]]'));
setup.typewriter.write([
"What a relief, to be safe I shall never let you near a VIDEO-GAME.",
]);
%><%
setup.image.src = "twinemedia/img/Toriel.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
print(setup.createChatArea('[[Continue|TorielCliches]]'));
setup.typewriter.write([
"Another thing I have seen.",
"HUMANS obsess over LOVE.",
"LOVE is kind.",
"LOVE is the answer.",
"LOVE conquers all.",
"LOVE is blind.",
"LOVE hurts.",
"LOVE is patient.",
"LOVE means never having to cost a thing.",
"If you can't LOVE me at my worst, then let it go.",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|TorielLoveQuestion]]'));
setup.typewriter.write([
"* (The cliches only get worse from there.)",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
print(setup.createChatArea('[[Yes|TorielLoveYes]] [[No|TorielLoveNo]]'));
setup.typewriter.write([
"... and finally, don't cry over spilt LOVE.",
"Putting aside such wisdom, do you think the world needs more LOVE?",
]);
%><%
print(setup.createChatArea('[[Continue|TorielDatenrule]]'));
setup.typewriter.write([
"Ah, that is good news!",
"We think alike.",
]);
%><%
print(setup.createChatArea('[[Continue|TorielDatenrule]]'));
setup.typewriter.write([
"Very true.",
"We do have so much LOVE in our family already.",
"Others are not like us unfortunately.",
]);
%><%
print(setup.createChatArea('[[Continue|TorielBonelyBleat]]'));
setup.typewriter.write([
"There is another special kind of LOVE though.",
"The computer calls it 'romantic LOVE'.",
"You discovered it from your DATES with Papyrus, Undyne, and Alphys.",
"We can use this for all MONSTER-kind!",
"Allow me to explain.",
"You shall DATE more of us to find your SOULMATE.",
"Together you will RULE over the underground and overground!",
"Your LOVE will help MONSTERS find acceptance within the HUMAN world.",
"You are the HUMAN closest to MONSTERS.",
"So you are the only person who can do this.",
"We have seldom encountered other HUMANS.",
"And the ANIMALS of this world are afraid of us.",
"The goats of this world are much smaller.",
"Much less bipedal.",
"Much less talkative.",
"The fish do not appreciate spears.",
"The skeletons of this world, well ...",
"... will leave you feeling ~~BONELY~~!",
]);
%><%
setup.image.src = "twinemedia/img/TorielFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|TorielGoodIdea]]'));
setup.typewriter.write([
"* (More laughing until she bleats.)",
"* (She had been saving that one for a long time.)",
]);
%><%
setup.image.src = "twinemedia/img/Toriel.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
print(setup.createChatArea('[[Yes|TorielGoodIdeaYes]] [[No|TorielGoodIdeaNo]]'));
setup.typewriter.write([
"Indeed, these are all bad DATES.",
"You, however, will be the best HUMAN for us.",
"Your SOUL understands us.",
"My CHILD, I have found MONSTERS for you to DATE.",
"One of them will be your SOULMATE.",
"Finally, MONSTERS and HUMANS will coexist again, as in the legends.",
"Is this a great idea?",
]);
%><%
print(setup.createChatArea('[[Continue|TorielDummy]]'));
setup.typewriter.write([
"Wonderful! I am relieved."
]);
%><%
print(setup.createChatArea('[[Continue|TorielDummy]]'));
setup.typewriter.write([
"Oh, you think it's a TERRIFIC idea!",
"I am relieved!",
]);
%><%
print(setup.createChatArea('[[Continue|TorielDummyLeave]]'));
setup.typewriter.write([
"Let us do a test.",
"I will bring out your first DATE.",
"They are shy, so it will be good practice.",
]);
%><%
setup.music.stop();
setup.image.src = "twinemedia/img/Black.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|DummyEnter]]'));
setup.typewriter.write([
"* (TORIEL leaves you.)",
"* (You hear sounds of something heavy being pushed across the floor.)",
"* (You're not so sure about this.)",
"* (TORIEL bleats softly as she drags DUMMY into the room.)",
]);
%><%
setup.image.src = "twinemedia/img/Dummy.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|DummyDateStart]]'));
setup.typewriter.write([
"* (It's the DUMMY from the underground.)",
"* (They still smell like the sewer.)",
"* (TORIEL winks and leaves.)",
"* (...)",
"* (You can still hear her just outside.)",
]);
%><%
s.coolSong = false;
setup.image.src = "twinemedia/img/Dummy.png";
setup.music.play("twinemedia/music/mus_napstahouse.ogg");
setup.typewriter.src = "twinemedia/sound/talk_flowey_1.wav";
print(setup.createChatArea('[[Continue|DummyDateMain]]'));
setup.typewriter.write([
"Hey.",
"...",
"So.",
]);
%><%
if (s.dummyMusic === true && s.dummyPolitics === true && s.dummyReligion === true) {
print(setup.createChatArea('[[Continue|DummyDateEnd]]'));
setup.typewriter.write([
"...",
"Anyway, that's about it for me.",
]);
} else if (s.dummyMusic === true || s.dummyPolitics === true || s.dummyReligion === true) {
print(setup.createChatArea('[[Music|DummyDateMusic]] [[Politics|DummyDatePolitics]] [[Religion|DummyDateReligion]]'));
setup.typewriter.write([
"What else do you want to talk about?"
]);
} else {
print(setup.createChatArea('[[Music|DummyDateMusic]] [[Politics|DummyDatePolitics]] [[Religion|DummyDateReligion]]'));
setup.typewriter.write([
"...",
"What do you want to talk about?"
]);
}
%><%
print(setup.createChatArea('[[Yes|DummyDateMusicYes]] [[No|DummyDateMusicNo]]'));
if (s.dummyMusic === true) {
if (s.coolSong === true) {
setup.typewriter.write([
"Oh.",
"Do you want the sad song again?",
]);
} else {
setup.typewriter.write([
"Oh.",
"Do you want the cool song?",
]);
}
} else {
setup.typewriter.write([
"Oh.",
"Cool.",
"You listen to music.",
"That's cool.",
"Yeah, this song is alright.",
"We can listen to something else though.",
"I also have my brother's song.",
"Do you want to listen to that?"
]);
}
s.dummyMusic = true;
%><%
if (s.coolSong) {
setup.image.src = "twinemedia/img/Dummy.png";
print(setup.createChatArea('[[Continue|DummyDateMain]]'));
setup.music.play("twinemedia/music/mus_napstahouse.ogg");
setup.typewriter.write([
"Yeah.",
"Life is sad, usually.",
"Just like this song.",
"Sorry.",
]);
s.coolSong = false;
} else {
setup.image.src = "twinemedia/img/DummyGlad.png";
print(setup.createChatArea('[[Continue|DummyDateMain]]'));
setup.music.play("twinemedia/music/mus_dummybattle.ogg");
setup.typewriter.write([
"My brother is like me, but angry.",
"About everything.",
]);
s.coolSong = true;
}
%><%
print(setup.createChatArea('[[Continue|DummyDateMain]]'));
setup.typewriter.write([
"Yeah.",
"Let's keep up the ambiance.",
]);
%><%
if (s.dummyPolitics) {
print(setup.createChatArea('[[Continue|DummyDateMain]]'));
setup.typewriter.write([
"Can we not?",
"It hurts.",
"Due to my proletarian hardships.",
"Did that make sense?",
]);
} else {
print(setup.createChatArea('[[Continue|DummyDatePoliticsShow]]'));
setup.typewriter.write([
"Oh.",
"You like politics?",
"I just get dragged around by everyone.",
"They use me for their bad arguments.",
"I'm not a straw man though.",
"I'm a plush man.",
]);
}
s.dummyPolitics = true;
%><%
setup.image.src = "twinemedia/img/DummyHurt.png";
print(setup.createChatArea('[[Continue|DummyDateMain]]'));
setup.typewriter.write([
"See?",
"...Ow.",
"It's fine.",
]);
%><%
print(setup.createChatArea('[[Continue|DummyDateMain]]'));
if (s.dummyReligion === true) {
setup.typewriter.write([
"Doing nothing is actually really tough.",
]);
} else {
setup.typewriter.write([
"Religion's weird.",
"People worship my family.",
"Well, some of us.",
"If we look like one of their GODS, life is easy.",
"You just have to sit there, no need to work.",
"My job is hard though.",
"I just have to sit there.",
]);
}
s.dummyReligion = true;
%><%
print(setup.createChatArea('[[Continue|DummyDateLeave]]'));
setup.typewriter.write([
"I'm getting pretty bored.",
"See ya.",
]);
%><%
setup.music.stop();
print(setup.createChatArea('[[Continue|DummyDateGone]]'));
setup.typewriter.write([
"...",
"Can you get me out of here?",
]);
%><%
setup.image.src = "twinemedia/img/Black.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|TorielPreMonsterKid]]'));
setup.typewriter.write([
"* (TORIEL swoops in and drags them out.)",
"* (The best part of this DATE was not having to touch them.)",
"* (And their music.)",
]);
%><%
setup.image.src = "twinemedia/img/Toriel.png";
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
print(setup.createChatArea('[[Continue|MonsterKidDateStart]]'));
setup.typewriter.write([
"You did wonderful, my child!",
"DUMMY is accepting and kind, albeit unexciting.",
"I will guide in your first truly sentient DATE!",
]);
%><%
setup.image.src = "twinemedia/img/Black.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|MonsterKidAppear]]'));
setup.typewriter.write([
"* (TORIEL leaves.)",
"* (...)",
"* (TORIEL leads MONSTER KID in by the hand.)",
]);
%><%
setup.image.src = "twinemedia/img/MonsterKid.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
setup.music.stop();
print(setup.createChatArea('[[Continue|MonsterKidStart]]'));
setup.typewriter.write([
"* (He somehow still isn't grown up.)",
"* (He's harmless, but ...)",
"* (... in your way.)",
"* (Again.)",
]);
%><%
s.mkGaming = false;
setup.image.src = "twinemedia/img/MonsterKid.png";
setup.music.play("twinemedia/music/mus_house2.ogg");
setup.typewriter.src = "twinemedia/sound/talk_asriel.wav";
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"YOOOOO!",
"How's my fave human doing?",
"So, like, Toriel explained this whole DATE thing to me.",
"And it's super confusing.",
"So my parents also explained it to me.",
"And it didn't help.",
"We just talk and stuff, right?",
"I'm TOTALLY ready.",
"Let's get it started!!",
]);
%><%
if (s.mkGaming == true) {
setup.image.src = "twinemedia/img/MonsterKidFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Growing up|MonsterKidGrowingUp]] [[Friends|MonsterKidFriends]] [[Video-games|MonsterKidVideoGames]]'));
setup.typewriter.write([
"* (MONSTER KID games on.)",
]);
} else if (s.mkVg === true && s.mkGrowing === true && s.mkFriends === true) {
setup.image.src = "twinemedia/img/MonsterKid.png";
setup.typewriter.src = "twinemedia/sound/talk_asriel.wav";
print(setup.createChatArea('[[Continue|MonsterKidDateEnd]]'));
setup.typewriter.write([
"Oh, wait, sorry, I'm getting a call from my parents.",
]);
} else if (s.mkVg === true || s.mkGrowing === true || s.mkFriends === true) {
setup.image.src = "twinemedia/img/MonsterKid.png";
setup.typewriter.src = "twinemedia/sound/talk_asriel.wav";
print(setup.createChatArea('[[Growing up|MonsterKidGrowingUp]] [[Friends|MonsterKidFriends]] [[Video-games|MonsterKidVideoGames]]'));
setup.typewriter.write([
"So what else do you want to talk about? This is so fun!"
]);
} else {
setup.image.src = "twinemedia/img/MonsterKid.png";
setup.typewriter.src = "twinemedia/sound/talk_asriel.wav";
print(setup.createChatArea('[[Growing up|MonsterKidGrowingUp]] [[Friends|MonsterKidFriends]] [[Video-games|MonsterKidVideoGames]]'));
setup.typewriter.write([
"Let's get talking like a real DATE!!",
"What do you want to talk about?",
]);
}
%><%
if (s.mkGaming === true) {
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"* (He's fully immersed in his game.)",
"* (You spot a glint of drool at the corner of his mouth.)",
"* (It's going to be impossible to talk to him in this state.)",
]);
} else if (s.mkGrowing === true) {
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"Yo, I don't know why you keep asking about this.",
"You gotta check out MONSTER-pedia.",
]);
} else {
print(setup.createChatArea('[[Yes|MonsterKidGrowingUpYes]] [[No|MonsterKidGrowingUpNo]]'));
setup.typewriter.write([
"What do you mean about growing up?",
"I'm really big for my age!",
"And I'll get even bigger during MONSTER puberty.",
"That should be in a few years.",
"And then 50 years after that, I'll TOTALLY be an ADULT MONSTER!",
"But I'm a really fast grower.",
"So probably more like 48 and a half years.",
"That's, like, so impressive, right?",
]);
s.mkGrowing = true;
}
%><%
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"Oh man, does that mean this DATE is going well?",
"Sweet!!",
"My mom told me that anyone would be lucky to DATE me.",
"She's really awesome.",
]);
%><%
setup.image.src = "twinemedia/img/MonsterKidFrightened.png";
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"Does this mean the DATE isn't going well?",
"My mom told me that would be impossible!!",
"Ok, I'll just find another way to impress you!",
]);
%><%
if (s.mkGaming === true) {
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"* (It's unclear if he's even enjoying himself.)",
"* (It's going to be impossible to talk to him in this state.)",
]);
} else if (s.mkFriends === true) {
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"Undyne is the coolest friend ever.",
"You guys must have had so much fun on your DATE!",
]);
} else {
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"Yeah, I have tons of friends!",
"There's you of course, best bud.",
"Me and Undyne go way back too, and she's the coolest.",
"My mom's not really cool, but she's TOTALLY awesome.",
"And then there's my gaming clan.",
"We're really tight.",
"It's tough to meet in real life though.",
"Most of them are CEOs in the big city.",
"They think I'm cool because I'm a MONSTER.",
"They probably don't know any other cool MONSTERS like me!",
]);
s.mkFriends = true;
}
%><%
if (s.mkGaming === true) {
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.music.play("twinemedia/music/mus_house2.ogg");
setup.typewriter.write([
"* (You unplug the console.)",
"* (He snaps out of it.)",
]);
s.mkGaming = false;
s.mkVg = true;
} else if (s.mkVg === true) {
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"* (Actually, better not.)",
]);
} else {
print(setup.createChatArea('[[Continue|MonsterKidVideoGamesMore]]'));
setup.typewriter.write([
"Oh no way, you play VIDEO-GAMES?",
"You're even cooler than I thought!",
"I can totally get you a spot in my clan.",
"If you're good enough.",
"It's, like, a really good clan.",
"I brought all my games over, so let's play!",
]);
s.mkGaming = true;
}
%><%
setup.image.src = "twinemedia/img/MonsterKidFrightened.png";
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
setup.music.play("twinemedia/music/mus_mettatonbattle.ogg");
print(setup.createChatArea('[[Continue|MonsterKidMain]]'));
setup.typewriter.write([
"* (He starts pulling EVERYTHING out...)",
"* (... consoles, peripherals, disks, ...)",
"* (... cartridges, headsets, controllers, ...)",
"* (... and a TV!)",
"* (And just like that, he's deployed his entire rig.)",
"* (He's started playing already.)",
"* (By himself.)",
"* (He can't tear his eyes away from the screen.)",
"* (You've lost him.)",
]);
%><%
print(setup.createChatArea('[[Continue|MonsterKidHangUp]]'));
setup.typewriter.write([
"Oh hey mom!",
"Yeah it's really fun! We even played VIDEO-GAMES!",
"No, barely one round.",
"I know, I'm pretty bored too.",
"Can you come pick me up?",
"Thanks mom!",
"TORIEL! I'm finished!",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|TorielPreJerry]]'));
setup.typewriter.write([
"* (TORIEL dutifully comes in.)",
"* (She helps MONSTER KID pack up his things and takes him out by the hand.)",
"* (Her maternal instincts are unstoppable.)",
]);
%><%
setup.music.stop();
setup.typewriter.src = "twinemedia/sound/talk_toriel_1.wav";
setup.image.src = "twinemedia/img/Toriel.png";
print(setup.createChatArea('[[Continue|JerryPreDate]]'));
setup.typewriter.write([
"What a darling, is he not?",
"He is young, and he is also young at heart.",
"Play is important for any coupling!",
"His VIDEO-GAMES do worry me.",
"As does his mother.",
"She must learn to let go of her CHILD.",
"...",
"I shall fetch the next DATE.",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
setup.image.src = "twinemedia/img/Black.png";
print(setup.createChatArea('[[Continue|JerryDateStart]]'));
setup.typewriter.write([
"* (Before she can notice the irony, she leaves.)",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
setup.image.src = "twinemedia/img/Black.png";
setup.music.play("twinemedia/music/mus_date_tense.ogg");
print(setup.createChatArea('[[Continue|JerryDatePreEntrance]]'));
setup.typewriter.write([
"* (... Moments later, you overhear an argument.)",
"* (... It seems the next DATE ate some of TORIEL's pie without asking.)",
"* (... And somehow broke the toilet.)",
"* (... Now he needs the WiFi password.)",
"* (For some reason.)",
"* (TORIEL pushes him into the room and slams the door.)",
]);
%><%
setup.music.stop();
print(setup.createChatArea('[[Continue|JerryDateEntrance]]'));
setup.typewriter.write([
"* (...)",
"* (Oh no.)",
]);
%><%
setup.music.play("twinemedia/music/mus_waterfall.ogg");
setup.image.src = "twinemedia/img/Jerry.png";
print(setup.createChatArea('[[Continue|JerryDateMain]]'));
setup.typewriter.write([
"* (It's JERRY.)",
]);
%><%
if (s.jerryGossip === true && s.jerryMoney === true && s.jerryEx === true) {
setup.typewriter.src = "twinemedia/sound/talk_3.wav";
print(setup.createChatArea('[[Continue|JerryDateEnd]]'));
setup.typewriter.write([
"Whatever, I'm kind of over this.",
"Tell TORIEL that I'll be in the car.",
"So she can give me a ride home.",
]);
} else if (s.jerryGossip === true || s.jerryMoney === true || s.jerryEx === true) {
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Gossip|JerryDateGossip]] [[Money|JerryDateMoney]] [[Ex|JerryDateEx]]'));
setup.typewriter.write([
"* (JERRY goes back to his phone with one hand.)",
"* (... and vapes with the other.)"
]);
} else {
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Gossip|JerryDateGossip]] [[Money|JerryDateMoney]] [[Ex|JerryDateEx]]'));
setup.typewriter.write([
"* (JERRY is scrolling on his phone.)",
"* (Looks like you'll have to start the conversation.)"
]);
}
%><%
setup.typewriter.src = "twinemedia/sound/talk_3.wav";
if (s.jerryGossip === true) {
print(setup.createChatArea('[[Continue|JerryDateMain]]'));
setup.typewriter.write([
"You want to know more?",
"Whatever, you should have just listened the first time.",
"Has anyone ever told you that your pushiness is a huge turn-off?",
]);
} else {
print(setup.createChatArea('[[Yes|JerryDateGossipMore]] [[No|JerryDateGossipMore]]'));
setup.typewriter.write([
"Ugh, don't get me started on drama.",
"I've had the worst few years.",
"No one is around to hang out anymore.",
"Like, what happened to the old frat days back in college?",
"Or my awesome investment banking days?",
"Or back when I was in consulting?",
"Now, all my friends just spend time with their partners.",
"Like, Alphys and Undyne seem soooooo happy.",
"Do you really believe that?",
]);
}
s.jerryGossip = true;
%><%
print(setup.createChatArea('[[Continue|JerryDateGossipNoResponse]]'));
setup.typewriter.write([
"That wasn't a question, I'm not done.",
"Like, did you seem them at BURNING MONSTER this year?",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|JerryDateGossipBurning]]'));
setup.typewriter.write([
"* (You know better than to try and respond.)",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_3.wav";
print(setup.createChatArea('[[Continue|JerryDateLineEnd]]'));
setup.typewriter.write([
"Oh man, that festival is like nothing else.",
"You have to be a unique kind of person to get it though.",
"Like, I'm not sure if it's for you.",
"You see, you're...",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Continue|JerryDateMain]]'));
setup.typewriter.write([
"* (He keeps going for awhile.)",
"* (This is profoundly unattractive.)",
"* (No one is enjoying this.)",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_3.wav";
if (s.jerryMoney === true) {
print(setup.createChatArea('[[Continue|JerryDateMain]]'));
setup.typewriter.write([
"Relax, I'll hook you up with a MonsterCoin account.",
"I'm going to be so rich.",
]);
} else {
print(setup.createChatArea('[[Continue|JerryDateLineEnd]]'));
setup.typewriter.write([
"Money is just a tool of government control!",
"TORIEL needs to wake up and stop being a sheep!",
"I don't care if she IS a sheep!",
"She's just going to drag you further into this nightmare.",
"Listen, you just need to invest in my new currency, MonsterCoin.",
"You've probably heard of it.",
"It's like Gold or Dark Dollars, except no one uses it yet.",
"It's going to change the world.",
"And make me disgustingly rich.",
"And you too if you invest.",
"Kind of.",
"It's simple, you just give me money.",
"And then ...",
]);
}
s.jerryMoney = true;
%><%
setup.typewriter.src = "twinemedia/sound/talk_3.wav";
if (s.jerryEx === true) {
print(setup.createChatArea('[[Continue|JerryDateMain]]'));
setup.typewriter.write([
"Nah, I don't want to dig up old bones again, you know?",
"Anyway, you can also find it all over my MONSTERGRAM story.",
]);
} else {
print(setup.createChatArea('[[Continue|JerryDateLineEnd]]'));
setup.typewriter.write([
"Oh man, yeah my ex was terrible.",
"She would always do the worst stuff.",
"Like want to spend time with me.",
"Or ask for emotional support when she lost her job.",
"SOOOOO clingy.",
"Who does she think she is?",
"Like, I'm trying to start my music career, you know?",
"One time she ...",
]);
}
s.jerryEx = true;
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
setup.image.src = "twinemedia/img/Black.png";
setup.music.stop();
print(setup.createChatArea('[[Continue|TorielPostJerryEnter]]'));
setup.typewriter.write([
"* (JERRY leaves, finally.)",
"* (TORIEL comes back in.)",
]);
%><%
setup.image.src = "twinemedia/img/TorielBattleHurt.png";
setup.music.play("twinemedia/music/mus_house1.ogg");
print(setup.createChatArea('[[Continue|TorielPostJerry]]'));
setup.typewriter.write([
"* (She has a half-eaten BUTTERSCOTCH-CINNAMON PIE.)",
"* (It's gross.)",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_toriel_3.wav";
print(setup.createChatArea('[[Continue|TorielPostJerryLeave]]'));
setup.typewriter.write([
"Well, he certainly has opinions on things.",
"And he expresses them.",
"Constantly.",
"Though he is rough, you can learn new things with him.",
"A SOULMATE who challenges is very valuable.",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_toriel_2.wav";
setup.image.src = "twinemedia/img/TorielFrightened.png";
print(setup.createChatArea('[[Continue|PieTime]]'));
setup.typewriter.write([
"...",
"He expects me to do what?",
"Oh no, he's going to smoke in the car!",
"My child, I apologize, I must leave you and take care of this.",
]);
%><%
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
setup.image.src = "twinemedia/img/Black.png";
print(setup.createChatArea('[[Yes|PieEatYes]] [[No|PieEatNo]]'));
setup.typewriter.write([
"* (TORIEL gives you the pie and flutters out.)",
"* (...)",
"* (JERRY really went to town on the pie.)",
"* (Somehow, his hands made the whole thing stickier.)",
"* (...)",
"* (Eat the pie?)",
]);
%><%
s.pieEaten = true;
print(setup.createChatArea('[[Continue|DateChoice]]'));
setup.typewriter.write([
"* (You eat the rest, carefully avoiding where JERRY touched it.)",
"* (HP fully restored!)",
"* (Stomach full!)",
"* (Mother proud!)",
]);
%><%
s.pieEaten = false;
print(setup.createChatArea('[[Continue|DateChoice]]'));
setup.typewriter.write([
"* (You have standards.)",
"* (And a growling stomach.)",
]);
%><%
print(setup.createChatArea('[[Dummy|DummyChoice]] [[Monster Kid|MonsterKidChoice]] [[Jerry|JerryChoice]] [[None|NoneChoice]]'));
setup.typewriter.write([
"* (...)",
"* (You wait around some more.)",
"* (All of these DATES are tiring.)",
"* (Are these three your only options?)",
"* (DUMMY is gentle and understanding.)",
"* (...But doesn't really have a body.)",
"* (MONSTER KID is playful and family-oriented.)",
"* (...But isn't really an adult.)",
"* (JERRY is ...)",
"* (...)",
"* (JERRY.)",
"* (Who is your choice at this point?)",
]);
%><%
s.choice = 'DUMMY';
print(setup.createChatArea('[[Continue|MomentPause]]'));
setup.typewriter.write([
"* (They'll give you liberty to pursue your dreams.)",
"* (...Kind of like being alone.)",
]);
%><%
s.choice = 'MONSTER KID';
print(setup.createChatArea('[[Continue|MomentPause]]'));
setup.typewriter.write([
"* (Let's hope he can get through MONSTER puberty even faster.)",
"* (Maybe you'll even get that clan invite.)",
]);
%><%
s.choice = 'JERRY';
print(setup.createChatArea('[[Continue|MomentPause]]'));
setup.typewriter.write([
"* (BURNING MONSTER would be a lot of fun.)",
"* (And you don't need to become like him.)",
]);
%><%
s.choice = 'NONE';
print(setup.createChatArea('[[Continue|MomentPause]]'));
setup.typewriter.write([
"* (There's likely another way to serve the MONSTER community.)",
"* (And you'll find out how.)",
]);
%><%
print(setup.createChatArea('[[Continue|SansEnter]]'));
setup.typewriter.write([
"* (...)",
"* (Good thing you don't need to make up your mind now.)",
"* (...)",
"* (You hear someone come into the house.)",
"* (The step is familiar.)",
"* (It has a boney quality.)",
"* (Without the trousle.)",
"* (It's your old friend SANS!)",
]);
%><%
s.sansJokes = false;
s.sansLols = false;
s.sansPuns = false;
s.sansBadPuns = false;
s.sansUnforgivablePuns = false;
s.sansScience = false;
setup.sans = true;
setup.image.src = "twinemedia/img/Sans.png";
setup.typewriter.src = "twinemedia/sound/talk_sans.wav";
setup.music.play("twinemedia/music/mus_muscle.ogg");
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"hey.",
"i saw toriel driving jerry home.",
"so i thought i'd come in and see what's up.",
]);
%><%
setup.image.src = "twinemedia/img/Sans.png";
setup.typewriter.src = "twinemedia/sound/talk_sans.wav";
let path = '[[Jokes|SansDateJokes]] [[LOLs|SansDateLOLs]] [[Puns|SansDatePuns]]';
if (s.sansPuns === true && s.sansLols === true && s.sansJokes === true) {
path += ' [[Bad Puns|SansDateBadPuns]]';
}
if (s.sansBadPuns === true) {
path += ' [[Unforgivable Puns|SansDateUnforgivablePuns]]';
}
if (s.sansUnforgivablePuns === true) {
path += ' [[Science|SansDateScience]]';
}
print(setup.createChatArea(path));
if (s.sansUnforgivablePuns === true && s.sansBadPuns === true &&
s.sansPuns === true && s.sansLols === true && s.sansJokes === true) {
setup.typewriter.write([
"ok, i think that's my max.",
"we can talk about boring things.",
]);
} else if (s.sansBadPuns === true && s.sansPuns === true &&
s.sansLols === true && s.sansJokes === true) {
setup.typewriter.write([
"you might hate me by the end of this.",
"not that i care.",
]);
} else if (s.sansPuns === true && s.sansLols === true && s.sansJokes === true) {
setup.typewriter.write([
"so you like these?",
"i've got more where that came from.",
]);
} else if (s.sansPuns === true || s.sansLols === true || s.sansJokes === true) {
setup.typewriter.write([
"this is fun, keep it up.",
]);
} else {
setup.typewriter.write([
"i wanna try this date thing too.",
"gimme your best shot.",
]);
}
%><%
if (s.sansJokes === true) {
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"sorry, i'm bone dry for jokes.",
]);
} else {
print(setup.createChatArea('[[Continue|SansDateJokesMore]]'));
setup.typewriter.write([
"what did the most famous skeleton president say in his speech?",
]);
}
s.sansJokes = true;
%><%
setup.image.src = "twinemedia/img/SansShrug.png";
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"the only thing we have to fear is femur itself.",
]);
%><%
if (s.sansLols === true) {
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"sorry, i don't have the spine for more lols.",
]);
} else {
print(setup.createChatArea('[[Continue|SansDateLOLsMore]]'));
setup.typewriter.write([
"how did the skeleton student succeed through his studies?"
]);
}
s.sansLols = true
%><%
setup.image.src = "twinemedia/img/SansShrug.png";
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"by giving it the old skele-try."
]);
%><%
if (s.sansPuns === true) {
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"sorry, my ribs have been too tickled for more puns.",
]);
} else {
print(setup.createChatArea('[[Continue|SansDatePunsMore]]'));
setup.typewriter.write([
"why did the skeleton's barbecue fail?"
]);
}
s.sansPuns = true;
%><%
setup.image.src = "twinemedia/img/SansShrug.png";
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"she ran out of spare ribs.",
]);
%><%
if (s.sansBadPuns === true) {
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"sorry, my ribs have been too tickled for more bad puns.",
]);
} else {
print(setup.createChatArea('[[Continue|SansDateBadPunsMore]]'));
setup.typewriter.write([
"tibia honest, you might not like this next one.",
]);
}
s.sansBadPuns = true;
%><%
setup.image.src = "twinemedia/img/SansShrug.png";
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"that was it.",
]);
%><%
if (s.sansUnforgivablePuns === true) {
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"please forgive me for not wanting to repeat that one.",
]);
} else {
print(setup.createChatArea('[[Continue|SansDateUnforgivablePunsMore]]'));
setup.typewriter.write([
"*huff* *huff* alright, i'll pull out all the stops for this one.",
"i'm patella-ing you.",
"no more fib-ulas.",
"really going for broke.",
"all the way down to the bone.",
"skull-fully execute.",
"here goes.",
"what is the purpose of skeleton football?",
]);
}
s.sansUnforgivablePuns = true;
%><%
setup.image.src = "twinemedia/img/SansShrug.png";
print(setup.createChatArea('[[Continue|SansDateMain]]'));
setup.typewriter.write([
"to get into the end-bone.",
]);
%><%
setup.sans = true;
setup.image.src = "twinemedia/img/Sans.png";
setup.typewriter.src = "twinemedia/sound/talk_sans.wav";
setup.music.stop();
print(setup.createChatArea('[[Continue|SansDateSerious]]'));
setup.typewriter.write([
"i'm glad you asked me about this.",
"it's the real reason i came to see you.",
"we've kept up our research from the underground.",
"the abrupt timeline jumps have subsided in recent years.",
"but we have picked up on some other activity.",
"not caused by you this time, but for you.",
]);
%><%
setup.sans = true;
setup.image.src = "twinemedia/img/Sans.png";
setup.typewriter.src = "twinemedia/sound/talk_sans.wav";
setup.music.play("twinemedia/music/mus_reunited.ogg");
print(setup.createChatArea('[[Continue|SansDateOutside]]'));
setup.typewriter.write([
"listen.",
"toriel worked hard to set up all of these dates for you.",
"all in the name of finding your soulmate.",
"but we have evidence that none of these monsters are your soulmate.",
"so no worries.",
"you won't be stuck with the dummy.",
"you won't have to wait through monster kid's gross puberty.",
"he won't ever move out of his mom's house anyway.",
"and jerry will never be happy.",
"but that's because he's awful.",
"from our research, the new anomalies are from your true soulmate.",
"we've been able to pick up a few messages.",
"they seem to call out to you by many names.",
"'miu miu'",
"'squish'",
"'clam'",
"'clamclam'",
"'clamclamclamclamclamclamclamclam'",
"'moon child'",
"'baby cat'",
"and a bunch of others that involve your butt.",
]);
%><%
setup.music.stop();
print(setup.createChatArea('[[Yes|FinalChoiceYes]] [[No|FinalChoiceNo]]'));
setup.typewriter.write([
"you know what, I'll let him take it from here.",
"let me know your response when he's done or whenever you're ready to move on.",
]);
%><%
print(setup.createChatArea('[[Yes|FinalChoiceYes]] [[No|FinalChoiceNo]]'));
setup.typewriter.write([
"i'm going to assume that was a mistake.",
"let me know your response whenever.",
]);
%><%
setup.music.play("twinemedia/music/mus_xpart.ogg");
print(setup.createChatArea('[[End]]'));
setup.typewriter.write([
"he asked to put this song on.",
"hop on.",
"have fun.",
"live happily after."
]);
%><%
setup.sans = false;
setup.typewriter.src = "twinemedia/sound/talk_default.wav";
print(setup.createChatArea('[[Credits]]'));
setup.typewriter.write([
"I love you.",
"And I can't wait to spend a lifetime with you.",
"Love, Jon"
]);
%><%
setup.music.play("twinemedia/music/mus_dogsong.ogg");
%>
* Made by <a href="https://jonc.dev" target="_blank">Jon</a> for his love.
* All assets (fonts, sounds, music, characters, and images) from <a href="https://undertale.com/" target="_blank">UNDERTALE</a> by Toby Fox. Please buy his wonderful game.
* DATE N' RULE Title created using <a href="https://fontmeme.com/undertale-logo-font/" target="_blank">Undertale Logo Font</a>.
* 'Determination' font by Haley Wakamatsu at <a href="https://www.behance.net/gallery/31268855/Determination-Better-Undertale-Font" target="_blank">Behance</a>.
* 'Sans' font by fraxtil at <a href="http://fra.xtil.net/undertale/fonts/Comic-Sans-UT.zip" target="_blank">fra.xtil.net</a>.
* Sounds by Benno950 at <a href="https://www.deviantart.com/benno950/art/Download-Undertale-Sound-Effects-589709656" target="_blank">DeviantArt</a>.
* Images from the <a href="https://undertale.fandom.com/wiki/Main_Page" target="_blank">Undertale Wiki</a>.
* No copyright is claimed in UNDERTALE and to the extent that material may appear to be infringed, I assert that such alleged infringement is permissible under fair use principles in U.S. copyright laws. If you believe material has been used in an unauthorized manner, please <a href="https://jonc.dev" target="_blank">contact me</a>.
<div class="show-buttons">
<br />
[[Back|Start]]
</div>