//There. . . it's off your chest.//



[[ooo|end]]







[[Esc|emergency]]

//Well, <<print $player2>> is just player 2 right now, and you have the controller, not them.//



[[ooo|gather strength]]







[[Esc|emergency]]

If I had my way <<print $time>> I would have <<textinput "backThen" "back then" "Submit">>







[[Esc|emergency]]

In order to make that happen, I'll need to <<print $todo>>



//Are you up to doing that now?//



<<revise yes "Yes">> <<revision yes>>| [[No|nope]] <<becomes>>//Excellent! I believe in you, and I believe you deserve a resolution to this.



The next link will take you to the end. You can leave this screen up, if you'd like, while you go get started and see how it goes. Or you can finish now.//



[[ooo|end]]

<<endrevision>>







[[Esc|emergency]]

Now, when I think about what happened, I just <<cyclinglink $feelnow "get upset with" "get angry with" "get frustrated with" "get disappointed by" "get scared of" "get anxious with" "get disgusted with" "feel apathetic about">> <<cyclinglink $methem "myself" "them" "the situation">> all over again.



I feel <<cyclinglink $feelnow2 "confused" "alone" "worthless" "furious" "insulted" "disappointed" "annoyed" "shocked" "upset" "helpless" "irritated" "ignored" "unimportant" "vexed" "exhausted" "powerless" "unheard" "dead inside">>. And maybe even a little <<cyclinglink $feelnow3 "confused" "alone" "worthless" "furious" "insulted" "disappointed" "annoyed" "shocked" "upset" "helpless" "irritated" "ignored" "unimportant" "vexed" "exhausted" "powerless" "unheard" "dead inside">>.



But mostly, I just feel <<textinput "justFeel" "Feel Now" "Submit">>







[[Esc|emergency]]

<html><h1>Player 2</h1>



<h2>Lydia Neon</h2></html>



//Content Warning: This game deals with interpersonal conflicts.//





[[Begin|realStart]]



<<set $player2 = "">>

<<set $emergencyFriend = "">>

<<set $selfCareOne = "">>

<<set $selfCareTwo = "">>

<<set $selfCareThree = "">>

<<set $whatHappened = "">>

What is the second step on that checklist?



<<textinput "selfCareTwo" "Setup4" "Submit">>

Do you have a self-care checklist?



<<revise yes "Yes">> <<revision yes>>| [[No|Setup5]] <<becomes>>



What is the first step on that checklist?



<<textinput "selfCareOne" "Setup3" "Submit">><<endrevision>>

That's it.



You're ready to [[begin!|Player 2]]

What is the third step on that checklist?



<<textinput "selfCareThree" "Setup5" "Submit">>

<<timedinsert 2s>>//Breathe...//<<endtimedinsert>>



<<timedinsert 4s>>//In...//<<endtimedinsert>>



<<timedinsert 8s>>//Out...//<<endtimedinsert>>



<<timedinsert 12s>>//In...//<<endtimedinsert>>



<<timedinsert 16s>>//Out...//<<endtimedinsert>>



<<timedinsert 20s>>//Good. Just like that//<<endtimedinsert>>



<<timedinsert 24s>>//Let it out...//



[[ooo|credits]]<<endtimedinsert>>

