2019-06-17 19:33:15 +00:00
|
|
|
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_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" },
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
Loader.addSounds([
|
2019-06-21 15:33:04 +00:00
|
|
|
{ id:"yaps", src:"sounds/sfx/yaps.mp3" },
|
2019-06-26 15:03:27 +00:00
|
|
|
{ id:"youbothwin", src:"sounds/sfx/youbothwin.mp3" }
|
2019-06-17 19:33:15 +00:00
|
|
|
]);
|
|
|
|
|
|
|
|
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 },
|
|
|
|
});
|
|
|
|
self.callbackSprite = new Sprite({
|
|
|
|
image: Library.images.act4_callback,
|
|
|
|
grid:{ width:2, height:1 },
|
|
|
|
frame:{ width:400, height:200 },
|
|
|
|
y: 347
|
|
|
|
});
|
|
|
|
self.alShireSprite = new Sprite({
|
|
|
|
image: Library.images.al_shire,
|
|
|
|
grid:{ width:4, height:1 },
|
|
|
|
frame:{ width:360, height:360 },
|
2019-06-19 14:49:05 +00:00
|
|
|
y: 192,
|
|
|
|
frameNames:[
|
|
|
|
"ask",
|
|
|
|
"panic",
|
|
|
|
"run",
|
|
|
|
"blank"
|
|
|
|
]
|
2019-06-17 19:33:15 +00:00
|
|
|
});
|
2019-06-19 14:49:05 +00:00
|
|
|
self.alShireSprite.gotoFrameByName("blank"); // blank
|
2019-06-17 19:33:15 +00:00
|
|
|
self.outsideHongSprite = new Sprite({
|
|
|
|
image: Library.images.outside_hong,
|
|
|
|
grid:{ width:4, height:3 },
|
|
|
|
frame:{ width:720, height:720 },
|
2019-06-18 20:21:14 +00:00
|
|
|
y: 90,
|
|
|
|
frameNames:[
|
|
|
|
"blank",
|
|
|
|
|
|
|
|
"walk",
|
|
|
|
"walk-injured",
|
|
|
|
"eat",
|
|
|
|
"eat-injured",
|
|
|
|
"talk",
|
|
|
|
"talk-injured",
|
|
|
|
"look-back",
|
|
|
|
"look-back-injured",
|
|
|
|
]
|
2019-06-17 19:33:15 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// 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 },
|
|
|
|
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 },
|
2019-06-19 14:49:05 +00:00
|
|
|
y: 256,
|
|
|
|
frameNames:[
|
|
|
|
|
|
|
|
"talk",
|
|
|
|
|
|
|
|
"pat-bb-1",
|
|
|
|
"pat-bb-2",
|
|
|
|
"pat-bb-3",
|
|
|
|
|
|
|
|
"pat-hong-1",
|
|
|
|
"pat-hong-2",
|
|
|
|
"pat-hong-3",
|
|
|
|
|
|
|
|
"freak-out"
|
|
|
|
|
|
|
|
]
|
2019-06-17 19:33:15 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// LAYERS
|
|
|
|
self.layers = [
|
|
|
|
|
|
|
|
self.bgSprite,
|
|
|
|
self.callbackSprite,
|
|
|
|
self.alShireSprite,
|
|
|
|
self.outsideHongSprite,
|
|
|
|
|
|
|
|
self.anxiety,
|
|
|
|
|
|
|
|
self.smashSprite,
|
|
|
|
self.talk1Sprite,
|
|
|
|
self.talk2Sprite
|
|
|
|
|
|
|
|
];
|
|
|
|
var PARALLAXES = [
|
|
|
|
|
|
|
|
0.5, // placeholder bg
|
|
|
|
0.8, // callback
|
|
|
|
0.6, // Al Shire
|
|
|
|
1.0, // outside Hong
|
|
|
|
|
|
|
|
0.0, // anxiety bg
|
|
|
|
|
|
|
|
1.0, // smash sprite
|
|
|
|
1.0, // talk 1 sprite
|
|
|
|
1.0, // talk 2 sprite
|
|
|
|
|
|
|
|
];
|
|
|
|
var ALPHAS = [
|
|
|
|
|
|
|
|
1.0, // placeholder bg
|
|
|
|
1.0, // callback
|
|
|
|
1.0, // callback
|
|
|
|
1.0, // outside Hong
|
|
|
|
|
|
|
|
0.0, // anxiety bg
|
|
|
|
|
|
|
|
1.0, // smash sprite
|
|
|
|
0.0, // talk 1 sprite
|
|
|
|
0.0, // talk 2 sprite
|
|
|
|
|
|
|
|
];
|
|
|
|
var OFFSETS = [
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
-210,
|
|
|
|
-210,
|
|
|
|
-210
|
|
|
|
]
|
|
|
|
|
|
|
|
var parallax = 0;
|
|
|
|
var parallaxTicker = 0;
|
|
|
|
var PARALLAXING = null;
|
|
|
|
var ALPHA_INDEX = 4;
|
|
|
|
self.update = function(){
|
|
|
|
|
|
|
|
// START PARALLAXING IN / OUT
|
|
|
|
if(PARALLAXING!=null){
|
|
|
|
|
|
|
|
if(PARALLAXING=="out"){
|
|
|
|
parallaxTicker += 1/60; // 0 to 1 in one second
|
|
|
|
}
|
|
|
|
if(PARALLAXING=="in"){
|
|
|
|
parallaxTicker -= 1/60; // 1 to 0 in one second
|
|
|
|
}
|
|
|
|
if(parallaxTicker>1) parallaxTicker = 1;
|
|
|
|
if(parallaxTicker<0) parallaxTicker = 0;
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
|
|
|
// Anxiety Alpha
|
|
|
|
ALPHAS[ALPHA_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
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
self.draw = function(ctx){
|
|
|
|
|
|
|
|
ctx.save();
|
|
|
|
|
|
|
|
for(var i=0; i<self.layers.length; i++){
|
|
|
|
var layer = self.layers[i];
|
|
|
|
layer.x = PARALLAXES[i] * parallax - OFFSETS[i];
|
|
|
|
if(ALPHAS[i]>0){
|
|
|
|
ctx.globalAlpha = ALPHAS[i];
|
|
|
|
layer.draw(ctx);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx.restore();
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
var STAGE = 0;
|
|
|
|
var _subscriptions = [];
|
|
|
|
_subscriptions.push(
|
|
|
|
subscribe("act4-out-1", function(){
|
2019-06-19 14:49:05 +00:00
|
|
|
|
|
|
|
self.talk1Sprite.gotoFrame( _.INJURED ? 0 : 1 );
|
2019-06-17 19:33:15 +00:00
|
|
|
|
|
|
|
// WHOOSH
|
|
|
|
STAGE = 1;
|
|
|
|
PARALLAXING = "out";
|
|
|
|
sfx("whoosh");
|
|
|
|
|
2019-06-26 15:03:27 +00:00
|
|
|
// IT'S WHITE IN HERE
|
|
|
|
window.BLACK_CTA = true;
|
|
|
|
|
2019-06-17 19:33:15 +00:00
|
|
|
}),
|
|
|
|
subscribe("act4-in-2", function(){
|
|
|
|
|
|
|
|
// SHOW ACTION, HIDE CHARS
|
|
|
|
ALPHAS[6] = 0; // Bye Talk 1
|
|
|
|
|
|
|
|
// WHOOSH
|
|
|
|
STAGE = 2;
|
|
|
|
PARALLAXING = "in";
|
|
|
|
sfx("whoosh");
|
|
|
|
|
2019-06-26 15:03:27 +00:00
|
|
|
// IT'S DARK OUT HERE
|
|
|
|
window.BLACK_CTA = false;
|
|
|
|
|
2019-06-17 19:33:15 +00:00
|
|
|
}),
|
|
|
|
subscribe("act4-out-3", function(){
|
|
|
|
|
|
|
|
// WHOOSH
|
|
|
|
STAGE = 3;
|
|
|
|
PARALLAXING = "out";
|
|
|
|
sfx("whoosh");
|
|
|
|
|
2019-06-26 15:03:27 +00:00
|
|
|
// IT'S WHITE IN HERE
|
|
|
|
window.BLACK_CTA = true;
|
|
|
|
|
2019-06-17 19:33:15 +00:00
|
|
|
}),
|
2019-06-18 20:21:14 +00:00
|
|
|
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();
|
2019-06-21 15:33:04 +00:00
|
|
|
sfx("ui_show_choice", {volume:0.4});
|
2019-06-18 20:21:14 +00:00
|
|
|
}
|
|
|
|
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);
|
|
|
|
}
|
2019-06-19 14:49:05 +00:00
|
|
|
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);
|
2019-06-18 20:21:14 +00:00
|
|
|
})
|
2019-06-17 19:33:15 +00:00
|
|
|
);
|
|
|
|
|
2019-06-18 20:21:14 +00:00
|
|
|
self.kill = function(){
|
|
|
|
_subscriptions.forEach(unsubscribe);
|
2019-06-26 15:03:27 +00:00
|
|
|
window.BLACK_CTA = false; // back to normal
|
2019-06-18 20:21:14 +00:00
|
|
|
};
|
|
|
|
|
2019-06-17 19:33:15 +00:00
|
|
|
}
|