anxiety/scripts/intro/Intro_BG.js

289 lines
5.9 KiB
JavaScript
Raw Normal View History

2019-04-09 18:59:19 +00:00
Loader.addImages([
2019-04-18 11:40:22 +00:00
{ id:"intro_logo", src:"sprites/intro/intro_logo.png" },
2019-04-09 18:59:19 +00:00
{ id:"intro_bg", src:"sprites/intro/intro_bg.png" },
{ id:"intro_anim", src:"sprites/intro/intro_anim.png" }
]);
2019-04-24 19:42:13 +00:00
Loader.addSounds([
{ id:"whoosh", src:"sounds/sfx/whoosh.mp3" },
{ id:"intro_scream", src:"sounds/sfx/intro_scream.mp3" },
{ id:"grass_step1", src:"sounds/sfx/grass_step1.mp3" },
{ id:"grass_step2", src:"sounds/sfx/grass_step2.mp3" },
{ id:"bag_short", src:"sounds/sfx/bag_short.mp3" },
{ id:"bag_search", src:"sounds/sfx/bag_search.mp3" },
{ id:"bag_kick", src:"sounds/sfx/bag_kick.mp3" },
{ id:"sandwich", src:"sounds/sfx/sandwich.mp3" },
]);
2019-04-09 18:59:19 +00:00
function BG_Intro(){
var self = this;
2019-04-18 11:40:22 +00:00
// Sprites!
self.logoSprite = new Sprite({
image: Library.images.intro_logo,
grid:{ width:1, height:1 },
frame:{ width:720, height:900 },
});
2019-04-09 18:59:19 +00:00
var spriteConfig = {
image: Library.images.intro_bg,
grid:{
width: 2,
height: 3
},
frame:{
width: 1200,
height: 900
},
anchor:{
x: 0,
y: 0
},
frameNames:[
"sky",
"clouds",
"buildings",
"grass",
"stump",
2019-04-18 11:40:22 +00:00
"blackout"
2019-04-09 18:59:19 +00:00
],
x: 0,
y: 0
};
self.layers = [];
2019-04-18 11:40:22 +00:00
["sky","clouds","buildings","grass","stump","blackout"].forEach(function(layerName){
2019-04-09 18:59:19 +00:00
var sprite = new Sprite(spriteConfig);
sprite.gotoFrameByName(layerName);
self.layers.push(sprite);
});
2019-04-18 11:40:22 +00:00
self.layers[5].alpha = 0; // blackout alpha is ZERO at start.
2019-04-09 18:59:19 +00:00
// HONG
var hongSpriteConfig = {
image: Library.images.intro_anim,
grid:{
width: 4,
height: 7
},
frame:{
width: 1200,
height: 900
},
anchor:{
x: 0,
y: 0
},
x: 0,
y: 0
};
var hongSprite = new Sprite(hongSpriteConfig);
self.layers.push(hongSprite);
// DRAW
var BG_WIDTH = 360;
var BG_HEIGHT = 450;
var PARALLAXES = [
0, // sky
0.1, // clouds
0.25, // buildings
2019-04-18 11:40:22 +00:00
0.48, // grass
2019-04-09 18:59:19 +00:00
1.0, // stump
2019-04-18 11:40:22 +00:00
0, // blackout
2019-04-09 18:59:19 +00:00
1.0, // HONG
];
var OFFSETS = [
0,
0, // clouds
0,
0,
20,
2019-04-18 11:40:22 +00:00
0,
2019-04-09 18:59:19 +00:00
20
]
2019-04-18 11:40:22 +00:00
2019-05-02 15:55:41 +00:00
var ticker = 18;//0;
2019-04-18 11:40:22 +00:00
var frameTicker = ticker;
var parallaxTicker = 0;
var SHOWN_PLAY_BUTTON = false;
var SHOWN_LOGO = false;
2019-04-24 19:42:13 +00:00
var thePreviousFrame;
2019-04-09 18:59:19 +00:00
self.draw = function(ctx){
2019-04-18 11:40:22 +00:00
// TICKER
2019-04-09 18:59:19 +00:00
ticker += 1/60;
// CLOUD OFFSET
2019-04-18 11:40:22 +00:00
OFFSETS[1] = -80 + ticker*3;
// Animate Hong: Which frame?
var parallax = 0;
frameTicker += 1/60;
2019-04-29 15:35:25 +00:00
if(GAME_TRANSITION==0 || GAME_TRANSITION==1 || GAME_TRANSITION==2){
2019-04-18 11:40:22 +00:00
if(frameTicker>590/30){
2019-04-29 19:19:44 +00:00
if(GAME_TRANSITION==0){
2019-04-29 15:35:25 +00:00
frameTicker = 381/30; // LOOP to NOM.
}
2019-04-29 19:19:44 +00:00
if(GAME_TRANSITION==1 || GAME_TRANSITION==2){ // actually ew nah stop it
2019-04-29 15:35:25 +00:00
frameTicker = 590/30; // STOP.
}
2019-04-18 11:40:22 +00:00
}
}
2019-04-29 15:35:25 +00:00
if(GAME_TRANSITION==3){ // START PARALLAXING
2019-04-18 11:40:22 +00:00
parallaxTicker += 1/60; // 0 to 1 in one second
if(parallaxTicker>1) parallaxTicker = 1;
self.layers[5].alpha = parallaxTicker; // blackout alpha
2019-04-09 18:59:19 +00:00
2019-04-18 11:40:22 +00:00
// 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*215;
}
2019-04-24 19:42:13 +00:00
// Find... on ticker!
var results = findOnTicker(frameTicker);
// Frame, new frame?
var frame = results.frame;
thePreviousFrame = hongSprite.currentFrame;
var isNewFrame = (thePreviousFrame!=frame);
2019-04-18 11:40:22 +00:00
hongSprite.gotoFrame(frame);
2019-04-24 19:42:13 +00:00
// SFX if new frame
if(isNewFrame && results.sfx){
sfx(results.sfx, {volume: results.sfxVolume} );
}
2019-04-18 11:40:22 +00:00
// Draw all!
2019-04-09 18:59:19 +00:00
for(var i=0; i<self.layers.length; i++){
var layer = self.layers[i];
layer.x = PARALLAXES[i] * parallax - OFFSETS[i];
layer.draw(ctx);
}
2019-04-18 11:40:22 +00:00
if(!SHOWN_LOGO && ticker>=530/30){
SHOWN_LOGO = true;
2019-04-24 19:42:13 +00:00
sfx("intro_scream");
2019-04-18 11:40:22 +00:00
}
if(GAME_TRANSITION==0 && SHOWN_LOGO){
self.logoSprite.draw(ctx);
}
2019-04-09 18:59:19 +00:00
2019-04-18 11:40:22 +00:00
// Show Play Button
2019-04-24 19:42:13 +00:00
if(!SHOWN_PLAY_BUTTON && ticker>=645/30){
2019-04-18 11:40:22 +00:00
SHOWN_PLAY_BUTTON = true;
Game.goto("intro-play-button");
}
// NEXT SCENE?
if(frame==26){
Game.goto("act1");
}
2019-04-09 18:59:19 +00:00
};
2019-04-18 11:40:22 +00:00
var GAME_TRANSITION = 0;
var _subscriptions = [];
_subscriptions.push(
subscribe("intro-to-game-1", function(){
2019-04-29 15:35:25 +00:00
GAME_TRANSITION = 1; // BYE LOGO
2019-04-18 11:40:22 +00:00
})
);
_subscriptions.push(
subscribe("intro-to-game-2", function(){
2019-04-29 15:35:25 +00:00
GAME_TRANSITION = 2; // STOP LOOPING
})
);
_subscriptions.push(
subscribe("intro-to-game-3", function(){
2019-04-18 11:40:22 +00:00
frameTicker = 600/30;
2019-04-29 15:35:25 +00:00
GAME_TRANSITION = 3; // START PARALLAXING
2019-04-24 19:42:13 +00:00
// WHOOSH
sfx("whoosh");
// Music
music("hum", {fade:2, volume:0.6});
2019-04-18 11:40:22 +00:00
})
);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
2019-04-09 18:59:19 +00:00
// ANIMATE HONG, THE FRAMES!
var HONG_FRAMES = [
"0-0",
2019-04-24 19:42:13 +00:00
"1-59-grass_step1-0.1",
"2-79-grass_step2-0.2",
"3-99-grass_step1-0.25",
"4-119-grass_step2-0.3",
"5-139-grass_step1-0.35",
"6-199-bag_short",
"7-234-bag_search",
2019-04-09 18:59:19 +00:00
"8-244",
"9-254",
"8-264",
"9-274",
2019-04-24 19:42:13 +00:00
"10-299-bag_short",
"11-336-bag_kick",
2019-04-09 18:59:19 +00:00
"12-346",
2019-04-24 19:42:13 +00:00
"13-381-sandwich",
2019-04-09 18:59:19 +00:00
"14-400",
"15-410",
"14-420",
"15-430",
"14-440",
"15-450",
2019-04-18 11:40:22 +00:00
"16-470",
"17-600",
"18-603",
"19-606",
"20-609",
"21-612",
"22-615",
"23-618",
"24-621",
"25-624",
"26-627"
2019-04-09 18:59:19 +00:00
];
HONG_FRAMES = HONG_FRAMES.map(function(frame){
var f = frame.split("-");
2019-04-24 19:42:13 +00:00
var frame = parseInt(f[0]);
var ticker = parseInt(f[1])/30;
var sfx = f[2] ? f[2] : null;
var sfxVolume = f[3] ? f[3] : 1;
return [frame, ticker, sfx, sfxVolume];
2019-04-09 18:59:19 +00:00
});
2019-04-24 19:42:13 +00:00
var findOnTicker = function(ticker){
var lastConfig;
2019-04-09 18:59:19 +00:00
for(var i=0; i<HONG_FRAMES.length; i++){
var f = HONG_FRAMES[i];
if(f[1]<=ticker){
2019-04-24 19:42:13 +00:00
lastConfig = f;
2019-04-09 18:59:19 +00:00
}
}
2019-04-24 19:42:13 +00:00
return {
frame: lastConfig[0],
sfx: lastConfig[2],
sfxVolume: lastConfig[3]
};
2019-04-09 18:59:19 +00:00
};
2019-04-18 11:40:22 +00:00
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Kill!
self.kill = function(){
_subscriptions.forEach(unsubscribe);
};
2019-04-09 18:59:19 +00:00
}