(function () {

version.extensions['revisionMacros'] = {

major: 1,

minor: 2,

revision: 0

};



function tagcontents(b, starttags, desttags, endtags, k) {

function tagfound(i, e) {

for (var j = 0; j < e.length; j++) {

if (a.indexOf(e[j], i) == i) {

return e[j];

}

}

}

var a = b.source.slice(k);

var l = 0;

var c = "";

var tg;

for (var i = 0; i < a.length; i++) {

if (tg = tagfound(i, starttags)) {

l++;

}

else if ((tg = tagfound(i, desttags)) && l == 0) {

b.nextMatch = k + i + tg.length;

return [c, tg];

}

else if (tg = tagfound(i, endtags)) {

l--;

if (l < 0) {

return null;

}

}

c += a.charAt(i);

}

return null;

}

macros['cycle'] = macros['insertion'] = macros['removal'] = macros['revision'] = macros['span'] = {

handler: function (g, e, f, b) {

var begintags = ["<<revision", "<<cycle", "<<insertion", "<<removal", "<<span"];

var becomes = ["<<becomes>>", "<<gains>>"];

var endtags = ["<<endrevision>>", "<<endcycle>>", "<<endinsertion>>", "<<endremoval>>", "<<endspan>>"];

var name = f[0].replace(" ", "_");

var k = b.source.indexOf('>>', b.matchStart) + 2;

var c, vsns, vsn, i, cn, vtype;

vsns = [];

c = tagcontents(b, begintags, becomes.concat(endtags), endtags, k);

if (c && endtags.indexOf(c[1]) == -1) {

while (c) {

vsns.push(c);

c = tagcontents(b, begintags, becomes, endtags, b.nextMatch);

}

c = tagcontents(b, begintags, ["<<end" + e + ">>"], endtags, b.nextMatch);

}

if (!c) {

throwError(g, "can't find matching end" + e);

return;

}

vsns.push(c);

i = 0;

cn = 0;

m = insertElement(g, "span", null, e + " " + name);

if (vsns.length > 0) {

h = insertElement(m, "span", null, "revision-span initial");

}

else {

h = m;

}

if (e == "insertion") {

h.style.display = "none";

}

h.setAttribute("data-enabled", (e != "insertion") + "");

vsn = vsns.shift();

h.tweecode = vsn[0];

while (vsns.length > 0) {

i += 1;

vtype = vsn[1].slice(2, -2);

vsn = vsns.shift();

h = insertElement(m, "span", null, "revision-span " + vtype);

h.tweecode = vsn[0];

h.setAttribute("data-enabled", "false");

h.style.display = "none";

}

h = m.firstChild;

new Wikifier(h, h.tweecode);

}

}

var de = "data-enabled";



function revise(rt, rname) {

var rall, r, rc, rcl, ind, ind2, curr, next, ins, rmv, cyc, rev, rnd;

rev = (rt == "revert");

rnd = (rt.indexOf("random") > -1);

var rsp = "revision-span";



function showVer(n) {

n.innerHTML = "";

new Wikifier(n, n.tweecode);

n.setAttribute(de, "true");

n.style.display = "inline";

n.classList.remove(rsp + "-out");

n.classList.add(rsp + "-in");

if (n.timeout) clearTimeout(n.timeout);

n.timeout = setTimeout(function () {

n.classList.remove(rsp + "-in");

}, 1);

}



function hideVer(n) {

n.setAttribute(de, "false");

n.classList.remove(rsp + "-in");

n.classList.add(rsp + "-out");

if (n.timeout) clearTimeout(n.timeout);

n.timeout = setTimeout(function () {

if (n.getAttribute(de) == "false") {

n.classList.remove(rsp + "-out");

n.style.display = "none";

n.innerHTML = "";

}

}, 1000);

}



function doToGainerSpans(n, fn) {

for (var k = n - 1; k >= 0; k--) {

if (rc[k + 1].classList.contains("gains")) {

fn(rc[k]);

}

else break;

}

}

rall = document.getElementsByClassName(rname);

for (var i = 0; i < rall.length; i++) {

r = rall[i];

rc = r.childNodes;

ins = r.classList.contains("insertion");

rmv = r.classList.contains("removal");

cyc = r.classList.contains("cycle");

rcl = rc.length - 1;

ind = -1;

for (var k = 0; k <= rcl; k++) {

if (rc[k].getAttribute(de) == "true") {

ind = k;

}

}

if (ind == -1) {

if (ins) {

ind = -1;

curr = null;

}

else if (rmv) {

ind = rcl + 1;

curr = null;

}

}

else {

if (rev) {

ind -= 1;

}

curr = (ind >= 0 ? rc[ind] : (cyc ? rc[rcl] : null));

}

ind2 = ind;

if (rnd) {

ind2 = (ind + (Math.floor(Math.random() * rcl))) % rcl;

}

next = (ind2 < rcl ? rc[ind2 + 1] : (cyc ? rc[0] : null));

var docurr = (rev ? showVer : hideVer);

var donext = (rev ? hideVer : showVer);

if (curr) {

if (!(next && next.classList.contains("gains")) || rnd) {

docurr(curr);

doToGainerSpans(ind, docurr);

}

}

if (next) {

donext(next);

if (rnd) {

doToGainerSpans(ind2 + 1, donext);

}

}

}

}



macros['revert'] = macros['revise'] = macros['randomise'] = macros['randomize'] = {

handler: function (a, b, c) {

var l, rev, rname;



function disableLink(l) {

l.style.display = "none";

}



function enableLink(l) {

l.style.display = "inline";

}



function updateLink(l) {

if (l.className.indexOf("random") > -1) {

enableLink(l);

return;

}

var rall = document.getElementsByClassName(rname);

var cannext, canprev;

for (var i = 0; i < rall.length; i++) {

var r = rall[i];

if (r.classList.contains("cycle")) {

cannext = canprev = true;

}

else {

var rc = r.childNodes;

var rcl = rc.length;

var ins = r.classList.contains("insertion");

var rmv = r.classList.contains("removal");

var rnd = rname.indexOf("random") > -1;

var ind = -1;

for (var k = 0; k < rc.length; k++) {

if (rc[k].getAttribute(de) == "true") {

ind = k;

}

}

if (ind == -1 && (ins || rmv)) {

(ins ? cannext = true : canprev = true);

}

if (ind > (ins ? -1 : 0)) {

canprev = true;

}

if (ind > -1 && ind < (rmv ? rcl : rcl - 1)) {

cannext = true;

}

}

}

var can = (l.classList.contains("revert") ? canprev : cannext);

(can ? enableLink : disableLink)(l);

}

function toggleText(w) {

w.classList.toggle(rl + "Enabled");

w.classList.toggle(rl + "Disabled");

w.style.display = ((w.style.display == "none") ? "inline" : "none");

}

var rl = "reviseLink";

if (c.length < 2) {

throwError(a, b + ' macro needs 2 parameters');

return;

}

rname = c.shift().replace(" ", "_");

l = Wikifier.createInternalLink(a, null);

l.className = "internalLink " + rl + " " + rl + "_" + rname + " " + b;

var v = "";

var end = false;

var out = false;

if(c.length>1 && c[0][0] == "$") {

v = c[0].slice(1);

c.shift();

}

switch(c[c.length - 1]) {

case "end":

end = true;

c.pop();

break;

case "out":

out = true;

c.pop();

break;

}

var h = state.history[0].variables;

for(var i = 0; i < c.length; i++) {

var on = (i == Math.max(c.indexOf(h[v]), 0));

var d = insertElement(null, "span", null, rl + ((on) ? "En" : "Dis") + "abled");

if(on) {

h[v] = c[i];

l.setAttribute("data-cycle", i);

} else {

d.style.display="none";

}

insertText(d, c[i]);

l.appendChild(d);

}

l.onclick = function () {

revise(b, rname);

var t = this.childNodes;

var u = this.getAttribute("data-cycle") - 0;

var m = t.length;

if((end || out) && u == m - (end ? 2 : 1)) {

if (end) {

var n = this.removeChild(t[u + 1]);

n.className = rl + "End";

n.style.display = "inline";

this.parentNode.replaceChild(n, this);

} else {

this.parentNode.removeChild(this);

return;

}

} else {

toggleText(t[u]);

u = (u + 1) % m;

if(v) {

h[v] = c[u];

}

toggleText(t[u]);

this.setAttribute("data-cycle", u);

}

var lall = document.getElementsByClassName(rl + "_" + rname);

for (var i = 0; i < lall.length; i++) {

updateLink(lall[i]);

}

};

disableLink(l);

setTimeout(function () {

updateLink(l);

}, 1);

}

}

macros['hoverrevise'] = {

handler: function (a, b, c, d) {

var endtags = ["<<end" + b + ">>"];

var t = tagcontents(d, ["<<" + b + ">>"], endtags, endtags, d.source.indexOf('>>', d.matchStart) + 2);

if (t) {

var rname = c[0].replace(" ", "_");

h = insertElement(a, "span", null, "hoverrevise hoverrevise_" + rname);

new Wikifier(h, t[0]);

h.onmouseover = function () {

revise("revise", rname);

}

h.onmouseout = function () {

revise("revert", rname);

}

}

}

}

macros['becomes'] = macros['gains'] = macros['endrevision'] = macros['endinsertion'] = macros['endremoval'] = macros[

'endcycle'] = macros['endhoverrevise'] = {

handler: function () {}

}



}());

