Loader.addImages([ { id:"act1_end", src:"sprites/act1/act1_end.png" } ]); Loader.addSounds([ { id:"pop", src:"sounds/sfx/pop.mp3" }, { id:"bounce1", src:"sounds/sfx/bounce1.mp3" }, { id:"bounce2", src:"sounds/sfx/bounce2.mp3" }, { id:"bounce3", src:"sounds/sfx/bounce3.mp3" }, { id:"faucet", src:"sounds/sfx/faucet.mp3" }, { id:"dirty_explosion", src:"sounds/sfx/dirty_explosion.mp3" }, { id:"rustle", src:"sounds/sfx/rustle.mp3" }, { id:"rustle2", src:"sounds/sfx/rustle2.mp3" }, { id:"act1_scream", src:"sounds/sfx/act1_scream.mp3" } ]); function BG_Act1_Outro(){ var self = this; // Sprites! var spriteConfig = { 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", "blackout" ], x: 0, y: 0 }; self.layers = []; ["sky","clouds","buildings","grass","stump","blackout"].forEach(function(layerName){ var sprite = new Sprite(spriteConfig); sprite.gotoFrameByName(layerName); self.layers.push(sprite); }); // HONG var hongSpriteConfig = { image: Library.images.act1_end, grid:{ width: 4, height: 12 }, frame:{ width: 1100, height: 480 }, anchor:{ x: 560/2, y: 370/2 }, x: 560/2, y: 370/2 }; var craterSprite = new Sprite(hongSpriteConfig); self.layers.push(craterSprite); 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 0.48, // grass 1.0, // stump 0, // blackout 1.0, // crater 1.0, // HONG ]; var OFFSETS = [ 0, 0, // clouds 0, 0, 20, 0, 20, 20 ]; //////////////////////////////// // WHICH ANIM CYCLE TO USE? //// //////////////////////////////// var ANIM_TO_USE = _.act1_ending || "fight"; var ticker = 0; var frameTicker = ticker; var parallaxTicker = 1; var thePreviousFrame = -1; self.draw = function(ctx, delta){ // TICKER ticker += delta; // CLOUD OFFSET OFFSETS[1] = -80 + ticker*3; // PARALLAX var parallax = 0; if(GAME_TRANSITION==0){ parallaxTicker -= 2*delta; // 1 to 0 in 1/2 second if(parallaxTicker<0) parallaxTicker = 0; self.layers[5].alpha = parallaxTicker; // blackout alpha // 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; } // Smoking crater & Hong frame frameTicker += delta; var results; if(ANIM_TO_USE == "fight"){ results = findOnTicker(SMOKING_CRATER, frameTicker); craterSprite.gotoFrame(results.frame); // Hong's frame results = findOnTicker(HONG_FRAMES_FIGHT, frameTicker); }else{ craterSprite.visible = false; // Hong's frame results = findOnTicker(HONG_FRAMES_FLIGHT, frameTicker); } // Is Hong on a new frame? thePreviousFrame = hongSprite.currentFrame; var isNewFrame = (thePreviousFrame!=results.frame); hongSprite.gotoFrame(results.frame); // SFX if new frame if(isNewFrame && results.sfx){ sfx(results.sfx, {volume: results.sfxVolume} ); } // If pre frameTicker=90/30, Hong is shaking like Beebee! if(frameTicker<90/30){ hongSprite.squash = 1 + Math.sin(ticker*Math.TAU*7)*0.01; // seven vibes per second }else{ hongSprite.squash = 1; } // Draw all! for(var i=0; i=6){ // the HONG & SMOKING layer layer.x += 560/2 + 20; // Hack, don't know why. layer.y = 210 + 370/2; } layer.draw(ctx); } // NEXT SCENE? if(frameTicker>=320/30){ _.INTERMISSION_STAGE = 1; Game.goto("intermission"); } }; var GAME_TRANSITION = 0; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // Find it! /*var findFrameOnTicker = function(frameArray, ticker){ var lastFrame; for(var i=0; i