/%%%%%%%%%%%%%%%%%%%%%%\n% Ellie's Apartment %\n%%%%%%%%%%%%%%%%%%%%%%/
This is your apartment. It's small, being a studio apartment, but it's nice and cozy. Not too small to move around comfortably, but certainly not big enough for a party. The walls are painted maroon, and the light maroon carpet matches. You've always found it to be such a soothing color. It is full of cute, adorable things because those are hands-down your favorite things.\n\nIn the corner of the room sits your <<i bed ellieApt-bed>>, nice and fluffy and comfy since you spend about a third of your life in it. It faces one of the two <<i windows ellieApt-windows>> on the east-facing wall so that the sunlight can gently awaken you every morning before your <<i "alarm clock" ellieApt-alarmClock>> does so rudely. It is full of plushies, such as <<i scalemates ellieApt-scalemates>>, <<i tanglebuddies tanglebuddies>>, and <<dispid ellieApt-bunnies>>\n\nAcross from your bed, in the opposite corner, beside one of the windows, is a nifty little free-standing <<i closet ellieApt-closet>> that doubles as a mirror with its <<i "mirror door" ellieApt-mirror>>. On the other side of the window is your desk. Your <<i computer ellieCpu>> is on it, and it is blinking an icon at you. It seems you are being pestered.\n\nIn the center of the room, a small couch faces the <<i TV ellieApt-tv>> mounted on your wall, with a little coffee table between them.<<dispid ellieApt-pumpkin>> Underneath the TV is a strange entertainment center/bookcase hybrid. On the left side, all <<i books ellieApt-books>>. On the right side, all <<i games ellieApt-games>>, with one shelf dedicated to holding your <<i "PlayCenter 3" ellieApt-playCenter>>.\n\nBehind the couch is a little <<i "kitchen-on-a-wall" ellieApt-kitchen>>. On the side of the couch opposite from the bed is a little dining table that can seat four. And behind the wall-kitchen, accessible by a door next to your bed, is the <<i bathroom ellieApt-bathroom>>.\n\n<<did ellieApt-actions>>
/%%%%%%%%%%%%%%%%%%%%%%%%%\n% Conditional listings %\n%%%%%%%%%%%%%%%%%%%%%%%%%/
<<if !objHas("nigel") && !objHas("nadine") >>\n your favorite plush bunny couple, <<i Nigel nigel>> and <<i Nadine nadine>>.\n<<elseif !objHas("nigel")>>\n <<i Nigel nigel>>, kind of lonely without his lady Nadine.\n<<elseif !objHas("nadine")>>\n <<i Nadine nadine>>, kind of lonely without her man Nigel.\n<<else>>\n ...uh, neither of your bunnies, actually, becuase you has them both!\n<</if>>
Scalemates are dragon-esque, armless plushies. Quite adorable, and very snuggly. \n<<if !objHas("pyralspite") && !objHas("lemonsnout")>>\n <<i Pyralspite pyralspite>> and <<i "Senator Lemonsnout" lemonsnout>> are here.\n<<elseif !objHas("pyralspite")>>\n <<i Pyralspite pyralspite>> is here, taking it easy since the dastardly senator is not around to cause trouble.\n<<elseif !objHas("lemonsnout")>>\n <<i "Senator Lemonsnout" lemonsnout>> is here, and is scheming all sorts of dastardly schemes without Pyralspite around to stop him! Don't fuck with this senator!\n<<else>>\n Both of the scalemates are <<print $player.invIn>>. Surely their escapades are causing quite a mess in your inventory!\n<</if>>
<<if !$ev.pumpkin1>> There is a <<i pumpkin ellieApt-intPumpkin>> on the table.<<else>><</if>>
<<if !$ev.ellieArms>>#<<i "Retrieve arms from closet." ellie-arms>>\n<<elseif !$ev.ellieStupid>>#<<i "Squawk like an imbecile and shit on your desk." ellie-stupid>>\s\n<<elseif !$ev.attemptedStairs>>#<<i "Leave apartment." ellieApt-frontDoor>>\s\n<<else>>#<<g "Leave apartment." rhyDin-newHaven>><</if>>\s
/%%%%%%%%%%%%%%%%%%%%%%%%%\n% Generic interactions %\n%%%%%%%%%%%%%%%%%%%%%%%%%/
That bed is really, really tempting...\nYou could just... lay on it... and...\n...zzzzzzzz...\n...NO! No! You have important things to do!
Your windows offer a good view. You are on the third floor of a four-story apartment complex in the district of New Haven, in the city of Rhy'Din. This part of the city is higher up than the others, so you can see much of the city from here.
It's a pain in the ass and it's really stupid. You look away from it in disgust because fuck that thing.
Look at you, lookin' all cute 'n stuff! You do a little spin in front of the mirror and giggle. Adorable! c: <<if !$ev.ellieBlinged>>You feel like something's missing, though...<</if>>
It's a fairly nice flat-screen. Not too big, not too small. The colors are good, so is the sound. You don't need much sound in a studio apartment. You're not especially perceptive to this kind of thing, but you don't feel lag when you play games on it.
They are mostly fiction books, and mostly fantasy. You do dabble in sci-fi from time to time. There are a few educational books, though. That "Shine Tutorial" book you might find particularly useful later... You don't feel much like reading at the moment, though.
They are mostly eastern RPG games, usually slow or turn-based. But platformers do hold a special place in your heart, and you do dabble in the occasional fighter to try and improve your manual dexterity. You don't feel much like gaming at the moment, though.
It's not a state-of-the-art console anymore considering PlayCenter 4 just came out... but there aren't any games on that one that you're interested in! You're perfectly happy with this console. Your best friend prefers the ZBox. You think he's crazy.
What pumpkin? You are quite sure there is no pumpkin in this room, that there never has been, and there never will be.<<set $ev.pumpkin1 = true>><<disprepl ellieApt-pumpkin>>
<div class="sbahj">dude are you DONE with the ''//nachons//'' in there?\nJEGUS FUCK how can you even be this GREEDY....\nJUST slide some under the banthrom ''DOOR''.</div>
You already have arms, <span class="sbahj">dumpass</span>. What about this story made you think you wouldn't have arms?<<set $ev.ellieArms = true>><<drep ellieApt-actions>>
No, that is stupid. That is entirely too stupid. How about we put something that might actually be productive in that spot, hmm?<<set $ev.ellieStupid = true>><<drep ellieApt-actions>>
<<if !$ev.convSerge01>>You're not going to leave while that Pesterchum icon is still blinking at you on your computer.\n<<elseif !$loot[1]>>You don't quite feel safe leaving without a good supply of items. You know there's a pretty decent stash around here somewhere...\n<<else>>Alright, time to go! Gotta get down the stairs and get out. You should be careful around stairs, you know...\n\n#<<i "Descend them recklessly!" ellieApt-dumbStairs>>\n#<<i "Let's not be too hasty..." ellieApt-smartStairs>><</if>>
<<set $ev.attemptedStairs = true>>\s\n<div class="sbahj">FUCK YOURE FALLING DOWN ALL THESE STAIRS</div>\s\n\nYou take 100 damage. Good job.\n\n#<<g "Just... go outside." rhyDin-newHaven>>
<<set $ev.attemptedStairs = true>>\s\nYou go down the stairs like a rational person and nothing terrible happens to you.\n\n#<<g "Of course not. Outside we go." rhyDin-newHaven>>
/%%%%%%%%%%%%\n% Kitchen %\n%%%%%%%%%%%%/
It's like one of those kitchens you can find in extended stay hotels, entirely contained on one wall. It has a sink, an oven with a stove top, and enough cabinets to hold what you need. You even have a fridge. Between the wall-kitchen and the door out of your apartment is a <<i pantry ellieApt-pantry>>.
There's food in here. There's nothing inherently interesting about it. ...except for the fact that you have WAY too many sweets. How the hell do you eat so many sweets and stay so svelte?!<<if !$loot[2]>>\n\n...Wait, what's this?! You have some items in here! Two Apple Gels!<</if>>\n\n*<<ib ellieApt-kitchen>>\n<<if !$loot[2]>>*<<i "Get Items" ellieApt-pantry-get>><</if>>
<<itmGetMsg them appleGel 2>><<set $loot[2] = true>>\n\n*<<ib ellieApt-pantry>>
/%%%%%%%%%%%\n% Closet %\n%%%%%%%%%%%/
You open up the closet, revealing a bunch of t-shirts, a bunch of long skirts, a few sundresses, and your one fancy dress for fancy occasions. The closet integrates a few drawers on the bottom, on top of which sit a bunch of pairs of shoes to match your outfits, all flats because fuck heels. You can look cute without killing your feet.\n\nOpen one of the drawers?\n\n*<<i Top ellieApt-drawer1>>\n*<<i Middle ellieApt-drawer2>>\n*<<i Bottom ellieApt-drawer3>>
<<if !$ev.pantyRaid>>\s\nSocks and underwear. Congratulations, you just panty raided yourself. Gold star.<<set $ev.pantyRaid = true>>\n\n*<<ib ellieApt-closet>>\s\n<<else>>\s\nYou don't open it because you don't need anything in there. You're not going to grind gold stars by repeatedly panty raiding yourself. Not in this game!\n\n*<<ib ellieApt-closet>>\s\n<</if>>
<<if !$ev.ellieBlinged>>\s\nAll of your accessories. Namely, alice bands matching all of your <<i "outfits" "ellieApt-outfits">>, a gold chain necklace, a pair of simple gold ring earrings, a pair of gold swirly armbands, and your favorite: a clip with a white flower and three feathers attached, that attaches to an alice band. It really pulls the whole adorabohemian look together.\n\n*<<ib ellieApt-closet>>\n*<<i "Wear 'em!" ellieApt-accessorize>>\n<<else>>\s\nThis is where you would normally keep all your accessories, but you're wearing them, so there are just a bunch of cute alice bands.\n\n*<<ib ellieApt-closet>>\n*<<i "Unwear 'em!" ellieApt-deAccessorize>>\n<</if>>
You know, come to think of it, most of your outfits are palette swaps of your favorite teal/white outfit. Almost like you're a character out of a fighting game or something. Haha, such a silly thought!\n\n*<<ib ellieApt-drawer2>>
You put on an alice band matching your current outfit, the necklace, the earrings, the armbands, and the flower/feather clip. Lookin' even cuter now! c:<<set $ev.ellieBlinged = true>>\n\n*<<ib ellieApt-closet>>
The alice band in your hair, your various shinies, and your feathery flower clip go back into the drawer.<<set $ev.ellieBlinged = false>>\n\n*<<ib ellieApt-closet>>
<<if !$loot[1]>>\s\nOh dayum, SCORE! There are four Apple Gels, two Orange Gels, and a Life Bottle!\n\n#<<i "Leave them there." ellieApt-closet>>\n#<<i "TAKE IT AND TAKE IT AND TAKE IT AND TAKE IT AND TAKE IT ALL" ellieApt-items1>>\n<<else>>\s\nThis is where the sweet loot you found was. But it's not anymore 'cos you took it!\n\n*<<ib ellieApt-closet>>\s\n<</if>>
Jesus fuck, calm down! <<getMsg it all>><<run\n itmGet("appleGel", 4);\n itmGet("orangeGel", 2);\n itmGet("lifeBottle");\n $loot[1] = true;\n>>\n\n*<<ib ellieApt-closet>>
<<append ".passage .footer">>\s\n<div id="statsBox">\s\n</div>\s\n<div id="menuBox">\s\n</div>\s\n<</append>>\s
You are a young lady, asleep and tucked cozily in your bed. Sunlight is creeping through the blinds in front of the window. Your chin-length light brown hair is slightly tousled from the faint tossing and turning you did in your sleep. You clutch your favorite plush tightly, an adorable light blue bunny rabbit named Nigel. A faint smile is on your face. You must be having a good dream. Or maybe that's just how you are.\n\n#<<c "Surely nothing will interrupt your peaceful slumber!" ellieIntro2>>
<span class="sbahj">THINK AGAIN NUMPNUTS</span>\n\n<span style='font-size: 2em;'>EEEH EEEH EEEH EEEH EEEH EEEH EEEH\nEEEH EEEH EEEH EEEH EEEH EEEH EEEH\nEEEH EEEH EEEH EEEH EEEH EEEH EEEH\nEEEH EEEH EEEH EEEH EEEH EEEH EEEH</span>\n\nuuuuuggghhhh. Fiddlesticks. The alarm. Your smile breaks as your pleasant sleep is interrupted. You don't wanna wake up...\n\n#<<c "Turn that shit off!" ellieIntro3>>
Your arm kind of shoots out to the side, in the general direction of the small side table beside your bed. Flail. Flail. Flaaaail. ''Smack!'' You think you hit a button.\n\nMust have been the right one because it's not making that infernal racket anymore.\n\n#<<c "Wake up already." ellieIntro4>>
You sit up and yawn, stretching out one arm while the other briefly continues to clutch your bunny. Bright teal eyes finally open up, and the bunny is relinquished onto the bed so that you can wipe the sleep from your eyes. You look over to your alarm clock, and flip the switch to turn it off completely. You're up. It's okay now.\n\nAnother yawn, and you toss off the covers, getting out of bed. Even though you're 22 years old and have a job like a responsible adult, it is the weekend and you're not sure why you're not sleeping in since you don't have to go in. You already have a name, but why doesn't the player take a guess at it anyways?\n\n<<textbox "$nameAttempt" "">>\n\n#<<c "That's it, right?" ellieIntro5>>
<<nobr>><<if $nameAttempt.toLowerCase().match(/^ellie$|^ellie luisante$/)>>\nOh, hey, you're right, good job!\n<<elseif $nameAttempt == "">>\nWhat, you think you don't have a name? Get outta here with that crap.\n<<else>>\nNo, your name is not <<print $nameAttempt>>. You're wrong and bad and you should feel bad.\n<</if>><</nobr>>\n\nYour name is ''Ellie Luisante''. You have a variety of interests, including but not limited to plushies and other cute things, books, art, and some video games. You are faintly nearsighted, so you wear glasses to see clearer. You typically prefer them rimless. You know how to fight a little bit. You dabble in fighting artes using a ''short sword and shield''. You're certainly no warlady, but you can protect yourself.\n\nYour sense of fashion is simple. You typically like to wear cutesy graphic t-shirts paired with long, flowing skirts. The shirts tend to have stuff like hearts and bunnies and flowers on them. The skirts are usually a solid color with a large patterned band near the hem. You do like to accessorize to spice up your otherwise straightforward style.\n\n#<<g "Okay, cool. Let's get this thing started." ellieApt>>\n#<<i "Hey, you know, I'd rather don't." ellieIntro-smartass>>
Listen here, you little shit!\nYou're gonna play this game and you're gonna like it!
/%%%%%%%%%%%%%%%%%%%%%%%%%\n% First convo w/ Serge %\n%%%%%%%%%%%%%%%%%%%%%%%%%/
<<set $ev.convSerge01 = []; $ev.convSerge01[0] = 0>>\s\nYou take a seat, open the chat window, and look at the messages he's sent thus far.\n\n<span class="pchum">taciturnZephyr started pestering sillyFlower at 9:50 AM\n\nTZ: Hey, Ellie...\nTZ: It happened again. :(\nTZ: Just shoot me a message when you wake up, you know, if you're still willing to talk about it.\nSF: awww, serge!\nSF: its okay, ill still talk to you about it. c:</span>\n\n"It" happened again. He has been claiming that some malcontent has been kidnapping him, doing experiments on him, and returning him in an unconscious state. You don't have any reason to disbelieve him; lying about something this severe to get attention would be reprehensible. He's not like that. But you're not completely naive. The sensible part of you is skeptical. You usually just tell it to shut the fuck up.\n \nIt goes without saying that you're going to talk to him about it.\n\n<<did convSerge01-choices>>
<span class="actArea"><<if $ev.convSerge01[0] < 5>>What will you ask <<if $ev.convSerge01[0] == 0>>first<<else>>next<</if>>?\n\n<span class="pchum">\s\n<<if !$ev.convSerge01[1]>>\s\n#<<c '"what did he do to you?"' convSerge01-ask1>><</if>>\s\n<<if !$ev.convSerge01[2]>>\s\n#<<c '"what happened before he got you?"' convSerge01-ask2>><</if>>\s\n<<if !$ev.convSerge01[3]>>\s\n#<<c '"did you see who got you?"' convSerge01-ask3>><</if>>\s\n<<if !$ev.convSerge01[4]>>\s\n#<<c '"do you know where you were taken?"' convSerge01-ask4>><</if>>\s\n<<if !$ev.convSerge01[5]>>\s\n#<<c '"why do you think he is doing this?"' convSerge01-ask5>><</if>>\s\n</span><<else>>Enough of this. It's time to help him in the only way you know how.\n\n<span class="pchum">\s\n#<<c '"you need snuggles, right the hell now."' convSerge01-snuggles>>\n</span><</if>></span>
<<set $ev.convSerge01[1] = true; $ev.convSerge01[0]++>>\s\n<span class="pchum">SF: what did he do to you?</span> you ask, biting your lip subconsciously out of worry.\n\n<span class="pchum">TZ: Well, after I woke up in some dark room...\nTZ: I don't know what he did to trigger it, but...\nTZ: I could feel all this poisonous power surging out of me.\nTZ: That asshole kept talking all this technobabble...\nTZ: I could feel it squirming and writhing. Like he was...\nTZ: ...messing with it, or configuring it, or something...\nTZ: When it was over, I was exhausted, but I tried to blast him with some of the new powers he gave me. I missed.\nTZ: Then he stuck me with that syringe again and I passed out.\nTZ: I woke up in my bed.\nSF: :c</span>\n\nIt sounds like a horrible ordeal. You're still concerned for his present well-being, so...\n\n<span class="pchum">SF: how are you feeling now?\nTZ: Kinda sore. Scared.\nTZ: Of him. Of what's growing inside me.\nSF: awww, sweetie...</span>\n\nIt makes your heart ache to imagine him enduring such suffering.\n\n<<did convSerge01-choices>>
<<set $ev.convSerge01[2] = true; $ev.convSerge01[0]++>>\s\n<span class="pchum">SF: what happened before he got you?\nTZ: Well, I was just walking home from work.\nTZ: I didn't feel anything unusual at first...\nTZ: But then I felt like I was being followed.\nTZ: As I'm sure you can predict, I got hyper-paranoid.\nTZ: I was looking around like crazy, scrutinizing all the shadows...\nTZ: I didn't even see it coming when I got whacked in the back of the head.\nTZ: I lost consciousness immediately, then I woke up in the dark.\nSF: oh no...</span>\n \nWow. That is one shitty break. It sounds strikingly similar to the other incidents. All you can do is feel for him, unfortunately. And you feel quite a bit.\n\n<<did convSerge01-choices>>
<<set $ev.convSerge01[3] = true; $ev.convSerge01[0]++>>\s\n<span class="pchum">SF: did you see who got you?\nTZ: No... It was so dark in that room that I couldn't even see myself.\nTZ: I tried to get a look at him by attacking him with that power he gave me when he talked...\nTZ: But the only thing I illuminated with it was the stone floor I was on.\nSF: what? how can that be?\nTZ: It was strange... like the room was sucking away light.\nSF: that's a thing?\nTZ: This is Rhy'Din. Everything is a thing here.\nTZ: It was done by either magic, technology, or both. I don't know which.\nSF: hrm... >:?</span>\n\nThe situation is no more elucidated than before. You already knew the perpetrator had access to magic and/or technology. How else would he be doing the things he's done to Serge thus far? Ugh.\n\n<<did convSerge01-choices>>
<<set $ev.convSerge01[4] = true; $ev.convSerge01[0]++>>\s\n<span class="pchum">SF: do you know where you were taken?\nTZ: Sadly, I have not a single clue.\nTZ: I was out for the entire trip. Both trips, actually.\nTZ: Ugh... the most unsettling thing...\nTZ: Is that he knows where I live and can take me back to my bed.\nTZ: I have no idea where he is, but he knows where I am...\nSF: :c\nTZ: Anyways... no windows in the room at all that I could see. The stone floor I briefly saw wasn't like, exotic or anything, just boring old concrete.\nTZ: I checked myself for any sort of evidence afterward, but there was nothing to be found.\nTZ: The wound from the syringe he used to put me back out wasn't even there anymore.\nSF: this whole thing sucks so much. :c\nTZ: Preaching to the choir on that one.</span>\n\nA whole lot of no info there.\n\n<<did convSerge01-choices>>
<<set $ev.convSerge01[5] = true; $ev.convSerge01[0]++>>\s\n<span class="pchum">SF: why do you think he is doing this?\nTZ: I have my theories, but nothing to really confirm them.\nSF: well?\nTZ: Whatever it is he's doing, it's making me hate much more intensely.\nTZ: It's like... I don't feel any more hate than usual during the day.\nTZ: But then something will piss me off.\nTZ: And then I absolutely despise the fact that the thing that pissed me off exists.\nTZ: I hate the feeling.\nTZ: It's like... like a poison that erupts from the very core of my being.\nTZ: It spreads out and corrupts me, it befouls my heart and mind.\nTZ: I feel physically ill with it.\nSF: that's so horrible...\nSF: i'm so sorry, sweetie...\nTZ: Thanks for the sentiments...</span>\n\nYou wish you could do more than just feel for him.\n\n<<did convSerge01-choices>>
<<set $ev.convSerge01[6] = true;>>\s\n<span class="pchum">TZ: ???\nSF: i don't really completely understand what's going on.\nSF: and i don't think i can truly help you.\nSF: but you are hurting.\nSF: and that makes me hurt.\nSF: so i gotta do something.\nTZ: Ellie...\nSF: all i have to give you are my hugs.\nSF: so meet me at the inn.\nSF: and i will give you all of the snuggles.\nSF: you will come into exhaustive possession of the snuggles.\nTZ: I... I would really like that.\nTZ: Thank you, Ellie.\nSF: you're very welcome. see you there! <3\nTZ: <3</span>\n\nYou know what you have to do.\n\n#<<g "Get off the computer." ellieApt>>
Shine
TiZ
<<display ellieIntro1>>
/% Inventory %/\n<<widget invGetMsg>><<print invGetMsg($args.join(" "))>><</widget>>\n<<widget objGet>><<run objGet($args[0], $args[1])>><</widget>>\n<<widget itmGet>><<run itmGet($args[0], $args[1])>><</widget>>\n<<widget accGet>><<run accGet($args[0], $args[1])>><</widget>>\n\n<<widget getMsg>><<print invGetMsg($args.join(" "))>><</widget>>\n<<widget objGetMsg>><<getMsg $args[0]>><<objGet $args[1] $args[2]>><</widget>>\n<<widget itmGetMsg>><<getMsg $args[0]>><<itmGet $args[1] $args[2]>><</widget>>\n<<widget accGetMsg>><<getMsg $args[0]>><<accGet $args[1] $args[2]>><</widget>>\n\n<<widget invDropMsg>><<print $player.invDropMsg($args.join(" "))>><</widget>>\n<<widget objDrop>><<run objDrop($args[0], $args[1])>><</widget>>\n<<widget itmDrop>><<run itmDrop($args[0], $args[1])>><</widget>>\n<<widget accDrop>><<run accDrop($args[0], $args[1])>><</widget>>\n\n<<widget dropMsg>><<print $player.invDropMsg($args.join(" "))>><</widget>>\n<<widget objDropMsg>><<dropMsg $args[0]>><<objDrop $args[1] $args[2]>><</widget>>\n<<widget itmDropMsg>><<dropMsg $args[0]>><<itmDrop $args[1] $args[2]>><</widget>>\n<<widget accDropMsg>><<dropMsg $args[0]>><<accDrop $args[1] $args[2]>><</widget>>
#passages { border-left: none; }\n.passage ul { margin: 0px; padding: 0px; }\nbody {\n margin: 24px 160px 24px 20px;\n overflow-y: scroll;\n background-size: cover;\n background-position: center;\n background-attachment: fixed;\n}\n#ui-bar {\n top: 24px;\n left: 20px;\n border-right: none;\n padding: 4px 8px;\n border-radius: 8px;\n background-color: hsl(188, 50%, 1%);\n background-color: hsla(188, 50%, 2%, 0.75);\n}\n.passage, #dsPopupBox {\n font-size: 11pt;\n line-height: 1.5;\n transition: none;\n -webkit-transition: none;\n}\ndiv.body.content {\n padding: 4px 8px;\n border-radius: 8px;\n background-color: hsl(188, 50%, 1%);\n background-color: hsla(188, 50%, 2%, 0.75);\n}\na {\n font-weight: normal;\n color: hsl(188, 100%, 90%);\n text-decoration: none !important;\n text-shadow: 0 0 4px hsl(188, 100%, 45%);\n text-shadow: 0 0 4px hsla(188, 100%, 90%, 0.75);\n}\n.passage a, #dsPopupBox a {\n font-weight: normal;\n}\na:hover, a:focus {\n color: hsl(188, 100%, 80%);\n text-shadow: 0 0 4px hsl(188, 100%, 80%);\n border-radius: 4px;\n background-color: hsla(188, 100%, 80%, 0.1);\n}\n\n/* Pesterchum conversation class */\n.pchum {\n font-family: monospace;\n}\n\n/* Did you actually think a story making Homestuck references\nwould actually skip on referencing SBAHJ? Please. */\n.sbahj {\n text-align: center;\n color: hsl(60, 100%, 50%);\n font-family: "Comic Sans MS";\n}\n\n/* Popup box customizations */\n#dsPopupBox {\n background-color: hsl(188, 50%, 1%);\n background-color: hsla(188, 50%, 2%, 0.75);\n}\n#dsPopupClose a {\n background-color: hsl(188, 25%, 10%);\n}\n\n/* Action area customizations */\n.actArea li a, .body.content li a, #dsPopupContent li a {\n background-color: hsl(188, 25%, 10%);\n}
// Gald functions.\nwindow.gldGet = function(amt) { state.active.variables.inv.gld += amt; }\nwindow.gldDrop = function(amt) { state.active.variables.inv.gld -= amt; }\nwindow.gldHas = function(amt) { return state.active.variables.inv.gld; }\n\n// Core inventory handler functions.\nwindow.invGet = function(sub, itm, count) {\n count = typeof count !== "undefined" ? count : 1;\n if (state.active.variables.inv[sub][itm] !== undefined)\n state.active.variables.inv[sub][itm] += count;\n else\n state.active.variables.inv[sub][itm] = count;\n}\nwindow.invDrop = function(sub, itm, count) {\n count = typeof count !== "undefined" ? count : 1;\n if (state.active.variables.inv[sub][itm] !== undefined)\n state.active.variables.inv[sub][itm] -= count;\n else\n state.active.variables.inv[sub][itm] = 0;\n}\nwindow.invCount = function(sub, itm) {\n return state.active.variables["inv"][sub][itm];\n}\n\n// An object is the same as a key item, basically.\nwindow.objGet = function(itm, count) { invGet("obj", itm, count); }\nwindow.objDrop = function(itm, count) { invDrop("obj", itm, count); }\nwindow.objCount = function(itm) { return invCount("obj", itm); }\nwindow.objHas = function(itm) { return invCount("obj", itm) > 0; }\n\n// An item is a consumable, like Apple Gels.\nwindow.itmGet = function(itm, count) { invGet("itm", itm, count); }\nwindow.itmDrop = function(itm, count) { invDrop("itm", itm, count); }\nwindow.itmCount = function(itm) { return invCount("itm", itm); }\nwindow.itmHas = function(itm) { return invCount("itm", itm) > 0; }\n\n// Accessories can modify any stat, and are equippable by anyone.\nwindow.accGet = function(itm, count) { invGet("acc", itm, count); }\nwindow.accDrop = function(itm, count) { invDrop("acc", itm, count); }\nwindow.accCount = function(itm) { return invCount("acc", itm); }\nwindow.accHas = function(itm) { return invCount("acc", itm) > 0; }\n\n// A weapon has further sub-arrays because each weapon can be used\n// by only one character. There is no count parameter for get because you will\n// basically never give more than one weapon at a time in any situation.\nwindow.wpnGet = function(char, itm) {\n state.active.variables.inv.wpn[char][itm]++;\n}\nwindow.wpnDrop = function(char, itm, count) {\n state.active.variables.inv.wpn[char][itm] -= count;\n}\nwindow.wpnCount = function(char, itm) {\n return state.active.variables.inv.wpn[char][itm];\n}\nwindow.wpnHas = function(itm) { return wpnCount(char, itm) > 0; }\n\n// Show player's get msg.\nwindow.invGetMsg = function(loot) {\n var player = state.active.variables.player;\n var retval = (player.invUsed ? player.invGetMsg :\n player.invFirstGet).replace("%loot%", loot);\n player.invUsed = true;\n return retval;\n};
characters.ellie = new Character("Ellie Luisante", "f");\nellie.invItem = "Purse of Holding";\nellie.invIn = "in your Purse of Holding";\nellie.invGet = "You snatch %loot% up into your Purse of Holding.";\nellie.invFirstGet = "You snatch %loot% up into your Purse of Holding. You figure that if the purse and clothing conspiracy is going to keep you from having practical pockets, then you might as well have a purse with infinite space. The item dimension it links to gives you just that. This is better than pockets anyway.";\n\n// Combat stats.\nellie.baseHP = 1050;\nellie.baseStr = 90;\nellie.baseSpi = 75;\nellie.baseAtk = 90;\nellie.baseDef = 110;\nellie.baseAgi = 125;\n\n// Story stats.\nellie.pul = 200;\nellie.asp = 25;\nellie.sop = 120;\nellie.pro = 110;\nellie.her = 100;\nellie.spi = 100;\nellie.cun = 80;
// The reason objects don't have programmatic objects associated with them is\n// because nearly all of their functionality is in the passages. Whatever it is\n// they do, they do it in the passages. So all they need here are their names\n// for the inventory.\nvar objNames = {\n "nigel" : "Nigel",\n "nadine" : "Nadine",\n "pyralspite" : "Pyralspite",\n "lemonsnout" : "Lemonsnout",\n "ellieCpu" : "Ellie's Laptop",\n}\nfunction objName(itm) {\n return objNames[itm];\n}\n\n// Everything else is different.\nvar items = {\n /*\n "item" : {\n // Undefined properties are unused.\n "name" : "Item's Name",\n "desc" : "Item's description",\n "target" : "ally", "allyKO", "enemy", "allyAll", or "enemyAll"\n "usable" : "field", "battle", or "all",\n "hpGain" : percentage of HP to gain,\n "tpGain" : static TP increase,\n "bgGain" : static Burst Gauge increase,\n "revive" : true or false to revive from KO,\n "damage" : damage to deal to enemy,\n "dType" : "phys", "mag", or "hybrid",\n "dElem" : "fwaeld", string containing attack elements,\n }\n */\n "appleGel" : {\n "name" : "Apple Gel",\n "desc" : "Restores 30% HP to ally.",\n "target" : "ally",\n "hpGain" : 0.3,\n },\n "lemonGel" : {\n "name" : "Lemon Gel",\n "desc" : "Restores 60% HP to ally.",\n "target" : "ally",\n "hpGain" : 0.6,\n },\n "orangeGel" : {\n "name" : "Orange Gel",\n "desc" : "Gives 25 TP to ally.",\n "target" : "ally",\n "tpGain" : 25,\n },\n "pineGel" : {\n "name" : "Pine Gel",\n "desc" : "Gives 50 TP to ally.",\n "target" : "ally",\n "tpGain" : 25,\n },\n "melangeGel" : {\n "name" : "Melange Gel",\n "desc" : "Gives 30% HP and 25 TP to ally.",\n "target" : "ally",\n "hpGain" : .3,\n "tpGain" : 25,\n },\n "miracleGel" : {\n "name" : "Miracle Gel",\n "desc" : "Gives 30% HP and 25 TP to ally.",\n "target" : "ally",\n "hpGain" : .3,\n "tpGain" : 25,\n },\n "lifeBottle" : {\n "name" : "Life Bottle",\n "desc" : "Revives KO'd ally and restores 25% HP.",\n "target" : "allyKO",\n "hpGain" : 0.25,\n "revive" : true,\n },\n "elixir" : {\n // Behavior consistent with Tales of Xillia's elixir.\n "name" : "Elixir",\n "desc" : "Revives and gives 100% HP and 100 TP.",\n "target" : "ally",\n "hpGain" : 1,\n "tpGain" : 100,\n "revive" : true,\n },\n}\nfunction itmName(itm) {\n return items[itm]["name"];\n}
var weapons = {};\nweapons.ellie = {\n "flowerBlade" : {\n "name" : "Flower Blade",\n "desc" : "A quaint short sword with a handguard styled like a flower, paired with a shield also styled like a flower.",\n },\n "omegaElk" : {\n "name" : "Omega Sword & Elk Shield",\n "desc" : "A short sword, wider at mid-blade, paired with a sturdy blue shield with an elk emblem.",\n },\n "digammaNemea" : {\n "name" : "Digamma Sword & Nemea Shield",\n },\n "kritaYuga" : {\n "name" : "Krita-Yuga",\n },\n "tectrixcalibur" : {\n "name" : "Tectrixcalibur",\n },\n};
function Character(fullName, gender) {\n this.gender = gender;\n this.fullName = fullName;\n this.name = fullName.split(" ")[0];\n this.id = this.name.toLowerCase();\n this.lastName = fullName.split(" ")[1];\n this.equipment = [];\n}\n\n// Standard story properties.\nCharacter.prototype.id = "";\nCharacter.prototype.name = "";\nCharacter.prototype.lastName = "";\nCharacter.prototype.fullName = "";\nCharacter.prototype.gender = "m";\nCharacter.prototype.invItem = "Bag of Holding";\nCharacter.prototype.invIn = "in your Bag of Holding";\nCharacter.prototype.invUsed = false;\nCharacter.prototype.invGetMsg = "You put %loot% in your Bag of Holding.";\nCharacter.prototype.invFirstGet = "You put %loot% in your ordinary Bag of Holding.";\n\n// Base stats.\nCharacter.prototype.baseMaxHP = 1200;\nCharacter.prototype.baseStr = 100;\nCharacter.prototype.baseSpr = 100;\nCharacter.prototype.baseAtk = 100;\nCharacter.prototype.baseDef = 100;\nCharacter.prototype.baseAgi = 100;\nCharacter.prototype.scalar = 1.04;\nCharacter.prototype.scalarAgi = 1.005;\n\n// Story stats.\nCharacter.prototype.pul = 100;\nCharacter.prototype.asp = 100;\nCharacter.prototype.sop = 100;\nCharacter.prototype.pro = 100;\nCharacter.prototype.her = 100;\nCharacter.prototype.spi = 100;\nCharacter.prototype.cun = 100;\n\n// Functions for retrieving modified values.\nCharacter.prototype.getLevel = function() {\n return state.active.variables.level;\n};\nCharacter.prototype.getStat = function(stat) {\n var retval;\n if (this["scalar" + stat])\n retval = this["base" + stat] * this["scalar" + stat] ^ this.getLevel();\n else\n retval = this["base" + stat] * this.scalar ^ this.getLevel();\n for (e in this.equipment)\n retval *= e["mult" + stat];\n for (e in this.equipment)\n retval += e["add" + stat];\n return retval;\n}\nCharacter.prototype.getMaxHP = function() { return this.getStat("MaxHP"); };\nCharacter.prototype.getStr = function() { return this.getStat("Str"); };\nCharacter.prototype.getSpr = function() { return this.getStat("Spr"); };\nCharacter.prototype.getAtk = function() { return this.getStat("Atk"); };\nCharacter.prototype.getDef = function() { return this.getStat("Def"); };\nCharacter.prototype.getAgi = function() { return this.getStat("Agi"); };\n\nwindow.characters = {};
/% Initialize the inventory.\nThe reason that all item types are contained within one object is because\nthere are parts of the game where you can't access the main inventory. So\nthe inventory object can be backed up so a new one can be created. %/\n<<remember $inv = {\n "gld" : 0,\n "obj" : {},\n "itm" : {},\n "acc" : {},\n "wpn" : {\n "ellie" : {}, // Short Sword & Shield\n "serge" : {}, // Katana\n "grimSerge" : {}, // Katana\n "brutus" : {}, // Great Ax\n "pixie" : {}, // Electric Guitar\n "neo" : {}, // Sword & Shield\n "jin" : {}, // Gloves\n "kersh" : {}, // Dual Pistols\n },\n};\n$ev = {};\n$loot = [];\n>>\n\n/% Initialize player objects. %/\n<<remember $chars = {\n "ellie" : {\n "id" : "ellie",\n "name" : "Ellie",\n "lastName" : "Luisante",\n "fullName" : "Ellie Luisante",\n "gender" : "f",\n "invItem" : "Purse of Holding",\n "invIn" : "in your Purse of Holding",\n "invUsed" : false,\n "invGetMsg" : "You snatch %loot% up into your Purse of Holding.",\n "invFirstGet" : "You snatch %loot% up into your Purse of Holding. You figure that if the purse and clothing conspiracy is going to keep you from having practical pockets, then you might as well have a purse with infinite space. The item dimension it links to gives you just that. This is better than pockets anyway.",\n },\n "serge" : {\n "id" : "serge",\n "name" : "Serge",\n "lastName" : "Tenebra",\n "fullName" : "Serge Tenebra",\n "gender" : "m",\n "invItem" : "Backpack of Holding",\n "invIn" : "in your Backpack of Holding",\n "invUsed" : false,\n "invGetMsg" : "You put %loot% into your Backpack of Holding.",\n "invFirstGet" : "You put %loot% into your Backpack of Holding, which somehow always remains very light and wearable despite the fact that it can have tons of shit in it.",\n },\n "brutus" : {\n "id" : "brutus",\n "name" : "Brutus",\n "lastName" : "Kaiser",\n "fullName" : "Brutus Kaiser",\n "gender" : "m",\n "invItem" : "Butler of Holding",\n "invIn" : "with your Butler of Holding",\n "invUsed" : false,\n "invGetMsg" : "You give %loot% to your Butler of Holding.",\n "invFirstGet" : "You give %loot% to your Butler of Holding, who appears from a portal in spacetime, and then returns whence he came with the entrusted loot.",\n },\n "pixie" : {\n "id" : "pixie",\n "name" : "Pixie",\n "lastName" : "Strider",\n "fullName" : "Daria \s"Pixie\s" Strider",\n "gender" : "f",\n "invItem" : "Groupies of Holding",\n "invIn" : "with your Groupies of Holding",\n "invUsed" : false,\n "invGetMsg" : "You give %loot% to one of your Groupies of Holding.",\n "invFirstGet" : "You give %loot% to one of your Groupies of Holding, who come out of nowhere and are excessively eager to hold anything you touch.",\n },\n};\n$player = $chars.ellie;\n>>
/%%%%%%%%%%%%%%%%%%%%\n% Nigel the Bunny %\n%%%%%%%%%%%%%%%%%%%%/
This is your wonderful blue bunny plush, Nigel. He is very fluffy and snuggly! Your best friend bought him for you a long time ago and you have cherished him ever since. He's kind of old and very well loved, but good materials and good construction mean he's not particularly worn. \n\n*<<i Hug nigel-hug>>\n<<if !objHas("nigel")>>*<<i Get nigel-get>><</if>>\s
You lovingly hug the bunny and nuzzle your face against his. Yay!\n\n*<<ib nigel>>
<<objGetMsg him nigel>><<disprepl ellieApt-bunnies ellieApt>>\s\n<<if $player.id == "ellie">>\n\n<center><span class="sbahj">the cute lady\nHASS the bunny</span></center><</if>>\s\n\n*<<ib nigel>>
/%%%%%%%%%%%%%%%%%%%%%\n% Nadine the Bunny %\n%%%%%%%%%%%%%%%%%%%%%/
This is a pink bunny plush you generally regard as being Nigel's girlfriend. But to be completely honest... you have no idea where she came from! You just kind of... discovered that you had her one day, and have held onto her ever since.\n\n*<<i Hug nadine-hug>>\n<<if !objHas("nadine")>>*<<i Get nadine-get>><</if>>\s
You give the pink bunny a loving, squeezy snuggle. Yay!\n\n*<<ib nadine>>
<<objGetMsg her nadine>><<disprepl ellieApt-bunnies ellieApt>>\n\n*<<ib nadine>>
/%%%%%%%%%%%%%%%\n% Pyralspite %\n%%%%%%%%%%%%%%%/
Pyralspite is a white scalemate with red button eyes. He is your partner in justice and you would trust your back to him in any sticky situation!\n\n<<if passage() == "ellieApt">>*<<i <== ellieApt-scalemates>><</if>>\s\n*<<i Hug pyralspite-hug>>\n<<if !objHas("pyralspite")>>*<<i Get pyralspite-get>><</if>>\s
You give your partner in justice a nice, big hug! Yay!\n\n*<<ib pyralspite>>
<<objGetMsg him pyralspite>>\n\n*<<ib pyralspite>>
/%%%%%%%%%%%%%%%%%%%%%%%\n% Senator Lemonsnout %\n%%%%%%%%%%%%%%%%%%%%%%%/
Senator Lemonsnout is a yellow scalemate with cyan button eyes. He's a treacherous asshole and that is basically all there is to say about him.\n\n<<if passage() == "ellieApt">>*<<i <== ellieApt-scalemates>><</if>>\s\n*<<i Hug lemonsnout-hug>>\n<<if !objHas("lemonsnout")>>*<<i Get lemonsnout-get>><</if>>\s
You treat the dastardly senator to another bout of huggle therapy! That'll teach him! Heehee~\n\n*<<ib lemonsnout>>
<<objGetMsg him lemonsnout>>\n\n*<<ib lemonsnout>>
/%%%%%%%%%%%%%%%%%%\n% Tanglebuddies %\n%%%%%%%%%%%%%%%%%%/
Oh man, just look at this mess. All of your squiddle tanglebuddies have gone and gotten their tangle on! You pull a pair apart and giggle as they snap back together.\n\n*<<i Hug tanglebuddies-hug>>\n*<<i Get tanglebuddies-get>>
You scoop up a mess of squiddles and hug them all with a goofy smile. Yay!\n\n*<<ib tanglebuddies>>
No way, you're keeping them right where they are. They'll get all tangled up with the other items <<print $player.invIn>>!\n\n*<<ib tanglebuddies>>
/%%%%%%%%%%%%%%%%%%%\n% Ellie's Laptop %\n%%%%%%%%%%%%%%%%%%%/
It's a decent little laptop. You tend to prefer form and frugality when it comes to your computers since you play your games on consoles.\n\n*<<i Use ellieCpu-use>>\n*<<i Get ellieCpu-get>>
You take a look at what's going on up in there. Looks like you have a little bit of email. Your operating system wants you to update. And of course, the <<i Pesterchum about-pchum>> icon is blinking mercilessly at you. Someone is trying to talk to you and you are pretty sure you know who.\n\n*<<ib ellieCpu>>\n*<<i Mail ellieCpu-mail>>\n*<<i Update ellieCpu-update>>\n*<<i Pesterchum ellieCpu-pchum>>
Pesterchum is a strange little chat protocol that suddenly appeared in Rhy'Din and picked up steam over the past few years. You think you remember hearing from one of your friends that it is actually built on top of an older protocol called IRC, and its operation is distributed across a great deal of servers worldwide.\n\nIt is surprisingly ubiquitous now; a great deal of people actually have chumhandles, even people you wouldn't expect to. It took the place of SMS very quickly; a chumhandle that can be reached on any number and variety of devices is easier to work with than a phone number that can only be used with one device.\n\nYour own chumhandle is sillyFlower. All chumhandles are the same format: camelCase, one word. They appear in chat logs--or pesterlogs--as the handle's two initials. So you would appear as SF. There are some very special people that get to subvert this convention; basically just civil leaders and protocol maintainers.\n\n*<<ib ellieCpu-use>>
You just have a few bits of junk mail and a few notifications from <<i VisageTome about-visageTome>>. Nothing really to note here.\n\n*<<ib ellieCpu-use>>
A social network website. You can connect to friends, make posts on each others' ramparts, share photos, share links to other webpages, etc etc etc. It tried to start up its own chat protocol, but it didn't take off. Pesterchum was just too good to dethrone.\n\n*<<ib ellieCpu-mail>>
No. //Hell no.// If you do that, it will restart and take forever to get done. Forget that.\n\n*<<ib ellieCpu-use>>
You are being pestered by taciturnZephyr. That handle belongs to your best friend, <<i "Serge Tenebra" about-serge>>. You should probably answer him.\n\n*<<ib ellieCpu-use>>\n*<<g Answer convSerge01>>
''Serge Tenebra'' is your best friend. He's about your age, just a smidge younger. You love him to death. But not as much as he loves you. Thanks to your ''keen emotional perception'', you are wise to the fact that he is in love with you, even though he can't bring himself to say it. It may be for the best, because you do love him, but you're not in love with him. Your relationship is very healthy otherwise, so it doesn't bother you.\n\nHe's seemed kind of off lately. He's been talking about some disturbing stuff happening to him, and you don't know what to make of it. He could be contacting you because more of the bad stuff happened. You won't know unless you answer him.\n\n*<<ib ellieCpu-pchum>>
You don't feel like it. Or rather, I don't feel like it. Not yet.\n\n*<<ib ellieCpu>>
Background Image library for Sugarcube.\n\nThis library is very, very simple. Basically all it does is whenever there is a bgimg tag on a passage, it will set the background image to be setup.bgImgPath + "/" + passage() + ".jpg". The default path is "img/passages". Leave off the trailing slash. Whenever the background is set, it is saved in the active variables, to be preserved between refreshes. The background can be explicitly cleared with a nobg tag.
setup.bgImgPath = "img/passages";\nprerender.libbgimg = function(a) {\n var v = state.active.variables;\n if (this.tags.indexOf("bgimg") >= 0) {\n v.libbgimg_title = this.title;\n } else if (this.tags.indexOf("nobg") >= 0) {\n delete v.libbgimg_title;\n }\n \n if (v.libbgimg_title) {\n $("body").css("background-image",\n "url(" + setup.bgImgPath + "/" + v.libbgimg_title + ".jpg)");\n }\n};
setup.libds = {\n "interactScroll" : true,\n "actContScroll" : true,\n "interactBackText" : "<==",\n "useAliases" : true,\n "useShortAliases" : true,\n "useLinkAliases" : true,\n};
Dynamic Story library for SugarCube.\n\nAdds the ability to have pop-up passages, passage segments that can refresh when triggered by other passages or actions, and passages that are appended to the current passage. This lets you choose between stretchtext, pop-up text, and one-page text in various situations as you'd like.\n\nIt also creates special link styles for ordered and unordered lists. An ordered list (#) has its contents stacked vertically, and an unordered list (*) has them side-by-side. These styles apply to the main content area (.body.content) and the popup box content area (#dsPopupContent), but you can create an element of class .actArea to get the same styles and functions in case you need to put it somewhere else. In addition, an element of class actArea will be removed by the actCont widget. So if you want to ask the reader a question before presenting options, both the question and options will be removed if they are wrapped in such an element (span would be ideal).\n\nThis makes heavy use of extra passages to make things work, so it's not really suitable for Twine, since it will get out of hand very fast. If Twine comes up with some sort of folder or grouping mechanism, it'll work then. But until then, you're best off using this with Twee or Tweego.\n\nAdds the following macros:\n interact / int / i: <<i text passage>>\n When clicked, pops up the interaction window with the specified passage, or replaces it with the specified passage. Scrolls page to the bottom automatically unless setup.libds.interactScroll == false.\n intBack / iback / ib: <<ib passage>>\n Create an interaction to the specified passage. The text is determined by the setup.libds.interactBackText variable, whose default is "<==".\n actCont / acon / c: <<cc text passage>>\n A click macro that removes the action area then appends the specified passage to the current passage. Scrolls to the bottom unless setup.libds.actContScroll == false.\n go / g / l: <<g text passage disable>>\n Alias for link. Lets you code your various link types consistently.\n dispid / did: <<did passage>>\n Displays the specified passage in a span whose id matches the passage name.\n disprepl / drep: <<drep passage>>\n Replaces the contents of span whose id matches the passage name with the passage.
/% Interaction %/\n<<widget interact>>\s\n<<click $args[0]>>\s\n<<replace "#dsPopupContent">>\s\n<<print tale.get($args[1]).processText()>>\s\n<</replace>>\s\n<<run $("#dsPopupBox").css("display", "inline-block")>>\s\n<<if setup.libds.interactScroll>>\s\n<<run $("html, body").animate({\n scrollTop: document.body.scrollHeight\n}, 600, "linear")>>\s\n<</if>>\s\n<</click>>\s\n<</widget>>\n\n<<widget intBack>>\s\n<<print String.format('<<interact "{0}" "{1}">>',\n setup.libds.interactBackText, $args[0])>>\s\n<</widget>>\n\n\n/% Continue action %/\n<<widget actCont>>\s\n<<click $args[0]>>\s\n<<remove ".body.content .actArea, .body.content ul:has(a), .body.content ol:has(a)">>\s\n<<append ".body.content">><<dispid $args[1]>><</append>>\s\n<<if setup.libds.actContScroll>>\s\n<<run $('html, body').animate({\n scrollTop: $("#" + $args[1]).offset().top - 4\n}, 1200, "linear");>>\s\n<</if>>\s\n<</click>>\s\n<</widget>>\n\n\n/% Passage modification %/\n<<widget dispid>>\s\n<<print String.format('<span id="{0}"><<display "{0}">></span>', $args[0])>>\s\n<</widget>>\n\n<<widget disprepl>><<if (ndef $args[1]) || ($args[1] == passage())>>\s\n<<print String.format('<<replace "#{0}">><<display "{0}">><</replace>>', $args[0])>><</if>>\s\n<</widget>>\n\n\n/% Aliases. %/\n<<if setup.libds.useAliases>>\n<<widget int>><<interact $args[0] $args[1]>><</widget>>\n<<widget iback>><<intBack $args[0]>><</widget>>\n<<widget ibk>><<intBack $args[0]>><</widget>>\n<<widget acon>><<actCont $args[0] $args[1]>><</widget>>\n<<widget did>><<dispid $args[0]>><</widget>>\n<<widget drep>><<disprepl $args[0] $args[1]>><</widget>>\n<</if>>\n\n\n/% Short Aliases. %/\n<<if setup.libds.useShortAliases>>\n<<widget i>><<interact $args[0] $args[1]>><</widget>>\n<<widget ib>><<intBack $args[0]>><</widget>>\n<<widget c>><<actCont $args[0] $args[1]>><</widget>>\n<</if>>\n\n\n/% Go. Alias for link. Allows consistency between link types. %/\n<<if setup.libds.useLinkAliases>>\n<<widget go>><<link $args[0] $args[1] $args[2]>><</widget>>\n<<if setup.libds.useShortAliases>>\n<<widget g>><<link $args[0] $args[1] $args[2]>><</widget>>\n<<widget l>><<link $args[0] $args[1] $args[2]>><</widget>>\n<</if>>\n<</if>>
setup.libds.version = 0.1;\n$("body")\n .append($("<div></div>")\n .attr("id", "dsPopupContainer")\n .append($("<div></div>")\n .attr("id", "dsPopupBox")\n .hide()\n .append($("<div></div>").attr("id", "dsPopupImage"))\n .append($("<div></div>").attr("id", "dsPopupContent"))\n .append($("<div></div>")\n .attr("id", "dsPopupClose")\n .append($("<a>X</a>")\n .attr("onclick", "dsClosePopup();")\n )\n )\n )\n )\n;\nwindow.dsClosePopup = function() {\n $("div#dsPopupImage").empty();\n $("div#dsPopupContent").empty();\n $("div#dsPopupBox").hide();\n}\nprerender.libdynamicstory = function(a) {\n dsClosePopup();\n};
/* First kill the bottom margin on the passage section. */\nsection.passage {\n margin-bottom: 0px;\n}\n\n/* Popup box styling */\n#dsPopupContainer {\n margin-left: 192px;\n padding-left: 18px;\n font-size: 12px;\n}\n#dsPopupBox {\n max-width: 80%;\n margin-top: 16px;\n margin-left: 32px;\n padding: 4px 8px;\n border-radius: 8px;\n background-color: hsl(0, 0%, 0%);\n background-color: hsla(0, 0%, 0%, 0.75);\n}\n#dsPopupContent, #dsPopupImage, #dsPopupClose {\n display: table-cell;\n}\n#dsPopupContent, #dsPopupImage {\n vertical-align: middle;\n}\n#dsPopupClose {\n vertical-align: top;\n font-size: 1.5em;\n padding-left: 10px;\n}\n#dsPopupClose a {\n background-color: hsl(0, 0%, 10%);\n border-radius: 8px;\n padding: 0px 4px;\n}\n#dsPopupClose a:hover{\n background-color: hsl(0, 0%, 90%);\n color: hsl(0, 0%, 10%);\n}\n\n/* Action styling */\n.actArea ul, .actArea ol,\n.body.content ul, .body.content ol,\n#dsPopupContent ul, #dsPopupContent ol {\n margin: 0px;\n padding: 0px;\n list-style-type: none;\n}\n.actArea li a, .body.content li a, #dsPopupContent li a {\n background-color: hsl(0, 0%, 10%);\n margin-left: 16px;\n border-radius: 8px;\n padding: 4px 8px;\n}\n.actArea li a:hover, .body.content li a:hover, #dsPopupContent li a:hover,\n.actArea li a:focus, .body.content li a:focus, #dsPopupContent li a:focus {\n background-color: hsl(0, 0%, 90%);\n color: hsl(0, 0%, 10%);\n}\n.actArea ol li, .body.content ol li, #dsPopupContent ol li {\n margin-bottom: 10px;\n}\n.actArea ol li:last-child, .actArea ul,\n.body.content ol li:last-child, #dsPopupContent ol li:last-child,\n.body.content ul, #dsPopupContent ul {\n margin-bottom: 6px;\n}\n.actArea ul, .body.content ul, #dsPopupContent ul {\n display: inline-block;\n}\n.actArea ul li, .body.content ul li, #dsPopupContent ul li {\n display: inline;\n}