I <<cyclinglink $forgive "want to" "don't want to" "can't" "won't" "could someday" "will" "will try to">> forgive <<print $player2>>. Not because <<cyclinglink $theyDeserve "they deserve it" "they don't deserve it" "I couldn't" "I could" "I haven't" "I have" "I will" "I want to" "I don't want to" "I think I need to" "I don't think I need to">>, but because I deserve <<print $deserve>>, and <<print $player2>> isn't allowed to keep that from me.



[[ooo|right on]]







[[Esc|emergency]]

//So take a moment to gather your strength.//



<<timedinsert 4s>>//It's ok to feel <<print $feelnow2>>. You're totally allowed to feel <<print $feelnow3>>. And never doubt your worth or power just because you feel <<print $justFeel>>.//<<endtimedinsert>>



<<timedinsert 8s>>//You're allowed to feel that here. Here, you are safe. You are valued. You are loved.//<<endtimedinsert>>



<<timedinsert 12s>>//When you're ready, it's time to do something about it.//



[[ooo|do something about it]]<<endtimedinsert>>







[[Esc|emergency]]

//Do you wish to make a plan?//



<<revise yes "Yes">> <<revision yes>>[[No|noPlan]] <<becomes>>



//Then I wish you safety and the best of luck. <3 You deserve both, and you deserve happiness beyond.//



