mapSheriff: "" mapHotel: "" mapRestaurant: "" mapMorgue: "" mapMelodyParent: "" mapMelodyApt: "" mapBasraApt: "" mapCollege: "" mapPark: "" mapLeroy: "" mapGrocery: "" mapCreepy: "" mapHenryHouse: "" mapJamalApt: "" mapPartyHouse: "" mapCarRoute: "" mapParkCrimeScene2: "" mapParkCrimeScene4: "" mapArrestHome: "" mapArrestCollege: "" mapArrestDrive: "" -- Graduation! After several grueling months of mental and physical training, you're excited and relived to have graduated from the FBI Academy. A freshly sworn in agent, your supervisor solemnly assigned you your very first case. You recall back to the short overview before the supervisor sent you on your way. "A small town sheriff says a recent string of suspicious deaths has his town on edge, and he’s requested FBI assistance." The supervisor looked concerned. "You should check it out, find out if there's something connecting all these deaths." As the long, open road rhythmically rumbles under your agency provided black sedan's tires, you reflect on the work you did in the Academy, and how it might help you on the case... [[Continue->SetCharacters]] successMsg: "" successVar: "" failureMsg: "" rollType: "" inp_perception: "Average (0)" inp_academics: "Average (0)" inp_physical: "Average (0)" inp_intimidation: "Average (0)" inp_intuition: "Average (0)" perception: 0 academics: 0 physical: 0 intimidation: 0 intuition: 0 sel_archetype: "custom" morale: 0 day: 1 hour: 17 hoursSinceSleep: 10 -- Before you can start, you need to decide your character's strengths and weaknesses. Various events throughout the game will be decided by random "dice roll" called "skill checks" - the likelihood of success in these cases will be influenced by your relative strength or weakness. In general, skill checks cannot be retried. Once you visit a location, you may not be able to visit again; so be sure to do everything you want to on your first visit. Each skill check is accomplished with a roll of a 20-sided die. To succeed, the roll plus your relevant ability modifier must exceed 10. The game will prompt you to click to roll at every skill check; when you do, it will roll the dice for you. You can choose an "archetype", or customize your strengths and weaknesses. * * * <b>Choose an Archetype</b> <a href="#" onclick="archetype('Average',[2,2,2,2,2])">Average</a> - Attending classes, participating in training and extracuriculars, you are reasonably good at everything, but great at nothing. The average agent is flexible and adaptible to any situation but excels at none. <a href="#" onclick="archetype('Bookworm',[3,4,0,1,2])">Bookworm</a> - While others were training on physical challenge courses or practicing sparring, you spent your time at the FBI Academy in the library. You excel at academics and see details that others miss, but lack the physical strength or people skills to be highly effective in on the ground situations. <a href="#" onclick="archetype('Athlete',[1,1,4,3,1])">Athlete</a> - Whether running distances and sprints, tackling challenge courses, sparring, or weight training; you were there. It's true, your studies may have fallen by the wayside, but when it comes to presence, you can deliver. However, you lack the attention to detail and awareness that more well rounded agents may possess. <a href="#" onclick="archetype('Negotiator',[3,0,1,4,2])">Negotiator</a> - You know that the most successful FBI agents aren't jocks or nerds, they're people savvy and detail oriented. Your focus at the academy was learning to listen, to understand, and to get the suspect on your side with the right mixture of empathy and strength. Book learning and brute force isn't what motivates people, so you fall behind some in those areas. <a href="#" onclick="archetype('Analyst',[4,3,0,0,3])">Analyst</a> - Ok, so maybe you never visited the gym during the Academy, but a great agent succeeds through awareness and ability to put the pieces together. To see what others don't see, to understand don't understand. To become of aware of subtext, the subtle things, the unspoken word. The smallest detail may have the biggest impact on any given case. * * * <b>Or, Customize Strengths and Weaknesses</b> Overall, your skills must "balance" - that is, the sum must be 0. {dropdown menu for: "inp_perception", choices: ["Very Weak (-6)", "Weak (-3)", "Average (0)", "Strong (+3)", "Very Strong (+6)"]} **Perception** – Notice and interpret sensory details {dropdown menu for: "inp_academics", choices: ["Very Weak (-6)", "Weak (-3)", "Average (0)", "Strong (+3)", "Very Strong (+6)"]} **Academics** – Book smarts and knowledge {dropdown menu for: "inp_physical", choices: ["Very Weak (-6)", "Weak (-3)", "Average (0)", "Strong (+3)", "Very Strong (+6)"]} **Physical** – Run, fight, climb, drive, etc {dropdown menu for: "inp_intimidation", choices: ["Very Weak (-6)", "Weak (-3)", "Average (0)", "Strong (+3)", "Very Strong (+6)"]} **Intimidation** – Elicit obedience and compliance. Accuse characters and draw truthful confessions. {dropdown menu for: "inp_intuition", choices: ["Very Weak (-6)", "Weak (-3)", "Average (0)", "Strong (+3)", "Very Strong (+6)"]} **Intuition** – The "light bulb" of putting pieces together. Also good for determining if someone is telling the truth or withholding; and a general “sixth sense”. <div id="CharOk"> Satisfied with your character? [[Begin Story]] </div> <div id="CharNotOk"></div> [JavaScript] let sum = 0; function mapVal(v) { return (v - 2) * 3; } function calcsum() { const sels = document.getElementsByTagName("select"); sum = 0; let n; n = mapVal(sels[0].selectedIndex); sum += n; perception = n; n = mapVal(sels[1].selectedIndex); sum += n; academics = n; n = mapVal(sels[2].selectedIndex); sum += n; physical = n; n = mapVal(sels[3].selectedIndex); sum += n; intimidation = n; n = mapVal(sels[4].selectedIndex); sum += n; intuition = n; document.getElementById("CharOk").style.display = (sum === 0 ? "" : "none"); if (sum < 0) document.getElementById("CharNotOk").innerText = "Character too weak (" + sum + ")"; else document.getElementById("CharNotOk").innerText = "Character too strong (" + sum + ")"; document.getElementById("CharNotOk").style.display = (sum !== 0 ? "" : "none"); } window.archetype = function(atype, skills) { const choices = ["Very Weak (-6)", "Weak (-3)", "Average (0)", "Strong (+3)", "Very Strong (+6)"]; inp_perception = choices[skills[0]]; perception = mapVal(skills[0]); inp_academics = choices[skills[1]]; academics = mapVal(skills[1]); inp_physical = choices[skills[2]]; physical = mapVal(skills[2]); inp_intimidation = choices[skills[3]]; intimidation = mapVal(skills[3]); inp_intuition = choices[skills[4]]; intuition = mapVal(skills[4]); sel_archetype = atype; go('Begin Story'); } // window.addEventListener("load", (event) => { // doesn't work due to not first window setTimeout(() => { const selcs = document.getElementsByTagName("select"); for (const selc of selcs) { selc.addEventListener('change', () => { calcsum(); }); } }, 500); -- sheriffHasMyNumber: false canVisitMorgue: false canTalkToV1Roommate: false canVisitCrimeScene: false canVisitPark: false canVisitFamily: false canVisitRestaurant: true fourthVictimKnown: false accusedAmanda: false basraBroSuspectsAmanda: false basraJournalDepression: false partySuspectAdam: false checkedJackShoe: false canVisitGrocery: false canVisitCreepyHouse: false restToldCreepyMen: false missedVictimFourEvent: false disruptedVictimFourEvent: false disruptedHenryDeathEvent: false foundVictimTwoSyringe: false tiedVictimsTwoAndThree: false tiedVictimsThreeAndFour: false canAskAboutVictimFourPhone: false canVisitV4Apt: false determinedV4noteBioOrChemProf: false foundV4Email: false callPartyHostWitness: false callProtest: false basraInjectionSite: false henryInjectionSite: false figuredOutPerpShoe4: false figuredOutPerpShoe1: false measuredPerpShoe: false measuredGoodwinShoe: false figuredOutCarInfo: 0 discoveredHenrysCar: false discoveredHenrysCall: false foundPhoneInHenrysCar: false foundMurderBat: false weaponV3batonOrBat: false collegeCloseStatus: 0 bioProfOffersHelp: 0 canArrestHenry: false jamalIdentifiedHenry: false jamalIdentifiedSomeProf: false henryLyingWhere: false humProfSketchyWhere: false foundMelodyPhotosInHouse: false foundHenryBathSyringe: false matchedSyringeToHenry: false foundHenrysFent: false henryCarAtHome: true whatHappenedToHenry: "" offeredDog: false slogans: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] patrolEventStatus: 0 mapSheriff: "shown" -- [JavaScript] slogans = slogans.sort(() => Math.random() - 0.5); slogans.splice(6, 0, 11); [continue] {embed passage named: 'header'} After traveling all day, you arrive in the small town of Wasacona at around 5 pm on Monday, just as the daylight is beginning to wane. It is a crisp fall afternoon. On the way into town, you pick up a map from a visitor's kiosk, and mark the Sheriff's Office. {embed passage named: 'mapWasacona'} You park outside the Sheriff's Office. The Sheriff is presumably inside, waiting to meet you. After a moment to collect your thoughts, you head in. [[Continue->Begin Sheriff]] hourDisp: hour hourDisp (hour === 0): 12 hourDisp (hour > 12): hour - 12 hourStr: "AM" hourStr (hour >= 12): "PM" dayStr: "Monday" dayStr (day === 2): "Tuesday" dayStr (day === 3): "Wednesday" success: false config.header.center: "{dayStr} (Day {day}). {hourDisp} {hourStr}" config.header.right: "" config.header.right (morale > 0): "morale: +{morale}" -- [if hoursSinceSleep > 15] You are very tired. *-3 to all rolls until you sleep.* [continue] [if morale > 0 && false] Your morale is good. *+{morale} to all rolls.* [continue] roll: random.d20 delta: 0 delta (rollType === 'Perception'): perception delta (rollType === 'Academics'): academics delta (rollType === 'Physical'): physical delta (rollType === 'Intimidation'): intimidation delta (rollType === 'Intuition'): intuition desc (rollType === 'Perception'): inp_perception desc (rollType === 'Academics'): inp_academics desc (rollType === 'Physical'): inp_physical desc (rollType === 'Intimidation'): inp_intimidation desc (rollType === 'Intuition'): inp_intuition modf: morale modf (hoursSinceSleep > 15): morale - 3 roll (roll < 10 && delta > 0): roll + 2 result: roll + delta + modf success: false success (result > 10): true didAlreadyRoll: false -- [JavaScript] let scrol; window.scrolfunc = function() { document.scrollingElement.scrollTo(0, scrol); } window.rollfunc = function(t) { // for some reason this scrolls to top scrol = document.scrollingElement.scrollTop; t.parentNode.remove(); setTimeout(scrolfunc); } const rollId = `${trail[trail.length - 1]}-${rollType}-${window.cyrb53(successMsg)}`; var m_rolls = engine.state.get("rolls")[rollId]; if (m_rolls === undefined) { rolls = engine.state.get("rolls"); rolls[rollId] = success; engine.state.set("rolls", rolls); } else { didAlreadyRoll = true; success = m_rolls; } [continue] [if !didAlreadyRoll] <div class='roll pre-roll'> <p class=skill-check>🎲 Skill check! {rollType}: {desc}</p> <a href="#" onclick="rollfunc(this)">Roll a d20</a> </div> [continue] <div class=roll> <p class=skill-check>🎲 Skill check! {rollType}: {desc}</p> [if !didAlreadyRoll] Roll a d20: {roll} Other Modifiers: {modf} {roll} + {delta} + {modf} = {result} [continue] [if success] <p class=success>**SUCCESS**</p> [else] <p class=failure>**FAILURE**</p> [continued] [JavaScript] if (success && successVar > "") engine.state.set(successVar, true); [continue] [if success && successMsg > ""] <p class=success>{successMsg}</p> [continue] [if !success && failureMsg > ""] <p class=failure>{failureMsg}</p> [continue] [JavaScript] successMsg = failureMsg = successVar = ""; [continue] </div> {embed passage named: 'header'} The Sheriff nods, "I totally understand. There’s a decent restaurant nearby, open fairly late. Well, late for our small town standards! Of course, your hotel room is ready as well. I know you had a long journey to get here. Get some good rest and let’s meet up in the morning." [[Go to Restaurant->restaurant]] [[Go to Hotel->hotel]] [[Never mind, let's get started now->sheriff]] {embed passage named: 'header'} The hotel is ... ok. It's definitely older construction, with few updates, but the room is clean (enough). A quick glance under the mattress does not reveal any obvious sign of bedbug infestation (some people laughed when this was brought up in training, you muse, but it's serious enough). You wash up, brush your teeth, and regard yourself in the mirror. The cases have to be solved. You have to solve the cases. The town is counting on you. It's been a long day. You're looking forward to a good night's sleep. [[Sleep until next day]] [if hour >= 16 && hour < 21] [[Take a short nap]] [[Leave the Hotel->travel]] [continue]hoursSinceSleep: 0 config.header.center: "(Overnight)" callAnswerFrom: "" callAnswerDest: "" callRang: false -- You turn off the lights, and lay down in the firm and slightly lumpy bed with a sigh. It has been a long day! [JavaScript] callAnswerFrom = "Derek LaGrange"; callAnswerDest = "Answer it"; [continue] [if day === 1 || (day === 2 && hour < 3)] You are startled awake by a loud noise. The room is very dark, and disorientation hits quickly. As the noise continues, you realize it's the hotel phone, on the nightstand next to the bed. A clock next to the phone reads 3 AM. The phone continues to ring. {embed passage named: 'incomingCall'} [continue] [JavaScript] callAnswerFrom = "Derek LaGrange"; callAnswerDest = "Answer2"; [continue] [if (day === 2 && hour > 16) || (day === 3 && hour < 7)] You awake refreshed, clean up and get dressed. As you're about to head out for the day, the hotel phone rings. {embed passage named: 'incomingCall'} [continue] [if callRang === false] You awake refreshed, ready to meet the day. [[Head Out->travel]] [continue] [JavaScript] // actually can this case ever happen? // Yes, if they disrupt the V4 event if (hour !== 7) { if (hour > 10) {day++;} hour = 7; } [continue]mapSheriff: "can-visit" mapHotel: "" mapHotel (hour > 16 || hour < 7): "can-visit" mapRestaurant: "" mapRestaurant (canVisitRestaurant): "shown" mapRestaurant (canVisitRestaurant && hour > 6): "can-visit" mapRestaurant (trail.indexOf("restaurant") > -1): "visited" mapMorgue: "" mapMorgue (trail.indexOf("morgue") > -1): "visited" mapMorgue (canVisitMorgue && (trail.indexOf("morgue1") === -1 || trail.indexOf("morgue2") === -1 || trail.indexOf("morgue3") === -1 || (fourthVictimKnown && trail.indexOf("morgue4") === -1))): "can-visit" mapMelodyParent: "" mapMelodyParent (canVisitFamily): "shown" mapMelodyParent (!callProtest && canVisitFamily && hour > 6 && hour < 20): "can-visit" mapMelodyParent (trail.indexOf("melodyParents") > -1): "visited" mapMelodyApt: "" mapMelodyApt (canTalkToV1Roommate): "shown" mapMelodyApt (canTalkToV1Roommate && hour > 6 && hour < 20): "can-visit" mapMelodyApt (trail.indexOf("melodyRoommate") > -1): "visited" mapBasraApt: "" mapBasraApt (canVisitFamily): "shown" mapBasraApt (!callProtest && canVisitFamily && hour > 6 && hour < 20): "can-visit" mapBasraApt (trail.indexOf("basraBrother") > -1): "visited" mapCollege: "" mapCollege (canVisitCrimeScene): "can-visit" mapPark: "" mapPark (canVisitPark): "can-visit" mapLeroy: "" mapLeroy (canVisitCrimeScene): "can-visit" mapLeroy (trail.indexOf("bridge") > -1): "visited" mapGrocery: "" mapGrocery (trail.indexOf("grocery") > -1): "visited" mapGrocery (canVisitGrocery): "shown" mapGrocery (canVisitGrocery && hour > 6 && hour < 20): "can-visit" mapCreepy: "" mapCreepy (canVisitCreepyHouse): "can-visit" mapCreepy (trail.indexOf("house") > -1): "visited" mapJamalApt: "" mapJamalApt (canVisitV4Apt): "can-visit" mapJamalApt (trail.indexOf("jamalApt") > -1): "visited" mapPartyHouse: "" mapPartyHouse (trail.indexOf("melodyRoommate") > -1 && hour > 8 && hour < 23): "can-visit" mapPartyHouse (trail.indexOf("partyHouse") > -1): "visited" mapCarRoute: "" mapCarRoute (figuredOutCarInfo > 0): "shown" sheriffLink: "sheriff" sheriffLink (canVisitMorgue === false): "Get an Overview Briefing" collegeLink: "collegeFirst" collegeLink (trail.indexOf('college') > -1): "college" callAnswerFrom: "" callAnswerDest: "" callRang: false readyForCallFromPartyHost: trail.indexOf("partyHouse") > -1 && trail.indexOf("accusePartyHost") === -1 && trail.length - trail.indexOf("partyHouse") > 2 && !callPartyHostWitness -- {embed passage named: 'advanceTime'} {embed passage named: 'header'} Wasacona is a small college town of just under 18,000 people. {embed passage named: 'weather'} [JavaScript] callAnswerFrom = "Abraham Norman"; callAnswerDest = "colBioCallAnswer"; [continue] [if bioProfOffersHelp > 1 && hour > bioProfOffersHelp + 2] {embed passage named: 'incomingCall'} [continue] [JavaScript] if (bioProfOffersHelp > 1 && hour > bioProfOffersHelp + 2) bioProfOffersHelp = 1; [continue] [JavaScript] callAnswerFrom = "Derek LaGrange"; callAnswerDest = "partyHostWitness"; [continue] [if sheriffHasMyNumber && readyForCallFromPartyHost && !callRang] {embed passage named: 'incomingCall'} [continue] [JavaScript] if (readyForCallFromPartyHost) callPartyHostWitness = true; [continue] [JavaScript] callAnswerFrom = "Derek LaGrange"; callAnswerDest = "Answer it"; [continue] [if sheriffHasMyNumber && day === 2 && hour === 3 && !disruptedVictimFourEvent] {embed passage named: 'incomingCall'} [continue] [JavaScript] function f3() { go("mdHotel"); } if (hour >= 4 && hour < 7 && callRang === false) setTimeout(f3); [continue] You could [[drive a patrol loop->patrol]], or visit one of these locations: {embed passage named: 'mapWasacona'} {link to: sheriffLink, label: "Sheriff's Office"} [if mapHotel === "can-visit"] [[Hotel->hotel]] [continue] [if mapRestaurant === "can-visit"] [[Restaurant->restaurant]] [continue] [if mapRestaurant === "shown"] Restaurant: Hours 6 AM to Midnight [continue] [if mapMorgue === "can-visit"] [[Morgue->morgue]] [continue] [if mapMelodyParent === "can-visit"] [[Melody's Parents->melodyParents]] [continue] [if mapMelodyApt === "can-visit"] [[Melody's Apartment->melodyRoommate]] [continue] [if mapPartyHouse === "can-visit"] [[Party House->partyHouse]] [continue] [if mapBasraApt === "can-visit"] [[Basra's Apartment->basraBrother]] [continue] [if mapJamalApt === "can-visit"] [[Jamal's Apartment->jamalApt]] [continue] [if canVisitFamily && (hour < 6 || hour > 20)] Family visits available between 6 AM and 8 PM. [continue] [if mapCollege === "can-visit"] {link to: collegeLink, label: "College Campus"} [continue] [if mapPark === "can-visit"] [[Park->park]] [continue] [if mapLeroy === "can-visit"] [[Leroy's Camp->bridge]] [continue] [if mapGrocery === "can-visit"] [[Grocery Store->grocery]] [continue] [if canVisitGrocery && (hour <= 6 || hour >= 20)] Grocery store: Hours 6 AM to 8 PM. [continue] [if mapCreepy === "can-visit"] [[Creepy House->house]] [continue] canVisitRestaurant: false -- {embed passage named: 'header'} You pass under a well lit sign proclaiming "Wasacona Pints" and into the cozy eatery. The small-town restaurant has an American diner theme and a few people eating quietly at scattered tables. A sign invites you to "Please seat yourself", so you find yourself a small table near the window. A young lady quickly attends to your table. "A new face in town. Something to eat? Drink? Or just looking for directions?" She smiles. {reveal link: "Enjoy a Meal", passage: "eaten"} [[Ask About Deaths]] [[Travel to Another Location->travel]] canVisitMorgue: true -- {embed passage named: 'header'} [if day > 1 || hour > 17] The Sheriff's office is a low-slung, modest gray concrete block building on the edge of town. Inside, a variety of posters for events and safety slogans hang on the walls. [continue] [if (!missedVictimFourEvent || fourthVictimKnown) && (day > 1 || hour > 17)] {embed passage named: 'slogan'} [continue] [if missedVictimFourEvent && !fourthVictimKnown && !sheriffHasMyNumber] "There you are!" The Sheriff exclaims as you enter. "I called your hotel and you weren't there. I realized I didn't have your cell number or any other way to get in touch with you!" Embarrassed at your oversight, you quickly give the Sheriff your cell number. [continue] [if missedVictimFourEvent && !fourthVictimKnown && sheriffHasMyNumber] "There you are!" The Sheriff exclaims as you enter. "I called your hotel and you weren't there. I called your cell phone and you didn't answer!" [continue] [if missedVictimFourEvent && !fourthVictimKnown] He continues, "There was another killing. A fourth victim. Another young college student in the park. I processed the scene without you and the coroner took the body to the morgue." [continue] [JavaScript] if (missedVictimFourEvent) { fourthVictimKnown = true; sheriffHasMyNumber = true; canVisitPark = true; } [continue] [if fourthVictimKnown && !canVisitV4Apt] "Regarding that latest victim," the Sheriff notes, "We checked her ID and found she lives in an apartment complex at Eighth Ave and College St. I don't know if she had a roommate, or perhaps a girlfriend or boyfriend, someone who might give us some information on why she was at the park so late? We haven't gone yet; I figured I would leave it to you." He gives you Jamal's address and an apartment key recovered from the body. [continue] [JavaScript] if (fourthVictimKnown) { canVisitV4Apt = true; canVisitPark = true; } [continue] [if day === 1 && hour === 17] The Sheriff nods, "I’m so glad to hear that you're ready to go! Where would you like to start? The bodies are in the morgue at the hospital and the original responding officers are here, available to answer your questions. You’re welcome to revisit the crime scenes, although some days have passed and it will be getting dark soon. I can put you in touch with a couple of family members of the victims if you think it would help. I’m also happy to give you a briefing of the deaths at a high level, and of course if you have any other questions for me, I’m happy to help." [else] "What would you like to do next?" The Sheriff asks. [continue] [if canAskAboutVictimFourPhone && trail.indexOf("missingPhone") === -1] [[Mention Victim's Missing Phone->missingPhone]] [continue] [if figuredOutCarInfo > 0 && !discoveredHenrysCar && trail.indexOf("carInfo") === -1] [[Mention Car Escaping the Scene->carInfo]] [continue] [if canArrestHenry] [[Arrest Dr. Henry Black->arrest]] (Note: You should complete all desired investigation tasks before arresting the professor) [continue] [if ((day === 2 && hour > 4) || day > 2) && !canArrestHenry] [[CONCLUDE INVESTIGATION->conclude]] (Note: You should complete all desired investigation tasks before concluding your investigation) [continue] [if (basraBroSuspectsAmanda || trail.indexOf("palads") > -1) && trail.indexOf("sheriffAmanda") === -1] [[Confront the Sheriff about Amanda->sheriffAmanda]] [continue] [[Get an Overview Briefing]] [[Ask About Family Members]] [[Interview Responding Officers]] [[Travel to Another Location->travel]] {embed passage named: 'header'} In a dingy basement underneath the small town's regional hospital and emergency room is the morgue. You are greeted by the coroner, Dr. Stacy Alahram. She's a modest woman of some apparent Middle eastern descent who appears to be in her mid 50s. "You must be the agent the Sheriff mentioned," she replies softly. "I've really never seen a series of deaths like this in our area, especially in such a short time period. I'm hoping you can help." [if trail.indexOf("morgue1") === -1] [[Discuss the First Death->morgue1]] [continue] [if trail.indexOf("morgue2") === -1] [[Discuss the Second Death->morgue2]] [continue] [if trail.indexOf("morgue3") === -1] [[Discuss the Third Death->morgue3]] [continue] [if fourthVictimKnown && trail.indexOf("morgue4") === -1] [[Discuss the Fourth Death->morgue4]] [continue] [[Travel to Another Location->travel]] canVisitFamily: true -- {embed passage named: 'header'} The Sheriff reviews some notes. "The first victim, Melody Beautrue. She's a college student here in town. Although she lived in her own apartment near campus, her parents also live locally here in town. In fact, I think her father used to work for the college." He continues, "The second victim, Basra Brown, works... worked... as a waitress at the restaurant. She lived with her brother on the south side of town. We don't have any information about other relatives. I understand she's a refugee - a lot of families didn't make it intact through that difficult process." "As for the homeless man, well, he's a drifter. We don't have any local family that we can find." [if fourthVictimKnown] "Our most recent victim, Jamal Veralin, her parents live out of the country. They're on their way in but it might take them a day or two to get here." [continue] [[Continue->sheriff]] {embed passage named: 'header'} This small, local sheriff's office has two deputies in addition to the Sheriff. [if trail.indexOf("goodwin") === -1] [[Talk to Officer Jack Goodwin->goodwin]] [continue] [if trail.indexOf("goodwin") > 0 && (figuredOutPerpShoe1 || figuredOutPerpShoe4) && !checkedJackShoe] [[(Intimidation) Demand to see Jack's Shoes->goodwinShoes]] [continue] [if trail.indexOf("palads") === -1] [[Talk to Officer Amanda Palads->palads]] [continue] [if accusedAmanda === false && trail.indexOf("palads") > 0] [[(Intimidation) Ask Officer Palads if she Killed Basra->accuseAmanda]] [continue] [[Continue->sheriff]] canVisitCrimeScene: true canVisitPark: true numDeaths: "three" numDeaths (fourthVictimKnown): "four" -- {embed passage named: 'header'} The Sheriff settles in. "There’s been {numDeaths} suspicious deaths in the last week. First, a week ago Monday, a young college student was found on campus, brutally strangled. You can imagine the shock this caused!" "Just as we were starting to figure out how to even approach the case, a few days later, a second death happened. This one looks like a drug overdose. I’m sure that sounds like a daily occurrence in the big city where you’re from, but in this town, we don’t have a lot of drug deaths, and in a public place no less. She was found in the park! So soon on the heels of the first death, we felt a bit off balance. But then…" He pauses He continues, "A local homeless man was beaten to death under a bridge where he was sleeping. Now, I know a lot of folks don’t care much for those on the street, but the violence of this death… That’s what got people’s attention! Two obviously violent deaths in one week, and a body in the park. Could there be someone behind all this?" He shakes his head. [if fourthVictimKnown] "And now," he continues, "another death in the park. A fourth death. Another young woman lost before her life even got started. I can't fathom how this can be happening in my town. This town. It's unbelievable." [continue] [[Continue->sheriff]] hoursSinceSleep: hoursSinceSleep + 1 readyForCallProtest: day === 2 && hour > 16 && trail.indexOf("melodyParents") === -1 && trail.indexOf("basraBrother") === -1 && !callProtest -- [JavaScript] hour++; if (hour > 23) { hour = 0; day++; } function f() { go("V4Interrupt_sheriff"); } function f2() { go("Final_Interrupt_sheriff"); } function fp() { go("protestCall"); } if (day === 2 && hour === 3 && !disruptedVictimFourEvent) { let lastPlace = trail.at(-1); if (["patrol", "park"].indexOf(lastPlace) > -1) { // patrol and park has code to handle it there } else if (["sheriff", "Ask About Family Members", "Get an Overview Briefing", "Interview Responding Officers", "goodwin", "goodwinShoes", "palads", "accuseAmanda"].indexOf(lastPlace) > -1) { // the lambda notation was breaking the games translator or something setTimeout(f); } // the hotel has its own code for this, don't need to put here else { missedVictimFourEvent = true; } } if (day === 3 && hour === 9 && trail.indexOf("arrest") === -1 && trail.indexOf("henryScene") === -1) { setTimeout(f2); } if (readyForCallProtest) { setTimeout(fp); } [continue] mapParkEmergency: "" mapParkEmergency (day === 2 && (hour === 4 || hour === 5) && !disruptedVictimFourEvent): "can-visit" mapParkPed: "" mapParkPed (day === 2 && (hour === 2 || hour === 3) && !disruptedVictimFourEvent): "can-visit" -- {embed passage named: 'advanceTime'} {embed passage named: 'header'} You drive slowly through the streets of small town Wasacona. {embed passage named: 'weather'} [if hour < 5] The streets are eerily quiet in the early morning dark. Stray cats and raccoons dart away from the headlights as you turn from one street to another. [continue] [if hour >= 5 && hour < 12] The morning town shows less activity than usual. People are nervous and keeping a low profile, especially in public places. [continue] [if hour >= 12 && hour < 18] Afternoon brings a bit more activity, with locals out and about doing their daily errands. [continue] [if hour >= 18] With darkness over the town, the streets are quiet and empty. There seems to be a great hesitation in the air. What might be next? [continue] [if hour % 5 === 0 && (hour < 2 || hour > 4) && !canVisitCreepyHouse && trail.indexOf("house") === -1 && patrolEventStatus < 2] {embed passage name: 'patrolEvent1'} [continue] [if hour % 5 === 3 && (hour < 2 || hour > 4) && !canVisitGrocery && trail.indexOf("grocery") === -1 && patrolEventStatus < 3] {embed passage name: 'patrolEvent2'} [continue] [if mapParkPed === "can-visit"] {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'V4disrupt'} [continue] [if false && mapParkEmergency === "can-visit"] There's something happening at the park! You can see emergency lights flashing and first responders on the scene. {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'mapPark'} [[Respond to the Park Scene->V4scene]] [continue] [if mapParkEmergency === "" && hour >= 4 && hour < 7] You are too tired to continue patrolling. Time to call it a night. [[Hotel->hotel]] [else] [[Continue Patrolling->patrol]] [[Travel to Another Location->travel]] [continue]canTalkToV1Roommate: true -- {embed passage named: 'header'} You travel to a modest nearby house. The yard is beautifully kept. An older couple invites you in. "We've lived here for years," the gray haired man says, "I was an English professor at the college for a long time. I recently retired, but still teach there occasionally." His wife nods, her matronly locks barely hiding her tears. "Melody was such a joy to us," she says, "And a great student. She was majoring in chemistry and really loved it. She spent so much time studying and was excelling in every way. She made friends easily but never got into trouble. I can't understand who would do this to her!" "Have you talked to her roommate?" the older man asks after a moment of reflection. "We've only met her once or twice, she seems nice. Maybe she has some ideas? Melody lived with her in the apartment complex on College St, just west of the college itself.". The couple leans into each others' arms, and cries together quietly. [[Travel to Another Location->travel]] {embed passage named: 'header'} You travel to a nearby apartment complex. The apartments here are small and the complex seems rundown. A variety of noise emits from the various units. Clearly, the walls are quite thin. A young man with dark skin answers the door and invites you in. "My name is Abdullahi. Thank you for coming. I hope you can..." he stops. "I guess no one can bring her back now..." he whispers. "Basra is... was... my sister," he says, slowly, staring at his hands. "She works at the restaurant most evenings. She was walking home, through the park, like normal. The way she walks every shift." "They are saying she died of an overdose. Like, drugs. Drugs? No! Not Basra." A tear forms at the corner of his eyes. "You see how that white girl, they are saying, oh she is murdered, we must investigate, turn over every stone! But my sister, my only connection in this world, she is murdered, and what? 'Oh, it must be an overdose.' Do you see what's happening? Do you see how they treat her? How they treat us? We came here for a better life, and now we are treated like the lowest. Like trash." [JavaScript] rollType = "Intuition" successMsg = "He's telling the truth about Basra not using drugs, at least as far as he knows."; [continue] {embed passage: 'roll'} {reveal link: 'Ask about his background', text: `"My sister and I came over from Somali as refugees. We moved around a few places until an aid group finally helped us settle here. I got a job at the college as a janitor, and my sister, well, you know, she works ... worked ... at the restaurant. It wasn't much, but we got by. Without her... now it's just me."`} {reveal link: 'Ask about possible suspects', passage: "basraBrotherSuspect"} [[(Intimidation) Search the Apartment for Drugs->basraBrotherDrugs]] [[Travel to Another Location->basraBrotherReveal]] {embed passage named: 'header'} Officer Jack Goodwin is a white male in his early 30s. "I’m glad you’re here. You know, I don’t want to say this, but this is the first time I’ve seen a murder. And now two! I can’t believe the brutality. I’ve been working here for ten years and I’ve never seen anything like this. This isn’t our town. This isn’t the kind of town we have. Every call now, I’m on edge. Maybe I need to take some time off, but there’s only me and Amanda besides the sheriff. He needs all the help he can get right now." "That first night, it was late Monday. Early Tuesday actually, I guess. I got a call from dispatch, campus security had called about an unconscious person. I responded, found her on campus behind the library in the bushes. She wasn’t dressed per-say; her clothes were laying on top of her. She was deceased, so I called the coroner. It was dark, but it looked like she might have wounds on her neck. Looked around the area, nothing suspicious found, no witness, no cameras." "The other guy, he's been a problem to our town for a long time. But I never expected it to end like this! Saturday afternoon, just after lunch, around 1pm or so, I was on foot patrol. I saw him laying there and frankly, I just thought he was sleeping. Maybe drunk. I went over to him but he didn’t wake. That’s when I realized there was blood. He was hurt bad. I checked, and he was dead. That really bothered me. Two in one week. What could it mean?" {reveal link: 'Ask Jack about the second victim', text: `He shakes his head. "I heard that was a drug overdose. Really sad. We don’t get much of that here, and right in with these murders, I don’t know. It doesn’t look good."`} [[Continue->Interview Responding Officers]] {embed passage named: 'header'} Officer Amanda Palads is a white female in her mid-20s. "I joined the department about two years, fresh out of the Army. I found that girl, Basra." She scoffs. "Those types bring it on themselves. This town didn’t have a problem with drugs until the foreigners showed up. As for the girl I found, I know these types, coming here, bringing their weird shit. A bunch of violent drug addicts. For all I know maybe she killed that nice college kid. I’m sick of this town being taken over by these foreigners. I say, one less is no skin off my back." "It was Thursday morning. A jogger in the park called dispatch. I figured maybe there was a drunk person passed out? But she was cold dead. I think she’d been dead for at least several hours. Didn’t see any vomit or blood or nothing. Maybe she couldn’t handle her liquor? But probably drugs. This is the kind of person moving into our community." [if fourthVictimKnown] "I responded to the latest death as well," Amanda shakes her head, "It was so brutal. I don't understand what's happening to this town. This was a small community. A safe community. Obviously, things are changing." [continue] [[Continue->Interview Responding Officers]] accusedAmanda: true -- {embed passage named: 'header'} "Officer Palads, I've heard enough. Did you kill Basra Brown?" [JavaScript] rollType = "Intimidation" successMsg = `She seems stunned, and slumps slightly in her seat. Her bluster is swept away. "I didn't..." she whispers. "I know I let my own opinions cloud the case, but I promise, I had nothing to do with her death."`; failureMsg = `She scoffs at you. "Who do you think you are? You have a problem with me? You have a problem with me stating the truth? You take it up with the Sheriff. I'm done here."`; [continue] {embed passage: 'roll'} [[Continue->Interview Responding Officers]] {embed passage named: 'header'} The coroner opens a refrigerated storage unit and pulls out a shelf. On the shelf, a motionless body is covered by a sheet. "As for the first death," she lowers the sheet, revealing a pale young woman's head and bruised neck. "Melody Beautrue, 20, a student at the nearby college. She’s 5 foot 11 inches tall, brunette, thin, with a star tattoo on her shoulder. Both ear and nose piercing. She was found with clothes laying on top of her, not dressed. Autopsy revealed death by strangulation, by hands on the neck. There are also peri-mortem bite marks on both breasts and evidence of sexual assault but no semen. Tox panel revealed a small amount of alcohol, about 0.02." The coroner respectfully recovers her body, and returns it to the refrigerated unit. "I believe her time of death was last Monday, approximately 10pm to midnight. I know she was found on campus behind the library in the bushes. I understand that campus security called 911 at 1:52 am, and officer Jack Goodwin responded, and found the deceased." [[Continue->morgue]] {embed passage named: 'header'} "When will this end?" Dr. Alahram laments. "How many bodies is enough?" She composes herself, then moves to the latest death. This body is fresh, laying on an examination table with an intense overhead light shining down. Pristine clinic tools, in this context taking on a sinister use, sit on small trays around the body. "Jamal Veralin. 19," she begins, "Hispanic, 5 foot 2 inches tall. She's a student at the college, I know because we found her student ID. She's sporting close cropped hair, dyed purple. One arm has a full sleeve tattoo. She has been hit in the head with a blunt object, causing head wounds. Her body is contorted, fully clothed, but she clearly suffered massive head wounds and blood loss. I've sent out a tox panel, but I'm not sure when I'll get the results." [JavaScript] rollType = "Perception" successMsg = "The head wound pattern matches that of the third victim, the homeless drifter. It was likely the same perpetrator, using the same weapon."; successVar = "tiedVictimsThreeAndFour"; [continue] {embed passage: 'roll'} [[Continue->morgue]] mapCollegeSearchCar: "" mapCollegeSearchCar (figuredOutCarInfo > 0 && hour >= 8 && hour <= 17 && collegeCloseStatus < 1): "can-visit" mapCollegeSearchCar (trail.indexOf("searchForCar") > -1): "visited" mapCollegeCrimeScene: "can-visit" mapCollegeCrimeScene (trail.indexOf("crimeScene1") > -1): "visited" mapCollegeSecurity: "can-visit" mapCollegeSecurity (trail.indexOf("campusSecurity") > -1): "visited" mapCollegePresident: "shown" mapCollegePresident (hour >= 8 && hour <= 17 && collegeCloseStatus < 1): "can-visit" mapCollegePresident (trail.indexOf("collegePresident") > -1): "visited" mapCollegeArt: "shown" mapCollegeArt (hour >= 8 && hour <= 17 && collegeCloseStatus < 1): "can-visit" mapCollegeArt (trail.indexOf("collegeArt") > -1): "visited" mapCollegeHum: "shown" mapCollegeHum (hour >= 8 && hour <= 17 && collegeCloseStatus < 1): "can-visit" mapCollegeHum (trail.indexOf("collegeHum") > -1): "visited" mapCollegeChem: "shown" mapCollegeChem (hour >= 8 && hour <= 17 && collegeCloseStatus < 1): "can-visit" mapCollegeChem (trail.indexOf("collegeChem") > -1): "visited" mapCollegeBio: "shown" mapCollegeBio (hour >= 8 && hour <= 17 && collegeCloseStatus < 1): "can-visit" mapCollegeBio (trail.indexOf("collegeBio") > -1): "visited" -- {embed passage named: 'header'} Wasacona College is a small town campus with about a thousand students enrolled. The pleasant, rural-feeling campus is served by four buildings; with pathways, a creek, and sports fields. Two parking lots buttress either edge of the property. The grounds are well-kept and inviting. [if hour < 8 || hour > 17] Campus academic buildings are currently closed. Hours are posted as 8 AM to 5 PM. [continue] [if collegeCloseStatus === 1] A hastily prepared set of signs adorns the parking lots and buildings. "Due to security concerns, all classes are cancelled and the campus is closed until further notice." [continue] {embed passage named: 'mapCollege'} [if hour > 7 && hour < 20 && slogans.indexOf(11) === -1 && !offeredDog] Out of the corner of your eye, you spot a dog running across the field. A Golden Retriever. Why, it looks just like the photo you saw on the lost poster in the Sheriff's office! You don't want to waste time distracted from the case, but the dog is close by and seems friendly enough. [[Approach the Dog]] [continue] [JavaScript] if (hour > 7 && hour < 20 && slogans.indexOf(11) === -1) offeredDog = true; [continue] [if mapCollegeSearchCar === "can-visit"] [[(Perception) Search Campus for the Car->searchForCar]] [continue] [if mapCollegeCrimeScene === "can-visit"] [[Inspect Where Melody was Found->crimeScene1]] [continue] [if mapCollegeSecurity === "can-visit"] [[Speak to Campus Security->campusSecurity]] [continue] [if mapCollegePresident === "can-visit"] [[Speak to the College President->collegePresident]] [continue] [if mapCollegeArt === "can-visit"] [[Visit the Art Department->collegeArt]] [continue] [if mapCollegeHum === "can-visit"] [[Visit the Humanities Department->collegeHum]] [continue] [if mapCollegeChem === "can-visit"] [[Visit the Chemistry Department->collegeChem]] [continue] [if mapCollegeBio === "can-visit"] [[Visit the Biology Department->collegeBio]] [continue] [[Travel to Another Location->travel]] mapParkCrimeScene2: "can-visit" mapParkCrimeScene2 (trail.indexOf("crimeScene2") > -1): "visited" mapParkCrimeScene4: "" mapParkCrimeScene4 (fourthVictimKnown): "can-visit" mapParkCrimeScene4 (trail.indexOf("crimeScene4") > -1): "visited" mapParkEmergency: "" mapParkEmergency (day === 2 && (hour === 4 || hour === 5) && !disruptedVictimFourEvent): "can-visit" mapParkPed: "" mapParkPed (day === 2 && (hour === 2 || hour === 3) && !disruptedVictimFourEvent): "can-visit" -- {embed passage named: 'header'} The park spans about four blocks, plus a parking area on the north side. A few picnic tables and a playground are tastefully arrayed near the north parking area, with well manicured grass and clean, concrete walkways. Several bark trails lead into the wooded core of the park. There, a few quaint wooden footbridges cross a narrow, trickling creek. Thick bushes and tall pines obscure much of the center of the park. In better times, this would be a peaceful and quiet escape; only a few steps to feel like you are in a far away forest. But given the circumstances, the park feels much more foreboding. A small area near the edge of the park is taped off, signifying where Basra's body was found. [if fourthVictimKnown] Following the second death in the park, the city closed the park to all public use during the investigation. The park thus appears deadly silent. [continue] [if disruptedVictimFourEvent && hour > 9 && hour < 17] A few people and couples wander through the park, and a family eats a small snack at a picnic table while a young child plays on the playground equipment in their immediate and attentive view. [continue] [if hour >= 20 || hour < 7] In the dark, the few meager streetlamps throughout the park do little to combat the pervasive darkness. [continue] [if mapParkPed === "can-visit"] {embed passage named: 'V4disrupt'} [else] {embed passage named: 'mapPark'} [continue] [if mapParkEmergency === "can-visit"] You hear the sirens first, then see flashing emergency lights pulling into to the park. Something must have just been called in nearby! [[Respond to the Scene->V4scene]] [continue] [if mapParkCrimeScene2 === "can-visit"] [[Inspect Where Basra was Found->crimeScene2]] [continue] [if mapParkCrimeScene4 === "can-visit"] [[Inspect Where Jamal was Found->crimeScene4]] [continue] [[Travel to Another Location->travel]] {embed passage named: 'header'} Just south of the college campus, the road passes over a small creek. You make your way underneath the bridge. There is a broken tent and a lot of trash nearby. The tent is full of junk; apparently not used for sleeping. You see a variety of items, likely stolen from nearby homes and businesses, as well as several dangerous and sharp looking knives. You find some small containers of liquid as well... [JavaScript] rollType = "Academics" successMsg = "Liquid fentanyl. This is more than a personal use collection, too. He was definitely selling the stuff."; failureMsg ="...But you're not sure what they are."; successVar = "tiedVictimsTwoAndThree"; [continue] {embed passage: 'roll'} [[Travel to Another Location->travel]] patrolEventStatus: 2 -- [JavaScript] rollType = "Perception" successMsg = "You notice a dark, abandonded house next to the park. The house is clearly dilapidated. The appearance of such a forboding place, and right across the street from a crime scene, sends a shiver down your spine."; successVar = "canVisitCreepyHouse"; [continue] {embed passage: 'roll'} [JavaScript] if (success) mapCreepy = "shown"; [continue]patrolEventStatus: 3 -- [JavaScript] rollType = "Intuition" successMsg = "One block from the park, a large grocery store stands as a beacon of modernity. It occurs to you that the modern-looking store likely has security cameras pointing out over their parking lot, and perhaps by extension, onto the nearby roads. Could the cameras capture someone coming to or from the park? It's possible."; successVar = "canVisitGrocery"; [continue] {embed passage: 'roll'} [JavaScript] if (success) mapGrocery = "shown"; [continue]{embed passage named: 'header'} The sleek, modern, and well lit grocery store looks almost out of place in this traditional, old-fashioned style town. Many town residents are coming and going as they complete important daily shopping. You notice the parking lot area is well lit, and there are several security cameras that appear to include a portion of Broad St as well as Fourth Ave, including sections along the edge of the park. Inside the store, you find the manager busy with some inventory-related paperwork. {reveal link: "Ask about footage during the night of Basra's death", text: `"When was this?" the manager sighs, "Last week? Sorry, these cameras have 24 hour retention. We don't keep footage beyond that unless we've saved it for some reason, but we don't have anything from then."`} [if fourthVictimKnown && day === 2] {reveal link: "Ask about footage during the night of Jamal's death", text: `"Listen," he says, "I want to help you. But corporate has strict policies about security footage. I need to see a warrant." [[(Intimidation) Get the Footage->getFootage]]`} [continue] [[Travel to Another Location->travel]] {embed passage named: 'header'} The old house looms forebodingly in front of you. A cool breeze seems to pass through it. Your skin crawls. The yard of the house is long overgrown and clearly has not been tended to. A weed infested pathway winds to the front stoop, whose peeling paint and boarded windows imply no invitation. The front door is securely closed, but you can see a section near the rear of the house where boards have fallen - or been pried off - of a window. The window is shattered, with jagged glass menacing from all edges. Broken glass litters the ground nearby. Is this a recent break? It's hard to say... [JavaScript] rollType = "Academics" successMsg = "Based on the cumulative damage, it is likely this house has been abandoned and unmaintained for about 10 years."; [continue] {embed passage: 'roll'} [[(Physical) Attempt to Climb Through the Window->climbWindow]] [[Travel to Another Location->travel]] {embed passage named: 'header'} The Sheriff abruptly interrupts you! {embed passage named: 'V4event'}day: 2 hour: 3 -- {embed passage named: 'header'} You answer the phone, and sure enough the Sheriff is on the other end, sounding stressed and concerned. {embed passage named: 'V4event'} mapParkEmergency: "can-visit" -- "Someone just called 911," he rushes, "saying they’ve been attacked in the park! Officer Amanda and I are going there now, please meet us at the north parking lot immediately. The caller said the attacker surprised her and hit her over the head, and that she’s very dizzy. We have an ambulance enroute as well." "A surviving victim!" You reply heartened, "This may be the break in the case we're looking for." {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'mapPark'} [[Rush to the Scene->V4scene]] {embed passage named: 'header'} With a deep breath, you approach the broken window and prepare to climb through. [JavaScript] rollType = "Physical" successMsg = "You carefully maneuver through the window, avoiding entanglements on the glass as you do. A musty, damp odor assaults your senses as the freshness of the outside air falls away and you are left in a eery silence. At first glance, the house appears empty and deserted. "; failureMsg = "As you attempt to find a handhold near the window, your sleeve catches on a shard of glass. Twisting, your hand slips and the dirty glass opens a nasty gash across your palm. You retreat... you're not getting through this window."; [continue] {embed passage: 'roll'} [if success] [[(Perception) Investigation House->investigateHouse]] [continue] [[Travel to Another Location->travel]] {embed passage named: 'header'} The dark and damp house feels heavy, stifling, and empty. You carefully play your flashlight from room to room, looking for evidence of something ... anything ... that might be connected to your case. [JavaScript] rollType = "Perception" successMsg = "There's some old graffiti, a few empty dust covered bottles, but no evidence that anyone has been in this house in the past few weeks; much less using it for any nefarious purpose. Although it is situated disturbingly near a crime scene, the house is not involved."; failureMsg = "The air is heavy, and dust clouds your flashlight beam. It is difficult to see what might be around each corner as the house creaks and groans. A quick survey reveals nothing of interest; at least, nothing that you noticed."; [continue] {embed passage: 'roll'} [[Travel to Another Location->travel]] {embed passage named: 'header'} "Oh, you're here about Basra", the young waitress tears up, "I can't understand what happened. Basra was great, the most reliable coworker we had. She was pretty quiet, kept mostly to herself. We usually get off evening shift around midnight. She always walks to and from work; she lives just south of here, past the park. She must have been walking home through the park when ... when it happened." She chokes up, and collects herself. "After work, some of us... Sometimes we hang out, out back, just to blow off steam. Smoke a little weed. Some of the folks... occasionally use other stuff. But Basra? Never. She was always clean. Never even drank. She never stayed after with us, always went straight home." [JavaScript] rollType = "Intuition" successMsg = "She's telling the truth about Basra not drinking or using drugs with them."; [continue] {embed passage: 'roll'} {reveal link: 'Ask about possible suspects', passage: 'restAskSuspects'} [[(Intimidation) Find Out Where the Drugs Come From->drugsSource]] [[Travel to Another Location->travel]] {embed passage named: 'header'} "Listen," you address the waitress directly. "I need to know about the drugs. The hard stuff. Where could Basra have gotten it?" [JavaScript] rollType = "Intimidation" successMsg = `She shakes her head. "I don't use that stuff. Basra doesn't use that stuff."`; failureMsg = `She shrinks away from you. "I don't know. I told you everything I know. Please, just go."`; successVar = "tiedVictimsTwoAndThree"; [continue] {embed passage: 'roll'} [if success] "I know," you reply, "but I need to know where she could have gotten it from." The waitress hesitates. "Some of the guys, they would meet up with this drifter. Leroy. He hung out by the college sometimes. They usually bought the hard stuff, the really hard stuff, from him." "Really, I never saw Basra doing any drugs, nothing like that, but..." she trails off. "Please, anything you can tell me could help," you encourage her. "Last week, I think it was Monday night, I saw Leroy here. Here! Outside the restaurant. Basra was talking to him. I saw her hand him a bag, and he touched her shoulder. When she came back in, I asked her what was going on, but she just smiled at me and went back to work. I didn't push it. Maybe I should have..." her eyes droop. [continue] [[Travel to Another Location->travel]] -- {embed passage named: 'advanceTime'} The food is quite good given the humble surroundings. As you eat, you carefully listen to what might be said at other tables. In hushed tones, you hear some discussing the deaths with fear and wonderment. In other cases, diners discuss their ordinary business. Nothing unusual stands out to you. *The warm and comforting food improves your morale.* [JavaScript] const m = engine.state.get("lastMorale"); if (m !== "eaten") { engine.state.set("morale", morale + 1); engine.state.set("lastMorale", "eaten"); } [continue]{embed passage named: 'header'} The scene of Basra's discovery is taped off with "Crime Scene" tape. Within the small enclosed area, you can see the faintest disturbance of the ground where the officers and coroner worked. Otherwise, there is nothing obvious remaining. You stare silently at the ground for a moment, willing it to disclose its secrets as a witness. Yet the ground remains silent. With a sigh, you stand, stretch your back, and look around the crime scene. [JavaScript] rollType = "Perception" successMsg = "Closely searching the bushes next to where the body was found, your eyes glance upon a small piece of plastic. When you carefully pick it up, you find a single, used medical syringe. "; successVar = "foundVictimTwoSyringe"; [continue] {embed passage: 'roll'} Having discovered everything the scene is willing to reveal, you raise your eyes and scan the area for anything of interest. [if !canVisitCreepyHouse && trail.indexOf("house") === -1 && patrolEventStatus < 2] {embed passage named: 'patrolEvent1'} [continue] [if !canVisitGrocery && trail.indexOf("grocery") === -1 && patrolEventStatus < 3] {embed passage named: 'patrolEvent2'} [continue] [[Continue->park]] {embed passage named: 'header'} The scene of Jamal's horrifying death is now strangely quiet. Some remnants of blood remain on the ground, which is heavily disturbed from the overnight investigation. A few birds chirp in the trees nearby. A shiver passes over your entire body. How did this terror come to pass? [JavaScript] rollType = "Perception" successMsg = "Heavy rain shortly after the murder has washed away any remaining trace evidence. There's nothing left for you here."; [continue] {embed passage: 'roll'} [[Continue->park]]fourthVictimKnown: true missedVictimFourEvent: false mapParkSearchBody: "shown" -- {embed passage named: 'header'} As you approach the park, you can see flashing emergency lights staging in the north parking lot. You quickly park nearby and are flagged down by Officer Amanda Palads as soon as you exit your car. "It’s too late." She remarks grimly. "The Sheriff is there, come on." She leads you back into the wooded portion of the park, near one of the small footbridges. The Sheriff and a paramedic are standing over a body. The Sheriff consults his notepad. "She called 911 herself at 4 minutes to 3. We rushed down here and found her dead at 3:15. That's less than twenty minutes." He sighs, clearly frustrated. On the ground before you is a petite Hispanic young woman, her body contorted and a pool of blood near her head. "The coroner is on her way," The Sheriff remarks. [JavaScript] rollType = "Perception" successMsg = "You hear thunder. It's getting closer. Whatever you're going to look for here, you better find it quick."; [continue] {embed passage: 'roll'} {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'mapPark'} [[Search the Body]] [[Search the Scene]] {embed passage named: 'header'} The recently deceased is a young Hispanic woman a tad over five feet tall. Her face is locked into a grimace and blood pools near her head. You place your hand gently on her arm. Her body is still warm, proof that she died quite recently. You notice her hair is dyed purple, disrupted and wrecked by blood and wounds. She died a brutal death, obviously across several intense head impacts in short order. She's not carrying much, but in her wallet you find a student id card for the college. "Jamal Veralin" you quietly read the name out loud. [JavaScript] rollType = "Perception" successMsg = "Perhaps more interesting is what you DON'T find. This victim called 911 herself less than an hour ago. So where is her phone?"; successVar = "canAskAboutVictimFourPhone"; [continue] {embed passage: 'roll'} [[Continue->V4end]]hour: 5 -- {embed passage named: 'header'} Heavy rain starts to fall; first with a few ponderous plonks and then quickly escalating to a steady downpour. Water pools around your feet and washes steadily across the ground. The coroner scurries to quickly pack up the body and rush it off to the morgue. "We're not going to find anything else out here tonight!" The Sheriff yells over the din of the increasingly heavy rain. "Let's all try to get a little rest and continue the investigation in the daytime." Feeling overwhelmed, you head back to your hotel. A long hot shower can't begin to wash away the tragedy you saw this morning, but you scrub and scrub anyways. A futile attempt at sleep yields only tossing and turning. How could this have happened right under your nose? [JavaScript] hour = 7 [continue] Finally, mercifully, daylight slowly illuminates the hotel room windows. [[Continue->sheriff]]{embed passage named: 'header'} "Sheriff," you say, "We know the victim called 911 herself minutes or even seconds before her death. Yet when we arrived minutes later, her phone was nowhere to be found." "The perpetrator must have taken it!" The Sheriff snaps his fingers. "Let me pull up the 911 call first." The Sheriff access the 911 dispatch system and finds the victim's chilling last call. He hits playback. "Hello!?" Jamal's voice echoes from the past, in her final moments "Help! I’ve been attacked, he hit me, I didn’t see him, I’m in the … oh my god! No, you said...!" There's a loud thump, some other shuffling noises, and the call disconnects. The Sheriff leans back. "Hmm." He sighs, "I've got the origin number here..." He clicks through the system's screens. [JavaScript] rollType = "Intuition" successMsg = "You said? Does that mean Jamal knew her attacker? Maybe he told her to come to the park at that time, claiming some reason to meet her."; [continue] {embed passage: 'roll'} "I have her number," the Sheriff says, his eyes serious. {reveal link: 'Call the Number', text: `Much to your disappointment, but not surprise, the call immediately goes to voicemail. The phone must be turned off.`} {reveal link: 'Trace the Current Location', text: `The Sheriff clicks a few screens in his emergency system, then shakes his head. "Trace only works for phones that are on. The last trace location for this phone was at the park. It hasn't been on since then."`} {reveal link: 'Request the Phone Call Records', text: `"We'll need to get those from the phone company. Normally it would require a warrant, and we don't have time for that, but I suppose..." He dials the number, and you speak with the phone company technician. "I'm sorry," the technician says, "I can't give out phone records." [[(Intimidation) Get the Records->getPhoneRecords]]`} [[Continue->sheriff]] {embed passage named: 'header'} You carefully play your flashlight around the body and on the trails nearby. Suddenly, you realize you are looking at footprints. Footprints running away from the body! [JavaScript] rollType = "Academics" successMsg = "The shoe imprints are consistent with men's walking shoes, size 11. You make a note of the tread and wear pattern."; successVar = "figuredOutPerpShoe4"; [continue] {embed passage: 'roll'} [if success && figuredOutPerpShoe1] This is the same shoe impression as the one you found at the crime scene behind the college library! [continue] You follow the footprints across the park, toward Broad St, and see a vehicle parked on the street, shrouded in darkness. As the beam from your flashlight splashes toward it, the engine roars to life. This could be the killer! [[(Physical) Run to the Car->chaseCar]] {embed passage named: 'header'} [JavaScript] rollType = "Physical" successMsg = "You break into a sprint through the pitch black night. The car starts to pull away, but you catch up enough to identify the car as a red sedan. The car drives fast down Broad St toward Third Ave or beyond."; failureMsg = "The park is dark and the ground uneven. As you try to run toward the car, you slip and twist your ankle. Argh!! You hear the car speed off into the night, but don't manage to see which way it went." [continue] {embed passage: 'roll'} [JavaScript] if (success) { figuredOutCarInfo = 1; mapCarRoute = "shown"; } [continue] [if success] {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'mapPark'} [[(Academics) What Model Year?->carModelYear]] [else] [[Continue->V4end]] [continue] {embed passage named: 'header'} [JavaScript] rollType = "Academics" successMsg = "Looks like a Honda Accord, model year 2014 to 2016. That should help narrow it down!"; [continue] {embed passage: 'roll'} [JavaScript] if (success) figuredOutCarInfo = 2; [continue] [[Continue->V4end]] discoveredHenrysCar (figuredOutCarInfo === 2): true canArrestHenry (figuredOutCarInfo === 2): true -- {embed passage named: 'header'} You describe, in as much detail as you can, the car escaping from the park that night. [if figuredOutCarInfo === 1] The Sheriff shakes his head. "We've got dozens of cars like that in town. If only you could identify it down to the make and model year, then we'd have a lock. But these cars are really common here." "But listen," he says after a minute of pondering, "Let's both keep our eyes open. If you see a car like it, definitely investigate closer." [else] The Sheriff types the details into his computer, then just stares for a moment at the screen. An uneasy silence fills the room. "There's only vehicle of that make, model, and year registered in the county. A red, 2015 Honda Accord." He says slowly. "Registered to whom?" You pensively ask. "Dr. Henry Black." The Sheriff says finally. "He's the chemistry professor at the college." [continue] [[Continue->sheriff]] {embed passage named: 'header'} You arrive at a low-slung, older apartment complex a few blocks from the college. There, you are greeted by a heavyset young brunette. She invites you into the apartment. "Melody and I lived together for the past year," she says, "we met on a roommate finder app for college students. She's been a great roommate; she's a lot of fun and very outgoing, but also very studious. A few times a week at least, she stays late on campus working on her studies; I didn't ask in detail." "Sometimes, especially on Friday nights, we would go to this party house down the street. There's this towny, he owns the place and is always running crazy parties." She hesitates. "A few weeks, we were at one of his parties, and something happened. I didn't see it myself, but Melody wanted to leave right away. She was really upset. It was probably nothing." [JavaScript] rollType = "Intuition" successMsg = "It's not nothing. The roommate knows more than she's letting on here."; [continue] {embed passage: 'roll'} [[Travel to Another Location->travel]] {embed passage named: 'header'} This is definitely the place that rocks every weekend. Peeling paint, a yard full of empty and broken bottles; crushed cans, and other party detritus. Although there is no evidence of a party happening right now, the front door is slightly ajar. Inside, you find the ill-kempt decor of someone whose life revolves around the party. Drawings on the walls, cheap plastic cups behind couches and chairs, stains of all types on the floor and furniture. As you evaluate your surroundings, an early 30s man with dirty blond hair strides out of the kitchen. "Hey, hey," he waves his arms out, either to look cool or look intimidating, you're not sure, "I'm Chad. What's up?" "I'm here to talk about a young college student named Melody. She would sometimes come to your parties?" "Ah yeah!" he laughs, then chuckles, then a nervous glance flashes across his eyes, "Yeah, yeah, anyways, no. No, she hasn't come by in a long time." He shakes his head. [JavaScript] rollType = "Perception" successMsg = "He glances from side to side, shifting his weight. He averts eye contact, and swallows."; [continue] {embed passage: 'roll'} "Anyways, you know, like, I should probably get going..." he shuffles his feet. {reveal link: "Ask about Suspicious People at Parties", passage: "partySuspects"} [[(Intimidation) Ask Chad if he Attacked Melody->accusePartyHost]] [[Travel to Another Location->travel]] {embed passage named: 'header'} "Listen... Chad... Melody is dead. And I think you had something to do with it. I know she was here recently for a party. And I know something happened that night." [JavaScript] rollType = "Intimidation" successMsg = `His eyes droop. "She was here," he admits, "but I didn't kill her! I just... You know, we had been drinking, she was looking cute, looking flirty... I thought she was interested. I thought she was into me... But I guess I came on too strong or maybe she hadn't had enough to drink yet. Anyways, she pushed me off of her and yelled at me and ran out. I promise I never saw her again after that."`; failureMsg = `His eyes harden. "Do I need a lawyer or something? Look, I didn't do anything wrong. Just get out of here."`; [continue] {embed passage: 'roll'} [[Travel to Another Location->travel]] numDeaths: 3 numDeaths (whatHappenedToHenry === "suicide"): numDeaths + 1 numDeaths (!disruptedVictimFourEvent): numDeaths + 1 numDeaths (numDeaths === 3): "three" numDeaths (numDeaths === 4): "four" numDeaths (numDeaths === 5): "five" suspect: "no obvious suspect" suspect (whatHappenedToHenry === "escaped"): "a suspect on the run" suspect (whatHappenedToHenry === "burned"): "a dead suspect" suspect (whatHappenedToHenry === "arrested"): "a suspect in custody" reprimanded: (whatHappenedToHenry === "burned") || (!disruptedVictimFourEvent && !fourthVictimKnown) || callProtest uploaded: false config.header.center: "(Conclusion)" -- The Sheriff motions you to sit down in his office. "I've just been in contact with your supervisor at the FBI. He wants to have a quick conference call to summarize the case, determine your findings, so that the FBI and myself can figure out the next steps." The Sheriff turns on the speakerphone. "Sounds like you've had an eventful first case!" Your supervisor's voice crackles across the phone line. "The Sheriff filled me in on some of the details. Sounds like we {numDeaths} suspicious deaths, {suspect}, and a town on the edge of chaos." [if whatHappenedToHenry === "arrested"] "The suspect is refusing to cooperate," the Sheriff interjects. "He's asked for a lawyer." "Of course," your supervisor replies. [continue] [if whatHappenedToHenry === "burned"] "The fatal failed PIT maneuver is definitely going to lead to some consequences," your supervisor continues, voice grave. "I expect some lawsuits and we'll need to cover ourselves. There will be a reprimand and remedial training, but I'm confident you can recover and still grow into an excellent agent." [continue] [if !disruptedVictimFourEvent && !fourthVictimKnown] "I'm very concerned about the fourth death," the Sheriff says, "I wasn't able to get in touch with the agent." He turns to you. "You didn't answer my call. You didn't come to the office." "This is really unprofessional," your supervisor interjects, "And Sheriff, I assure you, we will be having a reprimand conversation with the agent upon their return to headquarters." [continue] [if callProtest] "The fact that family members felt so ignored they had a protest," your supervisor sighs. "I understand you want to focus on the investigation. But people are critical. You need to focus on making people feel heard, feel seen. Especially people close to the victims. This is not a good look for you or the agency. I'm going to have to put a reprimand on your file." [continue] "Agent, we're going to need your assessment of what happened to each victim," your supervisor continues, "In order to determine how to press charges if we can, and wrap up this case." [if whatHappenedToHenry === "arrested"] "I have to remind you," the Sheriff mentions, "If we can't get at least one charge against Henry... I'll have no choice but to release him." [continue] [[Continue->concludeV1]] canVisitGrocery: false -- {embed passage named: 'header'} "There are now FOUR people dead in this town, mister! If you have anything and I mean ANYTHING AT ALL that can help shed some light on this situation, I expect you to provide it!" [JavaScript] rollType = "Intimidation" successMsg = `He nods slowly. "You're right. If we wait for a warrant, it will be too late. I'll get you the footage."`; failureMsg = `"You have the law to follow?" he says, "I have my rules too. Warrant or no footage." But you know that by the time you get the warrant, the footage will already be erased.`; [continue] {embed passage: 'roll'} [if success] You carefully watch the footage over the wee morning hours. The manager, previously hostile, now seems as involved as you are. In the late 2 AM hour, you see a figure walking along Fourth Ave toward the park. Jamal? At that range and lighting, it's impossible to be sure. But it seems like it might be her. Some time passes, but in the early 3 AM hour, you see a car drive quickly away from the park, driving fast down Broad St toward Third Ave or beyond. You squint and replay the dim, grainy recording over and over again. It's red. A red sedan. Beyond that, it's impossible to tell. Could a killer have passed in front of your vision? It's haunting to consider. Absent-mindedly, you thank the manager for his assistance. [continue] [JavaScript] if (success && figuredOutCarInfo === 0) figuredOutCarInfo = 1; [continue] [JavaScript] if (success) { mapCarRoute = "shown"; } [continue] [if success] {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'mapWasacona'} [continue] [[Travel to Another Location->travel]] mapCollege: "" mapHenryHouse: "" mapArrestHome: "can-visit" mapArrestCollege: "" mapArrestCollege (collegeCloseStatus < 1): "can-visit" mapArrestDrive: "" mapArrestDrive (collegeCloseStatus < 1): "can-visit" -- {embed passage named: 'header'} "It's time," you state firmly. "We need to take Dr. Henry Black into custody." The Sheriff looks at his watch and nods. [if hour > 8 && hour < 17 && collegeCloseStatus < 1] "He should be at the college right now, perhaps even teaching a class at this moment." [else] "He should be at home right now." [continue] {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'mapWasacona'} [if collegeCloseStatus < 1] "We could move now," the Sheriff continues, "Or wait for a more opportune time or place. What do you think?" [[Arrest Dr. Black at the College->arrestCollege]] [[Pull Over Dr. Black Driving Between Home and College->arrestPullOver]] [else] "With the college closed, it's unlikely he'd be anywhere else. Ready to move?" [continue] [[Arrest Dr. Black at Home->arrestHome]] {embed passage named: 'header'} "This woman was just brutally murdered, and we may have only hours before her killer leaves town, or strikes again! We just need to know if anyone called her in the hours before the murder," you plead. [JavaScript] rollType = "Intimidation" successMsg = `"Yes, I understand," the technician replies, "I'll send you the relevant logs."`; failureMsg = `"I'm sorry, I really am!" The technician pleads, "But I can't disclose any of this without a warrant!"`; successVar ="discoveredHenrysCall"; [continue] {embed passage: 'roll'} [if success] The Sheriff joins you to look over the calls. "Here's her 911 call," the Sheriff points out solemnly. "But what's this?" you counter, "She received a call only a few hours before she called 911, late in the evening! Who's number is this?" "Let me look it up," the Sheriff quickly replies, searching the computer. "Dr. Henry Black." The Sheriff says finally. "He's the chemistry professor at the college." [continue] [JavaScript] if (success) canArrestHenry = true; [continue] [[Continue->sheriff]] hour (hour > 8 && hour < 17 && collegeCloseStatus < 1): 18 -- {embed passage named: 'header'} The Sheriff and you roll up to a humble, single level ranch home. Nothing immediately signifies any sign of trouble. {embed passage named: 'henryHomeDesc'} In the driveway, Henry's red Honda Accord is parked, suggesting he is at home. [if figuredOutCarInfo > 0 && !discoveredHenrysCar] That's it. You freeze for a moment, and your blood runs cold. That's the car you saw leaving the park that night. You're sure of it. "Sheriff," you say, "This is the car from the park. It's him." The Sheriff nods grimly. [continue] Together, you advance up to the front door. The house is eerily quiet. Listening for a moment, you hear no sound - no movement. The Sheriff looks at you pensively. [[(Physical) Kick the Door Down->kickDoor]] [[(Perception) Walk the Perimeter and Look in Windows->lookWindows]] [[Knock Loudly and Announce Yourselves->sheriffEntry]] [if day === 1 && hour === 18] The evening sun nears the horizon, casting long shadows across the town. An unnamed fear. A mystery. [continue] [if day === 1 && hour === 19] The evening sun dips beneath the horizon as street lights begin to push back against the darkness. A few small clouds reflect the deep purple of the evening. [continue] [if day === 1 && hour === 20] A dim glow of the muted sky provides to relief for the town, as the tendrils of inky darkness reach further into every corner. [continue] [if day === 1 && hour === 21] A quiet starlit evening covers the small town in an illusion of peace and security. [continue] [if day === 1 && hour >= 22] A quiet starlit evening covers the small town in an illusion of peace and security. [continue] [if day === 2 && hour === 0] Stars blink in and out as wispy clouds roll across the sky. In the distance, coyote howls echo off the muted buildings of the small town. [continue] [if day === 2 && hour === 1] A gust of wind blows leaves through the darkness, as invisible clouds begin to gather overhead. [continue] [if day === 2 && (hour > 1 && hour < 5)] A gust of wind blows leaves through the darkness, as invisible clouds begin to gather overhead. [continue] [if day === 2 && hour === 5] In the dark pre-dawn hours, heavy rains and thunder roll across the town. Tiny creeks swell and aspirational rivers run down the edges of each road. [continue] [if day === 2 && (hour === 6 || hour === 7)] In the dim early morning hours, dark clouds and heavy, persistent rain bring a slow awakening to the frightened town. The rain slowly weakens to a steady patter. [continue] [if day === 2 && (hour >= 8 && hour < 18)] The overnight rain has ended, replaced with a dull gray overcast. The diffuse and dim light make the town seem flat, like an old photograph. [continue] [if day >= 2 && hour === 18] The dim flat light darkens further, and a few patches of light blue but quickly dimming sky venture their way through. A light breeze rustles the remaining leaves on trees. [continue] [if day >= 2 && hour > 18] The overnight is quiet, the sky alternating between overcast and stars, a distinct cooling on the air. [continue] [if day >= 3 && hour < 6] The overnight is quiet, the sky alternating between overcast and stars, a distinct cooling on the air. [continue] [if day >= 3 && hour >= 6 && hour < 18] An unsettled day, alternating between peaks of sunlight and gloom of passing clouds. A few sprinkles, now and again, threaten but never produce, a promised rain. [continue]day: 3 hour: 8 mapParkHenry: "can-visit" -- {embed passage named: 'header'} "Officer Amanda just called me, she's on foot patrol and found another body in the park!" The Sheriff barks, stress in his voice. "Please come quickly and meet us there." {embed passage named: 'mapWasaconaDisable'} {embed passage named: 'mapPark'} [[Join the Sheriff->henryScene]] {embed passage named: 'header'} [JavaScript] callAnswerFrom = "Derek LaGrange"; callAnswerDest = "Answer2"; [continue] You are interrupted by an insistent phone call! {embed passage named: 'incomingCall'} {embed passage named: 'header'} You make your way to the edge of campus, behind the library. The area is ominous; surrounded by bushes, with a small creek nearby; off any pathway, and out of sight from any window. The area feels vaguely industrial abandoned, like you've entered into an alternate dimension where no other humans dare to tread. Some ripped crime scene tape flutters in the breeze, dancing from nearby trees and bushes used to anchor it; the only obvious evidence of the violent tragedy that unfold here so recently. [JavaScript] rollType = "Academics" successMsg = "This out of the way location, where Melody would have no reason to go; coupled with lack of any evidence of a struggle suggest that this is a secondary scene: Melody was killed somewhere else, and dumped here."; [continue] {embed passage: 'roll'} [if day === 1 || (day === 2 && hour < 3)] {embed passage named: "crimeScene1PreWX"} [else] {embed passage named: "crimeScene1PostWX"} [continue] [[Continue->college]] {embed passage named: 'header'} You ask to meet with the campus security officer who originally found and called in the first victim. Shortly, a mid-30s white woman in a security uniform comes to greet you. She's a bit plump, and overall seems to be a very pleasant person. "Hello agent!" She shakes your hand firmly, "I'm Ann Gamble, I've been working security here at the college for about three years now." "Well, you're probably wondering about that night! I have to say, it's burned into my memory for sure! This is a very safe campus, safe town, so we're all a bit shaken and scared..." Her voice trails off. {reveal link: "Ask about the Death", text: `"It was late Monday night," she begins. "Tuesday morning actually, I suppose. I was on walking patrol -- we always do a couple of overnight walking patrols -- and I was out on the edge of campus, near the library. It was real quiet, you know, no one is around at that time of night. Everything is closed. That's when I saw something near the bushes. I went over, behind the library, to take a closer a look. It was a person! Well, I figured it was some drunk kid, passed out maybe. I called out loudly - you know, Hey, Get up!, that kind of thing. Anyways, the person didn't move. I got closer and the scene really creeped me out. I saw her clothes on top of her, not really dressed. And she wasn't moving at all. Well, I called 911 right away. I never touched the body. Never have before."`} {reveal link: "Ask about Suspicious Persons", text: `"This is a safe town," she shakes her head. "You know, there's this drifter who's been about. He comes and goes. He can be trouble sometimes, sure. But, usually just some theft or occasionally drugs. I've never seen him be violent. But you never know. I guess you never know..."`} [[Continue->college]]{embed passage named: 'header'} You enter the administration building. After identifying yourself to a receptionist, you are quickly shown into a large but spartan office of the college president. Degrees and awards line the walls, and a large desk imposes on the room. A name plaque on the desk reads "Dr. Alexandra Vladox, Ph.D. Ed.D.". A woman of apparent Russian descent, perhaps in her late-50s, shakes your hand and invites you to sit across from her. "Thank you agent for coming all this way," she begins, "Really this has been a tragedy for the community and the college. I think we're all shaken and frankly, a bit fearful. I sincerely hope your efforts to bring closure quickly and definitively." {reveal link: "Ask about college", text: `"Wasacona College is a small college, in a small town," she begins, "We're a community anchor. Originally, the college was founded to provide a quiet, out of the way place to study the arts. Later, the board and I successfully fund raised and open a substantial physical sciences program, with an emphasis on biology and chemistry. We have ambitions, yes, but ambitions in check with the community."`} {reveal link: "Ask about Melody", text: `"Very sad," she frowns, "Melody was a fantastic student. She was majoring in chemistry but really took advantage of all our college programs. What we would call a well-rounded student. Certainly there was no indication anything like this would happen!"`} [if fourthVictimKnown] {reveal link: "Ask about Jamal", text: `"Another chemistry major..." she pauses. "I don't know if that's significant or not. But we're a small campus with only a few programs. Still, there haven't been any complaints about any of our staff or departments. This really needs to end, though, or this whole town could be in trouble."`} [continue] [[Continue->collegePresident2]] {embed passage named: 'header'} You enter the eclectic art building. Student work, such as paintings, drawings, and even sculptures are displayed in cases along the walls. A number of workshops for various arts are bustling with students working on projects. You soon find yourself face to face with the head art professor, a matronly white lady with curly white hair. Her wrinkles crease and stretch as she smiles. "Oh, bless you," she takes your hand gently, "I'm Patricia Huntley, the art professor. Oh, we need help in this town. Melody was one of my students, she was in an Introduction to Drawing class. She was such a wonderful person. Please, no one would have any reason to harm her. Melody always had a such an eye for art. I even encouraged her, become an artist, take an art minor, but she was set on her science goals. Still, so much talent. Lost so young." Your heart breaks for the community and this loss. These aren't statistics; they're people. You resolve to focus your efforts. You have to solve this case! *The renewed sense of motivation improves your morale.* [JavaScript] const m = engine.state.get("lastMorale"); if (m !== "art") { engine.state.set("morale", morale + 1); engine.state.set("lastMorale", "art"); } [continue] [[Continue->college]]{embed passage named: 'header'} You enter a noisy classroom building. After a few moments of poking around, you eventually find one instructor in an otherwise empty room, either preparing for a class about to start, or packing up after a class that finished. "I'm looking for the humanities department," you ask. "Well, you're in the right place," he's young, maybe 35, with olive complexion, cropped dark hair and a thin goatee. "You know, they're still trying to hire a head humanities professor. It's just us adjuncts running the place right now. A bit of chaos." He smiles broadly. "But hey a little chaos, that's the spice of life, right? Anyways, was there something I could help you with?" "What did you say your name was?" "Oh, uh, Adam. Adam Devone. Not doctor. Not yet. I'm still working on that dissertation! Almost there." {reveal link: "Ask about Melody", text: `"Sorry, who?" he shakes his head, "I'm new in town. Just started this term, you know! Anyways, the name doesn't ring a bell. Wait.." he hesitates. "Is that... oh my God, I'm so sorry. I didn't connect the dots until just now. That poor girl! But no, she wasn't in my class. I didn't know her myself. Still, very sad. Very sad."`} [if fourthVictimKnown] {reveal link: "Ask about Jamal", text: `"Ooh!" he perks up, "Yes, she was in my literature class. Seemed like a nice young lady. Good attendance, good classwork. She would even get involved in the discussions! Some students won't, you know."`} [continue] {reveal link: "Ask about Whereabouts", passage: "colHumWhere"} [if figuredOutPerpShoe1 || figuredOutPerpShoe4] {reveal link: "(Intimidation) Let me See your Shoes", passage: "colHumShoes"} [continue] [[Continue->college]]{embed passage named: 'header'} The glass and steel science building hums with quiet equipment and the sound of mummering students hard at work. You locate the chemistry professor in his office, sitting behind his desk. The professor, whose degrees and door sign identify as Henry Black, seems startled to see you. He's a white man, with a bit of receding hairline, but otherwise healthy and athletic looking, appearing in his mid 40s. He turns away from a computer terminal as you enter. "Hello." He states plainly. The office is full of chemistry equipment and notebooks. On the desk are several signed baseballs, protected under acrylic cases. {reveal link: "Ask about Melody", text: `"Melody was a beautiful young woman and she had such a life ahead of her. I can’t imagine how this happened. And on our campus too! I thought it was safe here. I think some of the students might drink too much and drug use is increasing. It’s getting more dangerous here. I’m nervous to be out after dark."`} [if fourthVictimKnown] {reveal link: "Ask about Jamal", text: `"Jamal was a lovely young woman and a good student. On an upward path for sure. She was improving dramatically in her studies recently."`} [continue] {reveal link: "Ask about Baseballs", text: `He brightens. "I setup the intramural league a few years ago. It's a great way to bring the campus together. When I was a kid," his voice trails off, "I had dreams of going pro. In reality, I was just a nerd. But I always kept the spark for the game. And now I found a way to bring it back to life."`} [if !(jamalIdentifiedHenry || discoveredHenrysCall)] {reveal link: "Ask about Whereabouts", passage: "colChemWhere"} [continue] [if jamalIdentifiedHenry || discoveredHenrysCall] {reveal link: "I know you went to the park to meet Jamal", passage: "colChemJamal"} [continue] [if figuredOutPerpShoe1 || figuredOutPerpShoe4] [[(Intimidation) Let me See your Shoes->colChemShoes]] [continue] [if discoveredHenrysCar] {reveal link: "Your car has been identified as a vehicle of interest. I need to search it.", text: `"You want to search my car?" he sounds aghast, and perhaps a little frightened. "This is outrageous. You come in here and think you own me? This is not going to happen."`} [continue] [[Continue->college]]{embed passage named: 'header'} The glass and steel science building hums with quiet equipment and the sound of mummering students hard at work. You locate the biology professor in his office, sitting behind his desk. The professor, whose degrees and door sign identify as Abraham Norman, regards you cooly. He's a black man, healthy and athletic looking, appearing in his mid 50s. He sets down a pen and pushes a stack of papers aside. On the desk and on a small table nearby, you see a variety of family and activity photos. You also notice a baseball bat leaning against the wall in the corner. "Can I help you with something?" he inquires. You return his gaze. You notice bruises and scratches on both his arms. Could they be from one of the victims trying to defend themselves? He follows your gaze, then pulls his sleeves down slightly, a futile attempt to cover the wounds. {reveal link: "Ask about Melody", text: `He looks down. "Yes, Melody was in my class. Melody was a good kid, smart, driven. I have every faith in the sheriff, and by extension, in you."`} [if fourthVictimKnown] {reveal link: "Ask about Jamal", text: `"Jamal was in my class, but she struggled a bit. She really tried, you know. She wanted to get her degree. I wanted to help her get there. Now... I guess we'll never know."`} [continue] {reveal link: "Ask about Whereabouts", passage: "colBioWhere"} {reveal link: "Ask about Baseball Bat", text: `He smiles. "We have a bit of an intramural baseball team here at the college," he replies, "We don't really have a formal sports department but folks still like to play. Actually the team is organized by Henry; Dr. Black, the chemistry professor."`} {reveal link: "Ask about Wounds", passage: "colBioWounds"} [if figuredOutPerpShoe1 || figuredOutPerpShoe4] [[(Intimidation) Let me See your Shoes->colBioShoes]] [continue] [[Continue->colBioOffersHelp]]discoveredHenrysCar: true canArrestHenry: true -- {embed passage named: 'header'} "Sheriff," you tell him over the phone, "I'm in the college parking lot. I've got the red car here. I'm sure it's the same car." "What's the license plate?" You tell him the plate. There's a pause, and you can hear computer typing in the background. "Got it. A red, 2015 Honda Accord." He says slowly. "Registered to whom?" You pensively ask. "Dr. Henry Black." The Sheriff says finally. "He's the chemistry professor at the college." "If you think he's our guy," the Sheriff continues, "Come to the station and we'll arrange to arrest him." [[Continue->college]] {embed passage named: 'advanceTime'} {embed passage named: 'header'} [JavaScript] rollType = "Perception" successMsg = "You exit your car and begin to look around the parking lot. The blood in your veins turns cold. That's it. Right there. Just one row over, and a few cars down. A red 2015 Honda Accord. That's the car. You're sure of it."; failureMsg = "You exit your car and begin to look around the parking lot. All the cars form a dizzing array of sizes and colors. Nothing really seems to jump out at you, though." [continue] {embed passage: 'roll'} [if success] [[Report the Car to the Sheriff->reportCar]] [else] [[Continue->college]] [continue] humProfSketchyWhere: true -- "Where were you last week, on Monday night?" you inquire directly. He seems taken aback. "Uh, last week? Well... Probably just the usual, you know..." he gives a nervous giggle. "You know, probably at home, swiping on Tinder. There's not much in this town. Or anywhere nearby. I really got increase my search radius... Anyways, but no, you know, I was just, hanging out." [if fourthVictimKnown] "And how about last night?" you ask.. "Last night? Well I hung out at the pub in town, the little restaurant you know, until about midnight, drinking. It ain't no club, but it's some place to go. Closed 'em out. Anyways, then I went home. Nothing to it. No ladies to pick up in this town anyways." He seems glum. [continue] [JavaScript] rollType = "Intuition" successMsg = "He's as pathetic as he sounds, but he isn't lying about being alone that night."; [continue] {embed passage: 'roll'} * * * [JavaScript] let evidence = ''; for (const cond of conclusion.conds) { if ( (cond.kind === 'visit' && trail.indexOf(cond.item) > -1) || (cond.kind === 'var' && engine.state.get(cond.item) === true) || (cond.kind === 'true') ) { evidence += '<li>' + cond.text; } } console.log(evidence); if (evidence > '') { success = true; write('<p class=conclusion><a class=conclusion href="#" onclick="concfunc(this)">' + conclusion.title + '</a></p>'); write('<p class=conclusion-desc>' + conclusion.desc + '</p>'); write('<ul class=evidence-header><li>Evidence</ul><ul class=evidence>'); write(evidence); write('</ul>'); } else if (conclusion.always) { success = true; write('<p class=conclusion><a class=conclusion href="#" onclick="concfunc(this)">' + conclusion.title + '</a></p>'); write('<p class=conclusion-desc>' + conclusion.desc + '</p>'); } else { write('<p class=conclusion>' + conclusion.title + '</p>'); write('<ul class=evidence-header><li>No Evidence Found</ul>'); } conclusion.always = false; [continue]The ground is wet from the recent rains. Slushies of mud have crossed the ground, rushing toward a creek you can hear babbling some distance away. Any evidence on the ground here is long gone.You scan around the area where the body was found. At first, nothing of interest catches your eye; even the bushes and trees seem undisturbed. There are a lot of footprints at the scene, though. Security? Coroner? Police? Maybe the killer? [JavaScript] rollType = "Perception" successMsg = "One set seems different from the rest, deeper, as if the person is carrying something; and earlier, with other footprints on top but never beneath."; failureMsg = "But they're all mixed together, overlapping, woven like tight threads. There's no way to figure out one from another." [continue] {embed passage: 'roll'} [if success] {embed passage named: "crimeScene1Shoe"} [continue] [JavaScript] rollType = "Academics" successMsg = "The shoe imprints are consistent with men's walking shoes, size 11. You make a note of the tread and wear pattern."; failureMsg = "However, there's nothing you can identify as special or unique about the shoe prints." successVar = "figuredOutPerpShoe1"; [continue] {embed passage: 'roll'}{embed passage named: 'header'} You rise and thank the president for her time. "Say," she hesitates. "With everything going on. I don't want to cause more alarm, especially not adding to the fear that's already out there, but..." "The board and I, we're discussing cancelling all classes and closing the campus. Just for the time being, until the Sheriff can make an announcement." "What do you think?" [[Yes, better safe than sorry.->collegePresClose]] [[No, that would be an overreaction. We have no evidence confirming these deaths are linked to the college.->collegePresOpen]] collegeCloseStatus: 1 -- {embed passage named: 'header'} "Yes, better safe than sorry." You respond. "The fact is, we don't know enough about who the killer is or why they are targeting their victims. If there is an aspect of chance, of opportunity, then the less people are out and about the better." "Thanks," the President nods, "I'll direct the campus to close immediately." [[Continue->college]] collegeCloseStatus: -1 -- {embed passage named: 'header'} "No, that would be an overreaction. We have no evidence confirming these deaths are linked to the college." You shake your head. The President ponders for a moment. "I suppose that's true. And I don't want to contribute to more fear and panic for no reason. Besides," she seems to be reassuring herself as much as speaking to you, "I'm sure you and the Sheriff will have this situation resolved soon enough." [[Continue->college]] "Where were you last week, on Monday night?" you inquire directly. "Well, probably the same place I am most every night." He leans back in his chair, some narrative playing out behind his eyes. "At home, with my partner. They prefer to stay in together, have dinner, spend the evenings at home most nights." [if fourthVictimKnown] "And how about last night?" you ask.. "Same story," he says, "It was movie night. We like to cook up a big pot of spaghetti! Well, I mean, mostly Kai does the cooking, they actually went to culinary school back in the day. But, anyways, eat and watch a movie. Last night? I think it was the new Mission Impossible." [continue] [JavaScript] rollType = "Intuition" successMsg = "There's some trauma here, but it's not about the recent deaths. He's telling the truth."; [continue] {embed passage: 'roll'} Your mind flashes to the shoe impressions you found earlier. "Let me see your shoes," you state confidently, trying to eyeball the size and tread from the distance between you. [JavaScript] rollType = "Intimidation" successMsg = `"My... my shoes?" he stammers. "Uh, ok." He awkwardly pulls off a shoe and hands it to you. Men's, size 9. No match.`; failureMsg = `"My... my shoes?" he stammers, then shakes his head. "Listen, I had nothing to do with this. I gotta go."`; [continue] {embed passage: 'roll'} {embed passage named: 'header'} Your mind flashes to the shoe impressions you found earlier. The professor's shoes are hidden under his desk. There's no way to tell without being direct. "I'll need to see your shoes, please." You look him in the eyes. [JavaScript] rollType = "Intimidation" successMsg = `"Of course," he moves around to the front of the desk and sits right in front of you, raising his feet. "I hope this means you've found some concrete evidence." Men's, size 13. No match.`; failureMsg = `He looks incredilous. "If I'm a suspect, then I'm going to need to talk to an attorney. Otherwise, I think it's about time for you to leave."`; [continue] {embed passage: 'roll'} [[Continue->college]]hour (hour < 10): 10 day (hour > 17): day + 1 hour (hour > 17): 10 henryCarAtHome: false whatHappenedToHenry: "escaped" whatHappenedToHenry (discoveredHenrysCar): "arrested" -- {embed passage named: 'header'} You join the Sheriff and make your way to the college. [if discoveredHenrysCar] "He's a flight risk," the Sheriff notes, "So I've asked Officer Goodwin to join us. Since you identified Dr. Black's car, Jack will stay behind at the car to make sure he doesn't escape." [continue] Class should be in session, so you head to the science building. The glass and steel science building hums with quiet equipment and the sound of mummering students hard at work. Up ahead, the classroom where Dr. Black is scheduled to be teaching. You hold outside the classroom door. The Sheriff puts his hand on his gun, then nods to you. You throw open the door and both step aggressively into the room... A few confused students working on projects look up at you. "Where is Dr. Black?" The Sheriff booms. "He's scheduled to be teaching right now!" The students look at each other. "Well, we're scheduled to have class, but he just sent a message a couple of minutes ago to the whole class. He said that class was canceled for today and told us to do independent work on our projects." "Canceled..." you mutter. {embed passage named: 'mapWasaconaDisable'} [JavaScript] mapHenryHouse = "can-visit"; [continue] [if discoveredHenrysCar] "Sheriff!" the Sheriff's radio crackles to life. "It's Jack. I got him. He ran to the car, just like you thought." "Great work!" the Sheriff radios back. "I'll be right there." He turns to you. "Jack and I will take him in. As for you, I got a search warrant for his house. Check out his car here, and then why don't you head over to his house and check it out? Then come see me when you're done." [[Search the Car->searchCar]] [else] * * * "There he is!" one of the students shouts, looking out the window. Sure enough, Dr. Black is only moments ahead of you, sprinting out of the building. [[(Physical) Pursue the Suspect->arrestCollegePursue]] [continue] hour (hour < 8): 8 hour (hour > 8 && hour < 17): 17 day (hour > 17): day + 1 hour (hour > 17): 8 henryCarAtHome: false -- {embed passage named: 'header'} You carefully position your car inconspicuously on the route between Henry's house and the college. He should come through here any minute... * * * Sure enough, you see his car approaching in your mirror. He doesn't seem to be alerted to your presence yet! As he passes, you flip on the lights and sirens, and pull out behind him. For a few seconds, he keeps driving at a slow, steady speed down the road. You pull up closer. Suddenly, he accelerates rapidly! Is he trying to escape? He's fleeing on a small residential roadway between his house and the college. At this speed, he could get someone killed! You have a flash of vision of a young child chasing a ball into the street in front of him... [[(Physical) Attempt a PIT Maneuver->StopCarPit]] [[Back Off and Avoid Pursuit->BackOff]] figuredOutCarInfo: 1 disruptedVictimFourEvent: true missedVictimFourEvent: false mapCarRoute: "shown" mapParkPed: "can-visit" -- Near the entrance to the park, a shadow crosses your vision. You hone in -- a person walking into the park. This late at night, especially given the events of recent days? You turn to track them and see where they go in the park. A streetlight shadows you briefly across the long streets next to the park -- and suddenly you hear a car engine start, and a squeal of tires. The person walking seems startled, they stop and look up in surprise. A car, a blur only recognizable as a red sedan, speeds past you and away from the park. The tail lights of the car disappear into the dark streets of Wasacona, as the park visitor stands mute and startled. {embed passage named: 'mapPark'} [[Question the Pedestrian]] {embed passage named: 'advanceTime'} {embed passage named: 'header'} You approach a young Hispanic woman, probably in her late teens or early 20s, standing under a streetlight at the edge of the park. She glances around and then checks her phone. As you approach, she eyes you warily, silently, waiting for you to make the first move. {reveal link: "Introduce Yourself", text: `"Hello," you say, giving your name and title, "I've been asked to help investigate some of the recent deaths in this town. Can I ask you your name?" She pauses. "I'm Jamal. Look, I didn't do anything wrong. It's not illegal to be in the park after dark"`} {reveal link: "Ask about Deaths", text: `"What about the recent deaths? Do you know any of the victims?" She nods slowly. "Yeah, I guess. I know -- knew -- Melody. I'm in class with her. We're in chemistry and biology together. And I remember seeing the drifter guy around campus a few times. But I never talked to him."`} {reveal link: "(Intimidation) Why are you in the park so late?", passage: "pedMeet"} {reveal link: "Leave", text: `You need some time to process what happened here. Time to head to the [[hotel]] and decompress.`} checkedJackShoe: true -- {embed passage named: 'header'} Your mind flashes to the shoe impressions you found earlier. "Jack, I need to talk to you." you approach him firmly. "Let me see your shoes," you state confidently, trying to eyeball the size and tread from the distance between you. [JavaScript] rollType = "Intimidation" successMsg = `He pauses for a moment, processing what you've said. "Sure, I hope that means you have a good lead!" He shows you his shoes. Men's, size 11. It's the right size, but the tread is different. Still, a person can own more than one pair of shoes. Could he be the killer?`; failureMsg = `"Are you kidding me?." he shakes his head. "I'm trying to help you, I'm not here to be led around in circles. You're way off base."`; successVar = "measuredGoodwinShoe" [continue] {embed passage: 'roll'} [[Continue->Interview Responding Officers]] "This is important," you emphasize. "You're not in trouble, but I really need to know why you are here. Were you meeting someone? Was it the person in the car that drove off so suddenly? What's going on? Anything you can tell me, no matter how much you think it doesn't matter -- it might help the investigation." "It's not what you think." she starts, then pauses. "I'm... I'm actually. You know, I know you'll judge me. But I was struggling a little with class, and he seemed so sweet to offer help. One thing led to another... I never meant for it to be like this. When he called tonight, he said he had to see me, to meet him in the park. It was a bit unusual, I admit, but of course I didn't want to upset him!" "Who?" you plead, "Please, I'm not going to tell him you said anything. I just need to know who it is." [JavaScript] rollType = "Intimidation" successMsg = `For a moment, she is silent. "His name is Henry. Uh, Dr. Black. My chemistry teacher." she whimpers. "That was his car, he drives a Honda Accord. I recognized it. He's a really nice guy though. Please don't tell him I talked to you. I don't know why he left so suddenly. Maybe he saw you and thought I brought someone with me? I don't know. Please just leave me alone." She turns and briskly leaves the park.`; failureMsg = `"Listen," she backs away, "This is a crazy time, I know. But I promise I got nothing to do with any of that. This is my thing. I gotta go." She turns and briskly leaves the park.`; successVar = "jamalIdentifiedHenry"; [continue] {embed passage: 'roll'} [JavaScript] if (success) { canArrestHenry = true; figuredOutCarInfo = 2; discoveredHenrysCar = true; } else { jamalIdentifiedSomeProf = true; } [continue]"Where were you last week, on Monday night?" you inquire directly. "Last Monday night?" the professor responds slowly, considering. "Well, I was probably here for a while. I often work late. You know, tutoring students, preparing experiments, and grading assignments. Anyways, I might have been here that night, and then I would go home." [if fourthVictimKnown] "And how about last night?" you ask.. "Last night? No, I wasn't here. I was at home." "Can anyone corroborate that?" you follow up. "No, I live alone." [continue] [JavaScript] rollType = "Intuition" successMsg = "He's withholding something. He wasn't just at work and at home. Something else is going on here."; successVar = "henryLyingWhere"; [continue] {embed passage: 'roll'} {embed passage named: 'header'} Your mind flashes to the shoe impressions you found earlier. The professor's shoes are hidden under his desk. There's no way to tell without being direct. "I'll need to see your shoes, please." You look him in the eyes. [JavaScript] rollType = "Intimidation" successMsg = `"I haven't been anywhere other than home and here recently," he says, showing you his shoe. "My shoes are clean." It's true. His shoes are clean. They are also size 11 with a tread pattern matching the one you found!`; failureMsg = `He looks concerned. "If you want to search me, you'll need a warrant or something."`; successVar = "measuredPerpShoe"; [continue] {embed passage: 'roll'} [if success] If you want to arrest Dr. Henry Black, go to the Sheriff's office to make the arrangement. [continue] [JavaScript] if (success) canArrestHenry = true; [continue] [[Continue->college]]"I know you were at the park last night. I know you went there to meet Jamal." [if fourthVictimKnown] "The question is," you continue, "Did you go there to kill her? Or was that an accident? What happened?" [else] "What were your real intentions that night?" [continue] "And why did you drive away so fast, as if you were escaping from a crime?" He blinks several times, absorbing everything you said. "It's not what you think," he begins. "Yes, I'll admit it. I was out last night, and in fact, I did go to the park." He considers slowly, turning over his choice of words. "I... I called her that night. She had come in for some tutoring before, and I knew she was nervous about Melody's death. I couldn't sleep either. I wanted to calm her down. I drove to the park. But then, before I got out of my car, I changed my mind. I decided I didn't want to meet her so late. I decided to talk to her in class the next day instead, so I left. I never got out of my car. I never saw her or anyone else at the park that night. I doubt she even showed up!" "And what about Melody?" you ask, "Did you call her that night too? Was she just here for some tutoring, as you call it?" "I..." he shakes his head. "It's nothing like that." [JavaScript] rollType = "Intuition" successMsg = "It's true that he called Jamal that night. It's also true that he went to the park to meet her. But everything else in his statement is such a blatant fabrication that, frankly, you're offended he thought you would even fall for it. The question still remains though... what really happened?"; successVar = "henryLyingWhere"; [continue] {embed passage: 'roll'} {embed passage named: 'header'} "I got this." You state confidently. The Sheriff backs away. You plant yourself firmly on the front porch and then perform a lunging kick at the front door. [JavaScript] rollType = "Physical" successMsg = "A solid hit with the bottom of your foot, and the sound of wood splintering echoes through the neighborhood. The door flimsily flops aside, revealing the interior."; failureMsg = "But perhaps you aren't planted as firmly as you thought. Maybe the doors at the Academy were made of a lighter material. Who knows. Your cry out and strike as hard as you can, but it barely thumps on the door like a hard knock. Off balance, you slip and fall, and lay in an awkward tangle on the porch. The Sheriff gazes down at you." [continue] {embed passage: 'roll'} [if success] The door flies open, revealing a very startled Dr. Henry Black at his desk. His eyes go wide as the Sheriff charges in, hand on his weapon. "Hold it right there, Henry!" he yells. "You're under arrest," the Sheriff rushes forward and cuffs him. "I'll be taking him down to the station," the Sheriff says to you. "Why don't you search here for any evidence, then come and join me?" [[Continue->searchHomeAndCar]] [else] You hear a scuffle of noises from inside the house, followed by the sound of the back door flying open. "Shit, he's running!" the Sheriff calls out. "Go! Go! Go!" [[(Physical) Pursue the Suspect->pursue]] [continue] [JavaScript] if (success) whatHappenedToHenry = "arrested"; [continue] {embed passage named: 'header'} "Hold up here," you caution the Sheriff. "Let me take a walk-around and see if there's anything visible through the windows, or any suspicious circumstances." "Great idea," he says. "I should have suggested that first. I can see why you're FBI material." You slowly walk the perimeter of the house. Outside, nothing seems disturbed. Several windows are covered with blinds on the inside, but a few have gaps that you intently peer through. [JavaScript] rollType = "Perception" successMsg = "In the living room, you see a man, sitting at a desk. It's Henry Black. He's not aware of your presence."; failureMsg = "Furniture. Knick-knacks. The ordinary items one might glimpse inside a home. But nothing seems unusual or out of the ordinary." [continue] {embed passage: 'roll'} [if success] You return quietly to the front porch. "Sheriff!" you whisper, "He's in there. He's at the desk." The Sheriff nod. "Go around back, by the back door, make sure he doesn't run. I'll take the front door." You nod. [[Take your Position->takePosition]] [else] You complete your circuit. "Anything" he asks. You shake your head. "All quiet, at least from the outside." [[(Physical) Kick the Door Down->kickDoor]] [[Knock Loudly and Announce Yourselves->sheriffEntry]] [continue] {embed passage named: 'header'} You run around behind the house. Henry is athletic and in his prime, and he has a head start on you. [JavaScript] rollType = "Physical" successMsg = "Even with his strength, he's scared; he looks back, he stumbles. You see your chance and lunge forward. Boom! You grab him across the chest and you both tumble to the ground. The Sheriff comes running up seconds later. Henry can see he's been beat."; failureMsg = "Damn it, you trained for this! His head start and local knowledge is too much. He jumps over a fence, weaves between two houses, and by the time you round the corner, he's gone. You pant, looking left and right. A few moments later, the Sheriff catches up to you." [continue] {embed passage: 'roll'} [if success] "You're under arrest," the Sheriff picks him up and cuffs him. "I'll be taking him down to the station," the Sheriff says to you. "Why don't you search here for any evidence, then come and join me?" [else] The Sheriff sighs. "I'm not as young as I used to be," he shakes his head. "I'll put out an APB. Maybe we can pick him up. In the meantime, why don't you search here for any evidence. Come see me at the station when you're done." [continue] [JavaScript] if (success) whatHappenedToHenry = "arrested"; else whatHappenedToHenry = "escaped"; [continue] [[Continue->searchHomeAndCar]]{embed passage named: 'header'} The Sheriff waits for a moment in the heavy air, then pounds on the front door. "Sheriff's Department! Open the door now!" You hear a scuffle of noises from inside the house, followed by the sound of the back door flying open. "Shit, he's running!" the Sheriff calls out. "Go! Go! Go!" [[(Physical) Pursue the Suspect->pursue]] {embed passage named: 'header'} The coroner opens a refrigerated storage unit and pulls out a shelf. On the shelf, a motionless body is covered by a sheet. "As for the second death," she uncovers the top of body, "Basra Brown, 21, a waitress at Wasacona Pints, the main restaurant here in town. She’s 5 foot, 10 inches, with short curly black hair and dark skin. She's a bit underweight, possibly childhood malnourishment. I found no tattoos and no piercings." [JavaScript] rollType = "Academics" successMsg = "The deceased is of Somali descent, and matches the style of appearance of many Somali refugees."; successVar = "basraInjectionSite"; [continue] {embed passage: 'roll'} Dr. Alahram continues, "Autopsy and tox screen revealed death by fentanyl overdose. Tox screen did not indicate any other substances. There is an injection site visible just below her right shoulder, and some light bruising on her left arm. No drug paraphernalia was found with the body." [JavaScript] rollType = "Academics" successMsg = "This is not where a drug user would typically inject themselves. Indeed, it would be difficult for most people to inject themselves on the outside of their shoulder as seen here."; [continue] {embed passage: 'roll'} The doctor continues. "There was also no evidence of sexual assault. I place the time of death last Wednesday night into Thursday morning, approximately midnight to 2am. She was found in a park not far from the restaurant. I understand the body was discovered by early morning jogger, who called 911 at 5:44 am. Officer Amanda Palads responded and found the deceased." The coroner frowns sadly, then covers the body again. [[Continue->morgue]]{embed passage named: 'header'} The coroner opens a refrigerated storage unit and pulls out a shelf. On the shelf, a motionless body is covered by a sheet. The coroner pulls back the sheet. "On to the third death," she continues, "A Mr. Leroy Jameson, 45, local drifter, with a long rap sheet. He was found beaten to death under a nearby bridge where he appeared to have been sleeping." You look down at the body. Leroy is a grizzled white male who looks twice his age, covered in bruises from heavy blunt impact trauma especially on the head. He was hit hard and fast. [JavaScript] rollType = "Academics" successMsg = "The impact wounds are likely caused by a long, round weapon; something perhaps like a police baton or baseball bat."; successVar = "weaponV3batonOrBat"; [continue] {embed passage: 'roll'} The body is ripe with a purple discoloration with small eruptive lesions all over the skin, and just beginning to bloat. He appears to have been dead outside for some time, maybe a full day or more, before he was found. "There were no defensive wounds," the coroner continues, "I did note some old prison tattoos. I place the time of death on Friday between 2am and 5am. He was found by officer Jack Goodwin on routine foot patrol Saturday afternoon." She looks sadly at the body. "No one deserves to die like this," she whispers. She covers him and returns his body to the cooler. [[Continue->morgue]] mapHomeCar: "" mapHomeCar (henryCarAtHome): "can-visit" mapHomeCar (henryCarAtHome && trail.indexOf("searchCar") > -1): "visited" mapHomeLivingRoom: "can-visit" mapHomeLivingRoom (trail.indexOf("searchLivingRoom") > -1): "visited" mapHomeBedroom: "can-visit" mapHomeBedroom (trail.indexOf("searchBedroom") > -1): "visited" mapHomeBathroom: "can-visit" mapHomeBathroom (trail.indexOf("searchBathroom") > -1): "visited" mapHomeGarage: "can-visit" mapHomeGarage (trail.indexOf("searchGarage") > -1): "visited" -- {embed passage named: 'header'} The low slung house stands ominously quiet. You hear a clock ticking, quietly, barely loud enough to hear; but in your head, it sounds like thunder. You breathe slowly; there is no other sound. You are alone. The house is small and sparse; a single bedroom with a one car attached garage. [if henryCarAtHome] In the driveway, in front of the garage, Henry's car is parked. [continue] {embed passage named: 'mapHome'} [if mapHomeCar === "can-visit"] [[Search the Car->searchCar]] [continue] [if mapHomeLivingRoom === "can-visit"] [[Search the Living Room->searchLivingRoom]] [continue] [if mapHomeBedroom === "can-visit"] [[Search the Bedroom->searchBedroom]] [continue] [if mapHomeBathroom === "can-visit"] [[Search the Bathroom->searchBathroom]] [continue] [if mapHomeGarage === "can-visit"] [[Search the Garage->searchGarage]] [continue] [[Go to the Sheriff's Office->conclude]] The wounds on the professor's arms. You can visualize young Melody desperately clawing at him, driving long scratches into his arms; or perhaps the poor Leroy striking back with his fists before being bludgeoned to death. "Your arms look pretty torn up," you remark. "Mind telling me what happened?" He chuckles with embarrassment. "Actually at a recent baseball game, I was dashing to catch a near home run, two on base, we were only up by one run; anyways, I slipped and slid across the grass. It was instinct, I braced myself with my arms. The grass washed off, but the scratches remain." [JavaScript] rollType = "Intuition" successMsg = `He's telling the truth. There's nothing nefarious behind those wounds.`; [continue] {embed passage: 'roll'} murderBatOnWho: "Leroy" murderBatOnWho (fourthVictimKnown === true): "Leroy or Jamal" -- {embed passage named: 'header'} The door to the dark garage swings open with a creak. You flip on the overhead light; the few bare bulbs provide limited illumination. You immediately see why the car is parked outside - the garage is full of junk. All the tidiness and neatness elsewhere is counterbalanced by this monstrous black hole of ... stuff. Your eyes scan through the various items; you walk slowly down the narrow spaces in the garage which could almost be imagined as aisles in some kind of bizarre store. Is there anything here that could be helpful? What should you even be looking for? [JavaScript] if (weaponV3batonOrBat || tiedVictimsThreeAndFour) { rollType = "Academics" successMsg = "You're looking for a murder weapon; something that could cause the kind of blunt force trauma you saw on {murderBatOnWho}. Something that could hide in plain sight. Something the professor could have with no explanation, that would raise no concerns. Something like..."; failureMsg = "But nothing stands out to you. The dim garage is a lifeless tomb."; successVar = "foundMurderBat"; } [continue] [if weaponV3batonOrBat || tiedVictimsThreeAndFour] {embed passage: 'roll'} [else] Junk. So much junk. Without knowing what to look for, the garage yields no clues. [continue] [if success] A baseball bat. You make a bee-line through the detritus to pick up a baseball bat, accessible, but stashed behind a pile of other items. You give it a hard look. There! A discoloration. Specks of dark matter. Blood. There was blood on this bat, and someone cleaned it. Cleaned it, but not perfectly. A murder weapon. [continue] [[Continue->searchHomeAndCar]] slogan: 0 -- [JavaScript] if (slogans > []) slogan = slogans.pop(); [continue] [if slogan === 1] "Over the limit, under arrest" proclaims one poster, with empty bottles and an image of a person being arrested next to their car. [continue] [if slogan === 2] "Keeping our Community Safe - Character That Counts" proclaims a campaign poster, a smiling image of the current Sheriff at the center. [continue] [if slogan === 3] You notice a hand written sign advertising a community BBQ in the park next Saturday. The sign suggests there will be fun events for kids and that each family should bring a dish to share. [continue] [if slogan === 4] "Community Safety is all of our Responsibilities! If you SEE something, SAY something!" The poster centers an ominous looking figure pointing straight out, as if at the viewer. [continue] [if slogan === 5] You see tacked up print out, "Baseball players and spectators wanted! Join the Wasacona College Intramural Baseball Team! Contact Dr. Black for details." [continue] [if slogan === 6] "LOST:" a hastily hand written sign proclaims, "Cat, black-and-white, 7 pounds. Last seen one block east of Wasacona Pints. Reward!!" A frown crosses your face. That cat is probably coyote food by now, but you never know... Maybe there's hope. [continue] [if slogan === 7] "SALE," a professionally printed advertisement beacons, "Pumpkins, Squashes, and All Fall Decor; up to 50% off! Visit Wasacona Grocery for all your holidays needs!" [continue] [if slogan === 8] Tacked to a notice board is a small print document proclaiming "Arrest Records". The date range is the last two weeks. The list is short, and all the crimes are minor, such as "Drunk and Disorderly", or "Theft less than $1000". [continue] [if slogan === 9] "Puppies for sale!" a home printed sign advertises. A poorly reproduced black and white photo is attached, which appears to show a dog with about ten puppies. Due to the terrible quality of the photo, you can't even tell what breed the dogs are. [continue] [if slogan === 10] "Try Goat Yoga" one sign proclaims. "Come to McKenzie Farm only 15 miles west of Wasacona! Call today to schedule!" Goat... Yoga... ? You shake your head. Things really are different outside the city. [continue] [if slogan === 11] "LOST DOG!" A sign proclaims, showing a photo of a very cute Golden Retriever. "Last seen at college athletic field. Please call Anabell Moffet if found!" A phone number follows. Might be worth keeping my eye open if I'm up by the college, you muse. [continue]discoveredHenrysCar (figuredOutCarInfo > 0): true -- {embed passage named: 'header'} You walk around the red 2015 Honda Accord. At the back of the car you pause, then open the trunk. But nothing of interest awaits you. Some mechanical tools, wheel locks, scraps of debris. Not even a jack; no murder weapon, no evidence, no body. Inside the car, you scan the interior. It's clean, tidy, with few scraps of paper and one empty cup in a side cupholder. The glove box contains the registration and insurance, both up to date, some documentation and service records, and little else. The center console contains a few discount cards; a carwash membership, and a few punch cards to nearby coffee shops. [JavaScript] rollType = "Intuition" successMsg = "The center console is removable. You lift it out, and reveal a larger space underneath..."; [continue] {embed passage: 'roll'} [if success && fourthVictimKnown] Sitting at the bottom of the dark space under the center console is a cell phone. With trembling hands, you pick it up. It's off. After a moment of consideration, you turn the phone on. It boots up to a lock screen. No emergency information. No name. No way to access it. For a moment you feel defeated, but then .. an idea! You call the Sheriff on your own phone. "Sheriff," you stumble quickly over your words, "I found a cell phone. There's a chance it could belong to one of the victims. It was turned off, but I turned it on. There's no information I can access, nothing on the lock screen." The line is silent for a moment, then the Sheriff speaks. "Well, I have the 911 log. Let me call the number that Jamal called for help from." Seconds later, the mystery phone in your hand rings. The caller ID shows the Sheriff's number. "Sheriff," you exclaim, "That's it!" "Good find," he replies, "I'll see you shortly." [continue] [JavaScript] if (success && fourthVictimKnown) foundPhoneInHenrysCar = true; [continue] [if success && !fourthVictimKnown] Unfortunately, the space is empty. Good idea though! [continue] {embed passage named: 'mapWasaconaDisable'} [JavaScript] mapHenryHouse = "can-visit"; [continue] [if trail.indexOf("searchHomeAndCar") === -1] {embed passage named: 'mapWasacona'} [[Go to Henry's house->approachHouse]] [else] [[Continue->searchHomeAndCar]] [continue]{embed passage named: 'header'} You cast your eyes around the main living area. Worn carpet flooring and faded, off-white walls betray an older home; acceptable maintenance, yes; updated and refreshed: no. A few chairs are arranged, one facing a TV and one facing the front door. The TV itself sits on a low stand. There are a few small end tables and one larger dining table around. A desk is filled with chemistry documents and books. Apparently Dr. Black was all work. A small, sooty fireplace is tucked in the corner near the front door. [JavaScript] rollType = "Perception" successMsg = "You find a fragments of burned paper in the fireplace. Close examination reveals what appears to be a woman's handwriting. However, the pieces are too burnt and disintegrated to determine what was written."; [continue] {embed passage: 'roll'} A small kitchen is adjacent to the living room. You find mostly boxed and canned foods in the pantry. Henry is apparently not much of a chef. You also find several unopened bottles of red wine and a few wine glasses. [if whatHappenedToHenry === "suicide"] By the front door, a pair of shoes is neatly arranged. [continue] [if whatHappenedToHenry === "suicide" && (figuredOutPerpShoe1 || figuredOutPerpShoe4)] You pick up the shoes and look closer. They are size 11 with a tread pattern matching the one you found! [else] Nothing here seems suspicious. [continue] [JavaScript] if (whatHappenedToHenry === "suicide" && (figuredOutPerpShoe1 || figuredOutPerpShoe4)) measuredPerpShoe = true; [continue] [[Continue->searchHomeAndCar]] foundMelodyPhotosInHouse: trail.indexOf("morgue1") > -1 -- {embed passage named: 'header'} The bedroom is small and tidy. The bed is made, roughly; not like you would find at a nice hotel, but acceptable for a bachelor pad. Clothes hang in the closet and a dresser with various garments sits nearby. A window overlooks the backyard. On the nightstand next to the bed, you see several photos in frames. [if foundMelodyPhotosInHouse] Looking closer, you are startled to realize: these are Melody. These are photos of Melody. Some of them have Henry and Ms. Beautrue together. These aren't school photos. These are personal photos. These are photos of a romantic couple. If Henry was having a secret affair with Melody, could he also be the killer? [else] Looking closer, you see Henry, with a young woman you don't recognize. The photos suggest a romantic involvement. [continue] [[Continue->searchHomeAndCar]] {embed passage named: 'header'} The small bathroom is brightly lit and clean. A tile floor, toilet, sink, standing shower and a medicine cabinet. Inside the medicine cabinet you find routine and daily normal items: tooth care, ibuprofen, aspirin, a few mild prescription medicines, and some other hygiene products. At the top of the medicine cabinet, there's a small lockbox. It doesn't immediate give to your attempt to open it. [JavaScript] rollType = "Perception" successMsg = "In the trash can, underneath some used tissues and empty toilet paper rolls, you notice an open bag of syringes. Based on the count on the package, it appears that several are missing."; successVar = "foundHenryBathSyringe"; [continue] {embed passage: 'roll'} [if success && foundVictimTwoSyringe] The brand and style of syringe is an exact match to the syringe you found at the crime scene where Basra died! [continue] [JavaScript] if (success && foundVictimTwoSyringe) matchedSyringeToHenry = true; [continue] {reveal link: "(Physical) Force the lockbox open", passage: "searchBathroomLockbox"} [[Continue->searchHomeAndCar]] The lockbox looks too strong to pry open with your hands, but perhaps... You pop into the garage, and amid the piles of junk, sure enough, a flat-head screwdriver. Perfect. You brace the lockbox and jimmy the screwdriver under the lid, and pry. [JavaScript] rollType = "Physical" successMsg = `Pop! The lockbox springs open. Inside you find a small container of liquid, and a folded up printout.`; failureMsg = `But the lockbox doesn't budge. Its secrets will remain hidden.`; successVar = "foundHenrysFent"; [continue] {embed passage: 'roll'} [if success] You unfold the printout. "Fentanyl LD50" it reads, followed by a small table with body weights and dosing amounts. Hand written at the bottom, it says, "Double dose to be sure??" A chill passes down your spine as your eyes wander back to the small container of liquid. This is not for recreation or pain control. This is for killing. [continue] [if success && tiedVictimsTwoAndThree] Looking again at the container of liquid, you realize - this is the exact same container style you found under the bridge, where Leroy was killed. [continue]config.style.page.font: "Iowan Old Style/Constantia/Georgia/serif 18" config.style.page.color: "gray-1 on gray-8" config.style.page.link.font: "underline" config.style.page.link.color: "yellow-5" config.style.page.link.lineColor: "red-8" config.style.page.link.active.color: "red-8 on red-0" config.style.page.header.font: "20" config.style.page.header.link.font: "small caps" config.style.page.footer.font: "16" config.style.page.footer.link.font: "small caps" config.style.backdrop: "gray-9" config.body.transition.name: "none" config.style.page.verticalAlign: "top" baseImgDir: "img/" rolls: {} -- [JavaScript] if (window.location.href.indexOf("Steve/AppData/Local/Temp") > -1) baseImgDir = "c:/users/steve/onedrive/documents/twine/stories/img/" [continue] <p class="title">The Killings in Wasacona</p> * * * "Earlier was great. You look great tonight. Ready for round two?" he cooed, running his hand up her thigh. She sipped her wine, set the glass down, and forced a smile. He sensed her unease. "What's going on?" his tone took a subtle but dangerous turn. "Not in the mood?" "I heard..." her finger twirled around the stem of the wine glass. "I heard a rumor." "A rumor?" he scoffed. "About you and..." she paused, "well... you know..." "Do I know? Forget about that. You're it for me." He slid up against her, caressing her and loosening her shirt. She put her hands up. "I just need to think," she stuttered, "I just need a little space. Just for tonight." "Why? What are you going to do?" His voice turned to gravel, his eyes narrowed. "Are you going to *tattle*? Are you going to *expose me*? What are you going to do?" "I'm not!" she protested, push against his arms feebly, "I just..." His hands had found her throat. "Just. What?" A new demonic visage. A face of fire. Teeth. Pupils. Hands. She pushed harder against his arms, struggled, but she was pinned. Her eyes bulged as his hands tightened. "Just." He huffed. "What?" [[Continue->OneWeekLater]]* * * <p class='one-week-later'>One Week Later</p> * * * [[Continue->Intro]]basraBroSuspectsAmanda: true -- He gets visibly angry. "Frankly, I think the cops are covering something up. There's this one officer, this lady, and she's always harassing Basra and me!" the brother huffs. "She has it out for us. I wonder if she might have even had something to do with Basra's death!"{embed passage named: 'header'} You roar up next to Henry, your specialized pursuit training kicking in. You nudge into the rear corner of his car, then turn sharply and punch the accelerator. [JavaScript] rollType = "Physical" successMsg = `Henry's car swerves as he struggles to retain control. The car spins around, and the tail end jumps the curb and smashes into a large tree, immobilzed.`; failureMsg = `Your car slips off Henry's bumper, and you swerve to regain control. Henry is also swerving, oscillating in a series of overcorrections. You pull to an abrupt stop, and watch Henry completely lose control. The car jumps a curb, hits a garage, and bursts into flames!` [continue] {embed passage: 'roll'} You jump out of your car and run to Henry. You see the Sheriff drive up quickly from the other direction, and jump out to join you. [JavaScript] if (success) whatHappenedToHenry = "arrested"; else whatHappenedToHenry = "burned"; [continue] [if success] Henry is dazed. The Sheriff pulls the door open and grabs Henry out. "You're under arrest!" The Sheriff shouts. After getting Henry in cuffs and in the back of the police car, the Sheriff motions to you. "I got a search warrant for his house and, obviously, we've got the car here. Why don't you search the car and house, then join me at the station." [[Search the Car->searchCar]] [else] You see Henry struggling with the front door as flames erupt out of the engine bay. "Shit! Shit!" The Sheriff yells, running up to the car. "Sheriff, be careful!" You yell. The Sheriff grabs at the door handle but recoils in pain, clutching his hand. "Hot! Hot!" he yells. The flames find a fuel line, and quickly erupt across the bottom of the car. The Sheriff stumbles backwards. You hear what sounds like a brief scream, but is probably just the rushing of air into the rapidly accelerating fire. In the distance, the sound of fire department sirens. Henry is dead, horrifically, still trapped in the burnt wreckage of his car. [[Continue->henryBurned]] [continue] [if !success && morale > 0] *This catastrophe shatters your built-up morale.* [continue] [JavaScript] if (!success && morale > 0) morale = 0; [continue] whatHappenedToHenry: "escaped" -- {embed passage named: 'header'} Henry's car speeds away, disappearing beyond the edge of town into the great beyond. You call the Sheriff. "I attempted to stop the vehicle, but he accelerated to unsafe speeds and I terminated the pursuit. So," you sigh, "he escaped." "It's ok." The Sheriff replies. "You did the right thing. Pursuits can be very dangerous. I'll put out an APB for him and the car. In the meantime, I got a search warrant for his house. Why don't you head over there and check it out? Then come see me when you're done." {embed passage named: 'mapWasaconaDisable'} [JavaScript] mapHenryHouse = "can-visit"; [continue] {embed passage named: 'mapWasacona'} [[Head to Henry's House->approachHouse]] config.header.center: "(Conclusion)" shoe: figuredOutPerpShoe1 && measuredPerpShoe jackShoe: figuredOutPerpShoe1 && checkedJackShoe V1conclusion: "Unknown" -- [JavaScript] success = false; window.concfunc = function(t) { engine.state.set("V1conclusion", t.innerText); go("concludeV2"); } conclusion = {}; [continue] In the case of the first death, Melody Beautrue, what are your conclusions? [JavaScript] conclusion.title = "Killed by Officer Goodwin"; conclusion.desc = "A lover's quarrel, perhaps?"; conclusion.conds = [ {kind: "var", item: "jackShoe", text: "Jack's shoes are the same size as the impressions you found near the body."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Predatory Party Host"; conclusion.desc = "Why else is Chad, a decade older than the college students, hosting parties for them?"; conclusion.conds = [ {kind: "visit", item: "melodyRoommate", text: "Melody's roommate describes an incident between Melody and Chad at a party."}, {kind: "visit", item: "partyHouse", text: "Why else is 'Chad', a decade older than the college students, hosting parties for them?"}, {kind: "visit", item: "accusePartyHost", text: "Chad lied about Melody being at the party. You accused Chad."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Drifter"; conclusion.desc = "Leroy was a known trouble maker passing thru town."; conclusion.conds = [ {kind: "visit", item: "campusSecurity", text: "The campus security officer reported seeing Leroy in the vicinty of the campus, where Melody's body was found."}, {kind: "visit", item: "Get an Overview Briefing", text: "Maybe Melody was in the wrong place at the wrong time?"}, {kind: "visit", item: "bridge", text: "You found weapons at Leroy's campsite under the bridge."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Humanities Adjunct Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "melodyRoommate", text: "Melody's roommate reported she stayed late on campus several days a week."}, {kind: "visit", item: "collegeHum", text: "Adam is clearly on the prowl for ladies; although he claims to not know Melody." }, {kind: "var", item: "humProfSketchyWhere", text: "His explanation of his whereabouts that night are sketchy and impossible to verify."}, {kind: "var", item: "partySuspectAdam", text: "The party host saw Adam at a party where Melody was also attending."}, {kind: "var", item: "jamalIdentifiedSomeProf", text: "A professor fled from a late-night meeting with another student in the park. Could it have been Adam? He may have been involved inappropriately with Melody as well."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Biology Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "melodyRoommate", text: "Melody's roommate reported she stayed late on campus several days a week."}, {kind: "visit", item: "collegeBio", text: "He tried to cover up the wounds on his arms; wounds that Melody may have hopelessly inflicted while he strangled her to death."}, {kind: "var", item: "jamalIdentifiedSomeProf", text: "A professor fled from a late-night meeting with another student in the park. Could it have been Abraham? He may have been involved inappropriately with Melody as well."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Chemistry Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "melodyRoommate", text: "Melody's roommate reported she stayed late on campus several days a week."}, {kind: "var", item: "henryLyingWhere", text: "Henry lied about where he was that night."}, {kind: "visit", item: "melodyParents", text: "Melody's parents said she majored in chemistry and spent a lot of time on it."}, {kind: "visit", item: "collegeChem", text: "What if Henry was doing more than tutoring with Melody that night, then something went wrong."}, {kind: "var", item: "shoe", text: "The professor's shoes match the impressions you found near the body."}, {kind: "var", item: "foundMelodyPhotosInHouse", text: "The professor had personal and intimate photographs of Melody in his house."}, {kind: "var", item: "jamalIdentifiedHenry", text: "The professor fled from a late-night meeting with another student in the park. He may have been involved inappropriately with Melody as well."}, {kind: "var", item: "jamalIdentifiedSomeProf", text: "A professor fled from a late-night meeting with another student in the park. Could it have been Henry? He may have been involved inappropriately with Melody as well."}, {kind: "visit", item: "colBioCallAnswer", text: "Dr. Norman recounted a rumor about a love triangle including Henry and Melody."} ]; [continue] {embed passage named: 'conclusion'} * * * [if !success] You did not collect enough evidence to support a conclusion. [[Continue->concludeV2]] [else] [[None of These Make Sense->concludeV2]] [continue] config.header.center: "(Conclusion)" V2conclusion: "Unknown" -- [JavaScript] success = false; window.concfunc = function(t) { engine.state.set("V2conclusion", t.innerText); go("concludeV3"); } conclusion = {}; [continue] In the case of the second death, Basra Brown, what are your conclusions? [JavaScript] conclusion.title = "Accidental Overdose"; conclusion.desc = "It's possible that Basra was secretly addicted to fentanyl. She unfortunately misjudged her final dose."; conclusion.conds = [ {kind: "visit", item: "morgue2", text: "The coroner states that Basra died due to an overdose of fentanyl."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Suicide"; conclusion.desc = "Basra has not had an easy time in this town. Distanced from her coworkers, with no apparent route out of poverty, perhaps Basra felt she was unable to go on."; conclusion.conds = [ {kind: "visit", item: "morgue2", text: "The coroner states that Basra died due to an overdose of fentanyl."}, {kind: "var", item: "foundVictimTwoSyringe", text: "You found a syringe, possibly used for fentanyl, near Basra's body."}, {kind: "visit", item: "Ask About Deaths", text: "Coworkers say Basra did not engage with them socially; besides her brother, she may have had no support structure."}, {kind: "var", item: "basraJournalDepression", text: "You found a journal in which Basra wrote about isolation, depression, and a sense of hopelessness."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Bad Drugs from Drifter"; conclusion.desc = "Leroy was dealing hard drugs in town. Maybe he sold Basra a bad batch?"; conclusion.conds = [ {kind: "visit", item: "morgue2", text: "The coroner states that Basra died due to an overdose of fentanyl."}, {kind: "var", item: "foundVictimTwoSyringe", text: "You found a syringe, possibly used for fentanyl, near Basra's body."}, {kind: "var", item: "tiedVictimsTwoAndThree", text: "Basra overdosed on fentanyl; which you know Leroy was selling."}, {kind: "var", item: "tiedVictimsTwoAndThree", text: "A coworker saw Basra talking to Leroy and exchanging something outside the restaurant. It could have involved drugs."}, {kind: "visit", item: "basraBrotherReveal", text: "Her brother said that a creepy man watched Basra at the restraurant. Could it have been Leroy, maybe about the purchase she had made?"} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Officer Palads"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "palads", text: "Officer Amanda is a racist. Will she stop at nothing to drive refugees out of what she considers her town?"}, {kind: "var", item: "accusedAmanda", text: "You accused Amanda of being involved."}, {kind: "var", item: "basraBroSuspectsAmanda", text: "The victim's brother named Amanda as a suspect."}, {kind: "visit", item: "sheriffAmanda", text: "Amanda responded to the scene, and the Sheriff admitted Amanda has a history of planting and falsifying evidence."}, {kind: "var", item: "basraInjectionSite", text: "Basra's injection site is consistent with an attack rather than self administration."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Coworker"; conclusion.desc = "Coworkers admit Basra was an outsider at work and did not participate in their recreational activities. Perhaps Basra was threatening to expose them?"; conclusion.conds = [ {kind: "visit", item: "Ask About Deaths", text: "Coworkers admit to using drugs, and that Basra did not participate, even though she died from those drugs."}, {kind: "visit", item: "Ask About Deaths", text: "Coworkers knew that she walked home alone through the park."}, {kind: "visit", item: "basraBrotherReveal", text: "Her brother said that a creepy man watched Basra at the restraurant. Could it have been a disgruntled coworker?"}, {kind: "var", item: "basraInjectionSite", text: "Basra's injection site is consistent with an attack rather than self administration."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Humanities Adjunct Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "basraBrotherReveal", text: "Her brother said that a creepy man watched Basra at the restraurant. Maybe the fun loving young adjunct professor has an evil side?"}, {kind: "var", item: "restToldCreepyMen", text: "A coworker said a creepy white man watched Basra at work. It could be Adam."}, {kind: "var", item: "basraInjectionSite", text: "Basra's injection site is consistent with an attack rather than self administration."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Biology Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "basraBrotherReveal", text: "Her brother said that a creepy man watched Basra at the restraurant. Abraham knew her from class. Could there be another connection?"}, {kind: "var", item: "basraInjectionSite", text: "Basra's injection site is consistent with an attack rather than self administration."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Chemistry Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "matchedSyringeToHenry", text: "The syringe found by the victim's body matches those found in Henry's bathroom."}, {kind: "var", item: "foundHenrysFent", text: "You found fentanyl in Henry's house, along with information on fatal dosings."}, {kind: "visit", item: "basraBrotherReveal", text: "Her brother said that a creepy man watched Basra at the restraurant. Henry knew her from class. Could there be another connection?"}, {kind: "var", item: "jamalIdentifiedHenry", text: "The professor fled from a late-night meeting with a student in the park. Could the park be his hunting grounds?"}, {kind: "var", item: "restToldCreepyMen", text: "A coworker said a creepy white man watched Basra at work. It could be Henry."}, {kind: "var", item: "basraInjectionSite", text: "Basra's injection site is consistent with an attack rather than self administration."} ]; [continue] {embed passage named: 'conclusion'} * * * [if !success] You did not collect enough evidence to support a conclusion. [[Continue->concludeV3]] [else] [[None of These Make Sense->concludeV3]] [continue] config.header.center: "(Conclusion)" V3conclusion: "Unknown" V4conclusion: "Unknown" V4conclusion (disruptedVictimFourEvent === true): "Saved" HenryConclusion: "" nextPage: "concludeV4" nextPage (disruptedVictimFourEvent || !fourthVictimKnown): "concludeFinal" nextPage (nextPage === "concludeFinal" && whatHappenedToHenry === "suicide"): "concludeHenry" henryBall: trail.indexOf("collegeChem") > -1 && weaponV3batonOrBat normanBall: trail.indexOf("collegeBio") > -1 && weaponV3batonOrBat V3fent: tiedVictimsTwoAndThree && foundHenrysFent -- [JavaScript] success = false; window.concfunc = function(t) { engine.state.set("V3conclusion", t.innerText); go(nextPage); } conclusion = {}; [continue] In the case of the third death, Leroy Jameson, what are your conclusions? [JavaScript] conclusion.title = "Killed by Officer Goodwin"; conclusion.desc = "Maybe Jack just thought he would 'clean up' the town."; conclusion.conds = [ {kind: "visit", item: "goodwin", text: "Officer Jack Goodwin claims to have found the body over a day after the death occurred."}, {kind: "var", item: "weaponV3batonOrBat", text: "The fatal wounds could be consistent with a police baton."}, {kind: "visit", item: "partyHostWitnessYes", text: "Chad described a white male carrying a baseball bat leaving the scene around the time of the murder."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Victim's Brother"; conclusion.desc = "When Abdullahi found out that Basra died from a fentanyl overdose, he may have taken justice right to the source."; conclusion.conds = [ {kind: "visit", item: "basraBrother", text: "Basra's brother was shattered at the loss of the last member of his family and couldn't imagine how Basra ended up on drugs."}, {kind: "var", item: "tiedVictimsTwoAndThree", text: "Basra's brother could have found out that Leroy was the local source for fentanyl, and that Basra was seen with Leroy shortly before her death."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Humanities Adjunct Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "partyHostWitnessYes", text: "Chad described a white male carrying a baseball bat leaving the scene around the time of the murder."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Biology Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "normanBall", text: "The fatal wounds could be consistent with a baseball bat, such as the one you saw in Abraham's office."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Chemistry Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "henryBall", text: "The fatal wounds could be consistent with a baseball bat, and Henry was interested in baseball."}, {kind: "var", item: "foundMurderBat", text: "A bloodied bat in Henry's house is consistent with the injury pattern on Leroy's head."}, {kind: "var", item: "V3fent", text: "You found fentanyl in Henry's house, matching the containers at Leroy's camp, along with information on fatal dosings."}, {kind: "visit", item: "henryScene", text: "Henry died from fentanyl, perhaps that he purchased from Leroy."}, {kind: "visit", item: "partyHostWitnessYes", text: "Chad described a white male carrying a baseball bat leaving the scene around the time of the murder."} ]; [continue] {embed passage named: 'conclusion'} * * * [if !success] You did not collect enough evidence to support a conclusion. {link to: nextPage, label: 'Continue'} [else] {link to: nextPage, label: 'None of These Make Sense'} [continue] config.header.center: "(Conclusion)" V4conclusion: "Unknown" nextPage: "concludeFinal" nextPage (whatHappenedToHenry === "suicide"): "concludeHenry" V4linkedGoodwin: false V4linkedGoodwin (tiedVictimsThreeAndFour && V3conclusion === "Killed by Officer Goodwin"): true V4linkedBB: false V4linkedBB (tiedVictimsThreeAndFour && V3conclusion === "Killed by Victim's Brother"): true V4linkedNorman: false V4linkedNorman (tiedVictimsThreeAndFour && V3conclusion === "Killed by Biology Professor"): true V4linkedHenry: false V4linkedHenry (tiedVictimsThreeAndFour && V3conclusion === "Killed by Chemistry Professor"): true jamalAptNoteGeneric: trail.indexOf("jamalAptNote") > -1 && !determinedV4noteBioOrChemProf shoe: figuredOutPerpShoe4 && measuredPerpShoe jackShoe: figuredOutPerpShoe4 && checkedJackShoe -- [JavaScript] success = false; window.concfunc = function(t) { engine.state.set("V4conclusion", t.innerText); go(nextPage); } conclusion = {}; [continue] In the case of the fourth death, Jamal Veralin, what are your conclusions? [JavaScript] conclusion.title = "Killed by Officer Goodwin"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "V4linkedGoodwin", text: "Jamal's wound pattern matched Leroy's; and you concluded that Officer Jack Goodwin killed Leroy."}, {kind: "var", item: "jackShoe", text: "Jack's shoes are the same size as the impressions you found near the body."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Abdullahi"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "V4linkedBB", text: "Jamal's wound pattern matched Leroy's; and you concluded that Basra's brother killed Leroy."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Humanities Adjunct Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "visit", item: "collegeHum", text: "Adam Devone admits to knowing Jamal, and he's clearly on the prowl for ladies." }, {kind: "var", item: "humProfSketchyWhere", text: "His explanation of his whereabouts that night are sketchy and impossible to verify."}, {kind: "var", item: "jamalAptNoteGeneric", text: "You found a hand written note in Jamal's apartment apparently written by a professor."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Biology Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "V4linkedNorman", text: "Jamal's wound pattern matched Leroy's; and you concluded that Dr. Abraham Norman killed Leroy."}, {kind: "var", item: "determinedV4noteBioOrChemProf", text: "You found a hand written note in Jamal's apartment that may have been written by Abraham."}, {kind: "var", item: "jamalAptNoteGeneric", text: "You found a hand written note in Jamal's apartment apparently written by a professor."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Chemistry Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "V4linkedHenry", text: "Jamal's wound pattern matched Leroy's; and you concluded that Dr. Henry Black killed Leroy."}, {kind: "var", item: "henryLyingWhere", text: "Henry lied about where he was that night."}, {kind: "var", item: "foundMurderBat", text: "A bloodied bat in Henry's house is consistent with the injury pattern on Jamal's head."}, {kind: "var", item: "shoe", text: "The professor's shoes match the impressions you found near the body."}, {kind: "var", item: "discoveredHenrysCar", text: "The professor's car was seen speeding away from the crime scene that night."}, {kind: "var", item: "discoveredHenrysCall", text: "It was Henry who called Jamal to come to the park that night."}, {kind: "var", item: "foundPhoneInHenrysCar", text: "You found Jamal's cell phone in Henry's car."}, {kind: "var", item: "determinedV4noteBioOrChemProf", text: "You found a hand written note in Jamal's apartment that may have been written by Henry."}, {kind: "var", item: "jamalAptNoteGeneric", text: "You found a hand written note in Jamal's apartment apparently written by a professor."}, {kind: "var", item: "foundV4Email", text: "You found a suspicous email from Henry in the deleted folder on Jamal's computer."}, {kind: "visit", item: "colBioCallAnswer", text: "Dr. Norman recounted a rumor about a love triangle including Henry, Melody, and Jamal."} ]; [continue] {embed passage named: 'conclusion'} * * * [if !success] You did not collect enough evidence to support a conclusion. {link to: nextPage, label: 'Continue'} [else] {link to: nextPage, label: 'None of These Make Sense'} [continue] config.header.center: "(Conclusion)" crimesPinnedOnHenry: 0 crimesPinnedOnHenry (V1conclusion === "Killed by Chemistry Professor"): crimesPinnedOnHenry + 1 crimesPinnedOnHenry (V2conclusion === "Killed by Chemistry Professor"): crimesPinnedOnHenry + 1 crimesPinnedOnHenry (V3conclusion === "Killed by Chemistry Professor"): crimesPinnedOnHenry + 1 crimesPinnedOnHenry (V4conclusion === "Killed by Chemistry Professor"): crimesPinnedOnHenry + 1 crimesPinnedOnHenry (HenryConclusion === "Suicide"): crimesPinnedOnHenry + 1 crimesPinnedOnHenry (HenryConclusion === "Accidental Overdose"): crimesPinnedOnHenry + 1 crimesUnknown: 0 crimesUnknown (V1conclusion === "Unknown"): crimesUnknown + 1 crimesUnknown (V2conclusion === "Unknown"): crimesUnknown + 1 crimesUnknown (V2conclusion === "Accidental Overdose"): crimesUnknown + 1 crimesUnknown (V2conclusion === "Suicide"): crimesUnknown + 1 crimesUnknown (V3conclusion === "Unknown"): crimesUnknown + 1 crimesUnknown (V4conclusion === "Unknown"): crimesUnknown + 1 crimesUnknown (HenryConclusion === "Unknown"): crimesUnknown + 1 totalCrimes: 4 totalCrimes (whatHappenedToHenry === "suicide"): totalCrimes + 1 totalCrimes (disruptedVictimFourEvent): totalCrimes - 1 allCrimesPinnedOnHenry: totalCrimes === crimesPinnedOnHenry crimesPinnedOnOthers: totalCrimes - crimesPinnedOnHenry - crimesUnknown whatHappenedToHenry (whatHappenedToHenry === ""): "at large" whatHappenedToHenry (whatHappenedToHenry === "arrested" && crimesPinnedOnHenry === 0): "arrested and released" whatHappenedToHenry (whatHappenedToHenry === "arrested" && crimesPinnedOnHenry > 0): "arrested and charged" officerInvolved: false officerInvolved (V2conclusion === "Killed by Officer Palads"): true officerInvolved (V3conclusion === "Killed by Officer Goodwin"): true officerInvolved (V4conclusion === "Killed by Officer Goodwin"): true officerInvolved (HenryConclusion === "Killed by Officer Palads"): true outcome: "Unfinished Business" outcome (crimesUnknown === 4): "Abysmal" outcome (crimesPinnedOnHenry === 0 && !disruptedVictimFourEvent): "All Talk, No Results" outcome (crimesUnknown === 0 && crimesPinnedOnHenry > 0 && whatHappenedToHenry !== "escaped"): "Long Arm of the Law" outcome (!reprimanded && allCrimesPinnedOnHenry && whatHappenedToHenry !== "escaped"): "Case Closed" outcome (!reprimanded && allCrimesPinnedOnHenry && whatHappenedToHenry === "arrested and charged" && disruptedVictimFourEvent): "Super Hero" whatHappenedToJamal (disruptedVictimFourEvent && jamalIdentifiedHenry): "Saved, and Got a Lead" whatHappenedToJamal (disruptedVictimFourEvent && !jamalIdentifiedHenry): "Saved, but No Lead" whatHappenedToJamal (!disruptedVictimFourEvent && !missedVictimFourEvent): "Investigated Promptly" whatHappenedToJamal (!disruptedVictimFourEvent && missedVictimFourEvent && fourthVictimKnown): "Informed" whatHappenedToJamal (!disruptedVictimFourEvent && missedVictimFourEvent && !fourthVictimKnown): "Oblivious" didAbrahamHelp (bioProfOffersHelp > 0): "Accepted" didAbrahamHelp (bioProfOffersHelp === -1): "Declined" didAbrahamHelp (bioProfOffersHelp === 0): "Didn't Offer" didAbrahamHelp (trail.indexOf("colBioCallAnswer") > -1): "Yes" eyeWitness: "No" eyeWitness (trail.indexOf("partyHostWitnessYes") > -1): "Yes" eyeWitness (trail.indexOf("partyHostWitnessNo") > -1): "Declined" protest: "No" protest (trail.indexOf("partyProtest") > -1): "Yes" rescueDog: "No" rescueDog (trail.indexOf("Approach the Dog") > -1): "Yes" allHenryDead: false allHenryDead ((whatHappenedToHenry === "burned" || whatHappenedToHenry === "suicide") && crimesPinnedOnHenry > 0): true outcomesLink: "outcomes.html?me=" -- [JavaScript] if (!uploaded) { uploaded = true; const vars = engine.state.saveToObject(); fetch("https://www.kolls.net/wasacona/upload.php", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(vars), }).catch(err => console.log(err)); } [continue] [JavaScript] if (outcome === "Super Hero") outcomesLink += "00"; if (outcome === "Case Closed") outcomesLink += "01"; if (outcome === "Long Arm of the Law") outcomesLink += "02"; if (outcome === "Unfinished Business") outcomesLink += "03"; if (outcome === "All Talk, No Results") outcomesLink += "04"; if (outcome === "Abysmal") outcomesLink += "05"; if (whatHappenedToHenry === "arrested and charged") outcomesLink += ",10"; if (whatHappenedToHenry === "arrested and released") outcomesLink += ",11"; if (whatHappenedToHenry === "escaped") outcomesLink += ",12"; if (whatHappenedToHenry === "at large") outcomesLink += ",13"; if (whatHappenedToHenry === "suicide") outcomesLink += ",14"; if (whatHappenedToHenry === "burned") outcomesLink += ",15"; if (whatHappenedToJamal === "Saved, and Got a Lead") outcomesLink += ",20"; if (whatHappenedToJamal === "Saved, but No Lead") outcomesLink += ",21"; if (whatHappenedToJamal === "Investigated Promptly") outcomesLink += ",22"; if (whatHappenedToJamal === "Informed") outcomesLink += ",23"; if (whatHappenedToJamal === "Oblivious") outcomesLink += ",24"; if (sel_archetype === "Average") outcomesLink += ",30"; if (sel_archetype === "Bookworm") outcomesLink += ",31"; if (sel_archetype === "Athlete") outcomesLink += ",32"; if (sel_archetype === "Negotiator") outcomesLink += ",33"; if (sel_archetype === "Analyst") outcomesLink += ",34"; if (sel_archetype === "custom") outcomesLink += ",35"; if (collegeCloseStatus === 1) outcomesLink += ",40"; if (collegeCloseStatus === -1) outcomesLink += ",41"; if (collegeCloseStatus === 0) outcomesLink += ",42"; if (didAbrahamHelp === "Yes") outcomesLink += ",50"; if (didAbrahamHelp === "Accepted") outcomesLink += ",51"; if (didAbrahamHelp === "Declined") outcomesLink += ",52"; if (didAbrahamHelp === "Didn't Offer") outcomesLink += ",53"; if (eyeWitness === "Yes") outcomesLink += ",60"; if (eyeWitness === "Declined") outcomesLink += ",61"; if (eyeWitness === "No") outcomesLink += ",62"; if (protest === "Yes") outcomesLink += ",70"; if (protest === "No") outcomesLink += ",71"; if (rescueDog === "Yes") outcomesLink += ",80"; if (rescueDog === "No") outcomesLink += ",81"; [continue] [if crimesUnknown === totalCrimes] "Nothing," your supervisor lashes out, "No possible leads? This is not good." [continue] [if crimesUnknown === totalCrimes && !disruptedVictimFourEvent] "I thought this agent was going to help us," the Sheriff stares at you bitterly. "We've gone nowhere and wasted valuable time accommodating you." [continue] [if crimesUnknown === 0 && !allHenryDead] "You've got an explanation for every case," you can imagine your supervisor smiling on the other end of the phone, "Leave it to us. We'll work with the district attorneys and continue to build a prosecution." [continue] [if crimesUnknown > 0 && crimesUnknown < totalCrimes] "I guess something is better than nothing," your supervisor says over the line, "We'll be following up on those leads you've given us." "Still," the Sheriff responds, "There's a lot of doubt and nervousness remaining in the community. Unsolved deaths are never good for community morale." [continue] [if whatHappenedToHenry === "arrested and released"] "Unfortunately," the Sheriff interjects, "With Dr. Henry Black not being indicated as a suspect in any of the deaths, I'll have no choice but to release him." [continue] [if whatHappenedToHenry === "arrested and charged"] "With these charges," the Sheriff says, "We'll be able to hold Henry until the district attorney can formally indict. The community will be safe." [continue] [if (crimesPinnedOnOthers > 0 && crimesPinnedOnHenry > 0 && whatHappenedToHenry !== "at large")] "The case against Henry looks solid. Well done. On the other hand, for the other accusations..." your supervisor's voice trails off. [continue] [if (crimesPinnedOnOthers > 0 && crimesPinnedOnHenry === 0) || (crimesPinnedOnHenry > 0 && whatHappenedToHenry === "at large")] "I'm not sure how well the prosecution will fare building these cases, but if we can get the DA confident..." your supervisor reviews your statements. "We'll be ready to make an arrest on the FBI or DA's recommendation," the Sheriff replies. Your supervisor sighs. "I'll talk to some people on our side. Maybe we can get some more resources. Another look at the evidence. Re-interview witnesses. There's just... just not enough here to justify an arrest right now." [continue] [if allHenryDead] "And what of our main suspect?" your supervisor sighs. "Deceased," the Sheriff admits. "That might make closure for some a bit difficult." "Absolutely," your supervisor responds. "Families want their day in court. They want to ask the why question, even though no response could ever be adequate. They want to feel like there's been an opportunity for justice." [continue] [if crimesPinnedOnHenry > 0 && whatHappenedToHenry === "escaped"] "And what of our main suspect?" your supervisor sighs. "On the run," the Sheriff admits. "Of course, I've sent all his information to the national crime clearinghouse." "We'll keep looking," your supervisor promises. "We'll find him someday." [continue] [if officerInvolved] "I'm devastated to think my officers could ever be involved in murder," the Sheriff continues, "But I have to accept it might be possible. I have to be open to the investigation. It breaks my heart. It really does. The whole faith and trust of the community is shattered if this is true." [continue] [if disruptedVictimFourEvent] "Regardless," the Sheriff says, "I think we need to be clear. Agent, I believe you saved a life in the park over night. Given everything that's been happening, and again, we can't know for sure, but I believe you deserve credit. That's one less victim. That's a person who's alive, breathing, today -- because of you!" "I agree," your supervisor replies, "Excellent intuition. Right place, right time." [continue] "It's time for you to return to FBI headquarters," your supervisor intones. "We'll need to review your progress and assign next steps for your career development." [if reprimanded] "Obviously, there are some significant behavioral and procedural issues we need to correct," your supervisor states sternly. "Building trust with partner agencies and the community is critical to success in this line of work." [continue] [if outcome === "Abysmal" || outcome === "All talk, no results"] "Frankly," your supervisor continues, "I'm not sure this agency is the right place for you. At the very least, I plan to assign remedial training and shadowing. We'll talk more when you're back." [continue] [if outcome === "Case Closed" || outcome === "Super Hero"] "In such a short time," your supervisor continues, "You figured these cases out. I'm so impressed. You are a rising star on my team, and I think you have a long and successful future ahead of you at the agency!" [continue] [if outcome != "Abysmal" && outcome != "All talk, no results"] "Thank you again," the Sheriff shakes your hand, "for coming to help us. On behalf of the town of Wasacona, we appreciate your time and effort." [continue] **FINAL EVALUATION**: *{outcome}* * * * <p style="text-align: center">THE END<p> <p style="text-align: center">Thank you for playing</p> <p class="title">The Killings in Wasacona</p> * * * You correctly assessed {crimesPinnedOnHenry} out of {totalCrimes} deaths. <a href='{outcomesLink}'>See how your results stack up against other players!</a> Read <a href='summary.html'>what REALLY happened</a> that fateful week in Wasacona. How close did you come to figuring it out? {restart link, label: 'Play again!'} * * *<div class="map"> <img src="{baseImgDir}map-wasacona.png" alt="Map of Wasacona" /> <div id="car-route" class="{mapCarRoute}"> <img src="{baseImgDir}carroute.png" /> </div> <button type="button" class="marker {mapSheriff}" style="left: 13%; top: 75%;" onclick="go(sheriffLink)"> <img src="{baseImgDir}circle-green.png" /> <label>Sheriff</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapHotel}" style="left: 14%; top: 88%;" onclick="go('hotel')"> <img src="{baseImgDir}circle-green.png" /> <label>Hotel</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapRestaurant}" style="left: 78%; top: 26%;" onclick="go('restaurant')"> <img src="{baseImgDir}circle-green.png" /> <label>Restaurant</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapMorgue}" style="left: 3%; top: 51%;" onclick="go('morgue')"> <img src="{baseImgDir}circle-green.png" /> <label>Morgue</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapMelodyParent}" style="left: 86.5%; top: 38%;" onclick="go('melodyParents')"> <img src="{baseImgDir}circle-green.png" /> <label>Melody's Parents</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapMelodyApt}" style="left: 2%; top: 29%;" onclick="go('melodyRoommate')"> <img src="{baseImgDir}circle-green.png" /> <label>Melody's Apartment</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapBasraApt}" style="left: 70%; top: 90%;" onclick="go('basraBrother')"> <img src="{baseImgDir}circle-green.png" /> <label>Basra's Apartment</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollege}" style="left: 38%; top: 20%;" onclick="go(collegeLink)"> <img src="{baseImgDir}circle-green.png" /> <label>College</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapPark}" style="left: 70%; top: 43%;" onclick="go('park')"> <img src="{baseImgDir}circle-green.png" /> <label>Park</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapLeroy}" style="left: 44%; top: 53%;" onclick="go('bridge')"> <img src="{baseImgDir}circle-green.png" /> <label>Leroy's Camp</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapGrocery}" style="left: 53%; top: 68%;" onclick="go('grocery')"> <img src="{baseImgDir}circle-green.png" /> <label>Grocery Store</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCreepy}" style="left: 64%; top: 69%;" onclick="go('house')"> <img src="{baseImgDir}circle-green.png" /> <label>Creepy House</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapHenryHouse}" style="left: 31%; top: 69%;" onclick="go('approachHouse')"> <img src="{baseImgDir}circle-green.png" /> <label>Henry's House</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapPartyHouse}" style="left: 31%; top: 53%;" onclick="go('partyHouse')"> <img src="{baseImgDir}circle-green.png" /> <label>Party House</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapJamalApt}" style="left: 90%; top: 18%;" onclick="go('jamalApt')"> <img src="{baseImgDir}circle-green.png" /> <label>Jamal's Apartment</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapArrestCollege}" style="left: 26%; top: 15%;" onclick="go('arrestCollege')"> <img src="{baseImgDir}circle-green.png" /> <label>College</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapArrestHome}" style="left: 31%; top: 69%;" onclick="go('arrestHome')"> <img src="{baseImgDir}circle-green.png" /> <label>Henry's House</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapArrestDrive}" style="left: 28%; top: 45%;" onclick="go('arrestPullOver')"> <img src="{baseImgDir}circle-green.png" /> <label>En Route</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> </div> [JavaScript] setTimeout(() => { const selcs = document.querySelectorAll("div.map button"); for (const selc of selcs) { selc.disabled = !(selc.classList.contains("can-visit")); } mapArrestDrive = ""; mapArrestHome = ""; mapArrestCollege = ""; mapHenryHouse = ""; }); [continue]sheriffHasMyNumber: true -- An authoritative, tall, and very fit black man greets you. His head is bald and he appears to be in the mid 50s. His uniform is immaculate, and he conveys an air of authority. “Thank you so much for coming agent, I’m Sheriff Derek LaGrange.” [JavaScript] rollType = "Intuition" successMsg = "You can tell the Sheriff is a man who appreciates order, authority, and hierarchy."; [continue] {embed passage: 'roll'} He continues, “My officers are good, but frankly, we’re out of our depth here. There’s been three suspicious deaths this last week! Seeing as how two of them are college-aged girls, naturally the town is on edge. The college is considering canceling all classes and some people are afraid to leave their homes. We don’t even have any leads!" He sighs. "I know you must be tired from your trip, we’ve arranged a hotel room right next door to the station. But let me tell you, this little town is hardly prepared for something like this. None of us is getting much sleep. So whenever you’re ready to start, we’re here. Just tell me what you need. You can call me on my direct cell number 24 hours a day. I mean that.” He gives you his cell number. It occurs to you that the Sheriff might also need to contact you. Wisely, you give him your cell number as well. Although you’ve traveled all day and are a little worn down and hungry, but this is also your first big case, and the excitement and adrenaline is giving you energy. [[Start Right Away!->sheriff]] [[Rest First]] {embed passage named: 'header'} You arrive at a tired, worn brick facade apartment building. A number of older cars fill the too-small parking lot, and you hear the sounds of TV, people talking loudly, and music playing mixing from the various apartments. A lively place. Referring to the information from the Sheriff, you make your way up a flight of rusty metal stairs and find apartment #204. A single window, with drawn curtain, and a worn wooden door, with plastic numbers 2 .. 4. Between them, the 0 has been lost to time and someone replaced it with a sharpie drawn 0. {reveal link: 'Knock on the Door', text: `You knock firmly several times. Nothing but silence responds from inside the unit. You knock again, "FBI!" you call out. In the adjacent apartment, you hear a muffled shout and some scampering, followed by a toilet flushing repeatedly. But you are not here for them. For you, there is nothing but the cold silence for a response.`} [[Unlock the Door and Go In->jamalAptInside]] [[Travel to Another Location->travel]] {embed passage named: 'header'} Inside the small studio apartment, it becomes clear that Jamal lives alone. A brief search reveals the ordinary items one might expect in a college student's apartment. Textbooks, posters, clothes, a rack of shoes, a poorly maintained bicycle, and older furniture probably scavenged from past students moving away. It's strangely comforting in a way. You feel at home, as if you've briefly taken a trip back to your own first college apartment. Yet the pull to reminiscence is counterbalanced by the chill of emptiness. The resident of this apartment has died, brutally, at the hands of a mystery perpetrator. Is there anything here that could possibly shed some light? Next to a stack of textbooks, you notice a hand written note and a laptop computer. [if trail.indexOf("jamalAptNote") === -1] [[(Academics) Read and Investigate the Note->jamalAptNote]] [continue] [if trail.indexOf("jamalAptComputer") === -1] Besides endless distractions on your phone like everyone, computers were never really your specialty. Due to increased use of technology in crime, however, the Academy requires all new agents to complete a basic computer forensics course. The question is, do you remember it? [[(Academics) Investigate the Computer->jamalAptComputer]] [continue] [[Travel to Another Location->travel]] {embed passage named: 'header'} You sit down and activate the computer. Fortunately, it is not password protected. But what to look for? You investigate a variety of documents; homework, reports, presentations. You look at pages of emails, mostly class related or messages back home. As you proceed, waves of sadness wash over you. This was a real person. A real life. A young spark, ready to ignite onto the world and make her mark. And now she's gone. [JavaScript] rollType = "Academics" successMsg = "One place that people sometimes try to hide messages, however, is in draft or deleted emails."; failureMsg = "Nothing unusual or suspicious jumps out to you." successVar = "foundV4Email"; [continue] {embed passage: 'roll'} [if success] Sure enough, in the deleted folder, you find an email from Dr. Henry Black at the college to Jamal. The email says, "J -- you were great. Don't feel like you need to be so shy. I enjoy everything about you. -- H" [continue] [[Continue->jamalAptInside]] {embed passage named: 'header'} The note reads, "Jamal, the quality of your latest work is not going to see you through to graduation. I'm sure we can find a way to help you succeed. Feel free to see me outside of class to discuss further." There is no name or signature at the bottom. [JavaScript] rollType = "Academics" successMsg = "The note is written in a print style typical of middle aged, educated, male writers."; successVar = "determinedV4noteBioOrChemProf"; [continue] {embed passage: 'roll'} [[Continue->jamalAptInside]] {embed passage named: 'header'} "I know you're grieving, but I need to search this apartment for drugs or paraphernalia. Basra could have been a long term addict or maybe even a dealer. I need to find out." [JavaScript] rollType = "Intimidation" successMsg = `He's numb. In shock and grief, he simply nods.`; failureMsg = `He explodes. "You come in here, you act like you care. But really you're just looking for an excuse. An excuse to blame us. You're just like that other cop. You're all the same!"`; successVar = "basraJournalDepression"; [continue] {embed passage: 'roll'} [if success] You carefully investigate the dingy, small apartment. Dampness and deferred maintenance, typical of lower end apartments, pervades. But despite a detailed search, you find no drugs, and nothing drug related. However, you do find a journal next to Basra's bed. As you skim through the entries, a cohesive picture begins to form: a young woman, split from her homeland and her family, tossed into a community with different values and different culture. She writes of the isolation, loneliness, disconnection. The entries continue more or less in this same fashion, with an increasing tone of hopelessness and inevitability. The final entry, dated two days before her death, reads: "I have but two lights remaining in my sky. My dear brother, of course, and also the outcast. We together seem to understand the lost paths, the roads with no travelers, far away from our homes. Are these two lights enough to guide me? I don't know. I never thought it would be like this. On this road there may be no more turns." [continue] [[Travel to Another Location->travel]] {embed passage named: 'header'} "Thank you for your help," you nod, and turn to leave. "Wait," he says. "There's one thing. I didn't think anything of it until just now." "Of course," you turn back, giving him your full attention. "What is it?" "I guess... I just didn't expect anyone to care, but..." He pauses. "The day before she... she died... When she got home..." He trails off. "I didn't think anything of it," he whispers to himself. "She seemed a bit off. Nervous. She mentioned a man at the restaurant." "An employee or customer?" You interject. He shakes his head. "I... I'm not sure. She just said, there was a man. She said, this weird guy was watching me when we were about to close. Just watching me. She said she felt creeped out, said she was looking behind her the whole walk home." "Can you describe him? Age? Race? Any distinct features?" "No, she didn't say. I didn't think to ask. I'm sorry." [[Travel to Another Location->travel]] <div class="map"> <img src="{baseImgDir}map-college.png" alt="Map of Wasacona College" /> <button type="button" class="marker {mapCollegeSearchCar}" style="left: 9%; top: 31%;" onclick="go('searchForCar')"> <img src="{baseImgDir}circle-green.png" /> <label>Search for Car</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollegeCrimeScene}" style="left: 40%; top: 65%;" onclick="go('crimeScene1')"> <img src="{baseImgDir}circle-green.png" /> <label>Melody Found</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollegeSecurity}" style="left: 63%; top: 15%;" onclick="go('campusSecurity')"> <img src="{baseImgDir}circle-green.png" /> <label>Campus Security</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollegePresident}" style="left: 63%; top: 40%;" onclick="go('collegePresident')"> <img src="{baseImgDir}circle-green.png" /> <label>College President</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollegeArt}" style="left: 50%; top: 25%;" onclick="go('collegeArt')"> <img src="{baseImgDir}circle-green.png" /> <label>Art</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollegeHum}" style="left: 45%; top: 20%;" onclick="go('collegeHum')"> <img src="{baseImgDir}circle-green.png" /> <label>Humanities</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollegeChem}" style="left: 33%; top: 22%;" onclick="go('collegeChem')"> <img src="{baseImgDir}circle-green.png" /> <label>Chemistry</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCollegeBio}" style="left: 22%; top: 22%;" onclick="go('collegeBio')"> <img src="{baseImgDir}circle-green.png" /> <label>Biology</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> </div> [JavaScript] setTimeout(() => { const selcs = document.querySelectorAll("div.map button"); for (const selc of selcs) { selc.disabled = !(selc.classList.contains("can-visit")); } }); [continue]mapCollegeCrimeScene: "shown" -- Wasacona College is a small town campus with about a thousand students enrolled. The pleasant, rural-feeling campus is served by four buildings; with pathways, a creek, and sports fields. Two parking lots buttress either edge of the property. The grounds are well-kept and inviting. You park in the east parking lot. A kiosk at the edge of the parking lot provides a campus map. You take a moment to mark the crime scene location. {embed passage named: 'mapCollege'} Upon entering campus, you see first an Administration building, including the office of the college President. Nearby, a building with classrooms and humanities offices advertises workshops on literature, writing, and a poetry contest. Half of the building is decorated in a funky and eclectic style advertising the art department. A futuristic looking science building houses biology and chemistry studies. Near the south edge of campus, you note a humble flat building marked "Library". [[Continue->college]] bioProfOffersHelp: -1 -- {embed passage named: 'header'} "Before you go," the professor addresses you as you stand to head for the door. "Yes?" "This whole ... situation ... has everyone really on edge. Lots of uncertainty and fear. I want to help. If there's anything I could do? I can help with searches, or talking to people. If you had any suspects I would tell you anything I know about them. If there's some place you want a second pair of eyes looking at? Anything at all?" [JavaScript] rollType = "Intuition" successMsg = "On the one hand, perpetrators may attempt to inject themselves into investigations under the guide of offering to help, and use their closeness to influence the investigation away from them. On the other hand, Abraham knows and interacts with the students everyday, and if the offer is genuine, he might be able to pick up something you would miss."; [continue] {embed passage: 'roll'} [[Yes, if you could talk to your students and ask if they have seen or heard anything suspicious in the past week.->colBioHelp]] [[No, we have the investigation under control.->college]]bioProfOffersHelp: hour -- {embed passage named: 'header'} "Yes," you admit. "This is a difficult set of cases. The college is obviously a huge part of life in this community, and your students may have seen or something. They are more likely to speak freely to someone they know and trust, like you; rather than an outsider, like me. Please, call me if you find anything out." You give Dr. Norman your phone number. "I'll ask around and call you if I find out anything," he nods. [[Continue->college]]callRang: true -- <div class=roll> <p class=skill-check><span>&#128222;&#xFE0E;</span> Incoming call!</p> Caller ID: {callAnswerFrom} {link to: callAnswerDest, label: 'Answer It!'} </div> [JavaScript] callAnswerFrom = ""; callAnswerDest = ""; [continue] {embed passage named: 'header'} You answer the phone, and find Dr. Norman on the other end. "Dr. Norman, what can I do for you?" "Agent, I wanted to let you know that I asked around some of my students, like we discussed. I've heard that there's been, for the last month or so, a disturbing rumor going around. Several have told me it started before Melody's death..." "Go on," you prompt. "Apparently... I can't believe I'm even saying this... I must emphasize, this is just a rumor! I have no evidence of any of this!" "Of course," you reply, "It's just hearsay. But it could still be valuable." "Yes," he responds, "Well, it's that our own chemistry professor, Dr. Henry Black, well... That not only has he been dating one of the students for about a year, but that apparently he recently started, uh, an affair with another student, and now there's some kind of love triangle going on." "I see," you respond, as calmly as possible. "Did you happen to hear any names of the students involved?" "That's where this gets a bit unbelievable. Apparently, Dr. Black's year long relationship is... was.. with Melody!" "And the other student? The new partner?" you prompt. [if !disruptedVictimFourEvent] "Jamal." he says directly. "The other dead student. I would assume this rumor has been made up in the last few days. You know, to explain away their deaths. But several students assure me this has been whispered around for several weeks now, predating any of the deaths." [else] "I'm not sure. There were a few names but apparently it's someone new at the college, in the science programs. Someone caught his eye." [continue] "I feel like a gossiping school boy telling you this," he mumbles. "Please, it's just a rumor. Henry... Dr. Black... he's a good guy. We play baseball together. He's a good guy, I'm sure of it." [[Continue->travel]] restToldCreepyMen: true -- "Oh wow," she replies. "I mean, almost everyone in town comes here, so I'm sure most people have at least seen Basra." She thinks for a moment. "I don't want to imply anything, but there's a few folks that give me the creeps. In the last couple weeks, there's two guys I've seen here late. Sometimes it seems like they're just watching Basra. I mean, sure, she looks different than most people in town. But it made me uncomfortable. I helped her out by taking over their table, closing them out." "Can you tell me anything about them? Names? What they look like?" you ask. "Sure..." she reflects. "They're both white guys, older than Basra. This one guy, Adam, he's come in several times. Bad vibe, but never anything overt. He watches her, me too sometimes. I don't like it, but he hasn't actually said anything or done anything." "Also, last week, there was another guy. I don't remember his name though, he's local I think. I think I've seen him before, but this was different. He had a really dark vibe. Real brooding. He was staring at Basra most of the night." "Can you remember which night this was?" you ask intently. "Uhhh. It was last week. I think... Tuesday night?" partySuspectAdam: true -- "Can you tell me if you saw anyone suspicious at any of your parties recently? Anyone out of place? Maybe someone looking at or talking to Melody?" "Hey, no, no, no, everyone is cool. It's all cool," he replies. "Anyways, it's usually just college folks, good folks, we all like to have a good time. I like to have a good time. There is this one guy, kind of like, you know, older than most of the students. Kinda weird for him to be at the party." "How old... your age? What did he look like?" you ask directly. "Hey, it's cool, I'm cool. I'm providing a service here to these young ladies. Young people. But yeah, you know, he was probably in his 30s. He had this stupid goatee. I didn't want no freeloaders. Drinking all my beer and shit. So I asked him what he's up to. He said he's working at the college. Temp job teaching or something. I don't know. Some of the girls seem to know him." "Did you see him talking to Melody at all?" "I don't know, he was cruising around, I was cruising around. Maybe he did. I didn't notice." {embed passage named: 'header'} "Sheriff," you pull him aside, "I have some concerns about your deputy, Amanda Palads." He sighs. "Amanda... Has a troubled history," he admits, "She was actually an MP in Army and got caught planting evidence. Falsifying evidence. She contested she charges, of course, and ultimately avoided dishonorable discharge." He shakes his head. "When she came here, she admitting it all to me up front. Told me she had thought about herself. Her actions. That she was ready to change. And I... I believe in people. I believe in second chances. Still.... I'm not sure if this will work out for her." [[Continue->sheriff]] mapSheriff (mapSheriff === "can-visit"): "shown" mapHotel (mapHotel === "can-visit"): "shown" mapRestaurant (mapRestaurant === "can-visit"): "shown" mapMorgue (mapMorgue === "can-visit"): "shown" mapMelodyParent (mapMelodyParent === "can-visit"): "shown" mapMelodyApt (mapMelodyApt === "can-visit"): "shown" mapBasraApt (mapBasraApt === "can-visit"): "shown" mapCollege (mapCollege === "can-visit"): "shown" mapPark (mapPark === "can-visit"): "shown" mapLeroy (mapLeroy === "can-visit"): "shown" mapGrocery (mapGrocery === "can-visit"): "shown" mapCreepy (mapCreepy === "can-visit"): "shown" mapHenryHouse (mapHenryHouse === "can-visit"): "shown" mapJamalApt (mapJamalApt === "can-visit"): "shown" mapPartyHouse (mapPartyHouse === "can-visit"): "shown" mapParkCrimeScene2 (mapParkCrimeScene2 === "can-visit"): "shown" mapParkCrimeScene4 (mapParkCrimeScene4 === "can-visit"): "shown" -- whatHappenedToHenry: "arrested" -- {embed passage named: 'header'} Once you're in position at the back door, The Sheriff waits for a moment in the heavy air, then pounds on the front door. "Sheriff's Department! Open the door now!" You hear a scuffle of noises from inside the house, and the back door flies open. Henry leaps from the house, virtually into your arms, as you both collapse on the ground. He struggles for a moment, but the Sheriff is upon you in seconds. "You're under arrest," the Sheriff picks him up and cuffs him. "I'll be taking him down to the station," the Sheriff says to you. "Why don't you search here for any evidence, then come and join me?" [[Continue->searchHomeAndCar]]mapGrocery (mapGrocery === "can-visit"): "shown" mapCreepy (mapCreepy === "can-visit"): "shown" -- <div class="map"> <img src="{baseImgDir}map-park.png" alt="Map of Wasacona Park" /> <div id="park-car-route" class="{mapCarRoute}"> <img src="{baseImgDir}carroute.png" /> </div> <button type="button" class="marker {mapParkCrimeScene2}" style="left: 80%; top: 25%;" onclick="go('crimeScene2')"> <img src="{baseImgDir}circle-green.png" /> <label>Basra Found</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapParkCrimeScene4}" style="left: 50%; top: 37%;" onclick="go('crimeScene4')"> <img src="{baseImgDir}circle-green.png" /> <label>Jamal Found</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapParkSearchBody}" style="left: 50%; top: 37%;"> <img src="{baseImgDir}circle-green.png" /> <label>Body Found</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapGrocery}" style="left: 15%; top: 70%;" onclick="go('grocery')"> <img src="{baseImgDir}circle-green.png" /> <label>Grocery Store</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapCreepy}" style="left: 42%; top: 72%;" onclick="go('house')"> <img src="{baseImgDir}circle-green.png" /> <label>Creepy House</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapParkEmergency}" style="left: 42%; top: 12%;" onclick="go('V4scene')"> <img src="{baseImgDir}circle-green.png" /> <label>Respond to Park</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapParkHenry}" style="left: 42%; top: 12%;" onclick="go('henryScene')"> <img src="{baseImgDir}circle-green.png" /> <label>Respond to Park</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapParkPed}" style="left: 32%; top: 0%;" onclick="go('Question the Pedestrian')"> <img src="{baseImgDir}circle-green.png" /> <label>Pedestrian</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> </div> [JavaScript] setTimeout(() => { const selcs = document.querySelectorAll("div.map button"); for (const selc of selcs) { selc.disabled = !(selc.classList.contains("can-visit")); } mapParkEmergency = ""; mapParkHenry = ""; mapParkPed = ""; mapParkSearchBody = ""; }); [continue]henryCarAtHome: false canArrestHenry: false whatHappenedToHenry: "suicide" -- {embed passage named: 'header'} As you approach the scene, you see the Sheriff and Officer Palads, with the coroner, standing at a park bench near the playground. A figure, indeterminant, is slumped over on the bench. "Agent!" The Sheriff sees you and waves you over. [if trail.indexOf("collegeChem") > -1] As you approach the scene, you're shocked. You recognize the dead man! This is Dr. Henry Black, the chemistry professor at the college. Why, you just spoke to him yesterday! [continue] "What happened here?" you ask. Amanda speaks up. "I was on foot patrol, and as I walked by the park, I noticed someone apparently sleeping on the bench. We don't allow sleeping in the park, so I went over to wake him. That's when I saw the needle sticking out of his arm! I tried to rouse him, but he didn't respond. So I called it in." "If it helps," Officer Amanda adds, "I searched the body while I was waiting for you all. I found his keys and ID." She reads from the ID. "Henry Black. He's a local. Lives on Second Ave. Not far from the Sheriff's office actually." She shrugs and holds them out. "Of course, I'll do a full autopsy and tox panel," Dr. Alahram remarks, as she covers the body and prepares it for transport. "But it looks like your cause of death is right here." She motions to the used syringe still sticking out of his inside arm, near the elbow. "This sure looks like a drug overdose to me." [JavaScript] if (basraInjectionSite) { rollType = "Perception" successMsg = "The two cases, Basra and Henry, are not exactly the same. Basra's injection site was on the outer rear of her arm, near the shoulder, as if someone had injected her; Henry's is on the interior of the arm near the elbow, more consistent with self administered injection."; successVar = "henryInjectionSite"; } [continue] [if basraInjectionSite] {embed passage: 'roll'} [continue] "That would be two drug overdoses in the last week," The Sheriff muses, alarmed. "What's happening to this town?" The Sheriff shakes his head, "This looks a lot like what happened to Basra. One overdose, I can believe. Two overdoses, in the same park, within a week? No, someone is behind this. I'm sure of it." "Agent," the Sheriff continue, "You should go search his house. See if anything will shed light on this situation." As the coroner wheels the body away, the Sheriff regards you. "Listen, I'm going to head to the station to fill out the paperwork for this." He shakes his head. "Why don't you join me when you're ready?" {embed passage named: 'mapWasaconaDisable'} [JavaScript] mapHenryHouse = "can-visit"; [continue] [if figuredOutCarInfo > 0] "Just a moment," your eyes play away from the scene and to the parking lot across the playground. In addition to the expected police and emergency vehicles, you see one car barely noticeable in the dim glow of a street lamp that looks familiar... [continue] [if figuredOutCarInfo > 0 && !discoveredHenrysCar] That's it. You freeze for a moment, and your blood runs cold. That's the car you saw leaving the park that night. You're sure of it. [continue] [if figuredOutCarInfo > 0] "Sheriff," you say, "This is the car from the park. It's him." The Sheriff nods grimly. "A victim... and a perpetrator? Ok, search the car first, then head to his house." [[Search the Car->searchCar]] [else] {embed passage named: 'mapWasacona'} [[Go to Henry's house->approachHouse]] [continue]{embed passage named: 'header'} The Sheriff tries to compose himself. "Terrible," he mutters, "Terrible. There will of course be an inquiry..." his voice trails off. After a moment, he continues, "But before then, let's wrap up this thread of the case. I got a search warrant for his house. Why don't you check it out, then meet me back at the station." {embed passage named: 'mapWasaconaDisable'} [JavaScript] mapHenryHouse = "can-visit"; [continue] {embed passage named: 'mapWasacona'} [[Go to Henry's house->approachHouse]] config.header.center: "(Conclusion)" HenryConclusion: "Unknown" anyCrimePinnedOnHenry: false anyCrimePinnedOnHenry (V1conclusion === "Killed by Chemistry Professor"): true anyCrimePinnedOnHenry (V2conclusion === "Killed by Chemistry Professor"): true anyCrimePinnedOnHenry (V3conclusion === "Killed by Chemistry Professor"): true anyCrimePinnedOnHenry (V4conclusion === "Killed by Chemistry Professor"): true VhenrylinkedAmanda: false VhenrylinkedAmanda (V2conclusion === "Killed by Officer Goodwin"): true VhenrylinkedHum: false VhenrylinkedHum (V2conclusion === "Killed by Humanities Adjunct Professor"): true VhenrylinkedBio: false VhenrylinkedBio (V2conclusion === "Killed by Biology Professor"): true -- [JavaScript] success = false; window.concfunc = function(t) { engine.state.set("HenryConclusion", t.innerText); go("concludeFinal"); } conclusion = {}; [continue] In the case of the final death, Henry Black, what are your conclusions? [JavaScript] conclusion.title = "Accidental Overdose"; conclusion.desc = "Maybe Henry was addicted to fentanyl and the growing addiction finally caught up to him."; conclusion.conds = [ {kind: "visit", item: "henryScene", text: "The coroner states that Henry died due to an overdose of fentanyl."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Suicide"; conclusion.desc = "What if Henry self administered an intentionally fatal dose due to problems at work or in relationships?"; conclusion.conds = [ {kind: "visit", item: "henryScene", text: "The coroner states that Henry died due to an overdose of fentanyl."}, {kind: "var", item: "foundHenrysFent", text: "You found fentanyl in Henry's house, along with information on fatal dosings."}, {kind: "var", item: "henryInjectionSite", text: "Henry's injection site is consistent with self administration."}, {kind: "var", item: "foundHenryBathSyringe", text: "You found matching syringes in Henry's house."}, {kind: "var", item: "foundMelodyPhotosInHouse", text: "Based on photos you found in his house, Henry was in love with Melody, who was murdered last week. Could her death have driven Henry to despair?"}, {kind: "var", item: "anyCrimePinnedOnHenry", text: "You concluded that Henry commited at least one murder. Maybe he killed himself out of guilt or fear of consequences?"} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Officer Palads"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "accusedAmanda", text: "You accused Amanda of being involved in violent crime."}, {kind: "var", item: "VhenrylinkedAmanda", text: "The Sheriff said this scene resembles Basra's death, and you concluded Amanda killed Basra."}, {kind: "visit", item: "sheriffAmanda", text: "The Sheriff admitted Amanda has a history of planting and falsifying evidence."}, {kind: "visit", item: "henryScene", text: "Amanda claims she found the body several hours after death. Plenty of time for her to have staged the scene and evidence."}, {kind: "var", item: "foundHenrysFent", text: "Amanda may have planted the fentanyl in Henry's house, along with information on fatal dosings."}, {kind: "var", item: "foundHenryBathSyringe", text: "Amanda may have planted the matching syringes you found in Henry's house."}, ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Humanities Adjunct Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "VhenrylinkedHum", text: "The Sheriff said this scene resembles Basra's death, and you concluded Adam killed Basra."} ]; [continue] {embed passage named: 'conclusion'} [JavaScript] conclusion.title = "Killed by Biology Professor"; conclusion.desc = ""; conclusion.conds = [ {kind: "var", item: "VhenrylinkedBio", text: "The Sheriff said this scene resembles Basra's death, and you concluded Abraham killed Basra."} ]; [continue] {embed passage named: 'conclusion'} * * * [if !success] You did not collect enough evidence to support a conclusion. [[Continue->concludeFinal]] [else] [[None of These Make Sense->concludeFinal]] [continue] mapHenryCar: "" mapHenryCar (henryCarAtHome): "shown" -- <div class="map"> <img src="{baseImgDir}map-home-hidden.png" alt="Outside of Henry House" /> <div id="henry-car" class="{mapHenryCar}"> <img src="{baseImgDir}car.png" /> </div> </div> {embed passage named: 'advanceTime'} {embed passage named: 'header'} You arrive at a humble, single level ranch home. Nothing immediately signifies any sign of trouble. {embed passage named: 'henryHomeDesc'} With Henry gone, the quiet is overwhelming. A sense of dark foreboding seems to ooze out from the house, like a presence not quite entirely dispelled. [[Continue->searchHomeAndCar]] {embed passage named: 'mapHomeHidden'} The neighborhood is quiet, very quiet; or perhaps that is just you, holding your breath. A small but neat yard yields nothing of interest or concern. There is an oversized one car garage (closed), a front door and a small rear porch. The yard is bounded on three sides by a low picket fence; a decoration much more than any obstacle to travel. The house itself is older, the paint just beginning to peel in a few places. Moss accumulates on the roof. The house is clearly lived in, but with the deferred maintenance one might expect from a single person trying to keep up with the demands of life and inflation.mapHenryCar: "" mapHenryCar (henryCarAtHome): "shown" -- <div class="map"> <img src="{baseImgDir}map-home.png" alt="Outside of Henry House" /> <div id="henry-car" class="{mapHenryCar}"> <img src="{baseImgDir}car.png" /> </div> <button type="button" class="marker {mapHomeCar}" style="left: 20%; top: 70%;" onclick="go('searchCar')"> <img src="{baseImgDir}circle-green.png" /> <label>Car</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapHomeLivingRoom}" style="left: 65%; top: 40%;" onclick="go('searchLivingRoom')"> <img src="{baseImgDir}circle-green.png" /> <label>Living Room</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapHomeBedroom}" style="left: 45%; top: 45%;" onclick="go('searchBedroom')"> <img src="{baseImgDir}circle-green.png" /> <label>Bedroom</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapHomeBathroom}" style="left: 45%; top: 25%;" onclick="go('searchBathroom')"> <img src="{baseImgDir}circle-green.png" /> <label>Bathroom</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> <button type="button" class="marker {mapHomeGarage}" style="left: 20%; top: 35%;" onclick="go('searchGarage')"> <img src="{baseImgDir}circle-green.png" /> <label>Garage</label> <p class="visited">&#x2714;&#xFE0E;</p> </button> </div> [JavaScript] setTimeout(() => { const selcs = document.querySelectorAll("div.map button"); for (const selc of selcs) { selc.disabled = !(selc.classList.contains("can-visit")); } }); [continue]{embed passage named: 'header'} You answer the phone, and sure enough the Sheriff is on the other end. "Agent, I have someone here, he just came into the station... He claims to have witnessed something related to the deaths. He's asking for you specifically. He seems a bit flighty, and frankly, I'm not sure he's a reliable witness. But he's here if you want to come now. However, I can't hold him. Do you want to come now? If not, I'll just ask him to give me a statement." [[Yes, eyewitness testimony could be crucial->partyHostWitnessYes]] [[No, eyewitness testimony is not reliable->partyHostWitnessNo]] {embed passage named: 'header'} The Sheriff calls back a few minutes later. "Sorry agent, when I told you weren't able to make it, he didn't want to talk anymore. He refused to give me a statement and left." "Thanks for trying," you reply. "I'd rather follow up on some leads with real physical evidence. Eyewitness testimony is notoriously unreliable. We don't want to be misled down a wrong path." [[Continue->travel]] {embed passage named: 'header'} "Try to stall him, I'm coming right now!" you tell the Sheriff, and proceed immediately to the station. * * * Upon walking in, you see the Sheriff standing with a man you immediately recognize: Chad, the resident of the party house. Your eyes narrow, and Chad looks at you nervously. "Let's go into an interview room," the Sheriff adds helpfully. * * * "I understand you have some information for me," you say to Chad once you're seated in the interview room. "Information about Melody. So she was at the party?" "What? Wait, no. I'm not here about Melody. I mean, I just thought. I know some people have died and I realized, I might have seen something. But it's not about Melody." "Not... Melody..." you parse. "Ok, tell me what you saw." "I heard about that homeless guy. Leroy, I think. You know, I've seen him around. I even sometimes, you know, maybe make a purchase." He flushes, "But no, that's not what I'm talking about. It's just that, he lives under that bridge, you know? Anyways, it's just down the street from me." "Just down Broad street," you clarify, "About a block away." "Yeah, that's what I said. Anyways, it was Thursday night. We had a big party..." "You had a party on a Thursday?" "Listen, just because you're a square... I'm here to have a good time, every night of the week! Anyways, yeah, it was Thursday." He collects himself, then continues. "It was after the party, everyone left, I was just picking up a few things. It was after midnight. I happened to look out the window, down the street. It was dark, but there's a streetlight at the intersection, Broad and, uh... I think, Third. Right by the bridge." "Anyways," he continues, "I saw a person, coming up from under the bridge, I thought it was Leroy. But when he passed under the streetlight, it looked like there was blood on the clothes. And a bat, he was carrying a baseball bat. I could tell it wasn't Leroy, but I didn't get a look at the face." "A bat? Are you sure it was a bat? Could it have been something else, like a baton or even a pipe?" "Well yeah," he stammers, "it was pretty dark and like a block away. Yeah, it could have been anything like that." "You said 'he'?" you clarify, "Can you describe him at all?" "It was pretty dark, but it looked like a white guy. I couldn't tell like if he was young or old. But the shape, the walk, it wasn't Leroy. I'm sure of it." "Ok," you reply, "Thanks for coming forward. I appreciate this information." "Yeah, no problem," Chad replies, "And listen, I didn't have nothing to do with any of it. Not with Melody. Not with the homeless guy. I had nothing to do with it." You nod. "I'll show you out," the Sheriff says to Chad, and escorts him out, leaving you with your thoughts. [JavaScript] rollType = "Intuition" successMsg = "Although he's obviously uncomfortable, you feel like Chad is telling the truth, to the best of his recollection. He really saw, or thinks he saw, the person he described."; [continue] {embed passage: 'roll'} [[Continue->sheriff]] {embed passage named: 'header'} "Hey pup!" you hold your hand out and the Golden bounds quickly up to you, wagging its tail. "Hey, let's look at your collar buddy." "EINSTEIN" the name on the collar reads, together with a phone number. You're pretty sure it's the same number as you saw on the missing poster. Might as well give her a call... * * * "Hello," an older woman answers. "Ms. Moffet? This is... Well, I'm at the college. I think I have your dog here. I saw a missing poster earlier." "Did you find Einstein? Oh, bless you!" she gushes. "Can you bring her back to me? I live at the senior center on Fourth and Main." "I'll bring her right over, ma'am." "Thank you so much!" * * * After a delightful reunion, the small act of helping an old lady, to bring joy back into her life, and to see her smile when Einstein bounded back into her room. You start to feel better, more confident. Maybe there is good in the world, after all. *Your morale is increased.* [JavaScript] const m = engine.state.get("lastMorale"); if (m !== "dog") { engine.state.set("morale", morale + 1); engine.state.set("lastMorale", "dog"); } [continue] [[Continue->travel]] {embed passage named: 'header'} "Yes, sir," you answer briskly. "Agent, what's going on?" he barks with anger. "I, uh, I'm sorry. I'm in Wasacona, investigating the deaths." "Investigating?" He barks. "I just got a call from the Sheriff. Family members are holding a protest at the Sheriff's Office. Get over there now!" "Uh, yes. Yes, sir." A protest?? * * * "The police, and the FBI, have neglected us!" the woman on a makeshift podium calls out, to a burbling crowd of about 20 people. "It is our family! Our daughter," she motions to a thin black man standing near her, "His sister! Our families are being torn apart! And the police, and the FBI? Are they talking to us? Are they asking us questions? No! What are they even doing! We demand action!" A rumble of applause scatters throughout the crowd. It's you. The failure is you. [if morale > 0] *This sense of failure shatters your built-up morale.* [continue] [JavaScript] if (morale > 0) morale = 0; [continue] [[Jump in and Interject]] [[Stay Back]]{embed passage named: 'header'} "Ma'am!" you call out as you move forward, the crowd parting before you. "I assure you, the FBI -- myself -- I'm working diligently on this case. I've been working closely with the Sheriff and following up on leads. We will find the killer. We are not ignoring you, we are not ignoring your needs." The woman steps down from the podium. "Please," she says, "Melody was my daughter. Please, please find out what happened. I can't live like this." "We're doing everything we can to bring justice to this case, ma'am." you assure her. Still, in your mind, you wonder -- how did it come to this? [[Continue->sheriff]] {embed passage named: 'header'} You melt back, out of sight. The protest continues for about thirty more minutes, and frustrated by the lack of response, eventually the crowd disperses and an uneasy silence fills the air. Not a great situation, for sure, you muse. [[Continue->sheriff]] {embed passage named: 'header'} You are too tired to continue working tonight. Time to call it a night. [[Hotel->hotel]]callProtest: true callAnswerFrom: "FBI Supervisor" callAnswerDest: "partyProtest" -- {embed passage named: 'incomingCall'} A call from your supervisor? This could be critical. henryCarAtHome: false canArrestHenry: false -- {embed passage named: 'header'} You run out of the science building and onto one of the college's pathways. Henry is athletic and in his prime, and he has a head start on you. [JavaScript] rollType = "Physical" successMsg = "Even with his strength, he's scared; he looks back, he stumbles. You see your chance and lunge forward. Boom! You grab him across the chest and you both tumble to the ground. The Sheriff comes running up seconds later. Henry can see he's been beat."; failureMsg = "Damn it, you trained for this! His head start and local knowledge is too much. He crosses the street, jumps over a fence, weaves between two houses, and by the time you round the corner, he's gone. You pant, looking left and right. A few moments later, the Sheriff catches up to you." [continue] {embed passage: 'roll'} [if success] "You're under arrest," the Sheriff picks him up and cuffs him. "I'll be taking him down to the station," the Sheriff says to you. "I got a search warrant for his house. Why don't you search the house, then join me at the station." [else] The Sheriff sighs. "I'm not as young as I used to be," he shakes his head. "I'll put out an APB. Maybe we can pick him up. In the meantime, I got a search warrant for his house. Why don't you search the house, then join me at the station." [continue] [JavaScript] if (success) whatHappenedToHenry = "arrested"; else whatHappenedToHenry = "escaped"; [continue] {embed passage named: 'mapWasaconaDisable'} [JavaScript] mapHenryHouse = "can-visit"; [continue] {embed passage named: 'mapWasacona'} [[Go to Henry's house->approachHouse]] hour: 21 hoursSinceSleep: 0 -- {embed passage named: 'header'} The dim light of evening having now faded entirely away, you awake into the night. The hunter and the prey, perhaps? Or maybe just a sleepy small town nightscape. [[Head out->travel]].