Section 1
//AutoLoopingFlare30Fps (anim.AutoLoopingFlare30Fps)
package anim {
public class AutoLoopingFlare30Fps extends BaseFlare {
public function AutoLoopingFlare30Fps(){
m_isPaused = false;
m_isLoop = true;
m_isRemoveAfterPlay = false;
setFrameRate(30);
start();
}
}
}//package anim
Section 2
//AutoSingleFlare30Fps (anim.AutoSingleFlare30Fps)
package anim {
public class AutoSingleFlare30Fps extends BaseFlare {
public function AutoSingleFlare30Fps(){
m_isPaused = false;
m_isLoop = false;
m_isRemoveAfterPlay = false;
setFrameRate(30);
start();
}
}
}//package anim
Section 3
//AutoSingleFlare60Fps (anim.AutoSingleFlare60Fps)
package anim {
public class AutoSingleFlare60Fps extends BaseFlare {
public function AutoSingleFlare60Fps(){
m_isPaused = false;
m_isLoop = false;
m_isRemoveAfterPlay = false;
setFrameRate(60);
start();
}
}
}//package anim
Section 4
//BaseFlare (anim.BaseFlare)
package anim {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class BaseFlare extends MovieClip {
protected var m_isLoop:Boolean;
protected var m_isPaused:Boolean;
private var m_frameOffset:int;
private var m_restartAt:int;
private var m_firstRender:Boolean;
private var m_step:Number;
private var m_lastFrame:uint;
protected var m_frameRate:int;
protected var m_isRemoveAfterPlay:Boolean;
private var m_startTime:int;
public function BaseFlare(){
super.stop();
m_lastFrame = 0;
m_restartAt = 0;
m_frameOffset = 0;
m_isPaused = false;
m_isRemoveAfterPlay = true;
m_firstRender = true;
m_isLoop = true;
if (!m_isPaused){
start();
};
setFrameRate(30);
}
override public function stop():void{
m_firstRender = true;
removeEventListener(Event.ENTER_FRAME, enterFrame);
if (m_isRemoveAfterPlay){
parent.removeChild(this);
};
}
public function setDestroyAfterPlay(_arg1:Boolean):void{
m_isRemoveAfterPlay = _arg1;
}
public function start():void{
visible = true;
m_lastFrame = 0;
m_firstRender = true;
addEventListener(Event.ENTER_FRAME, enterFrame);
}
public function setLoopRestartFrame(_arg1:int):void{
m_restartAt = (_arg1 - 1);
}
public function setLoop(_arg1:Boolean):void{
m_isLoop = _arg1;
}
public function setFrameRate(_arg1:int):void{
m_frameRate = _arg1;
m_step = ((1 / m_frameRate) * 1000);
}
public function enterFrame(_arg1:Event):void{
var _local2:int = getTimer();
if (m_firstRender){
visible = true;
m_startTime = _local2;
m_firstRender = false;
};
var _local3:uint = (m_frameOffset + int(Math.round((((_local2 - m_startTime) / m_step) + 1))));
if (_local3 > totalFrames){
if (m_isLoop){
m_firstRender = true;
m_frameOffset = m_restartAt;
_local3 = totalFrames;
} else {
gotoAndStop(totalFrames);
stop();
return;
};
};
if (_local3 != m_lastFrame){
gotoAndStop(_local3);
m_lastFrame = _local3;
};
}
}
}//package anim
Section 5
//EaseInQuadInterpolator (anim.EaseInQuadInterpolator)
package anim {
public class EaseInQuadInterpolator extends Interpolator {
public function EaseInQuadInterpolator(_arg1:Number, _arg2:Number, _arg3:int){
super(_arg1, _arg2, _arg3);
}
override public function nextPosition():void{
var _local1:Number = (m_dt * m_dt);
var _local2:Number = (m_duration * m_duration);
m_value = (((m_dv * _local1) / _local2) + m_startValue);
}
}
}//package anim
Section 6
//EaseOutQuadInterpolator (anim.EaseOutQuadInterpolator)
package anim {
public class EaseOutQuadInterpolator extends Interpolator {
public function EaseOutQuadInterpolator(_arg1:Number, _arg2:Number, _arg3:int){
super(_arg1, _arg2, _arg3);
}
override public function nextPosition():void{
var _local1:Number = m_dt;
if (_local1 > m_duration){
_local1 = m_duration;
};
var _local2:Number = (m_duration * m_duration);
var _local3:Number = (_local1 * _local1);
m_value = ((((-(m_dv) * _local3) / _local2) + (((2 * m_dv) * _local1) / m_duration)) + m_startValue);
}
}
}//package anim
Section 7
//Interpolator (anim.Interpolator)
package anim {
public class Interpolator {
protected var m_startValue:Number;
protected var m_finished:Boolean;
protected var m_duration:int;
protected var m_dt:int;
protected var m_dv:Number;
protected var m_targetValue:Number;
protected var m_value:Number;
public function Interpolator(_arg1:Number, _arg2:Number, _arg3:int){
m_startValue = _arg1;
m_targetValue = _arg2;
m_duration = _arg3;
m_dt = 0;
m_value = _arg1;
m_finished = false;
m_dv = (m_targetValue - m_startValue);
}
public function nextPosition():void{
m_value = (((m_dv * m_dt) / m_duration) + m_startValue);
}
public function getValue():Number{
return (m_value);
}
public function update():Boolean{
if (!m_finished){
m_dt++;
nextPosition();
if ((((((m_value >= m_targetValue)) && ((m_targetValue >= m_startValue)))) || ((((m_value <= m_targetValue)) && ((m_targetValue <= m_startValue)))))){
m_value = m_targetValue;
m_finished = true;
};
};
return (m_finished);
}
public function getTargetValue():Number{
return (m_targetValue);
}
public function getElapsedPercent():Number{
if (m_duration == 0){
return (1);
};
return ((Math.max(0, (m_duration - m_dt)) / m_duration));
}
public function isDone():Boolean{
return (m_finished);
}
}
}//package anim
Section 8
//PausedLoopingFlare30Fps (anim.PausedLoopingFlare30Fps)
package anim {
import flash.display.*;
import flash.text.*;
public class PausedLoopingFlare30Fps extends BaseFlare {
public var countdown_txt:TextField;
public var gameover:MovieClip;
public var sign_title_txt:TextField;
public var instructions1:instructions_1;
public var instructions2:instructions_2;
public var bottom_txt:TextField;
public function PausedLoopingFlare30Fps(){
m_isPaused = true;
m_isLoop = true;
m_isRemoveAfterPlay = false;
setFrameRate(30);
stop();
}
}
}//package anim
Section 9
//PausedSingleFlare30Fps (anim.PausedSingleFlare30Fps)
package anim {
import flash.display.*;
public class PausedSingleFlare30Fps extends BaseFlare {
public var anima:MovieClip;
public var scoreflash:MovieClip;
public var smoke:MovieClip;
public function PausedSingleFlare30Fps(){
m_isPaused = true;
m_isLoop = false;
m_isRemoveAfterPlay = false;
setFrameRate(30);
stop();
}
}
}//package anim
Section 10
//Line (geom.Line)
package geom {
public class Line {
public var x1:Number;
public var y1:Number;
public var y2:Number;
public var x2:Number;
public function Line(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0){
this.x1 = _arg1;
this.y1 = _arg2;
this.x2 = _arg3;
this.y2 = _arg4;
}
public function distanceSquared(_arg1:Number, _arg2:Number):Number{
var _local3:* = (x2 - x1);
var _local4:* = (y2 - y1);
var _local5:* = (_arg1 - x1);
var _local6:* = (_arg2 - y1);
var _local7:* = ((_local5 * _local3) + (_local6 * _local4));
var _local8:* = ((_local3 * _local3) + (_local4 * _local4));
var _local9:* = (_local7 / _local8);
var _local10:* = (x1 + (_local9 * _local3));
var _local11:* = (y1 + (_local9 * _local4));
var _local12:* = (_arg1 - _local10);
_local12 = ((_arg1 - _local10) * _local12);
var _local13:* = (_arg2 - _local11);
_local13 = ((_arg2 - _local11) * _local13);
return ((_local12 + _local13));
}
public function length():Number{
var _local1:* = (x1 - x2);
var _local2:* = (y1 - y2);
return (Math.sqrt(((_local1 * _local1) + (_local2 * _local2))));
}
public function intersectionPoint(_arg1:Line):Pt{
var _local2:* = _arg1.x1;
var _local3:* = _arg1.x2;
var _local4:* = _arg1.y1;
var _local5:* = _arg1.y2;
var _local6:* = (x1 - _local2);
var _local7:* = (y1 - _local4);
var _local8:* = (_local3 - _local2);
var _local9:* = (_local5 - _local4);
var _local10:* = (x2 - x1);
var _local11:* = (y2 - y1);
var _local12:* = ((_local9 * _local10) - (_local8 * _local11));
var _local13:* = (((_local8 * _local7) - (_local9 * _local6)) / _local12);
var _local14:* = (((_local10 * _local7) - (_local11 * _local6)) / _local12);
var _local15:Pt;
if ((((((_local13 > 0)) && ((_local13 < 1)))) && ((((_local14 > 0)) && ((_local14 < 1)))))){
_local15 = new Pt((x1 + (_local13 * (x2 - x1))), (y1 + (_local13 * (y2 - y1))));
};
return (_local15);
}
public function distance(_arg1:Number, _arg2:Number):Number{
return (Math.sqrt(distanceSquared(_arg1, _arg2)));
}
public function intersects(_arg1:Line):Boolean{
var _local10:*;
var _local2:* = (x2 - x1);
var _local3:* = (y2 - y1);
var _local4:* = (_arg1.x2 - _arg1.x1);
var _local5:* = (_arg1.y2 - _arg1.y1);
var _local6:* = ((_local5 * _local2) - (_local4 * _local3));
if (_local6 == 0){
return (false);
};
var _local7:* = (x1 - _arg1.x1);
var _local8:* = (y1 - _arg1.y1);
var _local9:* = (((_local4 * _local8) - (_local5 * _local7)) / _local6);
if ((((_local9 > 0)) && ((_local9 < 1)))){
_local10 = (((_local2 * _local8) - (_local3 * _local7)) / _local6);
return ((((_local10 > 0)) && ((_local10 < 1))));
};
return (false);
}
}
}//package geom
Section 11
//Pt (geom.Pt)
package geom {
public class Pt {
public var x:Number;
public var y:Number;
public function Pt(_arg1:Number=0, _arg2:Number=0){
this.x = _arg1;
this.y = _arg2;
}
public function toString():String{
return ((((("Pt[" + x) + ",") + y) + "]"));
}
}
}//package geom
Section 12
//Vec2D (geom.Vec2D)
package geom {
public class Vec2D {
public var x:Number;
public var y:Number;
public function Vec2D(_arg1:Number=0, _arg2:Number=0){
this.x = _arg1;
this.y = _arg2;
}
public function dot(_arg1:Vec2D):Number{
return (((_arg1.x * x) + (_arg1.y * y)));
}
public function length():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function toString():String{
return (((x + ", ") + y));
}
public function normalize():void{
var _local2:*;
var _local1:* = Math.sqrt(((x * x) + (y * y)));
if (_local1 > 0){
_local2 = (1 / _local1);
x = (x * _local2);
y = (y * _local2);
};
}
public function copyFrom(_arg1:Vec2D):void{
x = _arg1.x;
y = _arg1.y;
}
}
}//package geom
Section 13
//monkeybody_100 (jungle_bubble_deluxe_fla.monkeybody_100)
package jungle_bubble_deluxe_fla {
import flash.display.*;
public dynamic class monkeybody_100 extends MovieClip {
public function monkeybody_100(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package jungle_bubble_deluxe_fla
Section 14
//monkeyhead_3 (jungle_bubble_deluxe_fla.monkeyhead_3)
package jungle_bubble_deluxe_fla {
import flash.display.*;
public dynamic class monkeyhead_3 extends MovieClip {
public function monkeyhead_3(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package jungle_bubble_deluxe_fla
Section 15
//rank_anim_13 (jungle_bubble_deluxe_fla.rank_anim_13)
package jungle_bubble_deluxe_fla {
import flash.display.*;
public dynamic class rank_anim_13 extends MovieClip {
public var inner6:rank_stone_anim;
public var inner2:rank_blue_anim;
public var inner4:rank_gold_anim;
public var inner1:rank_green_anim;
public var inner3:rank_purple_anim;
public var inner5:rank_silver_anim;
public function rank_anim_13(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package jungle_bubble_deluxe_fla
Section 16
//ranking_104 (jungle_bubble_deluxe_fla.ranking_104)
package jungle_bubble_deluxe_fla {
import flash.display.*;
public dynamic class ranking_104 extends MovieClip {
public function ranking_104(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package jungle_bubble_deluxe_fla
Section 17
//AimCursor (junglebubble.AimCursor)
package junglebubble {
import flash.display.*;
import timing.*;
import math.*;
public class AimCursor extends MovieClip {
private var m_r:Number;
private var m_dx:int;
private var m_dy:int;
private var m_lengthOffset:Number;
public var c0:MovieClip;
public var c1:MovieClip;
public var c2:MovieClip;
public var c3:MovieClip;
public var c4:MovieClip;
public var c5:MovieClip;
private var m_dist:Number;
private var m_mx:int;
private var m_my:int;
public var c6:MovieClip;
private var m_ax:int;
private var m_ay:int;
private var m_lastRad:Number;
private var m_vx1:int;
private var m_vx2:int;
private var m_limit1:Number;
private var m_limit2:Number;
private var m_fr:IFloat;
private var m_vy1:int;
private var m_vy2:int;
public function AimCursor(){
m_fr = new IFloat(0);
mouseChildren = false;
m_limit1 = (-3.1414 + Math.PI);
m_limit2 = (0.0001 + Math.PI);
m_lengthOffset = 115;
m_lastRad = 0.1234;
x = 0;
y = 0;
var _local1:int;
while (_local1 < 7) {
this[("c" + _local1)].x = 0;
this[("c" + _local1)].y = 0;
_local1++;
};
}
public function setArrowLength(_arg1:int):void{
m_lengthOffset = _arg1;
}
public function tick(_arg1:int, _arg2:int):void{
m_mx = _arg1;
m_my = _arg2;
if (!((((((((m_mx < m_vx1)) || ((m_mx > m_vx2)))) || ((m_my < m_vy1)))) || ((m_my > m_vy2)))) != visible){
visible = !(visible);
};
m_dx = (m_ax - m_mx);
m_dy = (m_ay - Math.min((m_ay - 30), m_my));
m_r = XPMath.atan2(m_dy, m_dx);
if (m_r < m_limit1){
m_r = m_limit1;
};
if (m_r > m_limit2){
m_r = m_limit2;
};
m_fr.set(m_r);
m_dist = (Math.max(0, (Math.sqrt(((m_dx * m_dx) + (m_dy * m_dy))) - m_lengthOffset)) / 6);
}
public function setAncorPosition(_arg1:int, _arg2:int):void{
m_ax = _arg1;
m_ay = _arg2;
}
public function setRadLimits(_arg1:Number, _arg2:Number):void{
m_limit1 = (_arg1 + Math.PI);
m_limit2 = (_arg2 + Math.PI);
}
public function update(_arg1:int, _arg2:Number):void{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local3:Number = m_fr.value;
if (_local3 != m_lastRad){
m_lastRad = _local3;
_local4 = Math.cos(_local3);
_local5 = ((-(_local4) * m_lengthOffset) + m_ax);
_local6 = (m_dist * _local4);
_local7 = Math.sin(_local3);
_local8 = ((-(_local7) * m_lengthOffset) + m_ay);
_local9 = (m_dist * _local7);
c0.x = _local5;
c0.y = _local8;
_local5 = (_local5 - _local6);
_local8 = (_local8 - _local9);
c1.x = _local5;
c1.y = _local8;
_local5 = (_local5 - _local6);
_local8 = (_local8 - _local9);
c2.x = _local5;
c2.y = _local8;
_local5 = (_local5 - _local6);
_local8 = (_local8 - _local9);
c3.x = _local5;
c3.y = _local8;
_local5 = (_local5 - _local6);
_local8 = (_local8 - _local9);
c4.x = _local5;
c4.y = _local8;
_local5 = (_local5 - _local6);
_local8 = (_local8 - _local9);
c5.x = _local5;
c5.y = _local8;
_local5 = (_local5 - _local6);
_local8 = (_local8 - _local9);
c6.x = _local5;
c6.y = _local8;
};
}
public function setVisibleLimit(_arg1:int, _arg2:int, _arg3:int, _arg4:int):void{
m_vx1 = _arg1;
m_vx2 = _arg3;
m_vy1 = _arg2;
m_vy2 = _arg4;
}
}
}//package junglebubble
Section 18
//Bomb (junglebubble.Bomb)
package junglebubble {
import flash.display.*;
import timing.*;
import geom.*;
import anim.*;
import math.*;
public class Bomb extends TickObject {
private var m_movement:Vec2D;
private var m_explosion:BaseFlare;
private var m_rotation:Number;
private var m_fr:IFloat;
public var bomb:BombClip;
private var m_fx:IFloat;
private var m_fy:IFloat;
private var m_effects:DisplayObjectContainer;
private var m_collidableList:Array;
private var m_speed:Number;
private var m_position:Vec2D;
private static var SPEED:int = 25;
public function Bomb(_arg1:DisplayObjectContainer, _arg2:Array){
bomb = new BombClip(this);
m_effects = _arg1;
m_collidableList = _arg2;
m_explosion = new RockExplosion2();
m_explosion.setDestroyAfterPlay(true);
m_position = new Vec2D();
m_speed = (SPEED * 1.25);
m_rotation = 0;
m_fx = new IFloat(0);
m_fr = new IFloat(0);
m_fy = new IFloat(0);
}
public function getX():int{
return (m_position.x);
}
public function getY():int{
return (m_position.y);
}
override public function render(_arg1:int, _arg2:Number):void{
bomb.x = m_fx.value;
bomb.y = m_fy.value;
bomb.rotation = m_fr.value;
}
override public function tick(_arg1:int):void{
var _local2:*;
var _local3:*;
var _local4:Line;
var _local5:Boolean;
var _local6:int;
var _local7:Pt;
var _local8:Line;
var _local9:Number;
var _local10:Line;
var _local11:Number;
if (m_movement){
_local2 = (m_position.x + (m_movement.x * m_speed));
_local3 = (m_position.y + (m_movement.y * m_speed));
_local4 = new Line(m_position.x, m_position.y, _local2, _local3);
_local5 = false;
_local6 = 0;
while (((!(_local5)) && ((_local6 < m_collidableList.length)))) {
_local7 = _local4.intersectionPoint(m_collidableList[_local6]);
if (_local7 != null){
_local8 = new Line(m_position.x, m_position.y, _local7.x, _local7.y);
_local9 = _local8.length();
m_position.x = (m_position.x + (m_movement.x * _local9));
m_position.y = (m_position.y + (m_movement.y * _local9));
_local10 = new Line(_local7.x, _local7.y, _local2, _local3);
_local11 = _local10.length();
m_movement.x = -(m_movement.x);
m_position.x = (m_position.x + (m_movement.x * _local11));
m_position.y = (m_position.y + (m_movement.y * _local11));
_local5 = true;
};
_local6++;
};
if (!_local5){
m_position.x = (m_position.x + (m_movement.x * m_speed));
m_position.y = (m_position.y + (m_movement.y * m_speed));
};
m_speed = Math.max((m_speed = (m_speed * 0.985)), SPEED);
m_rotation = (m_rotation + 16);
};
m_fx.set(m_position.x);
m_fy.set(m_position.y);
m_fr.set(m_rotation);
}
public function explode():void{
if (bomb.parent){
m_explosion.x = bomb.x;
m_explosion.y = bomb.y;
m_effects.addChild(m_explosion);
m_explosion.start();
bomb.parent.removeChild(bomb);
};
isRemoving = true;
}
public function setPosition(_arg1:int, _arg2:int):void{
m_position.x = int(_arg1);
m_fx = new IFloat(_arg1);
m_position.y = int(_arg2);
m_fy = new IFloat(_arg2);
bomb.x = _arg1;
bomb.y = _arg2;
}
public function fire(_arg1:Number):void{
m_movement = new Vec2D(XPMath.cos(_arg1), XPMath.sin(_arg1));
}
}
}//package junglebubble
Section 19
//BombClip (junglebubble.BombClip)
package junglebubble {
import flash.display.*;
public class BombClip extends MovieClip {
private var m_bomb:Bomb;
public function BombClip(_arg1:Bomb){
addFrameScript(0, frame1);
m_bomb = _arg1;
}
function frame1(){
stop();
}
}
}//package junglebubble
Section 20
//BombLauncher (junglebubble.BombLauncher)
package junglebubble {
import flash.display.*;
import timing.*;
import math.*;
public class BombLauncher extends MovieClip {
private var m_aimFn:Function;
private var m_fr:IFloat;
private var m_r:Number;
private var m_mouseX:int;
private var m_x:int;
private var m_y:int;
private var m_reload:int;
private var m_mouseY:int;
private var m_bomb:Bomb;
private var m_lastDeg:int;
public function BombLauncher(){
m_fr = new IFloat(0);
m_r = 0;
m_lastDeg = -1;
m_reload = 0;
m_mouseX = 0;
m_mouseY = 0;
m_x = (0 | x);
m_y = (0 | y);
}
public function tick(_arg1:int, _arg2:int, _arg3:int):void{
m_reload--;
m_mouseX = _arg2;
m_mouseY = (_arg3 + 620);
var _local4:* = m_r;
m_r = XPMath.atan2((Math.min((m_y - 30), m_mouseY) - m_y), (m_mouseX - m_x));
if (((!((m_aimFn == null))) && (!(((m_r - _local4) == 0))))){
m_aimFn(m_r, _local4);
};
m_fr.set(m_r);
}
public function setBomb(_arg1:Bomb):void{
m_bomb = _arg1;
}
public function render(_arg1:int, _arg2:Number):void{
var _local3:int = int(((m_fr.value * (180 / Math.PI)) + 90));
if (_local3 != m_lastDeg){
rotation = _local3;
};
}
public function fire():Bomb{
if ((((m_reload <= 0)) && (!((m_bomb == null))))){
m_bomb.fire(m_r);
m_reload = 25;
return (m_bomb);
};
return (null);
}
public function setAimChangeCallback(_arg1:Function):void{
m_aimFn = _arg1;
}
}
}//package junglebubble
Section 21
//BonusClock (junglebubble.BonusClock)
package junglebubble {
import flash.display.*;
public class BonusClock extends MovieClip {
private var m_paused:Boolean;
private var m_numTicksTotal:int;
private var m_lastFrame:int;
private var m_numTicksLeft:int;
private var m_game:Game;
private var m_callbackFired:Boolean;
private var m_fnCallback:Function;
private static const LIMIT:int = 20000;
public function BonusClock(){
reset();
}
public function reset():void{
m_paused = false;
m_numTicksTotal = (LIMIT / GameBase.TICK_RATE);
m_numTicksLeft = -1;
m_callbackFired = false;
m_lastFrame = -1;
if (m_game){
m_game.getSoundManager().get("bonus_time_warning").stop();
};
gotoAndStop(1);
}
public function start(_arg1:Function):void{
m_fnCallback = _arg1;
m_numTicksLeft = m_numTicksTotal;
m_callbackFired = false;
}
public function setGame(_arg1:Game):void{
m_game = _arg1;
}
public function pause():void{
if (m_game){
m_game.getSoundManager().get("bonus_time_warning").stop();
};
m_paused = true;
m_lastFrame = -1;
}
public function render():void{
var _local1:int;
if (m_numTicksLeft >= 0){
_local1 = (100 - (100 * (m_numTicksLeft / m_numTicksTotal)));
if (_local1 > 100){
_local1 = 100;
};
if (_local1 < 1){
_local1 = 1;
};
if (_local1 != m_lastFrame){
m_lastFrame = _local1;
gotoAndStop(_local1);
};
};
}
public function tick():void{
if (m_paused){
return;
};
if (m_numTicksLeft > 0){
m_numTicksLeft--;
};
if (m_numTicksLeft == int((5000 / GameBase.TICK_RATE))){
if (m_game){
m_game.getSoundManager().get("bonus_time_warning").loop();
};
};
if (((!(m_callbackFired)) && ((m_numTicksLeft == 0)))){
if (m_fnCallback != null){
m_fnCallback();
};
m_callbackFired = true;
if (m_game){
m_game.getSoundManager().get("bonus_time_warning").stop();
};
};
}
}
}//package junglebubble
Section 22
//BonusCompleteSign (junglebubble.BonusCompleteSign)
package junglebubble {
import flash.display.*;
import flash.events.*;
import anim.*;
import localization.*;
import flash.utils.*;
public class BonusCompleteSign extends MovieClip {
private var m_scoreVal:RollingScore;
private var m_completedLevel:int;
public var sign:MovieClip;
private var m_subSuccessLevel:Number;
private var m_game:Game;
private var m_successLevel:int;
var m_missedTime:int;
private var m_jewelAnim:BaseFlare;
private var m_lastFrame:int;
private var m_removeAt:int;
private var m_step:Number;
var m_prevTime:int;
private var m_dir:int;
private var m_startTime:int;
public function BonusCompleteSign(){
sign.content.item.stop();
sign.content.stop();
sign.stop();
stop();
}
public function show(_arg1:int, _arg2:Number, _arg3:int):void{
if (_arg3 == 5){
sign.content.item.gotoAndStop((1 + _arg1));
} else {
sign.content.item.gotoAndStop(((1 + 4) + (3 - _arg1)));
};
sign.content.item.visible = false;
m_successLevel = _arg1;
m_subSuccessLevel = _arg2;
m_completedLevel = _arg3;
m_scoreVal = new RollingScore(sign.content.score_txt, 0, -1);
sign.content.msg_txt.text = I18n.getString("bonus_acquired");
sign.content.score_txt.text = "0";
sign.content.head.head.gotoAndStop((2 + _arg1));
m_startTime = -1;
m_lastFrame = -1;
m_step = ((1 / 60) * 1000);
m_removeAt = -1;
m_dir = 1;
m_missedTime = 0;
m_prevTime = getTimer();
addEventListener(Event.ENTER_FRAME, animateAppear);
m_game.getSoundManager().get("sign_appear").play(0.7);
}
public function animateAppear(_arg1:Event):void{
var _local2:int;
_local2 = getTimer();
m_missedTime = (m_missedTime + (_local2 - m_prevTime));
m_prevTime = _local2;
var _local3:int = (1000 / GameBase.TICK_RATE);
while (m_missedTime > _local3) {
m_scoreVal.update();
m_missedTime = (m_missedTime - _local3);
};
m_scoreVal.render();
if ((((((m_dir == 0)) && (!((m_removeAt == -1))))) && ((_local2 > m_removeAt)))){
m_dir = -1;
m_startTime = -1;
m_game.getSoundManager().get("sign_appear").play(0.7);
};
sign.content.head.rotation = (Math.sin(((_local2 - m_startTime) / 100)) * 20);
if (m_dir == 0){
return;
};
if (m_startTime < 0){
visible = true;
m_startTime = _local2;
};
var _local4:uint = int(Math.round((((_local2 - m_startTime) / m_step) + 1)));
if (m_dir > 0){
if (_local4 > 40){
if (m_removeAt == -1){
m_dir = 0;
if (sign.content.item.currentFrame == 5){
sign.content.item.inner4.anima.gotoAndStop((1 + ((4 - m_completedLevel) * 3)));
sign.content.item.inner4.gotoAndStop(1);
};
if (sign.content.item.currentFrame == 6){
sign.content.item.inner5.anima.gotoAndStop((2 + ((4 - m_completedLevel) * 3)));
sign.content.item.inner5.gotoAndStop(1);
};
if (sign.content.item.currentFrame == 7){
sign.content.item.inner6.anima.gotoAndStop((3 + ((4 - m_completedLevel) * 3)));
sign.content.item.inner6.gotoAndStop(1);
};
sign.content.item.visible = true;
m_game.getMusicManager().get("bonus_end_good").play();
m_scoreVal.setValue(((m_successLevel * 5000) + int((m_subSuccessLevel * 2500))));
m_jewelAnim = sign.content.item[("inner" + (sign.content.item.currentFrame - 1))];
if (m_completedLevel < 5){
m_jewelAnim.setLoopRestartFrame(7);
m_jewelAnim.setLoop(true);
};
m_jewelAnim.start();
m_removeAt = (_local2 + 3000);
};
_local4 = 40;
};
} else {
if (m_dir < 0){
_local4 = (_local4 + 40);
if (_local4 > 70){
m_jewelAnim.stop();
stop();
sign.stop();
sign.content.stop();
sign.content.item.stop();
removeEventListener(Event.ENTER_FRAME, animateAppear);
};
};
};
if (_local4 != m_lastFrame){
gotoAndStop(_local4);
m_lastFrame = _local4;
};
}
public function setGame(_arg1:Game):void{
m_game = _arg1;
}
}
}//package junglebubble
Section 23
//BonusGame (junglebubble.BonusGame)
package junglebubble {
public interface BonusGame {
function init(_arg1:int):void;
function render(_arg1:int, _arg2:Number):void;
function onMouseDown():void;
function tidy(_arg1:Boolean):void;
function tick(_arg1:int, _arg2:int, _arg3:int):void;
}
}//package junglebubble
Section 24
//BonusGameBubbleMining (junglebubble.BonusGameBubbleMining)
package junglebubble {
import flash.display.*;
import timing.*;
import geom.*;
import anim.*;
import math.*;
public class BonusGameBubbleMining implements BonusGame, BubbleListener {
private var m_game:Game;
private var m_mineCollidabelList:Array;
private var m_bubbleQueue:Array;
private var m_isTimeStarted:Boolean;
public var isBonusLevelCompleted:Boolean;
private var m_isTimeOver:Boolean;
private var m_aimCursor:AimCursor;
private var m_tick:int;
private var m_externalListener:BubbleListener;
private var m_effects:DisplayObjectContainer;
private var m_bonusTime:BonusClock;
private var m_explosion:BaseFlare;
private var m_main:GameAssembly;
private var m_bubbleBox:BubbleBox;
private var m_subSuccessLevel:Number;
private var m_dropLayer:MovieClip;
private var m_successLevel:int;
private var m_rng:MtRandom;
private var m_bubbleLauncher:BubbleLauncher;
private var m_aimBubble:Bubble;
private var m_cursor:MeterArrow;
private var m_tickList:Array;
private var m_dynamiteBlasted:Boolean;
private var m_cursorY:int;
private var m_cursorYF:IFloat;
private var m_nextBubble:Bubble;
private var m_bubbleAimMoving:int;
private var m_leaveAt:int;
private static const COLORS:Array = [1, 3, 5];
public function BonusGameBubbleMining(_arg1:Game, _arg2:DisplayObjectContainer, _arg3:BubbleListener, _arg4:GameAssembly, _arg5:Array){
m_game = _arg1;
m_externalListener = _arg3;
m_effects = _arg2;
m_cursor = new MeterArrow();
m_cursor.x = 700;
m_cursor.visible = false;
m_effects = _arg2;
m_effects.addChild(m_cursor);
m_dropLayer = new MovieClip();
m_mineCollidabelList = new Array();
m_mineCollidabelList.push(new Line(372, -2500, 372, 600));
m_mineCollidabelList.push(new Line(648, -2500, 648, 600));
m_main = _arg4;
m_tickList = _arg5;
m_main.top_layer.under.addChild(m_dropLayer);
m_bonusTime = m_main.bonus_time;
m_bonusTime.setGame(_arg1);
m_aimCursor = m_effects["aim_under"];
m_bubbleLauncher = m_main.bubble_launcher_under;
m_explosion = BaseFlare(m_main.big_explosion);
m_explosion.visible = false;
m_rng = new MtRandom((m_game.getSharedData().globalSeed + 101));
}
public function onChangeBubbleAim(_arg1:Number, _arg2:Number):void{
var _local3:Number = Math.abs((_arg1 - _arg2));
m_bubbleAimMoving++;
m_main.monkey_under.setFrame(((_arg1 < (-(Math.PI) / 2))) ? 2 : 1);
m_main.lever_underworld.rotation = (Math.sin((_arg1 / 2)) * 12);
}
public function onBubbleOverflow():void{
m_dynamiteBlasted = true;
m_explosion.visible = true;
m_explosion.start();
m_bonusTime.pause();
m_leaveAt = (m_tick + 3);
m_game.getSoundManager().get("explosion").play();
m_game.getMusicManager().get("bonus_loop2").fadeToAndStop(0, 500);
}
public function onTimeUp():void{
m_isTimeOver = true;
}
public function init(_arg1:int):void{
var _local8:int;
var _local9:int;
var _local10:MovieClip;
var _local11:int;
var _local12:int;
var _local13:Bubble;
isBonusLevelCompleted = false;
m_bubbleQueue = new Array();
m_successLevel = 0;
m_subSuccessLevel = 0;
m_cursorY = (390 + 31);
m_cursorYF = new IFloat(m_cursorY);
m_leaveAt = -1;
m_isTimeStarted = false;
var _local2:* = 13;
var _local3:* = m_game.getSharedData();
m_bubbleBox = new BubbleBox(m_game, _local3, _arg1, _local2, COLORS, 0);
m_bubbleBox.setPreferredBottomPos(7);
m_bubbleBox.setCanSpawnBonus(false);
m_bubbleBox.setAllowedBottomRow(true);
m_bubbleBox.setScoringEnabled(false);
m_bubbleBox.setUseScrollDelay(false);
m_bubbleBox.addListener(this);
m_main.rock_base.addChild(m_bubbleBox);
m_bubbleBox.setDropBubbleContainer(m_dropLayer);
m_explosion.setFrameRate(60);
m_explosion.gotoAndStop(1);
m_explosion.visible = false;
m_dynamiteBlasted = false;
m_main.bubble_launcher_under.visible = true;
m_main.bomb_launcher.visible = false;
m_main.bubble_frame.gotoAndStop(1);
m_main.bubble_frame.visible = true;
m_aimCursor.setAncorPosition(508, 540);
m_aimCursor.setVisibleLimit(330, 4, 690, 560);
m_aimCursor.setArrowLength(88);
m_aimCursor.setRadLimits(-3.1414, 0.0001);
m_aimCursor.visible = false;
m_aimBubble = new Bubble();
m_aimBubble.assureFull();
m_aimBubble.setCollidableList(m_mineCollidabelList);
m_aimBubble.setPosition(508, 540);
m_main.rock_base.addChild(m_aimBubble.bubble);
m_main.bubble_launcher_obj_shadow.visible = true;
m_bubbleLauncher.setBubble(m_aimBubble);
m_bubbleLauncher.setReloadTime(12);
m_bubbleLauncher.setRadLimits(-3.1414, 0.0001);
m_bubbleLauncher.setAimChangeCallback(onChangeBubbleAim);
var _local4 = 5;
var _local5:Array = [COLORS[0], COLORS[1], COLORS[2]];
var _local6:int;
while (_local6 < m_rng.nextInt(4)) {
_local5.push(_local5.shift());
_local6++;
};
var _local7:int = (_local4 - _local5.length);
_local6 = 0;
while (_local6 < _local7) {
_local8 = m_rng.nextInt(_local5.length);
_local5.splice(_local8, 0, _local5[_local8]);
_local6++;
};
_local6 = 0;
while (_local6 < 5) {
_local9 = _local5.shift();
if (_local6 == 0){
m_aimBubble.setColorIndex(_local9);
} else {
_local10 = MovieClip(m_main[("under_bubble_" + _local6)]);
_local11 = _local10.x;
_local12 = (_local10.y - 620);
_local13 = new Bubble();
_local13.assureFull();
_local13.setPosition(_local11, _local12);
_local13.setColorIndex(_local9);
_local13.setCollidableList(m_mineCollidabelList);
m_main.rock_base.addChild(_local13.bubble);
m_bubbleQueue.push(_local13);
};
_local6++;
};
}
public function render(_arg1:int, _arg2:Number):void{
m_aimCursor.update(_arg1, _arg2);
m_bonusTime.render();
m_bubbleLauncher.render(_arg1, _arg2);
m_bubbleBox.render(_arg1, _arg2);
m_cursor.y = m_cursorYF.value;
}
public function onLeaveBonusMode(_arg1:int, _arg2:Number):void{
}
public function tick(_arg1:int, _arg2:int, _arg3:int):void{
var _local4:int;
m_tick = _arg1;
m_bonusTime.tick();
if (m_bubbleAimMoving > 0){
m_main.rep_under.visible = ((_arg1 % 3) == 0);
m_bubbleAimMoving--;
};
if (!m_isTimeStarted){
m_aimCursor.visible = true;
m_cursor.start();
m_cursor.visible = true;
m_cursor.visible = true;
m_isTimeStarted = true;
m_isTimeOver = false;
m_bonusTime.start(onTimeUp);
};
m_aimCursor.tick(_arg2, _arg3);
if (m_leaveAt == _arg1){
m_bubbleBox.popLiveBubbles();
m_externalListener.onLeaveBonusMode(m_successLevel, m_subSuccessLevel);
return;
};
if (m_leaveAt == -1){
m_bubbleBox.tick(_arg1);
_local4 = m_bubbleBox.getDeepestHole();
m_cursorY = ((((390 * _local4) / 11) - (BubbleBox.radiusY / 2)) + 31);
if (m_cursorY < 31){
m_cursorY = 31;
};
if (m_cursorY > 421){
m_cursorY = 421;
};
if (m_cursorY < 165){
m_subSuccessLevel = (1 - ((m_cursorY - 31) / (165 - 31)));
m_successLevel = 3;
} else {
if (m_cursorY < 291){
m_subSuccessLevel = (1 - ((m_cursorY - 165) / (291 - 165)));
m_successLevel = 2;
} else {
m_subSuccessLevel = (1 - ((m_cursorY - 291) / (421 - 291)));
m_successLevel = 1;
};
};
if (m_dynamiteBlasted){
m_successLevel = 0;
m_subSuccessLevel = 0;
};
if (_local4 == 0){
isBonusLevelCompleted = true;
};
};
m_cursorYF.set(m_cursorY);
if ((((((((m_leaveAt == -1)) && ((m_bubbleBox.getNumLiveBubbles() == 0)))) && ((m_aimBubble == null)))) && ((m_bubbleQueue.length == 0)))){
isBonusLevelCompleted = true;
};
if (((m_isTimeOver) && ((m_bubbleBox.getNumLiveBubbles() == 0)))){
isBonusLevelCompleted = true;
};
if (((isBonusLevelCompleted) && ((m_leaveAt == -1)))){
m_game.getMusicManager().get("bonus_loop2").fadeToAndStop(0, 500);
if (!m_dynamiteBlasted){
m_bubbleBox.popLiveBubbles();
m_externalListener.onBeforeLeaveBonusMode(m_successLevel, m_subSuccessLevel);
};
m_leaveAt = ((_arg1 + (GameBase.TICK_RATE * 4)) + 8);
m_bonusTime.pause();
};
m_bubbleLauncher.tick(_arg1, _arg2, _arg3);
}
public function onBubbleRemove():void{
}
public function onNoMoreBubbles():void{
}
public function onMouseDown():void{
if (((((m_isTimeOver) || (isBonusLevelCompleted))) || (m_dynamiteBlasted))){
return;
};
if (((!((m_aimBubble == null))) && (m_bubbleLauncher.fire()))){
m_game.getSoundManager().get("shot1").play();
m_bubbleBox.addLiveBubble(m_aimBubble);
m_tickList.push(m_aimBubble);
if (m_bubbleQueue.length == 0){
m_main.bubble_launcher_obj_shadow.visible = false;
};
nextBubble();
};
}
public function onBeforeLeaveBonusMode(_arg1:int, _arg2:Number):void{
}
public function tidy(_arg1:Boolean):void{
var _local2:Bubble;
if (_arg1){
m_game.getMusicManager().get("bonus_loop2").fadeToAndStop(0, 100);
return;
};
m_cursor.stop();
m_cursor.visible = false;
m_bubbleBox.destroy();
m_bonusTime.reset();
if (m_aimBubble){
m_aimBubble.remove();
m_aimBubble = null;
};
while ((_local2 = m_bubbleQueue.pop()) != null) {
_local2.remove();
};
}
public function onBonusBubbleWasted():void{
}
private function nextBubble():void{
m_nextBubble = m_bubbleQueue.shift();
if (m_nextBubble){
m_aimBubble = m_nextBubble;
m_aimBubble.animateSmallJump();
m_tickList.push(m_aimBubble);
m_bubbleLauncher.setBubble(m_aimBubble);
} else {
m_aimBubble = null;
};
var _local1:int;
while (_local1 < m_bubbleQueue.length) {
m_bubbleQueue[_local1].animateLeft();
m_tickList.push(m_bubbleQueue[_local1]);
_local1++;
};
}
public function onBonusBubbleCollected(_arg1:int):void{
}
}
}//package junglebubble
Section 25
//BonusGameDefense (junglebubble.BonusGameDefense)
package junglebubble {
import flash.display.*;
import timing.*;
import geom.*;
import anim.*;
import math.*;
public class BonusGameDefense implements BonusGame {
private var m_game:Game;
private var m_mineCollidabelList:Array;
private var m_numSpawnBubble:int;
private var m_isTimeStarted:Boolean;
public var isBonusLevelCompleted:Boolean;
private var m_isTimeOver:Boolean;
private var m_fallingBubble:Array;
private var m_numPoppedBubble:int;
private var m_aimCursor:AimCursor;
private var m_tick:int;
private var m_externalListener:BubbleListener;
private var m_dynamiteBlasted:Boolean;
private var m_effects:DisplayObjectContainer;
private var m_bonusTime:BonusClock;
private var m_spawnNextBubbleAt:int;
private var m_shotBubble:Array;
private var m_poppedBubbleYAccumulate:int;
private var m_main:GameAssembly;
private var m_startTick:int;
private var m_subSuccessLevel:Number;
private var m_successLevel:int;
private var m_rng:MtRandom;
private var m_explosion:BaseFlare;
private var m_bubbleLauncher:BubbleLauncher;
private var m_compositeBubbleList:Array;
private var m_bubbleColor:int;
private var m_aimBubble:Bubble;
private var m_cursor:CursorLine;
private var m_nextBubble:Bubble;
private var m_groupSeq:int;
private var m_tickList:Array;
private var m_bubbleAimMoving:int;
private var m_cursorY:int;
private var m_cursorYF:IFloat;
private var m_leaveAt:int;
private static const numColor:int = 3;
public function BonusGameDefense(_arg1:Game, _arg2:DisplayObjectContainer, _arg3:BubbleListener, _arg4:GameAssembly, _arg5:Array){
m_game = _arg1;
m_externalListener = _arg3;
m_effects = _arg2;
m_cursor = new CursorLine();
m_cursor.x = 700;
m_cursor.visible = false;
m_effects.addChild(m_cursor);
m_mineCollidabelList = new Array();
m_mineCollidabelList.push(new Line(372, -2500, 372, 600));
m_mineCollidabelList.push(new Line(648, -2500, 648, 600));
m_main = _arg4;
m_tickList = _arg5;
m_bonusTime = m_main.bonus_time;
m_bonusTime.setGame(_arg1);
m_aimCursor = m_effects["aim_under"];
m_bubbleLauncher = m_main.bubble_launcher_under;
m_explosion = BaseFlare(m_main.big_explosion);
m_explosion.visible = false;
}
public function onChangeBubbleAim(_arg1:Number, _arg2:Number):void{
var _local3:Number = Math.abs((_arg1 - _arg2));
m_bubbleAimMoving++;
m_main.monkey_under.setFrame(((_arg1 < (-(Math.PI) / 2))) ? 2 : 1);
m_main.lever_underworld.rotation = (Math.sin((_arg1 / 2)) * 12);
}
public function onTimeUp():void{
m_isTimeOver = true;
}
public function init(_arg1:int):void{
m_rng = new MtRandom(_arg1);
m_compositeBubbleList = new Array();
m_groupSeq = 0;
isBonusLevelCompleted = false;
m_bubbleColor = (m_rng.nextInt(5) + 1);
m_poppedBubbleYAccumulate = 0;
m_numPoppedBubble = 0;
m_fallingBubble = new Array();
m_shotBubble = new Array();
m_startTick = -1;
m_successLevel = 0;
m_subSuccessLevel = 0;
m_cursorY = 421;
m_cursorYF = new IFloat(m_cursorY);
m_leaveAt = -1;
m_spawnNextBubbleAt = -2;
m_numSpawnBubble = 1;
m_isTimeStarted = false;
var _local2:* = m_game.getSharedData();
m_main.bubble_frame.visible = false;
m_explosion.setFrameRate(60);
m_explosion.gotoAndStop(1);
m_explosion.visible = false;
m_dynamiteBlasted = false;
m_aimCursor.setAncorPosition(508, 540);
m_aimCursor.setVisibleLimit(330, 4, 690, 560);
m_aimCursor.setRadLimits((-(Math.PI) + 0.7), -0.7);
m_aimCursor.setArrowLength(88);
m_aimCursor.visible = false;
m_main.bubble_launcher_under.visible = true;
m_main.bubble_launcher_obj_shadow.visible = true;
m_main.bomb_launcher.visible = false;
m_main.bubble_frame.visible = false;
nextBubble();
m_main.rock_base.addChild(m_aimBubble.bubble);
m_bubbleLauncher.setBubble(m_aimBubble);
m_bubbleLauncher.setReloadTime(12);
m_bubbleLauncher.setRadLimits((-(Math.PI) + 0.7), -0.7);
m_bubbleLauncher.setAimChangeCallback(onChangeBubbleAim);
}
public function tick(_arg1:int, _arg2:int, _arg3:int):void{
var _local4:int;
var _local6:CompositeBubble;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:int;
var _local11:Bubble;
var _local12:CompositeBubble;
var _local13:int;
var _local14:int;
var _local15:int;
var _local16:Number;
var _local17:Bubble;
var _local18:Bubble;
var _local19:int;
var _local20:int;
var _local21:Bubble;
var _local22:int;
var _local23:*;
var _local24:*;
var _local25:Boolean;
var _local26:CompositeBubble;
m_tick = _arg1;
m_bonusTime.tick();
var _local5:int;
if (m_bubbleAimMoving > 0){
m_main.rep_under.visible = ((_arg1 % 3) == 0);
m_bubbleAimMoving--;
};
if (!m_isTimeStarted){
m_aimCursor.visible = true;
m_cursor.visible = true;
m_isTimeStarted = true;
m_startTick = _arg1;
m_isTimeOver = false;
m_bonusTime.start(onTimeUp);
};
m_aimCursor.tick(_arg2, _arg3);
if ((((m_spawnNextBubbleAt == _arg1)) || ((m_spawnNextBubbleAt == -2)))){
m_spawnNextBubbleAt = -1;
_local6 = new CompositeBubble();
_local7 = ((((Math.PI * 2) - (Math.PI / 2)) + (2.4 * m_rng.nextDouble())) - 1.2);
_local8 = (XPMath.cos(_local7) * 7);
_local9 = (-(XPMath.sin(_local7)) * 7);
_local10 = (508 + (m_rng.nextInt(150) - 75));
_local6.setMovement(_local8, _local9);
_local6.setPosition(_local10, -(BubbleBox.radiusY));
_local6.setWall((372 + 19), (648 - 19));
_local4 = 0;
while (_local4 < 1) {
_local11 = new Bubble();
_local11.assureFull();
_local11.setCollidableList(m_mineCollidabelList);
_local11.setColorIndex(m_bubbleColor);
_local11.arrayX = _local4;
_local11.arrayY = m_groupSeq;
m_main.rock_base.addChild(_local11.bubble);
m_fallingBubble.push(_local11);
_local6.addBubble(_local11, 0, 0);
_local4++;
};
_local6.group = m_groupSeq;
m_compositeBubbleList.push(_local6);
m_groupSeq++;
};
if (((!(isBonusLevelCompleted)) && ((m_spawnNextBubbleAt == -1)))){
m_spawnNextBubbleAt = (_arg1 + 75);
};
_local4 = 0;
while (_local4 < m_compositeBubbleList.length) {
_local12 = m_compositeBubbleList[_local4];
_local12.tick(_arg1);
if (_local12.exploding()){
m_compositeBubbleList.splice(_local4, 1);
_local5 = 0;
while (_local5 < m_fallingBubble.length) {
_local17 = m_fallingBubble[_local5];
if (_local12.group == _local17.arrayY){
_local17.isRemoving = true;
_local17.bubble.setDropOffset(1200);
_local17.drop(_local12.getMoveX(), _local12.getMoveY(), false, false);
m_fallingBubble.splice(_local5, 1);
} else {
_local5++;
};
};
_local13 = _local12.getY();
_local14 = 200;
_local15 = 400;
if (_local13 < _local14){
_local13 = _local14;
};
if (_local13 > _local15){
_local13 = _local15;
};
_local16 = ((_local13 - _local14) / (_local15 - _local14));
m_poppedBubbleYAccumulate = (m_poppedBubbleYAccumulate + int(((390 * _local16) + 16)));
m_numPoppedBubble++;
} else {
_local4++;
};
};
_local4 = 0;
while (_local4 < m_fallingBubble.length) {
_local18 = m_fallingBubble[_local4];
_local19 = _local18.getY();
if (_local19 > 430){
if (!m_dynamiteBlasted){
finishOff();
isBonusLevelCompleted = true;
m_dynamiteBlasted = true;
m_explosion.visible = true;
m_explosion.start();
m_game.getSoundManager().get("explosion").play();
m_bonusTime.pause();
m_leaveAt = (m_tick + 3);
};
break;
};
if (_local18.isStuck){
} else {
_local20 = 0;
while (_local20 < m_shotBubble.length) {
_local21 = m_shotBubble[_local20];
_local22 = _local21.getY();
if (_local22 < -50){
m_game.getSoundManager().get("scream").play();
m_poppedBubbleYAccumulate = (m_poppedBubbleYAccumulate + 200);
m_shotBubble.splice(_local20, 1);
_local21.remove();
} else {
m_shotBubble.slice();
if (_local21.isStuck){
} else {
_local23 = (_local21.getX() - _local18.getX());
_local24 = (_local22 - _local19);
if (((_local23 * _local23) + (_local24 * _local24)) < (35 * 35)){
m_shotBubble.splice(_local20, 1);
_local25 = false;
_local5 = 0;
while (_local5 < m_compositeBubbleList.length) {
_local26 = m_compositeBubbleList[_local5];
if (_local26.group == _local18.arrayY){
if (_local26.aboutToExplode()){
_local21.explode();
break;
};
if (_local26.getNumBubbles() == 1){
_local26.setBubbleOffset(0, -19, 0);
_local26.addBubble(_local21, 19, 0);
_local21.arrayX = 2;
_local21.arrayY = _local26.group;
m_fallingBubble.push(_local21);
} else {
if (_local26.getNumBubbles() == 2){
m_game.getSoundManager().get("burst").play(0.7);
_local26.setBubbleOffset(0, -19, (19 / 2));
_local26.setBubbleOffset(1, 19, (19 / 2));
_local26.addBubble(_local21, 0, (-19 * 1.1));
_local21.arrayX = 3;
_local21.arrayY = _local26.group;
m_fallingBubble.push(_local21);
};
};
break;
};
_local5++;
};
_local21.isRemoving = true;
} else {
_local20++;
};
};
};
};
_local4++;
};
};
if (m_leaveAt == _arg1){
m_externalListener.onLeaveBonusMode((m_dynamiteBlasted) ? 0 : m_successLevel, (m_dynamiteBlasted) ? 0 : m_subSuccessLevel);
return;
};
if (m_numPoppedBubble > 0){
m_cursorY = (m_poppedBubbleYAccumulate / m_numPoppedBubble);
} else {
m_cursorY = 421;
};
if (m_cursorY < 31){
m_cursorY = 31;
};
if (m_cursorY > 421){
m_cursorY = 421;
};
if (m_leaveAt == -1){
if (m_cursorY < 162){
m_subSuccessLevel = (1 - ((m_cursorY - 31) / (162 - 31)));
m_successLevel = 3;
} else {
if (m_cursorY < 291){
m_subSuccessLevel = (1 - ((m_cursorY - 162) / (291 - 162)));
m_successLevel = 2;
} else {
m_subSuccessLevel = (1 - ((m_cursorY - 291) / (421 - 291)));
m_successLevel = 1;
};
};
};
m_cursorYF.set(m_cursorY);
if (((m_isTimeOver) && ((m_shotBubble.length == 0)))){
isBonusLevelCompleted = true;
};
if (((isBonusLevelCompleted) && ((m_leaveAt == -1)))){
finishOff();
m_compositeBubbleList = [];
m_externalListener.onBeforeLeaveBonusMode((m_dynamiteBlasted) ? 0 : m_successLevel, (m_dynamiteBlasted) ? 0 : m_subSuccessLevel);
m_leaveAt = ((_arg1 + (GameBase.TICK_RATE * 4)) + 8);
m_spawnNextBubbleAt = -1;
m_bonusTime.pause();
};
m_bubbleLauncher.tick(_arg1, _arg2, _arg3);
}
public function render(_arg1:int, _arg2:Number):void{
var _local3:* = 0;
while (_local3 < m_compositeBubbleList.length) {
m_compositeBubbleList[_local3].render(_arg1, _arg2);
_local3++;
};
m_aimCursor.update(_arg1, _arg2);
m_bonusTime.render();
m_bubbleLauncher.render(_arg1, _arg2);
m_cursor.y = m_cursorYF.value;
}
public function onMouseDown():void{
if (((((m_isTimeOver) || (isBonusLevelCompleted))) || (m_dynamiteBlasted))){
return;
};
if (m_bubbleLauncher.fire()){
m_game.getSoundManager().get("shot1").play();
m_tickList.push(m_aimBubble);
m_shotBubble.push(m_aimBubble);
nextBubble();
};
}
public function tidy(_arg1:Boolean):void{
if (_arg1){
m_game.getMusicManager().get("bonus_loop1").fadeToAndStop(0, 100);
return;
};
finishOff();
if (m_nextBubble){
m_nextBubble.remove();
m_nextBubble = null;
};
if (m_aimBubble){
m_aimBubble.remove();
m_aimBubble = null;
};
m_cursor.visible = false;
m_bonusTime.reset();
}
private function finishOff():void{
var _local1:int;
m_game.getMusicManager().get("bonus_loop1").fadeToAndStop(0, 500);
m_main.bubble_launcher_obj_shadow.visible = false;
_local1 = 0;
while (_local1 < m_shotBubble.length) {
m_shotBubble[_local1].explode();
m_shotBubble[_local1].isRemoving = true;
_local1++;
};
_local1 = 0;
while (_local1 < m_fallingBubble.length) {
m_fallingBubble[_local1].explode();
m_fallingBubble[_local1].isRemoving = true;
_local1++;
};
m_compositeBubbleList = [];
m_fallingBubble = [];
m_shotBubble = [];
if (m_nextBubble){
m_nextBubble.remove();
m_nextBubble = null;
};
if (m_aimBubble){
m_aimBubble.remove();
m_aimBubble = null;
};
}
private function nextBubble():void{
if (m_nextBubble == null){
m_nextBubble = new Bubble();
m_nextBubble.assureFull();
m_nextBubble.setCollidableList(m_mineCollidabelList);
m_nextBubble.setPosition(508, 540);
m_nextBubble.setColorIndex(m_bubbleColor);
};
var _local1:Bubble = new Bubble();
_local1.assureFull();
_local1.setCollidableList(m_mineCollidabelList);
var _local2:MovieClip = MovieClip(m_main["under_bubble_1"]);
var _local3:int = _local2.x;
var _local4:int = (_local2.y - 620);
_local1.setPosition(_local3, _local4);
_local1.setColorIndex(m_bubbleColor);
m_main.rock_base.addChild(_local1.bubble);
m_aimBubble = m_nextBubble;
m_nextBubble = _local1;
m_nextBubble.bubble.visible = false;
m_aimBubble.bubble.visible = true;
m_aimBubble.setPosition(508, 540);
m_bubbleLauncher.setBubble(m_aimBubble);
}
}
}//package junglebubble
Section 26
//BonusGameNull (junglebubble.BonusGameNull)
package junglebubble {
import flash.display.*;
import anim.*;
public class BonusGameNull implements BonusGame {
private var m_explosion:BaseFlare;
private var m_game:Game;
private var m_main:GameAssembly;
private var m_startTick:int;
private var m_successLevel:int;
public var isBonusLevelCompleted:Boolean;
private var m_tickList:Array;
private var m_tick:int;
private var m_externalListener:BubbleListener;
private var m_effects:DisplayObjectContainer;
private var m_leaveAt:int;
public function BonusGameNull(_arg1:Game, _arg2:DisplayObjectContainer, _arg3:BubbleListener, _arg4:GameAssembly, _arg5:Array){
m_game = _arg1;
m_externalListener = _arg3;
m_effects = _arg2;
m_main = _arg4;
m_tickList = _arg5;
m_explosion = BaseFlare(m_main.big_explosion);
m_explosion.visible = false;
}
public function onTimeUp():void{
isBonusLevelCompleted = true;
}
public function tidy(_arg1:Boolean):void{
}
public function onMouseDown():void{
}
public function init(_arg1:int):void{
isBonusLevelCompleted = false;
m_leaveAt = -1;
}
public function tick(_arg1:int, _arg2:int, _arg3:int):void{
m_tick = _arg1;
if (m_leaveAt == _arg1){
m_externalListener.onLeaveBonusMode(1, 0);
return;
};
if (m_leaveAt == -1){
m_externalListener.onBeforeLeaveBonusMode(1, 0);
m_leaveAt = ((_arg1 + (GameBase.TICK_RATE * 4)) + 8);
};
}
public function render(_arg1:int, _arg2:Number):void{
}
public function onChangeBubbleAim(_arg1:Number, _arg2:Number):void{
}
}
}//package junglebubble
Section 27
//BonusGameRock (junglebubble.BonusGameRock)
package junglebubble {
import flash.display.*;
import timing.*;
import geom.*;
public class BonusGameRock implements BonusGame {
private var m_explosion:MovieClip;
private var m_game:Game;
private var m_main:GameAssembly;
private var m_mineCollidabelList:Array;
private var m_rockBox:RockBox;
private var m_isTimeStarted:Boolean;
public var isBonusLevelCompleted:Boolean;
private var m_bombAimMoving:int;
private var m_tickList:Array;
private var m_externalListener:BubbleListener;
private var m_cursorYF:IFloat;
private var m_cursor:MovieClip;
private var m_bonusTime:BonusClock;
private var m_bombLauncher:BombLauncher;
private var m_leaveAt:int;
public function BonusGameRock(_arg1:Game, _arg2:DisplayObjectContainer, _arg3:BubbleListener, _arg4:GameAssembly, _arg5:Array){
m_game = _arg1;
m_externalListener = _arg3;
m_cursor = new CursorLine();
m_cursor.x = 700;
m_cursor.visible = false;
_arg2.addChild(m_cursor);
m_mineCollidabelList = new Array();
m_mineCollidabelList.push(new Line(372, -2500, 372, 600));
m_mineCollidabelList.push(new Line(648, -2500, 648, 600));
m_main = _arg4;
m_explosion = m_main.big_explosion;
m_tickList = _arg5;
var _local6:* = m_game.getSharedData();
m_rockBox = new RockBox(m_main.rock_base.rock_sublayer, m_main.rock_base.rock_effects, m_main.bonus_time, (_local6.globalSeed + 1));
m_main.rock_base.addChild(m_rockBox);
m_bonusTime = m_main.bonus_time;
m_bonusTime.setGame(_arg1);
m_bombLauncher = m_main.bomb_launcher;
}
public function onTimeUp():void{
isBonusLevelCompleted = true;
}
public function onMouseDown():void{
var _local1:Bomb;
var _local2:*;
if (!m_rockBox.isBonusLevelCompleted){
_local1 = m_bombLauncher.fire();
if (_local1 != null){
m_rockBox.addBomb(_local1);
m_tickList.push(_local1);
_local2 = new Bomb(m_main.rock_base, m_mineCollidabelList);
m_main.rock_base.addChild(_local2.bomb);
_local2.setPosition((384 + 125), 540);
m_bombLauncher.setBomb(_local2);
};
};
}
public function tidy(_arg1:Boolean):void{
m_bonusTime.reset();
m_rockBox.reset();
}
public function init(_arg1:int):void{
m_rockBox.init(_arg1);
m_explosion.setFrameRate(60);
m_explosion.gotoAndStop(1);
m_explosion.visible = false;
m_cursorYF = new IFloat(0);
m_isTimeStarted = false;
m_cursor.visible = false;
isBonusLevelCompleted = false;
m_leaveAt = -1;
m_main.bubble_launcher_under.visible = false;
m_main.bomb_launcher.visible = true;
m_main.bubble_frame.visible = false;
var _local2:* = new Bomb(m_main.rock_base, m_mineCollidabelList);
m_main.rock_base.addChild(_local2.bomb);
_local2.setPosition((384 + 125), 540);
m_bombLauncher.setBomb(_local2);
m_bombLauncher.setAimChangeCallback(onChangeBombAim);
}
public function onChangeBombAim(_arg1:Number, _arg2:Number):void{
var _local3:Number = Math.abs((_arg1 - _arg2));
m_bombAimMoving = (m_bombAimMoving + 1);
m_main.monkey_under.setFrame(((_arg1 < (-(Math.PI) / 2))) ? 2 : 1);
m_main.lever_underworld.rotation = (Math.sin((_arg1 / 2)) * 12);
}
public function render(_arg1:int, _arg2:Number):void{
m_bonusTime.render();
m_bombLauncher.render(_arg1, _arg2);
m_rockBox.render(_arg1, _arg2);
m_cursor.y = m_cursorYF.value;
}
public function tick(_arg1:int, _arg2:int, _arg3:int):void{
m_bonusTime.tick();
if (m_bombAimMoving > 0){
m_main.rep_under.visible = ((_arg1 % 3) == 0);
m_bombAimMoving--;
};
if (!m_isTimeStarted){
m_cursor.visible = true;
m_isTimeStarted = true;
m_bonusTime.start(onTimeUp);
};
if (m_leaveAt == _arg1){
m_externalListener.onLeaveBonusMode(m_rockBox.getBonusSuccessLevel(), 0);
m_bonusTime.reset();
return;
};
m_rockBox.tick(_arg1);
m_cursorYF.set(m_rockBox.getCursorPos());
if (((isBonusLevelCompleted) && ((m_leaveAt == -1)))){
m_externalListener.onBeforeLeaveBonusMode(m_rockBox.getBonusSuccessLevel(), 0);
m_rockBox.blowAllBombs();
m_leaveAt = ((_arg1 + (GameBase.TICK_RATE * 4)) + 8);
m_bonusTime.pause();
};
if (m_rockBox.isExplosion()){
if (!m_explosion.visible){
m_explosion.start();
m_explosion.visible = true;
m_leaveAt = (_arg1 + 3);
return;
};
};
m_bombLauncher.tick(_arg1, _arg2, _arg3);
}
}
}//package junglebubble
Section 28
//BonusGameSurvivor (junglebubble.BonusGameSurvivor)
package junglebubble {
import flash.display.*;
import timing.*;
import geom.*;
import anim.*;
import math.*;
public class BonusGameSurvivor implements BonusGame {
private var m_game:Game;
private var m_scrollPos:int;
private var m_mineCollidabelList:Array;
private var m_isTimeStarted:Boolean;
public var isBonusLevelCompleted:Boolean;
private var m_isTimeOver:Boolean;
private var m_aimCursor:AimCursor;
private var m_tick:int;
private var m_externalListener:BubbleListener;
private var m_advanceDelay:int;
private var m_effects:DisplayObjectContainer;
private var m_bonusTime:BonusClock;
private var m_explosion:BaseFlare;
private var m_main:GameAssembly;
private var m_scroller:Interpolator;
private var m_bubbleBox:BubbleBox;
private var m_subSuccessLevel:Number;
private var m_dropLayer:MovieClip;
private var m_scrollOffset:int;
private var m_successLevel:int;
private var m_startTick:int;
private var m_bubbleLauncher:BubbleLauncher;
private var m_aimBubble:Bubble;
private var m_rng:MtRandom;
private var m_cursor:MeterArrow;
private var m_tickList:Array;
private var m_cursorY:int;
private var m_cursorYF:IFloat;
private var m_dynamiteBlasted:Boolean;
private var m_nextBubble:Bubble;
private var m_bubbleAimMoving:int;
private var m_leaveAt:int;
private static const COLORS:Array = [1, 2, 4];
private static const numColor:int = 3;
public function BonusGameSurvivor(_arg1:Game, _arg2:DisplayObjectContainer, _arg3:BubbleListener, _arg4:GameAssembly, _arg5:Array){
m_game = _arg1;
m_externalListener = _arg3;
m_effects = _arg2;
m_cursor = new MeterArrow();
m_cursor.x = 700;
m_cursor.visible = false;
m_effects.addChild(m_cursor);
m_dropLayer = new MovieClip();
m_mineCollidabelList = new Array();
m_mineCollidabelList.push(new Line(372, -2500, 372, 600));
m_mineCollidabelList.push(new Line(648, -2500, 648, 600));
m_main = _arg4;
m_tickList = _arg5;
m_aimCursor = m_effects["aim_under"];
m_bonusTime = m_main.bonus_time;
m_bonusTime.setGame(_arg1);
m_bubbleLauncher = m_main.bubble_launcher_under;
m_main.top_layer.under.addChild(m_dropLayer);
m_explosion = BaseFlare(m_main.big_explosion);
m_explosion.visible = false;
}
public function onTimeUp():void{
m_isTimeOver = true;
}
public function onChangeBubbleAim(_arg1:Number, _arg2:Number):void{
var _local3:Number = Math.abs((_arg1 - _arg2));
m_bubbleAimMoving++;
m_main.monkey_under.setFrame(((_arg1 < (-(Math.PI) / 2))) ? 2 : 1);
m_main.lever_underworld.rotation = (Math.sin((_arg1 / 2)) * 12);
}
public function init(_arg1:int):void{
isBonusLevelCompleted = false;
m_startTick = -1;
m_successLevel = 0;
m_subSuccessLevel = 0;
m_cursorY = (390 + 31);
m_cursorYF = new IFloat(m_cursorY);
m_leaveAt = -1;
m_isTimeStarted = false;
var _local2:* = 80;
var _local3:* = m_game.getSharedData();
m_bubbleBox = new BubbleBox(m_game, _local3, _arg1, _local2, COLORS, 10);
m_rng = new MtRandom((_arg1 + 1));
m_advanceDelay = 0;
m_scrollPos = 0;
m_bubbleBox.setCanSpawnBonus(false);
m_bubbleBox.setAllowedBottomRow(true);
m_bubbleBox.setUseManualScrolling(true);
m_bubbleBox.setScoringEnabled(false);
m_main.rock_base.addChild(m_bubbleBox);
m_bubbleBox.setDropBubbleContainer(m_dropLayer);
m_main.bubble_frame.gotoAndStop(2);
m_main.bubble_frame.visible = false;
m_explosion.setFrameRate(60);
m_explosion.gotoAndStop(1);
m_explosion.visible = false;
m_dynamiteBlasted = false;
m_main.bubble_launcher_under.visible = true;
m_main.bomb_launcher.visible = false;
m_main.bubble_frame.visible = true;
m_aimCursor.setAncorPosition(508, 540);
m_aimCursor.setVisibleLimit(330, 4, 690, 560);
m_aimCursor.setArrowLength(88);
m_aimCursor.setRadLimits(-3.1414, 0.0001);
m_aimCursor.visible = false;
nextBubble();
m_main.rock_base.addChild(m_aimBubble.bubble);
m_main.bubble_launcher_obj_shadow.visible = true;
m_bubbleLauncher.setBubble(m_aimBubble);
m_bubbleLauncher.setReloadTime(12);
m_bubbleLauncher.setRadLimits(-3.1414, 0.0001);
m_bubbleLauncher.setAimChangeCallback(onChangeBubbleAim);
m_scrollOffset = m_bubbleBox.bubbleHeight();
m_bubbleBox.setScrollOffset((-(m_scrollOffset) + (BubbleBox.radiusY * 3)));
m_bubbleBox.tick(1);
m_bubbleBox.render(1, 0);
m_bubbleBox.tick(1);
m_bubbleBox.render(1, 0);
m_bubbleBox.tick(1);
m_bubbleBox.render(1, 0);
}
public function render(_arg1:int, _arg2:Number):void{
m_aimCursor.update(_arg1, _arg2);
m_bonusTime.render();
m_bubbleLauncher.render(_arg1, _arg2);
if (m_leaveAt == -1){
m_bubbleBox.render(_arg1, _arg2);
};
m_cursor.y = m_cursorYF.value;
}
public function tick(_arg1:int, _arg2:int, _arg3:int):void{
var _local4:int;
var _local5:int;
var _local6:*;
m_tick = _arg1;
m_bonusTime.tick();
if (m_bubbleAimMoving > 0){
m_main.rep_under.visible = ((_arg1 % 3) == 0);
m_bubbleAimMoving--;
};
if (!m_isTimeStarted){
m_aimCursor.visible = true;
m_cursor.start();
m_cursor.visible = true;
m_isTimeStarted = true;
m_isTimeOver = false;
m_startTick = _arg1;
m_bonusTime.start(onTimeUp);
};
m_aimCursor.tick(_arg2, _arg3);
if (m_leaveAt == _arg1){
m_externalListener.onLeaveBonusMode((m_dynamiteBlasted) ? 0 : m_successLevel, (m_dynamiteBlasted) ? 0 : m_subSuccessLevel);
return;
};
if (m_leaveAt == -1){
m_bubbleBox.tick(_arg1);
if (m_bubbleBox.getNumVisibleBubble() == 0){
m_cursorY = 31;
isBonusLevelCompleted = true;
};
if (m_advanceDelay > 0){
m_advanceDelay--;
} else {
_local6 = (GameBase.TICK_RATE * 2);
m_advanceDelay = (_local6 - (_local6 / 4));
m_scroller = new EaseOutQuadInterpolator(m_scrollPos, (m_scrollPos + BubbleBox.radiusY), (_local6 / 4));
};
if (((!(isBonusLevelCompleted)) && (!((m_scroller == null))))){
m_scroller.update();
m_scrollPos = m_scroller.getValue();
if (m_scroller.isDone()){
m_scroller = null;
};
};
_local4 = ((m_scrollPos - m_scrollOffset) + (BubbleBox.radiusY * 3));
m_bubbleBox.setScrollOffset(_local4);
_local5 = m_bubbleBox.bubbleHeight();
if (!isBonusLevelCompleted){
m_cursorY = ((_local5 + _local4) - (BubbleBox.radiusY / 2));
};
if (m_cursorY < 31){
m_cursorY = 31;
};
if (m_cursorY > 421){
m_cursorY = 421;
};
if (m_cursorY < 165){
m_subSuccessLevel = (1 - ((m_cursorY - 31) / (165 - 31)));
m_successLevel = 3;
} else {
if (m_cursorY < 291){
m_subSuccessLevel = (1 - ((m_cursorY - 165) / (291 - 165)));
m_successLevel = 2;
} else {
m_subSuccessLevel = (1 - ((m_cursorY - 291) / (421 - 291)));
m_successLevel = 1;
};
};
if (((!(m_dynamiteBlasted)) && (((_local5 + _local4) >= 464)))){
m_game.getMusicManager().get("bonus_loop3").fadeToAndStop(0, 500);
m_game.getSoundManager().get("explosion").play();
isBonusLevelCompleted = true;
m_dynamiteBlasted = true;
m_explosion.visible = true;
m_explosion.start();
m_bonusTime.pause();
m_leaveAt = (m_tick + 3);
};
if (((m_isTimeOver) && ((m_bubbleBox.getNumLiveBubbles() == 0)))){
isBonusLevelCompleted = true;
};
if (((isBonusLevelCompleted) && ((m_leaveAt == -1)))){
m_bubbleBox.popLiveBubbles();
m_game.getMusicManager().get("bonus_loop3").fadeToAndStop(0, 500);
m_externalListener.onBeforeLeaveBonusMode((m_dynamiteBlasted) ? 0 : m_successLevel, (m_dynamiteBlasted) ? 0 : m_subSuccessLevel);
m_leaveAt = ((_arg1 + (GameBase.TICK_RATE * 4)) + 8);
m_bonusTime.pause();
};
};
m_cursorYF.set(m_cursorY);
m_bubbleLauncher.tick(_arg1, _arg2, _arg3);
}
public function onMouseDown():void{
if (((((m_isTimeOver) || (isBonusLevelCompleted))) || (m_dynamiteBlasted))){
return;
};
if (m_bubbleLauncher.fire()){
m_game.getSoundManager().get("shot1").play();
m_bubbleBox.addLiveBubble(m_aimBubble);
m_tickList.push(m_aimBubble);
nextBubble();
};
}
public function tidy(_arg1:Boolean):void{
if (_arg1){
m_game.getMusicManager().get("bonus_loop3").fadeToAndStop(0, 100);
return;
};
m_cursor.stop();
m_cursor.visible = false;
if (m_nextBubble){
m_nextBubble.remove();
m_nextBubble = null;
};
if (m_aimBubble){
m_aimBubble.remove();
m_aimBubble = null;
};
m_bubbleBox.destroy();
m_bonusTime.reset();
}
private function nextBubble():void{
if (m_nextBubble == null){
m_nextBubble = new Bubble();
m_nextBubble.assureFull();
m_nextBubble.setCollidableList(m_mineCollidabelList);
m_nextBubble.setPosition(508, 540);
m_nextBubble.setColorIndex(COLORS[m_rng.nextInt(COLORS.length)]);
};
var _local1:Bubble = new Bubble();
_local1.assureFull();
_local1.setCollidableList(m_mineCollidabelList);
var _local2:MovieClip = MovieClip(m_main["under_bubble_1"]);
var _local3:int = _local2.x;
var _local4:int = (_local2.y - 620);
_local1.setPosition(_local3, _local4);
_local1.setColorIndex(COLORS[m_rng.nextInt(COLORS.length)]);
m_main.rock_base.addChild(_local1.bubble);
m_aimBubble = m_nextBubble;
m_aimBubble.animateSmallJump();
m_tickList.push(m_aimBubble);
m_nextBubble = _local1;
m_nextBubble.animateIntoView();
m_tickList.push(m_nextBubble);
m_bubbleLauncher.setBubble(m_aimBubble);
}
}
}//package junglebubble
Section 29
//BonusIntroSign (junglebubble.BonusIntroSign)
package junglebubble {
import flash.display.*;
import flash.events.*;
import localization.*;
import flash.utils.*;
public class BonusIntroSign extends MovieClip {
private var m_startTime:int;
private var m_lastFrame:int;
private var m_removeAt:int;
private var m_game:Game;
private var m_isFinished:Boolean;
private var m_numTicksLeft:int;
private var m_dir:int;
public var sign:MovieClip;
private var m_step:Number;
public function BonusIntroSign(){
gotoAndStop(1);
sign.gotoAndStop(1);
visible = false;
m_isFinished = false;
}
public function setGame(_arg1:Game):void{
m_game = _arg1;
}
public function isFinished():Boolean{
return (m_isFinished);
}
public function show(_arg1:int):void{
m_isFinished = false;
m_numTicksLeft = (GameBase.TICK_RATE * 4);
m_startTime = -1;
m_lastFrame = -1;
m_step = ((1 / 60) * 1000);
m_removeAt = -1;
m_dir = 1;
visible = true;
sign.gotoAndStop((_arg1 + 1));
sign.title_txt.text = I18n.getString((("bonus_mode_" + (_arg1 + 1)) + "_head"));
sign.label_txt.text = I18n.getString((("bonus_mode_" + (_arg1 + 1)) + "_content"));
addEventListener(Event.ENTER_FRAME, animateAppear);
m_game.getSoundManager().get("sign_appear").play(0.7);
}
public function animateAppear(_arg1:Event):void{
var _local2:int = getTimer();
if ((((((m_dir == 0)) && (!((m_removeAt == -1))))) && ((_local2 > m_removeAt)))){
m_dir = -1;
m_startTime = -1;
m_game.getSoundManager().get("sign_appear").play(0.7);
};
if (m_dir == 0){
return;
};
if (m_startTime < 0){
visible = true;
m_startTime = _local2;
};
var _local3:uint = int(Math.round((((_local2 - m_startTime) / m_step) + 1)));
if (m_dir > 0){
if (_local3 > 25){
if (m_removeAt == -1){
m_dir = 0;
m_removeAt = (_local2 + 3000);
};
_local3 = 25;
};
} else {
if (m_dir < 0){
_local3 = (_local3 + 25);
if (_local3 > 50){
stop();
visible = false;
removeEventListener(Event.ENTER_FRAME, animateAppear);
};
};
};
if (_local3 != m_lastFrame){
gotoAndStop(_local3);
m_lastFrame = _local3;
};
}
public function tick():void{
if (m_numTicksLeft > 0){
m_numTicksLeft--;
} else {
m_isFinished = true;
};
}
}
}//package junglebubble
Section 30
//BonusSign (junglebubble.BonusSign)
package junglebubble {
import sfx.*;
import flash.display.*;
import flash.text.*;
import timing.*;
import anim.*;
import localization.*;
public class BonusSign extends MovieClip {
private var m_game:Game;
public var bonus_txt:TextField;
private var m_bubbler:Number;
private var m_bubbles:Array;
public var stars:bonusmode_stars;
private var m_anim:Interpolator;
private var m_bubbleColor:int;
private var m_bubbleYF1:IFloat;
private var m_y:int;
private var m_reverseAt:int;
private var m_fy:IFloat;
private var m_bubbleYF2:IFloat;
private var m_bonusIdx:int;
private var m_dir:int;
public function BonusSign(){
m_y = -160;
m_fy = new IFloat(m_y);
m_bubbles = new Array();
m_bubbles.push(new BubbleClip(null));
m_bubbles.push(new BubbleClip(null));
m_bubbles.push(new BubbleClip(null));
addChild(m_bubbles[0]);
addChild(m_bubbles[1]);
addChild(m_bubbles[2]);
m_bubbles[0].x = 90;
m_bubbles[1].x = (90 + 60);
m_bubbles[2].x = ((90 + 60) + 60);
m_bubbleYF1 = new IFloat(0);
m_bubbleYF2 = new IFloat(0);
m_reverseAt = -1;
}
public function render():void{
var _local2:*;
var _local1:* = m_fy.value;
if (y != _local1){
y = _local1;
};
if (visible){
_local2 = m_bubbleYF1.value;
m_bubbles[0].y = _local2;
m_bubbles[2].y = _local2;
m_bubbles[1].y = m_bubbleYF2.value;
};
}
public function tick(_arg1:int):void{
var _local2:SoundManager;
if (m_reverseAt == _arg1){
m_anim = new EaseOutQuadInterpolator(190, -160, 15);
m_game.getSoundManager().get("sign_appear").play(0.7);
};
if (m_dir == -1){
_local2 = m_game.getMusicManager();
if (((!(_local2.get("bonus_start").isPlaying())) && (!(_local2.get(("bonus_loop" + (m_bonusIdx + 1))).isPlaying())))){
_local2.get(("bonus_loop" + (m_bonusIdx + 1))).loop(0.75);
};
};
if (m_anim){
m_anim.update();
m_y = m_anim.getValue();
if (m_anim.isDone()){
m_anim = null;
if (m_dir == -1){
visible = false;
m_dir = 0;
};
if (m_dir == 1){
m_game.getMusicManager().get("bonus_start").play();
m_dir = -1;
stars.start();
m_reverseAt = (_arg1 + 75);
};
};
};
if (visible){
m_bubbleYF1.set(((Math.sin(m_bubbler) * 15) + 95));
m_bubbleYF2.set(((Math.sin((m_bubbler + Math.PI)) * 15) + 95));
m_bubbler = (m_bubbler + 0.12);
};
m_fy.set(m_y);
}
public function setGame(_arg1:Game):void{
m_game = _arg1;
}
public function show(_arg1:int, _arg2:int):void{
m_bonusIdx = _arg2;
m_bubbleColor = _arg1;
m_bubbles[0].ball.gotoAndStop(_arg1);
m_bubbles[1].ball.gotoAndStop(_arg1);
m_bubbles[2].ball.gotoAndStop(_arg1);
m_dir = 1;
visible = true;
m_bubbler = 0;
m_anim = new EaseInQuadInterpolator(-160, 190, 15);
m_game.getSoundManager().get("sign_appear").play(0.7);
bonus_txt.text = I18n.getString("bonus_mode_title");
}
}
}//package junglebubble
Section 31
//Bubble (junglebubble.Bubble)
package junglebubble {
import timing.*;
import geom.*;
import flash.events.*;
import flash.geom.*;
import anim.*;
import math.*;
import flash.utils.*;
public class Bubble extends TickObject {
private var m_oldFx:IFloat;
private var m_oldFy:IFloat;
private var m_scaleVal:IFloat;
public var bubble:BubbleClip;
private var m_oldColor:int;
private var m_color:int;
public var isStuck:Boolean;
public var isBonus:Boolean;
private var m_oldPosition:Vec2D;
public var arrayX:int;
public var arrayY:int;
private var m_oldMovement:Vec2D;
private var m_animX:Interpolator;
private var m_collidableList:Array;
private var m_position:Vec2D;
private var m_movement:Vec2D;
public var suggestX:Number;
public var suggestY:Number;
private var m_jumpPtr1:int;
private var m_fx:IFloat;
private var m_fy:IFloat;
private var m_oldSpeed:Number;
private var m_jumpPtr2:int;
private var m_flashR:Number;
private var m_speed:Number;
private var m_flashT:int;
private var m_scale:Interpolator;
private var m_flashStart:int;
private static const RADIUS:int = 8;
private static const SPEED:int = 25;
public function Bubble(){
m_position = new Vec2D();
m_speed = (SPEED * 1.25);
m_jumpPtr1 = -1;
m_jumpPtr2 = -1;
m_oldColor = -1;
suggestX = -1;
suggestY = -1;
}
public function remove():void{
isStuck = false;
isRemoving = true;
if (bubble != null){
bubble.stopAnim();
bubble.removeEventListener(Event.ENTER_FRAME, animateBonusFlash);
if (bubble.parent != null){
bubble.transform.colorTransform = new ColorTransform();
bubble.transform_anim.visible = false;
bubble.transform_anim.stop();
bubble.bonus_sparkle.visible = false;
bubble.bonus_sparkle.stop();
bubble.scaleX = 1;
bubble.scaleY = 1;
bubble.parent.removeChild(bubble);
};
};
bubble = null;
}
public function assureFull():void{
if (bubble == null){
bubble = new BubbleClip(this);
bubble.ball.gotoAndStop(m_color);
};
if (!m_scaleVal){
m_scaleVal = new IFloat(0);
};
}
public function promoteToBonus():void{
isBonus = true;
m_oldColor = m_color;
setColorIndex(6);
if (bubble == null){
assureFull();
};
var _local1:* = ((((arrayY & 1) == 0)) ? (BubbleBox.radiusX / 2) : 0 + (arrayX * BubbleBox.radiusX));
var _local2:* = (arrayY * BubbleBox.radiusY);
setPosition(_local1, _local2);
bubble.transform_anim.visible = true;
bubble.transform_anim.start();
bubble.bonus_sparkle.visible = true;
bubble.bonus_sparkle.start();
m_flashT = -1;
m_flashStart = (m_flashT + 2500);
m_flashR = (Math.PI / 2);
if (bubble){
bubble.addEventListener(Event.ENTER_FRAME, animateBonusFlash);
};
}
public function animateLeft():void{
isRemoving = false;
m_animX = new EaseOutQuadInterpolator(m_position.x, (m_position.x - 39), 6);
}
public function disableBubble():void{
if (bubble != null){
bubble.removeEventListener(Event.ENTER_FRAME, animateBonusFlash);
if (bubble.parent != null){
bubble.transform.colorTransform = new ColorTransform();
bubble.transform_anim.visible = false;
bubble.transform_anim.stop();
bubble.bonus_sparkle.visible = false;
bubble.bonus_sparkle.stop();
bubble.scaleX = 1;
bubble.scaleY = 1;
m_oldColor = m_color;
setColorIndex(7);
};
};
}
override public function render(_arg1:int, _arg2:Number):void{
var _local3:*;
bubble.x = m_fx.value;
bubble.y = m_fy.value;
if (m_scale){
_local3 = m_scaleVal.value;
bubble.scaleX = _local3;
bubble.scaleY = _local3;
};
}
public function stick(_arg1:int, _arg2:int):void{
m_movement = null;
setPosition(_arg1, _arg2);
isStuck = true;
isRemoving = true;
}
public function setCollidableList(_arg1:Array){
m_collidableList = _arg1;
}
public function getColorIndex():int{
return (m_color);
}
public function pushState():void{
if (m_movement != null){
m_oldMovement = new Vec2D();
m_oldMovement.copyFrom(m_movement);
};
m_oldFx = new IFloat(0);
m_oldFx.copyFrom(m_fx);
m_oldFy = new IFloat(0);
m_oldFy.copyFrom(m_fy);
m_oldPosition = new Vec2D();
m_oldPosition.copyFrom(m_position);
m_oldSpeed = m_speed;
}
override public function tick(_arg1:int):void{
var _local2:*;
var _local3:*;
var _local4:Line;
var _local5:Boolean;
var _local6:int;
var _local7:Pt;
var _local8:Line;
var _local9:Number;
var _local10:Line;
var _local11:Number;
var _local12:*;
if (isStuck){
isRemoving = true;
};
if (m_jumpPtr1 != -1){
m_position.x = ((-(m_jumpPtr1) * 5.5) + 562);
m_position.y = ((XPMath.sin((Math.PI + (((Math.PI / 12) * m_jumpPtr1) * 1.09))) * 50) + 555);
m_jumpPtr1++;
if (m_jumpPtr1 > 10){
setPosition(508, 540);
isRemoving = true;
m_jumpPtr1 = -1;
};
};
if (m_jumpPtr2 != -1){
m_position.x = ((-(m_jumpPtr2) * 10.79) + 629);
m_position.y = ((XPMath.sin((Math.PI + (((Math.PI / 12) * m_jumpPtr2) * 0.86))) * 100) + 555);
m_jumpPtr2++;
if (m_jumpPtr2 > 10){
gotoAimPosition();
isRemoving = true;
m_jumpPtr2 = -1;
};
};
if (m_movement){
_local2 = (m_position.x + (m_movement.x * m_speed));
_local3 = (m_position.y + (m_movement.y * m_speed));
_local4 = new Line(m_position.x, m_position.y, _local2, _local3);
_local5 = false;
_local6 = 0;
while (((!(_local5)) && ((_local6 < m_collidableList.length)))) {
_local7 = _local4.intersectionPoint(m_collidableList[_local6]);
if (_local7 != null){
_local8 = new Line(m_position.x, m_position.y, _local7.x, _local7.y);
_local9 = _local8.length();
m_position.x = (m_position.x + (m_movement.x * _local9));
m_position.y = (m_position.y + (m_movement.y * _local9));
_local10 = new Line(_local7.x, _local7.y, _local2, _local3);
_local11 = _local10.length();
m_movement.x = -(m_movement.x);
m_position.x = (m_position.x + (m_movement.x * _local11));
m_position.y = (m_position.y + (m_movement.y * _local11));
_local5 = true;
};
_local6++;
};
if (!_local5){
m_position.x = (m_position.x + (m_movement.x * m_speed));
m_position.y = (m_position.y + (m_movement.y * m_speed));
};
m_speed = Math.max((m_speed = (m_speed * 0.985)), SPEED);
};
if (m_animX){
if (m_animX.isDone()){
setPosition(m_animX.getTargetValue(), m_position.y);
m_animX = null;
isRemoving = true;
} else {
m_animX.update();
m_position.x = m_animX.getValue();
};
};
if (m_scale){
if (m_scale.isDone()){
_local12 = m_scale.getTargetValue();
bubble.scaleX = _local12;
bubble.scaleY = _local12;
m_scale = null;
isRemoving = true;
} else {
m_scale.update();
m_scaleVal.set(m_scale.getValue());
};
};
m_fx.set(m_position.x);
m_fy.set(m_position.y);
}
public function gotoPreviewPosition():void{
setPosition(628, 555);
}
public function gotoAimPosition():void{
setPosition(521, 477);
}
public function animateIntoView():void{
m_scale = new EaseOutQuadInterpolator(0, 1, 15);
}
public function fire(_arg1:Number):void{
m_movement = new Vec2D(XPMath.cos(_arg1), XPMath.sin(_arg1));
m_jumpPtr1 = -1;
m_jumpPtr2 = -1;
}
public function setPosition(_arg1:int, _arg2:int):void{
m_position.x = _arg1;
m_fx = new IFloat(_arg1);
m_position.y = _arg2;
m_fy = new IFloat(_arg2);
bubble.x = _arg1;
bubble.y = _arg2;
}
public function getX():int{
return (m_position.x);
}
public function getY():int{
return (m_position.y);
}
public function bounceOff():void{
isStuck = false;
isRemoving = true;
m_movement = null;
if (((!((bubble == null))) && (!((bubble.parent == null))))){
bubble.startDrop(0, 0, false, false);
};
}
public function setColorIndex(_arg1:int):void{
m_color = _arg1;
if (bubble){
bubble.ball.gotoAndStop(_arg1);
};
}
public function animateLongJump():void{
isRemoving = false;
m_jumpPtr2 = 0;
}
public function moving():Boolean{
return (!((m_movement == null)));
}
public function stopMovement():void{
m_movement = null;
}
public function animateBonusFlash(_arg1:Event):void{
var _local4:ColorTransform;
var _local5:ColorTransform;
var _local6:Number;
if (!bubble){
bubble.removeEventListener(Event.ENTER_FRAME, animateBonusFlash);
return;
};
var _local2:int = getTimer();
if (_local2 < m_flashStart){
return;
};
if (m_flashT == -1){
m_flashT = _local2;
};
var _local3:int = (_local2 - m_flashT);
m_flashT = _local2;
m_flashR = (m_flashR + (_local3 * 0.02));
if (m_flashR > ((Math.PI / 2) + (Math.PI * 2))){
m_flashStart = (_local2 + 2000);
m_flashR = (Math.PI / 2);
m_flashT = -1;
bubble.scaleX = 1;
bubble.scaleY = 1;
bubble.transform.colorTransform = new ColorTransform();
} else {
_local4 = new ColorTransform();
_local5 = new ColorTransform();
_local4.color = 0xFFFFFF;
_local6 = Math.sin(m_flashR);
bubble.transform.colorTransform = interpolateColor(_local4, _local5, ((_local6 * 0.5) + 0.5));
bubble.scaleX = ((_local6 * 0.25) + 1);
bubble.scaleY = ((_local6 * 0.25) + 1);
};
}
public function setTickedPosition(_arg1:Number, _arg2:Number):void{
m_position.x = int(_arg1);
m_position.y = int(_arg2);
m_fx.set(_arg1);
m_fy.set(_arg2);
}
public function popState():void{
if (m_movement != null){
m_movement.copyFrom(m_oldMovement);
};
m_fx.copyFrom(m_oldFx);
m_fy.copyFrom(m_oldFy);
m_position.copyFrom(m_oldPosition);
m_speed = m_oldSpeed;
}
public function disableBonusMode():void{
if (isBonus){
isBonus = false;
bubble.removeEventListener(Event.ENTER_FRAME, animateBonusFlash);
bubble.transform.colorTransform = new ColorTransform();
bubble.transform_anim.visible = false;
bubble.transform_anim.stop();
bubble.bonus_sparkle.visible = false;
bubble.bonus_sparkle.stop();
bubble.scaleX = 1;
bubble.scaleY = 1;
setColorIndex(m_oldColor);
m_oldColor = -1;
};
}
public function explode():void{
isStuck = false;
if (bubble != null){
if (bubble.parent != null){
bubble.startExplosion();
};
bubble.removeEventListener(Event.ENTER_FRAME, animateBonusFlash);
};
}
private function interpolateColor(_arg1:ColorTransform, _arg2:ColorTransform, _arg3:Number):ColorTransform{
var _local4:ColorTransform = new ColorTransform();
_local4.redMultiplier = (_arg1.redMultiplier + ((_arg2.redMultiplier - _arg1.redMultiplier) * _arg3));
_local4.greenMultiplier = (_arg1.greenMultiplier + ((_arg2.greenMultiplier - _arg1.greenMultiplier) * _arg3));
_local4.blueMultiplier = (_arg1.blueMultiplier + ((_arg2.blueMultiplier - _arg1.blueMultiplier) * _arg3));
_local4.alphaMultiplier = (_arg1.alphaMultiplier + ((_arg2.alphaMultiplier - _arg1.alphaMultiplier) * _arg3));
_local4.redOffset = (_arg1.redOffset + ((_arg2.redOffset - _arg1.redOffset) * _arg3));
_local4.greenOffset = (_arg1.greenOffset + ((_arg2.greenOffset - _arg1.greenOffset) * _arg3));
_local4.blueOffset = (_arg1.blueOffset + ((_arg2.blueOffset - _arg1.blueOffset) * _arg3));
_local4.alphaOffset = (_arg1.alphaOffset + ((_arg2.alphaOffset - _arg1.alphaOffset) * _arg3));
return (_local4);
}
public function drop(_arg1:Number, _arg2:Number, _arg3:Boolean, _arg4:Boolean):void{
isStuck = false;
if (bubble != null){
if (bubble.parent != null){
bubble.startDrop(_arg1, _arg2, _arg3, _arg4);
};
bubble.removeEventListener(Event.ENTER_FRAME, animateBonusFlash);
};
}
public function animateSmallJump():void{
isRemoving = false;
m_jumpPtr1 = 0;
}
public function setPositionLimited(_arg1:int, _arg2:int):void{
m_position.x = _arg1;
m_position.y = _arg2;
}
}
}//package junglebubble
Section 32
//BubbleBox (junglebubble.BubbleBox)
package junglebubble {
import sfx.*;
import flash.display.*;
import timing.*;
import geom.*;
import anim.*;
import math.*;
import flash.utils.*;
public class BubbleBox extends MovieClip {
private var m_listenerId:int;
private var m_isInBonusLevel:Boolean;
private var m_disabled:Boolean;
private var m_bubbleRng:MtRandom;
private var m_tick:int;
private var m_bottomOffset:int;
private var m_bonusBubbleRng:MtRandom;
private var m_height:int;
private var m_viewBottom:Number;// = 315
private var m_isAllowedBottomRow:Boolean;
private var m_listener:Object;
private var m_numVisibleBubble:int;
private var m_consecutiveBursts:int;
private var m_numBubblesDestroyed:int;
private var m_dropLayer:DisplayObjectContainer;
private var m_offsetX:int;
private var m_bonusLevelStartDelay:int;
private var m_viewOffsetLast:Number;
private var m_numBubble:int;
private var m_useManualScrolling:Boolean;
private var m_viewOffsetIp:IFloat;
private var m_scrollStartDelay:int;
private var m_numBonusBubbleSpawn:int;
private var m_disableRowCount:int;
private var m_bubbles:Array;
private var m_spawnBonusEnable:Boolean;
private var m_game:Game;
private var m_viewTop:int;
private var m_hasBonusBubble:Boolean;
private var m_viewOffset:Number;
private var m_numRows;
private var m_liveBubble:Array;
private var m_sharedData:SharedData;
private var m_useScrollDelay:Boolean;
private var m_scroller:Interpolator;
private var m_isScoreEnable:Boolean;
public static const radiusX:int = 38;
public static const radiusY:int = 35;
private static const m_offsetOdd:Array = [[0, -1], [1, -1], [1, 0], [1, 1], [0, 1], [-1, 0]];
private static const m_offsetEven:Array = [[-1, -1], [0, -1], [1, 0], [0, 1], [-1, 1], [-1, 0]];
public function BubbleBox(_arg1:Game, _arg2:SharedData, _arg3:int, _arg4:int, _arg5:Array, _arg6:int=1){
var _local9:int;
var _local11:Boolean;
var _local12:int;
var _local13:int;
var _local14:Bubble;
var _local15:*;
var _local16:*;
super();
var _local7:* = getTimer();
m_game = _arg1;
m_disabled = false;
m_disableRowCount = -1;
m_numVisibleBubble = 0;
m_useScrollDelay = true;
m_isInBonusLevel = false;
m_spawnBonusEnable = true;
m_isAllowedBottomRow = false;
m_useManualScrolling = false;
m_hasBonusBubble = false;
m_sharedData = _arg2;
mouseChildren = false;
m_bottomOffset = 1;
m_scrollStartDelay = -1;
m_bonusLevelStartDelay = -1;
m_viewTop = 0;
m_height = (_arg4 + _arg6);
m_listenerId = 0;
m_listener = {};
m_liveBubble = new Array();
m_bubbles = new Array((_arg4 + _arg6));
m_viewOffsetLast = -1;
m_numBubblesDestroyed = 0;
m_numBonusBubbleSpawn = 0;
m_isScoreEnable = true;
m_numBubble = 0;
m_bubbleRng = new MtRandom(_arg3);
var _local8:* = 0;
m_consecutiveBursts = 0;
m_bonusBubbleRng = new MtRandom(m_bubbleRng.nextInt(2147483647));
_local9 = 0;
while (_local9 < m_bubbles.length) {
_local11 = ((_local9 & 1) == 0);
_local12 = (_local11) ? 7 : 8;
m_bubbles[_local9] = new Array(_local12);
if (_local9 < (_arg4 - 2)){
_local13 = 0;
while (_local13 < _local12) {
_local14 = new Bubble();
_local14.arrayX = _local13;
_local14.arrayY = _local9;
_local14.isStuck = true;
_local15 = ((_local11) ? (radiusX / 2) : 0 + (_local13 * radiusX));
_local16 = (_local9 * radiusY);
_local14.setPositionLimited(_local15, _local16);
_local14.setColorIndex(_arg5[m_bubbleRng.nextInt(_arg5.length)]);
m_bubbles[_local9][_local13] = _local14;
_local8++;
_local13++;
};
};
_local9++;
};
m_numRows = m_bubbles.length;
m_viewOffset = -(bubbleHeight());
y = m_viewOffset;
m_offsetX = 376;
x = m_offsetX;
m_viewOffsetLast = m_viewOffset;
m_viewOffsetIp = new IFloat(m_viewOffset);
var _local10:* = getTimer();
}
public function setCanSpawnBonus(_arg1:Boolean):void{
m_spawnBonusEnable = _arg1;
}
public function getUniqueColors():Array{
var _local3:int;
var _local4:int;
var _local5:Boolean;
var _local6:int;
var _local1:* = new Array();
var _local2:int;
while (_local2 < m_bubbles.length) {
_local3 = m_bubbles[_local2].length;
while (_local3--) {
if (m_bubbles[_local2][_local3] != null){
_local4 = m_bubbles[_local2][_local3].getColorIndex();
if (_local4 == 6){
} else {
_local5 = false;
_local6 = 0;
while (((!(_local5)) && ((_local6 < _local1.length)))) {
if (_local1[_local6] == _local4){
_local5 = true;
};
_local6++;
};
if (!_local5){
_local1.push(_local4);
};
if (_local1.length == 5){
return (_local1);
};
};
};
};
_local2++;
};
if (_local1.length == 0){
_local1.push(7);
};
return (_local1);
}
public function addLiveBubble(_arg1:Bubble):void{
m_liveBubble.push(_arg1);
}
function bubbleInView(_arg1:Bubble):void{
var _local2:* = ((((_arg1.arrayY & 1) == 0)) ? (radiusX / 2) : 0 + (_arg1.arrayX * radiusX));
var _local3:* = (_arg1.arrayY * radiusY);
_arg1.assureFull();
_arg1.setPosition(_local2, _local3);
addChild(_arg1.bubble);
}
function testPoint(_arg1:Pt):Boolean{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Array;
var _local8:*;
var _local9:*;
var _local2:* = ((((_arg1.y & 1) == 0)) ? (radiusX / 2) : 0 + (_arg1.x * radiusX));
var _local3:* = (_arg1.y * radiusY);
_local4 = Math.min((m_bubbles.length - 1), (_arg1.y + 1));
_local6 = Math.max(0, (_arg1.y - 2));
while (_local4 >= _local6) {
_local7 = m_bubbles[_local4];
_local5 = _local7.length;
while (_local5--) {
if (_local7[_local5] == null){
} else {
_local8 = (_local2 - _local7[_local5].getX());
_local9 = (_local3 - _local7[_local5].getY());
if (((_local8 * _local8) + (_local9 * _local9)) <= (20 * 20)){
return (true);
};
};
};
_local4--;
};
return (false);
}
public function getFirstRowWithBubbles():int{
var _local2:int;
var _local1:int = m_bubbles.length;
while (_local1--) {
_local2 = m_bubbles[_local1].length;
while (_local2--) {
if (m_bubbles[_local1][_local2] != null){
return (_local1);
};
};
};
return (0);
}
public function canFire():Boolean{
return ((m_bonusLevelStartDelay == -1));
}
public function getNumVisibleBubble():int{
return (m_numVisibleBubble);
}
private function attachBubble(_arg1:Bubble):void{
var _local10:BubbleListener;
if (_arg1 == null){
return;
};
var _local2:* = 0;
if ((_arg1.suggestY & 1) == 0){
_local2 = (radiusX / 2);
};
var _local3:* = (_local2 + (_arg1.suggestX * radiusX));
var _local4:* = (_arg1.suggestY * radiusY);
if ((((_arg1.suggestY < 0)) || (((!(m_isAllowedBottomRow)) && ((_arg1.suggestY == (m_bubbles.length - 1))))))){
_arg1.bounceOff();
_arg1 = null;
return;
};
_arg1.arrayX = _arg1.suggestX;
_arg1.arrayY = _arg1.suggestY;
_arg1.stick(_local3, _local4);
m_bubbles[_arg1.suggestY][_arg1.suggestX] = _arg1;
bubbleInView(_arg1);
var _local5:Boolean;
var _local6:Boolean;
if (!m_disabled){
_local5 = testForExpansion(_arg1.suggestX, _arg1.suggestY);
_local6 = testForDrop();
};
var _local7:SoundManager = m_game.getSoundManager();
if (((_local6) && (_local5))){
_local7.get("shot3").play();
} else {
if (((!(_local6)) && (_local5))){
_local7.get("shot2").play();
} else {
_local7.get("shot4").play();
};
};
var _local8:* = false;
var _local9:int = m_bubbles[(m_height - 1)].length;
while (_local9--) {
if (m_bubbles[(m_height - 1)][_local9] != null){
_local8 = true;
break;
};
};
if (_local8){
for each (_local10 in m_listener) {
_local10.onBubbleOverflow();
};
};
}
public function getNumRows():int{
return (m_numRows);
}
public function setUseManualScrolling(_arg1:Boolean):void{
m_useManualScrolling = _arg1;
}
function isClear(_arg1:int, _arg2:int):Boolean{
if ((((((((_arg1 < 0)) || ((_arg2 < 0)))) || ((_arg2 >= m_bubbles.length)))) || ((_arg1 >= m_bubbles[_arg2].length)))){
return (false);
};
if (m_bubbles[_arg2][_arg1] == null){
return (true);
};
return (false);
}
public function visitBonusLevel():void{
m_isInBonusLevel = true;
}
public function disableBubbles():void{
m_disableRowCount = getFirstRowWithBubbles();
m_disabled = true;
}
function getRandomVisibleBubble():Bubble{
var _local4:int;
var _local5:Bubble;
var _local6:Pt;
var _local1:Array = new Array();
var _local2:int = m_bubbles.length;
while (_local2--) {
_local4 = m_bubbles[_local2].length;
while (_local4--) {
_local5 = m_bubbles[_local2][_local4];
if ((((_local5 == null)) || ((_local5.bubble == null)))){
} else {
if ((((_local5.arrayY == 0)) || (_local5.isBonus))){
} else {
_local6 = matrixToScreen(_local5.arrayX, _local5.arrayY);
if (_local6.y < radiusY){
} else {
_local1.push(_local5);
};
};
};
};
};
if (_local1.length == 0){
return (null);
};
var _local3:int = (m_bonusBubbleRng.nextInt(0xA000) % _local1.length);
return (Bubble(_local1[_local3]));
}
public function testForDrop():Boolean{
var _local1:int;
var _local2:int;
var _local12:Bubble;
var _local13:Bubble;
var _local14:Bubble;
var _local15:int;
var _local16:int;
var _local17:Array;
var _local18:int;
var _local19:int;
var _local20:int;
var _local21:*;
var _local22:*;
var _local23:BubbleListener;
var _local24:*;
var _local3:Array = new Array();
var _local4:int = getTimer();
_local2 = m_bubbles[0].length;
while (_local2--) {
if (m_bubbles[0][_local2] != null){
_local3.push(m_bubbles[0][_local2]);
};
};
var _local5:Object = {};
var _local6:* = {};
_local1 = m_bubbles.length;
while (_local1--) {
_local2 = m_bubbles[_local1].length;
while (_local2--) {
_local13 = m_bubbles[_local1][_local2];
if (_local13 != null){
_local6[((_local2 << 16) | _local1)] = _local13;
};
};
};
var _local7:int = m_bubbles.length;
while (_local3.length > 0) {
_local14 = _local3.pop();
_local15 = _local14.arrayX;
_local16 = _local14.arrayY;
_local17 = ((_local16 & !((1 == 0)))) ? m_offsetEven : m_offsetOdd;
_local1 = 6;
while (_local1--) {
_local18 = (_local15 + _local17[_local1][0]);
_local19 = (_local16 + _local17[_local1][1]);
_local20 = ((_local18 << 16) | _local19);
if (!_local5[_local20]){
_local5[_local20] = 1;
if ((((((((_local18 < 0)) || ((_local19 < 0)))) || ((_local19 >= _local7)))) || ((_local18 >= m_bubbles[_local19].length)))){
} else {
if (m_bubbles[_local19][_local18]){
_local3.push(m_bubbles[_local19][_local18]);
delete _local6[_local20];
};
};
};
};
};
var _local8:Array = [0, 50, 100, 150, 200, 300, 400, 500, 650, 800, 950, 1100, 1300, 1500, 1700, 2000];
var _local9:Boolean;
var _local10 = 1;
var _local11:int;
for each (_local12 in _local6) {
if (_local12.arrayY > 0){
m_bubbles[_local12.arrayY][_local12.arrayX] = null;
if (_local12.bubble == null){
_local21 = (((_local12.arrayY)!=0) ? (radiusX / 2) : 0 + (_local12.arrayX * radiusX));
_local22 = (_local12.arrayY * radiusY);
_local12.assureFull();
_local12.setPosition(_local21, _local22);
if (m_dropLayer){
m_dropLayer.addChild(_local12.bubble);
} else {
addChild(_local12.bubble);
};
} else {
if (m_dropLayer){
m_dropLayer.addChild(_local12.bubble);
};
};
if (_local12.isBonus){
_local10 = _local12.getColorIndex();
_local9 = true;
};
m_numBubblesDestroyed++;
_local11++;
_local12.drop(0, 0, true, _local12.isBonus);
};
};
if (_local11 != 0){
for each (_local23 in m_listener) {
_local23.onBubbleRemove();
};
};
if (m_isScoreEnable){
_local24 = _local8[Math.min((_local8.length - 1), _local11)];
m_sharedData.score = (m_sharedData.score + _local24);
};
if (_local9){
m_game.getSoundManager().get("bonusdrop").play();
m_bonusLevelStartDelay = 25;
};
return ((_local11 > 0));
}
public function getNumLiveBubbles():int{
return (m_liveBubble.length);
}
public function setAllowedBottomRow(_arg1:Boolean):void{
m_isAllowedBottomRow = _arg1;
}
public function visitBonusLevelEnd():void{
m_isInBonusLevel = false;
m_hasBonusBubble = hasBonusBubble();
}
public function setScoringEnabled(_arg1:Boolean):void{
m_isScoreEnable = _arg1;
}
public function addListener(_arg1:BubbleListener):String{
var _local2:String = ("@" + ++m_listenerId);
m_listener[_local2] = _arg1;
return (_local2);
}
public function setScrollOffset(_arg1:int):void{
if (m_useManualScrolling){
m_viewOffset = _arg1;
};
}
function getBubble(_arg1:int, _arg2:int):Bubble{
if ((((((((_arg1 < 0)) || ((_arg2 < 0)))) || ((_arg2 >= m_bubbles.length)))) || ((_arg1 >= m_bubbles[_arg2].length)))){
return (null);
};
if (m_bubbles[_arg2][_arg1] != null){
return (m_bubbles[_arg2][_arg1]);
};
return (null);
}
public function tick(_arg1:int):void{
var i:int;
var j:int;
var listener:BubbleListener;
var isRowNotClear:Boolean;
var bubbleRemoved:Boolean;
var bubble:Bubble;
var nx:int;
var ny:int;
var k:Number;
var px:*;
var py:*;
var p:*;
var newBonusBubble:Bubble;
var b:Bubble;
var arr:Array;
var rowVis:Boolean;
var o:Bubble;
var yk:int;
var targetView:*;
var tick = _arg1;
m_tick = tick;
if (m_disabled){
if (m_disableRowCount >= 0){
if (m_disableRowCount == (m_bubbles.length - 1)){
i = 0;
while (i < m_liveBubble.length) {
m_liveBubble[i].disableBubble();
i = (i + 1);
};
};
j = m_bubbles[m_disableRowCount].length;
while ((j = (j - 1)), j) {
if (m_bubbles[m_disableRowCount][j] != null){
m_bubbles[m_disableRowCount][j].disableBubble();
};
};
m_disableRowCount--;
};
};
i = 0;
while (i < m_liveBubble.length) {
bubbleRemoved = false;
bubble = m_liveBubble[i];
bubble.pushState();
bubble.tick((tick + 1));
bubble.tick((tick + 2));
nx = bubble.getX();
ny = bubble.getY();
bubble.popState();
k = 0;
while (k < 1) {
px = ((bubble.getX() * (1 - k)) + (nx * k));
py = ((bubble.getY() * (1 - k)) + (ny * k));
p = screenToMatrix(px, py);
if (isClear(p.x, p.y)){
bubble.suggestX = p.x;
bubble.suggestY = p.y;
};
if ((((((py - m_viewOffset) + 20) < 0)) || (testPoint(p)))){
attachBubble(bubble);
m_liveBubble.splice(i, 1);
bubbleRemoved = true;
break;
};
k = (k + 0.3334);
};
if (m_spawnBonusEnable){
if ((((m_numBonusBubbleSpawn < 5)) && ((m_numBubblesDestroyed >= 20)))){
m_numBubblesDestroyed = 0;
if (!hasBonusBubble()){
newBonusBubble = getRandomBottomBubble(5);
m_game.getSoundManager().get("bubble_appear").play();
if (newBonusBubble != null){
try {
setChildIndex(newBonusBubble.bubble, (numChildren - 1));
} catch(ex) {
};
newBonusBubble.promoteToBonus();
for each (listener in m_listener) {
listener.onBubbleRemove();
};
} else {
i = 0;
while (i < m_bubbles[0].length) {
if (m_bubbles[0][i] != null){
px = (i * radiusX);
py = (1 * radiusY);
b = new Bubble();
b.assureFull();
b.arrayX = i;
b.arrayY = 1;
b.isStuck = true;
b.setColorIndex(1);
b.promoteToBonus();
b.setPositionLimited(px, py);
m_bubbles[1][i] = b;
break;
};
i = (i + 1);
};
};
m_numBonusBubbleSpawn++;
m_hasBonusBubble = true;
} else {
m_hasBonusBubble = true;
};
};
};
if (!bubbleRemoved){
i = (i + 1);
};
};
m_numRows = 0;
m_numBubble = 0;
m_numVisibleBubble = 0;
var maxHeight = -1;
var visTop:int = ((-(radiusY) * 2) + m_viewTop);
var minHeight:int = ((m_height - 2) * radiusY);
var roY:int = (m_bubbles.length * radiusY);
i = m_bubbles.length;
while ((i = (i - 1)), i) {
roY = (roY - radiusY);
isRowNotClear = true;
arr = m_bubbles[i];
rowVis = ((m_viewOffset + roY) > visTop);
j = arr.length;
while ((j = (j - 1)), j) {
o = arr[j];
if (o == null){
} else {
if (rowVis){
if (((((o.isStuck) && ((o.bubble == null)))) || ((o.bubble.parent == null)))){
bubbleInView(o);
};
m_numVisibleBubble++;
};
if (isRowNotClear){
isRowNotClear = false;
yk = (roY + radiusY);
if (yk < maxHeight){
yk = maxHeight;
};
if (yk > minHeight){
yk = minHeight;
};
maxHeight = yk;
m_numRows++;
};
m_numBubble++;
};
};
};
if (((((!(m_isInBonusLevel)) && ((m_numBubble == 0)))) && ((m_bonusLevelStartDelay == -1)))){
for each (listener in m_listener) {
listener.onNoMoreBubbles();
};
};
if (m_bonusLevelStartDelay != -1){
if (--m_bonusLevelStartDelay == 0){
for each (listener in m_listener) {
listener.onBonusBubbleCollected(6);
};
m_bonusLevelStartDelay = -1;
};
};
if (!m_useManualScrolling){
if (m_scroller == null){
targetView = Math.min((radiusY / 2), ((m_viewBottom - maxHeight) + (m_bottomOffset * radiusY)));
if (targetView != m_viewOffset){
if (((m_useScrollDelay) && ((targetView > m_viewOffset)))){
m_scrollStartDelay = 11;
};
m_scroller = new EaseOutQuadInterpolator(m_viewOffset, targetView, 12);
};
};
if (m_scroller != null){
if (m_scrollStartDelay < 0){
m_scroller.update();
m_viewOffset = m_scroller.getValue();
if (m_scroller.isDone()){
m_scroller = null;
};
} else {
m_scrollStartDelay--;
};
};
};
m_viewOffsetIp.set(m_viewOffset);
}
public function setDropBubbleContainer(_arg1:DisplayObjectContainer):void{
m_dropLayer = _arg1;
}
public function render(_arg1:int, _arg2:Number):void{
var _local3:* = m_viewOffsetIp.value;
if (m_viewOffsetLast != _local3){
m_viewOffsetLast = _local3;
y = _local3;
if (m_dropLayer){
m_dropLayer.x = x;
m_dropLayer.y = y;
};
};
}
function screenToMatrix(_arg1:int, _arg2:int):Pt{
var _local3:Pt = new Pt(((_arg1 - m_offsetX) + 20), ((_arg2 - m_viewOffset) + 20));
_local3.y = int((_local3.y / radiusY));
if ((_local3.y & 1) == 0){
_local3.x = int(((_local3.x - (radiusX / 2)) / radiusX));
if (_local3.x > 6){
_local3.x = 6;
};
} else {
_local3.x = int((_local3.x / radiusX));
if (_local3.x > 7){
_local3.x = 7;
};
};
if (_local3.x < 0){
_local3.x = 0;
};
return (_local3);
}
function hasBonusBubble():Boolean{
var _local2:int;
var _local3:Bubble;
var _local1:int = m_bubbles.length;
while (_local1--) {
_local2 = m_bubbles[_local1].length;
while (_local2--) {
_local3 = m_bubbles[_local1][_local2];
if ((((_local3 == null)) || ((_local3.bubble == null)))){
} else {
if (_local3.isBonus){
return (true);
};
};
};
};
return (false);
}
public function setViewTop(_arg1:int):void{
m_viewTop = _arg1;
}
function matrixToScreen(_arg1:int, _arg2:int):Pt{
var _local3:int;
if ((_arg2 & 1) == 0){
_local3 = (radiusX / 2);
};
return (new Pt(((m_offsetX + _local3) + (_arg1 * radiusX)), (m_viewOffset + (_arg2 * radiusY))));
}
public function testForExpansion(_arg1:int, _arg2:int):Boolean{
var _local8:Bubble;
var _local9:Array;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:String;
var _local14:int;
var _local15:Bubble;
var _local16:Boolean;
var _local17:*;
var _local18:Bubble;
var _local19:BubbleListener;
var _local20:Array;
var _local3:* = {};
var _local4:Bubble = m_bubbles[_arg2][_arg1];
var _local5:int = _local4.getColorIndex();
var _local6:Array = new Array();
var _local7:Array = new Array();
_local7.push(_local4);
while (_local7.length > 0) {
_local8 = _local7.shift();
_local9 = ((_local8.arrayY & !((1 == 0)))) ? m_offsetEven : m_offsetOdd;
_local10 = 0;
while (_local10 < _local9.length) {
_local11 = (_local8.arrayX + _local9[_local10][0]);
_local12 = (_local8.arrayY + _local9[_local10][1]);
_local13 = ((_local11 + ",") + _local12);
if (!_local3[_local13]){
_local3[_local13] = 1;
_local14 = getColor(_local11, _local12);
if (_local14 == _local5){
_local15 = getBubble(_local11, _local12);
_local6.push(_local15);
_local7.push(_local15);
};
};
_local10++;
};
};
if (_local6.length >= 3){
_local16 = false;
_local17 = 0;
for each (_local18 in _local6) {
if (_local18.isBonus){
_local16 = true;
};
m_bubbles[_local18.arrayY][_local18.arrayX] = null;
_local18.explode();
m_numBubblesDestroyed++;
_local17++;
};
for each (_local19 in m_listener) {
_local19.onBubbleRemove();
};
if (m_isScoreEnable){
m_sharedData.score = (m_sharedData.score + 10);
_local20 = [0, 30, 50, 70, 100, 150];
if ((((m_consecutiveBursts > 0)) && ((m_consecutiveBursts < 6)))){
m_sharedData.score = (m_sharedData.score + _local20[m_consecutiveBursts]);
} else {
if (m_consecutiveBursts >= 6){
m_sharedData.score = (m_sharedData.score + (15 + (100 * (m_consecutiveBursts - 5))));
};
};
};
if (_local16){
for each (_local19 in m_listener) {
_local19.onBonusBubbleWasted();
};
};
m_consecutiveBursts++;
if (m_consecutiveBursts > 15){
m_consecutiveBursts = 15;
};
} else {
m_consecutiveBursts = 0;
};
return ((_local17 > 0));
}
public function setUseScrollDelay(_arg1:Boolean):void{
if (!_arg1){
m_scrollStartDelay = -1;
};
m_useScrollDelay = _arg1;
}
public function setPreferredBottomPos(_arg1:int):void{
m_bottomOffset = _arg1;
}
public function getBonusBubbleProximityFactor():Number{
if (m_numBonusBubbleSpawn == 5){
return (0);
};
if (m_hasBonusBubble){
return (1);
};
return ((Math.min(20, m_numBubblesDestroyed) / 20));
}
function getColor(_arg1:int, _arg2:int):int{
if ((((((((_arg1 < 0)) || ((_arg2 < 0)))) || ((_arg2 >= m_bubbles.length)))) || ((_arg1 >= m_bubbles[_arg2].length)))){
return (0);
};
if (m_bubbles[_arg2][_arg1] != null){
return (m_bubbles[_arg2][_arg1].getColorIndex());
};
return (-1);
}
public function getDeepestHole():int{
var _local2:Boolean;
var _local3:int;
var _local1:int = m_bubbles.length;
while (_local1--) {
_local2 = false;
_local3 = m_bubbles[_local1].length;
while (_local3--) {
if (m_bubbles[_local1][_local3] == null){
_local2 = true;
break;
};
};
if (!_local2){
return ((_local1 + 1));
};
};
return (0);
}
public function popLiveBubbles():void{
var _local2:Bubble;
var _local1:int;
while (_local1 < m_liveBubble.length) {
_local2 = m_liveBubble[_local1];
_local2.explode();
_local2.isRemoving = true;
_local1++;
};
}
public function bubbleHeight():int{
var _local2:int;
var _local1:int = m_bubbles.length;
while (_local1--) {
_local2 = m_bubbles[_local1].length;
while (_local2--) {
if (m_bubbles[_local1][_local2] != null){
return (((_local1 + 1) * radiusY));
};
};
};
return (0);
}
function getRandomBottomBubble(_arg1:int):Bubble{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:Bubble;
var _local6:Array = new Array();
_local4 = getFirstRowWithBubbles();
_local2 = _local4;
_arg1 = Math.min(_local4, _arg1);
while (_local2 > (_local4 - _arg1)) {
_local3 = m_bubbles[_local2].length;
while (_local3--) {
_local5 = m_bubbles[_local2][_local3];
if (((((!((_local5 == null))) && ((_local5.arrayY > 0)))) && (!(_local5.isBonus)))){
_local6.push(_local5);
};
};
_local2--;
};
if (_local6.length == 0){
return (null);
};
var _local7:int = (m_bonusBubbleRng.nextInt(0xA000) % _local6.length);
return (Bubble(_local6[_local7]));
}
public function getNumBubbles():int{
return (m_numBubble);
}
public function destroy():void{
var _local2:int;
var _local3:Bubble;
m_listener = {};
var _local1:int;
while (_local1 < m_liveBubble.length) {
m_liveBubble[_local1].remove();
_local1++;
};
m_liveBubble = null;
_local1 = m_bubbles.length;
while (_local1--) {
_local2 = m_bubbles[_local1].length;
while (_local2--) {
_local3 = m_bubbles[_local1][_local2];
if (_local3 != null){
_local3.remove();
};
m_bubbles[_local1][_local2] = null;
};
m_bubbles[_local1] = null;
};
m_bubbles = null;
}
}
}//package junglebubble
Section 33
//BubbleBoxTop (junglebubble.BubbleBoxTop)
package junglebubble {
public class BubbleBoxTop extends BubbleBox {
public function BubbleBoxTop(_arg1:Game, _arg2:SharedData, _arg3:int, _arg4:int, _arg5:Array, _arg6:int){
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6);
}
}
}//package junglebubble
Section 34
//BubbleBoxUnder (junglebubble.BubbleBoxUnder)
package junglebubble {
public class BubbleBoxUnder extends BubbleBox {
public function BubbleBoxUnder(_arg1:Game, _arg2:SharedData, _arg3:int, _arg4:int, _arg5:Array, _arg6:int){
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6);
}
}
}//package junglebubble
Section 35
//BubbleClip (junglebubble.BubbleClip)
package junglebubble {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.utils.*;
public class BubbleClip extends MovieClip {
private var m_bubble:Bubble;
public var transform_anim:transform_animation;
private var m_dsin:Number;
private var m_startY;
private var m_startX;
private var m_startDelay:int;
private var m_offsetY:int;
private var m_lastFrame:uint;
private var m_dy:Number;
private var m_dx:Number;
private var m_isZoom:Boolean;
private var m_nextJerkAt:int;
private var m_dcos:Number;
public var bonus_sparkle:bonus_bubble;
private var m_startTime:int;
public var ball:MovieClip;
public function BubbleClip(_arg1:Bubble){
m_dx = 0;
m_dy = 0;
m_bubble = _arg1;
bonus_sparkle.stop();
bonus_sparkle.visible = false;
bonus_sparkle.setLoopRestartFrame(35);
transform_anim.visible = false;
mouseChildren = false;
stop();
ball.stop();
m_offsetY = 600;
}
public function stopAnim():void{
removeEventListener(Event.ENTER_FRAME, animateDrop);
removeEventListener(Event.ENTER_FRAME, animateExplosion);
}
public function startExplosion():void{
m_startTime = -1;
m_startX = x;
m_startY = y;
m_startDelay = (getTimer() + 100);
m_nextJerkAt = 0;
addEventListener(Event.ENTER_FRAME, animateExplosion);
}
public function setDropOffset(_arg1:int){
m_offsetY = _arg1;
}
public function animateDrop(_arg1:Event):void{
var _local2:int = getTimer();
if (_local2 < m_startDelay){
return;
};
if (m_startTime < 0){
m_startTime = _local2;
m_startX = x;
m_startY = y;
};
var _local3:Number = (_local2 - m_startTime);
var _local4:Number = (_local3 / 110);
var _local5:Number = (_local4 * 15);
x = ((((m_dx * _local3) / 30) + m_startX) + (_local5 * m_dcos));
y = ((((m_dy * _local3) / 30) + m_startY) - ((_local5 * m_dsin) - ((9 * _local4) * _local4)));
if (m_isZoom){
scaleX = (1 + (_local4 / 8));
scaleY = (1 + (_local4 / 8));
};
if (y > (m_offsetY - parent.y)){
removeEventListener(Event.ENTER_FRAME, animateDrop);
m_bubble.remove();
};
}
public function startDrop(_arg1:Number, _arg2:Number, _arg3:Boolean, _arg4:Boolean):void{
m_startTime = -1;
var _local5:* = (Math.random() * Math.PI);
m_dcos = Math.cos(_local5);
m_dsin = Math.sin(_local5);
m_dx = _arg1;
m_dy = _arg2;
m_isZoom = _arg4;
transform.colorTransform = new ColorTransform();
m_startDelay = (_arg3) ? (getTimer() + 150) : 0;
addEventListener(Event.ENTER_FRAME, animateDrop);
}
public function animateExplosion(_arg1:Event):void{
var _local4:*;
var _local2:int = getTimer();
if (_local2 < m_startDelay){
if (_local2 >= m_nextJerkAt){
m_nextJerkAt = (_local2 + 5);
_local4 = (16 * (1 - ((m_startDelay - _local2) / 100)));
x = ((m_startX + (Math.random() * _local4)) - (_local4 / 2));
y = ((m_startY + ((Math.random() * _local4) / 4)) - (_local4 / 8));
rotation = ((Math.random() * 14) - 7);
};
return;
};
if (m_startTime < 0){
m_startTime = _local2;
};
var _local3:uint = uint(Math.round((((_local2 - m_startTime) / ((1 / 30) * 1000)) + 1)));
if (_local3 > totalFrames){
removeEventListener(Event.ENTER_FRAME, animateExplosion);
m_bubble.remove();
return;
};
if (_local3 != m_lastFrame){
gotoAndStop(_local3);
m_lastFrame = _local3;
};
}
}
}//package junglebubble
Section 36
//BubbleLauncher (junglebubble.BubbleLauncher)
package junglebubble {
import flash.display.*;
import timing.*;
import math.*;
public class BubbleLauncher extends MovieClip {
private var m_reloadTime:int;
private var m_aimFn:Function;
private var m_fr:IFloat;
private var m_r:Number;
private var m_mouseX:int;
private var m_x:int;
private var m_y:int;
private var m_limit1:Number;
private var m_limit2:Number;
private var m_reload:int;
private var m_bubble:Bubble;
private var m_mouseY:int;
private var m_xoffset:int;
private var m_yoffset:int;
private var m_lastDeg:int;
public function BubbleLauncher(){
m_fr = new IFloat(0);
m_r = 0;
m_lastDeg = -1;
m_xoffset = 0;
m_yoffset = 0;
m_mouseX = 0;
m_mouseY = 0;
m_reloadTime = 15;
m_reload = 0;
m_limit1 = -3.1414;
m_limit2 = 0.0001;
gotoAndStop(2);
}
public function setReloadTime(_arg1:int):void{
m_reloadTime = _arg1;
m_reload = 0;
}
public function setPosition(_arg1:int, _arg2:int):void{
m_x = _arg1;
m_y = _arg2;
}
public function setBubble(_arg1:Bubble):void{
m_bubble = _arg1;
}
public function setRadLimits(_arg1:Number, _arg2:Number):void{
m_limit1 = _arg1;
m_limit2 = _arg2;
}
public function tick(_arg1:int, _arg2:int, _arg3:int):void{
m_reload--;
m_mouseX = (_arg2 + m_xoffset);
m_mouseY = (_arg3 + m_yoffset);
var _local4:* = m_r;
m_r = XPMath.atan2((Math.min((m_y - 30), m_mouseY) - m_y), (m_mouseX - m_x));
if (m_r < m_limit1){
m_r = m_limit1;
};
if (m_r > m_limit2){
m_r = m_limit2;
};
if (((!((m_aimFn == null))) && (!(((m_r - _local4) == 0))))){
m_aimFn(m_r, _local4);
};
m_fr.set(m_r);
}
public function getRad():Number{
return (m_r);
}
public function render(_arg1:int, _arg2:Number):void{
var _local3:int = int(((m_fr.value * (180 / Math.PI)) + 90));
if (_local3 != m_lastDeg){
rotation = _local3;
};
}
public function setAimChangeCallback(_arg1:Function):void{
m_aimFn = _arg1;
}
public function fire():Bubble{
if ((((m_reload <= 0)) && (!((m_bubble == null))))){
m_bubble.fire(m_r);
m_reload = m_reloadTime;
return (m_bubble);
};
return (null);
}
}
}//package junglebubble
Section 37
//BubbleListener (junglebubble.BubbleListener)
package junglebubble {
public interface BubbleListener {
function onNoMoreBubbles():void;
function onBonusBubbleCollected(_arg1:int):void;
function onBonusBubbleWasted():void;
function onBeforeLeaveBonusMode(_arg1:int, _arg2:Number):void;
function onLeaveBonusMode(_arg1:int, _arg2:Number):void;
function onBubbleOverflow():void;
function onBubbleRemove():void;
}
}//package junglebubble
Section 38
//Bushes (junglebubble.Bushes)
package junglebubble {
import flash.display.*;
import flash.events.*;
import localization.*;
import flash.utils.*;
public class Bushes extends MovieClip {
private var m_pieceTimer:uint;
private var m_game:Game;
var m_headStart:int;// = -1
private var m_bonusVal:RollingScore;
private var m_isSignAppear:Boolean;
private var m_playRange:Array;
private var m_isStatueComplete:Boolean;
private var m_isInitDone:Boolean;
private var m_lastFrame:int;
public var sign:MovieClip;
private var m_scoreVal:RollingScore;
private var m_isGameOver:Boolean;
private var m_sharedData:SharedData;
private var m_totalStatueBonus:int;
private var m_bonusPtr:int;
private var m_finalScoreVal:RollingScore;
private var m_startTime:int;
public function Bushes(){
addFrameScript(0, frame1);
m_totalStatueBonus = 0;
m_startTime = -1;
m_playRange = null;
m_isInitDone = false;
m_isStatueComplete = false;
sign.visible = false;
sign.stop();
visible = false;
gotoAndStop(19);
}
public function isStatueComplete():Boolean{
return (m_isStatueComplete);
}
private function dropNextPiece():void{
var _local1:int = m_sharedData.bonusLevel[m_bonusPtr];
var _local2:Number = m_sharedData.bonusLevelSubScore[m_bonusPtr];
m_bonusPtr++;
sign.platta.texts.gameover.statue.dropBlock(_local1, _local2);
if (m_bonusPtr < m_sharedData.bonusLevel.length){
m_pieceTimer = setTimeout(dropNextPiece, 2200);
} else {
m_isStatueComplete = true;
};
}
public function pullDown():void{
m_playRange = [1, 19];
m_startTime = -1;
visible = true;
addEventListener(Event.ENTER_FRAME, animateBushes);
}
public function pullApart():void{
m_playRange = [19, 40];
m_startTime = -1;
visible = true;
addEventListener(Event.ENTER_FRAME, animateBushes);
}
public function render():void{
if (m_isInitDone){
m_bonusVal.render();
m_scoreVal.render();
m_finalScoreVal.render();
};
}
public function setTimeLeftToAutoExit(_arg1:int):void{
if (!m_isGameOver){
sign.platta.texts.countdown_txt.text = I18n.getString("countdown_instructions", int((_arg1 / 1000)));
};
}
public function hideSign():void{
if (!m_isGameOver){
sign.platta.texts.instructions1.stop();
sign.platta.texts.instructions2.stop();
};
m_isSignAppear = false;
m_playRange = [20, 40];
m_startTime = -1;
sign.addEventListener(Event.ENTER_FRAME, animateSign);
}
public function tick():void{
if (m_isInitDone){
m_bonusVal.update();
m_scoreVal.update();
m_finalScoreVal.update();
};
}
private function animateSign(_arg1:Event):void{
var _local5:MovieClip;
var _local6:*;
var _local7:int;
var _local8:*;
var _local2:int = getTimer();
if (m_startTime < 0){
m_startTime = _local2;
m_lastFrame = 0;
if (((m_isGameOver) && (m_isSignAppear))){
_local5 = sign.platta.texts.gameover;
_local5.smoke.visible = false;
_local5.scorepop.visible = false;
_local6 = 0;
_local7 = 0;
while (_local7 < m_sharedData.bonusLevel.length) {
_local6 = (_local6 + m_sharedData.bonusLevel[_local7]);
_local7++;
};
if (m_sharedData.bonusLevel.length != 0){
_local6 = (_local6 / m_sharedData.bonusLevel.length);
};
if (_local6 > 2.5){
_local5.head.head.gotoAndStop(Monkey.MOOD_HAPPY);
} else {
if (_local6 > 2){
_local5.head.head.gotoAndStop(Monkey.MOOD_NEUTRAL);
} else {
if (_local6 > 1){
_local5.head.head.gotoAndStop(Monkey.MOOD_DISTRESSED);
} else {
_local5.head.head.gotoAndStop(Monkey.MOOD_CRYING);
};
};
};
_local5.head.addEventListener(Event.ENTER_FRAME, animateHead);
_local5.sign_title_txt.text = I18n.getString("game_over_title");
_local5.shot_bonus_txt.text = I18n.getString("end_shotbonus");
_local5.shot_bonus_val_txt.text = ("" + m_sharedData.shotBonus);
_local5.score_txt.text = I18n.getString("end_score");
_local5.score_val_txt.text = ("" + m_sharedData.score);
_local5.bonus_txt.text = I18n.getString("end_bonus");
_local5.bonus_val_txt.text = "0";
if (!m_sharedData.isShortMode){
_local5.time_bonus_txt.text = I18n.getString("end_time_bonus");
_local5.time_bonus_val_txt.text = ("" + m_sharedData.timeBonus);
} else {
_local5.open_msg_txt.text = I18n.getString("open_game_message");
};
_local5.total_score_txt.text = I18n.getString("end_final_score");
_local5.total_score_val_txt.text = ("" + (m_sharedData.score + m_sharedData.shotBonus));
m_scoreVal = new RollingScore(_local5.score_val_txt, m_sharedData.score, -1);
m_bonusVal = new RollingScore(_local5.bonus_val_txt, 0, -1);
_local8 = ((m_sharedData.score + m_sharedData.shotBonus) + m_sharedData.timeBonus);
m_finalScoreVal = new RollingScore(_local5.total_score_val_txt, _local8, -1);
m_bonusPtr = 0;
sign.platta.texts.gameover.statue.setGame(m_game);
sign.platta.texts.gameover.statue.setLandingCallback(pieceLanded);
if (!m_isStatueComplete){
if (m_sharedData.bonusLevel.length > 0){
sign.platta.texts.gameover.smoke.visible = false;
m_pieceTimer = setTimeout(dropNextPiece, 1000);
} else {
sign.platta.texts.gameover.statue.visible = false;
m_pieceTimer = setTimeout(showNoBonusSmoke, 1000);
};
};
m_isInitDone = true;
};
};
var _local3:Number = ((1 / 50) * 1000);
var _local4:uint = (m_playRange[0] + uint(Math.round((((_local2 - m_startTime) / _local3) + 1))));
if (_local4 >= m_playRange[1]){
_local4 = m_playRange[1];
sign.removeEventListener(Event.ENTER_FRAME, animateSign);
};
if (_local4 != m_lastFrame){
if (!sign.visible){
sign.visible = true;
visible = true;
};
sign.gotoAndStop(_local4);
m_lastFrame = _local4;
};
}
private function showNoBonusSmoke():void{
sign.platta.texts.gameover.smoke.visible = true;
sign.platta.texts.gameover.smoke.start();
}
public function hurryScoreCount():void{
m_isStatueComplete = true;
var _local1:* = sign.platta.texts.gameover;
_local1.statue.setState(m_sharedData.bonusLevel, m_sharedData.bonusLevelSubScore);
var _local2:int;
var _local3:int;
while (_local3 < m_sharedData.bonusLevel.length) {
_local2 = (_local2 + ((m_sharedData.bonusLevel[_local3] * 5000) + int((m_sharedData.bonusLevelSubScore[_local3] * 2500))));
_local3++;
};
_local1.scorepop.scoreflash.score_val_txt.text = ("" + _local2);
_local1.scorepop.start();
m_bonusVal.setValue(_local2);
m_finalScoreVal.setValue((((m_sharedData.score + m_sharedData.shotBonus) + m_sharedData.timeBonus) + _local2));
m_game.getSoundManager().get("counter").play(0.75, 0.8);
clearTimeout(m_pieceTimer);
}
private function animateBushes(_arg1:Event):void{
var _local2:int = getTimer();
if (m_startTime < 0){
cacheAsBitmap = false;
m_startTime = _local2;
m_lastFrame = 0;
};
var _local3:Number = ((1 / 50) * 1000);
var _local4:uint = (m_playRange[0] + uint(Math.round((((_local2 - m_startTime) / _local3) + 1))));
if (_local4 > m_playRange[1]){
removeEventListener(Event.ENTER_FRAME, animateBushes);
gotoAndStop(m_playRange[1]);
stop();
cacheAsBitmap = true;
return;
};
if (_local4 != m_lastFrame){
if (!visible){
visible = true;
};
gotoAndStop(_local4);
m_lastFrame = _local4;
};
}
private function pieceLanded(_arg1:int, _arg2:int, _arg3:Number):void{
var _local4:int = ((_arg2 * 5000) + int((_arg3 * 2500)));
m_totalStatueBonus = (m_totalStatueBonus + _local4);
m_game.getSoundManager().get("counter").play(0.75, 0.8);
m_bonusVal.setValue(m_totalStatueBonus);
m_finalScoreVal.setValue((((m_sharedData.score + m_sharedData.shotBonus) + m_sharedData.timeBonus) + m_totalStatueBonus));
sign.platta.texts.gameover.scorepop.scoreflash.score_val_txt.text = ("" + _local4);
sign.platta.texts.gameover.scorepop.start();
}
public function gotoNextInstructionSlide():Boolean{
var _local1:* = sign.platta.texts;
_local1.bottom_txt.text = I18n.getString("bottom_text_instructions_2");
_local1.instructions2.start();
_local1.instructions1.stop();
_local1.instructions1.visible = false;
return (false);
}
public function showSign(_arg1:Boolean):void{
m_playRange = [1, 20];
m_startTime = -1;
m_isGameOver = _arg1;
m_isSignAppear = true;
if (_arg1){
sign.platta.texts.gotoAndStop(4);
} else {
sign.platta.texts.sign_title_txt.text = I18n.getString("title_instructions");
sign.platta.texts.countdown_txt.text = I18n.getString("countdown_instructions", 10);
sign.platta.texts.bottom_txt.text = I18n.getString("bottom_text_instructions_1");
sign.platta.texts.instructions1.start();
sign.platta.texts.instructions2.visible = false;
};
sign.addEventListener(Event.ENTER_FRAME, animateSign);
}
function frame1(){
}
private function animateHead(_arg1:Event):void{
var _local2:int = getTimer();
if (m_headStart < 0){
m_headStart = _local2;
};
sign.platta.texts.gameover.head.rotation = (Math.sin(((_local2 - m_headStart) / 100)) * 20);
}
public function setGame(_arg1:Game){
m_sharedData = _arg1.getSharedData();
m_game = _arg1;
}
}
}//package junglebubble
Section 39
//CompositeBubble (junglebubble.CompositeBubble)
package junglebubble {
import math.*;
public class CompositeBubble {
private var m_rotationS:Number;
private var m_right:int;
private var m_rotation:Number;
private var m_left:int;
private var m_exploding:Boolean;
private var m_flipBlock:int;
private var m_bubble:Array;
private var m_explodeCountdown:int;
private var m_dx:Number;
private var m_dy:Number;
private var m_x:Number;
private var m_y:Number;
public var group:int;
public function CompositeBubble(){
group = -1;
m_flipBlock = 0;
m_rotation = 0;
m_bubble = new Array();
m_x = 0;
m_y = 0;
m_dx = 3;
m_dy = 1;
m_left = 48;
m_right = (250 - 48);
m_rotationS = 0;
m_explodeCountdown = -1;
m_exploding = false;
}
public function setBubbleOffset(_arg1:int, _arg2:Number, _arg3:Number):void{
m_bubble[_arg1][1] = _arg2;
m_bubble[_arg1][2] = _arg3;
}
public function addBubble(_arg1:Bubble, _arg2:Number, _arg3:Number):void{
var _local4:* = 1;
m_bubble.push([_arg1, _arg2, _arg3]);
if (_arg1.getX() > m_x){
_local4 = -1;
};
if (m_bubble.length == 2){
m_rotationS = (_local4 * 0.7);
};
if (m_bubble.length == 3){
m_rotationS = (_local4 * 0.5);
m_explodeCountdown = 8;
};
_arg1.setPosition(m_x, m_y);
}
public function getY():int{
return (m_y);
}
public function render(_arg1:int, _arg2:Number):void{
var _local3:int;
while (_local3 < m_bubble.length) {
m_bubble[_local3][0].render(_arg1, _arg2);
_local3++;
};
}
public function setWall(_arg1:int, _arg2:int):void{
m_left = _arg1;
m_right = _arg2;
}
public function exploding():Boolean{
return (m_exploding);
}
public function aboutToExplode():Boolean{
return (!((m_explodeCountdown == -1)));
}
public function setPosition(_arg1:int, _arg2:int):void{
m_x = _arg1;
m_y = _arg2;
}
public function tick(_arg1:int):void{
var _local5:Array;
var _local6:*;
var _local7:*;
if (m_exploding){
return;
};
if (m_flipBlock != 0){
m_flipBlock--;
};
if (((!(m_exploding)) && (!((m_explodeCountdown == -1))))){
if (--m_explodeCountdown == 0){
m_exploding = true;
};
};
m_x = (m_x + m_dx);
m_y = (m_y + m_dy);
var _local2:* = XPMath.sin(m_rotation);
var _local3:* = XPMath.cos(m_rotation);
var _local4:int;
while (_local4 < m_bubble.length) {
_local5 = m_bubble[_local4];
_local6 = (((_local3 * _local5[1]) + (_local2 * _local5[2])) + m_x);
_local7 = (((_local2 * _local5[1]) - (_local3 * _local5[2])) + m_y);
_local5[0].setTickedPosition(_local6, _local7);
if ((((m_flipBlock == 0)) && (((_local6 - 19) > m_right)))){
m_dx = -(m_dx);
m_flipBlock = 20;
m_rotationS = (m_rotationS * 0.9);
};
if ((((m_flipBlock == 0)) && (((_local6 + 19) < m_left)))){
m_dx = -(m_dx);
m_flipBlock = 20;
m_rotationS = (m_rotationS * 0.9);
};
_local4++;
};
m_rotation = (m_rotation + m_rotationS);
m_rotationS = (m_rotationS * 0.94);
m_dx = (m_dx * 0.993);
m_dy = (m_dy * 0.993);
}
public function getMoveX():Number{
return (m_dx);
}
public function getDebugData():Array{
return ([m_x, m_y, m_dx, m_dy, m_rotation, m_rotationS]);
}
public function getNumBubbles():int{
return (m_bubble.length);
}
public function setMovement(_arg1:Number, _arg2:Number):void{
m_dx = _arg1;
m_dy = _arg2;
}
public function getMoveY():Number{
return (m_dy);
}
}
}//package junglebubble
Section 40
//Game (junglebubble.Game)
package junglebubble {
import sfx.*;
import flash.display.*;
public interface Game {
function leaveState():void;
function getSharedData():SharedData;
function isLowPerformanceMode():Boolean;
function leaveGame():void;
function sendData(_arg1:String):void;
function getSoundManager():SoundManager;
function getDisplayObjectContainer():DisplayObjectContainer;
function hideBack():void;
function destroy():void;
function toggleSound():void;
function finalScore(_arg1:int):void;
function getMusicManager():SoundManager;
}
}//package junglebubble
Section 41
//GameAssembly (junglebubble.GameAssembly)
package junglebubble {
import flash.display.*;
import flash.text.*;
import timing.*;
import flash.geom.*;
import anim.*;
import localization.*;
import util.*;
public class GameAssembly extends MovieClip {
public var monkey_smoke:smoke_anim;
private var m_frameBufCache:Bitmap;
private var m_lowPerformanceMode:Boolean;
var renderCount:int;
private var m_bonusVal:RollingScore;
public var bonus_bell:MovieClip;
private var m_mineTick:int;
private var m_overTick:int;
private var m_scrollDir:int;
public var bonus_val_txt:TextField;
public var bubble_launcher_obj_shadow:MovieClip;
public var rep_over:MovieClip;
public var lever_normal:MovieClip;
public var score_txt:TextField;
public var monkey_jumper:Monkey;
public var bucket_under:MovieClip;
public var bonus_txt:TextField;
public var bonussign:bonus_sign;
public var bonus_meter:NextBonusMeter;
public var rock_base:MovieClip;
public var monkey_under:Monkey;
private var m_isInMine:Boolean;
private var m_yoffset:IFloat;
public var aim_over:aim_cursor;
public var lever_underworld:MovieClip;
public var bubble_launcher_under:bubblelauncherunder;
public var big_explosion:dynamite_explosion;
private var m_scrollAnim:Interpolator;
public var bomb_launcher:bomblauncher;
public var bubble_base:MovieClip;
public var score_val_txt:TextField;
public var lamp_under:MovieClip;
public var rep_under:MovieClip;
public var items:MovieClip;
private var m_scoreVal:RollingScore;
public var under_bubble_0:MovieClip;
public var under_bubble_1:MovieClip;
public var under_bubble_2:MovieClip;
public var under_bubble_3:MovieClip;
public var under_bubble_4:MovieClip;
private var m_normalQuality:String;
public var bonus_intro_sign:BonusIntroSign;
public var parrot_over:parrot;
public var time_val_txt:TextField;
public var monkey_over:Monkey;
public var statue:statue_animation;
public var top_layer:MovieClip;
public var bonus_time:BonusClock;
public var parrot_under:MovieClip;
public var bubble_launcher:bubbleshooter;
public var bubble_frame:MovieClip;
public var time_txt:TextField;
public function GameAssembly(){
m_overTick = 0;
m_isInMine = false;
m_lowPerformanceMode = false;
bonus_txt.text = I18n.getString("bonus_label");
bonus_val_txt.text = "";
score_txt.text = I18n.getString("score_label");
score_val_txt.text = "";
time_txt.text = I18n.getString("time_label");
time_val_txt.text = "";
items.stop();
bonus_time.gotoAndStop(1);
bonus_bell.gotoAndStop(1);
monkey_jumper.visible = false;
m_scrollDir = 0;
m_scoreVal = new RollingScore(score_val_txt, 0, -1);
m_bonusVal = new RollingScore(bonus_val_txt, 500000, -1);
under_bubble_0.visible = false;
under_bubble_1.visible = false;
under_bubble_2.visible = false;
under_bubble_3.visible = false;
under_bubble_4.visible = false;
rock_base.scrollRect = new Rectangle(0, 0, 754, 620);
bubble_launcher_under.x = int(bomb_launcher.x);
bubble_launcher_under.y = int(bomb_launcher.y);
bubble_launcher_under.setPosition(508, 541);
m_frameBufCache = new Bitmap(new BitmapData(754, (620 * 2), false, 0x666666));
}
public function doScrollDown():void{
var _local1:* = 0;
if (m_scrollAnim.update()){
_local1 = m_scrollAnim.getValue();
m_scrollAnim = undefined;
m_scrollDir = 0;
endUseSnapshot();
y = _local1;
monkey_over.reset();
monkey_over.visible = false;
m_isInMine = true;
m_mineTick = 0;
} else {
_local1 = m_scrollAnim.getValue();
};
m_yoffset.set(_local1);
}
public function doScrollUp():void{
var _local1:* = 0;
if (m_scrollAnim.update()){
_local1 = m_scrollAnim.getValue();
m_scrollAnim = undefined;
endUseSnapshot();
m_isInMine = false;
m_scrollDir = 0;
y = _local1;
monkey_under.reset();
m_overTick = 0;
} else {
_local1 = m_scrollAnim.getValue();
};
m_yoffset.set(_local1);
}
public function scrollDown():void{
monkey_jumper.visible = false;
monkey_over.visible = false;
useSnapshot();
m_frameBufCache.y = 0;
m_yoffset = new IFloat(m_frameBufCache.y);
m_scrollDir = 1;
m_scrollAnim = new EaseOutQuadInterpolator(m_frameBufCache.y, -620, 25);
}
public function setBonusScoreTime(_arg1:int, _arg2:int, _arg3:int):void{
var _local4:int = int(((_arg3 / GameBase.TICK_RATE) * 1000));
var _local5:String = Numbers.asTime(_local4, false, true);
if (time_val_txt.text != _local5){
time_val_txt.text = _local5;
};
m_scoreVal.setValue(_arg2);
m_bonusVal.setValue(_arg1);
}
public function scrollUp():void{
useSnapshot();
m_frameBufCache.y = -620;
m_yoffset = new IFloat(m_frameBufCache.y);
m_scrollDir = -1;
m_scrollAnim = new EaseOutQuadInterpolator(m_frameBufCache.y, 0, 8);
}
public function hasPoorFrameRate():void{
if (!m_lowPerformanceMode){
m_lowPerformanceMode = true;
};
}
public function useSnapshot():void{
m_frameBufCache.bitmapData.draw(this);
m_frameBufCache.visible = true;
visible = false;
m_normalQuality = stage.quality;
stage.quality = "low";
parent.addChild(m_frameBufCache);
}
public function endUseSnapshot():void{
parent.removeChild(m_frameBufCache);
stage.quality = m_normalQuality;
visible = true;
}
public function tick(_arg1:int):void{
m_bonusVal.update();
m_scoreVal.update();
if (m_scrollDir < 0){
doScrollUp();
} else {
if (m_scrollDir > 0){
doScrollDown();
};
};
if (m_isInMine){
m_mineTick++;
} else {
m_overTick++;
};
}
public function render(_arg1:int, _arg2:Number):void{
var _local3:*;
var _local4:*;
var _local5:*;
m_bonusVal.render();
m_scoreVal.render();
if (m_scrollDir != 0){
m_frameBufCache.y = m_yoffset.value;
};
if (((m_isInMine) && (!(m_lowPerformanceMode)))){
_local4 = (180 / Math.PI);
_local3 = ((m_mineTick + _arg2) / 10);
_local5 = (renderCount % 3);
if (_local5 == 0){
lamp_under.rotation = ((_local4 * Math.sin((1.5 + _local3))) * 0.015);
} else {
if (_local5 == 1){
parrot_under.rotation = ((_local4 * Math.sin(_local3)) * 0.05);
} else {
if (_local5 == 2){
};
};
};
};
if (((!(m_isInMine)) && (!(m_lowPerformanceMode)))){
_local4 = (180 / Math.PI);
_local3 = ((m_overTick + _arg2) / 10);
_local5 = (renderCount % 3);
if (_local5 == 0){
parrot_over.rotation = ((_local4 * Math.sin(_local3)) * 0.05);
};
};
renderCount++;
}
}
}//package junglebubble
Section 42
//GameBase (junglebubble.GameBase)
package junglebubble {
import sfx.*;
import flash.display.*;
import timing.*;
import flash.events.*;
import flash.geom.*;
import localization.*;
import util.*;
import flash.system.*;
import flash.filters.*;
import flash.external.*;
public class GameBase extends MovieClip implements Game, Timeable {
private var m_hasDecreasedQuality:Boolean;
private var m_timer:Timer;
private var m_isSoundEnabled:Boolean;
private var m_gameCtrl:MovieClip;
private var m_nextStateIdx:int;
private var m_states:Array;
private var m_soundMgr:SoundManager;
private var m_stateLocalTick:int;
private var m_hasCalledEnd:Boolean;
private var m_isMusicEnabled:Boolean;
private var m_lastKeys:Array;
private var m_sharedData:SharedData;
private var m_musicMgr:SoundManager;
private var m_stats:Stats;
private var m_hasCalledQuit:Boolean;
private var m_frameBuf:Bitmap;
private var m_performance:Performance;
private var m_fpsText:String;
private var m_mouseX:int;
private var m_isFirstEnterFrame:Boolean;
private var m_basePlate:MovieClip;
private var m_mouseY:int;
private var m_prevQuality:String;
private var m_fpsNextAt:int;
private var m_stateIdx:int;
private static const AUTO_VERSION:String = "BUILD_[55]_121e2dd8a0a";
public static const TICK_RATE:int = 30;
public static const WIDTH:int = 754;
public static const HEIGHT:int = 600;
public static const PROTOCOL_VERSION:String = "32";
public static const DEBUG_MODE:Boolean = true;
public function GameBase(){
m_mouseX = 0;
m_mouseY = 0;
m_lastKeys = new Array(10);
m_isFirstEnterFrame = true;
addEventListener(Event.ENTER_FRAME, enterFrame);
}
public function enterFrame(_arg1:Event):void{
var _loc2_:MovieClip;
var _loc3_:int;
if (m_isFirstEnterFrame){
if (init()){
m_isFirstEnterFrame = false;
} else {
_loc2_ = new ErrorSymbol();
_loc2_.x = (754 / 2);
_loc2_.y = (600 / 2);
addChild(_loc2_);
removeEventListener(Event.ENTER_FRAME, enterFrame);
};
return;
};
if (m_nextStateIdx != m_stateIdx){
_loc3_ = m_stateIdx;
m_frameBuf.bitmapData.draw(getDisplayObjectContainer());
m_frameBuf.visible = true;
if (m_stateIdx != -1){
m_states[m_stateIdx].disengage();
};
m_stateLocalTick = 0;
m_stateIdx = m_nextStateIdx;
m_states[m_stateIdx].engage();
stage.focus = this;
if (m_hasDecreasedQuality){
m_states[m_stateIdx].onPoorFrameRate();
};
m_gameCtrl.sound.visible = false;
m_gameCtrl.hit_sound.visible = false;
m_gameCtrl.music.visible = false;
m_gameCtrl.hit_music.visible = false;
if (m_states[m_stateIdx].hasSoundButton()){
m_gameCtrl.sound.visible = true;
m_gameCtrl.hit_sound.visible = true;
m_gameCtrl.music.visible = true;
m_gameCtrl.hit_music.visible = true;
};
m_gameCtrl.exit.visible = false;
m_gameCtrl.hit_exit.visible = false;
if (m_states[m_stateIdx].hasExitButton()){
m_gameCtrl.exit.visible = true;
m_gameCtrl.hit_exit.visible = true;
};
if ((((_loc3_ == -1)) && (!((m_stateIdx == -1))))){
stage.addEventListener(KeyboardEvent.KEY_UP, reportKeyUp);
addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
addEventListener(MouseEvent.MOUSE_UP, mouseUp);
};
};
if (m_stateIdx != -1){
m_states[m_stateIdx].onMouseMove(m_mouseX, m_mouseY);
};
m_timer.advanceTime();
m_soundMgr.update();
m_musicMgr.update();
m_performance.frameUpdated();
}
public function reportKeyUp(_arg1:KeyboardEvent):void{
var _loc2_:int;
var _loc4_:int;
var _loc9_:*;
var _loc10_:*;
var _loc3_:* = _arg1.keyCode;
_loc2_ = int((m_lastKeys.length - 1));
while (_loc2_ > 0) {
m_lastKeys[_loc2_] = m_lastKeys[(_loc2_ - 1)];
_loc2_--;
};
m_lastKeys[0] = _loc3_;
var _loc5_:* = [83, 85, 84, 78, 79, 80, 71, 78, 73, 75];
var _loc6_:* = true;
var _loc7_:* = [68, 76, 73, 85, 66, -1, -1, -1, -1, -1];
var _loc8_:* = true;
_loc2_ = 0;
_loc4_ = int(m_lastKeys.length);
while (((((_loc8_) || (_loc6_))) && ((_loc2_ < _loc4_)))) {
_loc9_ = m_lastKeys[_loc2_];
_loc10_ = _loc5_[_loc2_];
if (((!((_loc9_ == _loc10_))) && (!((_loc10_ == -1))))){
_loc6_ = false;
};
_loc10_ = _loc7_[_loc2_];
if (((!((_loc9_ == _loc10_))) && (!((_loc10_ == -1))))){
_loc8_ = false;
};
_loc2_++;
};
if (_loc8_){
if (m_stats == null){
m_stats = new Stats();
m_gameCtrl.addChild(m_stats);
} else {
m_stats.visible = !(m_stats.visible);
m_gameCtrl.ver_txt.visible = m_stats.visible;
};
};
if (_loc6_){
m_gameCtrl.full.visible = true;
m_gameCtrl.hit_full.visible = true;
};
}
public function onClickToggleMusic(_arg1:MouseEvent):void{
m_gameCtrl.music.icon.gotoAndStop((m_isMusicEnabled) ? 1 : 2);
m_isMusicEnabled = !(m_isMusicEnabled);
m_musicMgr.setVolume((m_isMusicEnabled) ? 1 : 0);
}
private function init():Boolean{
var data:Object;
var prop:XML;
var gd:String;
m_hasCalledEnd = false;
m_hasCalledQuit = false;
m_isSoundEnabled = true;
m_isMusicEnabled = true;
m_performance = new Performance(40);
m_performance.addQualityFeedbackListener(onPoorFrameRate);
m_stateLocalTick = 0;
m_stateIdx = -1;
m_nextStateIdx = 0;
stage.frameRate = 200;
var i:* = 0;
i = (i + 1);
i = (i + 1);
i = (i + 1);
m_states = [new StateIntro(this, i), new StateGameMode(this, i), new StateGameOver(this, i)];
m_sharedData = new SharedData();
m_timer = new Timer(this, TICK_RATE);
if (DEBUG_MODE){
gd = "";
gd = "<gamedata gametype=\"deluxe\" timelimit=\"300\" colors=\"3\"";
data = {message:gd, success:true};
} else {
if (!(ExternalInterface.available)){
return (false);
};
data = ExternalInterface.call("getGameData");
};
if ((((data == null)) || (!(data.success)))){
return (false);
};
var x:XML = new XML(data.message);
var build:* = AUTO_VERSION.split("_")[1];
var buildDateHex:* = AUTO_VERSION.split("_")[2];
var d:* = parseInt(buildDateHex, 16);
m_sharedData.build = parseInt(build.substring(1, (build.length - 1)));
m_sharedData.buildDate = new Date();
m_sharedData.buildDate.setTime(d);
m_sharedData.globalSeed = int(x.@randomseed);
m_sharedData.isShortMode = (x.@short == "true");
if (DEBUG_MODE){
m_sharedData.globalSeed = int((Math.random() * 2147483647));
};
var loc:Object = new Object();
for each (prop in x.children()) {
loc[prop.@id] = prop.text();
};
I18n.init(loc);
m_gameCtrl = new GameControl();
m_gameCtrl.hit_music.addEventListener(MouseEvent.CLICK, onClickToggleMusic);
m_gameCtrl.hit_music.addEventListener(MouseEvent.ROLL_OVER, function (_arg1:MouseEvent){
m_gameCtrl.music.filters = [new GlowFilter(0xFFFF00, 1, 5, 5, 2, 1, false, false)];
});
m_gameCtrl.hit_music.addEventListener(MouseEvent.ROLL_OUT, function (_arg1:MouseEvent){
m_gameCtrl.music.filters = [];
});
m_gameCtrl.music.icon.gotoAndStop(2);
m_gameCtrl.music.buttonMode = true;
m_gameCtrl.music.useHandCursor = true;
m_gameCtrl.music.mouseChildren = false;
m_gameCtrl.hit_sound.addEventListener(MouseEvent.CLICK, onClickToggleSound);
m_gameCtrl.hit_sound.addEventListener(MouseEvent.ROLL_OVER, function (_arg1:MouseEvent){
m_gameCtrl.sound.filters = [new GlowFilter(0xFFFF00, 1, 5, 5, 2, 1, false, false)];
});
m_gameCtrl.hit_sound.addEventListener(MouseEvent.ROLL_OUT, function (_arg1:MouseEvent){
m_gameCtrl.sound.filters = [];
});
m_gameCtrl.sound.icon.gotoAndStop(2);
m_gameCtrl.sound.buttonMode = true;
m_gameCtrl.sound.useHandCursor = true;
m_gameCtrl.sound.mouseChildren = false;
m_gameCtrl.hit_full.addEventListener(MouseEvent.CLICK, onFullscreen);
m_gameCtrl.hit_full.addEventListener(MouseEvent.ROLL_OVER, function (_arg1:MouseEvent){
m_gameCtrl.full.filters = [new GlowFilter(0xFFFF00, 1, 5, 5, 2, 1, false, false)];
});
m_gameCtrl.hit_full.addEventListener(MouseEvent.ROLL_OUT, function (_arg1:MouseEvent){
m_gameCtrl.full.filters = [];
});
m_gameCtrl.full.txt.text = "Fullscreen";
m_gameCtrl.full.buttonMode = true;
m_gameCtrl.full.mouseChildren = false;
m_gameCtrl.full.useHandCursor = true;
m_gameCtrl.full.visible = false;
m_gameCtrl.hit_full.visible = false;
m_gameCtrl.hit_exit.addEventListener(MouseEvent.CLICK, onClickExit);
m_gameCtrl.hit_exit.addEventListener(MouseEvent.ROLL_OVER, function (_arg1:MouseEvent){
m_gameCtrl.exit.filters = [new GlowFilter(0xFFFF00, 1, 5, 5, 2, 1, false, false)];
});
m_gameCtrl.hit_exit.addEventListener(MouseEvent.ROLL_OUT, function (_arg1:MouseEvent){
m_gameCtrl.exit.filters = [];
});
m_gameCtrl.exit.txt.text = I18n.getString("exit_btn");
m_gameCtrl.exit.buttonMode = true;
m_gameCtrl.exit.mouseChildren = false;
m_gameCtrl.exit.useHandCursor = true;
m_gameCtrl.ver_txt.visible = false;
m_gameCtrl.visible = true;
m_frameBuf = new Bitmap(new BitmapData(WIDTH, HEIGHT, false, 0));
addChild(m_frameBuf);
m_basePlate = new MovieClip();
m_basePlate.scrollRect = new Rectangle(0, 0, WIDTH, HEIGHT);
m_basePlate.mouseChildren = false;
addChild(m_basePlate);
addChild(m_gameCtrl);
m_fpsNextAt = -1;
if (DEBUG_MODE){
m_gameCtrl.ver_txt.visible = false;
};
m_soundMgr = new SoundManager();
m_musicMgr = new SoundManager();
return (true);
}
public function mouseMove(_arg1:MouseEvent):void{
m_mouseX = _arg1.stageX;
m_mouseY = _arg1.stageY;
}
public function tick(_arg1:int):void{
m_sharedData.globalTick = _arg1;
if (m_stateIdx != -1){
m_states[m_stateIdx].tick(m_stateLocalTick++);
};
}
public function mouseUp(_arg1:MouseEvent):void{
if (m_mouseY < 530){
m_states[m_stateIdx].onMouseUp();
};
}
public function leaveState():void{
switch (m_stateIdx){
case 0:
fscommand("gameStart", "");
m_gameCtrl.ver_txt.text = ((((("proto=" + PROTOCOL_VERSION) + ", build=") + m_sharedData.build) + ", build time=") + m_sharedData.buildDate);
sendData((((((("33,0," + PROTOCOL_VERSION) + ",") + m_sharedData.build) + ",") + m_sharedData.buildDate.getTime()) + ",0=0"));
m_nextStateIdx = 1;
};
}
public function getSoundManager():SoundManager{
return (m_soundMgr);
}
public function render(_arg1:int, _arg2:Number):void{
if (m_stateIdx != -1){
m_states[m_stateIdx].render(m_stateLocalTick, _arg2);
};
}
public function destroy():void{
if (((m_hasCalledEnd) && (!(m_hasCalledQuit)))){
m_states[m_stateIdx].disengage();
if (!(DEBUG_MODE)){
fscommand("gameQuit", "");
};
m_hasCalledQuit = true;
};
}
public function toggleSound():void{
m_gameCtrl.sound.icon.gotoAndStop((m_isSoundEnabled) ? 1 : 2);
m_isSoundEnabled = !(m_isSoundEnabled);
m_soundMgr.setVolume((m_isSoundEnabled) ? 1 : 0);
}
public function getSharedData():SharedData{
return (m_sharedData);
}
public function getMusicManager():SoundManager{
return (m_musicMgr);
}
public function onClickExit(_arg1:MouseEvent):void{
if (m_stateIdx != -1){
m_states[m_stateIdx].onGameQuitButton();
};
m_nextStateIdx = 2;
}
public function hideBack():void{
m_frameBuf.visible = false;
}
public function finalScore(_arg1:int):void{
if (((!(m_hasCalledQuit)) && (!(m_hasCalledEnd)))){
if (!(DEBUG_MODE)){
fscommand("gameEnd", ("" + _arg1));
};
m_hasCalledEnd = true;
};
}
public function onFullscreen(_arg1:Event):void{
stage.displayState = "fullScreen";
stage.quality = "low";
}
public function onPoorFrameRate(_arg1:Number):void{
if (!(m_hasDecreasedQuality)){
if (m_stateIdx != -1){
m_states[m_stateIdx].onPoorFrameRate();
};
m_hasDecreasedQuality = true;
stage.quality = "low";
};
}
public function getDisplayObjectContainer():DisplayObjectContainer{
return (m_basePlate);
}
public function isLowPerformanceMode():Boolean{
return (m_hasDecreasedQuality);
}
public function mouseDown(_arg1:MouseEvent):void{
if (m_mouseY < 530){
m_states[m_stateIdx].onMouseDown();
};
}
public function sendData(_arg1:String):void{
if (!(DEBUG_MODE)){
ExternalInterface.call("playData", _arg1);
};
}
public function onClickToggleSound(_arg1:MouseEvent):void{
toggleSound();
}
public function leaveGame():void{
m_nextStateIdx = 2;
}
}
}//package junglebubble
Section 43
//GameControl (junglebubble.GameControl)
package junglebubble {
import flash.display.*;
import flash.text.*;
public class GameControl extends MovieClip {
public var exit:MovieClip;
public var hit_sound:MovieClip;
public var music:MovieClip;
public var sound:MovieClip;
public var ver_txt:TextField;
public var full:MovieClip;
public var hit_exit:MovieClip;
public var hit_music:MovieClip;
public var hit_full:MovieClip;
}
}//package junglebubble
Section 44
//JungleSounds (junglebubble.JungleSounds)
package junglebubble {
import sfx.*;
import flash.utils.*;
public class JungleSounds {
private var m_soundMgr:SoundManager;
private var m_interval:Array;
private var m_lastPlayed:Array;
public function JungleSounds(_arg1:SoundManager){
m_soundMgr = _arg1;
reset();
}
public function update():void{
var _local3:String;
var _local4:Number;
var _local5:Number;
var _local1:int = getTimer();
var _local2:int = m_lastPlayed.length;
while (_local2--) {
if (_local1 > m_lastPlayed[_local2]){
_local3 = ("ambience" + _local2);
_local4 = ((randInt(1000) / 500) - 1);
_local5 = ((randInt(1000) / 3000) + 0.15);
m_soundMgr.get(_local3).play(_local5, _local4);
if (randInt(100) < 10){
m_soundMgr.get(_local3).fadeToAndStop(0, (randInt(500) + 1200));
} else {
if (randInt(100) < 8){
m_soundMgr.get(_local3).setVolume(0);
m_soundMgr.get(_local3).fadeTo(_local5, (randInt(500) + 1200));
};
};
m_lastPlayed[_local2] = ((_local1 + randInt(m_interval[_local2])) + 4000);
};
};
}
private function randInt(_arg1:int):int{
return ((int((Math.random() * (1 << 24))) % _arg1));
}
public function reset():void{
var _local1:int = getTimer();
m_interval = [17000, 17000, 20000, 25000];
m_lastPlayed = [(randInt(m_interval[0]) + _local1), (randInt(m_interval[1]) + _local1), (randInt(m_interval[2]) + _local1), (randInt(m_interval[3]) + _local1)];
}
}
}//package junglebubble
Section 45
//Monkey (junglebubble.Monkey)
package junglebubble {
import flash.display.*;
public class Monkey extends MovieClip {
private var m_prevNum:int;
private var m_prev:int;
public var head:MovieClip;
public var body:MovieClip;
private var m_adjustDelay:int;
private var m_feeling:int;
private var m_feelingHist:Array;
public var helmet:MovieClip;
public static var MOOD_CONCENTRATED = 3;
public static var MOOD_CRYING = 1;
public static var MOOD_DISTRESSED = 2;
public static var MOOD_HAPPY = 5;
public static var MOOD_NEUTRAL = 4;
public function Monkey(){
m_feelingHist = new Array();
gotoAndStop(1);
readyNormal();
}
public function update(_arg1:int):void{
if ((_arg1 % 4) == 0){
if (m_feeling > 0){
m_feeling--;
};
if (m_feeling < 0){
m_feeling++;
};
};
if (m_feelingHist.length > 10){
m_feelingHist.shift();
};
m_feelingHist.push(m_feeling);
var _local2:* = 0;
var _local3:int;
while (_local3 < m_feelingHist.length) {
_local2 = (_local2 + m_feelingHist[_local3]);
_local3++;
};
_local2 = (_local2 / m_feelingHist.length);
if (_local2 >= 40){
setMood(MOOD_HAPPY);
} else {
if ((((_local2 < 40)) && ((_local2 >= 0)))){
setMood(MOOD_NEUTRAL);
} else {
if ((((_local2 < 0)) && ((_local2 >= -10)))){
setMood(MOOD_CONCENTRATED);
} else {
if ((((_local2 < -10)) && ((_local2 >= -40)))){
setMood(MOOD_DISTRESSED);
} else {
if (_local2 < -40){
setMood(MOOD_CRYING);
};
};
};
};
};
}
public function reset():void{
gotoAndStop(1);
}
public function setFrame(_arg1:int):void{
if (body.currentFrame != _arg1){
body.gotoAndStop(_arg1);
};
}
public function setHelmet(_arg1:Boolean):void{
helmet.visible = _arg1;
}
public function jumpDown():void{
gotoAndStop(3);
}
public function readyNormal():void{
body.stop();
m_feeling = 0;
setMood(MOOD_NEUTRAL);
helmet.visible = false;
visible = true;
}
public function jumpUp():void{
gotoAndStop(4);
}
public function setMood(_arg1:uint):void{
if ((((_arg1 >= MOOD_CRYING)) && ((_arg1 <= MOOD_HAPPY)))){
if (head.currentFrame != _arg1){
head.gotoAndStop(_arg1);
};
};
}
public function feeling(_arg1:int):void{
m_feeling = (m_feeling + _arg1);
}
}
}//package junglebubble
Section 46
//NextBonusMeter (junglebubble.NextBonusMeter)
package junglebubble {
import flash.display.*;
public class NextBonusMeter extends MovieClip {
private var m_valuei:int;
private var m_targetValue:int;
private var m_currentValue:int;
private var m_value:Number;
public function NextBonusMeter(){
stop();
m_value = 0;
m_currentValue = 0;
m_valuei = 0;
m_targetValue = 0;
}
public function setValue(_arg1:Number):void{
m_targetValue = int((100 * _arg1));
}
public function render():void{
if (m_currentValue != m_valuei){
m_currentValue = m_valuei;
gotoAndStop(m_currentValue);
};
}
public function tick():void{
if (m_value > m_targetValue){
m_value = (m_value - ((m_value - m_targetValue) * 0.1667));
m_valuei = int(Math.round(m_value));
} else {
m_value = (m_value + ((m_targetValue - m_value) * 0.1667));
m_valuei = int(Math.round(m_value));
};
}
}
}//package junglebubble
Section 47
//Rock (junglebubble.Rock)
package junglebubble {
import flash.display.*;
public class Rock {
public var posX:int;
public var posY:int;
private var m_wasBlasted:Boolean;
private var m_blastCountDown:int;
private var m_color:int;
public var arrayX:int;
public var arrayY:int;
public var rock:RockClip;
private var m_effects:DisplayObjectContainer;
public var isHidden:Boolean;
public function Rock(_arg1:DisplayObjectContainer){
rock = new RockClip(this);
m_effects = _arg1;
m_blastCountDown = 0;
}
public function update():void{
var _local1:*;
if (((isHidden) || (!(m_wasBlasted)))){
return;
};
if (m_blastCountDown == 0){
isHidden = true;
if (rock.parent){
_local1 = new RockExplosion2();
m_effects.addChild(_local1);
_local1.setDestroyAfterPlay(true);
_local1.x = (posX + rock.parent.x);
_local1.y = (posY + rock.parent.y);
_local1.start();
rock.parent.removeChild(rock);
};
m_wasBlasted = false;
} else {
if (m_blastCountDown > 0){
rock.x = ((posX + (Math.random() * 4)) - 2);
rock.y = ((posY + (Math.random() * 4)) - 2);
m_blastCountDown--;
};
};
}
public function reset(_arg1:int, _arg2:int, _arg3:int):void{
m_blastCountDown = -1;
this.arrayX = _arg1;
this.arrayY = _arg2;
isHidden = false;
m_color = _arg3;
m_wasBlasted = false;
rock.gotoAndStop((m_color + 1));
}
public function cycle():void{
if (m_color == 2){
return;
};
m_color++;
m_color = (m_color % 2);
rock.gotoAndStop((m_color + 1));
}
public function getColor():int{
return (m_color);
}
public function blast(){
m_wasBlasted = true;
posX = rock.x;
posY = rock.y;
m_blastCountDown = 20;
}
public function fall():void{
var _local1:*;
m_wasBlasted = true;
isHidden = true;
if (rock.parent){
_local1 = new RockClip(null);
_local1.gotoAndStop(rock.currentFrame);
_local1.x = rock.x;
_local1.y = rock.y;
_local1.fall();
rock.parent.addChild(_local1);
rock.parent.removeChild(rock);
};
}
}
}//package junglebubble
Section 48
//RockBox (junglebubble.RockBox)
package junglebubble {
import flash.display.*;
import timing.*;
import geom.*;
import math.*;
public class RockBox extends MovieClip {
private var m_isTimeStarted:Boolean;
private var m_currentBonusSuccessLevel:int;
public var isBonusLevelCompleted:Boolean;
private var m_sublayer:DisplayObjectContainer;
private var m_viewOffsetYLast:Number;
private var m_scrollSpeed:Number;
private var m_effects:DisplayObjectContainer;
private var m_viewOffsetYF:IFloat;
private var m_isExplosion:Boolean;
private var m_rValPt:Pt;
private var m_isFinished:Boolean;
private var m_isFirst:Boolean;
private var m_rng:MtRandom;
private var m_rocks:Array;
private var m_bombs:Array;
private var m_scrollViewOffsetY:int;
private var m_pauseScrollTicks:int;
private var m_scrollBack:Bitmap;
private var m_viewOffsetY:Number;
private var m_cursorY:int;
public function RockBox(_arg1:DisplayObjectContainer, _arg2:DisplayObjectContainer, _arg3:BonusClock, _arg4:int){
m_rValPt = new Pt(0, 0);
super();
m_sublayer = _arg1;
m_sublayer.x = 384;
m_effects = _arg2;
m_isFirst = true;
}
function isExplosion():Boolean{
return (m_isExplosion);
}
public function init(_arg1:int):void{
m_rng = new MtRandom(_arg1);
if (m_isFirst){
reset();
};
m_isFirst = false;
}
public function render(_arg1:int, _arg2:Number):void{
var _local3:* = m_viewOffsetYF.value;
if (m_viewOffsetYLast != _local3){
m_viewOffsetYLast = _local3;
m_sublayer.y = _local3;
};
}
public function tick(_arg1:int):void{
var _local2:int;
var _local3:int;
var _local4:Rock;
var _local5:BubbleListener;
var _local7:Bomb;
var _local8:Array;
var _local9:*;
var _local10:Rock;
var _local11:Array;
var _local12:*;
if (m_isFinished){
m_viewOffsetYF.set(m_viewOffsetY);
return;
};
_local2 = 0;
while (_local2 < m_bombs.length) {
_local7 = m_bombs[_local2];
if ((((_local7.getY() < 0)) || (testPoint((_local7.getX() - 384), _local7.getY())))){
_local7.explode();
_local8 = blastAt((_local7.getX() - 384), _local7.getY());
_local9 = testForCombo(_local8);
if (_local9.length >= 3){
m_pauseScrollTicks = 18;
for each (_local10 in _local9) {
_local10.blast();
};
};
m_bombs.splice(_local2, 1);
};
_local2++;
};
testForDrop();
var _local6:* = true;
_local2 = (m_rocks.length - 1);
_local3 = 0;
while (((_local6) && ((_local3 < 5)))) {
_local6 = m_rocks[_local2][_local3].isHidden;
_local3++;
};
if (_local6){
_local11 = new Array(8);
_local2 = 1;
while (_local2 < 8) {
_local11[_local2] = new Array(5);
_local3 = 0;
while (_local3 < 5) {
_local11[_local2][_local3] = m_rocks[(_local2 - 1)][_local3];
_local11[_local2][_local3].arrayY++;
_local3++;
};
_local2++;
};
m_scrollViewOffsetY = (m_scrollViewOffsetY - 62);
_local11[0] = new Array(5);
_local3 = 0;
while (_local3 < 5) {
_local4 = m_rocks[(m_rocks.length - 1)][_local3];
_local4.reset(_local3, 0, getNewColor());
_local4.rock.x = (_local3 * 62);
_local4.rock.y = m_scrollViewOffsetY;
_local11[0][_local3] = _local4;
_local3++;
};
m_rocks = _local11;
};
_local2 = m_rocks.length;
while (_local2--) {
_local12 = m_rocks[_local2];
_local3 = _local12.length;
while (_local3--) {
_local4 = _local12[_local3];
if (_local12[_local3] == null){
} else {
_local12[_local3].update();
if (_local12[_local3].isHidden){
} else {
if (_local12[_local3].rock.parent != null){
} else {
matrixToScreen(_local3, _local2);
if (m_rValPt.y < -31){
} else {
m_sublayer.addChild(_local12[_local3].rock);
};
};
};
};
};
};
matrixToScreen(0, (m_rocks.length - 1));
m_rValPt.y = (m_rValPt.y + 31);
m_viewOffsetYF.set(m_viewOffsetY);
if (((!(isBonusLevelCompleted)) && ((m_rValPt.y < 445)))){
if (m_rValPt.y < 165){
m_currentBonusSuccessLevel = 3;
} else {
if (m_rValPt.y < 291){
m_currentBonusSuccessLevel = 2;
} else {
m_currentBonusSuccessLevel = 1;
};
};
m_cursorY = m_rValPt.y;
if (m_cursorY > 421){
m_cursorY = 421;
};
if (m_cursorY < 31){
m_cursorY = 31;
};
if (m_pauseScrollTicks == 0){
m_viewOffsetY = (m_viewOffsetY + m_scrollSpeed);
if (m_rValPt.y > 100){
if (m_scrollSpeed > 1){
m_scrollSpeed = (m_scrollSpeed * 0.98);
} else {
m_scrollSpeed = 1;
};
} else {
m_scrollSpeed = ((4 * 1) - (Math.max(0, m_rValPt.y) / 100));
};
} else {
m_pauseScrollTicks--;
};
} else {
if (m_rValPt.y >= 445){
if (!m_isFinished){
m_currentBonusSuccessLevel = 0;
m_isExplosion = true;
m_isFinished = true;
return;
};
};
};
}
function testPoint(_arg1:int, _arg2:int):Boolean{
var _local3:int;
var _local4:int;
var _local5:*;
var _local6:Rock;
var _local7:int;
var _local8:int;
_local3 = m_rocks.length;
while (_local3--) {
_local5 = m_rocks[_local3];
_local4 = _local5.length;
while (_local4--) {
_local6 = _local5[_local4];
if (_local6.isHidden){
} else {
matrixToScreen(_local4, _local3);
_local7 = (_arg1 - m_rValPt.x);
_local8 = (_arg2 - m_rValPt.y);
if (((_local7 * _local7) + (_local8 * _local8)) < (40 * 40)){
return (true);
};
};
};
};
return (false);
}
private function getNewColor():int{
var _local1:* = m_rng.nextInt(100);
var _local2:* = 0;
if (_local1 < 12){
_local2 = 2;
} else {
if (_local1 < 56){
_local2 = 1;
};
};
return (_local2);
}
function isRock(_arg1:int, _arg2:int):Boolean{
if ((((((((_arg2 > (m_rocks.length - 1))) || ((_arg1 > 4)))) || ((_arg1 < 0)))) || ((_arg2 < 0)))){
return (false);
};
if (m_rocks[_arg2][_arg1].isHidden){
return (false);
};
return (true);
}
function blowAllBombs():void{
var _local1:Bomb;
for each (_local1 in m_bombs) {
_local1.explode();
};
m_isFinished = true;
}
public function blastAt(_arg1:int, _arg2:int):Array{
var _local4:int;
var _local5:int;
var _local6:*;
var _local7:Rock;
var _local8:int;
var _local9:int;
var _local3:Array = [];
_local4 = m_rocks.length;
while (_local4--) {
_local6 = m_rocks[_local4];
_local5 = _local6.length;
while (_local5--) {
_local7 = _local6[_local5];
if (_local7.isHidden){
} else {
matrixToScreen(_local5, _local4);
_local8 = (_arg1 - m_rValPt.x);
_local9 = (_arg2 - m_rValPt.y);
if (((_local8 * _local8) + (_local9 * _local9)) < (50 * 50)){
_local7.cycle();
_local3.push(new Pt(_local5, _local4));
};
};
};
};
return (_local3);
}
public function reset():void{
var _local1:int;
var _local2:int;
var _local3:Rock;
var _local4:Pt;
var _local5:*;
var _local6:Bomb;
if (m_rocks){
_local1 = m_rocks.length;
while (_local1--) {
_local5 = m_rocks[_local1];
_local2 = _local5.length;
while (_local2--) {
_local3 = _local5[_local2];
if (_local5[_local2] == null){
} else {
if (_local5[_local2].rock.parent == null){
} else {
_local5[_local2].rock.parent.removeChild(_local5[_local2].rock);
};
};
};
};
_local1 = 0;
while (_local1 < m_bombs.length) {
_local6 = m_bombs[_local1];
if (_local6.bomb.parent){
_local6.bomb.parent.removeChild(_local6.bomb);
};
_local1++;
};
};
m_pauseScrollTicks = 0;
m_scrollSpeed = 4;
m_cursorY = 31;
isBonusLevelCompleted = false;
m_isFinished = false;
m_isTimeStarted = false;
m_currentBonusSuccessLevel = 0;
m_bombs = new Array();
m_isExplosion = false;
m_viewOffsetY = (-62 * 7);
m_viewOffsetYLast = -1;
m_viewOffsetYF = new IFloat(m_viewOffsetY);
x = 384;
y = m_viewOffsetY;
m_scrollViewOffsetY = 0;
m_rocks = new Array(8);
_local1 = 0;
while (_local1 < m_rocks.length) {
m_rocks[_local1] = new Array(5);
_local2 = 0;
while (_local2 < 5) {
_local3 = new Rock(m_effects);
_local3.reset(_local2, _local1, getNewColor());
_local3.isHidden = (_local2 > (m_rocks.length - _local1));
_local3.rock.x = (_local2 * 62);
_local3.rock.y = (_local1 * 62);
m_rocks[_local1][_local2] = _local3;
_local2++;
};
_local1++;
};
}
private function matrixToScreen(_arg1:int, _arg2:int):void{
var _local3:* = (_arg1 * 62);
var _local4:* = (((_arg2 * 62) + m_viewOffsetY) + m_scrollViewOffsetY);
m_rValPt.x = _local3;
m_rValPt.y = _local4;
}
function getColorByPos(_arg1:int, _arg2:int):int{
if ((((((((_arg2 > (m_rocks.length - 1))) || ((_arg1 > 4)))) || ((_arg1 < 0)))) || ((_arg2 < 0)))){
return (-1);
};
if (m_rocks[_arg2][_arg1].isHidden){
return (-1);
};
return (m_rocks[_arg2][_arg1].getColor());
}
public function addBomb(_arg1:Bomb):void{
m_bombs.push(_arg1);
}
function getCursorPos():int{
return (m_cursorY);
}
function getBonusSuccessLevel():int{
return (m_currentBonusSuccessLevel);
}
public function testForDrop():void{
var _local1:int;
var _local2:int;
var _local7:Rock;
var _local8:Rock;
var _local9:int;
var _local10:int;
var _local11:String;
var _local3:Array = new Array();
_local2 = m_rocks[0].length;
while (_local2--) {
if (!m_rocks[0][_local2].isHidden){
_local3.push(m_rocks[0][_local2]);
};
};
var _local4:* = {};
var _local5:Array = [[1, 0], [0, 1], [-1, 0], [0, -1]];
var _local6:Object = {};
_local1 = m_rocks.length;
while (_local1--) {
_local2 = m_rocks[_local1].length;
while (_local2--) {
if (!m_rocks[_local1][_local2].isHidden){
_local6[((_local2 + ",") + _local1)] = m_rocks[_local1][_local2];
};
};
};
while (_local3.length > 0) {
_local8 = _local3.shift();
_local1 = 0;
while (_local1 < _local5.length) {
_local9 = (_local8.arrayX + _local5[_local1][0]);
_local10 = (_local8.arrayY + _local5[_local1][1]);
_local11 = ((_local9 + ",") + _local10);
if (((!(_local4[_local11])) && (isRock(_local9, _local10)))){
_local4[_local11] = 1;
delete _local6[_local11];
_local3.push(m_rocks[_local10][_local9]);
};
_local1++;
};
};
for each (_local7 in _local6) {
_local7.fall();
};
}
function testForCombo(_arg1:Array):Array{
var _local7:Rock;
var _local8:int;
var _local9:int;
var _local10:String;
var _local2:int;
var _local3:* = {};
var _local4:Array = new Array();
var _local5:Array = new Array();
var _local6:Array = [[1, 0], [0, 1], [-1, 0], [0, -1]];
_local2 = 0;
while (_local2 < _arg1.length) {
_local5.push(m_rocks[_arg1[_local2].y][_arg1[_local2].x]);
_local2++;
};
while (_local5.length > 0) {
_local7 = _local5.shift();
if (_local7.getColor() == 2){
} else {
_local2 = 0;
while (_local2 < _local6.length) {
_local8 = (_local7.arrayX + _local6[_local2][0]);
_local9 = (_local7.arrayY + _local6[_local2][1]);
_local10 = ((_local8 + ",") + _local9);
if (((!(_local3[_local10])) && ((getColorByPos(_local8, _local9) == _local7.getColor())))){
_local4.push(m_rocks[_local9][_local8]);
_local5.push(m_rocks[_local9][_local8]);
};
_local3[_local10] = 1;
_local2++;
};
};
};
return (_local4);
}
}
}//package junglebubble
Section 49
//RockClip (junglebubble.RockClip)
package junglebubble {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class RockClip extends MovieClip {
private var startY:int;
private var m_startTime:int;
public function RockClip(_arg1:Rock){
stop();
}
public function animateDrop(_arg1:Event):void{
var _local2:int = getTimer();
if (m_startTime < 0){
m_startTime = _local2;
startY = y;
};
var _local3:* = ((_local2 - m_startTime) / 100);
y = (y + _local3);
if (y > 750){
removeEventListener(Event.ENTER_FRAME, animateDrop);
parent.removeChild(this);
};
}
public function fall():void{
m_startTime = -1;
addEventListener(Event.ENTER_FRAME, animateDrop);
}
}
}//package junglebubble
Section 50
//RollingScore (junglebubble.RollingScore)
package junglebubble {
import flash.text.*;
import util.*;
public class RollingScore {
private var m_pad:int;
private var m_target:TextField;
private var m_valuei:int;
private var m_targetValue:int;
private var m_currentVal:int;
private var m_value:Number;
public function RollingScore(_arg1:TextField, _arg2:int, _arg3:int){
m_pad = _arg3;
m_currentVal = -1;
m_target = _arg1;
m_value = _arg2;
m_valuei = _arg2;
m_targetValue = _arg2;
}
public function update():void{
if (m_value > m_targetValue){
m_value = (m_value - ((m_value - m_targetValue) * 0.1667));
m_valuei = int(Math.round(m_value));
} else {
m_value = (m_value + ((m_targetValue - m_value) * 0.1667));
m_valuei = int(Math.round(m_value));
};
}
public function setValue(_arg1:int):void{
m_targetValue = _arg1;
}
public function render():void{
if (m_currentVal != m_valuei){
m_currentVal = m_valuei;
if (m_pad < 0){
m_target.text = ("" + m_currentVal);
} else {
m_target.text = Numbers.itoa(m_currentVal, m_pad);
};
};
}
}
}//package junglebubble
Section 51
//SharedData (junglebubble.SharedData)
package junglebubble {
public class SharedData {
public var isGameWin:Boolean;
public var totalGameTime:int;
public var shotBonus:int;
public var buildDate:Date;
public var score:int;
public var timeBonus:int;
public var globalTick:int;
public var numGameTicksLeft:int;
public var bonusLevel:Array;
public var build:int;
public var isGameOver:Boolean;
public var globalSeed:int;
public var isShortMode:Boolean;
public var bonusLevelSubScore:Array;
public var finalScore:int;
public function SharedData(){
isShortMode = false;
bonusLevel = new Array();
bonusLevelSubScore = new Array();
score = 0;
timeBonus = 0;
finalScore = 0;
shotBonus = 500000;
isGameWin = false;
isGameOver = false;
globalSeed = 0;
totalGameTime = (numGameTicksLeft = int(((GameBase.TICK_RATE * 60) * 5)));
}
}
}//package junglebubble
Section 52
//State (junglebubble.State)
package junglebubble {
public interface State {
function onMouseUp():void;
function hasSoundButton():Boolean;
function engage():void;
function hasExitButton():Boolean;
function onPoorFrameRate():void;
function onMouseDown():void;
function onGameQuitButton():void;
function render(_arg1:int, _arg2:Number):void;
function onMouseMove(_arg1:int, _arg2:int):void;
function tick(_arg1:int):void;
function disengage():void;
}
}//package junglebubble
Section 53
//StateBase (junglebubble.StateBase)
package junglebubble {
public class StateBase implements State {
public function engage():void{
}
public function onMouseMove(_arg1:int, _arg2:int):void{
}
public function hasSoundButton():Boolean{
return (true);
}
public function onPoorFrameRate():void{
}
public function onMouseUp():void{
}
public function hasExitButton():Boolean{
return (true);
}
public function onGameQuitButton():void{
}
public function render(_arg1:int, _arg2:Number):void{
}
public function onMouseDown():void{
}
public function tick(_arg1:int):void{
}
public function disengage():void{
}
}
}//package junglebubble
Section 54
//StateGameMode (junglebubble.StateGameMode)
package junglebubble {
import sfx.*;
import flash.display.*;
import geom.*;
import math.*;
public class StateGameMode extends StateBase implements BubbleListener {
private var m_bonusModeReadyAt:int;
private var m_isMouseDown:Boolean;
private var m_monkeyJumpDownAt:int;
private var m_bonusSubSuccessLevel:Number;
private var m_selectedBonusGameIdx:int;
private var m_bonusSign:BonusCompleteSign;
private var m_tick:int;
private var m_collidableList:Array;
private var m_restartMusicAt:int;
private var m_screenScrollDownAt:int;
private var m_main:GameAssembly;
private var m_bubbleBox:BubbleBox;
private var m_ballRng:MtRandom;
private var m_bubbleLauncher:BubbleLauncher;
private var m_bonusGame:BonusGame;
private var m_isNormalGamePaused:Boolean;
private var m_bonusGameRock:BonusGameRock;
private var m_mouseX:int;
private var m_mouseY:int;
private var m_resumeNormalGameAt:int;
private var m_tickList:Array;
private var m_nextBubble:Bubble;
private var m_bonusGameSurvivor:BonusGameSurvivor;
private var m_monkeyJumpUpAt:int;
private var m_game:Game;
private var m_bonusGameNull:BonusGameNull;
private var m_lastScoring:int;
private var m_leaveGameAt:int;
private var m_lastBonusGameIdx:int;
private var m_bonusRng:MtRandom;
private var m_nextBonusTestAt:int;
private var m_isBonusModePrepare:Boolean;
private var m_bushes:Bushes;
private var m_aimCursor:AimCursor;
private var m_lastTickScore:int;
private var m_bonusSuccessLevel:int;
private var m_monkeyJumpUpReadyAt:int;
private var m_removeBackAt:int;
private var m_completedBonusLevels:int;
private var m_bonusLevel:int;
private var m_screenScrollUpAt:int;
private var m_isBonusModeReady:Boolean;
private var m_newMouseX:int;
private var m_newMouseY:int;
private var m_bonusMeter:NextBonusMeter;
private var m_aimBubble:Bubble;
private var m_bonusGameDefense:BonusGameDefense;
private var m_jungleSounds:JungleSounds;
private var m_bubbleAimMoving:int;
private var m_bonusGameBubbleMining:BonusGameBubbleMining;
public function StateGameMode(_arg1:Game, _arg2:int){
m_isBonusModeReady = false;
m_leaveGameAt = -1;
m_restartMusicAt = -1;
m_lastBonusGameIdx = -1;
m_selectedBonusGameIdx = -1;
m_monkeyJumpDownAt = -1;
m_screenScrollDownAt = -1;
m_bonusModeReadyAt = -1;
m_screenScrollUpAt = -1;
m_monkeyJumpUpAt = -1;
m_monkeyJumpUpReadyAt = -1;
m_resumeNormalGameAt = -1;
m_completedBonusLevels = 0;
m_game = _arg1;
m_nextBonusTestAt = 250;
m_tickList = new Array();
m_collidableList = new Array();
m_collidableList.push(new Line(648, -2500, 648, 500));
m_collidableList.push(new Line(367, -2500, 367, 500));
m_bonusLevel = 1;
m_isMouseDown = false;
m_isNormalGamePaused = false;
}
public function onNoMoreBubbles():void{
var _local1:SharedData = m_game.getSharedData();
if (!_local1.isGameOver){
m_game.sendData((("200," + m_tick) + ",0=0"));
m_main.monkey_over.feeling(100);
_local1.isGameOver = true;
_local1.isGameWin = true;
m_leaveGameAt = (m_tick + (GameBase.TICK_RATE * 2));
m_game.getSoundManager().get("ambience3").play();
};
}
public function onBeforeLeaveBonusMode(_arg1:int, _arg2:Number):void{
m_game.sendData((((((("101," + m_tick) + ",") + _arg1) + ",") + _arg2) + ",0=0"));
if (_arg1 > 0){
m_completedBonusLevels++;
m_bonusSign = new BonusCompleteSign();
m_bonusSign.setGame(m_game);
m_main.addChild(m_bonusSign);
m_bonusSign.x = 762;
m_bonusSign.y = 760;
m_bonusSign.show(_arg1, _arg2, m_completedBonusLevels);
};
}
public function onLeaveBonusMode(_arg1:int, _arg2:Number):void{
var _local3:SharedData;
m_game.sendData((((((("102," + m_tick) + ",") + _arg1) + ",") + _arg2) + ",0=0"));
if (_arg1 > 0){
m_main.monkey_over.feeling(120);
m_game.getSharedData().bonusLevel.push(_arg1);
m_game.getSharedData().bonusLevelSubScore.push(_arg2);
} else {
m_main.monkey_over.feeling(-100);
m_game.getMusicManager().get("bonus_end_bad").play();
};
m_bonusSuccessLevel = _arg1;
m_bonusSubSuccessLevel = _arg2;
m_bubbleBox.visitBonusLevelEnd();
if ((((m_bubbleBox.getNumBubbles() == 0)) || (!((m_leaveGameAt == -1))))){
_local3 = m_game.getSharedData();
if (!_local3.isGameOver){
_local3.isGameOver = true;
_local3.isGameWin = true;
};
m_game.leaveGame();
return;
};
if (m_bonusSuccessLevel > 0){
m_game.getMusicManager().get("loop_game").loop(0);
m_game.getMusicManager().get("loop_game").fadeTo(1, 500);
} else {
m_restartMusicAt = (m_tick + 70);
};
if (m_game.getSharedData().isShortMode){
m_leaveGameAt = (m_tick + 1);
} else {
m_aimCursor.visible = true;
m_isBonusModeReady = false;
m_isBonusModePrepare = false;
m_screenScrollUpAt = (m_tick + 2);
m_monkeyJumpUpAt = (m_tick + 12);
m_monkeyJumpUpReadyAt = (m_tick + 30);
m_resumeNormalGameAt = (m_tick + GameBase.TICK_RATE);
};
}
override public function onPoorFrameRate():void{
m_main.hasPoorFrameRate();
}
override public function engage():void{
var _local1:SoundManager = m_game.getMusicManager();
_local1.get("loop_game").loop(0);
_local1.get("loop_game").fadeTo(1, 500);
m_jungleSounds = new JungleSounds(_local1);
m_main = new GameAssembly();
m_game.getDisplayObjectContainer().addChild(m_main);
m_bushes = new Bushes();
m_bushes.setGame(m_game);
m_bushes.visible = true;
m_main.addChild(m_bushes);
m_bushes.pullApart();
m_removeBackAt = -1;
m_main.monkey_over.setMood(Monkey.MOOD_NEUTRAL);
m_main.monkey_under.setMood(Monkey.MOOD_NEUTRAL);
m_main.monkey_under.setHelmet(true);
m_main.lever_normal.inner.gotoAndStop(1);
m_main.lever_underworld.inner.gotoAndStop(1);
var _local2:SharedData = m_game.getSharedData();
var _local3:* = 25;
m_bubbleBox = new BubbleBox(m_game, _local2, _local2.globalSeed, _local3, [1, 2, 3, 4, 5], 15);
m_bubbleBox.addListener(this);
var _local4:* = new MovieClip();
m_main.top_layer.top.addChild(_local4);
m_main.bubble_base.addChild(m_bubbleBox);
m_bubbleBox.setDropBubbleContainer(_local4);
m_game.sendData((((("99," + m_tick) + ",") + _local2.globalSeed) + ",0=0"));
m_main.statue.setGame(m_game);
m_main.statue.setLandingCallback(onStatuePieceLand);
m_ballRng = new MtRandom((_local2.globalSeed + 2));
m_main.bonus_intro_sign.setGame(m_game);
m_main.bonussign.setGame(m_game);
m_bonusRng = new MtRandom((_local2.globalSeed + 5));
m_aimCursor = m_main.aim_over;
m_aimCursor.setAncorPosition(521, 477);
m_aimCursor.setVisibleLimit(340, 4, 680, 560);
m_bubbleLauncher = m_main.bubble_launcher;
m_bubbleLauncher.setPosition(521, 476);
m_bonusMeter = m_main.bonus_meter;
m_bonusGameDefense = new BonusGameDefense(m_game, m_main.rock_base.rock_effects, this, m_main, m_tickList);
m_bonusGameBubbleMining = new BonusGameBubbleMining(m_game, m_main.rock_base.rock_effects, this, m_main, m_tickList);
m_bonusGameSurvivor = new BonusGameSurvivor(m_game, m_main.rock_base.rock_effects, this, m_main, m_tickList);
m_bonusGameRock = new BonusGameRock(m_game, m_main.rock_base.rock_effects, this, m_main, m_tickList);
m_bonusGameNull = new BonusGameNull(m_game, m_main.rock_base.rock_effects, this, m_main, m_tickList);
m_bubbleLauncher.setAimChangeCallback(onChangeBubbleAim);
nextBubble();
}
override public function disengage():void{
if (((((m_isBonusModeReady) || (m_isBonusModePrepare))) && (m_bonusGame))){
m_bonusGame.tidy(true);
};
var _local1:SoundManager = m_game.getMusicManager();
if (_local1.get("loop_bonus").isPlaying()){
_local1.get("loop_bonus").fadeToAndStop(0, 500);
};
if (_local1.get("loop_game").isPlaying()){
_local1.get("loop_game").fadeToAndStop(0, 500);
};
m_game.getDisplayObjectContainer().removeChild(m_main);
}
public function onBubbleOverflow():void{
var _local1:SharedData = m_game.getSharedData();
if (!_local1.isGameOver){
m_main.monkey_over.feeling(-100);
_local1.isGameOver = true;
_local1.isGameWin = false;
m_leaveGameAt = (m_tick + GameBase.TICK_RATE);
};
}
private function nextBubble():void{
var _local1:int;
var _local2:Array;
if (m_aimBubble == null){
m_aimBubble = new Bubble();
m_aimBubble.assureFull();
m_aimBubble.setCollidableList(m_collidableList);
m_main.bubble_base.addChild(m_aimBubble.bubble);
_local2 = m_bubbleBox.getUniqueColors();
_local1 = _local2[m_ballRng.nextInt(_local2.length)];
m_aimBubble.setColorIndex(_local1);
m_aimBubble.gotoAimPosition();
} else {
m_aimBubble = m_nextBubble;
m_aimBubble.animateLongJump();
m_tickList.push(m_aimBubble);
};
m_bubbleLauncher.setBubble(m_aimBubble);
m_nextBubble = new Bubble();
m_nextBubble.assureFull();
m_nextBubble.setCollidableList(m_collidableList);
m_main.bubble_base.addChild(m_nextBubble.bubble);
_local2 = m_bubbleBox.getUniqueColors();
_local1 = _local2[m_ballRng.nextInt(_local2.length)];
m_nextBubble.setColorIndex(_local1);
m_nextBubble.gotoPreviewPosition();
m_nextBubble.animateIntoView();
m_tickList.push(m_nextBubble);
}
public function onBonusBubbleCollected(_arg1:int):void{
m_isNormalGamePaused = true;
m_isBonusModePrepare = true;
m_aimCursor.visible = false;
m_monkeyJumpDownAt = (m_tick + 60);
m_screenScrollDownAt = (m_monkeyJumpDownAt + 40);
m_bonusModeReadyAt = (m_screenScrollDownAt + 25);
m_selectedBonusGameIdx = m_bonusRng.nextInt(3);
if (m_lastBonusGameIdx == m_selectedBonusGameIdx){
if (m_bonusRng.nextDouble() > 0.5){
if (++m_selectedBonusGameIdx > 2){
m_selectedBonusGameIdx = 0;
};
} else {
if (--m_selectedBonusGameIdx < 0){
m_selectedBonusGameIdx = 2;
};
};
};
m_lastBonusGameIdx = m_selectedBonusGameIdx;
if (m_selectedBonusGameIdx == 0){
m_bonusGame = m_bonusGameDefense;
};
if (m_selectedBonusGameIdx == 1){
m_bonusGame = m_bonusGameBubbleMining;
};
if (m_selectedBonusGameIdx == 2){
m_bonusGame = m_bonusGameSurvivor;
};
var _local2:int = m_bonusRng.nextInt(2147483647);
m_game.sendData((((((("100," + m_tick) + ",") + _arg1) + ",") + _local2) + ",0=0"));
m_bonusGame.init(_local2);
m_game.getMusicManager().get("loop_game").fadeToAndStop(0, 500);
m_main.monkey_over.feeling(250);
m_main.bonussign.show(_arg1, m_selectedBonusGameIdx);
m_bubbleBox.visitBonusLevel();
m_main.items.gotoAndStop((m_completedBonusLevels + 1));
}
public function onChangeBubbleAim(_arg1:Number, _arg2:Number):void{
var _local3:Number = Math.abs((_arg1 - _arg2));
m_bubbleAimMoving = (m_bubbleAimMoving + 1);
m_main.monkey_over.setFrame(((_arg1 < (-(Math.PI) / 2))) ? 2 : 1);
m_main.lever_normal.rotation = (Math.sin((_arg1 / 2)) * 12);
}
override public function tick(_arg1:int):void{
var _local5:TickObject;
m_tick = _arg1;
var _local2:SharedData = m_game.getSharedData();
m_lastTickScore = _local2.score;
if (_local2.numGameTicksLeft == int((5000 / GameBase.TICK_RATE))){
m_game.getSoundManager().get("time_warning").play();
};
if ((((_local2.numGameTicksLeft == 0)) && (!(_local2.isGameOver)))){
_local2.isGameOver = true;
_local2.isGameWin = false;
m_leaveGameAt = (_arg1 + (GameBase.TICK_RATE * 2));
m_game.getSoundManager().get("time_out").play();
m_bubbleBox.disableBubbles();
};
if (_arg1 == m_leaveGameAt){
m_game.leaveGame();
return;
};
if (m_removeBackAt == -1){
m_removeBackAt = (_arg1 + 50);
};
if (m_removeBackAt == _arg1){
m_game.hideBack();
};
handleMouseDown();
if (_arg1 == m_bonusModeReadyAt){
m_isBonusModeReady = true;
m_isBonusModePrepare = false;
m_main.bonus_intro_sign.show(m_selectedBonusGameIdx);
};
if (_arg1 == m_monkeyJumpDownAt){
m_main.monkey_over.jumpDown();
m_game.getSoundManager().get("monkey_jump_down").play();
};
if (_arg1 == m_screenScrollDownAt){
m_main.scrollDown();
};
if (_arg1 == m_screenScrollUpAt){
m_main.scrollUp();
};
if (_arg1 == m_monkeyJumpUpAt){
m_main.monkey_jumper.visible = true;
m_main.monkey_jumper.jumpUp();
m_game.getSoundManager().get("monkey_jump_up").play();
};
if (_arg1 == m_restartMusicAt){
m_game.getMusicManager().get("loop_game").loop(0);
m_game.getMusicManager().get("loop_game").fadeTo(1, 1000);
};
if (_arg1 == m_monkeyJumpUpReadyAt){
m_main.monkey_jumper.reset();
m_main.monkey_over.readyNormal();
m_main.monkey_over.visible = true;
if (m_bonusSuccessLevel == 0){
m_main.monkey_smoke.start();
} else {
m_main.statue.dropBlock(m_bonusSuccessLevel, m_bonusSubSuccessLevel);
};
};
if (_arg1 == m_resumeNormalGameAt){
m_jungleSounds.reset();
m_bonusGame.tidy(false);
if (m_bonusSign){
m_main.removeChild(m_bonusSign);
};
m_bonusSign = null;
m_isNormalGamePaused = false;
};
if (!m_isNormalGamePaused){
if (!m_game.isLowPerformanceMode()){
m_jungleSounds.update();
};
m_bubbleBox.tick(_arg1);
m_main.monkey_over.update(_arg1);
m_bubbleLauncher.tick(_arg1, m_mouseX, m_mouseY);
m_bonusMeter.setValue(m_bubbleBox.getBonusBubbleProximityFactor());
m_bonusMeter.tick();
m_aimCursor.tick(m_mouseX, m_mouseY);
if (!_local2.isGameOver){
_local2.numGameTicksLeft--;
};
} else {
if (m_isBonusModeReady){
m_main.bonus_intro_sign.tick();
if (m_main.bonus_intro_sign.isFinished()){
m_bonusGame.tick(_arg1, m_mouseX, m_mouseY);
};
};
};
if (m_bubbleAimMoving > 0){
m_main.rep_over.visible = ((_arg1 % 3) == 0);
m_bubbleAimMoving--;
};
m_main.bonussign.tick(_arg1);
m_main.tick(_arg1);
var _local3:int;
while (_local3 < m_tickList.length) {
_local5 = m_tickList[_local3];
_local5.tick(_arg1);
if (_local5.isRemoving){
_local5.isRemoving = false;
m_tickList.splice(_local3, 1);
} else {
_local3++;
};
};
var _local4:int = (_local2.score - m_lastTickScore);
if (_local4 > 0){
m_main.monkey_over.feeling((_local4 / 100));
m_lastScoring = _arg1;
};
if ((_arg1 % 4) == 0){
if ((_arg1 - m_lastScoring) > 100){
if ((_arg1 - m_lastScoring) < 500){
m_main.monkey_over.feeling((-((_arg1 - m_lastScoring)) / 100));
} else {
m_main.monkey_over.feeling(-1);
};
};
};
if (_local4 != 0){
m_game.sendData(((("2," + m_tick) + ",0=") + _local4));
};
}
override public function render(_arg1:int, _arg2:Number):void{
var _local3:int;
while (_local3 < m_tickList.length) {
m_tickList[_local3].render(_arg1, _arg2);
_local3++;
};
if (!m_isNormalGamePaused){
m_bubbleLauncher.render(_arg1, _arg2);
m_aimCursor.update(_arg1, _arg2);
m_bubbleBox.render(_arg1, _arg2);
} else {
if (m_isBonusModeReady){
if (m_main.bonus_intro_sign.isFinished()){
m_bonusGame.render(_arg1, _arg2);
};
};
};
var _local4:SharedData = m_game.getSharedData();
m_main.setBonusScoreTime(_local4.shotBonus, _local4.score, _local4.numGameTicksLeft);
m_main.bonussign.render();
m_main.render(_arg1, _arg2);
m_bonusMeter.render();
}
private function handleMouseDown():void{
m_mouseX = m_newMouseX;
m_mouseY = m_newMouseY;
if (!m_isMouseDown){
return;
};
m_isMouseDown = false;
if (m_isBonusModeReady){
if (m_main.bonus_intro_sign.isFinished()){
m_bonusGame.onMouseDown();
};
} else {
if (!m_isNormalGamePaused){
if (((m_bubbleBox.canFire()) && (m_bubbleLauncher.fire()))){
m_game.getSoundManager().get("shot1").play();
m_game.getSharedData().shotBonus = (m_game.getSharedData().shotBonus - 2000);
if (m_game.getSharedData().shotBonus < 0){
m_game.getSharedData().shotBonus = 0;
};
m_bubbleBox.addLiveBubble(m_aimBubble);
m_tickList.push(m_aimBubble);
nextBubble();
};
};
};
}
override public function onGameQuitButton():void{
if (m_game.getSharedData().isGameOver){
return;
};
m_game.getSharedData().shotBonus = 0;
m_game.sendData((("113," + m_tick) + ",0=0"));
}
public function onBubbleRemove():void{
var _local3:int;
var _local4:int;
var _local1:Array = m_bubbleBox.getUniqueColors();
var _local2:Boolean;
_local4 = 0;
while (((!(_local2)) && ((_local4 < _local1.length)))) {
if (m_aimBubble.getColorIndex() == _local1[_local4]){
_local2 = true;
};
_local4++;
};
if (!_local2){
_local3 = _local1[m_ballRng.nextInt(_local1.length)];
m_aimBubble.setColorIndex(_local3);
};
_local2 = false;
_local4 = 0;
while (((!(_local2)) && ((_local4 < _local1.length)))) {
if (m_nextBubble.getColorIndex() == _local1[_local4]){
_local2 = true;
};
_local4++;
};
if (!_local2){
_local3 = _local1[m_ballRng.nextInt(_local1.length)];
m_nextBubble.setColorIndex(_local3);
};
}
public function onStatuePieceLand(_arg1:int, _arg2:int, _arg3:Number):void{
}
public function onBonusBubbleWasted():void{
m_main.monkey_over.feeling(-60);
}
override public function onMouseDown():void{
if (m_game.getSharedData().isGameOver){
return;
};
m_game.sendData((((((("1," + m_tick) + ",") + m_mouseX) + ",") + m_mouseY) + ",0=0"));
m_isMouseDown = true;
}
override public function onMouseMove(_arg1:int, _arg2:int):void{
m_newMouseX = _arg1;
m_newMouseY = _arg2;
}
}
}//package junglebubble
Section 55
//StateGameOver (junglebubble.StateGameOver)
package junglebubble {
public class StateGameOver extends StateBase {
private var m_game:Game;
private var m_isEarlyExit:Boolean;
private var m_isMouseDown:Boolean;
private var m_sendQuitAt:int;
private var m_sendEndAt:int;
private var m_tick:int;
private var m_bushes:Bushes;
public function StateGameOver(_arg1:Game, _arg2:int){
m_game = _arg1;
}
override public function onMouseDown():void{
m_isMouseDown = true;
}
override public function engage():void{
var _local4:Number;
m_sendEndAt = (GameBase.TICK_RATE * 20);
m_isEarlyExit = false;
m_sendQuitAt = -1;
var _local1:SharedData = m_game.getSharedData();
if (!_local1.isGameWin){
_local1.shotBonus = 0;
} else {
_local4 = GameBase.TICK_RATE;
_local1.timeBonus = int((((_local1.numGameTicksLeft / _local4) / (_local1.totalGameTime / _local4)) * 10000));
};
var _local2:* = 0;
var _local3:* = 0;
while (_local3 < _local1.bonusLevel.length) {
_local2 = (_local2 + ((_local1.bonusLevel[_local3] * 5000) + int((_local1.bonusLevelSubScore[_local3] * 2500))));
_local3++;
};
m_game.sendData((((((((((("201," + m_tick) + ",") + _local1.score) + ",") + _local1.shotBonus) + ",") + _local2) + ",") + _local1.timeBonus) + ",0=0"));
_local1.finalScore = (((_local1.score + _local1.shotBonus) + _local2) + _local1.timeBonus);
m_game.finalScore(_local1.finalScore);
m_bushes = new Bushes();
m_bushes.setGame(m_game);
m_bushes.gotoAndStop(1);
m_game.getDisplayObjectContainer().addChild(m_bushes);
}
override public function tick(_arg1:int):void{
m_tick = _arg1;
if (_arg1 == 20){
m_bushes.pullDown();
};
if (_arg1 == 40){
m_game.getSoundManager().get("sign_appear").play();
m_bushes.showSign(true);
};
if (_arg1 == 5){
m_game.getMusicManager().get("outro").play();
};
if ((((((((_arg1 > 45)) && (m_isMouseDown))) && (!(m_bushes.isStatueComplete())))) && (!(m_isEarlyExit)))){
m_isEarlyExit = true;
m_isMouseDown = false;
m_bushes.hurryScoreCount();
m_sendEndAt = (_arg1 + (GameBase.TICK_RATE * 4));
};
if ((((((((_arg1 > 80)) && ((m_sendQuitAt == -1)))) && (m_isMouseDown))) && (!(m_isEarlyExit)))){
m_sendEndAt = _arg1;
};
if (m_sendEndAt == _arg1){
m_sendQuitAt = (_arg1 + (GameBase.TICK_RATE * 2));
m_bushes.hideSign();
m_game.getSoundManager().get("sign_appear").play();
};
if (m_sendQuitAt == _arg1){
m_game.destroy();
};
m_bushes.tick();
m_isMouseDown = false;
}
override public function render(_arg1:int, _arg2:Number):void{
m_bushes.render();
}
override public function hasSoundButton():Boolean{
return (true);
}
override public function hasExitButton():Boolean{
return (false);
}
override public function disengage():void{
m_game.getMusicManager().get("outro").fadeToAndStop(0, 1000);
}
}
}//package junglebubble
Section 56
//StateIntro (junglebubble.StateIntro)
package junglebubble {
public class StateIntro extends StateBase {
private var m_game:Game;
private var m_hasLeft:Boolean;
private var m_hideAt:int;
private var m_bushes:Bushes;
private var m_autoLeaveDelay:int;
private var m_tick:int;
private var m_leaveAt:int;
private var m_nextSlideAt:int;
public function StateIntro(_arg1:Game, _arg2:int){
m_autoLeaveDelay = (GameBase.TICK_RATE * 15);
m_hideAt = -1;
m_leaveAt = -1;
m_hasLeft = false;
m_game = _arg1;
m_tick = -2;
}
override public function onMouseDown():void{
leave();
}
override public function render(_arg1:int, _arg2:Number):void{
}
override public function engage():void{
m_game.getMusicManager().get("intro").play();
m_bushes = new Bushes();
m_bushes.setGame(m_game);
m_bushes.visible = true;
m_nextSlideAt = (GameBase.TICK_RATE * 6);
m_game.getDisplayObjectContainer().addChild(m_bushes);
}
override public function tick(_arg1:int):void{
m_tick = _arg1;
if (_arg1 == m_autoLeaveDelay){
leave();
};
if (_arg1 == 15){
m_bushes.showSign(false);
m_game.getSoundManager().get("sign_appear").play(0.7);
};
if (m_hideAt == _arg1){
m_bushes.hideSign();
m_game.getSoundManager().get("sign_appear").play(0.7);
};
if (m_leaveAt == _arg1){
m_game.leaveState();
};
if (m_nextSlideAt == _arg1){
if (!m_bushes.gotoNextInstructionSlide()){
m_nextSlideAt = (_arg1 + (GameBase.TICK_RATE * 5));
};
};
var _local2:* = ((Math.max(0, (m_autoLeaveDelay - _arg1)) / GameBase.TICK_RATE) * 1000);
m_bushes.setTimeLeftToAutoExit(_local2);
}
override public function hasExitButton():Boolean{
return (false);
}
override public function hasSoundButton():Boolean{
return (true);
}
override public function onGameQuitButton():void{
m_game.getSharedData().shotBonus = 0;
}
override public function disengage():void{
m_game.getMusicManager().get("intro").fadeToAndStop(0, 500);
m_game.getDisplayObjectContainer().removeChild(m_bushes);
m_bushes = null;
}
public function leave(){
if (!m_hasLeft){
m_hasLeft = true;
m_hideAt = (m_tick + 5);
m_leaveAt = (m_tick + 25);
};
}
}
}//package junglebubble
Section 57
//Statue (junglebubble.Statue)
package junglebubble {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class Statue extends MovieClip {
private var m_startTime:int;
private var m_activePiece:Array;
private var m_game:Game;
public var jewel1:jewels_small;
public var jewel2:jewels_small;
public var jewel3:jewels_big;
public var belly:MovieClip;
private var m_spans:Array;
private var m_pieceList:Array;
private var m_nextPieceLevel:int;
public var jewel3_glow:MovieClip;
public var jewel1_glow:MovieClip;
private var m_callback:Function;
public var head:MovieClip;
private var m_nextPiece:int;
private var delay:int;
private var m_lastFrame:uint;
public var feet:MovieClip;
public var crown:MovieClip;
public var jewel2_glow:MovieClip;
public function Statue(){
m_spans = [[1, 15, ["feet"]], [15, 29, ["belly"]], [29, 43, ["head"]], [44, 58, ["crown"]], [58, 82, ["jewel1"]], [82, 106, ["jewel2"]], [106, 130, ["jewel3"]]];
feet.stop();
belly.stop();
head.stop();
crown.stop();
jewel1.stop();
jewel2.stop();
jewel3.stop();
stop();
m_pieceList = [];
m_lastFrame = 0;
m_nextPiece = 0;
visible = false;
}
public function setGame(_arg1:Game):void{
m_game = _arg1;
}
public function setLandingCallback(_arg1:Function):void{
m_callback = _arg1;
}
public function enterFrame(_arg1:Event):void{
var _local6:Array;
var _local7:*;
var _local2:int = getTimer();
if (m_startTime < 0){
m_activePiece = m_pieceList.shift();
_local6 = m_spans[m_activePiece[0]][2];
_local7 = 0;
while (_local7 < _local6.length) {
this[_local6[_local7]].gotoAndStop(m_activePiece[1]);
_local7++;
};
m_startTime = _local2;
};
var _local3:int = m_activePiece[0];
var _local4:* = ((1 / 25) * 1000);
var _local5:uint = (m_spans[_local3][0] + uint(Math.round((((_local2 - m_startTime) / _local4) + 1))));
if ((((_local5 > (m_spans[_local3][1] - 8))) && ((_local2 > delay)))){
if (m_game){
if (_local3 < 4){
m_game.getSoundManager().get("statue_lands").play();
} else {
m_game.getSoundManager().get(("jewel" + (_local3 - 3))).play();
};
delay = (_local2 + 500);
};
};
if (_local5 > m_spans[_local3][1]){
if (m_callback != null){
if ((((_local3 < 4)) || ((_local3 == 6)))){
m_callback(_local3, (4 - m_activePiece[1]), m_activePiece[2]);
};
};
if (m_pieceList.length > 0){
m_startTime = -1;
} else {
removeEventListener(Event.ENTER_FRAME, enterFrame);
m_activePiece = null;
};
gotoAndStop(m_spans[_local3][1]);
return;
};
if (_local5 != m_lastFrame){
gotoAndStop(_local5);
m_lastFrame = _local5;
};
}
public function dropBlock(_arg1:int, _arg2:Number):void{
if (_arg1 > 3){
_arg1 = 3;
};
if (_arg1 < 1){
_arg1 = 1;
};
if (m_nextPiece < m_spans.length){
if (m_pieceList.length == 0){
addEventListener(Event.ENTER_FRAME, enterFrame);
};
if (m_nextPiece == 4){
m_pieceList.push([m_nextPiece, (4 - _arg1), _arg2]);
m_nextPiece++;
m_pieceList.push([m_nextPiece, (4 - _arg1), _arg2]);
m_nextPiece++;
m_pieceList.push([m_nextPiece, (4 - _arg1), _arg2]);
m_nextPiece++;
} else {
m_pieceList.push([m_nextPiece, (4 - _arg1), _arg2]);
m_nextPiece++;
};
m_startTime = -1;
delay = -1;
};
visible = true;
}
public function setState(_arg1:Array, _arg2:Array):void{
var _local8:Array;
var _local9:Array;
removeEventListener(Event.ENTER_FRAME, enterFrame);
if (_arg1.length == 0){
gotoAndStop(1);
visible = false;
return;
};
var _local3:int;
var _local4:Array = new Array();
var _local5:int;
while (_local3 < _arg1.length) {
if (_local3 == 4){
_local4.push([_arg1[_local3], _arg2[_local3]]);
_local4.push([_arg1[_local3], _arg2[_local3]]);
_local4.push([_arg1[_local3], _arg2[_local3]]);
} else {
_local4.push([_arg1[_local3], _arg2[_local3]]);
};
_local3++;
};
while (_local4.length > 0) {
_local8 = _local4.shift();
_local9 = m_spans[_local5][2];
_local3 = 0;
while (_local3 < _local9.length) {
this[_local9[_local3]].gotoAndStop((4 - _local8[0]));
_local3++;
};
_local5++;
};
var _local6:int = (_arg1.length - 1);
if (_local6 > 3){
_local6 = 6;
};
var _local7:int = m_spans[_local6][1];
gotoAndStop(_local7);
visible = true;
}
}
}//package junglebubble
Section 58
//TickObject (junglebubble.TickObject)
package junglebubble {
public class TickObject {
public var isRemoving:Boolean;
public function TickObject(){
isRemoving = false;
}
public function render(_arg1:int, _arg2:Number):void{
}
public function tick(_arg1:int):void{
}
}
}//package junglebubble
Section 59
//I18n (localization.I18n)
package localization {
public class I18n {
private static var m_strings:Object;
public function I18n(){
m_strings = new Object();
}
public static function init(_arg1:Object):void{
var _local2:String;
m_strings = new Object();
for (_local2 in _arg1) {
m_strings[_local2] = _arg1[_local2];
};
}
public static function getString(_arg1:String, ... _args):String{
var _local3:String;
var _local4:*;
var _local5:RegExp;
if (m_strings[_arg1] != undefined){
_local3 = m_strings[_arg1];
if (_args.length > 0){
_local4 = 0;
while (_local4 < _args.length) {
_local5 = new RegExp((("\\{" + _local4) + "\\}"), "gi");
_local3 = _local3.replace(_local5, _args[_local4]);
_local4++;
};
};
return (_local3);
} else {
};
return ((!NULL! + !NULL!));
}
}
}//package localization
Section 60
//MtRandom (math.MtRandom)
package math {
import flash.utils.*;
public class MtRandom {
private var mti:uint;
private var mt:Array;
public static var MATRIX_A:uint = 2567483615;
public static var UPPER_MASK:uint = 2147483648;
public static var LOWER_MASK:uint = 2147483647;
public static var M:int = 397;
public static var N:int = 624;
private static var mag01:Array = [uint(0), uint(MATRIX_A)];
public function MtRandom(_arg1:uint=0){
mti = (N + 1);
super();
if (_arg1 == 0){
_arg1 = getTimer();
};
mt = new Array(N);
init_genrand(_arg1);
}
private function genrand_int32():uint{
var _local1:Number;
var _local2:uint;
if (mti >= N){
if (mti == (N + 1)){
init_genrand(5489);
};
_local2 = 0;
while (_local2 < (N - M)) {
_local1 = ((mt[_local2] & UPPER_MASK) | (mt[(_local2 + 1)] & LOWER_MASK));
mt[_local2] = ((mt[(_local2 + M)] ^ (_local1 >>> 1)) ^ mag01[uint((_local1 & 1))]);
_local2++;
};
while (_local2 < (N - 1)) {
_local1 = ((mt[_local2] & UPPER_MASK) | (mt[(_local2 + 1)] & LOWER_MASK));
mt[_local2] = ((mt[(_local2 + (M - N))] ^ (_local1 >>> 1)) ^ mag01[uint((_local1 & 1))]);
_local2++;
};
_local1 = ((mt[(N - 1)] & UPPER_MASK) | (mt[0] & LOWER_MASK));
mt[(N - 1)] = ((mt[(M - 1)] ^ (_local1 >>> 1)) ^ mag01[uint((_local1 & 1))]);
mti = 0;
};
_local1 = mt[mti++];
_local1 = (_local1 ^ (_local1 >>> 11));
_local1 = (_local1 ^ ((_local1 << 7) & 2636928640));
_local1 = (_local1 ^ ((_local1 << 15) & 4022730752));
_local1 = (_local1 ^ (_local1 >>> 18));
return (uint(_local1));
}
private function next(_arg1:uint):uint{
return ((genrand_int32() & ((uint(1) << _arg1) - uint(1))));
}
private function init_genrand(_arg1:uint){
var _local2:uint;
var _local3:uint;
mt[0] = uint(_arg1);
mti = 1;
while (mti < N) {
_local2 = (mt[(mti - 1)] ^ (mt[(mti - 1)] >>> 30));
_local3 = uint((_local2 * 1289));
_local3 = uint((_local3 * 1406077));
_local3 = uint((_local3 + mti));
mt[mti] = _local3;
mti++;
};
}
public function nextFloat():Number{
return ((next(24) / 16777216));
}
public function setSeed(_arg1:uint):void{
init_genrand(_arg1);
}
public function nextDouble():Number{
return ((next(24) / 16777216));
}
public function nextInt(_arg1:uint):uint{
return (((genrand_int32() & 2147483647) % _arg1));
}
}
}//package math
Section 61
//XPMath (math.XPMath)
package math {
public class XPMath {
public static function sin(_arg1:Number):Number{
_arg1 = (_arg1 - 1.5707963267949);
var _local2:* = 0;
var _local3:* = ((_arg1 > 0)) ? _arg1 : -(_arg1);
if (_local3 >= (12.5663706143592 + 1.5707963267949)){
_local2 = int((_local3 * 0.636619772367581));
if ((_local2 & 1) != 0){
_local2++;
};
_local3 = (_local3 - (_local2 * 1.5707963267949));
} else {
if (_local3 < 1.5707963267949){
} else {
if (_local3 < (1.5707963267949 + 3.14159265358979)){
_local3 = (_local3 - 3.14159265358979);
_local2 = 2;
} else {
if (_local3 < (6.28318530717959 + 1.5707963267949)){
_local3 = (_local3 - 6.28318530717959);
} else {
if (_local3 < (9.42477796076938 + 1.5707963267949)){
_local3 = (_local3 - 9.42477796076938);
_local2 = 2;
} else {
_local3 = (_local3 - 12.5663706143592);
};
};
};
};
};
var _local4:* = (_local3 * _local3);
var _local5:* = (0.999999953027512 + (_local4 * (-0.499999047777921 + (_local4 * (0.041663573160188 + (_local4 * (-0.0013853629536173 + (_local4 * 2.31524166599385E-5))))))));
return ((((_local2 & 2))!=0) ? -(_local5) : _local5);
}
public static function atan2(_arg1:Number, _arg2:Number):Number{
var _local5:Number;
var _local3:Number = 3.14159265358979;
var _local4:Number = 1.5707963267949;
if (_arg2 == 0){
if (_arg1 > 0){
return (_local4);
};
if (_arg1 == 0){
return (0);
};
return (-(_local4));
};
var _local6:Number = (_arg1 / _arg2);
if (Math.abs(_local6) < 1){
_local5 = (_local6 / (1 + ((0.28 * _local6) * _local6)));
if (_arg2 < 0){
if (_arg1 < 0){
return ((_local5 - _local3));
};
return ((_local5 + _local3));
};
} else {
_local5 = (_local4 - (_local6 / ((_local6 * _local6) + 0.28)));
if (_arg1 < 0){
return ((_local5 - _local3));
};
};
return (_local5);
}
public static function cos(_arg1:Number):Number{
var _local2:* = 0;
var _local3:* = ((_arg1 > 0)) ? _arg1 : -(_arg1);
var _local4:* = 1.5707963267949;
if (_local3 >= (12.5663706143592 + _local4)){
_local2 = int((_local3 * 0.636619772367581));
if ((_local2 & 1) != 0){
_local2++;
};
_local3 = (_local3 - (_local2 * _local4));
} else {
if (_local3 < _local4){
} else {
if (_local3 < (_local4 + 3.14159265358979)){
_local3 = (_local3 - 3.14159265358979);
_local2 = 2;
} else {
if (_local3 < (6.28318530717959 + _local4)){
_local3 = (_local3 - 6.28318530717959);
} else {
if (_local3 < (9.42477796076938 + _local4)){
_local3 = (_local3 - 9.42477796076938);
_local2 = 2;
} else {
_local3 = (_local3 - 12.5663706143592);
};
};
};
};
};
var _local5:* = (_local3 * _local3);
var _local6:* = (0.999999953027512 + (_local5 * (-0.499999047777921 + (_local5 * (0.041663573160188 + (_local5 * (-0.0013853629536173 + (_local5 * 2.31524166599385E-5))))))));
return ((((_local2 & 2))!=0) ? -(_local6) : _local6);
}
}
}//package math
Section 62
//ManagedSound (sfx.ManagedSound)
package sfx {
import flash.media.*;
public class ManagedSound {
public var activeSounds:Array;
private var manager:SoundManager;
private var ClassReference:Class;
public function ManagedSound(_arg1:SoundManager, _arg2:Class){
activeSounds = new Array();
super();
this.manager = _arg1;
this.ClassReference = _arg2;
}
public function stop():void{
var _local1:int;
while (_local1 < activeSounds.length) {
activeSounds[_local1].stop();
_local1++;
};
}
public function play(_arg1:Number=1, _arg2:Number=0):ManagedSoundChannel{
if (manager.isMuted){
return (new ManagedSoundChannel(manager, this, null));
};
var _local3:SoundChannel = new ClassReference().play(0, 0, new SoundTransform(_arg1, _arg2));
return (new ManagedSoundChannel(manager, this, _local3));
}
public function loop(_arg1:Number=1, _arg2:Number=0):ManagedSoundChannel{
var _local3:SoundChannel = new ClassReference().play(0, 999999999, new SoundTransform(_arg1, _arg2));
return (new ManagedSoundChannel(manager, this, _local3));
}
public function fadeToAndStop(_arg1:Number, _arg2:int):void{
var _local3:int;
while (_local3 < activeSounds.length) {
activeSounds[_local3].fadeToAndStop(_arg1, _arg2);
_local3++;
};
}
public function isPlaying():Boolean{
return ((activeSounds.length > 0));
}
public function update():void{
var _local1:int;
while (_local1 < activeSounds.length) {
activeSounds[_local1].update();
_local1++;
};
}
public function fadeTo(_arg1:Number, _arg2:int):void{
var _local3:int;
while (_local3 < activeSounds.length) {
activeSounds[_local3].fadeTo(_arg1, _arg2);
_local3++;
};
}
public function panTo(_arg1:Number, _arg2:int):void{
var _local3:int;
while (_local3 < activeSounds.length) {
activeSounds[_local3].panTo(_arg1, _arg2);
_local3++;
};
}
public function setPan(_arg1:Number):void{
var _local2:int;
while (_local2 < activeSounds.length) {
activeSounds[_local2].setPan(_arg1);
_local2++;
};
}
public function setVolume(_arg1:Number):void{
var _local2:int;
while (_local2 < activeSounds.length) {
activeSounds[_local2].setVolume(_arg1);
_local2++;
};
}
}
}//package sfx
Section 63
//ManagedSoundChannel (sfx.ManagedSoundChannel)
package sfx {
import flash.media.*;
import flash.events.*;
import flash.utils.*;
public class ManagedSoundChannel {
private var fadeStartVolume:Number;// = -1
private var channel:SoundChannel;
private var fadeEndVolume:Number;// = -1
private var targetVolume:Number;
private var targetPan:Number;
private var sound:ManagedSound;
private var stopAfterFade:Boolean;// = false
private var panEndTime:int;// = -1
private var fadeEndTime:int;// = -1
private var manager:SoundManager;
private var playing:Boolean;// = true
private var panStartTime:int;// = -1
private var fadeStartTime:int;// = -1
private var panEndVolume:Number;// = -1
private var panStartVolume:Number;// = -1
public function ManagedSoundChannel(_arg1:SoundManager, _arg2:ManagedSound, _arg3:SoundChannel){
this.manager = _arg1;
this.sound = _arg2;
this.channel = _arg3;
_arg2.activeSounds.push(this);
if (_arg3 == null){
soundComplete(null);
return;
};
_arg3.addEventListener(Event.SOUND_COMPLETE, soundComplete);
targetVolume = _arg3.soundTransform.volume;
targetPan = _arg3.soundTransform.pan;
update();
}
public function stop():void{
if (!playing){
return;
};
if (channel == null){
return;
};
channel.stop();
soundComplete(null);
}
public function update():void{
var _local1:Number;
if (!playing){
return;
};
if (fadeStartTime >= 0){
_local1 = ((getTimer() - fadeStartTime) / (fadeEndTime - fadeStartTime));
if (_local1 < 0){
_local1 = 0;
};
if (_local1 > 1){
_local1 = 1;
};
targetVolume = (fadeStartVolume + ((fadeEndVolume - fadeStartVolume) * _local1));
targetVolume = (targetVolume * targetVolume);
if (_local1 == 1){
fadeStartTime = -1;
};
if ((((_local1 == 1)) && (stopAfterFade))){
stop();
};
};
if (panStartTime >= 0){
_local1 = ((getTimer() - panStartTime) / (panEndTime - panStartTime));
if (_local1 < 0){
_local1 = 0;
};
if (_local1 > 1){
_local1 = 1;
};
targetPan = (panStartVolume + ((panEndVolume - panStartVolume) * _local1));
if (_local1 == 1){
panStartTime = -1;
};
};
var _local2:Number = (targetVolume * manager.volume);
var _local3:Number = targetPan;
if (channel == null){
return;
};
if (((!((_local2 == channel.soundTransform.volume))) || (!((_local3 == channel.soundTransform.pan))))){
channel.soundTransform = new SoundTransform(_local2, _local3);
};
}
public function panTo(_arg1:Number, _arg2:Number):void{
if (!playing){
return;
};
panStartVolume = targetPan;
panEndVolume = _arg1;
panStartTime = getTimer();
panEndTime = (getTimer() + _arg2);
}
public function fadeTo(_arg1:Number, _arg2:Number):void{
if (!playing){
return;
};
fadeStartVolume = Math.sqrt(targetVolume);
fadeEndVolume = Math.sqrt(_arg1);
fadeStartTime = getTimer();
fadeEndTime = (getTimer() + _arg2);
stopAfterFade = false;
}
public function setPan(_arg1:Number):void{
if (!playing){
return;
};
if (channel == null){
return;
};
channel.soundTransform.pan = _arg1;
panStartTime = -1;
update();
}
public function fadeToAndStop(_arg1:Number, _arg2:Number):void{
if (!playing){
return;
};
fadeTo(_arg1, _arg2);
stopAfterFade = true;
}
public function setVolume(_arg1:Number):void{
if (!playing){
return;
};
stopAfterFade = false;
this.targetVolume = _arg1;
fadeStartTime = -1;
update();
}
public function soundComplete(_arg1:Event):void{
if (!playing){
return;
};
sound.activeSounds.splice(sound.activeSounds.indexOf(this), 1);
playing = false;
}
public function isPlaying():Boolean{
return (playing);
}
}
}//package sfx
Section 64
//SoundManager (sfx.SoundManager)
package sfx {
import flash.utils.*;
public class SoundManager {
private var fadeStartVolume:Number;// = -1
public var isMuted:Boolean;// = false
private var managedSounds:Array;
private var lastTime:int;// = -1
private var managedSoundMap:Object;
private var fadeStartTime:int;// = -1
private var fadeEndVolume:Number;// = -1
public var volume:Number;// = 1
private var fadeEndTime:int;// = -1
public function SoundManager(){
managedSoundMap = new Object();
managedSounds = new Array();
super();
}
public function update():void{
var _local3:Number;
var _local1:int = getTimer();
if (lastTime < 0){
lastTime = _local1;
};
if (fadeStartTime >= 0){
_local3 = ((_local1 - fadeStartTime) / (fadeEndTime - fadeStartTime));
if (_local3 < 0){
_local3 = 0;
};
if (_local3 > 1){
_local3 = 1;
};
volume = (fadeStartVolume + ((fadeEndVolume - fadeStartVolume) * _local3));
volume = (volume * volume);
if (_local3 == 1){
fadeStartTime = -1;
};
};
var _local2:int;
while (_local2 < managedSounds.length) {
managedSounds[_local2].update();
_local2++;
};
}
public function stopAll():void{
var _local1:int;
while (_local1 < managedSounds.length) {
managedSounds[_local1].stop();
_local1++;
};
}
public function get(_arg1:String):ManagedSound{
var _local2:Class;
if (managedSoundMap[_arg1] == null){
_local2 = (getDefinitionByName(("sound." + _arg1)) as Class);
if (_local2 == null){
throw (new Error((("Failed to find sound [sound." + _arg1) + "]")));
};
managedSoundMap[_arg1] = new ManagedSound(this, _local2);
managedSounds.push(managedSoundMap[_arg1]);
};
return (managedSoundMap[_arg1]);
}
public function fadeTo(_arg1:Number, _arg2:int):void{
fadeStartVolume = Math.sqrt(volume);
fadeEndVolume = Math.sqrt(_arg1);
fadeStartTime = getTimer();
fadeEndTime = (getTimer() + _arg2);
}
public function setVolume(_arg1:Number):void{
isMuted = (_arg1 == 0);
this.volume = _arg1;
fadeStartTime = -1;
}
}
}//package sfx
Section 65
//ambience0 (sound.ambience0)
package sound {
import flash.media.*;
public dynamic class ambience0 extends Sound {
}
}//package sound
Section 66
//ambience1 (sound.ambience1)
package sound {
import flash.media.*;
public dynamic class ambience1 extends Sound {
}
}//package sound
Section 67
//ambience2 (sound.ambience2)
package sound {
import flash.media.*;
public dynamic class ambience2 extends Sound {
}
}//package sound
Section 68
//ambience3 (sound.ambience3)
package sound {
import flash.media.*;
public dynamic class ambience3 extends Sound {
}
}//package sound
Section 69
//bonus_end_bad (sound.bonus_end_bad)
package sound {
import flash.media.*;
public dynamic class bonus_end_bad extends Sound {
}
}//package sound
Section 70
//bonus_end_good (sound.bonus_end_good)
package sound {
import flash.media.*;
public dynamic class bonus_end_good extends Sound {
}
}//package sound
Section 71
//bonus_loop1 (sound.bonus_loop1)
package sound {
import flash.media.*;
public dynamic class bonus_loop1 extends Sound {
}
}//package sound
Section 72
//bonus_loop2 (sound.bonus_loop2)
package sound {
import flash.media.*;
public dynamic class bonus_loop2 extends Sound {
}
}//package sound
Section 73
//bonus_loop3 (sound.bonus_loop3)
package sound {
import flash.media.*;
public dynamic class bonus_loop3 extends Sound {
}
}//package sound
Section 74
//bonus_start (sound.bonus_start)
package sound {
import flash.media.*;
public dynamic class bonus_start extends Sound {
}
}//package sound
Section 75
//bonus_time_warning (sound.bonus_time_warning)
package sound {
import flash.media.*;
public dynamic class bonus_time_warning extends Sound {
}
}//package sound
Section 76
//bonusdrop (sound.bonusdrop)
package sound {
import flash.media.*;
public dynamic class bonusdrop extends Sound {
}
}//package sound
Section 77
//bubble_appear (sound.bubble_appear)
package sound {
import flash.media.*;
public dynamic class bubble_appear extends Sound {
}
}//package sound
Section 78
//burst (sound.burst)
package sound {
import flash.media.*;
public dynamic class burst extends Sound {
}
}//package sound
Section 79
//counter (sound.counter)
package sound {
import flash.media.*;
public dynamic class counter extends Sound {
}
}//package sound
Section 80
//explosion (sound.explosion)
package sound {
import flash.media.*;
public dynamic class explosion extends Sound {
}
}//package sound
Section 81
//intro (sound.intro)
package sound {
import flash.media.*;
public dynamic class intro extends Sound {
}
}//package sound
Section 82
//jewel1 (sound.jewel1)
package sound {
import flash.media.*;
public dynamic class jewel1 extends Sound {
}
}//package sound
Section 83
//jewel2 (sound.jewel2)
package sound {
import flash.media.*;
public dynamic class jewel2 extends Sound {
}
}//package sound
Section 84
//jewel3 (sound.jewel3)
package sound {
import flash.media.*;
public dynamic class jewel3 extends Sound {
}
}//package sound
Section 85
//loop_bonus (sound.loop_bonus)
package sound {
import flash.media.*;
public dynamic class loop_bonus extends Sound {
}
}//package sound
Section 86
//loop_game (sound.loop_game)
package sound {
import flash.media.*;
public dynamic class loop_game extends Sound {
}
}//package sound
Section 87
//monkey_jump_down (sound.monkey_jump_down)
package sound {
import flash.media.*;
public dynamic class monkey_jump_down extends Sound {
}
}//package sound
Section 88
//monkey_jump_up (sound.monkey_jump_up)
package sound {
import flash.media.*;
public dynamic class monkey_jump_up extends Sound {
}
}//package sound
Section 89
//outro (sound.outro)
package sound {
import flash.media.*;
public dynamic class outro extends Sound {
}
}//package sound
Section 90
//scream (sound.scream)
package sound {
import flash.media.*;
public dynamic class scream extends Sound {
}
}//package sound
Section 91
//shot1 (sound.shot1)
package sound {
import flash.media.*;
public dynamic class shot1 extends Sound {
}
}//package sound
Section 92
//shot2 (sound.shot2)
package sound {
import flash.media.*;
public dynamic class shot2 extends Sound {
}
}//package sound
Section 93
//shot3 (sound.shot3)
package sound {
import flash.media.*;
public dynamic class shot3 extends Sound {
}
}//package sound
Section 94
//shot4 (sound.shot4)
package sound {
import flash.media.*;
public dynamic class shot4 extends Sound {
}
}//package sound
Section 95
//sign_appear (sound.sign_appear)
package sound {
import flash.media.*;
public dynamic class sign_appear extends Sound {
}
}//package sound
Section 96
//statue_lands (sound.statue_lands)
package sound {
import flash.media.*;
public dynamic class statue_lands extends Sound {
}
}//package sound
Section 97
//time_out (sound.time_out)
package sound {
import flash.media.*;
public dynamic class time_out extends Sound {
}
}//package sound
Section 98
//time_warning (sound.time_warning)
package sound {
import flash.media.*;
public dynamic class time_warning extends Sound {
}
}//package sound
Section 99
//IFloat (timing.IFloat)
package timing {
public class IFloat {
public var ivalue:Number;
private var lastValue:Number;
private static var alpha:Number;
public function IFloat(_arg1:Number){
ivalue = _arg1;
lastValue = _arg1;
alpha = 0;
}
public function get value():Number{
return ((lastValue + ((ivalue - lastValue) * alpha)));
}
public function set(_arg1:Number){
lastValue = ivalue;
ivalue = _arg1;
}
public function get(_arg1:Number){
return ((lastValue + ((ivalue - lastValue) * _arg1)));
}
public function set value(_arg1:Number):void{
ivalue = _arg1;
lastValue = _arg1;
}
public function setTo(_arg1:Number){
ivalue = _arg1;
lastValue = _arg1;
}
public function copyFrom(_arg1:IFloat):void{
ivalue = _arg1.ivalue;
lastValue = _arg1.lastValue;
}
public static function setAlpha(_arg1:Number):void{
alpha = _arg1;
}
}
}//package timing
Section 100
//Performance (timing.Performance)
package timing {
import flash.utils.*;
public class Performance {
private var period:Number;
private var totalFps:Number;
private var measurePeriod:Number;
private var updates:Number;
private var idealFps:Number;
private var lastFpsCount:Number;
private var nextFpsUpdate:Number;
private var fpsCount:Number;
private var periodFps:Number;
private var startAt:Number;
private var minPeriodFps:Number;
private var listeners:Array;
public function Performance(_arg1:Number){
this.idealFps = _arg1;
this.measurePeriod = 5;
this.minPeriodFps = ((_arg1 / 2) * measurePeriod);
this.listeners = [];
begin();
}
public function setFpsThreshold(_arg1:Number, _arg2:Number):void{
this.minPeriodFps = (_arg1 * _arg2);
this.measurePeriod = _arg2;
}
public function frameUpdated():void{
var _local2:*;
fpsCount++;
var _local1:* = getTimer();
if (startAt < 0){
startAt = _local1;
};
if (_local1 > nextFpsUpdate){
if (updates > 0){
lastFpsCount = fpsCount;
totalFps = (totalFps + fpsCount);
};
periodFps = (periodFps + fpsCount);
if (++period == measurePeriod){
if (periodFps < minPeriodFps){
for (_local2 in listeners) {
var _local5 = listeners;
_local5[_local2]((periodFps / measurePeriod));
};
};
period = 0;
periodFps = 0;
};
nextFpsUpdate = (_local1 + 1000);
fpsCount = 0;
updates++;
};
}
public function get averageFps():Number{
return ((totalFps / ((getTimer() - startAt) / 1000)));
}
public function addQualityFeedbackListener(_arg1:Function):void{
listeners.push(_arg1);
}
public function begin():void{
startAt = -1;
period = -1;
nextFpsUpdate = getTimer();
totalFps = 0;
fpsCount = 0;
lastFpsCount = -1;
periodFps = 0;
updates = 0;
}
public function get fps():int{
return (lastFpsCount);
}
}
}//package timing
Section 101
//Timeable (timing.Timeable)
package timing {
public interface Timeable {
function tick(_arg1:int):void;
function render(_arg1:int, _arg2:Number):void;
}
}//package timing
Section 102
//Timer (timing.Timer)
package timing {
import flash.utils.*;
public class Timer {
private var unprocessedTime:Number;// = 0
private var lastTime:Number;// = 0
private var millisPerGameTick:Number;// = 0
private var timeable:Timeable;
private var maxTickTime:Number;// = -1
private var startTime:Number;// = -1
private var time:Number;// = 0
private var tick:Number;// = 0
public function Timer(_arg1:Timeable, _arg2:Number){
millisPerGameTick = (1000 / _arg2);
this.timeable = _arg1;
this.maxTickTime = 500;
}
public function getMillisPerTick():Number{
return (millisPerGameTick);
}
public function advanceTime2():void{
var _local4:*;
var _local1:* = getTimer();
if (startTime < 0){
startTime = _local1;
unprocessedTime = millisPerGameTick;
};
time = (_local1 - startTime);
var _local2:* = (time - lastTime);
lastTime = time;
unprocessedTime = (unprocessedTime + _local2);
if (unprocessedTime >= millisPerGameTick){
_local4 = (maxTickTime + _local1);
do {
timeable.tick(tick);
tick++;
unprocessedTime = (unprocessedTime - millisPerGameTick);
} while ((((unprocessedTime >= millisPerGameTick)) && ((getTimer() < _local4))));
};
var _local3:Number = ((unprocessedTime % millisPerGameTick) / millisPerGameTick);
IFloat.setAlpha(_local3);
timeable.render(tick, _local3);
}
public function advanceTime(){
time = getTimer();
var _local1:* = (time - lastTime);
lastTime = time;
unprocessedTime = (unprocessedTime + _local1);
var _local2:Number = 0;
while (unprocessedTime > millisPerGameTick) {
unprocessedTime = (unprocessedTime - millisPerGameTick);
timeable.tick(tick);
tick++;
_local2++;
if (_local2 >= 10){
unprocessedTime = 0;
};
};
var _local3:Number = (unprocessedTime / millisPerGameTick);
IFloat.setAlpha(_local3);
timeable.render(tick, _local3);
}
public function setMaxTickTime(_arg1:Number):void{
maxTickTime = _arg1;
}
}
}//package timing
Section 103
//Numbers (util.Numbers)
package util {
public class Numbers {
public static function dec2hex(_arg1:Number, _arg2:Boolean):String{
var _local3:* = "";
while (_arg1 != 0) {
_local3 = ("0123456789abcdef".charAt((_arg1 & 15)) + _local3);
_arg1 = (_arg1 >>> 4);
};
if (_arg2){
if (_local3.length == 0){
_local3 = "00";
};
if (_local3.length < 2){
_local3 = ("0" + _local3);
};
} else {
if (_local3.length == 0){
_local3 = "0";
};
};
return (_local3);
}
public static function itoa(_arg1:Number, _arg2:Number):String{
var _local4:*;
var _local3:String = ("" + _arg1);
if (_arg2){
_local4 = (_arg2 - 1);
while (_local4 > 0) {
if (_arg1 < Math.pow(10, _local4)){
_local3 = ("0" + _local3);
};
_local4--;
};
};
return (_local3);
}
public static function asTime(_arg1:Number, _arg2:Boolean, _arg3:Boolean){
if (_arg2){
_arg3 = true;
};
if (_arg1 < 0){
_arg1 = 0;
};
_arg1 = (_arg1 / 1000);
_arg1 = Math.floor(_arg1);
var _local4:Number = Math.floor((_arg1 / 3600));
var _local5:Number = (Math.floor((_arg1 / 60)) % 60);
var _local6:Number = (_arg1 % 60);
var _local7 = "";
if (((_arg2) || ((_local4 > 0)))){
_local7 = (_local7 + itoa(_local4, 2));
};
if (((_arg2) || ((_local7.length > 0)))){
_local7 = (_local7 + ":");
};
var _local8:Number = _local7.length;
if (((((_arg3) || ((_local5 > 0)))) || ((_local4 > 0)))){
_local7 = (_local7 + itoa(_local5, 2));
};
if (((_arg3) || (!((_local7.length == _local8))))){
_local7 = (_local7 + ":");
};
return ((_local7 + itoa(_local6, 2)));
}
}
}//package util
Section 104
//Stats (util.Stats)
package util {
import flash.display.*;
import flash.text.*;
import flash.events.*;
import flash.geom.*;
import flash.utils.*;
import flash.system.*;
public class Stats extends Sprite {
private var timer:int;
private var graph:BitmapData;
private var mem:Number;// = 0
private var memText:TextField;
private var ver:Sprite;
private var fps:int;
private var ms:int;
private var rectangle:Rectangle;
private var verText:TextField;
private var msText:TextField;
private var fpsText:TextField;
private var format:TextFormat;
private var msPrev:int;// = 0
public function Stats():void{
addEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
}
private function onMouseOver(_arg1:MouseEvent):void{
ver.visible = true;
}
private function onRemovedFromStage(_arg1:Event):void{
removeEventListener(MouseEvent.CLICK, onClick);
removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
removeEventListener(Event.ENTER_FRAME, update);
}
private function update(_arg1:Event):void{
var _local2:int;
var _local3:Number;
timer = getTimer();
fps++;
if ((timer - 1000) > msPrev){
msPrev = timer;
mem = Number((System.totalMemory * 9.54E-7).toFixed(3));
_local2 = Math.min(50, ((50 / stage.frameRate) * fps));
_local3 = (Math.min(50, Math.sqrt(Math.sqrt((mem * 5000)))) - 2);
graph.scroll(1, 0);
graph.fillRect(rectangle, 2147483699);
graph.setPixel32(0, (graph.height - _local2), 0xFFFF00);
graph.setPixel32(0, (graph.height - ((timer - ms) >> 1)), 0xFF00);
graph.setPixel32(0, (graph.height - _local3), 0xFFFF);
fpsText.text = ((("FPS: " + fps) + " / ") + stage.frameRate);
memText.text = ("MEM: " + mem);
fps = 0;
};
msText.text = ("MS: " + (timer - ms));
ms = timer;
}
private function init(_arg1:Event):void{
x = 5;
y = 5;
removeEventListener(Event.ADDED_TO_STAGE, init);
graphics.beginFill(51, 0.5);
graphics.drawRect(0, 0, 72, 40);
graphics.endFill();
ver = new Sprite();
ver.graphics.beginFill(51, 0.5);
ver.graphics.drawRect(0, 0, 72, 30);
ver.graphics.endFill();
ver.y = 90;
ver.visible = false;
addChild(ver);
verText = new TextField();
fpsText = new TextField();
msText = new TextField();
memText = new TextField();
format = new TextFormat("_sans", 9);
verText.defaultTextFormat = (fpsText.defaultTextFormat = (msText.defaultTextFormat = (memText.defaultTextFormat = format)));
verText.width = (fpsText.width = (msText.width = (memText.width = 72)));
verText.selectable = (fpsText.selectable = (msText.selectable = (memText.selectable = false)));
verText.textColor = 0xFFFFFF;
verText.text = ((Capabilities.version.split(" ")[0] + "\n") + Capabilities.version.split(" ")[1]);
ver.addChild(verText);
fpsText.textColor = 0xFFFF00;
fpsText.text = "FPS: ";
addChild(fpsText);
msText.y = 10;
msText.textColor = 0xFF00;
msText.text = "MS: ";
addChild(msText);
memText.y = 20;
memText.textColor = 0xFFFF;
memText.text = "MEM: ";
addChild(memText);
graph = new BitmapData(72, 50, true, 2147483699);
var _local2:Bitmap = new Bitmap(graph);
_local2.y = 40;
addChild(_local2);
rectangle = new Rectangle(0, 0, 1, graph.height);
}
private function onMouseOut(_arg1:MouseEvent):void{
ver.visible = false;
}
private function onAddedToStage(_arg1:Event):void{
addEventListener(MouseEvent.CLICK, onClick);
addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
addEventListener(Event.ENTER_FRAME, update);
}
private function onClick(_arg1:MouseEvent):void{
if (mouseY > (height * 0.35)){
stage.frameRate--;
} else {
stage.frameRate++;
};
fpsText.text = ((("FPS: " + fps) + " / ") + stage.frameRate);
}
}
}//package util
Section 105
//aim_cursor (aim_cursor)
package {
import junglebubble.*;
public dynamic class aim_cursor extends AimCursor {
}
}//package
Section 106
//bomblauncher (bomblauncher)
package {
import junglebubble.*;
public dynamic class bomblauncher extends BombLauncher {
}
}//package
Section 107
//bonus_bubble (bonus_bubble)
package {
import anim.*;
public dynamic class bonus_bubble extends PausedLoopingFlare30Fps {
}
}//package
Section 108
//bonus_sign (bonus_sign)
package {
import junglebubble.*;
public dynamic class bonus_sign extends BonusSign {
}
}//package
Section 109
//bonus_sign_bubbles (bonus_sign_bubbles)
package {
import anim.*;
public dynamic class bonus_sign_bubbles extends PausedLoopingFlare30Fps {
}
}//package
Section 110
//bonusmode_stars (bonusmode_stars)
package {
import anim.*;
public dynamic class bonusmode_stars extends PausedSingleFlare30Fps {
}
}//package
Section 111
//bubblelauncherunder (bubblelauncherunder)
package {
import junglebubble.*;
public dynamic class bubblelauncherunder extends BubbleLauncher {
}
}//package
Section 112
//bubbleshooter (bubbleshooter)
package {
import junglebubble.*;
public dynamic class bubbleshooter extends BubbleLauncher {
}
}//package
Section 113
//buskar (buskar)
package {
import anim.*;
public dynamic class buskar extends PausedLoopingFlare30Fps {
}
}//package
Section 114
//CursorLine (CursorLine)
package {
import flash.display.*;
public dynamic class CursorLine extends MovieClip {
}
}//package
Section 115
//dustcloud (dustcloud)
package {
import anim.*;
public dynamic class dustcloud extends AutoSingleFlare30Fps {
}
}//package
Section 116
//dynamite_explosion (dynamite_explosion)
package {
import anim.*;
public dynamic class dynamite_explosion extends PausedSingleFlare30Fps {
}
}//package
Section 117
//ErrorSymbol (ErrorSymbol)
package {
import flash.display.*;
public dynamic class ErrorSymbol extends MovieClip {
}
}//package
Section 118
//gameover_scorepop (gameover_scorepop)
package {
import anim.*;
public dynamic class gameover_scorepop extends PausedSingleFlare30Fps {
}
}//package
Section 119
//instructions_1 (instructions_1)
package {
import anim.*;
public dynamic class instructions_1 extends PausedLoopingFlare30Fps {
}
}//package
Section 120
//instructions_2 (instructions_2)
package {
import anim.*;
public dynamic class instructions_2 extends PausedLoopingFlare30Fps {
}
}//package
Section 121
//jewels_big (jewels_big)
package {
import anim.*;
public dynamic class jewels_big extends AutoSingleFlare30Fps {
}
}//package
Section 122
//jewels_small (jewels_small)
package {
import anim.*;
public dynamic class jewels_small extends AutoSingleFlare30Fps {
}
}//package
Section 123
//MeterArrow (MeterArrow)
package {
import anim.*;
public dynamic class MeterArrow extends PausedLoopingFlare30Fps {
}
}//package
Section 124
//monkeyjump (monkeyjump)
package {
import anim.*;
public dynamic class monkeyjump extends AutoSingleFlare60Fps {
}
}//package
Section 125
//monkeyjump_2 (monkeyjump_2)
package {
import anim.*;
public dynamic class monkeyjump_2 extends AutoSingleFlare60Fps {
}
}//package
Section 126
//parrot (parrot)
package {
import anim.*;
public dynamic class parrot extends AutoLoopingFlare30Fps {
}
}//package
Section 127
//rank_blue_anim (rank_blue_anim)
package {
import anim.*;
public dynamic class rank_blue_anim extends PausedSingleFlare30Fps {
}
}//package
Section 128
//rank_gold_anim (rank_gold_anim)
package {
import anim.*;
public dynamic class rank_gold_anim extends PausedSingleFlare30Fps {
}
}//package
Section 129
//rank_green_anim (rank_green_anim)
package {
import anim.*;
public dynamic class rank_green_anim extends PausedSingleFlare30Fps {
}
}//package
Section 130
//rank_purple_anim (rank_purple_anim)
package {
import anim.*;
public dynamic class rank_purple_anim extends PausedSingleFlare30Fps {
}
}//package
Section 131
//rank_silver_anim (rank_silver_anim)
package {
import anim.*;
public dynamic class rank_silver_anim extends PausedSingleFlare30Fps {
}
}//package
Section 132
//rank_stone_anim (rank_stone_anim)
package {
import anim.*;
public dynamic class rank_stone_anim extends PausedSingleFlare30Fps {
}
}//package
Section 133
//RockExplosion (RockExplosion)
package {
import anim.*;
public dynamic class RockExplosion extends PausedSingleFlare30Fps {
}
}//package
Section 134
//RockExplosion2 (RockExplosion2)
package {
import anim.*;
public dynamic class RockExplosion2 extends PausedSingleFlare30Fps {
}
}//package
Section 135
//smoke_anim (smoke_anim)
package {
import anim.*;
public dynamic class smoke_anim extends PausedSingleFlare30Fps {
}
}//package
Section 136
//smoke_scorepop (smoke_scorepop)
package {
import anim.*;
public dynamic class smoke_scorepop extends PausedSingleFlare30Fps {
}
}//package
Section 137
//statue_animation (statue_animation)
package {
import junglebubble.*;
public dynamic class statue_animation extends Statue {
}
}//package
Section 138
//transform_animation (transform_animation)
package {
import anim.*;
public dynamic class transform_animation extends PausedSingleFlare30Fps {
}
}//package