[[ooo|end]]

<<endrevision>>







[[Esc|emergency]]

//Are you ready to talk to someone about it?//



<<revise yes2 "Yes">> <<revision yes2>>| [[No|cantTalk]] <<becomes>>



<<if $emergencyFriend neq "">>//If <<print $emergencyFriend>> is safe to talk to, you may want to contact them.



If not, your community may have counseling resources available that can help you decide what you need.//



//Are either of those options you feel safe trying?//



[[Yes|fleeEnd]] | [[No|cantTalk]]<<else>>//You didn't list a friend to contact, but if you can think of one right now that you feel safe talking to, you may want to contact them.



If not, your community may have counseling resources available that can help you decide what you need.



Are either of those options you feel safe trying?//



[[Yes|fleeEnd]] | [[No|cantTalk]]<<endif>>

<<endrevision>>







[[Esc|emergency]]

//Well that sucks. That's going to make things a little harder.//



If I can't have what I really want, then I want <<cyclinglink $noRevenge "clarity" "peace" "happiness" "an end to anger over this" "fulfillment" "change" "something better than this">>.



Because I deserve <<cyclinglink $deserve "to be loved" "to be appreciated" "to succeed" "to not be held back" "to be free" "to be heard" "to laugh" "to feel joy" "to not be afraid all the time" "to not be alone" "all that and more" end>>.



[[ooo|deserve]]







[[Esc|emergency]]



//<<print $player2>> is going to be playing with you today.//



//In a sense you've been playing with them since it happened, haven't you?//



//You haven't <<print $deal>> yet, so there they are, in the back of your mind.//



[[ooo|Event]]







[[Esc|emergency]]

To make that happen, I'll need to <<textinput "todo" "To Do" "Submit">>







[[Esc|emergency]]



//Contact// <<if $emergencyFriend neq "">>//<<print $emergencyFriend>>//<<else>>//someone you can trust if you need to talk to someone.//<<endif>>



//Your care checklist://

<<print $selfCareOne>>



<<print $selfCareTwo>>



<<print $selfCareThree>>



//If you need support resources and are in the USA:



Dialing 211 in many areas can connect you to support resources. If you are in an abusive situation, 1-800-799-SAFE is another option.



I apologize that this has been distressing.



<3 Please be safe. Know that you are loved.//



[[ooo|credits]]

A few things before you begin.



<<revise reassure "I want to reassure you...">><<revision reassure>>



<<gains>>First, this game is run entirely in JavaScript in your browser. So whatever you think, whatever you type, when you close your window, it goes away. <<gains>>



No one will ever see it but you.<<gains>>



All site analytics have been removed from this page. Even so, you may download this page by right clicking anywhere and choosing "Save as..." and run it locally if you feel safer that way. <<gains>>



Second, this is a two-player game. However... <<gains>>the second player won't be playing with you. They'll be in your mind as you play.<<gains>>



Third, there is no winning or losing. <<gains>>Only you can decide what counts as success.<<gains>>



