The package is the size of a large shoebox. Your contact in the movement seemed sure that whatever’s in it would help the besieged students. (link-show: "What is it", ?what)? [What weapon could counter tear gas and water cannons shooting indelible blue dye?
The reason you’re a trusted courier is because you don’t ask questions. When it comes to contraband, everything is on a need to know basis. You decide you [[need to know->open box]].](what|You slice open the box. It’s not what you (link-show: "expected", ?that).
[The package is full of (link-show: "masks", ?deliverance). [Nothing but masks. This is the promised deliverance?](deliverance|](that|
(click: "promised deliverance")+(t8n: "dissolve")[(display: "select mask")]You laugh bitterly. What good are masks against uniforms? Both are disguises, but only one has power today. You pick through the box. Helmets with steel-caged face guards, hardshell body armor, and riot shields skulk beyond the door. Against all that, you settle on the (cycling-link: bind $mask, "Guy Fawkes", "black ski", "dazzle camo", "blue surgical", "gas") mask.
(link-show: "Yeah", ?do)? [It’s just a mask. But it’ll [[have to do->mask]].](do|A $mask mask. Okay. {
(if: $mask is "Guy Fawkes")[(print: $guyFawkes)]
(else-if: $mask is "black ski")[(print: $blackSki)]
(else-if: $mask is "dazzle camo")[(print: $dazzleCamo)]
(else-if: $mask is "gas")[(print: $gas)]
(else-if: $mask is "blue surgical")[(print: $blueSurgical)]
}
An explosion out in the hallway rocks the lab. They’re (link-reveal: "here")[(set: $hasMask to true)(set: $air to 100)(set: $noise to 100)(goto: "endgame")].The lab is full of smoke. Screeching steel assaults your senses. The $mask mask hangs limp in your hands. Behind the door someone in a uniform with a megaphone shouts (link-show: "an ultimatum", ?ultimatum). (if: $mask is "blue surgical")[(set: $mask to "surgical")](if: $mask is "black ski")[(set: $mask to "ski")](if: $mask is "dazzle camo")[(set: $mask to "dazzle")]
[A countdown.
[]<countdown|
[]<endgame|
{
(live: .4s)[
(if: $timer is 5)[
(stop:)
(goto: "gameover")
]
(else: )[
(set: $timer to it - 2.5)
(set: $megaphone to $timer/10)
(event: when $timer%2 is 0)[(replace: ?countdown)[The megaphone blares $megaphone.]]
(event: when $timer is 95)[(replace: ?endgame)[You put on the $mask mask.]]
(event: when $timer is 75)[(replace: ?endgame)[Sparks fly from the lab door.]]
(event: when $timer is 55)[(replace: ?endgame)[An acoustic cannon perforates your bones.]]
(event: when $timer is 35)[(replace: ?endgame)[The lab equipment goes up in flames.](set: $haveAir to false)(set: $haveNoise to false)(replace: ?SideBar)[(display: "meter display")]]
(event: when $timer is 25)[(replace: ?endgame)[They bust down the door.]]
(event: when $timer is 15)[(replace: ?endgame)[Behind the $mask mask you weep.]]
(event: when $timer < 7.5)[(replace: ?endgame)[Behind the $mask mask you howl.]]
]
]
}
](ultimatum|(event: when time > 3s)[
=><=
#Masks
]\
(event: when time > 5s)[
=><=
###by Mark Sample
]
(event: when time > 6s)[
=><=
[(text-style: "fade-in-out")[(link: "Once more")[(reload:)] or give up?]]<again|
]
(click: "give up")[(replace: ?again)[(link: "You cannot give up.")[(reload:)]]]
(enchant: ?Link, (text-color: white + black))
=><=
#Masks
{(event: when time > 2s)[(text-style: "fade-in-out")[[[Listen->sirens]]]]}The shriek of sirens calls you to the window. The wailing cry dissects your spine, a scalpel slicing right through you.
It’s been, what? (link-show: "Three days", ?five)? [(t8n: "dissolve")[More like five, barricaded in this university lab while the city erupts below you.
They cut off the internet yesterday. Severed the fiber, jammed the wifi. Now you rely on sensors in [[the lab->Lab Central]] to tell you what’s up.
And yeah, [[the window]].]](five|You (nth: visit, "look around", "survey", "take in") the lab (nth: visit, "for the millionth time", "again"). (if: visits is 1)[Some sort of environmental science facility. Not a chem lab. You laugh at the idea of brewing Molotovs in Coke bottles and battling your way out. Not a chance. You’re trapped.
] (unless: $visitLab)[The tables are cluttered with [[equipment->the sensors]]. ](if: $lookWindow < 4 )[A [[window->the window]] looks out to the city.] (if: visits is 2)[A solid steel door[, locked and barricaded from within,](door| is your only exit.]
[](actions|
(if: $booms is 0 and $haveNoise is true)[(replace: ?actions)[(display: "booms")]]
(if: $booms > 0 and $air >75)[(replace: ?actions)[You remember that the [[package]] you snuck here to deliver is in the lab, stashed among the equipment.]]
(unless: $door)[
(click: "door")[(set: $door to true)(show: ?door)]]
(else:)[(show: ?door)]{
(live: 1s)[
[Two]<boom| explosions echo from the hallway outside the lab.
(set: $noise to it + 6.5)
(set: $booms to it + 1)
(replace: ?sideBar)[(display: "meter display")]
(replace: ?boom)[(nth: (min: 4, $booms), "Two", "Three", "Four", "Five")]
(if: $booms > 4)[(stop:)]
]
}(set: $visitLab to true)The equipment in the lab is as inscrutable as the Chief Executive’s daily decrees. You (link: "are")[(show: ?package)*were*] a courier, not a scientist. [(t8n: "dissolve")[An underground courier. Smuggling in deliverance. But when you broke through the perimeter to get here, the protestors had somehow (link-show: "vanished", ?vanished).]](package| [(t8n: "dissolve")[Escaped? Surrendered? Captured? You don’t know.
On your own, over the past (link: "three")[five] days you’ve managed to figure out [[a few environmental sensors->air quality monitor]].]](vanished|The air quality sensor doesn’t measure [air]<particulates|.
(more:)[You examine the sensor’s gauge.]
(click: "sensor’s gauge")+(t8n: "dissolve")[(set: $haveAir to true)(display: "Sidebar")(if: $air < 33)[ In the green. Your body already knows this. You inhale deeply.](else-if: $air > 33 and < 66)[ In the orange. Like a smoggy summer day with the taste of ozone on your tongue.](else:)[ In the red. The air in the lab has been hazardous since last night.] Like the old song goes, *You don’t need a weatherman to know which way the wind blows.*
The other device you’ve got working is the [[noise monitor]].]
(click-replace: ?particulates)[particulates]
(click-append: "particulates")[ and irritants]
(click-append: "particulates and irritants")[ so much as tells you whether or not you can breathe]Every night the police blast a playlist of weaponized (cycling-link: bind $sound, "sound", "heavy metal", "babies shrieking", "sirens and klaxons") through the streets below.
(event: when $sound is "sirens and klaxons")+(t8n: "dissolve")[The monitor tells you what nerve-shattering decibels have been breached, but it’s not merely the loudness that hollows you out. It’s the random intervals, the clawing screams, the lack of sleep. You check the noise meter.
{(click: "noise meter")+(t8n: "dissolve")[(set: $haveNoise to true)(replace: ?SideBar)[(display: "meter display")]
All’s quiet right now. (live: 1.5s)[ Suddenly a thunderous boom rattles [[the window]].(set: $noise to it + 15)(replace: ?SideBar)[(display: "meter display")](stop:)]]
}](if: $lookWindow >= 1 and $haveAir is false)[\
On second thought, you decide to check [[the lab equipment->the sensors]].\
]\
(else:)[You edge up to the window...
[]<birdseye|
(click: "chaos below")[(replace: ?birdseye)+(t8n: "dissolve")[(nth: visit, "Under a full moon a haze of smoke shrouds the streets. A revolution in soft focus.","Thousands of protestors hide under a rainbow sea of open umbrellas.", "Drones whir through the sky.", "Xenon arc searchlights obliterate the night.", "Under the star-scarred sky, flares and tracer bullets put on a bloody lightshow.")
(display: "beep")]]]
(if: $lookWindow is 0)
[(click: "the window...")
[(set: $lookWindow to it +1)(if: $haveAir)[(set: $air to $air + 25)(replace: ?sideBar)[(display: "meter display")]](replace: "...")+(t8n: "dissolve")[, veined with cracks, and (display: "glance")]]]
(if: $lookWindow is 1)
[(click: "the window...")
[(set: $lookWindow to it +1)(if: $haveAir)[(set: $air to $air + 25)(replace: ?sideBar)[(display: "meter display")]](replace: "window...")[ shattered window and (display: "glance")]]]
(if: $lookWindow >= 2)
[(click: "the window...")
[(set: $lookWindow to it +1)(if: $haveAir)[(set: $air to $air + 25)(replace: ?sideBar)[(display: "meter display")]]
(replace: "window...")[empty window frame, embroidered with jagged glass, and (display: "glance")]]]
(if: visit > 1)[(replace: "You")[(nth: visits-1, "Once more you", "Again you", "Feeling foolish, you", "Trembling, you")]](nth: visit, "peak out to", "glimpse", "steal a glance at", "can barely stomach") the chaos below. (if: visits is 1)[ From the fifth floor of the Science & Tech building the city spreads out below you.](nth: visits, "A hissing sound [[in the lab->Lab Central]] pulls you away.", "Muffled voices come from beyond the [[barricaded door->Lab Central]].", "A sudden stillness settles over [[the lab->Lab Central]], as ominous as the pandemonium outside.", "Metallic scraping [[behind the lab door->Lab Central]] leaves you cold.")
(unless: $haveAir)[The air in the lab hovers between stale and rank.](if: $air < 56 and $haveAir)[Your eyes itch and throat’s sore.](else-if: $air > 55 and < 85 and $haveAir)[You can’t breathe. Not really, not anymore.](else-if: $air >= 85 and $haveAir)[An acrid smell lacerates your senses.](append: ?SideBar)[(display: "meter display")]{
(if: $haveAir)[<div style="font-size: 12px">Air Quality</div>(print: '<meter value="' + (text: $air) + '" min="0" low="33" high="66" optimum="80" max="100" ></meter>')]
(if: $haveNoise)[<div style="font-size: 12px">Noise Level</div>
(print: '<meter value="' + (text: $noise) + '" min="0" low="33" high="66" optimum="80" max="100" ></meter>')]
}{
(set: $booms to 0)
(set: $air to 25)
(set: $noise to 20)
(set: $door to false)
(set: $phone to false)
(set: $haveNoise to false)
(set: $haveAir to false)
(set: $visitLab to false)
(set: $lookWindow to 0)
(set: $hasMask to false)
(set: $guyFawkes to "Not much protection from tear gas or rubber bullets but a dystopian classic.")
(set: $blackSki to "Simple. No fuss. The universal cartoon version of a bank robber.")
(set: $dazzleCamo to "Dizzying black and white zebra stripes to confuse the facial recognition algorithms.")
(set: $gas to "Clunky, with a mildewed odor that screams Cold War salvage bin.")
(set: $blueSurgical to "In good times, a symbolic ward against the flu. In bad times, a symbolic ward against the state.")
(set: $timer to 110)
}