HELL YEAH ACT 4 SPRITES PRETTY MUCH INTEGRATED

This commit is contained in:
Nicky Case 2019-08-14 11:54:04 -04:00
parent 4459df1655
commit 3e3e901097
22 changed files with 1414 additions and 611 deletions

View File

@ -267,6 +267,7 @@
<script src="scripts/game/Options.js"></script>
<script src="scripts/game/About.js"></script>
<!-- INTRO -->
<script src="scripts/intro/Intro_SceneSetup.js"></script>
<script src="scripts/intro/Intro_BG.js"></script>
@ -291,6 +292,8 @@
<!-- ACT IV -->
<script src="scripts/act4/Act4_SceneSetup.js"></script>
<script src="scripts/act4/Act4_BG.js"></script>
<script src="scripts/act4/Act4_Hong.js"></script>
<script src="scripts/act4/Act4_Beebee.js"></script>
<!-- CREDITS -->
<script src="scripts/credits/Credits_SceneSetup.js"></script>

View File

@ -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)

View File

@ -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.

514
scenes/act4_test.md Normal file
View File

@ -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)

View File

@ -1,9 +1,5 @@
# credits
`music('credits', {NO_LOOP:true, volume:0.45});`
(...1884)
`SceneSetup.credits()`
n: *CREDITS ROLL* (and mental health resource links)

View File

@ -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)

View File

