diff --git a/index.html b/index.html index 3a1be82..45cd01b 100644 --- a/index.html +++ b/index.html @@ -267,6 +267,7 @@ + @@ -291,6 +292,8 @@ + + diff --git a/scenes/act2_test.md b/scenes/act2_test.md deleted file mode 100644 index 649c11d..0000000 --- a/scenes/act2_test.md +++ /dev/null @@ -1,256 +0,0 @@ -# act2 - -`SceneSetup.act2();` - -a: hack - -(#act2-preamble-end) - - -# act2-preamble-end - -``` -Game.clearText(); -publish("act2-out-1"); -music(null, {fade:1}); -``` - -(...3000) - -``` -music('battle', {volume:0.5}); -publish("hp_show"); -``` - -n: ROUND TWO: *FIGHT!* - -``` -bb({ - body: "cry_6", - mouth: "right", - eyes: "cry_r_3" -}); -hong({ - body:"defeated" -}); -``` - -b: I just... all I want is for you to be patient with me. - -``` -bb({ - eyes: "cry_r_4" -}); -hong({ - body:"listen" -}); -``` - -r: Hey. - -``` -Game.clearText(); -publish("act2-in-2"); -publish("hp_hide"); -music('party1', {volume:0.4, fade:2}); -``` - -(...1300) - -r: Looks like you're caught in a fight with yourself, kid. - -``` -publish("act2", ["party_hunter",12]); -publish("act2", ["party_hong",24]); -``` - -r: Bottoms up, motherfucker. - -``` -hong({ - body:"hold", - eyes:"blank" -}); -bb({ - body:"normal", - mouth:"small", - eyes:"wat" -}); -Game.clearText(); -publish("act2-out-3"); -publish("hp_show"); -``` - -(...3500) - -b: I'm so sorry, human. - -b: I'm going to have to use my SPECIAL ATTACK - -``` -music('battle', {volume:0.5}); -bb({body:"special_a"}); -``` - -`Game.OVERRIDE_CHOICE_SPEAKER = "fear_harm"` - -[](#act2h_attack) `_.SPECIAL_ATTACK="harm"; Game.OVERRIDE_CHOICE_LINE=true` - -`Game.OVERRIDE_CHOICE_SPEAKER = "fear_alone"` - -[](#act2h_attack) `_.SPECIAL_ATTACK="alone"; Game.OVERRIDE_CHOICE_LINE=true` - -`Game.OVERRIDE_CHOICE_SPEAKER = "fear_bad"` - -[](#act2h_attack) `_.SPECIAL_ATTACK="bad"; Game.OVERRIDE_CHOICE_LINE=true` - -# act2h_attack - -``` -bb({body:"special_b_1"}); -``` - -h: What's this crap? - -h: You're gonna yap more stupid words at me again to try t-- - -``` -bb({body:"special_c"}); -sfx("hadouken"); -``` - -(...901) - -(#act2i) - -# act2i - -``` -publish("show_special_attack"); -Game.FORCE_CANT_SKIP = true; -music(null); -stopAllSounds(); -``` - -(...5000) - -``` -hong({ - body:"final", - mouth:"final" -}); -bb({ - body:"normal", - mouth:"normal", - eyes:"sad_2" -}); -attack("100p", _.SPECIAL_ATTACK); -Game.FORCE_CANT_SKIP = false; -setTimeout(function(){ - publish("remove_special_attack"); -},30); -``` - -(...2500) - -h: WHAT THE HELL WAS THAT - -b: PUNCH THEM PUNCH THEM PUNCH THEM PUNCH THEM PUNCH THEM PUNCH THEM PUNCH THEM PUNCH THE-- - -`_.a2_ending = "fight";` - -(#act2k) - -# act2k - -``` -Game.clearText(); -publish("act2-in-4"); -publish("hp_hide"); -music('party1', {volume:0.6, fade:1.5}); -``` - -(...2200) - -r: You alright, kid? - -``` -publish("act2", ["party_hunter",19]); -publish("act2", ["party_hong",36]); -``` - -r: I like that. Come to my party next weekend, cutie. - -(#act2k_end) - - - -# act2k_end - -``` -Game.clearText(); -publish("act2-out-5"); -music("hum", {fade:2, volume:0.6}); -``` - -(...2500) - -``` -sfx("whoosh"); -publish("act2", ["act2_end",2]); -``` - -(...800) - -b: Human! Are you okay?! - -b: Gosh, that was *close.* We really could've-- - -``` -Game.clearText(); -publish("act2-outro", ["end3"]); -music(null); -sfx("squeak"); -``` - -(...1500) - -``` -publish("act2-outro", ["end4"]); -sfx("hit"); -``` - -(...1000) - -h: I'm going to the party next weekend. - -h: The next time we fight, I'm not just going to *defeat* you... - -h: I'm going to fucking *kill* you. - -``` -Game.clearText(); -publish("act2-outro", ["end5"]); -sfx("grass_step1"); -```` - -(...901) - -``` -sfx("grass_step2", {volume:0.8}); -publish("act2-outro", ["end6"]); -``` - -(...901) - -`sfx("grass_step1", {volume:0.5});` - -(...901) - -`sfx("grass_step2", {volume:0.25});` - -(...3000) - -`_.INTERMISSION_STAGE = 2;` - -(#intermission) \ No newline at end of file diff --git a/scenes/act4.md b/scenes/act4.md index 9067bbd..8b0e5bd 100644 --- a/scenes/act4.md +++ b/scenes/act4.md @@ -2,21 +2,142 @@ ``` SceneSetup.act4(); +Game.FORCE_CANT_SKIP = true; ``` -(...5001) +(...1001) -`publish("outside-hong", ["walk"])` +``` +/* (...5001) */ +var hong_frame = _.INJURED ? 9 : 0; +publish("act4", ["hong_walks_in",hong_frame]); +``` -(...2001) +(...666) -`publish("outside-hong", ["eat"])` +`publish("act4", ["hong_walks_in", "next"]);` -(...2001) +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...1667) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...1333) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...167) + +`publish("act4_hong_sits");` + +(...66) + +`publish("act4", ["hong_transition", "next"]);` + +(...133) + +`publish("act4", ["hong_transition", "next"]);` + +(...1333) + +`publish("act4", ["hong_transition", "next"]);` + +(...333) + +`publish("act4", ["hong_transition", "next"]);` + +(...1001) + +`publish("act4", ["hong_transition", "next"]);` + +(...333) + +`publish("act4", ["hong_transition", 9]);` + +(...333) + +`publish("act4", ["hong_transition", 10]);` + +(...333) + +`publish("act4", ["hong_transition", 9]);` + +(...333) + +`publish("act4", ["hong_transition", 10]);` + +(...333) + +`publish("act4", ["hong_transition", 9]);` + +(...333) + +`publish("act4", ["hong_transition", 10]);` + +(...333) + +`publish("act4", ["hong_transition", "next"]);` + +(...1466) `publish("act4-out-1");` -(...2001) +(...201) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) `Game.FORCE_CANT_SKIP = false;` @@ -24,7 +145,7 @@ h: *sigh* h: So what the hell was the moral of this story? -h: What did we even *learn*? I *was* being stupid, my "friends" *were* using me, and we almost fucking *died*. +h: What did we even *learn*? I *was* being stupid, my "friends" *were* using me, and we almost goddamn *died*. {{if _.INJURED}} [Yeah, not to mention the hospital bill.](#act4a_bill) @@ -994,6 +1115,8 @@ b: I want to be the alarm for your emotional needs – your needs for safety, be b: But... I suck at my job, so I need you to train me. +b: Help me help you. + b: Teaching an old dog new tricks *will* take a while. Maybe *years.* b: And sometimes I'll relapse, I'll slip into my old habits. diff --git a/scenes/act4_test.md b/scenes/act4_test.md new file mode 100644 index 0000000..e16ea65 --- /dev/null +++ b/scenes/act4_test.md @@ -0,0 +1,514 @@ +# act4 + +``` +SceneSetup.act4(); +Game.FORCE_CANT_SKIP = true; +``` + +(...1001) + +``` +/* (...5001) */ +var hong_frame = _.INJURED ? 9 : 0; +publish("act4", ["hong_walks_in",hong_frame]); +``` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...1667) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...666) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...1333) + +`publish("act4", ["hong_walks_in", "next"]);` + +(...167) + +`publish("act4_hong_sits");` + +(...66) + +`publish("act4", ["hong_transition", "next"]);` + +(...133) + +`publish("act4", ["hong_transition", "next"]);` + +(...1333) + +`publish("act4", ["hong_transition", "next"]);` + +(...333) + +`publish("act4", ["hong_transition", "next"]);` + +(...1001) + +`publish("act4", ["hong_transition", "next"]);` + +(...333) + +`publish("act4", ["hong_transition", 9]);` + +(...333) + +`publish("act4", ["hong_transition", 10]);` + +(...333) + +`publish("act4", ["hong_transition", 9]);` + +(...333) + +`publish("act4", ["hong_transition", 10]);` + +(...333) + +`publish("act4", ["hong_transition", 9]);` + +(...333) + +`publish("act4", ["hong_transition", 10]);` + +(...333) + +`publish("act4", ["hong_transition", "next"]);` + +(...1466) + +`publish("act4-out-1");` + +(...201) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +`publish("act4", ["hong_transition", "next"]);` + +(...99) + +``` +publish("act4-show-chars"); +Game.FORCE_CANT_SKIP = false; +``` + +h: *sigh* + +h: Maybe we don't have to fight. + +``` +Game.FORCE_CANT_SKIP = true; +Game.clearText(); +``` + +(...301) + +`publish("smash",[0]);` + +(...2001) + +``` +publish("smash",[1]); +sfx("grass_step1"); +``` + +(...2601) + +`publish("smash",[2]);` + +(...501) + +`Game.FORCE_CANT_SKIP = false;` + +(#act4b_2) + +# act4b_2 + +`music('dontfight',{fade:5, volume:0.6})` + +b: I'm not a Big Bad Wolf. But I'm not a guard-wolf either. + +b: I'm a battered shelter dog. + +(#act4c) + + + +# act4c + +``` +Game.clearText(); +music(null,{fade:3}); +``` + +b: *Can* we really get along? + +b: *Can* we work together, as a team? + +h: Well, + +a: E-excuse me... + +``` +Game.clearText(); +publish("act4-in-2"); +music('campus', {volume:0.5, fade:1}); +``` + +(...2101) + +(#act4d) + +# act4d + +`Game.WORDS_HEIGHT_BOTTOM = 221;` + +a: W-wo-would you mind if I sat with you for lunch? + +{{if _.TOP_FEAR=="harm"}} +s: They were sitting alone for lunch? They must be a psycho loner serial killer! +{{/if}} + +{{if _.TOP_FEAR=="alone"}} +s: Ack, do you know how pathetic we sound? How desperate, how *needy*? +{{/if}} + +{{if _.TOP_FEAR=="bad"}} +s: They were enjoying peace and quiet, then we interrupted them! We're such a burden! +{{/if}} + +a: I- I mean- it's, it's okay if not, I just... + +`Game.OVERRIDE_CHOICE_SPEAKER = "h2"` + +[Wait, didn't I see you at the party?](#act4d_recognition) + +[Yeah, of course! Come here.](#act4d_yes) + +[Sorry, I need alone time right now.](#act4d_no) + +# act4d_recognition + +h2: Yeah you were on the couch! At the first party I went to, + +{{if _.a2_ending=="fight"}} +h2: The one where I had that panic attack and punched the host. +{{/if}} + +{{if _.a2_ending=="flight"}} +h2: The one where I had that panic attack and ran out crying. +{{/if}} + +b: Hang on human, we might be making them uncomfortable. + +h2: Ah, I don't mean to put you on the spot! + +h2: Just remembering a friendly face, is all. + +`publish("al-shire", ["panic"]);` + +{{if _.TOP_FEAR=="harm"}} +s: AHHHHH I KNEW IT! THEY'RE A DANGEROUS CRAZY PSYCHO! +{{/if}} + +{{if _.TOP_FEAR=="alone"}} +s: SEE HOW MUCH WE SUCK AT MAKING FRIENDS?! THE FIRST IMPRESSION WE MADE IS "WITNESSED MY TRAUMA". WE SUCK! +{{/if}} + +{{if _.TOP_FEAR=="bad"}} +s: AAAHHH WE MADE SOMEONE REMEMBER A TRAUMATIC EVENT. OUR MERE PRESENCE HURTS OTHERS. +{{/if}} + +(#act4e) + +# act4d_yes + +b: Hang on human, they seem uncomfortable. + +h2: Ah, no pressure of course! + +h2: Just saying, you can sit here if you want to. + +`publish("al-shire", ["panic"]);` + +{{if _.TOP_FEAR=="harm"}} +s: THEY'RE BEING *TOO* FRIENDLY! LIKE TED BUNDY, THE SERIAL KILLER! +{{/if}} + +{{if _.TOP_FEAR=="alone"}} +s: THEY'RE JUST ACTING NICE. NO ONE *REALLY* WANTS TO BE OUR FRIEND. +{{/if}} + +{{if _.TOP_FEAR=="bad"}} +s: GAH, WE ALWAYS MAKE OTHERS FEEL UNCOMFORTABLE! WE'RE TERRIBLE! +{{/if}} + +(#act4e) + +# act4d_no + +b: Hang on human, we might be making them uncomfortable. + +h2: Ah, I didn't mean to come off as rude! + +{{if _.INJURED}} +h2: It's just that, well, I jumped off a roof and almost killed myself. +{{/if}} + +{{if !_.INJURED}} +h2: It's just that, well, I almost jumped off a roof. +{{/if}} + +h2: Please don't take it as a personal rejection, I just need quiet time to process some emotions. + +`publish("al-shire", ["panic"]);` + +{{if _.TOP_FEAR=="harm"}} +s: HOLY COW I KNEW IT, THEY *ARE* A DANGEROUS PSYCHO! +{{/if}} + +{{if _.TOP_FEAR=="alone"}} +s: WE'VE BEEN PERSONALLY REJECTED! WE'LL NEVER BE LOVED! +{{/if}} + +{{if _.TOP_FEAR=="bad"}} +s: WE INTERRUPTED SOMEONE'S EMOTIONAL PROCESSING! NOW THEY'LL BE TRAUMATIZED FOREVER AND IT'S ALL OUR FAULT! +{{/if}} + +(#act4e) + +# act4e + +``` +Game.WORDS_HEIGHT_BOTTOM = 195; +publish("act4", ["alshire", 6]); +``` + +s: RUN RUN RUN RUN RUN RUN RUN RUN RUN RUN RUN RUN RUN RUN RUN + +``` +Game.clearText(); +publish("act4", ["alshire", 10]); +``` + +(...1001) + +`publish("act4", ["alshire", 11]);` + +(...1001) + +``` +publish("act4-out-3"); +Game.WORDS_HEIGHT_BOTTOM = -1; /* reset */ +``` + +(...1201) + +`publish("act4-jumpcut-hong");` + +h: Huh. That was weird. I wonder what was going on in their head. + +h: Anyway, you were saying? + +b: Uh, I forget? Something about teams and work? + +h: ¯\_(ツ)_/¯ + +b: They say you should "make peace" with your emotions, as if your emotions are some kind of *war criminals*. + +b: But I want us to make *more* than mere peace! I want us to be *allies!* + +b: I want to be a good guard-dog. Just like how hunger & thirst are alarms for your physical needs, + +b: I want to be the alarm for your emotional needs – your needs for safety, belonging, goodness. + +b: But... I suck at my job, so I need you to train me. + +b: Help me help you. + +b: Teaching an old dog new tricks *will* take a while. Maybe *years.* + +b: And sometimes I'll relapse, I'll slip into my old habits. + +b: I'll bark at shadows. I'll scare you with words. I might even show you some intrusive images of... things. + +b: I'm sorry! I'm a battered shelter dog! Battered dogs poop on your bed sometimes! + +b: But if you're patient with me... and just stay and sit with me... + +b: Maybe you can tame this wolf. + +`Game.clearText();` + +(...1000) + +`Game.OVERRIDE_CHOICE_SPEAKER = "h"` + +[Good dog.](#act4f-pat-bb) `Game.OVERRIDE_CHOICE_SPEAKER = "h"` + +`Game.OVERRIDE_CHOICE_SPEAKER = "b"` + +[Good human.](#act4f-pat-hong) `Game.OVERRIDE_CHOICE_SPEAKER = "b"` + +# act4f-pat-hong + +``` +Game.clearText(); +Game.FORCE_CANT_SKIP = true; +music(null,{fade:0.5}); +sfx("youbothwin"); +``` + +`publish("end-pat", ["pat-hong-1"])` + +(...501) + +`publish("end-pat", ["pat-hong-2"])` + +(...501) + +`publish("end-pat", ["pat-hong-1"])` + +(...501) + +`publish("end-pat", ["pat-hong-2"])` + +(...501) + +`publish("end-pat", ["pat-hong-1"])` + +(...501) + +`publish("end-pat", ["pat-hong-2"])` + +(...6501) + +`publish("end-pat", ["pat-hong-3"])` + +(...1001) + +(#act4f) + +# act4f-pat-bb + +``` +Game.clearText(); +Game.FORCE_CANT_SKIP = true; +music(null,{fade:0.5}); +sfx("youbothwin"); +``` + +`publish("end-pat", ["pat-bb-1"])` + +(...501) + +`publish("end-pat", ["pat-bb-2"])` + +(...501) + +`publish("end-pat", ["pat-bb-1"])` + +(...501) + +`publish("end-pat", ["pat-bb-2"])` + +(...501) + +`publish("end-pat", ["pat-bb-1"])` + +(...501) + +`publish("end-pat", ["pat-bb-2"])` + +(...6501) + +`publish("end-pat", ["pat-bb-3"])` + +(...1001) + +(#act4f) + +# act4f + +``` +Game.FORCE_CANT_SKIP = false; +publish("end-pat", ["freak-out"]) +``` + +{{if _.fifteencigs}} +b: AAAAA YOU'RE STILL EATING ALONE FIFTEEN CIGARETTES AAAAA +{{/if}} + +{{if _.parasite}} +b: AAAAA YOU'RE STILL NOT PRODUCTIVE WHILE EATING WE'RE PARASITES AAAAA +{{/if}} + +{{if _.whitebread}} +b: AAAAA YOU'RE EATING MORE WHITE BREAD AAAAA +{{/if}} + +``` +publish("act4", ["bb_closer", 18]); +sfx("yaps", {volume:0.6}); +Game.FORCE_CANT_SKIP = true; +``` + +b: YAP YAP YAP YAP YAP + +`music('credits', {NO_LOOP:true, volume:0.45});` + +(...1884) + +(#credits) diff --git a/scenes/credits.md b/scenes/credits.md index 3bf7c79..846dfb0 100644 --- a/scenes/credits.md +++ b/scenes/credits.md @@ -1,9 +1,5 @@ # credits -`music('credits', {NO_LOOP:true, volume:0.45});` - -(...1884) - `SceneSetup.credits()` n: *CREDITS ROLL* (and mental health resource links) \ No newline at end of file diff --git a/scenes/hunter_rewrite.md b/scenes/hunter_rewrite.md deleted file mode 100644 index 9ce9e11..0000000 --- a/scenes/hunter_rewrite.md +++ /dev/null @@ -1,181 +0,0 @@ -r: Looks like you're caught in a fight with yourself, kid. - -h2: (nods) - -r: You're not alone, friend. Anxiety's super common. - -{{if _.act1_ending=="fight"}} -r: Heck, just yesterday, I heard someone on campus had a nervous breakdown and smashed their phone! -{{/if}} - -{{if _.act1_ending=="flight"}} -r: Heck, just yesterday, I heard someone curled up into an armadillo ball and cried in public! -{{/if}} - -h2: huh imagine that. - -r: Listen: I know what it's like to have that animal in your head. - -r: All of us here do. That's why we're here! I throw these parties every weekend so we can forget our worries, forget that animal. - -h2: but my anxiety... - -r: Don't worry, kid. I used to be like you. But then I discovered a little trick to make that beast shut up forever... - -``` -Game.clearText(); -music(null, {fade:1}); -``` - -(...2000) - -``` -publish("act2-party-action", ["twist3"]); -sfx("rustle"); -``` - -(...2500) - -`publish("act2-party-action", ["twist4"]);` - -(...1000) - -r: My own specialty blend. It's a mix of... well, everything. - -r: Bottoms up, motherfucker. - - -# act2k - -r: You alright, kid? - -{{if _.a2_ending=="fight"}} -(#act2k_fight) -{{/if}} - -{{if _.a2_ending=="flight"}} -(#act2k_flight) -{{/if}} - -# act2k_fight - -r: Y-you... - -r: are *kinky*. - -r: I like that. Come to my party next weekend, cutie. - -h2: ok bye ciao adios - -r: The animal might have won today, but come back, and I'll mix something even stronger for you! - -h2: sayōnara au revoir auf wiedersehen zài jiàn - -r: You and me, kid, we'll show that beast who's boss! - -(#act2k_end) - -# act2k_flight - -h2: ok sorry i have to run - -r: Damn it. The animal won today, huh? - -h2: no no, just, uh, gotta run a marathon. gotta go fast. - -r: Come to my party next weekend, cutie. I'll mix something even stronger for you. - -`publish("act2-party-action", ["end_run"]);` - -h2: ok thanks gonna run run run run run - -r: You and me, kid, we'll show that beast who's boss! - -(#act2k_end) - - -# act3 - -`SceneSetup.act3();` - -h2: *Ah* that hits the spot. - -r: You know, kid... - -h2: Specifically, the spots hit are my left and right amygdala. - -r: You remind me of myself when I was younger. Back when I was tormented by the animal in my head. - -r: I'm proud to help you get rid of it. It's almost like a... *parental*... sort of pride. - -`Game.clearText();` - -r: Hey, quick question: truth or da-- - -h2: DARE! - -r: Haha! Good. - -r: Ok. You see that swimming pool down there? - -h2: Yeah? Ten floors down? - -r: Jump in. - -h2: ... - -h2: Wait, what? - -r: The animal's started whining, hasn't it? - -r: *Oh nooooo it's dangerous, don't do iiiiit.* - -r: But that's exactly why we need to do thrilling, death-defying stunts! Party hard! Carpe diem! Snort coke off a hooker's butt, hashtag #YOLO! - -r: Show that animal we don't give two *dicks* about its bitching! Jump. - -h2: Uh, but sometimes, um... fear has a point... - -r: ... - -r: ... - -r: I'm sorry, did you fall for that "mindfulness" fad bullshit that claims feeling bad is *good?* - -r: Pleasure is the opposite of pain. There-fucking-fore, you can use pleasure to fight pain! How goddamn stupid are those California-Buddhists to not see that?! - -r: Kid, I know that *you* know that animal *hurts* people like us. It *tortures* people like us. - -r: It's not your fucking friend. It's a savage beast that needs to be tranquilized, - -r: Or taken to the shed to be *shot in the back of the skull.* - -r: Otherwise, you're going to let it win. - -h2: ...you're wrong. - -h2: I'm not going to let it win. - -r: Fuck yeah! I believe in you, babe! Kill it! <3 - -(#act3a) - - -# act3_walkaway - -r: Aw *come on*. After everything it put you through, you're just walking away?! - -r: What's the matter, kid? You *scared?* - -h2: Yes. - -h2: I'm scared. - -h2: And that's okay! - -h2: It's okay to be scared. - -r: Did they just lock the door? - - -(#act4) \ No newline at end of file diff --git a/scripts/act4/Act4_BG.js b/scripts/act4/Act4_BG.js index a5bb717..b81ff6a 100644 --- a/scripts/act4/Act4_BG.js +++ b/scripts/act4/Act4_BG.js @@ -1,13 +1,17 @@ Loader.addImages([ - - { id:"placeholder_act4_bg", src:"sprites/act4/placeholder_act4_bg.png" }, + { id:"act4_callback", src:"sprites/act4/callback.png" }, - { id:"al_shire", src:"sprites/act4/al_shire.png" }, - { id:"outside_hong", src:"sprites/act4/hong_outside.png" }, + { id:"a4_hong_walks_in", src:"sprites/act4/hong_walks_in.png" }, + { id:"a4_hong_transition", src:"sprites/act4/hong_transition.png" }, - { id:"a4_talk_1", src:"sprites/act4/talk_1.png" }, - { id:"a4_talk_2", src:"sprites/act4/talk_2.png" }, - { id:"a4_talk_smash", src:"sprites/act4/talk_smash.png" }, + { id:"break_hp", src:"sprites/act4/break_hp.png" }, + + { id:"al_shire", src:"sprites/act4/al_shire.png" }, + { id:"hong_to_alshire", src:"sprites/act4/hong_to_alshire.png" }, + { id:"bb_to_alshire", src:"sprites/act4/bb_to_alshire.png" }, + + { id:"hong_closer", src:"sprites/act4/hong_closer.png" }, + { id:"bb_closer", src:"sprites/act4/bb_closer.png" } ]); @@ -20,157 +24,385 @@ function BG_Act4(){ var self = this; - // Sprites! - self.bgSprite = new Sprite({ - image: Library.images.placeholder_act4_bg, - grid:{ width:1, height:1 }, - frame:{ width:720, height:1200 }, + // BACKGROUND SPRITES + var BGSpriteConfig = { + image: Library.images.intro_bg, + grid:{ width:2, height:3 }, + frame:{ width:1200, height:1200 }, + anchor:{ x:0, y:0 }, + frameNames:[ "sky", "clouds", "buildings", "grass", "stump" ], + x:0, y:0 + }; + self.sky = new Sprite(BGSpriteConfig); + self.sky.gotoFrameByName("sky"); + self.clouds = new Sprite(BGSpriteConfig); + self.clouds.gotoFrameByName("clouds"); + self.buildings = new Sprite(BGSpriteConfig); + self.buildings.gotoFrameByName("buildings"); + self.grass = new Sprite(BGSpriteConfig); + self.grass.gotoFrameByName("grass"); + self.stump = new Sprite(BGSpriteConfig); + self.stump.gotoFrameByName("stump"); + + ///////////////////////////////////////////// + // EXTERNAL WORLD SPRITES /////////////////// + ///////////////////////////////////////////// + + // Hong in + self.hong_walks_in = new Sprite({ + image: Library.images.a4_hong_walks_in, + grid:{ width:8, height:3 }, + frame:{ width:720, height:500 }, + anchor:{ x:0, y:0 }, + x:0, y:200 }); - self.callbackSprite = new Sprite({ + self.hong_walks_in.gotoFrame(19); // blank + + // Callback + self.callback = new Sprite({ image: Library.images.act4_callback, grid:{ width:2, height:1 }, frame:{ width:400, height:200 }, - y: 347, - frameNames:[ - "phone", - "puddle" - ] + y: 347 }); - self.callbackSprite.gotoFrameByName( _.act1_ending=="fight" ? "phone" : "puddle" ); + self.callback.gotoFrame( _.act1_ending=="fight" ? 0 : 1 ); - self.alShireSprite = new Sprite({ + var hongSitsSprite = { + image: Library.images.a4_hong_transition, + grid:{ width:8, height:3 }, + frame:{ width:720, height:500 }, + anchor:{ x:0, y:0 }, + x:0, y:200 + }; + + // The crutches + self.crutches = new Sprite(hongSitsSprite); + self.crutches.gotoFrame(2); + self.crutches.visible = false; + + // The legs + self.legs = new Sprite(hongSitsSprite); + self.legs.gotoFrame( _.INJURED ? 1 : 0); + self.legs.visible = false; + + // Hong transition + self.hong_transition = new Sprite(hongSitsSprite); + self.hong_transition.gotoFrame(3); + self.hong_transition.visible = false; + + // Hong transition Cone + self.hong_transition_cone = new Sprite(hongSitsSprite); + self.hong_transition_cone.gotoFrame(6); + self.hong_transition_cone.visible = false; + + // Alshire + self.alshire = new Sprite({ image: Library.images.al_shire, - grid:{ width:4, height:1 }, + grid:{ width:8, height:3 }, frame:{ width:360, height:360 }, - y: 192, - frameNames:[ - "ask", - "panic", - "run", - "blank" - ] + y: 190 }); - self.alShireSprite.gotoFrameByName("blank"); // blank - self.outsideHongSprite = new Sprite({ - image: Library.images.outside_hong, - grid:{ width:4, height:3 }, - frame:{ width:720, height:720 }, - y: 90, - frameNames:[ - "blank", + self.alshire.visible = false; - "walk", - "walk-injured", - "eat", - "eat-injured", - "talk", - "talk-injured", - "look-back", - "look-back-injured", - ] + // Hong alshire + self.hong_to_alshire = new Sprite({ + image: Library.images.hong_to_alshire, + grid:{ width:8, height:2 }, + frame:{ width:300, height:300 }, + /*x:210,*/ y:258 }); + self.hong_to_alshire.visible = false; + + // BB alshire + var bb_to_alshire_sprite = { + image: Library.images.bb_to_alshire, + grid:{ width:4, height:1 }, + frame:{ width:200, height:300 }, + /*x:261,*/ y:281 + }; + self.bb_to_alshire = new Sprite(bb_to_alshire_sprite); + self.bb_to_alshire.visible = false; + + ///////////////////////////////////////////// + // INTERNAL WORLD SPRITES /////////////////// + ///////////////////////////////////////////// // Anxiety BG... WHITE MODE self.anxiety = new BG_Anxiety(true); - // Talking Sprites - self.smashSprite = new Sprite({ - image: Library.images.a4_talk_smash, - grid:{ width:3, height:1 }, - frame:{ width:720, height:600 }, + // Hong + self.hong = new Act4_Hong(); + + // BB + self.beebee = new Act4_Beebee(); + + // Smash Sprite + var break_hp_sprite = { + image: Library.images.break_hp, + grid:{ width:8, height:2 }, + frame:{ width:720, height:1000 }, + }; + self.break_hp = new Sprite(break_hp_sprite); + self.break_hp.y = -70; + self.break_hp.visible = false; + self.break_hp_cone = new Sprite(break_hp_sprite); + self.break_hp_cone.visible = false; + + // Hong Closer + self.hong_closer = new Sprite({ + image: Library.images.hong_closer, + grid:{ width:8, height:1 }, + frame:{ width:300, height:300 }, + y: 270 + }); + self.hong_closer.visible = false; + + // BB Closer + var bb_closer_sprite = { + image: Library.images.bb_closer, + grid:{ width:8, height:4 }, + frame:{ width:500, height:500 }, y: 200 - }); - self.smashSprite.gotoFrame(2); // blank - self.talk1Sprite = new Sprite({ - image: Library.images.a4_talk_1, - grid:{ width:3, height:1 }, - frame:{ width:720, height:400 }, - y: 256 - }); - self.talk2Sprite = new Sprite({ - image: Library.images.a4_talk_2, - grid:{ width:4, height:2 }, - frame:{ width:720, height:400 }, - y: 256, - frameNames:[ - - "talk", - - "pat-bb-1", - "pat-bb-2", - "pat-bb-3", - - "pat-hong-1", - "pat-hong-2", - "pat-hong-3", - - "freak-out" - - ] - }); + }; + self.bb_closer = new Sprite(bb_closer_sprite); + self.bb_closer.visible = false; + self.bb_closer_cone = new Sprite(bb_closer_sprite); + self.bb_closer_cone.visible = false; + self.bb_closer_cone.gotoFrame(28); + self.bb_closer_coneb = new Sprite(bb_closer_sprite); + self.bb_closer_coneb.visible = false; + self.bb_closer_coneb.gotoFrame(29); // LAYERS self.layers = [ - self.bgSprite, - self.callbackSprite, - self.alShireSprite, - self.outsideHongSprite, + self.sky, + self.clouds, + self.buildings, + self.grass, + self.alshire, + + self.hong_walks_in, + self.callback, + + self.stump, + + self.crutches, self.anxiety, + self.legs, + self.hong_transition, + self.hong_transition_cone, - self.smashSprite, - self.talk1Sprite, - self.talk2Sprite + self.break_hp, + self.break_hp_cone, + + self.hong, + self.beebee, + + self.hong_to_alshire, + self.bb_to_alshire, + + self.hong_closer, + self.bb_closer_coneb, + self.bb_closer, + self.bb_closer_cone, ]; var PARALLAXES = [ - 0.5, // placeholder bg - 0.8, // callback - 0.6, // Al Shire - 1.0, // outside Hong + 0, // sky + 0.1, // clouds + 0.25, // buildings + 0.48, // grass - 0.0, // anxiety bg + 0.8, // alshire - 1.0, // smash sprite - 1.0, // talk 1 sprite - 1.0, // talk 2 sprite + 1.0, // hong_walks_in + 1.0, // callback + + 1.0, // stump + + 1.0, // crutches + 0.0, // anxiety + 1.0, // legs + 1.0, // hong_transition + 1.0, // hong_transition_cone + + 0, // break_hp + 0, // break_hp_cone + + 1.0, // hong + 1.0, // beebee + + 1.0, // hong_to_alshire + 1.0, // bb_to_alshire + + 1.0, // hong_closer, + 1.0, // bb_closer_coneb + 1.0, // bb_closer, + 1.0, // bb_closer_cone, ]; var ALPHAS = [ - 1.0, // placeholder bg - 1.0, // callback - 1.0, // callback - 1.0, // outside Hong + 1.0, // sky + 1.0, // clouds + 1.0, // buildings + 1.0, // grass - 0.0, // anxiety bg + 1.0, // alshire - 1.0, // smash sprite - 0.0, // talk 1 sprite - 0.0, // talk 2 sprite + 1.0, // hong_walks_in + 1.0, // callback + + 1.0, // stump + + 1.0, // crutches + 0.0, // anxiety + 1.0, // legs + 1.0, // hong_transition + 1.0, // hong_transition_cone + + 1.0, // break_hp + 1.0, // break_hp_cone + + 0.0, // hong + 0.0, // beebee + + 1.0, // hong_to_alshire + 1.0, // bb_to_alshire + + 1.0, // hong_closer, + 1.0, // bb_closer_coneb + 1.0, // bb_closer, + 1.0, // bb_closer_cone, ]; + var MAGIC_NUMBER_2 = 163; var OFFSETS = [ - 0, - 0, - 0, - 0, - 0, + 0, // sky + 0, // clouds + 0, // buildings + 0, // grass + + 0, // alshire + + 0, // hong_walks_in + 0, // callback + + 0, // stump + + 207, // crutches + 0, // anxiety + 207, // legs + 207, // hong_transition + 207, // hong_transition_cone + + 0, // break_hp + 0, // break_hp_cone + + 0, // hong + 0, // beebee + + 210, // hong_to_alshire + 261+100, // bb_to_alshire + + 50 + MAGIC_NUMBER_2, // hong_closer, + 96 + MAGIC_NUMBER_2, // bb_closer_coneb + 96 + MAGIC_NUMBER_2, // bb_closer, + 96 + MAGIC_NUMBER_2, // bb_closer_cone, + + ]; + + //////////////////////////////////////////////////////////////////////// + // ANIMATIONS... /////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////// + + // animation: { ticker:0, target:"sprite_name", frames:[{when:0, wait:0.1, then:4}, ...] } + self.animations = []; + self.createAnimation = function(spriteName, frames){ + self.animations.push({ + ticker: 0, + target: spriteName, + frames: frames + }); + }; + var _animSequence = function(from, to, duration, loop){ + var frames = []; + for(var frame=from; frame<=to; frame++){ + + if(loop){ + // LOOP + var next = (frame==to) ? from : frame+1; + frames.push({ when:frame, wait:duration, then:next }); + }else{ + // NOT LOOP: FINAL FRAME IS "TO" + var next = frame+1; + if(next<=to){ + frames.push({ when:frame, wait:duration, then:next }); + } + } + + } + return frames; + }; + self.executeAnimation = function(anim){ + + // Frame... + var sprite = self[anim.target]; + var frame = anim.frames.find(function(frame){ + return frame.when == sprite.currentFrame; + }); + if(frame){ + + var frameToGoTo = frame.when; + + // Next? + anim.ticker += 1/60; + if(anim.ticker >= frame.wait){ + anim.ticker = 0; + frameToGoTo = frame.then; + } + + // Change sprite + sprite.gotoFrame(frameToGoTo); + + } + + }; + + // SMASH THAT + self.createAnimation("break_hp", _animSequence( 1,4, 1/12, true) ); + + // ALSHIRE + self.createAnimation("alshire", _animSequence( 6,9, 1/12, true) ); + self.createAnimation("alshire", _animSequence( 11,22, 1/30, false) ); + + // BB + self.createAnimation("bb_closer", _animSequence( 18,21, 1/24, true) ); + + //////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////// - -210, - -210, - -210 - ] var parallax = 0; var parallaxTicker = 0; var PARALLAXING = null; - var ALPHA_INDEX = 4; + var ANXIETY_INDEX = 9; + var ticker = 0; + var MAGIC_NUMBER = (210 + 8); + self.update = function(){ + // TICKER + ticker += 1/60; + + // CLOUD OFFSET + OFFSETS[1] = 80 - ticker*3; + // START PARALLAXING IN / OUT if(PARALLAXING!=null){ @@ -186,21 +418,23 @@ function BG_Act4(){ // 0 to -180 in one second, smoothed var t = Math.cos(parallaxTicker*Math.TAU/2); // 1 to -1 t = (1-t)/2; // 0 to 1 - parallax = -t*210; + parallax = -t*MAGIC_NUMBER; // Anxiety Alpha - ALPHAS[ALPHA_INDEX] = t; + ALPHAS[ANXIETY_INDEX] = t; // DONE if(t==1 || t==0){ PARALLAXING = null; - if(STAGE==1){ - ALPHAS[6] = 1; // Talk 1 - } - - if(STAGE==3){ - ALPHAS[7] = 1; // Talk 2 + // Seeing Al-Shire + if(STAGE==2){ + self.break_hp.visible = false; + self.bb_to_alshire.visible = true; + if(_.INJURED){ + self.bb_to_alshire.gotoFrame(2); // CONE! + } + ALPHAS[16] = 0; // BB } } @@ -208,27 +442,69 @@ function BG_Act4(){ } // Anxiety BG - if(ALPHAS[ALPHA_INDEX]>0){ - self.anxiety.update(ALPHAS[ALPHA_INDEX]); - if(ALPHAS[ALPHA_INDEX]==1){ // if fully visible... - ALPHAS[0] = ALPHAS[1] = ALPHAS[2] = ALPHAS[3] = 0; // hide everything under - }else{ - ALPHAS[0] = ALPHAS[1] = ALPHAS[2] = ALPHAS[3] = 1; // hide everything under - } + if(ALPHAS[ANXIETY_INDEX]>0){ + self.anxiety.update(ALPHAS[ANXIETY_INDEX]); } + // BREAK_HP'S ALPHA + if(self.break_hp.visible){ + self.break_hp.alpha = ALPHAS[ANXIETY_INDEX]; + } + + // ALL ANIMS + self.animations.forEach(self.executeAnimation); + }; self.draw = function(ctx){ + // SUPER HACK FOR CONES + + // INTRO + if(_.INJURED && self.hong_transition.visible && self.hong_transition.currentFrame>=16){ + self.hong_transition_cone.visible = true; + self.hong_transition_cone.gotoFrame(self.hong_transition.currentFrame+5); + }else{ + self.hong_transition_cone.visible = false; + } + + // SMASHING + if(self.break_hp.visible){ + self.break_hp.y = self.break_hp.y*0.8 + 0*0.2; // move in + } + if(_.INJURED && self.break_hp_cone.visible){ + self.break_hp_cone.gotoFrame( self.break_hp.currentFrame+5 ); + } + self.break_hp_cone.y = self.break_hp.y; + + // ENDINGS YAP YAP YAP + if(self.bb_closer.currentFrame>=18 && self.bb_closer.currentFrame<=21){ + self.bb_closer_coneb.gotoFrame(31); // blank + self.bb_closer_cone.gotoFrame(self.bb_closer.currentFrame + 4); // CONE + } + + // BB EASES IN + if(self.bb_to_alshire.visible){ + OFFSETS[18] = OFFSETS[18]*0.9 + 261*0.1; + } + + + ///////////////////////////////////////// + ctx.save(); for(var i=0; i0){ - ctx.globalAlpha = ALPHAS[i]; - layer.draw(ctx); + if( !(i