Lastly, if you ever feel the need to end, there is an escape hatch link at the end of each passage. <<gains>>If you know you have greater self-care needs, you can set it up [[here|Setup]].



[[Skip This Step|Player 2]]

<<endrevision>>

Enter the name of a friend you can contact. If it would be helpful, you can also add their phone number or screen name.



<<textinput "emergencyFriend" "Setup2" "Submit">>



Or you may [[leave it blank|Setup2]].

//Whoa now. Is that really what you want to do?//



<<cyclinglink $maybe "Yes!" "No..." "Kind of?">>



What I really want is <<cyclinglink $reallyWant "for them to stop doing it" "for them to feel what I felt" "for them to apologize" "for them to be off my mind completely" "to forget it ever happened" "to never see them again" "for them to feel utterly helpless just once" "for them to empathize just a bit" "to escape from them" "for them to be punished">>.



[[ooo|flee]]







[[Esc|emergency]]

//Right on!//



//You may use the box below to share any thoughts you want to say but aren't able to say aloud. No one will ever read it but you.//



<<textinput "cantTalk" "gone" "And let it go...">>



[[Esc|emergency]]

//Player 2 by [[Lydia Neon|http://www.lifeinneon.com]] | [[@LifeInNeon|http://twitter.com/LifeInNeon]]



CSS and Macros by [[Leon Arnott|http://www.glorioustrainwrecks.com/blog/584]]



<3//

History.prototype.display=function(d,b,a){var c=tale.get(d);this.history.unshift({passage:c,variables:clone(this.history[0].variables)});

var e=c.render();e.style.visibility="visible";if(a!="offscreen"){var p=$("passages");

for(var i=0;i<p.childNodes.length;i+=1){var q=p.childNodes[ i ];q.classList.add("transition-out");

setTimeout(function(){p.removeChild(q);},1000);}e.classList.add("transition-in");

setTimeout(function(){e.classList.remove("transition-in");},1);p.appendChild(e);}if((a=="quietly")||(a=="offscreen")){e.style.visibility="visible";

}return e;};

If I had my way <<print $time>> I would have <<print $backThen>>.



But I can't<<revise back ", can I?">><<revision back>><<becomes>>.



What I can do is <<cyclinglink $violence "punch them in the teeth" "kick them in the shin" "smash their car windows" "send them meat in the mail to creep them out" "sign up their email address for every politician's mailing list" "use a flamethrower on a sensitive part of their body" "set up a real life version of Saw" "replace the inside of their computer monitor with wasps" "stage a hostile takeover of their company so I can personally fire them" "stab them in the heart with sharpened ends of their favorite children's toy" "cover their floor with dulled bear traps and rusted caltrops" "mix ipecac with their food" "poison them, though that's not terribly creative" "squirrel away food scraps in their house, then introduce some pregnant rats, and finally copperhead snakes" "post screenshots of their livejournal from years ago to Facebook" "sew prawns into the lining of their mattress">>.



Yes, that's what I'll do...



[[ooo|revenge]]

<<endrevision>>







[[Esc|emergency]]

<<if $reallyWant eq "to escape from them">>//Are you ready to leave?//



<<revise yes "Yes">> <<revision yes>>| [[No|cantFlee]] <<becomes>>



//Do you have a plan?//



<<revise yes2 "Yes">> <<revision yes2>>| [[No|cantFlee]] <<becomes>>



//Then I wish you safety and the best of luck. <3 You deserve both, and you deserve happiness beyond.//



[[ooo|end]]

<<if $emergencyFriend neq "">>//If <<print $emergencyFriend>> is safe to talk to about this, you may want to contact them now.//



[[ooo|end]]<<endif>>

<<endrevision>><<endrevision>>



<<else>>//Do you have hope that can happen?



Don't answer too hastily. Let the first impulse sit for a moment and really consider.//



[[Yes|hope]] | [[No|nope]]<<endif>>







[[Esc|emergency]]

body {

background-color: #AAAAAA;

background-repeat: no-repeat;

background-attachment:fixed;

color:#333;

font-family:"Lucida Sans Unicode", Verdana, sans-serif;

font-size:100%;

margin:0em;

text-align:center;

}



h1, h2, h3 {

color:#B1DCFE;

font-weight:normal;

text-align:center;

}

h1 {

font-size:4em;

line-height:1em;

margin-bottom:0;

margin-top:0em;

}

h2 {

font-size:1.4em;

font-style:italic;

}

h3 {

font-size:1.3em;

margin-bottom:5em;

margin-top:.8em;

}



#content1{

background:;

padding:3em;

text-align:left;

margin:auto;

max-width:800px;

min-width:600px;

}



#content2{

background:inherit;

margin:auto;

}











