This excerpt, written in Yarnspinner, is the opening sequence of a text-based game called “Haunted”. The game’s story involves the developing toxic relationship between a girl called Delphine and a haunted house which gives her strange visions of her future. The user interface was designed as a series of evocative sketches with dialogue and narration as captions, so each line needed to be concise and meaningful. Sound and image cues were controlled via the Yarn script, and so custom Yarn commands are seeded throughout to provide transitions between image and sound.
title: Scene1
tags:
—
<<PlayLoop SoundManager “none”>>
<<NextPlayer ImageController “del8”>>
<<NextBackground ImageController “none”>>
<<NextNPC ImageController “none”>>
<<PlayMusic SoundManager “scene1”>>
Halloween night. This year finally trick-or-treating with no parents hanging on, holding you back.
They finally caved, on the costume, on going out without them, on everything.
For an 8-year-old, you’re a pretty forceful negotiator.
Before letting you out, Mom and Dad had just one condition,
(and when they actually agree on something, you know they’re serious about it),
“Don’t go near that nasty old place at the end of the street.”
->”That nasty old place at the end of the street.”
<<jump Scene1_2>>
===
title: Scene1_2
—
<<NextBackground ImageController “ihousefar”>>
Up on the hill, looking down upon the neighborhood with its empty-eyed broken window stare.
The front yard is heaped with rotting old shingles, slipped loose from the roof like the baby teeth you started losing last year.
A nasty old place.
<<NextBackground ImageController “none”>>
“Why any of you kids would want to go up there is beyond me,” says Mom. “But every year someone always does.”
“And then they get hurt,” adds Dad. “Delphine, do you remember what I told you about tetanus?”
->”Yes. You get it from rusty nails and nasty old houses.”
<<jump Scene1_3>>
->”No. It was boring.”
<<jump Scene1_3>>
===
title: Scene1_3
—
“It’s a terrible disease and you get it from old buildings, so don’t go up there!” Dad pats you on the shoulder. “You’re all we’ve got, kiddo. No back-ups! Be safe.”
And finally you’re free.
<<NextBackground ImageController “neighborhood1”>>
You light out for the meet-up spot, werewolf tail streaming behind you.
Mom took you to three Halloween stores before you found the tail and ears that matched to your satisfaction.
Under the cool white moon of the streetlight, your three friends await —
<<NextNPC ImageController “ash8”>>
Ash – managing to look bored even under the white sheet of a no-effort ghost costume.
<<NextNPC ImageController “jul8”>>
Jules – cat ears, face paint, leotard, and tail all add up to the kind of adorable costume parents love for pictures.
<<NextNPC ImageController “riv8”>>
River – dressed as…no, you really can’t say what the costume is meant to be.
<<NextNPC ImageController “none”>>
The four of you, inseparable since kindergarten, best friends.
Though lately the thought has crossed your mind — which of them is your best-best friend…?
->Maybe it’s Ash…Ash is funniest…
<<jump Scene1_4_Ash>>
->Maybe it’s Jules…Jules is nicest…
<<jump Scene1_4_Jules>>
->Maybe it’s River…River is…different.
<<jump Scene1_4_River>>
===
title: Scene1_4_Ash
—
And it’s Ash who sees you first, poking one arm free to wave.
Jules hops up and down in delight. “Delphine’s here!”
<<jump Scene1_5>>
===
title: Scene1_4_Jules
—
Jules sees you and bounds to the edge of the streetlight’s pool of illumination. “Delphine! You’re a werewolf!”
<<jump Scene1_5>>
===
title: Scene1_4_River
—
River sees you, blinks at you twice, smiling a squinty nervous smile.
Ash and Jules don’t realize you’ve arrived until you join them under the streetlight.
<<jump Scene1_5>>
===
title: Scene1_5
—
<<NextNPC ImageController “ash8”>>
“Okay, now we’re all here, can we pleeeease get some candy?” says Ash. “It’s literally Halloween and I haven’t had a single candy yet!”
<<NextNPC ImageController “jul8”>>
“Where should we start?” asks Jules. “I heard the Lawsons are giving out full-size candy bars!”
<<NextNPC ImageController “riv8”>>
“Chocolate makes my stomach hurt,” says River. “Can’t we start at Mark’s? His parents had Jolly Ranchers last year.”
->Side with Jules.
<<jump Scene1_6_Jules>>
->Side with River.
<<jump Scene1_6_River>>
->See what Ash thinks.
<<jump Scene1_6_Ash>>
===
title: Scene1_6_Ash
—
<<NextNPC ImageController “ash8”>>
“I don’t care where we start, as long as we frickin’ start already! Let’s go, or everybody else is gonna get the good candy.”
You’re amazed Ash’s eyeroll is visible through the ghost costume’s tiny eye slits.
->Side with Jules.
<<jump Scene1_6_Jules>>
->Side with River.
<<jump Scene1_6_River>>
===
title: Scene1_6_Jules
—
<<NextNPC ImageController “jul8”>>
“I want the full-size candy bars!” you declare.
Jules squeals happily, and the party sets off.
To the Lawsons!
<<set $jollyRanchersChosen to false>>
<<jump Scene1_7>>
===
title: Scene1_6_River
—
<<NextNPC ImageController “riv8”>>
“I want some Jolly Ranchers!” you declare.
Candy bucket held high, River cheers your decision.
To Mark’s house!
<<set $jollyRanchersChosen to true>>
<<jump Scene1_7>>
===
title: Scene1_7
—
<<NextNPC ImageController “none”>>
<<if $jollyRanchersChosen is true>>
<<NextBackground ImageController “neighborhood2”>>
Mark’s parents are dressed up as witches, and they offer heaping handfuls of Jolly Ranchers from within their arcane cauldron.
Everyone’s candy bucket gains a satisfying heft.
<<else>>
<<NextBackground ImageController “neighborhood3”>>
The rumors are true — full-size candy bars at the Lawsons!
And in their unbelievable goodness, they offer River a glow-in-the-dark rubber ball printed to look like an eyeball.
Predictably, this delights River more than candy ever would.
<<endif>>
The first house of the night and already a windfall.
Halloween is so much better post-parents.
As the four of you wander down the street, it catches your eye.
<<NextBackground ImageController “housefar”>>
Up on the hill, half-invisible against a black sky.
The old house.
->Ask the others about the house.
<<jump Scene1_8a>>
->Keep quiet.
<<jump Scene1_8b>>
===
title: Scene1_8a
—
“Hey, did your parents say anything about that old house?” you ask.
Jules shivers.
Ash slumps.
River looks away.
<<NextNPC ImageController “jul8”>>
“They said to stay out.”
<<NextNPC ImageController “ash8”>>
“It’s too dangerous.”
<<NextNPC ImageController “riv8”>>
“And it’s gross.”
->Point to the haunted house. “We should go up there!”
<<jump Scene1_9>>
===
title: Scene1_8b
—
<<NextNPC ImageController “ash8”>>
“River,” and there’s something ominous in Ash’s tone. “What are you supposed to be?”
There are not a lot of clues, it’s true.
Tin foil, cardboard, glue, googly eyes, and construction paper have come together as something unclear in both form and meaning.
<<NextNPC ImageController “riv8”>>
“Oh, I’m a ghost from outer space.”
<<NextNPC ImageController “jul8”>>
“You’re the ghost…of an alien?” asks Jules.
<<NextNPC ImageController “riv8”>>
“Hmm, I never really thought about it like that.”
<<NextNPC ImageController “ash8”>>
“What did you think about it like then?” Ash says.
->Point to the haunted house. “We should go up there!”
<<jump Scene1_9>>
===
title: Scene1_9
—
<<NextNPC ImageController “none”>>
“We should go up there!” The more you say it, the more real it is.
There’s nothing stopping you. Not anymore.
Your friends look on, stricken.
->Appeal to River.
<<jump Scene1_10_River>>
->Appeal to Jules.
<<jump Scene1_10_Jules>>
->Appeal to Ash.
<<NextNPC ImageController “ash8”>>
<<jump Scene1_10_Ash>>
===
title: Scene1_10_Ash
—
<<NextNPC ImageController “ash8”>>
“Ash, come on!” You pull on Ash’s sheet until it threatens to slip loose. “It’ll be super scary!”
“No thanks.” Ash yanks back possession of the sheet. “It’ll be lame. It’s just a trashed old house.”
<<jump Scene1_11>>
===
title: Scene1_10_River
—
<<NextNPC ImageController “riv8”>>
“River, come on!” you say, tugging on one of River’s rubbery green gloves. “It’ll be so cool.”
<<if $jollyRanchersChosen is true>>
“Nuh uh.” River pulls away. “My parents say the vibrations are completely off there. It’s a negative energy confluence.”
<<else>>
“No way!” River pulls away. “I still want to get some Jolly Ranchers, not visit a negative energy nexus close-up!”
<<endif>>
<<jump Scene1_11>>
===
title: Scene1_10_Jules
—
<<NextNPC ImageController “jul8”>>
“Jules, come on!” You gesture to Jules with one furry werewolf paw. “It’ll be fun.”
<<if $jollyRanchersChosen is false>>
“Sorry, Delphine.” Jules clutches the costume cat’s tail like a weapon, or a security blanket. “My mom said it’s dangerous to go inside.”
<<else>>
“I still wanna get some candy bars!” Jules retreats behind Ash, peering at you with a hurt expression. “Not go into that creepy house!”
<<endif>>
<<jump Scene1_11>>
===
title: Scene1_11
—
<<NextNPC ImageController “none”>>
Unbelievable. What a bunch of nerds.
“Fine! I’ll go by myself ’cause you’re all a bunch of scaredy cats!”
You pull away from the group, storming up the front walk of the old house.
As you go, you hear them call out. “Delphine! Delphine, wait!”
<<jump House1_1>>
===