@ -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; i<self.layers.length; i++){
var layer = self.layers[i];
layer.x = PARALLAXES[i] * parallax - OFFSETS[i];
layer.x = PARALLAXES[i] * parallax + OFFSETS[i];
// DON'T DRAW ANYTHING UNDER ANXIETY_INDEX WHEN'S IT'S 1
var DONT_DRAW_BENEATH = (ALPHAS[ANXIETY_INDEX]==1);
if(ALPHAS[i]>0){
ctx.globalAlpha = ALPHAS[i];
layer.draw(ctx);
if( !(i<ANXIETY_INDEX && DONT_DRAW_BENEATH) ){
ctx.globalAlpha = ALPHAS[i];
layer.draw(ctx);
}
}
}
@ -239,23 +515,94 @@ function BG_Act4(){
var STAGE = 0;
var _subscriptions = [];
_subscriptions.push(
subscribe("act4", function(thing, frame){
if(typeof frame=="string"){
if(frame=="next"){
self[thing].nextFrame();
}else{
self[thing].gotoFrameByName(frame);
}
}else{
self[thing].gotoFrame(frame);
}
}),
subscribe("act4_hong_sits", function(){
if(_.INJURED){
self.crutches.visible = true;
//self.hong_transition_cone.visible = true;
}
self.legs.visible = true;
self.hong_walks_in.visible = false;
self.hong_transition.visible = true;
}),
subscribe("act4-out-1", function(){
self.talk1Sprite.gotoFrame( _.INJURED ? 0 : 1 );
// WHOOSH
STAGE = 1;
PARALLAXING = "out";
sfx("whoosh");
sfx("whoosh"); // WHOOSH
// IT'S WHITE IN HERE
window.BLACK_CTA = true;
}),
subscribe("act4-show-chars", function(){
self.hong_transition.visible = false;
ALPHAS[15] = 1; // Hong
ALPHAS[16] = 1; // Beebee
}),
subscribe("smash", function(stage){
if(stage==0){
self.break_hp.visible = true;
sfx("ui_show_choice", {volume:0.4});
hong({ body:"normal", eyes:"look_up", mouth:"blank" });
bb({ eyes:"normal_u" });
}
if(stage==1){
ALPHAS[15] = 0; // Hong
ALPHAS[16] = 0; // Beebee
self.break_hp.gotoFrame(1);
if(_.INJURED){
self.break_hp_cone.visible = true;
self.break_hp_cone.gotoFrame(1+5);
}
}
if(stage==2){
ALPHAS[15] = 1; // Hong
ALPHAS[16] = 1; // Beebee
self.break_hp.gotoFrame(5);
self.break_hp_cone.visible = false;
}
}),
subscribe("act4-in-2", function(){
// SHOW ACTION, HIDE CHARS
ALPHAS[6] = 0; // Bye Talk 1
// Hide JUST HONG, parallax BB.
ALPHAS[15] = 0; // Hong
self.beebee.ALLOW_PARALLAX = true;
PARALLAXES[16] = 1.0; // battle bb
OFFSETS[16] = MAGIC_NUMBER*PARALLAXES[16]; // battle bb
PARALLAXES[13] = 1.0; // break_hp
OFFSETS[13] = MAGIC_NUMBER*PARALLAXES[13]; // break_hp
// Show Alshire sprites
self.alshire.visible = true;
self.hong_to_alshire.visible = true;
// WHOOSH
STAGE = 2;
@ -266,6 +613,7 @@ function BG_Act4(){
window.BLACK_CTA = false;
}),
subscribe("act4-out-3", function(){
// WHOOSH
@ -273,41 +621,39 @@ function BG_Act4(){
PARALLAXING = "out";
sfx("whoosh");
// PARALLAX
MAGIC_NUMBER = MAGIC_NUMBER_2;
// JUMP CUT TO THE FINAL BB
self.bb_to_alshire.visible = false;
self.bb_closer.visible = true;
if(_.INJURED){
self.bb_closer_coneb.visible = true;
self.bb_closer_cone.visible = true;
}
// IT'S WHITE IN HERE
window.BLACK_CTA = true;
}),
subscribe("act4-jumpcut-hong", function(){
self.hong_to_alshire.visible = false;
self.hong_closer.visible = true;
})
/*
subscribe("outside-hong", function(frame){
if(_.INJURED) frame += "-injured";
if(self.outsideHongSprite.doesFrameNameExist(frame)){
self.outsideHongSprite.gotoFrameByName(frame);
}
}),
subscribe("smash", function(stage){
if(stage==0){
Game.clearText();
HP.show();
sfx("ui_show_choice", {volume:0.4});
}
if(stage==1){
HP.hide(true);
self.talk1Sprite.alpha = 0;
self.smashSprite.gotoFrame(0);
}
if(stage==2){
self.talk1Sprite.alpha = 1;
self.smashSprite.gotoFrame(1);
}
if(stage==3){
self.smashSprite.gotoFrame(2);
}
}),
subscribe("al-shire", function(frame){
self.alShireSprite.gotoFrameByName(frame);
}),
subscribe("end-pat", function(frame){
self.talk2Sprite.gotoFrameByName(frame);
})
})*/
);
self.kill = function(){

135
scripts/act4/Act4_Beebee.js Normal file
View File

@ -0,0 +1,135 @@
Loader.addImages([
{ id:"act4_bb", src:"sprites/act4/bb_convo.png" }
]);
function Act4_Beebee(){
var self = this;
// SPRITE CONFIG!
var spriteConfig = {
image: Library.images.act4_bb,
grid:{
width: 8,
height: 8
},
frame:{
width: 500,
height: 500
},
anchor:{
x: 171,
y: 242
},
frameNames:[
"body_normal",
"body_normal_chest",
"body_normal_two_up",
"body_normal_one_up",
"body_normal_paw",
"cone_normal",
"coneb_normal",
"mouth_normal",
"mouth_normal_talk",
"mouth_narrow",
"mouth_narrow_talk",
"mouth_smile",
"mouth_smile_talk",
"mouth_scream",
"mouth_scream_talk",
"cone_scream",
"coneb_scream",
"eyes_normal",
"eyes_normal_r",
"eyes_normal_u",
"eyes_normal_d",
"eyes_look_down",
"eyes_scream",
"eyes_scream_sad",
"eyes_super_sad",
"eyes_closed",
"eyes_closed_annoyed",
"eyes_sexy",
"eyes_smile",
"eyes_smile_r",
"eyes_smile_u",
"eyes_smile_d",
"eyes_angry",
"eyes_angry_r",
"eyes_angry_u",
"eyes_angry_d",
"eyes_surprise",
"eyes_surprise_r",
"eyes_surprise_u",
"eyes_surprise_d",
"eyes_annoyed",
"eyes_annoyed_r",
"eyes_annoyed_u",
"eyes_annoyed_d",
"eyes_sad",
"eyes_sad_r",
"eyes_sad_u",
"eyes_sad_d",
"eyes_suspect",
"eyes_suspect_r",
"body_karate_1*",
"body_karate_2*",
"cone_karate",
"coneb_karate",
"body_yap_1*",
"body_yap_2*",
"body_yap_3*",
"body_yap_4*",
"cone_yap_1",
"cone_yap_2",
"cone_yap_3",
"cone_yap_4",
"eyes_blank", // BLANK
"mouth_blank", // BLANK
],
x: 110+171,
y: 200+242,
OVERRIDE_LAYER_NAMES: ["coneb", "body", "mouth", "eyes", "cone"]
};
// ANIM LOOPS
var animLoops = [];
// Inherit from Character!
Character.apply(self, [spriteConfig, animLoops]);
// Go To Frames!
self.gotoFrames({
body: "normal",
mouth: "normal",
eyes: "normal",
});
var _subscriptions = [];
_subscriptions.push( subscribe("bb", self.gotoFrames) );
_subscriptions.push( subscribe("DONE_SPEAKING", self.whenDoneSpeaking) );
// Draw!
var ticker = 0;
self.characterSpeakerID = "b";
// self.bounceHookes = 0.25;
// self.bounceDamp = 0.9;
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Kill!
self.kill = function(){
_subscriptions.forEach(unsubscribe);
};
}

99
scripts/act4/Act4_Hong.js Normal file
View File

@ -0,0 +1,99 @@
Loader.addImages([
{ id:"act4_hong", src:"sprites/act4/hong_convo.png" }
]);
function Act4_Hong(){
var self = this;
// SPRITE CONFIG!
var spriteConfig = {
image: Library.images.act4_hong,
grid:{
width: 8,
height: 5
},
frame:{
width: 400,
height: 400
},
anchor:{
x: 55,
y: 135
},
frameNames:[
"body_sit*",
"body_sigh_1*",
"body_sigh_2*",
"body_hold",
"body_normal",
"body_one_up",
"body_point",
"body_shrug",
"body_chin",
"body_hands_1",
"body_hands_2",
"eyes_normal",
"eyes_normal_l",
"eyes_surprise",
"eyes_surprise_l",
"eyes_annoyed",
"eyes_annoyed_l",
"eyes_angry",
"eyes_angry_l",
"eyes_suspect",
"eyes_suspect_l",
"eyes_sad",
"eyes_sad_l",
"eyes_look_up",
"mouth_normal",
"mouth_normal_talk",
"mouth_happy",
"mouth_happy_talk",
"mouth_sad",
"mouth_sad_talk",
"mouth_narrow",
"mouth_narrow_talk",
"mouth_blank", // BLANK
"eyes_blank", // BLANK
],
x: 0+55,
y: 258+135
};
// ANIM LOOPS
var animLoops = [];
// Inherit from Character!
Character.apply(self, [spriteConfig, animLoops]);
// Go To Frames!
self.gotoFrames({
body: "sit",
mouth: "blank",
eyes: "blank",
},0);
var _subscriptions = [];
_subscriptions.push( subscribe("hong", self.gotoFrames) );
_subscriptions.push( subscribe("DONE_SPEAKING", self.whenDoneSpeaking) );
//_subscriptions.push( subscribe("attack_hong", self.showAttackedIcon) );
// Draw
self.characterSpeakerID = "h";
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Kill!
self.kill = function(){
_subscriptions.forEach(unsubscribe);
};
}

View File

@ -26,8 +26,10 @@ function Character(spriteConfig, animLoops){
self.animLoops = animLoops || [];
// Sprite!
var THERE_IS_A_CONE = !!spriteConfig.OVERRIDE_LAYER_NAMES;
var LAYER_NAMES = spriteConfig.OVERRIDE_LAYER_NAMES || ["body","mouth","eyes"];
self.layers = {};
["body","mouth","eyes"].forEach(function(layerName){
LAYER_NAMES.forEach(function(layerName){
self.layers[layerName] = new Sprite(spriteConfig);
});
@ -102,6 +104,12 @@ function Character(spriteConfig, animLoops){
l.mouth.gotoFrameByName( "mouth_"+c.mouth );
l.eyes.gotoFrameByName( "eyes_"+c.eyes );
// LOCK IN THE CONE TO BODY + MOUTH, IF ANY
if(THERE_IS_A_CONE){
l.cone.gotoFrameByName( "cone_normal" );
l.coneb.gotoFrameByName( "coneb_normal" );
}
// MOUTH LOCK?
if(args.MOUTH_LOCK){
self.MOUTH_LOCK = l.mouth.currentFrameName;
@ -142,10 +150,18 @@ function Character(spriteConfig, animLoops){
self.bounceVel *= self.bounceDamp;
var totalSquash = self.characterSquash * self.bounce;
l.body.squash = l.mouth.squash = l.eyes.squash = totalSquash;
if(THERE_IS_A_CONE){
l.cone.squash = l.coneb.squash = totalSquash;
}
// Anim Loop rules!
self.runAnimLoopRules();
// SUPER HACK
if(THERE_IS_A_CONE){
l.coneb.draw(ctx);
}
// Body
l.body.draw(ctx);
@ -177,6 +193,11 @@ function Character(spriteConfig, animLoops){
}
// SUPER HACK
if(THERE_IS_A_CONE){
l.cone.draw(ctx);
}
// Draw attacked icon
if(IVE_BEEN_ATTACKED){

View File

@ -102,7 +102,7 @@ function BG_Intro(){
0, // clouds
0,
0,
20,
20, // stump
0,
20
]

View File

@ -4,10 +4,9 @@ Loader.addScenes([
"scenes/intro.md",
"scenes/act1.md",
"scenes/intermission.md",
//"scenes/act2_test.md",
"scenes/act2.md",
"scenes/act3.md",
"scenes/act4.md",
"scenes/act4_test.md",
"scenes/credits.md"
]);
@ -42,8 +41,12 @@ subscribe("START_GAME", function(){
//Game.goto("act2");
// Act 3
_ = {"CHAPTER":2,"attack_harm_ch1":3,"attack_alone_ch1":2,"attack_bad_ch1":1,"whitebread":true,"partyinvite":"ignore","subtweet":true,"serialkiller":true,"act1g":"dont","badnews":true,"factcheck":false,"act1_ending":"flight","INTERMISSION_STAGE":2,"attack_harm_ch2":2,"attack_alone_ch2":1,"attack_bad_ch2":3,"a2_first_danger":"social","a2_attack_1":"alone","a2_first_choice":"ignore","a2_second_danger":"ignore","a2_attack_2":"harm","a2_attack_3":"harm","SPECIAL_ATTACK":"bad","a2_ending":"fight"};
Game.goto("act3");
//_ = {"CHAPTER":2,"attack_harm_ch1":3,"attack_alone_ch1":2,"attack_bad_ch1":1,"whitebread":true,"partyinvite":"ignore","subtweet":true,"serialkiller":true,"act1g":"dont","badnews":true,"factcheck":false,"act1_ending":"flight","INTERMISSION_STAGE":2,"attack_harm_ch2":2,"attack_alone_ch2":1,"attack_bad_ch2":3,"a2_first_danger":"social","a2_attack_1":"alone","a2_first_choice":"ignore","a2_second_danger":"ignore","a2_attack_2":"harm","a2_attack_3":"harm","SPECIAL_ATTACK":"bad","a2_ending":"fight"};
//Game.goto("act3");
// Act 4
_ = {"CHAPTER":3,"attack_harm_ch1":3,"attack_alone_ch1":2,"attack_bad_ch1":1,"whitebread":true,"partyinvite":"ignore","subtweet":true,"serialkiller":true,"act1g":"dont","badnews":true,"factcheck":false,"act1_ending":"fight","INTERMISSION_STAGE":2,"attack_harm_ch2":2,"attack_alone_ch2":1,"attack_bad_ch2":3,"a2_first_danger":"social","a2_attack_1":"alone","a2_first_choice":"ignore","a2_second_danger":"ignore","a2_attack_2":"harm","a2_attack_3":"harm","SPECIAL_ATTACK":"alone","a2_ending":"fight","act3_bb_body":4,"a3_ending":"walkaway","INJURED":true};
Game.goto("act4");
//Game.goto("intro");

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 176 KiB