.passage {

background:none;

font-size:1.3em;

font-family:"Lucida Sans Unicode", Geneva, Verdana, sans-serif;

line-height:175%;

padding:1em;

margin-top:1em;

min-height:200px;

}



ul li {

list-style-type:none;

}



.passage a{

color:#4949A9;

text-decoration:none;

font-weight:normal;

}

.passage a:hover{

color:#a55;

text-decoration:none;

}

/*

.toolbar a:hover {

text-decoration:underline;

color:#8ea6ff;

}

a.internalLink, a.externalLink {

font-weight:bold;

text-decoration:none;

}

a.internalLink:hover, a.externalLink:hover {

color:#fff;

text-decoration:none;

}*/

a.brokenLink {

background-color:red;

color:black;

}

.title {

display:none;

}



#storyTitle, #storySubtitle, #storyAuthor{

display:none;

}



#footer {

display:none;

font-size:1.1em;

font-style:italic;

margin-top:5em;

text-align:center;

}

#footer a.externalLink {

border-bottom:1px solid #464646;

font-weight:normal;

}

.marked {

background-color:pink;

margin-right:12px;

}

.disabled {

color:#aaa;

font-style:italic;

}

#floater {

_position:absolute;

_width:100px;

background-color:#333;

border-left:1px solid #ddd;

border-bottom:2px solid #aaa;

font-size:1.1em;

padding:0 20px;

position:fixed;

right:0;

text-align:center;

top:0;

line-height:100%;

}

#floater a:link, #floater a:visited {

font-weight:bold;

text-decoration:none;

}

#floater a:hover {

text-decoration:underline;

}



.toolbar {

padding:0;

visibility:hidden;

font-size:.5em;

}

.toolbar a {

margin-left:12px;

}

.selected .toolbar {

visibility:visible;

}

.passage ul {

margin-left:0em;

padding-left:0em;

list-style-type:none;

}

.passage ol {

margin-left:0em;

padding-left:0em;

list-style-type:none;

}

.passage table {

border-collapse:collapse;

font-size:100%;

margin:.8em 1.0em;

}



.passage em{

color:#558;

/*#a22*/

}



.passage th, .passage td, .passage tr, .passage caption {

padding:3px;

}

.passage hr {

height:1px;

}

#saveTest, .footer {

display:none;

}

#messageArea {

background-color:pink;

display:none;

font-weight:bold;

text-align:center;

}

#storeArea, #copyright {

display:none;

}



.caution {

padding:1em;

background-color:#111;

color:#dd9;

display:block;

font-size:85%;

line-height:125%;

}



#timer_text

{

display: none;

color: #000000; /* Jonah */

color: #BBBBBB; /* Sugarcane */

font-weight: bold;

font-size: 28px;

margin: 10px 0 20px 0;

}



#timer_canvas

{

display: none;

width: 150px;

height: 150px;

}



.passage {

transition: 0.25s linear;

-webkit-transition: 0.25s linear;

}



.transition-in {

position:absolute;

opacity:0;

}



.transition-out {

position:absolute;

opacity:0;

}



.revision-span-in {

opacity: 0;

}

.revision-span:not(.revision-span-out) {

transition: 1s;

-webkit-transition: 1s;

}

.revision-span-out {

position:absolute;

opacity: 0;

}



.timedreplacement.replacement-in {

opacity: 0;

}

.timedreplacement {

transition: 1s;

-webkit-transition: 1s;

}

.timedreplacement.replacement-out {

opacity: 0;

}



.title, #footer{ display:none; }

