-
- Augh games take so long to make!
- This one will be done August 2019, and released for free.
-
-
- This is a demo for my upcoming story-game,
- which will be released for free in August 2019.
-
- Get notified via my (once-a-month) newsletter!
-
+
+ Blah blah blah
Help me keep making free games?
diff --git a/scenes/act1.md b/scenes/act1.md
index abd8229..6893102 100644
--- a/scenes/act1.md
+++ b/scenes/act1.md
@@ -1,6 +1,8 @@
# act1
-`SceneSetup.act1();`
+```
+SceneSetup.act1();
+```
(...300)
@@ -8,6 +10,129 @@ n: AND THIS IS THE HUMAN'S ANXIETY
n: _YOU_ ARE THE ANXIETY
+{{if window.localStorage.continueChapter=="replay"}}
+(#act1_replay)
+{{/if}}
+
+{{if window.localStorage.continueChapter!="replay"}}
+(#act1_normal)
+{{/if}}
+
+
+
+# act1_replay
+
+h: Oh hey! We're back here again?
+
+`hong({eyes:"0_neutral"})`
+
+n: YOUR JOB IS TO PROTECT YOUR HUMAN FROM *DANGER*
+
+`bb({eyes:"look", mouth:"small_lock"})`
+
+n: IN FACT, REPLAYING THIS GAME IS PUTTING THEM IN *DANGER* RIGHT NOW
+
+n: QUICK, WARN THEM!
+
+`bb({eyes:"fear", mouth:"normal"})`
+
+b: Human! Listen, we're in danger! The danger is...
+
+[The player's gonna torture us again!](#act1_replay_torture)
+
+[The player won't find an alternate ending!](#act1_replay_alternate)
+
+[The player will get ludonarrative dissonance!](#act1_replay_dissonance)
+
+# act1_replay_torture
+
+```
+window.HACK_REPLAY = JSON.parse(localStorage.act4);
+```
+
+{{if window.HACK_REPLAY.act1_ending=="fight"}}
+b: They'll make us curl up into a ball and cry!
+{{/if}}
+
+{{if window.HACK_REPLAY.act1_ending=="flight"}}
+b: They'll make us kill your phone for giving you a panic attack!
+{{/if}}
+
+{{if window.HACK_REPLAY.a2_ending=="fight"}}
+b: They'll make us *NOT* punch the party host!
+{{/if}}
+
+{{if window.HACK_REPLAY.a2_ending=="flight"}}
+b: They'll make us punch the sympathetic-villain party host!
+{{/if}}
+
+{{if window.HACK_REPLAY.a3_ending=="jump"}}
+h: Well at least we might not jump off the roof this ti--
+{{/if}}
+
+{{if window.HACK_REPLAY.a3_ending=="walkaway"}}
+b: THEY'LL MAKE US JUMP OFF THE ROOF.
+{{/if}}
+
+b: ALL THESE NEW TERRIBLE THINGS WILL HAPPEN TO US, AND THEN WE'LL--
+
+(#act1_replay_end)
+
+
+#act1_replay_alternate
+
+h: Sure, the story as a *whole* is the same, but each chapter has two possible endings, plus all the branching dialogue opti--
+
+b: The player will be disappointed, close this browser tab, delete our software, and then we'll--
+
+(#act1_replay_end)
+
+
+# act1_replay_dissonance
+
+h: A lewd-what now?
+
+b: The story arc was about how you can *CHOOSE* to build a healthy collaboration with your fear,
+
+b: But replaying the game will give the same story, implying your *CHOICES* don't matter,
+
+b: Thus showing a contradiction between the game's message and mechanics,
+
+b: Thus unraveling the fabric of this narrative universe,
+
+b: And then we'll--
+
+(#act1_replay_end)
+
+
+# act1_replay_end
+
+`bb({body:"panic"})`
+
+b: DIEEEEEEEEEEEEEEEEEEE
+
+```
+Game.clearText();
+```
+
+(...1001)
+
+b: hahaha
+
+h: Okay let's get back into character.
+
+```
+Game.clearText();
+```
+
+n4: (LET _YOUR_ ANXIETY BLAH BLAH BLAH MOST SIMILAR TO WHAT _YOUR_ FEAR BLAH BLAH YOU KNOW THE DRILL)
+
+(#act1_normal_choice)
+
+
+
+# act1_normal
+
`hong({mouth:"0_neutral", eyes:"0_annoyed"})`
h: Oh good, my wolf's back. Faaaaantastic.
@@ -22,23 +147,33 @@ n: IN FACT, THAT SANDWICH IS PUTTING THEM IN *DANGER* RIGHT NOW
n: QUICK, WARN THEM!
-`bb({eyes:"fear", mouth:"normal"})`
-
-`Game.OVERRIDE_TEXT_SPEED = 1.25;`
+```
+bb({body:"squeeze_talk"});
+hong({body:"0_squeeze"});
+```
b: Human! Listen, we're in danger! The danger is...
+`bb({body:"squeeze"})`
+
n4: (LET _YOUR_ ANXIETY COME OUT TO PLAY! PICK WHAT'S MOST SIMILAR TO WHAT _YOUR_ FEAR TELLS YOU)
-[We're eating alone for lunch! Again!](#act1a_alone)
+(#act1_normal_choice)
-[We're not productive while eating!](#act1a_productive)
+# act1_normal_choice
-[That white bread's bad for us!](#act1a_bread)
+[We're eating alone for lunch! Again!](#act1a_alone) `bb({body:"squeeze_talk"})`
+
+[We're not productive while eating!](#act1a_productive) `bb({body:"squeeze_talk"})`
+
+[That white bread's bad for us!](#act1a_bread) `bb({body:"squeeze_talk"})`
# act1a_alone
-`bb({mouth:"small", eyes:"narrow"})`
+```
+bb({body:"normal", mouth:"small", eyes:"narrow"});
+hong({body:"0_sammich"});
+```
b: Don't you know loneliness is associated with premature death as much as smoking 15 cigarettes a day?-
@@ -79,7 +214,10 @@ n: YOU USED *FEAR OF BEING UNLOVED*
# act1a_productive
-`bb({mouth:"small", eyes:"normal"});`
+```
+bb({body:"normal", mouth:"small", eyes:"normal"});
+hong({body:"0_sammich"});
+```
b: Whip out your laptop and do some work right now!
@@ -120,7 +258,10 @@ n: YOU USED *FEAR OF BEING A BAD PERSON*
# act1a_bread
-`hong({eyes:"0_annoyed"})`
+```
+bb({body:"normal", mouth:"normal", eyes:"fear"});
+hong({body:"0_sammich", eyes:"0_annoyed"});
+```
h: Have those studies been replicat--
@@ -158,10 +299,12 @@ n: IT'S SUPER EFFECTIVE
b: See, human? I am your loyal guard-wolf!
-`bb({body:"point_heart", eyes:"pretty"});`
+`bb({body:"pride_talk"});`
b: Trust your gut! Your feelings are always valid!
+`bb({body:"pride"});`
+
n: GET YOUR HUMAN'S ENERGY BAR TO ZERO
n: TO PROTECT THEIR PHYSICAL + SOCIAL + MORAL NEEDS, YOU CAN USE:
@@ -225,7 +368,7 @@ b: Doesn't that weirdo throw a party *every* weekend?
`bb({eyes:"uncertain_right"});`
-b: What inner void are they trying to fill? They must be deeply messed up on the inside!
+b: What inner void are they trying to fill? They must be deeply messed up inside!
`hong({eyes:"surprise"});`
@@ -825,7 +968,7 @@ attack("10p", "bad");
(...2500)
```
-hong({mouth:"anger", eyes:"fear"});
+hong({mouth:"anger", eyes:"anger"});
Game.OVERRIDE_TEXT_SPEED = 1.5;
_.factcheck = true;
```
@@ -981,9 +1124,9 @@ b: DANGER DANGER DANGER DANGER DANGER DANGER
`bb({body:"point_crotch", eyes:"normal", mouth:"normal"})`
-b: Random hookups may be able to fill the hole down there
+b: Random hookups may be able to fill the hole down there,
-b: but they can never fill the hole
+b: but they can never fill the hole...
`bb({body:"point_heart", eyes:"pretty", mouth:"small"})`
diff --git a/scenes/act2.md b/scenes/act2.md
index 12dc5ad..d1b39fa 100644
--- a/scenes/act2.md
+++ b/scenes/act2.md
@@ -297,7 +297,7 @@ music(null, {fade:1});
```
music('battle', {volume:0.5});
publish("hp_show");
-bb({mouth:"normal", eyes:"normal"});
+bb({body:"normal", mouth:"normal", eyes:"normal"});
```
n: ROUND TWO: *FIGHT!*
@@ -405,6 +405,8 @@ b: ...
b: *GASP*
+`bb({mouth:"small_talk"})`
+
b: I MUST WARN YOU ABOUT...
[*More* of the same danger!](#act2b_louder)
@@ -1051,9 +1053,9 @@ b: ...
[Jeez, human. That's really hurtful.](#act2e_hurtful)
-[Because... "your feelings are valid"?](#act2e_valid)
+[I'm a feeling. Feelings are valid.](#act2e_valid)
-[Human, we're *both* "just chemicals".](#act2e_rational)
+[Human, we're *both* "just chemicals."](#act2e_rational)
# act2e_hurtful
@@ -1384,7 +1386,7 @@ bb({body:"frazzled", mouth:"frazzled", eyes:"frazzled"});
h: Mmm, what an exquisite palette!
-h: A full-bodied flavor of "shut your mind up", with a subtle aftertaste of "never feel anything ever again"!
+h: A full-bodied flavor of "shut your mind up," with a subtle aftertaste of "never feel anything ever again"!
b: This is bad, human. This is really, really bad.
@@ -1481,6 +1483,7 @@ sfx("hadouken");
# act2i
```
+publish("hide_tabs");
publish("show_special_attack");
Game.FORCE_CANT_SKIP = true;
music(null);
@@ -1490,6 +1493,7 @@ stopAllSounds();
(...5000)
```
+publish("show_tabs");
hong({ body:"final", mouth:"final" });
bb({ body:"normal", mouth:"normal", eyes:"sad" });
attack("100p", _.SPECIAL_ATTACK);
diff --git a/scenes/act3.md b/scenes/act3.md
index be77ce6..1f5d08f 100644
--- a/scenes/act3.md
+++ b/scenes/act3.md
@@ -46,6 +46,10 @@ publish("act3",["roofhong",5]);
r: You remind me of myself when I was younger. Back when I was tormented by the animal in my head.
+`publish("act3",["roofhunter",9]);`
+
+r: I'm so grateful I can pay it forward, and help you kill the beast the way I killed mine.
+
```
publish("act3",["roofhunter",2]);
publish("act3",["roofhong",2]);
@@ -127,7 +131,7 @@ r: But that's exactly why we need death-defying thrills! Party hard! Carpe diem!
publish("act3",["roofhunter",10]);
```
-r: Let's show that animal we don't give two *^dick^s* about its ^bitch^ing! Jump in.
+r: Show that animal we don't give two *^dick^s* about its ^bitch^ing! Jump in.
```
publish("act3",["roofhunter",11]);
@@ -1143,51 +1147,52 @@ Game.WORDS_HEIGHT_BOTTOM = -1;
Game.FORCE_TEXT_Y = -1;
Game.clearText();
publish("act4-injury-show");
+publish("hide_tabs");
```
(...2000)
```
-/*sfx("hospital1");*/
+sfx("hospital1");
publish("act4-injury", [1]);
```
(...4000)
```
-/*stopAllSounds();*/
+stopAllSounds();
publish("act4-injury", [0]);
```
(...2000)
```
-/*sfx("hospital2");*/
+sfx("hospital2");
publish("act4-injury", [2]);
```
(...4000)
```
-/*stopAllSounds();*/
+stopAllSounds();
publish("act4-injury", [0]);
```
(...2000)
```
-/*sfx("hospital3");*/
+sfx("hospital3");
publish("act4-injury", [3]);
```
-(...6000)
+(...8000)
```
-/*stopAllSounds();*/
+stopAllSounds();
publish("act4-injury", [0]);
```
-(...5000)
+(...5500)
`_.INJURED = true;`
diff --git a/scenes/act4.md b/scenes/act4.md
index cf7e44f..b8d9717 100644
--- a/scenes/act4.md
+++ b/scenes/act4.md
@@ -8,6 +8,21 @@ Game.FORCE_CANT_SKIP = true;
(...5001)
+```
+publish("set_how_many_prompts", [1]);
+Game.FORCE_CANT_SKIP = false;
+Game.CLICK_TO_ADVANCE = true;
+```
+
+n3: (game auto-saved)
+
+```
+Game.clearText();
+Game.FORCE_CANT_SKIP = true;
+```
+
+(...1001)
+
```
var hong_frame = _.INJURED ? 9 : 0;
publish("act4", ["hong_walks_in",hong_frame]);
@@ -374,7 +389,7 @@ b: I'm a battered shelter dog.
`bb({eyes:"sad"})`
-b: We've been through rough stuff, possibly trauma, so that's why sometimes I over-react and go--
+b: We've been through rough stuff. Maybe trauma or neglect. That's why I sometimes over-react and go:
```
sfx("yaps", {volume:0.6});
@@ -882,7 +897,7 @@ h: Could also learn to get more comfortable with rejection.
`hong({ eyes:"normal" });`
-h: Or learn to know when people *aren't* rejecting us, they're just tired or have Resting Bitch Face.
+h: Or learn to know when people *aren't* rejecting us, they're just tired or have Resting ^Bitch^ Face.
```
hong({ body:"normal" });
@@ -1038,16 +1053,21 @@ h: When dogs want to show love and trust, they make themselves vulnerable by exp
`hong({body:"one_up"})`
-h: Right now we're not *yet* secure enough to be too vulnerable, but with enough training,
+h: Maybe we're not *yet* secure enough to be too vulnerable, but with enough training,
`hong({body:"normal", eyes:"surprise"})`
h: One day we can show people the real us – all messed-up, all human.
-`hong({eyes:"normal"})`
+```
+hong({eyes:"normal"});
+bb({ eyes:"super_sad", mouth:"smile", body:"chest" });
+```
b: I'll roll over if you give me a treat.
+`bb({ eyes:"normal", mouth:"normal" });`
+
h: No.
(#act4_something_else)
@@ -1802,7 +1822,7 @@ b: I want to be a good guard-dog. Just like how hunger & thirst are alarms for y
`publish("act4", ["bb_closer", 8]);`
-b: I want to be the alarm for your emotional needs – your needs for safety, belonging, goodness.
+b: I want to be the alarm for your *psychological* needs – your needs for safety, belonging, goodness.
`publish("act4", ["bb_closer", 1]);`
@@ -1810,9 +1830,9 @@ b: But... I suck at my job, so I need you to train me.
`publish("act4", ["bb_closer", 4]);`
-b: I'm not "always valid", nor "always irrational". I'm just... trying my best. So, please,
+b: I'm not "always valid," nor "always irrational." I'm just... trying my best. So, please,
-`publish("act4", ["bb_closer", 8]);`
+`publish("act4", ["bb_closer", 30]);`
b: Help me help you!
@@ -1848,11 +1868,11 @@ b: Maybe you can tame this wolf.
`Game.OVERRIDE_CHOICE_SPEAKER = "h"`
-[Good dog.](#act4f-pat-bb) `Game.OVERRIDE_CHOICE_SPEAKER = "h"; publish("act4", ["hong_closer", 2]);`
+[Good dog.](#act4f-pat-bb) `Game.OVERRIDE_CHOICE_SPEAKER = "h"; publish("act4", ["hong_closer", 2]); publish("hide_tabs");`
`Game.OVERRIDE_CHOICE_SPEAKER = "b"`
-[Good human.](#act4f-pat-hong) `Game.OVERRIDE_CHOICE_SPEAKER = "b"; publish("act4", ["bb_closer", 8]);`
+[Good human.](#act4f-pat-hong) `Game.OVERRIDE_CHOICE_SPEAKER = "b"; publish("act4", ["bb_closer", 8]); publish("hide_tabs");`
# act4f-pat-hong
diff --git a/scenes/intro.md b/scenes/intro.md
index 08a6f79..1aa6668 100644
--- a/scenes/intro.md
+++ b/scenes/intro.md
@@ -84,7 +84,7 @@ _.PLAYED_BEFORE = !!window.localStorage.continueChapter;
`clearText()`
-n3: Welcome! This is less of a "game", more of an interactive story. Hope you like reading, sucka!
+n3: Welcome! This is less of a "game," more of an interactive story. Hope you like reading, sucka!
n3: So before we start, how would *you* like to read?
diff --git a/scripts/act1/Act1_Beebee.js b/scripts/act1/Act1_Beebee.js
index 614468d..7dc5f8f 100644
--- a/scripts/act1/Act1_Beebee.js
+++ b/scripts/act1/Act1_Beebee.js
@@ -70,7 +70,12 @@ function Act1_Beebee(){
"mouth_shut",
"eyes_anger",
- "body_meta*"
+ "body_meta*",
+ "body_laugh*",
+ "body_pride_talk*",
+ "body_pride*",
+ "body_squeeze_talk*",
+ "body_squeeze*",
],
x: 270-7.5,
@@ -117,6 +122,14 @@ function Act1_Beebee(){
ticker += 1/60;
self.characterSquash = 1 + Math.sin(ticker*Math.TAU*7)*0.01; // seven vibes per second
+ // TOTAL HACK
+ var b = self.layers.body.currentFrameName;
+ if(b=="body_squeeze_talk*" || b=="body_squeeze*"){// || b=="body_pride_talk*" || b=="body_pride*"){
+ self.characterSquash = 1; // TOTAL HACK
+ self.bounce = 1;
+ self.bounceVel = 0;
+ }
+
// Old Draw
_oldDraw.apply(self, arguments);
diff --git a/scripts/act1/Act1_Hong.js b/scripts/act1/Act1_Hong.js
index 3ed83f8..9325e21 100644
--- a/scripts/act1/Act1_Hong.js
+++ b/scripts/act1/Act1_Hong.js
@@ -25,6 +25,7 @@ function Act1_Hong(){
"body_0_sammich_no_outline",
"body_0_sammich",
+ "body_0_squeeze*",
"eyes_0_neutral",
"eyes_0_lookaway",
"eyes_0_annoyed",
@@ -65,7 +66,9 @@ function Act1_Hong(){
"body_3_defeated1*",
"body_3_defeated2*",
"body_3_defeated3*",
- "body_3_defeated3_no_outline*"
+ "body_3_defeated3_no_outline*",
+
+ "body_laugh*",
],
x: 65,
diff --git a/scripts/act1/Act1_SceneSetup.js b/scripts/act1/Act1_SceneSetup.js
index 9bc2276..66a0752 100644
--- a/scripts/act1/Act1_SceneSetup.js
+++ b/scripts/act1/Act1_SceneSetup.js
@@ -8,10 +8,14 @@ SceneSetup.act1 = function(){
Game.resetScene();
+ // HI TABS
+ publish("show_tabs");
+
// RESET HP
HP.reset();
// ATTACKS
+ Game.start(); /* RESET THE GLOBAL VAR _ */
_.CHAPTER = 1;
_.attack_harm_ch1 = 0;
_.attack_alone_ch1 = 0;
diff --git a/scripts/act2/Act2_Beebee.js b/scripts/act2/Act2_Beebee.js
index e621be6..baca6d9 100644
--- a/scripts/act2/Act2_Beebee.js
+++ b/scripts/act2/Act2_Beebee.js
@@ -30,7 +30,7 @@ function Act2_Beebee(){
"body_one_up",
"body_scream_a_1*",
"body_scream_a_2*",
- "mouth_shocked",
+ "body_shocked*",
"mouth_small",
"mouth_small_talk",
@@ -153,8 +153,8 @@ function Act2_Beebee(){
// Go To Frames!
self.gotoFrames({
- body: "normal",
- mouth: "shocked",
+ body: "shocked",
+ mouth: "blank",
eyes: "blank",
});
var _subscriptions = [];
diff --git a/scripts/act2/Act2_SceneSetup.js b/scripts/act2/Act2_SceneSetup.js
index 231bc20..1225007 100644
--- a/scripts/act2/Act2_SceneSetup.js
+++ b/scripts/act2/Act2_SceneSetup.js
@@ -4,6 +4,9 @@ Loader.addSounds([
SceneSetup.act2 = function(){
+ // HI TABS
+ publish("show_tabs");
+
Game.resetScene();
// RESET HP
diff --git a/scripts/act3/Act3_BG.js b/scripts/act3/Act3_BG.js
index 1ebfc15..1e2c64a 100644
--- a/scripts/act3/Act3_BG.js
+++ b/scripts/act3/Act3_BG.js
@@ -17,9 +17,9 @@ Loader.addSounds([
{ id:"quack", src:"sounds/sfx/quack.mp3" },
{ id:"bottle_toss", src:"sounds/sfx/bottle_toss.mp3" },
{ id:"bottle_slip", src:"sounds/sfx/bottle_slip.mp3" },
- /*{ id:"hospital1", src:"sounds/sfx/hospital1.mp3" },
+ { id:"hospital1", src:"sounds/sfx/hospital1.mp3" },
{ id:"hospital2", src:"sounds/sfx/hospital2.mp3" },
- { id:"hospital3", src:"sounds/sfx/hospital3.mp3" },*/
+ { id:"hospital3", src:"sounds/sfx/hospital3.mp3" },
{ id:"door", src:"sounds/sfx/door.mp3" },
]);
@@ -290,6 +290,7 @@ function BG_Rooftop(){
};
+ var vibrateTicker = 0;
self.draw = function(ctx){
ctx.save();
@@ -307,6 +308,12 @@ function BG_Rooftop(){
}else{
+ if(self.hospitalSprite.currentFrame==2){ // ambulance
+ vibrateTicker += 1/60;
+ self.hospitalSprite.y = Math.sin(vibrateTicker*10*Math.TAU)*5;
+ }else{
+ self.hospitalSprite.y = 0;
+ }
self.hospitalSprite.draw(ctx);
}
diff --git a/scripts/act3/Act3_SceneSetup.js b/scripts/act3/Act3_SceneSetup.js
index c3bf8f5..586d2c9 100644
--- a/scripts/act3/Act3_SceneSetup.js
+++ b/scripts/act3/Act3_SceneSetup.js
@@ -6,6 +6,9 @@ Loader.addSounds([
SceneSetup.act3 = function(){
+ // HI TABS
+ publish("show_tabs");
+
Game.resetScene();
// RESET HP
diff --git a/scripts/act4/Act4_SceneSetup.js b/scripts/act4/Act4_SceneSetup.js
index f0f76bb..c836986 100644
--- a/scripts/act4/Act4_SceneSetup.js
+++ b/scripts/act4/Act4_SceneSetup.js
@@ -4,6 +4,9 @@ Loader.addSounds([
SceneSetup.act4 = function(){
+ // HI TABS
+ publish("show_tabs");
+
Game.resetScene();
// RESET HP
diff --git a/scripts/credits/Credits_BG.js b/scripts/credits/Credits_BG.js
index a1d58d4..6b6691f 100644
--- a/scripts/credits/Credits_BG.js
+++ b/scripts/credits/Credits_BG.js
@@ -64,7 +64,7 @@ function BG_Credits(){
// END MESSAGE
var endMsg = {
image: Library.images.credits_end_message,
- grid:{ width:3, height:2 },
+ grid:{ width:4, height:1 },
frame:{ width:720, height:1200 },
anchor:{ x:0, y:0 },
x:0, y:17
@@ -75,7 +75,7 @@ function BG_Credits(){
{from:53.8333,to:54.4667},
{from:57.8333,to:58.4667}].forEach(function(period, i){
var msg = new Sprite(endMsg);
- msg.gotoFrame(i+1);
+ msg.gotoFrame(i);
msg._PERIOD = period;
self.endMessages.push(msg);
});
diff --git a/scripts/credits/Credits_SceneSetup.js b/scripts/credits/Credits_SceneSetup.js
index 1156e41..f6ee805 100644
--- a/scripts/credits/Credits_SceneSetup.js
+++ b/scripts/credits/Credits_SceneSetup.js
@@ -4,6 +4,9 @@ Loader.addSounds([
SceneSetup.credits = function(){
+ // BYE TABS
+ publish("hide_tabs");
+
Game.resetScene();
Game.clearText();
diff --git a/scripts/game/About.js b/scripts/game/About.js
index fdb82b6..8187121 100644
--- a/scripts/game/About.js
+++ b/scripts/game/About.js
@@ -6,21 +6,10 @@ Loader.addSounds([
(function(){
- // Newsletter stuff
- var gdpr = $("#gdpr");
- var submit = $("#submit");
- gdpr.onchange = function(){
- var isChecked = gdpr.checked;
- submit.disabled = !isChecked;
- submit.value = isChecked ? "Subscribe! →" : "← plz consent";
- };
- gdpr.onchange();
- $("#the_newsletter").setAttribute("action", "https://sendy.ncase.me/subscribe");
-
// The About Button
var aboutDOM = $("#about");
- $("#about").onclick = function(){
+ $("#huh").onclick = function(){
aboutDOM.setAttribute("about","yes");
aboutDOM.style.top = "40px";
@@ -42,7 +31,7 @@ Loader.addSounds([
};
// SHOW END
- subscribe("END_OF_DEMO", function(){
+ subscribe("THE_END", function(){
// Hi
About.showing = true;
diff --git a/scripts/game/Character.js b/scripts/game/Character.js
index 81763bf..4daecd3 100644
--- a/scripts/game/Character.js
+++ b/scripts/game/Character.js
@@ -67,12 +67,6 @@ function Character(spriteConfig, animLoops){
};
self.gotoFrames = function(args, bounce){
- // Bounce?
- if(bounce===undefined) bounce=0.03; // a LITTLE bit, by default
- if(bounce!==undefined){
- self.bounce += bounce;
- }
-
// Gimme those args
if(args.body){
if(!self.layers.body.doesFrameNameExist("body_"+args.body)) args.body+="*"; // add * if missing
@@ -81,22 +75,37 @@ function Character(spriteConfig, animLoops){
if(args.mouth) self.characterFrames.mouth = args.mouth;
if(args.eyes) self.characterFrames.eyes = args.eyes;
+ // DID ANY PART CHANGE?
+ var ANY_PART_CHANGED = false;
+
if(args.body){
var bodyName = "body_"+args.body;
+ if(self.layers.body.currentFrameName!=bodyName) ANY_PART_CHANGED=true;
self.layers.body.gotoFrameByName(bodyName);
self.characterFrames.body = args.body;
}
if(args.mouth){
var mouthName = "mouth_"+args.mouth;
+ if(self.layers.mouth.currentFrameName!=mouthName) ANY_PART_CHANGED=true;
self.layers.mouth.gotoFrameByName(mouthName);
}
if(args.eyes){
var eyesName = "eyes_"+args.eyes;
+ if(self.layers.eyes.currentFrameName!=eyesName) ANY_PART_CHANGED=true;
self.layers.eyes.gotoFrameByName(eyesName);
}
+ // If NO CHANGE, then BOUNCE=0
+ if(!ANY_PART_CHANGED) bounce=0;
+
+ // Bounce?
+ if(bounce===undefined) bounce=0.03; // a LITTLE bit, by default
+ if(bounce!==undefined){
+ self.bounce += bounce;
+ }
+
// Go go go
var l = self.layers;
var c = self.characterFrames;
diff --git a/scripts/game/Options.js b/scripts/game/Options.js
index acefea4..29f7f57 100644
--- a/scripts/game/Options.js
+++ b/scripts/game/Options.js
@@ -228,11 +228,20 @@ Loader.addSounds([
Game.goto("intro-start-2");
// Double total hack
- $("#gear").style.display = "block";
- $("#about").style.display = "block";
+ publish("show_tabs");
});
+ subscribe("hide_tabs", function(){
+ $("#gear").style.display = "none";
+ $("#huh").style.display = "none";
+ });
+ subscribe("show_tabs", function(){
+ $("#gear").style.display = "block";
+ $("#huh").style.display = "block";
+ });
+
+
subscribe("show_options", function(){
ALREADY_DID_INTRO = true;
diff --git a/scripts/intro/Intro_BG.js b/scripts/intro/Intro_BG.js
index 32156e0..74381a9 100644
--- a/scripts/intro/Intro_BG.js
+++ b/scripts/intro/Intro_BG.js
@@ -25,11 +25,16 @@ function BG_Intro(){
var self = this;
// Sprites!
- self.logoSprite = new Sprite({
+ var LOGO_SPRITE = {
image: Library.images.intro_logo,
- grid:{ width:1, height:1 },
+ grid:{ width:2, height:1 },
frame:{ width:720, height:900 },
- });
+ };
+ self.logoSprite = new Sprite(LOGO_SPRITE);
+ self.infoSprite = new Sprite(LOGO_SPRITE);
+ self.infoSprite.gotoFrame(1);
+ self.infoSprite.alpha = 0;
+
var spriteConfig = {
image: Library.images.intro_bg,
grid:{ width:2, height:3 },
@@ -101,6 +106,7 @@ function BG_Intro(){
var parallaxTicker = 0;
var SHOWN_PLAY_BUTTON = false;
var SHOWN_LOGO = false;
+ var tickerSinceShown = 0;
var thePreviousFrame;
self.draw = function(ctx){
@@ -162,6 +168,13 @@ function BG_Intro(){
}
if(GAME_TRANSITION==0 && SHOWN_LOGO){
self.logoSprite.draw(ctx);
+ self.infoSprite.draw(ctx);
+ }
+ if(SHOWN_LOGO){
+ tickerSinceShown += 1/60;
+ if(tickerSinceShown>1.5){
+ self.infoSprite.alpha = Math.min(1, tickerSinceShown-1.5);
+ }
}
// Show Play Button
diff --git a/scripts/intro/Intro_SceneSetup.js b/scripts/intro/Intro_SceneSetup.js
index 0a7f35b..3ec036e 100644
--- a/scripts/intro/Intro_SceneSetup.js
+++ b/scripts/intro/Intro_SceneSetup.js
@@ -15,8 +15,7 @@ SceneSetup.intro = function(){
Game.scene.children.push(bg);
// TOTAL HACK
- $("#gear").style.display = "none";
- $("#about").style.display = "none";
+ publish("hide_tabs");
};
diff --git a/scripts/main.js b/scripts/main.js
index dbcf6e7..c6d1872 100644
--- a/scripts/main.js
+++ b/scripts/main.js
@@ -31,9 +31,6 @@ subscribe("START_GAME", function(){
$("#loading").style.display = "none";
Game.start();
- $("#gear").style.display = "block";
- $("#about").style.display = "block";
-
// Intro
Game.goto("intro");
diff --git a/sounds/sfx/quack.mp3 b/sounds/sfx/quack.mp3
index 5a389f9..d1e64a2 100644
Binary files a/sounds/sfx/quack.mp3 and b/sounds/sfx/quack.mp3 differ
diff --git a/sprites/act1/act1_beebee.png b/sprites/act1/act1_beebee.png
index 3bd9405..b273a1e 100644
Binary files a/sprites/act1/act1_beebee.png and b/sprites/act1/act1_beebee.png differ
diff --git a/sprites/act1/act1_end.png b/sprites/act1/act1_end.png
index 935c58c..b6734bd 100644
Binary files a/sprites/act1/act1_end.png and b/sprites/act1/act1_end.png differ
diff --git a/sprites/act1/act1_hong.png b/sprites/act1/act1_hong.png
index 79abd90..f6ddbc2 100644
Binary files a/sprites/act1/act1_hong.png and b/sprites/act1/act1_hong.png differ
diff --git a/sprites/act2/battle_bb.png b/sprites/act2/battle_bb.png
index 6f8bf21..f393084 100644
Binary files a/sprites/act2/battle_bb.png and b/sprites/act2/battle_bb.png differ
diff --git a/sprites/act2/special.png b/sprites/act2/special.png
index 6fed8a6..524f09d 100644
Binary files a/sprites/act2/special.png and b/sprites/act2/special.png differ
diff --git a/sprites/act3/hunter.png b/sprites/act3/hunter.png
index 6b55e4f..6b2e745 100644
Binary files a/sprites/act3/hunter.png and b/sprites/act3/hunter.png differ
diff --git a/sprites/act4/bb_closer.png b/sprites/act4/bb_closer.png
index 890a58a..c49f63b 100644
Binary files a/sprites/act4/bb_closer.png and b/sprites/act4/bb_closer.png differ
diff --git a/sprites/act4/bb_convo.png b/sprites/act4/bb_convo.png
index f55b5a6..dfa30d5 100644
Binary files a/sprites/act4/bb_convo.png and b/sprites/act4/bb_convo.png differ
diff --git a/sprites/credits/end_message.png b/sprites/credits/end_message.png
index 830eddb..6819d79 100644
Binary files a/sprites/credits/end_message.png and b/sprites/credits/end_message.png differ
diff --git a/sprites/credits/end_walk.png b/sprites/credits/end_walk.png
index 3a6027c..8eca43c 100644
Binary files a/sprites/credits/end_walk.png and b/sprites/credits/end_walk.png differ
diff --git a/sprites/credits/screens.png b/sprites/credits/screens.png
index 023a5e8..768e481 100644
Binary files a/sprites/credits/screens.png and b/sprites/credits/screens.png differ
diff --git a/sprites/intro/intro_bg.png b/sprites/intro/intro_bg.png
index 2566ad6..4a51b4a 100644
Binary files a/sprites/intro/intro_bg.png and b/sprites/intro/intro_bg.png differ
diff --git a/sprites/intro/intro_logo.png b/sprites/intro/intro_logo.png
index 546f101..300c71d 100644
Binary files a/sprites/intro/intro_logo.png and b/sprites/intro/intro_logo.png differ
diff --git a/styles/game.css b/styles/game.css
index e4b652c..6015d61 100644
--- a/styles/game.css
+++ b/styles/game.css
@@ -82,7 +82,7 @@ BOTTOM TABS
******************************************************************************************************/
-#gear, #about{
+#gear, #huh{
position: absolute;
bottom: 0;
background: #191919;
@@ -90,10 +90,10 @@ BOTTOM TABS
height: 35px;
cursor: pointer;
}
-#gear:hover, #about:hover{
+#gear:hover, #huh:hover{
background: #575757;
}
-#gear > .icon, #about > .icon{
+#gear > .icon, #huh > .icon{
position: absolute;
width: 0;
height: 0;
@@ -107,11 +107,11 @@ BOTTOM TABS
#gear > .icon{
left: 4px;
}
-#about{
+#huh{
right: 0;
border-top-left-radius: 50px;
}
-#about > .icon{
+#huh > .icon{
color: rgba(255,255,255,0.4);
font-weight: bold;
right: 19px;
@@ -194,6 +194,7 @@ PAUSED & LOADING
background-size: 100%;
}
#loading{
+ cursor: default;
display:block;
background:#282828;
}