(function () {

version.extensions['timedreplaceMacro'] = {

major: 2,

minor: 3,

revision: 0

};

macros['timedcontinue'] = macros['timedinsert'] = macros['timedreplace'] = {

handler: function (g, e, f, b) {

function cssTimeUnit(s) {

if (typeof s == "string") {

if (s.slice(-2).toLowerCase() == "ms") {

return Number(s.slice(0, -2)) || 0;

}

else if (s.slice(-1).toLowerCase() == "s") {

return Number(s.slice(0, -1)) * 1000 || 0;

}

}

throwError(g, s + " isn't a CSS time unit");

return 0;

}



function tagcontents(starttag, endtag, k) {

var a = b.source.slice(k);

var l = 0;

var c = "";

for (var i = 0; i < a.length; i++) {

var w = endtag.length;

if (a.substr(i, w) == endtag) {

if (l == 0) {

b.nextMatch = k + i + w;

return c;

}

else {

l--;

c += a.charAt(i);

}

}

else {

if (a.substr(i, starttag.length) == starttag) {

l++;

}

c += a.charAt(i);

}

}

return "";

}

var tr = "<<" + e;

var rw = "<<replacewith>>";

var etr = "<<end" + e + ">>";

var k = b.source.indexOf('>>', b.matchStart) + 2;

var c, d;

if (e == "timedcontinue") {

d = b.source.slice(k);

b.nextMatch = k + d.length;

}

else if (e == "timedreplace") {

c = tagcontents(tr, rw, k);

d = tagcontents((c ? rw : tr), etr, c ? b.nextMatch : k);

}

else if (e == "timedinsert") {

d = tagcontents(tr, etr, k);

}

else if (e == "timedremove") {

c = tagcontents(tr, etr, k);

}

var tm;

tm = cssTimeUnit(f[0]);

var h;

if (c) {

if (d) {

g = insertElement(g, "span", null, "timedreplacements");

}

h = insertElement(g, "span", null, "timedreplacement timedremove");

new Wikifier(h, c);

if (d || e == "timedremove") {

setTimeout(function () {

h.classList.add("replacement-out");

setTimeout(function () {

h.parentNode.removeChild(h);

}, 1000);

}, tm);

}

}

if (d) {

var m = insertElement(g, "span", null, "timedreplacement timedinsert", d);

m.style.display = "none";

setTimeout(function () {

if (m) {

var t = m.firstChild ? m.firstChild.nodeValue : "";

removeChildren(m);

new Wikifier(m, t);

m.style.display = "inline";

m.classList.add("replacement-in");

setTimeout(function () {

m.classList.remove("replacement-in");

}, 1);

scrollWindowTo(m);

}

}, tm);

}

else if (!c && e != "timedremove") {

throwError(g, "can't find matching end" + e);

return;

}

}

}

macros['timedremove'] = macros['timedreplace'];

macros['replacewith'] = macros['endtimedinsert'] = macros['endtimedremove'] = macros['endtimedreplace'] = {

handler: function () {}

}

scrollWindowTo=function(E){var D=window.scrollY?window.scrollY:document.body.scrollTop;

var G=J(E);if(!G){return;}var C=Math.abs(D-G);var B=0;var I=(D>G)?-1:1;var F=window.setInterval(H,25);

function H(){B+=0.1;window.scrollTo(0,D+I*(C*Math.easeInOut(B)));if(B>=1){window.clearInterval(F);

}}function J(N){var O=A(N);var P=O+N.offsetHeight;var K=window.scrollY?window.scrollY:document.body.scrollTop;

var L=window.innerHeight?window.innerHeight:document.body.clientHeight;var M=K+L;

if(O>=K){if(P>M){if(N.offsetHeight<L){return(O-(L-N.offsetHeight)+20);}else{return O;

}}}}function A(K){var L=0;while(K.offsetParent){L+=K.offsetTop;K=K.offsetParent;}return L;

}};

}());

version.extensions["cyclinglinkMacro"]={major:3,minor:2,revision:0};macros.cyclinglink={handler:function(a,b,c){var rl="cyclingLink";

function toggleText(w){w.classList.toggle(rl+"Enabled");w.classList.toggle(rl+"Disabled");

w.style.display=((w.style.display=="none")?"inline":"none");}switch(c[c.length-1]){case"end":var end=true;

c.pop();break;case"out":var out=true;c.pop();break;}var v="";if(c.length&&c[0][0]=="$"){v=c[0].slice(1);

c.shift();}var h=state.history[0].variables;if(out&&h[v]===""){return;}var l=Wikifier.createInternalLink(a,null);

l.className="internalLink cyclingLink";l.setAttribute("data-cycle",0);for(var i=0;

i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));var d=insertElement(null,"span",null,"cyclingLink"+((on)?"En":"Dis")+"abled");

if(on){h[v]=c[ i ];l.setAttribute("data-cycle",i);}else{d.style.display="none";}insertText(d,c[ i ]);

if(on&&end&&i==c.length-1){l.parentNode.replaceChild(d,l);}else{l.appendChild(d);

}}l.onclick=function(){var t=this.childNodes;var u=this.getAttribute("data-cycle")-0;

var m=t.length;toggleText(t[u]);u=(u+1);if(!(out&&u==m)){u%=m;if(v){h[v]=c[u];}}else{h[v]="";

}if((end||out)&&u==m-(end?1:0)){if(end){var n=this.removeChild(t[u]);n.className=rl+"End";

n.style.display="inline";this.parentNode.replaceChild(n,this);}else{this.parentNode.removeChild(this);

return;}return;}toggleText(t[u]);this.setAttribute("data-cycle",u);};}};

And as for <<print $player2>>, I <<cyclinglink $p2feeling "hate" "love" "despise" "hate myself for still loving" "put up with" "try to forget about" "ignore" "try to ignore" "haven't really thought about" "don't care about">> them. They <<cyclinglink $p2feeling2 "never liked me" "used to love me" "love me, but.." "were always hard to get along with" "used to be my best friend" "were cool until it happened" "are still pretty cool" "lost my trust" "lost my friendship" "blew their shot with me" "don't take my calls anymore" "unfriended me" "blocked me" "can go fuck themselves" "aren't worth my time" "just frustrate me">>.



[[ooo|bad player 2]]







[[Esc|emergency]]

//I am sorry you're in that position. I want to assure you that you deserve happiness and freedom from the situation you are in.



You may use the box below to share any thoughts you want to say but aren't able to say aloud. No one will ever read it but you.//



<<textinput "cantTalk" "gone" "And let it go...">>







[[Esc|emergency]]

<<if $whatHappened neq "">>//You said this is what happened://



<<print $whatHappened>>



<<else>>//You didn't explain, but that's alright. The details are yours.//



<<endif>>



When it was happening, I felt too <<cyclinglink $felt "upset" "helpless" "irritated" "confused" "alone" "furious" "worthless" "insulted" "disappointed" "annoyed" "shocked" "vexed" "exhausted" "powerless" "unheard" "ignored" "unimportant">> to do more than I did at the time.



Since then I have tried to <<cyclinglink $forget "forget about it" "ignore it" "let it slide" "fix it many times" "understand it" "get way from it" "process it" "get over it" "get through to them" "make them understand" "hurt them" "get back at them">> but it hasn't <<cyclinglink $help "helped " "worked so far" "gotten through to them" "done any good" "given me satisfaction" "let me move on">> like I had hoped.



[[ooo|Feelings Now]]







[[Esc|emergency]]

//Let's find out who you're playing with.



This will be a game about a real event in your life.//



It was a time when someone <<cyclinglink $event "let me down" "insulted me" "hurt me" "belittled me" "excluded me" "angered me" "assaulted me" "did something worse">> and I haven't <<cyclinglink $deal "dealt with it" "confronted them about it" "fixed it" "resolved it" "forgiven them" "forgotten it" "let it go" "avenged it">> yet.



It happened <<cyclinglink $time "yesterday" "last week" "earlier this month" "last month" "earlier this year" "last year" "when I was a child" "when I was a teen" "when I was a young adult" "at a time I don't remember">>.



But it <<cyclinglink $fault "wasn't" "was">> my fault. I <<cyclinglink $started "didn't start" "started">> it.



//Who was it that did it?//



<<textinput "player2" "Player 2 2" "Submit">>







[[Esc|emergency]]

//Then I wish you safety and the best of luck. <3 You deserve both, and you deserve happiness beyond.



You may use the box below to share any thoughts you want to say but aren't able to say aloud. No one will ever read it but you.//



<<textinput "cantTalk" "gone" "And let it go...">>







[[Esc|emergency]]

//Would you care to describe what happened that made <<print $player2>> your player 2?//



<<revise yes "Yes">> <<revision yes>> | [[No|Feelings]] <<becomes>>

//Take as much time as you like.//



<<textinput "whatHappened" "Feelings" "Submit">><<endrevision>>







[[Esc|emergency]]