Section 1
//KongregateEvent (com.kongregate.as3.client.events.KongregateEvent)
package com.kongregate.as3.client.events {
import flash.events.*;
public class KongregateEvent extends Event {
public static const COMPLETE:String = "component_api_available";
public function KongregateEvent(_arg1:String){
super(_arg1);
}
}
}//package com.kongregate.as3.client.events
Section 2
//AbstractShadowService (com.kongregate.as3.client.services.AbstractShadowService)
package com.kongregate.as3.client.services {
import flash.events.*;
public class AbstractShadowService extends EventDispatcher {
protected function alert(_arg1:String, _arg2:String, _arg3="", _arg4:String=""):void{
trace(((((((("Kongregate API: " + _arg1) + ".") + _arg2) + "(") + _arg3) + ") ") + _arg4));
}
}
}//package com.kongregate.as3.client.services
Section 3
//HighScoreServiceShadow (com.kongregate.as3.client.services.HighScoreServiceShadow)
package com.kongregate.as3.client.services {
public class HighScoreServiceShadow extends AbstractShadowService implements IHighScoreServices {
private var mode:String;
public function HighScoreServiceShadow(){
mode = "";
}
public function submit(_arg1:Number, _arg2:String=null):void{
alert("IHighScoreServices", "submit", arguments);
}
public function connect():Boolean{
alert("IKongregateServices", "connect");
return (true);
}
public function requestList(_arg1:Function):void{
alert("IHighScoreServices", "requestList", "", (("[Mode: " + mode) + "]"));
_arg1({success:false});
}
public function setMode(_arg1:String):void{
alert("IHighScoreServices", "setMode", arguments);
this.mode = _arg1;
}
}
}//package com.kongregate.as3.client.services
Section 4
//IHighScoreServices (com.kongregate.as3.client.services.IHighScoreServices)
package com.kongregate.as3.client.services {
public interface IHighScoreServices {
function setMode(_arg1:String):void;
function submit(_arg1:Number, _arg2:String=null):void;
function requestList(_arg1:Function):void;
}
}//package com.kongregate.as3.client.services
Section 5
//IKongregateServices (com.kongregate.as3.client.services.IKongregateServices)
package com.kongregate.as3.client.services {
import flash.events.*;
public interface IKongregateServices extends IEventDispatcher {
function getPlayerInfo(_arg1:Function):void;
function connect(_arg1:Number=-1):Boolean;
}
}//package com.kongregate.as3.client.services
Section 6
//IStatServices (com.kongregate.as3.client.services.IStatServices)
package com.kongregate.as3.client.services {
public interface IStatServices {
function submitArray(_arg1:Array):void;
function submit(_arg1:String, _arg2:Number):void;
}
}//package com.kongregate.as3.client.services
Section 7
//IUserServices (com.kongregate.as3.client.services.IUserServices)
package com.kongregate.as3.client.services {
public interface IUserServices {
function getName():String;
function getPlayerInfo(_arg1:Function):void;
}
}//package com.kongregate.as3.client.services
Section 8
//KongregateServiceShadow (com.kongregate.as3.client.services.KongregateServiceShadow)
package com.kongregate.as3.client.services {
public class KongregateServiceShadow extends AbstractShadowService implements IKongregateServices {
public function getName():String{
alert("IKongregateServices", "getName");
return ("Guest");
}
public function connect(_arg1:Number=-1):Boolean{
alert("IKongregateServices", "connect", arguments);
return (true);
}
public function getPlayerInfo(_arg1:Function):void{
alert("IKongregateServices", "getPlayerInfo");
_arg1(new Object());
}
}
}//package com.kongregate.as3.client.services
Section 9
//StatServiceShadow (com.kongregate.as3.client.services.StatServiceShadow)
package com.kongregate.as3.client.services {
public class StatServiceShadow extends AbstractShadowService implements IStatServices {
public function submitArray(_arg1:Array):void{
alert("IStatServices", "submitArray", arguments);
}
public function submit(_arg1:String, _arg2:Number):void{
alert("IStatServices", "submitStat", arguments);
}
}
}//package com.kongregate.as3.client.services
Section 10
//UserServiceShadow (com.kongregate.as3.client.services.UserServiceShadow)
package com.kongregate.as3.client.services {
public class UserServiceShadow extends AbstractShadowService implements IUserServices {
public function getName():String{
alert("UserService", "getName");
return ("Guest");
}
public function getPlayerInfo(_arg1:Function):void{
alert("UserService", "getPlayerInfo");
_arg1({isGuest:true, name:"Guest", points:0, level:0, isMode:false, isAdmin:false, isDeveloper:false, avatarPath:"", chatAvatarPath:""});
}
}
}//package com.kongregate.as3.client.services
Section 11
//IAPIBootstrap (com.kongregate.as3.client.IAPIBootstrap)
package com.kongregate.as3.client {
import flash.events.*;
import flash.display.*;
public interface IAPIBootstrap {
function init(_arg1:Event=null, _arg2:Stage=null):void;
function hideLog():void;
function showLog(_arg1:int=0):void;
}
}//package com.kongregate.as3.client
Section 12
//KongregateAPI (com.kongregate.as3.client.KongregateAPI)
package com.kongregate.as3.client {
import flash.events.*;
import com.kongregate.as3.client.services.*;
import flash.display.*;
import flash.utils.*;
import flash.system.*;
import com.kongregate.as3.client.events.*;
import flash.net.*;
import flash.errors.*;
public class KongregateAPI extends Sprite {
private const VERSION:Number = 1;
private var loader:Loader;
private var loadedDomain:ApplicationDomain;
private static const CLASS_USER:String = "com.kongregate.as3.client.services.UserServices";
private static const CLASS_STATS:String = "com.kongregate.as3.client.services.StatServices";
private static const CLASS_SERVICES:String = "com.kongregate.as3.client.services.KongregateServices";
private static const CLASS_SCORES:String = "com.kongregate.as3.client.services.HighScoreServices";
private static const DEBUG_API_URL:String = "//Linuxpc/kongregate/public/flash/API_AS3.swf";
private static var _connected:Boolean;
private static var kUser:IUserServices;
private static var _loaded:Boolean;
private static var kServices:IKongregateServices;
private static var kScores:IHighScoreServices;
private static var mInstance:KongregateAPI;
private static var kStats:IStatServices;
private static var kAPI:IAPIBootstrap;
public function KongregateAPI(){
if (mInstance != null){
throw (new Error("Warning: KongregateAPI has been added to stage more than once or accessed improperly. Use getInstance() or a stage reference to access."));
};
mInstance = this;
this.addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
}
public function get loaded():Boolean{
return (_loaded);
}
public function get connected():Boolean{
return (_connected);
}
private function alertConnected(_arg1:TimerEvent=null):void{
var _local2:KongregateEvent;
var _local3:Boolean;
_local2 = new KongregateEvent(KongregateEvent.COMPLETE);
_local3 = this.dispatchEvent(_local2);
}
private function init(_arg1:Event):void{
var _local2:Object;
var _local3:String;
var _local4:URLRequest;
var _local5:LoaderContext;
this.removeEventListener(Event.ADDED_TO_STAGE, init);
_loaded = false;
_connected = false;
_local2 = LoaderInfo(root.loaderInfo).parameters;
_local3 = _local2.api_path;
if (_local3 == null){
trace("Alert: Kongregate API could not be loaded, due to local testing. API will load when the game is uploaded.");
createShadowServices();
return;
};
Security.allowDomain("*.kongregate.com");
Security.allowDomain("kongregatetrunk.com");
_local4 = new URLRequest(_local3);
_local5 = new LoaderContext(false);
_local5.applicationDomain = ApplicationDomain.currentDomain;
_local5.securityDomain = SecurityDomain.currentDomain;
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.load(_local4, _local5);
}
public function get api():IAPIBootstrap{
return (kAPI);
}
private function loadComplete(_arg1:Event):void{
getServices();
}
public function get scores():IHighScoreServices{
return (kScores);
}
private function ioErrorHandler(_arg1:IOErrorEvent):void{
throw (new IOError(("API file not found. " + _arg1)));
}
public function get services():IKongregateServices{
return (kServices);
}
public function get stats():IStatServices{
return (kStats);
}
private function createShadowServices():void{
var _local1:Timer;
trace(">>> Kongregate Shadow Services instantiated for local development..");
kServices = new KongregateServiceShadow();
kScores = new HighScoreServiceShadow();
kStats = new StatServiceShadow();
kUser = new UserServiceShadow();
_local1 = new Timer(200, 1);
_local1.addEventListener(TimerEvent.TIMER_COMPLETE, alertConnected);
_local1.start();
_connected = true;
}
public function get user():IUserServices{
return (kUser);
}
private function getServices():void{
var _local1:ApplicationDomain;
var _local2:*;
var _local3:*;
var _local4:*;
var _local5:*;
_local1 = ApplicationDomain.currentDomain;
kAPI = IAPIBootstrap(loader.getChildAt(0));
this.addChild(loader);
_local2 = _local1.getDefinition(CLASS_SERVICES);
trace(_local2);
kServices = _local2.getInstance();
_local3 = _local1.getDefinition(CLASS_SCORES);
kScores = _local3.getInstance();
_local4 = _local1.getDefinition(CLASS_STATS);
kStats = _local4.getInstance();
_local5 = _local1.getDefinition(CLASS_USER);
kUser = _local5.getInstance();
kServices.connect(VERSION);
_loaded = true;
_connected = true;
alertConnected();
}
public static function getInstance():KongregateAPI{
if (!mInstance){
throw (new IllegalOperationError("You must add the Kongregate API component to the stage before attempting to access it."));
};
return (mInstance);
}
}
}//package com.kongregate.as3.client
Section 13
//MochiAd (com.mochi.MochiAd)
package com.mochi {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.system.*;
import flash.net.*;
public class MochiAd {
public static function getVersion():String{
return ("2.1");
}
public static function showTimedAd(_arg1:Object):void{
MochiAd.showInterLevelAd(_arg1);
}
public static function _allowDomains(_arg1:String):String{
var _local2:String;
_local2 = _arg1.split("/")[2].split(":")[0];
Security.allowDomain("*");
Security.allowDomain(_local2);
Security.allowInsecureDomain("*");
Security.allowInsecureDomain(_local2);
return (_local2);
}
public static function load(_arg1:Object):MovieClip{
var DEFAULTS:Object;
var clip:Object;
var depth:Number;
var mc:MovieClip;
var wh:Array;
var lv:URLVariables;
var k:String;
var server:String;
var hostname:String;
var lc:LocalConnection;
var name:String;
var loader:Loader;
var f:Function;
var g:Function;
var req:URLRequest;
var v:Object;
var options = _arg1;
DEFAULTS = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"};
options = MochiAd._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = MochiAd.getVersion();
clip = options.clip;
if (!MochiAd._isNetworkAvailable()){
return (null);
};
if (clip._mochiad_loaded){
return (null);
};
depth = options.depth;
delete options.depth;
mc = createEmptyMovieClip(clip, "_mochiad", depth);
wh = MochiAd._getRes(options, clip);
options.res = ((wh[0] + "x") + wh[1]);
options.server = (options.server + options.id);
delete options.id;
clip._mochiad_loaded = true;
if (clip.loaderInfo.loaderURL.indexOf("http") == 0){
options.as3_swf = clip.loaderInfo.loaderURL;
};
lv = new URLVariables();
for (k in options) {
v = options[k];
if (!(v is Function)){
lv[k] = v;
};
};
server = lv.server;
delete lv.server;
hostname = _allowDomains(server);
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.lc = lc;
lv.lc = name;
lv.st = getTimer();
loader = new Loader();
f = function (_arg1:Object):void{
mc._mochiad_ctr_failed = true;
};
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
g = function (_arg1:Object):void{
MochiAd.unload(clip);
};
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g);
req = new URLRequest((server + ".swf"));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader.load(req);
mc.addChild(loader);
mc._mochiad_ctr = loader;
return (mc);
}
public static function sendHighScore(_arg1:Object, _arg2:Object, _arg3:Object=null):Boolean{
var _local4:MovieClip;
_local4 = MochiAd._loadCommunicator({clip:_arg1.clip, id:_arg1.id});
if (!_local4){
return (false);
};
_local4.doSend(["sendHighScore", _arg1], _arg2, _arg3);
return (true);
}
public static function _parseOptions(_arg1:Object, _arg2:Object):Object{
var _local3:Object;
var _local4:String;
var _local5:Array;
var _local6:Number;
var _local7:Array;
_local3 = {};
for (_local4 in _arg2) {
_local3[_local4] = _arg2[_local4];
};
if (_arg1){
for (_local4 in _arg1) {
_local3[_local4] = _arg1[_local4];
};
};
_arg1 = _local3.clip.loaderInfo.parameters.mochiad_options;
if (_arg1){
_local5 = _arg1.split("&");
_local6 = 0;
while (_local6 < _local5.length) {
_local7 = _local5[_local6].split("=");
_local3[unescape(_local7[0])] = unescape(_local7[1]);
_local6++;
};
};
return (_local3);
}
public static function _isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function unload(_arg1:Object):Boolean{
if (((_arg1.clip) && (_arg1.clip._mochiad))){
_arg1 = _arg1.clip;
};
if (!_arg1._mochiad){
return (false);
};
if (_arg1._mochiad.onUnload){
_arg1._mochiad.onUnload();
};
_arg1.removeChild(_arg1._mochiad);
delete _arg1._mochiad_loaded;
delete _arg1._mochiad;
return (true);
}
public static function showInterLevelAd(_arg1:Object):void{
var DEFAULTS:Object;
var clip:Object;
var ad_msec:Number;
var ad_timeout:Number;
var fadeout_time:Number;
var mc:MovieClip;
var wh:Array;
var w:Number;
var h:Number;
var chk:MovieClip;
var options = _arg1;
DEFAULTS = {ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{
this.clip.stop();
}, ad_finished:function ():void{
this.clip.play();
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
ad_msec = 11000;
ad_timeout = options.ad_timeout;
delete options.ad_timeout;
fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
options.ad_finished();
};
wh = MochiAd._getRes(options, clip);
w = wh[0];
h = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
var _local1:Number;
_local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (_local1 > 0){
this.parent.alpha = (_local1 * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adjustProgress = function (_arg1:Number):void{
var _local2:Object;
_local2 = mc._mochiad_wait;
_local2.server_control = true;
_local2.started = getTimer();
_local2.ad_msec = (_arg1 - 250);
};
chk["onEnterFrame"] = function ():void{
var _local1:Object;
var _local2:Number;
var _local3:Boolean;
var _local4:Number;
_local1 = this.parent._mochiad_ctr;
_local2 = (getTimer() - this.started);
_local3 = false;
if (!chk.showing){
_local4 = _local1.loaderInfo.bytesTotal;
if ((((_local4 > 0)) || (("number" == "undefined")))){
chk.showing = true;
chk.started = getTimer();
} else {
if (_local2 > chk.ad_timeout){
_local3 = true;
};
};
};
if ((((_local2 > chk.ad_msec)) || (this.parent._mochiad_ctr_failed))){
_local3 = true;
};
if (_local3){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = this.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function _getRes(_arg1:Object, _arg2:Object):Array{
var _local3:Object;
var _local4:Number;
var _local5:Number;
var _local6:Array;
_local3 = _arg2.getBounds(_arg2.root);
_local4 = 0;
_local5 = 0;
if (typeof(_arg1.res) != "undefined"){
_local6 = _arg1.res.split("x");
_local4 = parseFloat(_local6[0]);
_local5 = parseFloat(_local6[1]);
} else {
_local4 = (_local3.xMax - _local3.xMin);
_local5 = (_local3.yMax - _local3.yMin);
};
if ((((_local4 == 0)) || ((_local5 == 0)))){
_local4 = _arg2.stage.stageWidth;
_local5 = _arg2.stage.stageHeight;
};
return ([_local4, _local5]);
}
public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number):MovieClip{
var _local4:MovieClip;
_local4 = new MovieClip();
if (((false) && (_arg3))){
_arg1.addChildAt(_local4, _arg3);
} else {
_arg1.addChild(_local4);
};
_arg1[_arg2] = _local4;
_local4["_name"] = _arg2;
return (_local4);
}
public static function _loadCommunicator(_arg1:Object):MovieClip{
var DEFAULTS:Object;
var clip:Object;
var clipname:String;
var server:String;
var depth:Number;
var mc:MovieClip;
var lv:URLVariables;
var k:String;
var lc:LocalConnection;
var name:String;
var req:URLRequest;
var loader:Loader;
var options = _arg1;
DEFAULTS = {com_server:"http://x.mochiads.com/com/1/", method:"loadCommunicator", depth:10337, id:"_UNKNOWN_"};
options = MochiAd._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = MochiAd.getVersion();
clip = options.clip;
clipname = ("_mochiad_com_" + options.id);
if (!MochiAd._isNetworkAvailable()){
return (null);
};
if (clip[clipname]){
return (clip[clipname]);
};
server = (options.com_server + options.id);
MochiAd._allowDomains(server);
delete options.id;
delete options.com_server;
depth = options.depth;
delete options.depth;
mc = createEmptyMovieClip(clip, clipname, depth);
lv = new URLVariables();
for (k in options) {
lv[k] = options[k];
};
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.name = name;
mc.lc = lc;
lv.lc = name;
mc._id = 0;
mc._queue = [];
mc.rpcResult = function (_arg1:Object):void{
var _local3:Array;
var _local4:Array;
var _local5:Number;
var _local6:Object;
var _local7:Object;
_arg1 = parseInt(_arg1.toString());
_local3 = mc._callbacks[_arg1];
if (typeof(_local3) == "undefined"){
return;
};
delete mc._callbacks[_arg1];
_local4 = [];
_local5 = 2;
while (_local5 < _local3.length) {
_local4.push(_local3[_local5]);
_local5++;
};
_local5 = 1;
while (_local5 < arguments.length) {
_local4.push(arguments[_local5]);
_local5++;
};
_local6 = _local3[1];
_local7 = _local3[0];
if (((_local7) && ((typeof(_local6) == "string")))){
_local6 = _local7[_local6];
};
if (typeof(_local6) == "function"){
_local6.apply(_local7, _local4);
};
};
mc._didConnect = function (_arg1:String):void{
var _local2:Array;
var _local3:Function;
var _local4:Number;
var _local5:Array;
mc._endpoint = _arg1;
_local2 = mc._queue;
delete mc._queue;
_local3 = mc.doSend;
_local4 = 0;
while (_local4 < _local2.length) {
_local5 = _local2[_local4];
_local3.apply(this, _local5);
_local4++;
};
};
mc.doSend = function (_arg1:Array, _arg2:Object, _arg3:Object):void{
var _local5:Number;
var _local6:LocalConnection;
var _local7:Array;
var _local8:Number;
if (mc._endpoint == null){
_local7 = [];
_local8 = 0;
while (_local8 < arguments.length) {
_local7.push(arguments[_local8]);
_local8++;
};
mc._queue.push(_local7);
return;
};
mc._id = (mc._id + 1);
_local5 = mc._id;
mc._callbacks[_local5] = [_arg2, ((_arg3) || (_arg2))];
_local6 = new LocalConnection();
_local6.send(mc._endpoint, "rpc", _local5, _arg1);
};
mc._callbacks = {};
mc._callbacks[0] = [mc, "_didConnect"];
lv.st = getTimer();
req = new URLRequest((server + ".swf"));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader = new Loader();
loader.load(req);
mc.addChild(loader);
mc._mochiad_com = loader;
return (mc);
}
public static function showPreGameAd(_arg1:Object):void{
var DEFAULTS:Object;
var clip:Object;
var ad_msec:Number;
var ad_timeout:Number;
var fadeout_time:Number;
var mc:MovieClip;
var wh:Array;
var w:Number;
var h:Number;
var chk:MovieClip;
var bar:MovieClip;
var bar_color:Number;
var bar_background:Number;
var bar_outline:Number;
var backing_mc:MovieClip;
var backing:Object;
var inside_mc:MovieClip;
var inside:Object;
var outline_mc:MovieClip;
var outline:Object;
var complete:Boolean;
var unloaded:Boolean;
var f:Function;
var r:MovieClip;
var options = _arg1;
DEFAULTS = {ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, ad_started:function ():void{
this.clip.stop();
}, ad_finished:function ():void{
this.clip.play();
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
ad_msec = 11000;
ad_timeout = options.ad_timeout;
delete options.ad_timeout;
fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
var fn:Function;
fn = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
};
wh = MochiAd._getRes(options, clip);
w = wh[0];
h = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.x = (w * -0.5);
chk.y = (h * -0.5);
bar = createEmptyMovieClip(chk, "_mochiad_bar", 4);
bar.x = 10;
bar.y = (h - 20);
bar_color = options.color;
delete options.color;
bar_background = options.background;
delete options.background;
bar_outline = options.outline;
delete options.outline;
backing_mc = createEmptyMovieClip(bar, "_outline", 1);
backing = backing_mc.graphics;
backing.beginFill(bar_background);
backing.moveTo(0, 0);
backing.lineTo((w - 20), 0);
backing.lineTo((w - 20), 10);
backing.lineTo(0, 10);
backing.lineTo(0, 0);
backing.endFill();
inside_mc = createEmptyMovieClip(bar, "_inside", 2);
inside = inside_mc.graphics;
inside.beginFill(bar_color);
inside.moveTo(0, 0);
inside.lineTo((w - 20), 0);
inside.lineTo((w - 20), 10);
inside.lineTo(0, 10);
inside.lineTo(0, 0);
inside.endFill();
inside_mc.scaleX = 0;
outline_mc = createEmptyMovieClip(bar, "_outline", 3);
outline = outline_mc.graphics;
outline.lineStyle(0, bar_outline, 100);
outline.moveTo(0, 0);
outline.lineTo((w - 20), 0);
outline.lineTo((w - 20), 10);
outline.lineTo(0, 10);
outline.lineTo(0, 0);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.last_pcnt = 0;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
var _local1:Number;
_local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (_local1 > 0){
this.parent.alpha = (_local1 * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
complete = false;
unloaded = false;
f = function (_arg1:Event):void{
complete = true;
if (unloaded){
MochiAd.unload(clip);
};
};
clip.loaderInfo.addEventListener(Event.COMPLETE, f);
if ((clip.root is MovieClip)){
r = (clip.root as MovieClip);
if (r.framesLoaded >= r.totalFrames){
complete = true;
};
};
mc.unloadAd = function ():void{
unloaded = true;
if (complete){
MochiAd.unload(clip);
};
};
mc.adjustProgress = function (_arg1:Number):void{
var _local2:Object;
_local2 = mc._mochiad_wait;
_local2.server_control = true;
_local2.started = getTimer();
_local2.ad_msec = _arg1;
};
chk["onEnterFrame"] = function ():void{
var _local1:Object;
var _local2:Object;
var _local3:Number;
var _local4:Boolean;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Object;
var _local10:Number;
var _local11:Number;
if (!this.parent.parent){
delete this["onEnterFrame"];
return;
};
_local1 = this.parent.parent.root;
_local2 = this.parent._mochiad_ctr;
_local3 = (getTimer() - this.started);
_local4 = false;
_local5 = _local1.loaderInfo.bytesTotal;
_local6 = _local1.loaderInfo.bytesLoaded;
_local7 = ((100 * _local6) / _local5);
_local8 = ((100 * _local3) / chk.ad_msec);
_local9 = this._mochiad_bar._inside;
_local10 = Math.min(100, Math.min(((_local7) || (0)), _local8));
_local10 = Math.max(this.last_pcnt, _local10);
this.last_pcnt = _local10;
_local9.scaleX = (_local10 * 0.01);
if (!chk.showing){
_local11 = _local2.loaderInfo.bytesTotal;
if ((((_local11 > 0)) || (("number" == "undefined")))){
chk.showing = true;
chk.started = getTimer();
} else {
if (_local3 > chk.ad_timeout){
_local4 = true;
};
};
};
if ((((_local3 > chk.ad_msec)) || (this.parent._mochiad_ctr_failed))){
_local4 = true;
};
if (((complete) && (_local4))){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = chk.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function showPreloaderAd(_arg1:Object):void{
MochiAd.showPreGameAd(_arg1);
}
public static function fetchHighScores(_arg1:Object, _arg2:Object, _arg3:Object=null):Boolean{
var _local4:MovieClip;
_local4 = MochiAd._loadCommunicator({clip:_arg1.clip, id:_arg1.id});
if (!_local4){
return (false);
};
_local4.doSend(["fetchHighScores", _arg1], _arg2, _arg3);
return (true);
}
public static function doOnEnterFrame(_arg1:MovieClip):void{
var f:Function;
var mc = _arg1;
f = function (_arg1:Object):void{
if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){
mc.onEnterFrame();
} else {
mc.removeEventListener(Event.ENTER_FRAME, f);
};
};
mc.addEventListener(Event.ENTER_FRAME, f);
}
}
}//package com.mochi
Section 14
//MochiBot (com.mochi.MochiBot)
package com.mochi {
import flash.display.*;
import flash.system.*;
import flash.net.*;
public dynamic class MochiBot extends Sprite {
public static function track(_arg1:Sprite, _arg2:String):MochiBot{
var _local3:MochiBot;
var _local4:String;
var _local5:URLVariables;
var _local6:String;
var _local7:URLRequest;
var _local8:Loader;
if (Security.sandboxType == "localWithFile"){
return (null);
};
_local3 = new (MochiBot);
_arg1.addChild(_local3);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
_local4 = "http://core.mochibot.com/my/core.swf";
_local5 = new URLVariables();
_local5["sb"] = Security.sandboxType;
_local5["v"] = Capabilities.version;
_local5["swfid"] = _arg2;
_local5["mv"] = "8";
_local5["fv"] = "9";
_local6 = _local3.root.loaderInfo.loaderURL;
if (_local6.indexOf("http") == 0){
_local5["url"] = _local6;
} else {
_local5["url"] = "local";
};
_local7 = new URLRequest(_local4);
_local7.contentType = "application/x-www-form-urlencoded";
_local7.method = URLRequestMethod.POST;
_local7.data = _local5;
_local8 = new Loader();
_local3.addChild(_local8);
_local8.load(_local7);
return (_local3);
}
}
}//package com.mochi
Section 15
//TextScoreTable (com.mochi.TextScoreTable)
package com.mochi {
import flash.text.*;
import flash.display.*;
public dynamic class TextScoreTable extends Sprite {
private var _max_scores:Number;
private var _status:TextField;
private var _names:TextField;
public var title:TextField;
private var _scores:TextField;
private var _dates:TextField;
private var _ranks:TextField;
public function TextScoreTable(_arg1:Number=10){
_max_scores = _arg1;
}
public function init():void{
title = new_tf("title");
title.x = 77;
title.width = 199;
title.text = "High Scores";
_status = new_tf("center");
_status.width = width;
_status.y = 200;
_status.width = 360;
_ranks = new_tf("left");
_ranks.x = 20;
_ranks.y = 60;
_ranks.width = 30;
_ranks.height = 184;
_names = new_tf("left");
_names.x = 45;
_names.y = 60;
_names.width = 278;
_names.height = 184;
_dates = new_tf("right");
_dates.x = 159;
_dates.y = 60;
_dates.width = 84;
_dates.height = 184;
_scores = new_tf("right");
_scores.x = 230;
_scores.y = 60;
_scores.width = 103;
_scores.height = 184;
reset();
}
public function msecToDateString(_arg1:Number):String{
var _local2:Date;
_local2 = new Date(_arg1);
return ([_local2.getFullYear(), (1 + _local2.getMonth()), _local2.getDate()].join("-"));
}
public function reset(_arg1:String=""):void{
_ranks.text = "";
_names.text = "";
_scores.text = "";
_dates.text = "";
_status.text = _arg1;
}
public function new_tf(_arg1:String):TextField{
var _local2:TextField;
_local2 = new TextField();
_local2.defaultTextFormat = scoreTextFormat(_arg1);
_local2.selectable = false;
addChild(_local2);
return (_local2);
}
private function scoreTextFormat(_arg1:String):TextFormat{
var _local2:TextFormat;
_local2 = new TextFormat();
_local2.font = "_sans";
_local2.color = 0xCCCCCC;
_local2.size = 14;
if (_arg1 == "left"){
_local2.align = TextFormatAlign.LEFT;
} else {
if (_arg1 == "right"){
_local2.align = TextFormatAlign.RIGHT;
} else {
if (_arg1 == "center"){
_local2.align = TextFormatAlign.CENTER;
} else {
if (_arg1 == "title"){
_local2.align = TextFormatAlign.CENTER;
_local2.color = 0xFFFFFF;
_local2.size = 32;
} else {
throw (new Error(("Invalid text format " + _arg1)));
};
};
};
};
return (_local2);
}
public function gotScores(_arg1:Array, _arg2:Number=-1):void{
var _local3:Number;
var _local4:String;
var _local5:String;
var _local6:String;
var _local7:String;
var _local8:Number;
var _local9:Array;
var _local10:String;
var _local11:String;
var _local12:String;
var _local13:String;
reset();
title.text = "High Scores";
_local3 = Math.min(_max_scores, _arg1.length);
if (_local3 == 0){
this.mc.status_text = "No high scores yet!";
return;
};
_local4 = "";
_local5 = "";
_local6 = "";
_local7 = "";
_local8 = 0;
while (_local8 < _local3) {
_local9 = _arg1[_local8];
_local10 = ((_local8 + 1) + ".");
if (_local8 == _arg2){
_local10 = ("*" + _local10);
};
_local11 = _local9[0];
_local12 = commafy(_local9[1]);
_local13 = msecToDateString(_local9[2]);
_local4 = (_local4 + (_local10 + "\n"));
_local5 = (_local5 + (_local11 + "\n"));
_local6 = (_local6 + (_local12 + "\n"));
_local7 = (_local7 + (_local13 + "\n"));
_local8++;
};
_ranks.text = _local4;
_names.text = _local5;
_scores.text = _local6;
_dates.text = _local7;
}
public static function commafy(_arg1:Number):String{
var _local2:Number;
var _local3:String;
var _local4:Array;
_local2 = _arg1;
if (_local2 < 0){
_local2 = (_local2 * 1);
};
_local3 = Math.floor(_local2).toString();
_local4 = [];
while (_local3.length > 3) {
_local4.unshift(_local3.slice((_local3.length - 3), _local3.length));
_local3 = _local3.slice(0, (_local3.length - 3));
};
_local4.unshift(_local3);
return (_local4.join(","));
}
}
}//package com.mochi
Section 16
//constantVSprite (com.simianlogic.constantVSprite)
package com.simianlogic {
import flash.events.*;
import org.cove.ape.*;
import flash.utils.*;
import flash.filters.*;
public class constantVSprite extends CircleParticle {
public var myColor:uint;// = 0x990000
public var birth:int;// = 0
public var dirty:Boolean;// = true
public var lastPosition:Vector;
public var VELOCITY:Number;
public function constantVSprite(_arg1:Number, _arg2:Number){
VELOCITY = Math.sqrt(18);
dirty = true;
birth = 0;
myColor = 0x990000;
super(_arg1, _arg2, 10, false, 1, 0.7);
lastPosition = new Vector(_arg1, _arg2);
birth = getTimer();
paint();
}
override public function update(_arg1:Number):void{
var _local2:Number;
var _local3:Vector;
lastPosition = new Vector(position.x, position.y);
_local2 = velocity.magnitude();
super.update(_arg1);
_local3 = velocity.normalize();
velocity = _local3.mult(VELOCITY);
if (Math.abs((velocity.magnitude() - _local2)) > 0.1){
sprite.dispatchEvent(new Event("sound_bounce_soft", true));
};
}
override public function paint():void{
var _local1:GlowFilter;
var _local2:DropShadowFilter;
super.paint();
if (dirty){
_local1 = new GlowFilter(0, 1.1, 5, 5);
_local2 = new DropShadowFilter(7, 45, 0, 0.6, 4, 4, 1, 1, true);
sprite.filters = [_local2, _local1];
sprite.graphics.clear();
sprite.graphics.lineStyle(1, 0, 1);
sprite.graphics.beginFill(0xFFFFFF, 1);
sprite.graphics.drawCircle(0, 0, radius);
sprite.graphics.endFill();
dirty = false;
};
}
public function setVelocity(_arg1:Vector):void{
velocity = _arg1;
VELOCITY = _arg1.magnitude();
}
}
}//package com.simianlogic
Section 17
//ezButton (com.simianlogic.ezButton)
package com.simianlogic {
import flash.events.*;
import flash.text.*;
import flash.display.*;
public class ezButton extends Sprite {
private var _label:String;// = ""
public var active:Boolean;// = true
public var labelText:TextField;
public var eventString:String;
public var h:int;
public var w:int;
public var click:Sprite;
public var over:Sprite;
public var under:Sprite;
public function ezButton(_arg1:String, _arg2:String, _arg3:int, _arg4:int){
var _local5:TextFormat;
active = true;
_label = "";
super();
w = _arg3;
h = _arg4;
eventString = _arg2;
_local5 = new TextFormat();
_local5.font = "Arial";
_local5.color = 0xFFFFFF;
_local5.size = 16;
under = new Sprite();
under.graphics.beginFill(0);
under.graphics.drawRect(0, 0, w, h);
under.graphics.endFill();
under.graphics.beginFill(0x555555);
under.graphics.drawRect(1, 1, (w - 2), (h - 2));
under.graphics.endFill();
under.buttonMode = true;
addChild(under);
over = new Sprite();
over.graphics.beginFill(0x333333);
over.graphics.drawRect(1, 1, (w - 2), (h - 2));
over.graphics.endFill();
over.buttonMode = true;
under.addChild(over);
over.visible = false;
click = new Sprite();
click.graphics.beginFill(0);
click.graphics.drawRect(0, 0, w, h);
click.graphics.endFill();
click.buttonMode = true;
under.addChild(click);
click.visible = false;
labelText = new TextField();
labelText.defaultTextFormat = _local5;
labelText.selectable = false;
labelText.y = ((h - 20) / 2);
labelText.height = 20;
under.addChild(labelText);
label = _arg1;
under.mouseChildren = false;
under.addEventListener(MouseEvent.ROLL_OVER, rollOver);
under.addEventListener(MouseEvent.ROLL_OUT, rollOut);
under.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
under.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
under.addEventListener(MouseEvent.CLICK, handleClick);
}
public function rollOver(_arg1:MouseEvent):void{
if (!active){
return;
};
dispatchEvent(new Event("sound_rollover", true));
over.visible = true;
}
public function mouseUp(_arg1:MouseEvent):void{
if (!active){
return;
};
click.visible = false;
}
public function get label():String{
return (_label);
}
public function handleClick(_arg1:MouseEvent):void{
if (!active){
return;
};
dispatchEvent(new Event(("button_" + eventString)));
}
public function rollOut(_arg1:MouseEvent):void{
if (!active){
return;
};
over.visible = false;
click.visible = false;
}
public function set label(_arg1:String):void{
_label = _arg1;
labelText.text = label;
labelText.x = ((w / 2) - (labelText.textWidth / 2));
labelText.width = (labelText.textWidth + 10);
}
public function mouseDown(_arg1:MouseEvent):void{
if (!active){
return;
};
click.visible = true;
}
}
}//package com.simianlogic
Section 18
//growthSprite (com.simianlogic.growthSprite)
package com.simianlogic {
import flash.events.*;
import org.cove.ape.*;
import flash.utils.*;
import flash.filters.*;
public class growthSprite extends CircleParticle {
public var growing:Boolean;
public var lastVelocity:Vector;
public var GROWTHRATE:Number;// = 0.5
public var myColor:uint;// = 0xFFFFFF
public var birth:int;// = 0
public var dirty:Boolean;// = true
public var lastPosition:Vector;
public function growthSprite(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:uint=0xFFFFFF, _arg5:Boolean=false){
var _local6:Number;
dirty = true;
birth = 0;
myColor = 0xFFFFFF;
GROWTHRATE = 0.5;
_local6 = 100;
if (_arg5){
_local6 = 1;
};
super(_arg1, _arg2, _arg3, false, _local6, 0.25);
myColor = _arg4;
growing = _arg5;
birth = getTimer();
paint();
}
public function grow():void{
var _local1:int;
var _local2:int;
var _local3:Vector;
var _local4:Vector;
var _local5:Number;
radius = (radius + (GROWTHRATE + Math.sqrt(((getTimer() - birth) / 1000))));
_local1 = Math.min(sprite.parent.mouseX, (595 - (radius / 2)));
_local1 = Math.max((5 + (radius / 2)), _local1);
_local2 = Math.min(sprite.parent.mouseY, (495 - (radius / 2)));
_local2 = Math.max((105 + (radius / 2)), sprite.parent.mouseY);
_local3 = new Vector(_local1, _local2);
_local4 = _local3.minus(position);
_local5 = _local4.magnitude();
velocity = _local4.mult((1 / 5));
dirty = true;
}
override public function update(_arg1:Number):void{
var _local2:Number;
if (growing){
grow();
} else {
addMasslessForce(new Vector(0, 2));
};
trace(((position.x + " ") + position.y));
if ((((((((position.x < 5)) || ((position.x > 595)))) || ((position.y > 495)))) || ((position.y < 5)))){
sprite.dispatchEvent(new Event("outOfBoundsEvent", true));
trace("Out of bounds event dispatched!");
};
if (lastVelocity){
_local2 = new Vector(Math.abs((lastVelocity.x - velocity.x)), Math.abs((lastVelocity.y - velocity.y))).magnitude();
};
if (((((!((lastVelocity == null))) && (!(growing)))) && ((_local2 > 1)))){
if ((((_local2 > 1)) && ((_local2 <= 2.5)))){
sprite.dispatchEvent(new Event("sound_bounce_soft", true));
};
if ((((_local2 > 2.5)) && ((_local2 <= 7.5)))){
sprite.dispatchEvent(new Event("sound_bounce", true));
};
if (_local2 > 7.5){
sprite.dispatchEvent(new Event("sound_bounce_hard", true));
};
};
lastVelocity = new Vector(velocity.x, velocity.y);
lastPosition = new Vector(position.x, position.y);
super.update(_arg1);
}
override public function paint():void{
var _local1:GlowFilter;
var _local2:DropShadowFilter;
super.paint();
if (dirty){
_local1 = new GlowFilter(myColor, 1.5, 30, 30);
_local2 = new DropShadowFilter(Math.sqrt(radius), 45, 0, 0.6, 4, 4, 1, 1, true);
sprite.filters = [_local2];
sprite.graphics.clear();
sprite.graphics.lineStyle(1, 0, 1);
sprite.graphics.beginFill(myColor, 1);
sprite.graphics.drawCircle(0, 0, radius);
sprite.graphics.endFill();
dirty = false;
};
}
}
}//package com.simianlogic
Section 19
//shadowRectParticle (com.simianlogic.shadowRectParticle)
package com.simianlogic {
import org.cove.ape.*;
import flash.filters.*;
public class shadowRectParticle extends RectangleParticle {
public function shadowRectParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Boolean=false, _arg7:Number=1, _arg8:Number=0.3, _arg9:Number=0){
var _local10:DropShadowFilter;
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9);
_local10 = new DropShadowFilter(7, 45, 0, 0.6, 4, 4, 1, 1, true);
sprite.filters = [_local10];
}
}
}//package com.simianlogic
Section 20
//LivePreviewParent (fl.livepreview.LivePreviewParent)
package fl.livepreview {
import flash.display.*;
import flash.utils.*;
import flash.external.*;
public class LivePreviewParent extends MovieClip {
public var myInstance:DisplayObject;
public function LivePreviewParent(){
super();
try {
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
myInstance = getChildAt(0);
onResize(stage.width, stage.height);
if (ExternalInterface.available){
ExternalInterface.addCallback("onResize", onResize);
ExternalInterface.addCallback("onUpdate", onUpdate);
};
} catch(e) {
};
}
private function updateCollection(_arg1:Object, _arg2:String):void{
var _local3:Class;
var _local4:Class;
var _local5:Object;
var _local6:int;
var _local7:Object;
var _local8:Object;
var _local9:*;
_local3 = Class(getDefinitionByName(_arg1.collectionClass));
_local4 = Class(getDefinitionByName(_arg1.collectionItemClass));
_local5 = new (_local3);
_local6 = 0;
while (_local6 < _arg1.collectionArray.length) {
_local7 = new (_local4);
_local8 = _arg1.collectionArray[_local6];
for (_local9 in _local8) {
_local7[_local9] = _local8[_local9];
};
_local5.addItem(_local7);
_local6++;
};
myInstance[_arg2] = (_local5 as _local3);
}
public function onResize(_arg1:Number, _arg2:Number):void{
var setSizeFn:Function;
var width = _arg1;
var height = _arg2;
setSizeFn = null;
try {
setSizeFn = myInstance["setSize"];
} catch(e:Error) {
setSizeFn = null;
};
if (setSizeFn != null){
setSizeFn(width, height);
} else {
myInstance.width = width;
myInstance.height = height;
};
}
public function onUpdate(... _args):void{
var i:int;
var name:String;
var value:*;
var updateArray = _args;
i = 0;
while ((i + 1) < updateArray.length) {
try {
name = String(updateArray[i]);
value = updateArray[(i + 1)];
if ((((typeof(value) == "object")) && (value.__treatAsCollectionSpecialSauce__))){
updateCollection(value, name);
} else {
myInstance[name] = value;
};
} catch(e:Error) {
};
i = (i + 2);
};
}
}
}//package fl.livepreview
Section 21
//ByteArrayAsset (mx.core.ByteArrayAsset)
package mx.core {
import flash.utils.*;
public class ByteArrayAsset extends ByteArray implements IFlexAsset {
mx_internal static const VERSION:String = "2.0.1.0";
}
}//package mx.core
Section 22
//FlexMovieClip (mx.core.FlexMovieClip)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexMovieClip extends MovieClip {
mx_internal static const VERSION:String = "2.0.1.0";
public function FlexMovieClip(){
super();
try {
name = NameUtil.createUniqueName(this);
} catch(e:Error) {
};
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 23
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 24
//IFlexDisplayObject (mx.core.IFlexDisplayObject)
package mx.core {
import flash.events.*;
import flash.display.*;
public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher {
function get name():String;
function set width(_arg1:Number):void;
function get measuredHeight():Number;
function set height(_arg1:Number):void;
function get scaleY():Number;
function move(_arg1:Number, _arg2:Number):void;
function get scaleX():Number;
function set mask(_arg1:DisplayObject):void;
function set scaleX(_arg1:Number):void;
function set name(_arg1:String):void;
function set scaleY(_arg1:Number):void;
function get visible():Boolean;
function get measuredWidth():Number;
function set visible(_arg1:Boolean):void;
function get alpha():Number;
function get height():Number;
function get width():Number;
function get parent():DisplayObjectContainer;
function get mask():DisplayObject;
function set x(_arg1:Number):void;
function setActualSize(_arg1:Number, _arg2:Number):void;
function set y(_arg1:Number):void;
function get x():Number;
function get y():Number;
function set alpha(_arg1:Number):void;
}
}//package mx.core
Section 25
//IRepeaterClient (mx.core.IRepeaterClient)
package mx.core {
public interface IRepeaterClient {
function set instanceIndices(_arg1:Array):void;
function get isDocument():Boolean;
function get repeaters():Array;
function get instanceIndices():Array;
function set repeaters(_arg1:Array):void;
function initializeRepeaterArrays(_arg1:IRepeaterClient):void;
function set repeaterIndices(_arg1:Array):void;
function get repeaterIndices():Array;
}
}//package mx.core
Section 26
//MovieClipAsset (mx.core.MovieClipAsset)
package mx.core {
public class MovieClipAsset extends FlexMovieClip implements IFlexAsset, IFlexDisplayObject {
private var _measuredWidth:Number;
private var _measuredHeight:Number;
mx_internal static const VERSION:String = "2.0.1.0";
public function MovieClipAsset(){
_measuredWidth = width;
_measuredHeight = height;
}
public function get measuredWidth():Number{
return (_measuredWidth);
}
public function get measuredHeight():Number{
return (_measuredHeight);
}
public function setActualSize(_arg1:Number, _arg2:Number):void{
width = _arg1;
height = _arg2;
}
public function move(_arg1:Number, _arg2:Number):void{
this.x = _arg1;
this.y = _arg2;
}
}
}//package mx.core
Section 27
//MovieClipLoaderAsset (mx.core.MovieClipLoaderAsset)
package mx.core {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.system.*;
public class MovieClipLoaderAsset extends MovieClipAsset implements IFlexAsset, IFlexDisplayObject {
private var requestedWidth:Number;
private var loader:Loader;// = null
private var requestedHeight:Number;
private var initialized:Boolean;// = false
protected var initialWidth:Number;// = 0
protected var initialHeight:Number;// = 0
mx_internal static const VERSION:String = "2.0.1.0";
public function MovieClipLoaderAsset(){
var _local1:LoaderContext;
loader = null;
initialized = false;
initialWidth = 0;
initialHeight = 0;
super();
_local1 = new LoaderContext();
_local1.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.loadBytes(movieClipData, _local1);
addChild(loader);
}
private function completeHandler(_arg1:Event):void{
initialized = true;
initialWidth = loader.width;
initialHeight = loader.height;
if (!isNaN(requestedWidth)){
loader.width = requestedWidth;
};
if (!isNaN(requestedHeight)){
loader.height = requestedHeight;
};
dispatchEvent(_arg1);
}
override public function get height():Number{
if (!initialized){
return (initialHeight);
};
return (super.height);
}
override public function set height(_arg1:Number):void{
if (!initialized){
requestedHeight = _arg1;
} else {
loader.height = _arg1;
};
}
public function get movieClipData():ByteArray{
return (null);
}
override public function set width(_arg1:Number):void{
if (!initialized){
requestedWidth = _arg1;
} else {
loader.width = _arg1;
};
}
override public function get measuredWidth():Number{
return (initialWidth);
}
override public function get measuredHeight():Number{
return (initialHeight);
}
override public function get width():Number{
if (!initialized){
return (initialWidth);
};
return (super.width);
}
}
}//package mx.core
Section 28
//mx_internal (mx.core.mx_internal)
package mx.core {
public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";
}//package mx.core
Section 29
//SoundAsset (mx.core.SoundAsset)
package mx.core {
import flash.media.*;
public class SoundAsset extends Sound implements IFlexAsset {
mx_internal static const VERSION:String = "2.0.1.0";
}
}//package mx.core
Section 30
//NameUtil (mx.utils.NameUtil)
package mx.utils {
import flash.display.*;
import flash.utils.*;
import mx.core.*;
public class NameUtil {
mx_internal static const VERSION:String = "2.0.1.0";
private static var counter:int = 0;
public static function displayObjectToString(_arg1:DisplayObject):String{
var _local2:String;
var _local3:DisplayObject;
var _local4:String;
var _local5:Array;
_local3 = _arg1;
while (_local3 != null) {
if (((((_local3.parent) && (_local3.stage))) && ((_local3.parent == _local3.stage)))){
break;
};
_local4 = _local3.name;
if ((_local3 is IRepeaterClient)){
_local5 = IRepeaterClient(_local3).instanceIndices;
if (_local5){
_local4 = (_local4 + (("[" + _local5.join("][")) + "]"));
};
};
_local2 = ((_local2 == null)) ? _local4 : ((_local4 + ".") + _local2);
_local3 = _local3.parent;
};
return (_local2);
}
public static function createUniqueName(_arg1:Object):String{
var _local2:String;
var _local3:int;
var _local4:int;
if (!_arg1){
return (null);
};
_local2 = getQualifiedClassName(_arg1);
_local3 = _local2.indexOf("::");
if (_local3 != -1){
_local2 = _local2.substr((_local3 + 2));
};
_local4 = _local2.charCodeAt((_local2.length - 1));
if ((((_local4 >= 48)) && ((_local4 <= 57)))){
_local2 = (_local2 + "_");
};
return ((_local2 + counter++));
}
}
}//package mx.utils
Section 31
//AbstractCollection (org.cove.ape.AbstractCollection)
package org.cove.ape {
import flash.display.*;
import flash.utils.*;
public class AbstractCollection {
private var _sprite:Sprite;
private var _isParented:Boolean;
private var _particles:Array;
private var _constraints:Array;
public function AbstractCollection(){
if (getQualifiedClassName(this) == "org.cove.ape::AbstractCollection"){
throw (new ArgumentError("AbstractCollection can't be instantiated directly"));
};
_isParented = false;
_particles = new Array();
_constraints = new Array();
}
public function getAll():Array{
return (particles.concat(constraints));
}
function checkCollisionsVsCollection(_arg1:AbstractCollection):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:AbstractParticle;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:AbstractParticle;
var _local10:SpringConstraint;
var _local11:SpringConstraint;
var _local12:int;
_local2 = _particles.length;
_local3 = 0;
while (_local3 < _local2) {
_local5 = _particles[_local3];
if (!_local5.collidable){
} else {
_local6 = _arg1.particles.length;
_local7 = 0;
while (_local7 < _local6) {
_local9 = _arg1.particles[_local7];
if (_local9.collidable){
CollisionDetector.test(_local5, _local9);
};
_local7++;
};
_local8 = _arg1.constraints.length;
_local7 = 0;
while (_local7 < _local8) {
_local10 = _arg1.constraints[_local7];
if (((_local10.collidable) && (!(_local10.isConnectedTo(_local5))))){
_local10.scp.updatePosition();
CollisionDetector.test(_local5, _local10.scp);
};
_local7++;
};
};
_local3++;
};
_local4 = _constraints.length;
_local3 = 0;
while (_local3 < _local4) {
_local11 = _constraints[_local3];
if (!_local11.collidable){
} else {
_local6 = _arg1.particles.length;
_local12 = 0;
while (_local12 < _local6) {
_local9 = _arg1.particles[_local12];
if (((_local9.collidable) && (!(_local11.isConnectedTo(_local9))))){
_local11.scp.updatePosition();
CollisionDetector.test(_local9, _local11.scp);
};
_local12++;
};
};
_local3++;
};
}
public function get sprite():Sprite{
if (_sprite != null){
return (_sprite);
};
if (APEngine.container == null){
throw (new Error("The container property of the APEngine class has not been set"));
};
_sprite = new Sprite();
APEngine.container.addChild(_sprite);
return (_sprite);
}
function checkInternalCollisions():void{
var _local1:int;
var _local2:int;
var _local3:AbstractParticle;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:AbstractParticle;
var _local8:SpringConstraint;
_local1 = _particles.length;
_local2 = 0;
while (_local2 < _local1) {
_local3 = _particles[_local2];
if (!_local3.collidable){
} else {
_local4 = (_local2 + 1);
while (_local4 < _local1) {
_local7 = _particles[_local4];
if (_local7.collidable){
CollisionDetector.test(_local3, _local7);
};
_local4++;
};
_local5 = _constraints.length;
_local6 = 0;
while (_local6 < _local5) {
_local8 = _constraints[_local6];
if (((_local8.collidable) && (!(_local8.isConnectedTo(_local3))))){
_local8.scp.updatePosition();
CollisionDetector.test(_local3, _local8.scp);
};
_local6++;
};
};
_local2++;
};
}
public function addParticle(_arg1:AbstractParticle):void{
particles.push(_arg1);
if (isParented){
_arg1.init();
};
}
public function removeConstraint(_arg1:AbstractConstraint):void{
var _local2:int;
_local2 = constraints.indexOf(_arg1);
if (_local2 == -1){
return;
};
constraints.splice(_local2, 1);
_arg1.cleanup();
}
function get isParented():Boolean{
return (_isParented);
}
public function init():void{
var _local1:int;
_local1 = 0;
while (_local1 < particles.length) {
particles[_local1].init();
_local1++;
};
_local1 = 0;
while (_local1 < constraints.length) {
constraints[_local1].init();
_local1++;
};
}
function satisfyConstraints():void{
var _local1:int;
var _local2:int;
var _local3:AbstractConstraint;
_local1 = _constraints.length;
_local2 = 0;
while (_local2 < _local1) {
_local3 = _constraints[_local2];
_local3.resolve();
_local2++;
};
}
public function paint():void{
var _local1:AbstractParticle;
var _local2:int;
var _local3:int;
var _local4:SpringConstraint;
_local2 = _particles.length;
_local3 = 0;
while (_local3 < _local2) {
_local1 = _particles[_local3];
if (((!(_local1.fixed)) || (_local1.alwaysRepaint))){
_local1.paint();
};
_local3++;
};
_local2 = _constraints.length;
_local3 = 0;
while (_local3 < _local2) {
_local4 = _constraints[_local3];
if (((!(_local4.fixed)) || (_local4.alwaysRepaint))){
_local4.paint();
};
_local3++;
};
}
public function addConstraint(_arg1:AbstractConstraint):void{
constraints.push(_arg1);
if (isParented){
_arg1.init();
};
}
function set isParented(_arg1:Boolean):void{
_isParented = _arg1;
}
public function removeParticle(_arg1:AbstractParticle):void{
var _local2:int;
_local2 = particles.indexOf(_arg1);
if (_local2 == -1){
return;
};
particles.splice(_local2, 1);
_arg1.cleanup();
}
public function cleanup():void{
var _local1:int;
_local1 = 0;
while (_local1 < particles.length) {
particles[_local1].cleanup();
_local1++;
};
_local1 = 0;
while (_local1 < constraints.length) {
constraints[_local1].cleanup();
_local1++;
};
}
public function get particles():Array{
return (_particles);
}
function integrate(_arg1:Number):void{
var _local2:int;
var _local3:int;
var _local4:AbstractParticle;
_local2 = _particles.length;
_local3 = 0;
while (_local3 < _local2) {
_local4 = _particles[_local3];
_local4.update(_arg1);
_local3++;
};
}
public function get constraints():Array{
return (_constraints);
}
}
}//package org.cove.ape
Section 32
//AbstractConstraint (org.cove.ape.AbstractConstraint)
package org.cove.ape {
import flash.utils.*;
public class AbstractConstraint extends AbstractItem {
private var _stiffness:Number;
public function AbstractConstraint(_arg1:Number){
if (getQualifiedClassName(this) == "org.cove.ape::AbstractConstraint"){
throw (new ArgumentError("AbstractConstraint can't be instantiated directly"));
};
this.stiffness = _arg1;
setStyle();
}
public function get stiffness():Number{
return (_stiffness);
}
public function set stiffness(_arg1:Number):void{
_stiffness = _arg1;
}
function resolve():void{
}
}
}//package org.cove.ape
Section 33
//AbstractItem (org.cove.ape.AbstractItem)
package org.cove.ape {
import flash.display.*;
public class AbstractItem {
var lineAlpha:Number;
var lineColor:uint;
var displayObjectOffset:Vector;
var lineThickness:Number;
var displayObject:DisplayObject;
var fillAlpha:Number;
private var _sprite:Sprite;
var fillColor:uint;
private var _visible:Boolean;
private var _alwaysRepaint:Boolean;
var displayObjectRotation:Number;
public function AbstractItem(){
_visible = true;
_alwaysRepaint = false;
}
public function setLine(_arg1:Number=0, _arg2:uint=0, _arg3:Number=1):void{
lineThickness = _arg1;
lineColor = _arg2;
lineAlpha = _arg3;
}
public function set visible(_arg1:Boolean):void{
_visible = _arg1;
sprite.visible = _arg1;
}
public function setFill(_arg1:uint=0xFFFFFF, _arg2:Number=1):void{
fillColor = _arg1;
fillAlpha = _arg2;
}
public function init():void{
}
public function get sprite():Sprite{
if (_sprite != null){
return (_sprite);
};
if (APEngine.container == null){
throw (new Error("The container property of the APEngine class has not been set"));
};
_sprite = new Sprite();
APEngine.container.addChild(_sprite);
return (_sprite);
}
public function paint():void{
}
public function cleanup():void{
var _local1:int;
sprite.graphics.clear();
_local1 = 0;
while (_local1 < sprite.numChildren) {
sprite.removeChildAt(_local1);
_local1++;
};
}
public function setStyle(_arg1:Number=0, _arg2:uint=0, _arg3:Number=1, _arg4:uint=0xFFFFFF, _arg5:Number=1):void{
setLine(_arg1, _arg2, _arg3);
setFill(_arg4, _arg5);
}
public function get visible():Boolean{
return (_visible);
}
final public function set alwaysRepaint(_arg1:Boolean):void{
_alwaysRepaint = _arg1;
}
final public function get alwaysRepaint():Boolean{
return (_alwaysRepaint);
}
}
}//package org.cove.ape
Section 34
//AbstractParticle (org.cove.ape.AbstractParticle)
package org.cove.ape {
import flash.display.*;
import flash.utils.*;
public class AbstractParticle extends AbstractItem {
private var _collidable:Boolean;
private var _multisample:int;
private var collision:Collision;
var prev:Vector;
private var _kfr:Number;
var curr:Vector;
private var _invMass:Number;
var interval:Interval;
private var _mass:Number;
private var temp:Vector;
private var _friction:Number;
private var forces:Vector;
var samp:Vector;
private var _center:Vector;
private var _fixed:Boolean;
public function AbstractParticle(_arg1:Number, _arg2:Number, _arg3:Boolean, _arg4:Number, _arg5:Number, _arg6:Number){
if (getQualifiedClassName(this) == "org.cove.ape::AbstractParticle"){
throw (new ArgumentError("AbstractParticle can't be instantiated directly"));
};
interval = new Interval(0, 0);
curr = new Vector(_arg1, _arg2);
prev = new Vector(_arg1, _arg2);
samp = new Vector();
temp = new Vector();
fixed = _arg3;
forces = new Vector();
collision = new Collision(new Vector(), new Vector());
collidable = true;
this.mass = _arg4;
this.elasticity = _arg5;
this.friction = _arg6;
setStyle();
_center = new Vector();
_multisample = 0;
}
public function set friction(_arg1:Number):void{
if ((((_arg1 < 0)) || ((_arg1 > 1)))){
throw (new ArgumentError("Legal friction must be >= 0 and <=1"));
};
_friction = _arg1;
}
public function get px():Number{
return (curr.x);
}
public function get py():Number{
return (curr.y);
}
public function set py(_arg1:Number):void{
curr.y = _arg1;
prev.y = _arg1;
}
function getComponents(_arg1:Vector):Collision{
var _local2:Vector;
var _local3:Number;
_local2 = velocity;
_local3 = _arg1.dot(_local2);
collision.vn = _arg1.mult(_local3);
collision.vt = _local2.minus(collision.vn);
return (collision);
}
public function set mass(_arg1:Number):void{
if (_arg1 <= 0){
throw (new ArgumentError("mass may not be set <= 0"));
};
_mass = _arg1;
_invMass = (1 / _mass);
}
public function get fixed():Boolean{
return (_fixed);
}
public function set px(_arg1:Number):void{
curr.x = _arg1;
prev.x = _arg1;
}
function initDisplay():void{
displayObject.x = displayObjectOffset.x;
displayObject.y = displayObjectOffset.y;
displayObject.rotation = displayObjectRotation;
sprite.addChild(displayObject);
}
function get invMass():Number{
return ((fixed) ? 0 : _invMass);
}
public function setDisplay(_arg1:DisplayObject, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0):void{
displayObject = _arg1;
displayObjectRotation = _arg4;
displayObjectOffset = new Vector(_arg2, _arg3);
}
public function get position():Vector{
return (new Vector(curr.x, curr.y));
}
public function get multisample():int{
return (_multisample);
}
function resolveCollision(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number, _arg5:int, _arg6:AbstractParticle):void{
curr.plusEquals(_arg1);
velocity = _arg2;
}
public function set fixed(_arg1:Boolean):void{
_fixed = _arg1;
}
public function addMasslessForce(_arg1:Vector):void{
forces.plusEquals(_arg1);
}
public function set velocity(_arg1:Vector):void{
prev = curr.minus(_arg1);
}
public function set multisample(_arg1:int):void{
_multisample = _arg1;
}
public function get elasticity():Number{
return (_kfr);
}
public function set position(_arg1:Vector):void{
curr.copy(_arg1);
prev.copy(_arg1);
}
public function get center():Vector{
_center.setTo(px, py);
return (_center);
}
public function update(_arg1:Number):void{
var _local2:Vector;
if (fixed){
return;
};
addForce(APEngine.force);
addMasslessForce(APEngine.masslessForce);
temp.copy(curr);
_local2 = velocity.plus(forces.multEquals(_arg1));
curr.plusEquals(_local2.multEquals(APEngine.damping));
prev.copy(temp);
forces.setTo(0, 0);
}
public function set collidable(_arg1:Boolean):void{
_collidable = _arg1;
}
public function get velocity():Vector{
return (curr.minus(prev));
}
public function get collidable():Boolean{
return (_collidable);
}
public function addForce(_arg1:Vector):void{
forces.plusEquals(_arg1.mult(invMass));
}
public function set elasticity(_arg1:Number):void{
_kfr = _arg1;
}
public function get friction():Number{
return (_friction);
}
public function get mass():Number{
return (_mass);
}
}
}//package org.cove.ape
Section 35
//APEngine (org.cove.ape.APEngine)
package org.cove.ape {
import flash.display.*;
public final class APEngine {
private static var _container:DisplayObjectContainer;
private static var _damping:Number;
private static var _constraintCollisionCycles:int;
private static var groups:Array;
static var masslessForce:Vector;
private static var _constraintCycles:int;
static var force:Vector;
private static var timeStep:Number;
private static var numGroups:int;
public static function get container():DisplayObjectContainer{
return (_container);
}
public static function get constraintCollisionCycles():int{
return (_constraintCollisionCycles);
}
public static function set damping(_arg1:Number):void{
_damping = _arg1;
}
public static function step():void{
var _local1:int;
var _local2:int;
integrate();
_local1 = 0;
while (_local1 < _constraintCycles) {
satisfyConstraints();
_local1++;
};
_local2 = 0;
while (_local2 < _constraintCollisionCycles) {
satisfyConstraints();
checkCollisions();
_local2++;
};
}
public static function init(_arg1:Number=0.25):void{
timeStep = (_arg1 * _arg1);
numGroups = 0;
groups = new Array();
force = new Vector(0, 0);
masslessForce = new Vector(0, 0);
damping = 1;
_constraintCycles = 0;
_constraintCollisionCycles = 1;
}
public static function get constraintCycles():int{
return (_constraintCycles);
}
public static function set constraintCollisionCycles(_arg1:int):void{
_constraintCollisionCycles = _arg1;
}
public static function set constraintCycles(_arg1:int):void{
_constraintCycles = _arg1;
}
public static function addForce(_arg1:Vector):void{
force.plusEquals(_arg1);
}
public static function get damping():Number{
return (_damping);
}
public static function set container(_arg1:DisplayObjectContainer):void{
_container = _arg1;
}
public static function addGroup(_arg1:Group):void{
groups.push(_arg1);
_arg1.isParented = true;
numGroups++;
_arg1.init();
}
public static function removeGroup(_arg1:Group):void{
var _local2:int;
_local2 = groups.indexOf(_arg1);
if (_local2 == -1){
return;
};
groups.splice(_local2, 1);
_arg1.isParented = false;
numGroups--;
_arg1.cleanup();
}
public static function paint():void{
var _local1:int;
var _local2:Group;
_local1 = 0;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.paint();
_local1++;
};
}
private static function checkCollisions():void{
var _local1:int;
var _local2:Group;
_local1 = 0;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.checkCollisions();
_local1++;
};
}
private static function integrate():void{
var _local1:int;
var _local2:Group;
_local1 = 0;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.integrate(timeStep);
_local1++;
};
}
private static function satisfyConstraints():void{
var _local1:int;
var _local2:Group;
_local1 = 0;
while (_local1 < numGroups) {
_local2 = groups[_local1];
_local2.satisfyConstraints();
_local1++;
};
}
public static function addMasslessForce(_arg1:Vector):void{
masslessForce.plusEquals(_arg1);
}
}
}//package org.cove.ape
Section 36
//CircleParticle (org.cove.ape.CircleParticle)
package org.cove.ape {
public class CircleParticle extends AbstractParticle {
private var _radius:Number;
public function CircleParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false, _arg5:Number=1, _arg6:Number=0.3, _arg7:Number=0){
super(_arg1, _arg2, _arg4, _arg5, _arg6, _arg7);
_radius = _arg3;
}
function getIntervalX():Interval{
interval.min = (curr.x - _radius);
interval.max = (curr.x + _radius);
return (interval);
}
function getIntervalY():Interval{
interval.min = (curr.y - _radius);
interval.max = (curr.y + _radius);
return (interval);
}
override public function init():void{
cleanup();
if (displayObject != null){
initDisplay();
} else {
sprite.graphics.clear();
sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha);
sprite.graphics.beginFill(fillColor, fillAlpha);
sprite.graphics.drawCircle(0, 0, radius);
sprite.graphics.endFill();
};
paint();
}
public function set radius(_arg1:Number):void{
_radius = _arg1;
}
public function get radius():Number{
return (_radius);
}
function getProjection(_arg1:Vector):Interval{
var _local2:Number;
_local2 = samp.dot(_arg1);
interval.min = (_local2 - _radius);
interval.max = (_local2 + _radius);
return (interval);
}
override public function paint():void{
sprite.x = curr.x;
sprite.y = curr.y;
}
}
}//package org.cove.ape
Section 37
//Collision (org.cove.ape.Collision)
package org.cove.ape {
import org.cove.ape.*;
final class Collision {
var vn:Vector;
var vt:Vector;
function Collision(_arg1:Vector, _arg2:Vector){
this.vn = _arg1;
this.vt = _arg2;
}
}
}//package org.cove.ape
Section 38
//CollisionDetector (org.cove.ape.CollisionDetector)
package org.cove.ape {
import org.cove.ape.*;
final class CollisionDetector {
private static function testOBBvsCircle(_arg1:RectangleParticle, _arg2:CircleParticle):Boolean{
var _local3:Vector;
var _local4:Number;
var _local5:Array;
var _local6:int;
var _local7:Number;
var _local8:Vector;
var _local9:Number;
var _local10:Vector;
var _local11:Number;
_local4 = Number.POSITIVE_INFINITY;
_local5 = new Array(2);
_local6 = 0;
while (_local6 < 2) {
_local8 = _arg1.axes[_local6];
_local9 = testIntervals(_arg1.getProjection(_local8), _arg2.getProjection(_local8));
if (_local9 == 0){
return (false);
};
if (Math.abs(_local9) < Math.abs(_local4)){
_local3 = _local8;
_local4 = _local9;
};
_local5[_local6] = _local9;
_local6++;
};
_local7 = _arg2.radius;
if ((((Math.abs(_local5[0]) < _local7)) && ((Math.abs(_local5[1]) < _local7)))){
_local10 = closestVertexOnOBB(_arg2.samp, _arg1);
_local3 = _local10.minus(_arg2.samp);
_local11 = _local3.magnitude();
_local4 = (_local7 - _local11);
if (_local4 > 0){
_local3.divEquals(_local11);
} else {
return (false);
};
};
CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local3, _local4);
return (true);
}
static function test(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
if (((_arg1.fixed) && (_arg2.fixed))){
return;
};
if ((((_arg1.multisample == 0)) && ((_arg2.multisample == 0)))){
normVsNorm(_arg1, _arg2);
} else {
if ((((_arg1.multisample > 0)) && ((_arg2.multisample == 0)))){
sampVsNorm(_arg1, _arg2);
} else {
if ((((_arg2.multisample > 0)) && ((_arg1.multisample == 0)))){
sampVsNorm(_arg2, _arg1);
} else {
if (_arg1.multisample == _arg2.multisample){
sampVsSamp(_arg1, _arg2);
} else {
normVsNorm(_arg1, _arg2);
};
};
};
};
}
private static function testIntervals(_arg1:Interval, _arg2:Interval):Number{
var _local3:Number;
var _local4:Number;
if (_arg1.max < _arg2.min){
return (0);
};
if (_arg2.max < _arg1.min){
return (0);
};
_local3 = (_arg2.max - _arg1.min);
_local4 = (_arg2.min - _arg1.max);
return (((Math.abs(_local3))<Math.abs(_local4)) ? _local3 : _local4);
}
private static function normVsNorm(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
_arg1.samp.copy(_arg1.curr);
_arg2.samp.copy(_arg2.curr);
testTypes(_arg1, _arg2);
}
private static function testCirclevsCircle(_arg1:CircleParticle, _arg2:CircleParticle):Boolean{
var _local3:Number;
var _local4:Number;
var _local5:Vector;
var _local6:Number;
var _local7:Number;
_local3 = testIntervals(_arg1.getIntervalX(), _arg2.getIntervalX());
if (_local3 == 0){
return (false);
};
_local4 = testIntervals(_arg1.getIntervalY(), _arg2.getIntervalY());
if (_local4 == 0){
return (false);
};
_local5 = _arg1.samp.minus(_arg2.samp);
_local6 = _local5.magnitude();
_local7 = ((_arg1.radius + _arg2.radius) - _local6);
if (_local7 > 0){
_local5.divEquals(_local6);
CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local5, _local7);
return (true);
};
return (false);
}
private static function testTypes(_arg1:AbstractParticle, _arg2:AbstractParticle):Boolean{
if ((((_arg1 is RectangleParticle)) && ((_arg2 is RectangleParticle)))){
return (testOBBvsOBB((_arg1 as RectangleParticle), (_arg2 as RectangleParticle)));
};
if ((((_arg1 is CircleParticle)) && ((_arg2 is CircleParticle)))){
return (testCirclevsCircle((_arg1 as CircleParticle), (_arg2 as CircleParticle)));
};
if ((((_arg1 is RectangleParticle)) && ((_arg2 is CircleParticle)))){
return (testOBBvsCircle((_arg1 as RectangleParticle), (_arg2 as CircleParticle)));
};
if ((((_arg1 is CircleParticle)) && ((_arg2 is RectangleParticle)))){
return (testOBBvsCircle((_arg2 as RectangleParticle), (_arg1 as CircleParticle)));
};
return (false);
}
private static function sampVsNorm(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
var _local3:Number;
var _local4:Number;
var _local5:int;
_local3 = (1 / (_arg1.multisample + 1));
_local4 = _local3;
_arg2.samp.copy(_arg2.curr);
_local5 = 0;
while (_local5 <= _arg1.multisample) {
_arg1.samp.setTo((_arg1.prev.x + (_local4 * (_arg1.curr.x - _arg1.prev.x))), (_arg1.prev.y + (_local4 * (_arg1.curr.y - _arg1.prev.y))));
if (testTypes(_arg1, _arg2)){
return;
};
_local4 = (_local4 + _local3);
_local5++;
};
}
private static function closestVertexOnOBB(_arg1:Vector, _arg2:RectangleParticle):Vector{
var _local3:Vector;
var _local4:Vector;
var _local5:int;
var _local6:Number;
_local3 = _arg1.minus(_arg2.samp);
_local4 = new Vector(_arg2.samp.x, _arg2.samp.y);
_local5 = 0;
while (_local5 < 2) {
_local6 = _local3.dot(_arg2.axes[_local5]);
if (_local6 >= 0){
_local6 = _arg2.extents[_local5];
} else {
if (_local6 < 0){
_local6 = -(_arg2.extents[_local5]);
};
};
_local4.plusEquals(_arg2.axes[_local5].mult(_local6));
_local5++;
};
return (_local4);
}
private static function testOBBvsOBB(_arg1:RectangleParticle, _arg2:RectangleParticle):Boolean{
var _local3:Vector;
var _local4:Number;
var _local5:int;
var _local6:Vector;
var _local7:Number;
var _local8:Vector;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Boolean;
_local4 = Number.POSITIVE_INFINITY;
_local5 = 0;
while (_local5 < 2) {
_local6 = _arg1.axes[_local5];
_local7 = testIntervals(_arg1.getProjection(_local6), _arg2.getProjection(_local6));
if (_local7 == 0){
return (false);
};
_local8 = _arg2.axes[_local5];
_local9 = testIntervals(_arg1.getProjection(_local8), _arg2.getProjection(_local8));
if (_local9 == 0){
return (false);
};
_local10 = Math.abs(_local7);
_local11 = Math.abs(_local9);
if ((((_local10 < Math.abs(_local4))) || ((_local11 < Math.abs(_local4))))){
_local12 = (_local10 < _local11);
_local3 = (_local12) ? _local6 : _local8;
_local4 = (_local12) ? _local7 : _local9;
};
_local5++;
};
CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local3, _local4);
return (true);
}
private static function sampVsSamp(_arg1:AbstractParticle, _arg2:AbstractParticle):void{
var _local3:Number;
var _local4:Number;
var _local5:int;
_local3 = (1 / (_arg1.multisample + 1));
_local4 = _local3;
_local5 = 0;
while (_local5 <= _arg1.multisample) {
_arg1.samp.setTo((_arg1.prev.x + (_local4 * (_arg1.curr.x - _arg1.prev.x))), (_arg1.prev.y + (_local4 * (_arg1.curr.y - _arg1.prev.y))));
_arg2.samp.setTo((_arg2.prev.x + (_local4 * (_arg2.curr.x - _arg2.prev.x))), (_arg2.prev.y + (_local4 * (_arg2.curr.y - _arg2.prev.y))));
if (testTypes(_arg1, _arg2)){
return;
};
_local4 = (_local4 + _local3);
_local5++;
};
}
}
}//package org.cove.ape
Section 39
//CollisionResolver (org.cove.ape.CollisionResolver)
package org.cove.ape {
import org.cove.ape.*;
final class CollisionResolver {
static function resolveParticleParticle(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:Vector, _arg4:Number):void{
var _local5:Vector;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Collision;
var _local10:Collision;
var _local11:Vector;
var _local12:Vector;
var _local13:Vector;
var _local14:Vector;
_arg1.curr.copy(_arg1.samp);
_arg2.curr.copy(_arg2.samp);
_local5 = _arg3.mult(_arg4);
_local6 = (_arg1.elasticity + _arg2.elasticity);
_local7 = (_arg1.invMass + _arg2.invMass);
_local8 = clamp((1 - (_arg1.friction + _arg2.friction)), 0, 1);
_local9 = _arg1.getComponents(_arg3);
_local10 = _arg2.getComponents(_arg3);
_local11 = _local10.vn.mult(((_local6 + 1) * _arg1.invMass)).plus(_local9.vn.mult((_arg2.invMass - (_local6 * _arg1.invMass)))).divEquals(_local7);
_local12 = _local9.vn.mult(((_local6 + 1) * _arg2.invMass)).plus(_local10.vn.mult((_arg1.invMass - (_local6 * _arg2.invMass)))).divEquals(_local7);
_local9.vt.multEquals(_local8);
_local10.vt.multEquals(_local8);
_local13 = _local5.mult((_arg1.invMass / _local7));
_local14 = _local5.mult((-(_arg2.invMass) / _local7));
_local11.plusEquals(_local9.vt);
_local12.plusEquals(_local10.vt);
if (!_arg1.fixed){
_arg1.resolveCollision(_local13, _local11, _arg3, _arg4, -1, _arg2);
};
if (!_arg2.fixed){
_arg2.resolveCollision(_local14, _local12, _arg3, _arg4, 1, _arg1);
};
}
static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{
if (_arg1 > _arg3){
return (_arg3);
};
if (_arg1 < _arg2){
return (_arg2);
};
return (_arg1);
}
}
}//package org.cove.ape
Section 40
//Composite (org.cove.ape.Composite)
package org.cove.ape {
public class Composite extends AbstractCollection {
private var delta:Vector;
public function Composite(){
delta = new Vector();
}
private function getRelativeAngle(_arg1:Vector, _arg2:Vector):Number{
delta.setTo((_arg2.x - _arg1.x), (_arg2.y - _arg1.y));
return (Math.atan2(delta.y, delta.x));
}
public function rotateByRadian(_arg1:Number, _arg2:Vector):void{
var _local3:AbstractParticle;
var _local4:Array;
var _local5:int;
var _local6:int;
var _local7:Number;
var _local8:Number;
_local4 = particles;
_local5 = _local4.length;
_local6 = 0;
while (_local6 < _local5) {
_local3 = _local4[_local6];
_local7 = _local3.center.distance(_arg2);
_local8 = (getRelativeAngle(_arg2, _local3.center) + _arg1);
_local3.px = ((Math.cos(_local8) * _local7) + _arg2.x);
_local3.py = ((Math.sin(_local8) * _local7) + _arg2.y);
_local6++;
};
}
public function rotateByAngle(_arg1:Number, _arg2:Vector):void{
var _local3:Number;
_local3 = (_arg1 * MathUtil.PI_OVER_ONE_EIGHTY);
rotateByRadian(_local3, _arg2);
}
public function set fixed(_arg1:Boolean):void{
var _local2:int;
_local2 = 0;
while (_local2 < particles.length) {
particles[_local2].fixed = _arg1;
_local2++;
};
}
public function get fixed():Boolean{
var _local1:int;
_local1 = 0;
while (_local1 < particles.length) {
if (!particles[_local1].fixed){
return (false);
};
_local1++;
};
return (true);
}
}
}//package org.cove.ape
Section 41
//Group (org.cove.ape.Group)
package org.cove.ape {
public class Group extends AbstractCollection {
private var _collideInternal:Boolean;
private var _composites:Array;
private var _collisionList:Array;
public function Group(_arg1:Boolean=false){
_composites = new Array();
_collisionList = new Array();
this.collideInternal = _arg1;
}
function checkCollisions():void{
var _local1:int;
var _local2:int;
var _local3:Group;
if (collideInternal){
checkCollisionGroupInternal();
};
_local1 = collisionList.length;
_local2 = 0;
while (_local2 < _local1) {
_local3 = collisionList[_local2];
checkCollisionVsGroup(_local3);
_local2++;
};
}
public function get composites():Array{
return (_composites);
}
override public function init():void{
var _local1:int;
super.init();
_local1 = 0;
while (_local1 < composites.length) {
composites[_local1].init();
_local1++;
};
}
public function removeCollidable(_arg1:Group):void{
var _local2:int;
_local2 = collisionList.indexOf(_arg1);
if (_local2 == -1){
return;
};
collisionList.splice(_local2, 1);
}
private function checkCollisionVsGroup(_arg1:Group):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:Composite;
var _local6:int;
var _local7:Composite;
checkCollisionsVsCollection(_arg1);
_local2 = _composites.length;
_local3 = _arg1.composites.length;
_local4 = 0;
while (_local4 < _local2) {
_local5 = _composites[_local4];
_local5.checkCollisionsVsCollection(_arg1);
_local6 = 0;
while (_local6 < _local3) {
_local7 = _arg1.composites[_local6];
_local5.checkCollisionsVsCollection(_local7);
_local6++;
};
_local4++;
};
_local6 = 0;
while (_local6 < _local3) {
_local7 = _arg1.composites[_local6];
checkCollisionsVsCollection(_local7);
_local6++;
};
}
override function satisfyConstraints():void{
var _local1:int;
var _local2:int;
var _local3:Composite;
super.satisfyConstraints();
_local1 = _composites.length;
_local2 = 0;
while (_local2 < _local1) {
_local3 = _composites[_local2];
_local3.satisfyConstraints();
_local2++;
};
}
public function get collideInternal():Boolean{
return (_collideInternal);
}
override public function paint():void{
var _local1:int;
var _local2:int;
var _local3:Composite;
super.paint();
_local1 = _composites.length;
_local2 = 0;
while (_local2 < _local1) {
_local3 = _composites[_local2];
_local3.paint();
_local2++;
};
}
public function addCollidableList(_arg1:Array):void{
var _local2:int;
var _local3:Group;
_local2 = 0;
while (_local2 < _arg1.length) {
_local3 = _arg1[_local2];
collisionList.push(_local3);
_local2++;
};
}
public function removeComposite(_arg1:Composite):void{
var _local2:int;
_local2 = composites.indexOf(_arg1);
if (_local2 == -1){
return;
};
composites.splice(_local2, 1);
_arg1.isParented = false;
_arg1.cleanup();
}
override public function cleanup():void{
var _local1:int;
super.cleanup();
_local1 = 0;
while (_local1 < composites.length) {
composites[_local1].cleanup();
_local1++;
};
}
public function addCollidable(_arg1:Group):void{
collisionList.push(_arg1);
}
public function get collisionList():Array{
return (_collisionList);
}
override function integrate(_arg1:Number):void{
var _local2:int;
var _local3:int;
var _local4:Composite;
super.integrate(_arg1);
_local2 = _composites.length;
_local3 = 0;
while (_local3 < _local2) {
_local4 = _composites[_local3];
_local4.integrate(_arg1);
_local3++;
};
}
override public function getAll():Array{
return (particles.concat(constraints).concat(composites));
}
public function addComposite(_arg1:Composite):void{
composites.push(_arg1);
_arg1.isParented = true;
if (isParented){
_arg1.init();
};
}
private function checkCollisionGroupInternal():void{
var _local1:int;
var _local2:int;
var _local3:Composite;
var _local4:int;
var _local5:Composite;
checkInternalCollisions();
_local1 = _composites.length;
_local2 = 0;
while (_local2 < _local1) {
_local3 = _composites[_local2];
_local3.checkCollisionsVsCollection(this);
_local4 = (_local2 + 1);
while (_local4 < _local1) {
_local5 = _composites[_local4];
_local3.checkCollisionsVsCollection(_local5);
_local4++;
};
_local2++;
};
}
public function set collideInternal(_arg1:Boolean):void{
_collideInternal = _arg1;
}
}
}//package org.cove.ape
Section 42
//Interval (org.cove.ape.Interval)
package org.cove.ape {
final class Interval {
var min:Number;
var max:Number;
function Interval(_arg1:Number, _arg2:Number){
this.min = _arg1;
this.max = _arg2;
}
function toString():String{
return (((min + " : ") + max));
}
}
}//package org.cove.ape
Section 43
//MathUtil (org.cove.ape.MathUtil)
package org.cove.ape {
final class MathUtil {
static var ONE_EIGHTY_OVER_PI:Number = (180 / Math.PI);
static var PI_OVER_ONE_EIGHTY:Number = (Math.PI / 180);
static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{
if (_arg1 < _arg2){
return (_arg2);
};
if (_arg1 > _arg3){
return (_arg3);
};
return (_arg1);
}
static function sign(_arg1:Number):int{
if (_arg1 < 0){
return (-1);
};
return (1);
}
}
}//package org.cove.ape
Section 44
//RectangleParticle (org.cove.ape.RectangleParticle)
package org.cove.ape {
public class RectangleParticle extends AbstractParticle {
private var _axes:Array;
private var _radian:Number;
private var _extents:Array;
public function RectangleParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Boolean=false, _arg7:Number=1, _arg8:Number=0.3, _arg9:Number=0){
super(_arg1, _arg2, _arg6, _arg7, _arg8, _arg9);
_extents = new Array((_arg3 / 2), (_arg4 / 2));
_axes = new Array(new Vector(0, 0), new Vector(0, 0));
radian = _arg5;
}
override public function init():void{
var _local1:Number;
var _local2:Number;
cleanup();
if (displayObject != null){
initDisplay();
} else {
_local1 = (extents[0] * 2);
_local2 = (extents[1] * 2);
sprite.graphics.clear();
sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha);
sprite.graphics.beginFill(fillColor, fillAlpha);
sprite.graphics.drawRect((-(_local1) / 2), (-(_local2) / 2), _local1, _local2);
sprite.graphics.endFill();
};
paint();
}
public function set width(_arg1:Number):void{
_extents[0] = (_arg1 / 2);
}
function get axes():Array{
return (_axes);
}
public function get height():Number{
return ((_extents[1] * 2));
}
function get extents():Array{
return (_extents);
}
public function set angle(_arg1:Number):void{
radian = (_arg1 * MathUtil.PI_OVER_ONE_EIGHTY);
}
private function setAxes(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
_local2 = Math.sin(_arg1);
_local3 = Math.cos(_arg1);
axes[0].x = _local3;
axes[0].y = _local2;
axes[1].x = -(_local2);
axes[1].y = _local3;
}
public function get radian():Number{
return (_radian);
}
public function get width():Number{
return ((_extents[0] * 2));
}
public function set height(_arg1:Number):void{
_extents[1] = (_arg1 / 2);
}
public function get angle():Number{
return ((radian * MathUtil.ONE_EIGHTY_OVER_PI));
}
function getProjection(_arg1:Vector):Interval{
var _local2:Number;
var _local3:Number;
_local2 = ((extents[0] * Math.abs(_arg1.dot(axes[0]))) + (extents[1] * Math.abs(_arg1.dot(axes[1]))));
_local3 = samp.dot(_arg1);
interval.min = (_local3 - _local2);
interval.max = (_local3 + _local2);
return (interval);
}
public function set radian(_arg1:Number):void{
_radian = _arg1;
setAxes(_arg1);
}
override public function paint():void{
sprite.x = curr.x;
sprite.y = curr.y;
sprite.rotation = angle;
}
}
}//package org.cove.ape
Section 45
//RimParticle (org.cove.ape.RimParticle)
package org.cove.ape {
import org.cove.ape.*;
class RimParticle {
private var maxTorque:Number;
var curr:Vector;
var prev:Vector;
private var av:Number;
private var wr:Number;
private var sp:Number;
function RimParticle(_arg1:Number, _arg2:Number){
curr = new Vector(_arg1, 0);
prev = new Vector(0, 0);
sp = 0;
av = 0;
maxTorque = _arg2;
wr = _arg1;
}
function update(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
sp = Math.max(-(maxTorque), Math.min(maxTorque, (sp + av)));
_local2 = -(curr.y);
_local3 = curr.x;
_local4 = Math.sqrt(((_local2 * _local2) + (_local3 * _local3)));
_local2 = (_local2 / _local4);
_local3 = (_local3 / _local4);
curr.x = (curr.x + (sp * _local2));
curr.y = (curr.y + (sp * _local3));
_local5 = prev.x;
_local6 = prev.y;
_local7 = (prev.x = curr.x);
_local8 = (prev.y = curr.y);
curr.x = (curr.x + (APEngine.damping * (_local7 - _local5)));
curr.y = (curr.y + (APEngine.damping * (_local8 - _local6)));
_local9 = Math.sqrt(((curr.x * curr.x) + (curr.y * curr.y)));
_local10 = ((_local9 - wr) / _local9);
curr.x = (curr.x - (curr.x * _local10));
curr.y = (curr.y - (curr.y * _local10));
}
function set speed(_arg1:Number):void{
sp = _arg1;
}
function get angularVelocity():Number{
return (av);
}
function set angularVelocity(_arg1:Number):void{
av = _arg1;
}
function get speed():Number{
return (sp);
}
}
}//package org.cove.ape
Section 46
//SpringConstraint (org.cove.ape.SpringConstraint)
package org.cove.ape {
import flash.display.*;
public class SpringConstraint extends AbstractConstraint {
private var _collidable:Boolean;
private var _restLength:Number;
private var p1:AbstractParticle;
private var p2:AbstractParticle;
private var _scp:SpringConstraintParticle;
public function SpringConstraint(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:Number=0.5, _arg4:Boolean=false, _arg5:Number=1, _arg6:Number=1, _arg7:Boolean=false){
super(_arg3);
this.p1 = _arg1;
this.p2 = _arg2;
checkParticlesLocation();
_restLength = currLength;
setCollidable(_arg4, _arg5, _arg6, _arg7);
}
public function set rectScale(_arg1:Number):void{
if (scp == null){
return;
};
scp.rectScale = _arg1;
}
override public function init():void{
cleanup();
if (collidable){
scp.init();
} else {
if (displayObject != null){
initDisplay();
};
};
paint();
}
function initDisplay():void{
if (collidable){
scp.initDisplay();
} else {
displayObject.x = displayObjectOffset.x;
displayObject.y = displayObjectOffset.y;
displayObject.rotation = displayObjectRotation;
sprite.addChild(displayObject);
};
}
private function checkParticlesLocation():void{
if ((((p1.curr.x == p2.curr.x)) && ((p1.curr.y == p2.curr.y)))){
p2.curr.x = (p2.curr.x + 0.0001);
};
}
public function get radian():Number{
var _local1:Vector;
_local1 = delta;
return (Math.atan2(_local1.y, _local1.x));
}
public function setDisplay(_arg1:DisplayObject, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0):void{
if (collidable){
scp.setDisplay(_arg1, _arg2, _arg3, _arg4);
} else {
displayObject = _arg1;
displayObjectRotation = _arg4;
displayObjectOffset = new Vector(_arg2, _arg3);
};
}
function get scp():SpringConstraintParticle{
return (_scp);
}
public function get rectHeight():Number{
return (scp.rectHeight);
}
public function set restLength(_arg1:Number):void{
if (_arg1 <= 0){
throw (new ArgumentError("restLength must be greater than 0"));
};
_restLength = _arg1;
}
public function get currLength():Number{
return (p1.curr.distance(p2.curr));
}
public function get fixedEndLimit():Number{
return (scp.fixedEndLimit);
}
public function get rectScale():Number{
return (scp.rectScale);
}
function get delta():Vector{
return (p1.curr.minus(p2.curr));
}
public function get angle():Number{
return ((radian * MathUtil.ONE_EIGHTY_OVER_PI));
}
public function get center():Vector{
return (p1.curr.plus(p2.curr).divEquals(2));
}
public function set rectHeight(_arg1:Number):void{
if (scp == null){
return;
};
scp.rectHeight = _arg1;
}
public function get restLength():Number{
return (_restLength);
}
override public function paint():void{
var _local1:Vector;
if (collidable){
scp.paint();
} else {
if (displayObject != null){
_local1 = center;
sprite.x = _local1.x;
sprite.y = _local1.y;
sprite.rotation = angle;
} else {
sprite.graphics.clear();
sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha);
sprite.graphics.moveTo(p1.px, p1.py);
sprite.graphics.lineTo(p2.px, p2.py);
};
};
}
public function setCollidable(_arg1:Boolean, _arg2:Number, _arg3:Number, _arg4:Boolean=false):void{
_collidable = _arg1;
_scp = null;
if (_collidable){
_scp = new SpringConstraintParticle(p1, p2, this, _arg2, _arg3, _arg4);
};
}
public function get collidable():Boolean{
return (_collidable);
}
public function isConnectedTo(_arg1:AbstractParticle):Boolean{
return ((((_arg1 == p1)) || ((_arg1 == p2))));
}
override function resolve():void{
var _local1:Number;
var _local2:Number;
var _local3:Vector;
if (((p1.fixed) && (p2.fixed))){
return;
};
_local1 = currLength;
_local2 = ((_local1 - restLength) / (_local1 * (p1.invMass + p2.invMass)));
_local3 = delta.mult((_local2 * stiffness));
p1.curr.minusEquals(_local3.mult(p1.invMass));
p2.curr.plusEquals(_local3.mult(p2.invMass));
}
public function get fixed():Boolean{
return (((p1.fixed) && (p2.fixed)));
}
public function set fixedEndLimit(_arg1:Number):void{
if (scp == null){
return;
};
scp.fixedEndLimit = _arg1;
}
}
}//package org.cove.ape
Section 47
//SpringConstraintParticle (org.cove.ape.SpringConstraintParticle)
package org.cove.ape {
import flash.display.*;
import org.cove.ape.*;
class SpringConstraintParticle extends RectangleParticle {
private var _fixedEndLimit:Number;
private var _rectScale:Number;
private var rca:Vector;
private var rcb:Vector;
private var s:Number;
private var parent:SpringConstraint;
private var scaleToLength:Boolean;
private var p1:AbstractParticle;
private var p2:AbstractParticle;
private var lambda:Vector;
private var avgVelocity:Vector;
private var _rectHeight:Number;
function SpringConstraintParticle(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:SpringConstraint, _arg4:Number, _arg5:Number, _arg6:Boolean){
super(0, 0, 0, 0, 0, false);
this.p1 = _arg1;
this.p2 = _arg2;
lambda = new Vector(0, 0);
avgVelocity = new Vector(0, 0);
parent = _arg3;
this.rectScale = _arg5;
this.rectHeight = _arg4;
this.scaleToLength = _arg6;
fixedEndLimit = 0;
rca = new Vector();
rcb = new Vector();
}
private function setCorners(_arg1:RectangleParticle, _arg2:int):void{
var _local3:Number;
var _local4:Number;
var _local5:Array;
var _local6:Array;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
_local3 = _arg1.curr.x;
_local4 = _arg1.curr.y;
_local5 = _arg1.axes;
_local6 = _arg1.extents;
_local7 = (_local5[0].x * _local6[0]);
_local8 = (_local5[0].y * _local6[0]);
_local9 = (_local5[1].x * _local6[1]);
_local10 = (_local5[1].y * _local6[1]);
_local11 = (_local7 - _local9);
_local12 = (_local8 - _local10);
_local13 = (_local7 + _local9);
_local14 = (_local8 + _local10);
if (_arg2 == 0){
rca.x = (_local3 - _local13);
rca.y = (_local4 - _local14);
rcb.x = (_local3 + _local11);
rcb.y = (_local4 + _local12);
} else {
if (_arg2 == 1){
rca.x = (_local3 + _local11);
rca.y = (_local4 + _local12);
rcb.x = (_local3 + _local13);
rcb.y = (_local4 + _local14);
} else {
if (_arg2 == 2){
rca.x = (_local3 + _local13);
rca.y = (_local4 + _local14);
rcb.x = (_local3 - _local11);
rcb.y = (_local4 - _local12);
} else {
if (_arg2 == 3){
rca.x = (_local3 - _local11);
rca.y = (_local4 - _local12);
rcb.x = (_local3 - _local13);
rcb.y = (_local4 - _local14);
};
};
};
};
}
override public function init():void{
var _local1:Sprite;
var _local2:Number;
var _local3:Number;
if (displayObject != null){
initDisplay();
} else {
_local1 = new Sprite();
parent.sprite.addChild(_local1);
_local1.name = "inner";
_local2 = (parent.currLength * rectScale);
_local3 = rectHeight;
_local1.graphics.clear();
_local1.graphics.lineStyle(parent.lineThickness, parent.lineColor, parent.lineAlpha);
_local1.graphics.beginFill(parent.fillColor, parent.fillAlpha);
_local1.graphics.drawRect((-(_local2) / 2), (-(_local3) / 2), _local2, _local3);
_local1.graphics.endFill();
};
paint();
}
function updatePosition():void{
var _local1:Vector;
_local1 = parent.center;
curr.setTo(_local1.x, _local1.y);
width = (scaleToLength) ? (parent.currLength * rectScale) : (parent.restLength * rectScale);
height = rectHeight;
radian = parent.radian;
}
private function closestPtSegmentSegment():Number{
var _local1:Vector;
var _local2:Vector;
var _local3:Vector;
var _local4:Vector;
var _local5:Vector;
var _local6:Vector;
var _local7:Vector;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Vector;
var _local16:Vector;
var _local17:Vector;
_local1 = p1.curr;
_local2 = p2.curr;
_local3 = rca;
_local4 = rcb;
_local5 = _local2.minus(_local1);
_local6 = _local4.minus(_local3);
_local7 = _local1.minus(_local3);
_local9 = _local5.dot(_local5);
_local10 = _local6.dot(_local6);
_local11 = _local6.dot(_local7);
_local12 = _local5.dot(_local7);
_local13 = _local5.dot(_local6);
_local14 = ((_local9 * _local10) - (_local13 * _local13));
if (_local14 != 0){
s = MathUtil.clamp((((_local13 * _local11) - (_local12 * _local10)) / _local14), 0, 1);
} else {
s = 0.5;
};
_local8 = (((_local13 * s) + _local11) / _local10);
if (_local8 < 0){
_local8 = 0;
s = MathUtil.clamp((-(_local12) / _local9), 0, 1);
} else {
if (_local8 > 0){
_local8 = 1;
s = MathUtil.clamp(((_local13 - _local12) / _local9), 0, 1);
};
};
_local15 = _local1.plus(_local5.mult(s));
_local16 = _local3.plus(_local6.mult(_local8));
_local17 = _local15.minus(_local16);
return (_local15.minus(_local16).dot(_local17));
}
function get rectHeight():Number{
return (_rectHeight);
}
function get fixedEndLimit():Number{
return (_fixedEndLimit);
}
private function closestParamPoint(_arg1:Vector):Number{
var _local2:Vector;
var _local3:Number;
_local2 = p2.curr.minus(p1.curr);
_local3 = (_local2.dot(_arg1.minus(p1.curr)) / _local2.dot(_local2));
return (MathUtil.clamp(_local3, 0, 1));
}
function set rectHeight(_arg1:Number):void{
_rectHeight = _arg1;
}
override public function paint():void{
var _local1:Vector;
var _local2:Sprite;
_local1 = parent.center;
_local2 = parent.sprite;
if (scaleToLength){
_local2.getChildByName("inner").width = (parent.currLength * rectScale);
} else {
if (displayObject != null){
_local2.getChildByName("inner").width = (parent.restLength * rectScale);
};
};
_local2.x = _local1.x;
_local2.y = _local1.y;
_local2.rotation = parent.angle;
}
private function getContactPointParam(_arg1:AbstractParticle):Number{
var _local2:Number;
var _local3:Number;
var _local4:Array;
var _local5:Number;
var _local6:int;
var _local7:Number;
if ((_arg1 is CircleParticle)){
_local2 = closestParamPoint(_arg1.curr);
} else {
if ((_arg1 is RectangleParticle)){
_local4 = new Array(4);
_local5 = Number.POSITIVE_INFINITY;
_local6 = 0;
while (_local6 < 4) {
setCorners((_arg1 as RectangleParticle), _local6);
_local7 = closestPtSegmentSegment();
if (_local7 < _local5){
_local5 = _local7;
_local3 = _local6;
_local4[_local6] = s;
};
_local6++;
};
_local2 = _local4[_local3];
};
};
return (_local2);
}
function set fixedEndLimit(_arg1:Number):void{
_fixedEndLimit = _arg1;
}
override function get invMass():Number{
if (((p1.fixed) && (p2.fixed))){
return (0);
};
return ((1 / ((p1.mass + p2.mass) / 2)));
}
override function initDisplay():void{
var _local1:Sprite;
displayObject.x = displayObjectOffset.x;
displayObject.y = displayObjectOffset.y;
displayObject.rotation = displayObjectRotation;
_local1 = new Sprite();
_local1.name = "inner";
_local1.addChild(displayObject);
parent.sprite.addChild(_local1);
}
function set rectScale(_arg1:Number):void{
_rectScale = _arg1;
}
override function resolveCollision(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number, _arg5:int, _arg6:AbstractParticle):void{
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:AbstractParticle;
_local7 = getContactPointParam(_arg6);
_local8 = (1 - _local7);
_local9 = _local7;
if (p1.fixed){
if (_local9 <= fixedEndLimit){
return;
};
lambda.setTo((_arg1.x / _local9), (_arg1.y / _local9));
p2.curr.plusEquals(lambda);
p2.velocity = _arg2;
} else {
if (p2.fixed){
if (_local8 <= fixedEndLimit){
return;
};
lambda.setTo((_arg1.x / _local8), (_arg1.y / _local8));
p1.curr.plusEquals(lambda);
p1.velocity = _arg2;
} else {
_local10 = ((_local8 * _local8) + (_local9 * _local9));
if (_local10 == 0){
return;
};
lambda.setTo((_arg1.x / _local10), (_arg1.y / _local10));
p1.curr.plusEquals(lambda.mult(_local8));
p2.curr.plusEquals(lambda.mult(_local9));
if (_local7 == 0.5){
p1.velocity = _arg2;
p2.velocity = _arg2;
} else {
_local11 = ((_local7)<0.5) ? p1 : p2;
_local11.velocity = _arg2;
};
};
};
}
override public function get elasticity():Number{
return (((p1.elasticity + p2.elasticity) / 2));
}
function get rectScale():Number{
return (_rectScale);
}
override public function get velocity():Vector{
var _local1:Vector;
var _local2:Vector;
_local1 = p1.velocity;
_local2 = p2.velocity;
avgVelocity.setTo(((_local1.x + _local2.x) / 2), ((_local1.y + _local2.y) / 2));
return (avgVelocity);
}
override public function get friction():Number{
return (((p1.friction + p2.friction) / 2));
}
override public function get mass():Number{
return (((p1.mass + p2.mass) / 2));
}
}
}//package org.cove.ape
Section 48
//Vector (org.cove.ape.Vector)
package org.cove.ape {
public class Vector {
public var x:Number;
public var y:Number;
public function Vector(_arg1:Number=0, _arg2:Number=0){
x = _arg1;
y = _arg2;
}
public function cross(_arg1:Vector):Number{
return (((x * _arg1.y) - (y * _arg1.x)));
}
public function magnitude():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function divEquals(_arg1:Number):Vector{
if (_arg1 == 0){
_arg1 = 0.0001;
};
x = (x / _arg1);
y = (y / _arg1);
return (this);
}
public function times(_arg1:Vector):Vector{
return (new Vector((x * _arg1.x), (y * _arg1.y)));
}
public function plusEquals(_arg1:Vector):Vector{
x = (x + _arg1.x);
y = (y + _arg1.y);
return (this);
}
public function dot(_arg1:Vector):Number{
return (((x * _arg1.x) + (y * _arg1.y)));
}
public function toString():String{
return (((x + " : ") + y));
}
public function normalize():Vector{
var _local1:Number;
_local1 = magnitude();
if (_local1 == 0){
_local1 = 0.0001;
};
return (mult((1 / _local1)));
}
public function copy(_arg1:Vector):void{
x = _arg1.x;
y = _arg1.y;
}
public function minusEquals(_arg1:Vector):Vector{
x = (x - _arg1.x);
y = (y - _arg1.y);
return (this);
}
public function minus(_arg1:Vector):Vector{
return (new Vector((x - _arg1.x), (y - _arg1.y)));
}
public function plus(_arg1:Vector):Vector{
return (new Vector((x + _arg1.x), (y + _arg1.y)));
}
public function distance(_arg1:Vector):Number{
var _local2:Vector;
_local2 = this.minus(_arg1);
return (_local2.magnitude());
}
public function setTo(_arg1:Number, _arg2:Number):void{
x = _arg1;
y = _arg2;
}
public function multEquals(_arg1:Number):Vector{
x = (x * _arg1);
y = (y * _arg1);
return (this);
}
public function mult(_arg1:Number):Vector{
return (new Vector((x * _arg1), (y * _arg1)));
}
}
}//package org.cove.ape
Section 49
//WheelParticle (org.cove.ape.WheelParticle)
package org.cove.ape {
public class WheelParticle extends CircleParticle {
private var _traction:Number;
private var normSlip:Vector;
private var tan:Vector;
private var rp:RimParticle;
private var orientation:Vector;
public function WheelParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false, _arg5:Number=1, _arg6:Number=0.3, _arg7:Number=0, _arg8:Number=1){
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7);
tan = new Vector(0, 0);
normSlip = new Vector(0, 0);
rp = new RimParticle(_arg3, 2);
this.traction = _arg8;
orientation = new Vector();
}
public function set speed(_arg1:Number):void{
rp.speed = _arg1;
}
override public function init():void{
cleanup();
if (displayObject != null){
initDisplay();
} else {
sprite.graphics.clear();
sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha);
sprite.graphics.beginFill(fillColor, fillAlpha);
sprite.graphics.drawCircle(0, 0, radius);
sprite.graphics.endFill();
sprite.graphics.moveTo(-(radius), 0);
sprite.graphics.lineTo(radius, 0);
sprite.graphics.moveTo(0, -(radius));
sprite.graphics.lineTo(0, radius);
};
paint();
}
public function set traction(_arg1:Number):void{
_traction = (1 - _arg1);
}
override function resolveCollision(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number, _arg5:int, _arg6:AbstractParticle):void{
super.resolveCollision(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6);
resolve(_arg3.mult(MathUtil.sign((_arg4 * _arg5))));
}
public function get traction():Number{
return ((1 - _traction));
}
public function get radian():Number{
orientation.setTo(rp.curr.x, rp.curr.y);
return ((Math.atan2(orientation.y, orientation.x) + Math.PI));
}
public function set angularVelocity(_arg1:Number):void{
rp.angularVelocity = _arg1;
}
public function get speed():Number{
return (rp.speed);
}
override public function update(_arg1:Number):void{
super.update(_arg1);
rp.update(_arg1);
}
public function get angle():Number{
return ((radian * MathUtil.ONE_EIGHTY_OVER_PI));
}
override public function paint():void{
sprite.x = curr.x;
sprite.y = curr.y;
sprite.rotation = angle;
}
public function get angularVelocity():Number{
return (rp.angularVelocity);
}
private function resolve(_arg1:Vector):void{
var _local2:Vector;
var _local3:Vector;
var _local4:Number;
var _local5:Number;
tan.setTo(-(rp.curr.y), rp.curr.x);
tan = tan.normalize();
_local2 = tan.mult(rp.speed);
_local3 = velocity.plusEquals(_local2);
_local4 = _local3.cross(_arg1);
tan.multEquals(_local4);
rp.prev.copy(rp.curr.minus(tan));
_local5 = ((1 - _traction) * rp.speed);
normSlip.setTo((_local5 * _arg1.y), (_local5 * _arg1.x));
curr.plusEquals(normSlip);
rp.speed = (rp.speed * _traction);
}
}
}//package org.cove.ape
Section 50
//filler (filler)
package {
import flash.events.*;
import flash.text.*;
import flash.display.*;
import org.cove.ape.*;
import com.mochi.*;
import flash.utils.*;
import com.simianlogic.*;
import flash.media.*;
import flash.net.*;
public class filler extends Sprite {
public var percentFilled:Number;
private var splashSprite:DisplayObject;
public var timerText:TextField;
private var modAlert24Mp3:Class;
public var activeBall:growthSprite;
private var playerScore:int;// = 0
private var rollOverMp3:Class;
public var soundOverlay:Sprite;
public var pauseText:TextField;
public var bg:Sprite;
public var timeLeft:Number;
public var ballsLeft:Number;
public var soundOptions:Array;
private var armorSplash:Class;
private var musicMp3:Class;
private var rollOverSound:Sound;
public var fillerBalls:Group;
private var thudSound:Sound;
public var levelText:TextField;
public var livesText:TextField;
public var LASTUPDATE:int;
public var player:Group;
public var scoreText:TextField;
private var splashHolder:Sprite;
public var redCount:int;// = 0
private var alert24Sound:Sound;
private var playerName:String;// = "<your name>"
private var musicChannel:SoundChannel;
private var alert05Sound:Sound;
public var bouncyBalls:Group;
public var LASTAD:int;// = 0
public var SOUNDENABLED:Boolean;// = true
private var modAlert05Mp3:Class;
public var pauseOverlay:Sprite;
public var MUSICENABLED:Boolean;// = true
public var world:Group;
public var GAMEPAUSED:Boolean;// = false
private var body:MovieClip;// = null
public var CURRENTLEVEL:int;// = 1
public var livesLeft:Number;
public var pctText:TextField;
public var ballText:TextField;
public var slideCount:int;
private var thudMp3:Class;
public var verticalMenu:Sprite;
private var musicSound:Sound;
public static const MAXAREA:int = 230100;
public static const COLORLIST:Array = [3394815, 3407718, 16763955, 13382655, 0x3DF500, 47349, 0x3D00F5, 10092400, 15861];
public static var GAME_OPTIONS:Object = {id:"74eaa3b8c08bf451", res:"600x500"};
public function filler(){
armorSplash = filler_armorSplash;
musicMp3 = filler_musicMp3;
rollOverMp3 = filler_rollOverMp3;
modAlert05Mp3 = filler_modAlert05Mp3;
modAlert24Mp3 = filler_modAlert24Mp3;
thudMp3 = filler_thudMp3;
body = null;
CURRENTLEVEL = 1;
GAMEPAUSED = false;
SOUNDENABLED = true;
MUSICENABLED = true;
LASTAD = 0;
playerName = "<your name>";
playerScore = 0;
redCount = 0;
soundOptions = [1, 1, 1, 1];
super();
if (stage != null){
init(false);
};
}
private function showMenu(_arg1:Event=null):void{
verticalMenu.visible = true;
}
private function freezeActiveBall():void{
var _local1:Array;
var _local2:growthSprite;
_local1 = player.getAll();
if ((((_local1.length > 0)) && ((_local1[0] == activeBall)))){
player.removeParticle(activeBall);
};
_local2 = new growthSprite(activeBall.position.x, activeBall.position.y, activeBall.radius, 0xCCCCCC);
fillerBalls.addParticle(_local2);
playerScore = (playerScore + Math.round((((3.1415 * activeBall.radius) * activeBall.radius) / 100)));
scoreText.text = ("Score: " + playerScore);
tallyPercent();
if (percentFilled >= 66.555){
return;
};
ballsLeft--;
if (ballsLeft < 0){
ouch();
};
ballsLeft = Math.max(ballsLeft, 0);
ballText.text = ("Balls: " + ballsLeft);
}
private function mouseUp(_arg1:Event):void{
var _local2:Array;
_local2 = player.getAll();
if ((((_local2.length > 0)) && ((_local2[0] == activeBall)))){
freezeActiveBall();
};
}
public function fadeBody():void{
var _local1:Timer;
if (((!(body)) || (!(contains(body))))){
return;
};
_local1 = new Timer(10, 40);
_local1.addEventListener("timer", fadeHandler);
_local1.addEventListener("timerComplete", fadeHandlerDone);
slideCount = 0;
body.alpha = 0;
_local1.start();
}
private function startLevel(_arg1:int):void{
var _local2:int;
var _local3:Array;
var _local4:Array;
var _local5:int;
var _local6:constantVSprite;
if (((body) && (contains(body)))){
removeChild(body);
};
if (GAMEPAUSED){
pause();
};
livesLeft = (_arg1 + 1);
timeLeft = ((60 + (_arg1 * 30)) * 1000);
ballsLeft = (18 + (2 * _arg1));
_local2 = 4.5;
_local3 = [new Vector(-(_local2), -(_local2)), new Vector(_local2, -(_local2)), new Vector(_local2, _local2), new Vector(-(_local2), _local2)];
_local4 = bouncyBalls.getAll();
_local5 = 0;
while (_local5 < _local4.length) {
bouncyBalls.removeParticle(_local4[_local5]);
_local5++;
};
_local4 = fillerBalls.getAll();
_local5 = 0;
while (_local5 < _local4.length) {
fillerBalls.removeParticle(_local4[_local5]);
_local5++;
};
_local5 = 0;
while (_local5 < (_arg1 + 1)) {
_local6 = new constantVSprite(((Math.random() * 500) + 50), ((Math.random() * 350) + 125));
_local6.setVelocity(_local3[int((Math.random() * 3.9999))]);
bouncyBalls.addParticle(_local6);
_local5++;
};
pctText.text = "0% cleared";
levelText.text = ("Level: " + _arg1);
livesText.text = ("Lives: " + livesLeft);
timerText.text = ("Time left: " + Math.round((timeLeft / 100)));
timerText.x = (600 - (timerText.textWidth + 5));
ballText.text = ("Balls: " + ballsLeft);
LASTUPDATE = getTimer();
}
public function nextLevel(_arg1:Event=null):void{
CURRENTLEVEL++;
startLevel(CURRENTLEVEL);
}
public function dismissOverlay(_arg1:Event=null):void{
if (body){
if (contains(body)){
removeChild(body);
};
body = null;
};
if (livesLeft == 0){
newGameButton();
return;
};
if (percentFilled > 65.55){
nextLevel();
};
if (GAMEPAUSED){
pause();
};
}
public function getOptions():Object{
var _local1:Object;
var _local2:String;
_local1 = {clip:body, id:"74eaa3b8c08bf451"};
for (_local2 in GAME_OPTIONS) {
_local1[_local2] = GAME_OPTIONS[_local2];
};
return (_local1);
}
public function flashRed():void{
var _local1:Timer;
bg.graphics.clear();
bg.graphics.beginFill(0x555555);
bg.graphics.drawRect(0, 0, 600, 500);
bg.graphics.endFill();
bg.graphics.beginFill(0x550000);
bg.graphics.drawRect(0, 100, 600, 400);
bg.graphics.endFill();
_local1 = new Timer(5, 20);
_local1.addEventListener("timer", redTimerHandler);
_local1.addEventListener("timerComplete", redTimerHandlerDone);
redCount = 0;
_local1.start();
}
public function getAverageSize():int{
var _local1:Array;
var _local2:Number;
var _local3:int;
_local1 = fillerBalls.getAll();
_local2 = 0;
_local3 = 0;
while (_local3 < _local1.length) {
_local2 = (_local2 + _local1[_local3].radius);
_local3++;
};
return (Math.round((_local2 / _local1.length)));
}
private function toggleSFX(_arg1:Event=null):void{
if (SOUNDENABLED){
SOUNDENABLED = false;
_arg1.target.label = "SFX On";
} else {
SOUNDENABLED = true;
_arg1.target.label = "SFX Off";
};
}
private function run(_arg1:Event):void{
var _local2:Array;
var _local3:int;
var _local4:Array;
var _local5:constantVSprite;
var _local6:Array;
var _local7:int;
var _local8:SoundTransform;
if (GAMEPAUSED){
return;
};
_local2 = bouncyBalls.getAll();
_local3 = 0;
while (_local3 < _local2.length) {
if ((((((((_local2[_local3].position.x < 0)) || ((_local2[_local3].position.x > 600)))) || ((_local2[_local3].position.y > 500)))) || ((_local2[_local3].position.y < 100)))){
_local5 = new constantVSprite(570, 130);
_local5.setVelocity(new Vector(-4.5, 4.5));
bouncyBalls.addParticle(_local5);
bouncyBalls.removeParticle(_local2[_local3]);
};
_local3++;
};
APEngine.step();
APEngine.paint();
timeLeft = (timeLeft - (getTimer() - LASTUPDATE));
timeLeft = Math.max(0, timeLeft);
LASTUPDATE = getTimer();
timerText.text = ("Time left: " + Math.round((timeLeft / 100)));
_local4 = player.getAll();
if (_local4.length > 0){
_local6 = bouncyBalls.getAll();
_local7 = 0;
while (_local7 < _local6.length) {
if (_local6[_local7].position.distance(activeBall.position) < ((activeBall.radius + _local6[_local7].radius) + 0.25)){
player.removeParticle(activeBall);
if (SOUNDENABLED){
_local8 = new SoundTransform(1.5);
thudSound.play(0, 0, _local8);
};
ouch();
return;
};
_local7++;
};
if (activeBall.radius > 187.5){
freezeActiveBall();
return;
};
_local6 = fillerBalls.getAll();
_local7 = 0;
while (_local7 < _local6.length) {
if (_local6[_local7].position.distance(activeBall.position) < ((activeBall.radius + _local6[_local7].radius) + 0.25)){
freezeActiveBall();
return;
};
_local7++;
};
};
}
private function closeScoresNew(_arg1:Event):void{
newGameButton();
}
private function redTimerHandlerDone(_arg1:TimerEvent):void{
bg.graphics.clear();
bg.graphics.beginFill(0x555555);
bg.graphics.drawRect(0, 0, 600, 500);
bg.graphics.endFill();
}
public function fetchHighScores(_arg1:Object=null):void{
var _local2:Sprite;
var _local3:TextScoreTable;
var _local4:TextField;
var _local5:Object;
if (percentFilled >= 66.6){
return;
};
if (!GAMEPAUSED){
pause();
};
if (body){
if (contains(body)){
removeChild(body);
};
body = null;
};
body = new MovieClip();
body.x = 0;
body.y = 0;
addChild(body);
fadeBody();
_local2 = new Sprite();
_local2.graphics.beginFill(0);
_local2.graphics.drawRect(100, 150, 400, 300);
_local2.graphics.endFill();
_local2.graphics.beginFill(0x333333);
_local2.graphics.drawRect(102, 152, 396, 296);
_local2.graphics.endFill();
body.addChild(_local2);
_local3 = new TextScoreTable();
trace("table created...");
body.addChild(_local3);
_local3.x = 105;
_local3.y = 155;
_local3.init();
_local4 = new_tf("center");
_local4.x = 235;
_local4.y = 420;
_local4.width = 150;
_local4.htmlText = "<font size='size:8px'>(Click to Continue)</font>";
body.addChild(_local4);
body.addEventListener("click", dismissOverlay);
_local5 = getOptions();
_local3.reset("Fetching high scores...");
MochiAd.fetchHighScores(_local5, _local3, "gotScores");
}
private function ouch():void{
var _local1:SoundTransform;
flashRed();
livesLeft--;
livesText.text = ("Lives: " + livesLeft);
if (livesLeft <= 0){
GAMEPAUSED = true;
stopMusic();
_local1 = new SoundTransform(0.5);
if (SOUNDENABLED){
alert05Sound.play(0, 0, _local1);
};
setTimeout(sendHighScore, 400);
};
}
public function outOfBounds(_arg1:Event=null):void{
var _local2:SoundTransform;
player.removeParticle(activeBall);
if (SOUNDENABLED){
_local2 = new SoundTransform(1.5);
thudSound.play(0, 0, _local2);
};
ouch();
}
public function startMusic():void{
var _local1:SoundTransform;
if (musicChannel){
musicChannel.stop();
};
if (!MUSICENABLED){
return;
};
_local1 = new SoundTransform(0.25);
musicChannel = musicSound.play(0, 100, _local1);
}
public function showInterLevel(_arg1:Object=null):void{
var opts:Object;
var ev = _arg1;
LASTAD = getTimer();
if (GAMEPAUSED){
pause();
};
GAMEPAUSED = true;
if (body){
if (contains(body)){
removeChild(body);
};
body = null;
};
body = new MovieClip();
body.x = 0;
body.y = 0;
addChild(body);
fadeBody();
opts = getOptions();
opts.ad_started = function ():void{
};
opts.ad_finished = newGame;
MochiAd.showInterLevelAd(opts);
}
private function drawUI():void{
var _local1:TextFormat;
var _local2:TextField;
var _local3:TextField;
var _local4:ezButton;
var _local5:ezButton;
var _local6:ezButton;
var _local7:ezButton;
var _local8:ezButton;
var _local9:ezButton;
_local1 = new TextFormat();
_local1.font = "Arial";
_local1.color = 0xFFFFFF;
_local1.size = 18;
pauseText = new TextField();
pauseText.selectable = false;
pauseText.defaultTextFormat = _local1;
pauseText.text = "Game Paused";
pauseText.width = 250;
pauseText.x = 245;
pauseText.y = 300;
pauseOverlay = new Sprite();
pauseOverlay.graphics.beginFill(0, 0.5);
pauseOverlay.graphics.drawRect(0, 100, 600, 400);
pauseOverlay.graphics.endFill();
_local1.size = 24;
_local2 = new TextField();
_local2.selectable = false;
_local2.defaultTextFormat = _local1;
_local2.text = "filler: a game";
_local2.width = 400;
_local2.x = 5;
_local2.y = 5;
bg.addChild(_local2);
_local1.size = 16;
_local3 = new TextField();
_local3.selectable = false;
_local3.defaultTextFormat = _local1;
_local3.htmlText = "<a href='http://www.simianlogic3d.com/blog'>by SimianLogic</a>";
_local3.width = 400;
_local3.x = 50;
_local3.y = 35;
bg.addChild(_local3);
pctText = new TextField();
pctText.defaultTextFormat = _local1;
pctText.text = "0% cleared";
pctText.selectable = false;
pctText.width = 400;
pctText.x = 260;
pctText.y = 75;
bg.addChild(pctText);
scoreText = new TextField();
scoreText.defaultTextFormat = _local1;
scoreText.text = "Score: 0";
scoreText.selectable = false;
scoreText.width = 400;
scoreText.x = (300 - (scoreText.textWidth / 2));
scoreText.y = 35;
bg.addChild(scoreText);
levelText = new TextField();
levelText.defaultTextFormat = _local1;
levelText.text = "Level 1";
levelText.selectable = false;
levelText.width = 200;
levelText.x = 5;
levelText.y = 75;
bg.addChild(levelText);
livesText = new TextField();
livesText.defaultTextFormat = _local1;
livesText.text = "Lives: 22";
livesText.selectable = false;
livesText.width = 400;
livesText.x = 530;
livesText.y = 75;
bg.addChild(livesText);
ballText = new TextField();
ballText.defaultTextFormat = _local1;
ballText.text = "Balls: 20";
ballText.selectable = false;
ballText.width = 400;
ballText.x = 530;
ballText.y = 55;
bg.addChild(ballText);
timerText = new TextField();
timerText.defaultTextFormat = _local1;
timerText.text = "Time left: 900";
timerText.selectable = false;
timerText.width = 400;
timerText.x = (500 - (timerText.textWidth + 5));
timerText.y = 5;
bg.addChild(timerText);
_local4 = new ezButton("Pause", "pause", 100, 30);
_local4.x = 300;
_local4.y = 5;
bg.addChild(_local4);
_local4.addEventListener("button_pause", pause);
_local5 = new ezButton("Menu", "showMenu", 100, 30);
_local5.addEventListener(MouseEvent.ROLL_OVER, showMenu);
_local5.x = 200;
_local5.y = 5;
bg.addChild(_local5);
verticalMenu = new Sprite();
verticalMenu.addEventListener(MouseEvent.ROLL_OUT, hideMenu);
verticalMenu.x = (_local5.x - 1);
verticalMenu.y = 0;
verticalMenu.visible = false;
verticalMenu.graphics.beginFill(0);
verticalMenu.graphics.drawRect(0, 0, 102, 100);
verticalMenu.graphics.endFill();
_local6 = new ezButton("NewGame", "newGame", 100, 25);
_local6.x = 1;
_local6.y = 2;
verticalMenu.addChild(_local6);
_local6.addEventListener("button_newGame", newGameButton);
_local7 = new ezButton("Instructions", "help", 100, 25);
_local7.x = 1;
_local7.y = 26;
verticalMenu.addChild(_local7);
_local7.addEventListener("button_help", showInstructions);
_local8 = new ezButton("SFX Off", "sfx", 100, 25);
_local8.x = 1;
_local8.y = 50;
verticalMenu.addChild(_local8);
_local8.addEventListener("button_sfx", toggleSFX);
_local9 = new ezButton("Music Off", "music", 100, 25);
_local9.x = 1;
_local9.y = 74;
verticalMenu.addChild(_local9);
_local9.addEventListener("button_music", toggleMusic);
bg.addChild(verticalMenu);
}
private function mouseDown(_arg1:Event):void{
var _local2:Array;
if (GAMEPAUSED){
return;
};
_local2 = player.getAll();
if ((((_local2.length > 0)) && ((_local2[0] == activeBall)))){
player.removeParticle(activeBall);
};
if (mouseY > 105){
activeBall = new growthSprite(mouseX, mouseY, 10, 0xFFFFFF, true);
activeBall.sprite.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
activeBall.sprite.addEventListener("outOfBoundsEvent", outOfBounds);
player.addParticle(activeBall);
};
}
public function buttonSound(_arg1:Event):void{
var _local2:SoundTransform;
if (!SOUNDENABLED){
return;
};
_local2 = new SoundTransform(0.1);
rollOverSound.play(0, 0, _local2);
}
public function showInstruction2(_arg1:Event):void{
var _local2:Sprite;
var _local3:TextField;
var _local4:TextField;
var _local5:String;
var _local6:constantVSprite;
var _local7:Sprite;
var _local8:growthSprite;
var _local9:Sprite;
var _local10:growthSprite;
var _local11:Sprite;
var _local12:growthSprite;
var _local13:Sprite;
var _local14:growthSprite;
var _local15:Sprite;
var _local16:TextField;
var _local17:TextField;
var _local18:TextField;
var _local19:TextField;
var _local20:ezButton;
var _local21:ezButton;
if (!GAMEPAUSED){
pause();
};
if (((body) && (contains(body)))){
removeChild(body);
};
body = new MovieClip();
_local2 = new Sprite();
_local2.graphics.beginFill(0);
_local2.graphics.drawRect(0, 0, 400, 300);
_local2.graphics.endFill();
_local2.graphics.beginFill(0x333333);
_local2.graphics.drawRect(2, 2, 396, 296);
_local2.graphics.endFill();
_local2.x = 100;
_local2.y = 150;
_local3 = new_tf("title");
_local3.x = 70;
_local3.y = 30;
_local3.width = 275;
_local3.text = "Instructions";
_local2.addChild(_local3);
_local4 = new_tf("left");
_local4.defaultTextFormat.align = "justify";
_local4.x = 25;
_local4.y = 90;
_local4.width = 350;
_local4.height = 250;
_local4.multiline = true;
_local4.wordWrap = true;
_local5 = "Press down on the mouse to create a filler ball. It will continue to grow until...";
_local4.htmlText = _local5;
_local2.addChild(_local4);
addChild(body);
body.addChild(_local2);
_local6 = new constantVSprite(0, 0);
_local7 = _local6.sprite;
_local8 = new growthSprite(0, 0, 30, 0xFFFFFF);
_local9 = _local8.sprite;
_local2.addChild(_local7);
_local2.addChild(_local9);
_local7.x = 320;
_local9.x = 80;
_local7.y = 175;
_local9.y = 175;
_local10 = new growthSprite(0, 0, 20, 0xFFFFFF);
_local11 = _local10.sprite;
_local12 = new growthSprite(0, 0, 20, 0xFFFFFF);
_local13 = _local12.sprite;
_local14 = new growthSprite(0, 0, 20, 0xFFFFFF);
_local15 = _local14.sprite;
_local2.addChild(_local11);
_local2.addChild(_local13);
_local11.x = 180;
_local11.y = 205;
_local13.x = 220;
_local13.y = 205;
_local2.addChild(_local15);
_local15.x = 290;
_local15.y = 175;
_local16 = new_tf("center");
_local16.x = 5;
_local16.y = 205;
_local16.width = 150;
_local16.text = "...you release\nthe mouse";
_local2.addChild(_local16);
_local17 = new_tf("center");
_local17.x = 230;
_local17.y = 205;
_local17.width = 150;
_local17.text = "...you run into\na bouncy ball";
_local2.addChild(_local17);
_local18 = new_tf("center");
_local18.x = 125;
_local18.y = 145;
_local18.width = 150;
_local18.text = "...you run into\na filler ball";
_local2.addChild(_local18);
_local19 = new_tf("center");
_local19.x = 260;
_local19.y = 145;
_local19.width = 150;
_local19.text = "OUCH!";
_local2.addChild(_local19);
_local2.graphics.lineStyle(1, 0, 1);
_local2.graphics.beginFill(0x770000);
_local2.graphics.drawRect(260, 135, 100, 70);
_local2.graphics.endFill();
_local20 = new ezButton("Next", "inst_2", 80, 25);
_local21 = new ezButton("Start", "skip_instructions", 80, 25);
_local2.addChild(_local20);
_local20.x = 200;
_local20.y = 260;
_local2.addChild(_local21);
_local21.x = 115;
_local21.y = 260;
_local21.addEventListener("button_skip_instructions", dismissOverlay);
_local20.addEventListener("button_inst_2", showInstructions3);
}
private function showRoundup(_arg1:Event=null):void{
}
public function init(_arg1:Boolean):void{
var _local2:shadowRectParticle;
var _local3:shadowRectParticle;
var _local4:shadowRectParticle;
var _local5:shadowRectParticle;
MochiBot.track(this, "446d3202");
bg = new Sprite();
bg.graphics.beginFill(0x555555);
bg.graphics.drawRect(0, 0, 600, 500);
bg.graphics.endFill();
addChild(bg);
stage.frameRate = 45;
addEventListener(Event.ENTER_FRAME, run);
rollOverSound = new rollOverMp3();
addEventListener("sound_rollover", buttonSound);
alert05Sound = new modAlert05Mp3();
alert24Sound = new modAlert24Mp3();
thudSound = new thudMp3();
APEngine.init((1 / 4));
APEngine.damping = 1;
APEngine.container = this;
world = new Group();
player = new Group();
bouncyBalls = new Group();
fillerBalls = new Group();
_local2 = new shadowRectParticle(595, 300, 10, 400, 0, true, 1, 0.25);
_local3 = new shadowRectParticle(300, 495, 600, 10, 0, true, 1, 0.25);
_local4 = new shadowRectParticle(300, 105, 600, 10, 0, true, 1, 0.25);
_local5 = new shadowRectParticle(5, 300, 10, 400, 0, true, 1, 0.25);
_local2.sprite.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
_local5.sprite.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
_local3.sprite.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
_local4.sprite.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
world.addParticle(_local2);
world.addParticle(_local5);
world.addParticle(_local4);
world.addParticle(_local3);
player.addCollidable(world);
bouncyBalls.addCollidable(world);
fillerBalls.addCollidable(world);
bouncyBalls.addCollidable(fillerBalls);
bouncyBalls.collideInternal = true;
fillerBalls.collideInternal = true;
APEngine.addGroup(world);
APEngine.addGroup(player);
APEngine.addGroup(bouncyBalls);
APEngine.addGroup(fillerBalls);
bg.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
bg.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
drawUI();
musicSound = new musicMp3();
splashHolder = new Sprite();
splashSprite = (new armorSplash() as DisplayObject);
showSplash();
}
public function configureOverlays():void{
var _local1:Sprite;
var _local2:TextField;
var _local3:TextField;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:TextField;
var _local10:TextField;
if (((body) && (contains(body)))){
removeChild(body);
};
body = new MovieClip();
_local1 = new Sprite();
_local1.graphics.beginFill(0);
_local1.graphics.drawRect(0, 0, 360, 300);
_local1.graphics.endFill();
_local1.graphics.beginFill(0x333333);
_local1.graphics.drawRect(2, 2, 356, 296);
_local1.graphics.endFill();
_local1.x = 130;
_local1.y = 150;
_local2 = new_tf("title");
_local2.x = 50;
_local2.y = 30;
_local2.width = 275;
_local2.text = "Level Complete!";
_local1.addChild(_local2);
_local3 = new_tf("right");
_local3.x = 10;
_local3.y = 90;
_local3.width = 200;
_local3.height = 300;
_local3.htmlText = "Completion Bonus:\n Lives Bonus:\n Time Bonus:\n Balls Left Bonus: \n\n <b>Total Bonus:";
_local1.addChild(_local3);
_local4 = Math.max(0, Math.round((((percentFilled - 66.6) * (CURRENTLEVEL + 5)) * 4)));
_local5 = (livesLeft * 25);
_local6 = Math.floor((timeLeft / 1000));
_local7 = (ballsLeft * 5);
_local8 = (((_local4 + _local5) + _local6) + _local7);
playerScore = (playerScore + _local8);
scoreText.text = ("Score: " + playerScore);
_local9 = new_tf("right");
_local9.x = 160;
_local9.y = 90;
_local9.width = 100;
_local9.height = 300;
_local9.htmlText = (((((((((_local4 + "\n") + _local5) + "\n") + _local6) + "\n") + _local7) + "\n\n<b>") + _local8) + "</b>");
_local1.addChild(_local9);
addChild(body);
body.addChild(_local1);
_local10 = new_tf("center");
_local10.x = 115;
_local10.y = 270;
_local10.width = 150;
_local10.htmlText = "<font size='size:8px'>(Click to Continue)</font>";
_local1.addChild(_local10);
_local1.mouseChildren = false;
_local1.addEventListener("click", nextLevel);
fadeBody();
}
public function showInstructions3(_arg1:Event=null):void{
var _local2:Sprite;
var _local3:TextField;
var _local4:TextField;
var _local5:String;
var _local6:TextField;
var _local7:String;
var _local8:int;
var _local9:ezButton;
var _local10:ezButton;
var _local11:growthSprite;
var _local12:Sprite;
var _local13:growthSprite;
var _local14:Sprite;
if (!GAMEPAUSED){
pause();
};
if (((body) && (contains(body)))){
removeChild(body);
};
body = new MovieClip();
_local2 = new Sprite();
_local2.graphics.beginFill(0);
_local2.graphics.drawRect(0, 0, 400, 300);
_local2.graphics.endFill();
_local2.graphics.beginFill(0x333333);
_local2.graphics.drawRect(2, 2, 396, 296);
_local2.graphics.endFill();
_local2.x = 100;
_local2.y = 150;
_local3 = new_tf("title");
_local3.x = 70;
_local3.y = 30;
_local3.width = 275;
_local3.text = "Instructions";
_local2.addChild(_local3);
_local4 = new_tf("left");
_local4.defaultTextFormat.align = "justify";
_local4.x = 25;
_local4.y = 90;
_local4.width = 350;
_local4.height = 250;
_local4.multiline = true;
_local4.wordWrap = true;
_local5 = "You get a limited number of both lives and balls each round.";
_local4.htmlText = _local5;
_local2.addChild(_local4);
_local6 = new_tf("left");
_local6.defaultTextFormat.align = "justify";
_local6.x = 25;
_local6.y = 220;
_local6.width = 350;
_local6.height = 250;
_local6.multiline = true;
_local6.wordWrap = true;
_local7 = "If you run out of balls, each new ball will cost you a life.";
_local6.htmlText = _local7;
_local2.addChild(_local6);
addChild(body);
body.addChild(_local2);
_local8 = 0;
while (_local8 < 9) {
_local11 = new growthSprite(0, 0, 20, 0xFFFFFF);
_local12 = _local11.sprite;
_local2.addChild(_local12);
_local12.x = (40 + (40 * _local8));
_local12.y = 190;
_local13 = new growthSprite(0, 0, 20, 0xFFFFFF);
_local14 = _local13.sprite;
_local2.addChild(_local14);
_local14.x = (40 + (40 * _local8));
_local14.y = 150;
_local8++;
};
_local9 = new ezButton("Next", "inst_2", 80, 25);
_local10 = new ezButton("Start", "skip_instructions", 80, 25);
_local2.addChild(_local9);
_local9.x = 200;
_local9.y = 260;
_local2.addChild(_local10);
_local10.x = 115;
_local10.y = 260;
_local10.addEventListener("button_skip_instructions", dismissOverlay);
_local9.addEventListener("button_inst_2", showInstructions4);
}
public function showInstructions4(_arg1:Event=null):void{
var _local2:Sprite;
var _local3:TextField;
var _local4:TextField;
var _local5:String;
var _local6:ezButton;
if (!GAMEPAUSED){
pause();
};
if (((body) && (contains(body)))){
removeChild(body);
};
body = new MovieClip();
_local2 = new Sprite();
_local2.graphics.beginFill(0);
_local2.graphics.drawRect(0, 0, 400, 300);
_local2.graphics.endFill();
_local2.graphics.beginFill(0x333333);
_local2.graphics.drawRect(2, 2, 396, 296);
_local2.graphics.endFill();
_local2.x = 100;
_local2.y = 150;
_local3 = new_tf("title");
_local3.x = 70;
_local3.y = 30;
_local3.width = 275;
_local3.text = "Instructions";
_local2.addChild(_local3);
_local4 = new_tf("left");
_local4.defaultTextFormat.align = "justify";
_local4.x = 25;
_local4.y = 90;
_local4.width = 350;
_local4.height = 250;
_local4.multiline = true;
_local4.wordWrap = true;
_local5 = "At the end of each level, you will earn bonuses for: \n\n *Filling more than 2/3 of the level\n *Number of lives remaining\n *Time remaining\n *Balls remaining\n\nThe timer is only used for bonus, so don't worry about it running down to zero!";
_local4.htmlText = _local5;
_local2.addChild(_local4);
addChild(body);
body.addChild(_local2);
_local6 = new ezButton("Start", "skip_instructions", 80, 25);
_local2.addChild(_local6);
_local6.x = 155;
_local6.y = 260;
_local6.addEventListener("button_skip_instructions", dismissOverlay);
}
private function fadeHandler(_arg1:TimerEvent):void{
slideCount++;
body.alpha = (slideCount / 40);
}
public function postSplash():void{
var _local1:SoundTransform;
_local1 = new SoundTransform();
_local1.volume = 0;
splashHolder.soundTransform = _local1;
startLevel(1);
showInstructions();
bg.removeChild(pauseText);
checkSponsorLock();
}
private function toggleMusic(_arg1:Event=null):void{
if (MUSICENABLED){
MUSICENABLED = false;
stopMusic();
_arg1.target.label = "Music On";
} else {
MUSICENABLED = true;
startMusic();
_arg1.target.label = "Music Off";
};
}
private function checkSponsorLock():void{
var _local1:Sprite;
var _local2:TextField;
var _local3:Date;
var _local4:Date;
var _local5:TextField;
if (((testURL("armorgames.com")) || (testURL("simianlogic3d.com")))){
return;
};
GAMEPAUSED = true;
if (((body) && (contains(body)))){
removeChild(body);
};
body = new MovieClip();
body.x = 0;
body.y = 0;
addChild(body);
_local1 = new Sprite();
_local1.graphics.beginFill(0, 0.5);
_local1.graphics.drawRect(0, 0, 600, 500);
_local1.graphics.endFill();
body.addChild(_local1);
_local2 = new_tf("center");
_local2.text = "This version of filler was licensed exclusively to ArmorGames. \n";
_local2.appendText("If you would like a version for your site, a freely distributible version \ncan be found at http://www.simianlogic3d.com/blog.");
_local2.width = 450;
_local2.x = 100;
_local2.y = 200;
body.addChild(_local2);
_local3 = new Date(2008, 0, 31);
_local4 = new Date();
if (_local4.valueOf() < _local3.valueOf()){
_local5 = new_tf("center");
_local5.text = "The message above will not appear on the agreed-upon domains. If you\n need to test locally, you may click to dismiss this warning up until\nJanuary 31, 2008. If you need more time or are getting this message\nmistakenly, please contact the provider of this SWF.";
_local5.width = 500;
_local5.x = 50;
_local5.y = 300;
body.addChild(_local5);
body.addEventListener("click", dismissOverlay);
};
fadeBody();
}
public function showInstructions(_arg1:Event=null):void{
var _local2:Sprite;
var _local3:TextField;
var _local4:TextField;
var _local5:String;
var _local6:constantVSprite;
var _local7:Sprite;
var _local8:growthSprite;
var _local9:Sprite;
var _local10:TextField;
var _local11:TextField;
var _local12:ezButton;
var _local13:ezButton;
if (!GAMEPAUSED){
pause();
};
if (((body) && (contains(body)))){
removeChild(body);
};
body = new MovieClip();
_local2 = new Sprite();
_local2.graphics.beginFill(0);
_local2.graphics.drawRect(0, 0, 400, 300);
_local2.graphics.endFill();
_local2.graphics.beginFill(0x333333);
_local2.graphics.drawRect(2, 2, 396, 296);
_local2.graphics.endFill();
_local2.x = 100;
_local2.y = 150;
_local3 = new_tf("title");
_local3.x = 70;
_local3.y = 30;
_local3.width = 275;
_local3.text = "Instructions";
_local2.addChild(_local3);
_local4 = new_tf("left");
_local4.defaultTextFormat.align = "justify";
_local4.x = 25;
_local4.y = 90;
_local4.width = 350;
_local4.height = 250;
_local4.multiline = true;
_local4.wordWrap = true;
_local5 = "The goal of <b>filler</b> is to fill up 2/3 of the screen while ";
_local5 = (_local5 + "avoiding the bouncing balls.");
_local4.htmlText = _local5;
_local2.addChild(_local4);
addChild(body);
body.addChild(_local2);
_local6 = new constantVSprite(0, 0);
_local7 = _local6.sprite;
_local8 = new growthSprite(0, 0, 30, 0xFFFFFF);
_local9 = _local8.sprite;
_local2.addChild(_local7);
_local2.addChild(_local9);
_local7.x = 290;
_local9.x = 100;
_local7.y = 185;
_local9.y = 185;
_local10 = new_tf("center");
_local10.x = 25;
_local10.y = 225;
_local10.width = 150;
_local10.text = "filler ball = good";
_local2.addChild(_local10);
_local11 = new_tf("center");
_local11.x = 210;
_local11.y = 225;
_local11.width = 150;
_local11.text = "bouncy ball = bad";
_local2.addChild(_local11);
_local12 = new ezButton("Next", "inst_2", 80, 25);
_local13 = new ezButton("Start", "skip_instructions", 80, 25);
_local2.addChild(_local12);
_local12.x = 200;
_local12.y = 260;
_local2.addChild(_local13);
_local13.x = 115;
_local13.y = 260;
_local13.addEventListener("button_skip_instructions", dismissOverlay);
_local12.addEventListener("button_inst_2", showInstruction2);
if (getTimer() > 30000){
fadeBody();
};
}
public function stopMusic():void{
if (musicChannel){
musicChannel.stop();
};
}
public function tallyPercent():void{
var _local1:Array;
var _local2:Number;
var _local3:int;
var _local4:String;
var _local5:SoundTransform;
_local1 = fillerBalls.getAll();
_local2 = 0;
_local3 = 0;
while (_local3 < _local1.length) {
_local2 = (_local2 + ((3.1415 * _local1[_local3].radius) * _local1[_local3].radius));
_local3++;
};
percentFilled = ((_local2 / MAXAREA) * 100);
_local4 = ((Math.round(((_local2 / MAXAREA) * 1000)) / 10) + "");
if (_local4.indexOf(".") == -1){
_local4 = (_local4 + ".0");
};
pctText.text = (_local4 + "% cleared");
if (((_local2 / MAXAREA) * 100) >= 66.555){
GAMEPAUSED = true;
configureOverlays();
_local5 = new SoundTransform(0.5);
if (SOUNDENABLED){
alert24Sound.play(0, 0, _local5);
};
};
}
public function sendHighScore(_arg1:Object=null):void{
var TX:int;
var scoreBG:Sprite;
var table:TextScoreTable;
var format:TextFormat;
var scoreLabel:TextField;
var nameLabel:TextField;
var scoreText:TextField;
var nameField:TextField;
var submit:ezButton;
var ng:ezButton;
var doneWithScores:ezButton;
var sendScore:Function;
var ev = _arg1;
if (GAMEPAUSED){
pause();
};
GAMEPAUSED = true;
stopMusic();
if (body){
if (contains(body)){
removeChild(body);
};
body = null;
};
body = new MovieClip();
body.x = 0;
body.y = 0;
addChild(body);
TX = 125;
scoreBG = new Sprite();
scoreBG.graphics.beginFill(0);
scoreBG.graphics.drawRect((TX - 5), 150, 360, 300);
scoreBG.graphics.endFill();
scoreBG.graphics.beginFill(0x333333);
scoreBG.graphics.drawRect((TX - 3), 152, 356, 296);
scoreBG.graphics.endFill();
body.addChild(scoreBG);
table = new TextScoreTable();
trace("table created...");
body.addChild(table);
table.x = TX;
table.y = 155;
table.init();
table.title.text = " Game Over! ";
format = new TextFormat();
format.font = "Arial";
format.color = 0xFFFFFF;
format.size = 16;
scoreLabel = new TextField();
scoreLabel.defaultTextFormat = format;
scoreLabel.selectable = false;
scoreLabel.text = "Your Score:";
scoreLabel.x = (TX + 55);
scoreLabel.y = 260;
body.addChild(scoreLabel);
nameLabel = new TextField();
nameLabel.defaultTextFormat = format;
nameLabel.selectable = false;
nameLabel.text = "Your Name:";
nameLabel.x = (TX + 55);
nameLabel.y = 280;
body.addChild(nameLabel);
scoreText = new TextField();
scoreText.defaultTextFormat = format;
scoreText.selectable = false;
scoreText.text = TextScoreTable.commafy(playerScore);
scoreText.x = (TX + 158);
scoreText.y = 260;
scoreText.width = 120;
body.addChild(scoreText);
nameField = new TextField();
nameField.defaultTextFormat = format;
nameField.text = playerName;
nameField.x = (TX + 158);
nameField.y = 280;
nameField.width = 120;
nameField.height = 22;
nameField.border = true;
nameField.type = TextFieldType.INPUT;
body.addChild(nameField);
submit = new ezButton("Submit", "hsSubmit", 100, 36);
submit.x = (TX + 176);
submit.y = 340;
body.addChild(submit);
ng = new ezButton("New Game", "newGame", 100, 36);
ng.x = (TX + 74);
ng.y = 340;
body.addChild(ng);
ng.addEventListener("button_newGame", newGameButton);
doneWithScores = new ezButton("New Game", "closeScoresAndNew", 100, 36);
doneWithScores.x = (TX + 245);
doneWithScores.y = 405;
doneWithScores.visible = false;
body.addChild(doneWithScores);
doneWithScores.addEventListener("button_closeScoresAndNew", closeScoresNew);
sendScore = function (_arg1:Event):void{
var _local2:Object;
submit.visible = false;
ng.visible = false;
nameField.visible = false;
nameLabel.visible = false;
scoreLabel.visible = false;
scoreText.visible = false;
doneWithScores.visible = true;
playerName = nameField.text;
_local2 = getOptions();
_local2.id = (_local2.id + "/armor");
_local2.name = playerName;
_local2.score = playerScore;
table.reset("Sending high score...");
MochiAd.sendHighScore(_local2, table, "gotScores");
};
submit.addEventListener("button_hsSubmit", sendScore);
}
private function redTimerHandler(_arg1:TimerEvent):void{
var _local2:Number;
var _local3:int;
var _local4:uint;
var _local5:uint;
var _local6:uint;
redCount++;
_local2 = (redCount / 20);
_local3 = (_local2 * 85);
bg.graphics.clear();
_local4 = (85 << 16);
_local5 = (_local3 << 8);
_local6 = _local3;
bg.graphics.beginFill(((_local4 + _local5) + _local6));
bg.graphics.drawRect(0, 0, 600, 500);
bg.graphics.endFill();
}
public function new_tf(_arg1:String):TextField{
var _local2:TextField;
_local2 = new TextField();
_local2.defaultTextFormat = scoreTextFormat(_arg1);
_local2.selectable = false;
return (_local2);
}
private function testURL(_arg1:String):Boolean{
var _local2:String;
_local2 = this.root.loaderInfo.url.split("/")[2];
if (_local2.indexOf(_arg1) == (_local2.length - _arg1.length)){
return (true);
};
return (false);
}
private function newGameButton(_arg1:Event=null):void{
hideMenu();
if (((body) && (contains(body)))){
removeChild(body);
};
newGame();
}
private function scoreTextFormat(_arg1:String):TextFormat{
var _local2:TextFormat;
_local2 = new TextFormat();
_local2.font = "_sans";
_local2.color = 0xCCCCCC;
_local2.size = 14;
if (_arg1 == "left"){
_local2.align = TextFormatAlign.LEFT;
} else {
if (_arg1 == "right"){
_local2.align = TextFormatAlign.RIGHT;
} else {
if (_arg1 == "center"){
_local2.align = TextFormatAlign.CENTER;
} else {
if (_arg1 == "title"){
_local2.align = TextFormatAlign.CENTER;
_local2.color = 0xFFFFFF;
_local2.size = 32;
} else {
throw (new Error(("Invalid text format " + _arg1)));
};
};
};
};
return (_local2);
}
public function newGame(_arg1:Event=null):void{
if (GAMEPAUSED){
pause();
};
startMusic();
playerScore = 0;
scoreText.text = "Score: 0";
CURRENTLEVEL = 1;
startLevel(1);
}
private function hideMenu(_arg1:Event=null):void{
verticalMenu.visible = false;
}
public function showSplash():void{
var _local1:Sprite;
if (((body) && (contains(body)))){
removeChild(body);
};
body = new MovieClip();
body.x = 0;
body.y = 0;
addChild(body);
_local1 = new Sprite();
_local1.graphics.beginFill(0, 1);
_local1.graphics.drawRect(0, 0, 600, 500);
_local1.graphics.endFill();
body.addChild(_local1);
splashHolder.addChild(splashSprite);
_local1.addChild(splashHolder);
splashSprite.x = 25;
splashSprite.y = 50;
_local1.mouseChildren = false;
setTimeout(postSplash, 3250);
}
private function fadeHandlerDone(_arg1:TimerEvent):void{
body.alpha = 100;
}
private function pause(_arg1:Event=null):void{
if (GAMEPAUSED){
if (((body) && (contains(body)))){
return;
};
GAMEPAUSED = false;
LASTUPDATE = getTimer();
if (bg.contains(pauseOverlay)){
bg.removeChild(pauseOverlay);
};
if (bg.contains(pauseText)){
bg.removeChild(pauseText);
};
startMusic();
} else {
GAMEPAUSED = true;
bg.addChild(pauseOverlay);
bg.addChild(pauseText);
stopMusic();
};
}
}
}//package
Section 51
//filler_armorSplash (filler_armorSplash)
package {
import flash.utils.*;
import mx.core.*;
public class filler_armorSplash extends MovieClipLoaderAsset {
public var dataClass:Class;
private static var bytes:ByteArray = null;
public function filler_armorSplash(){
dataClass = filler_armorSplash_dataClass;
super();
initialWidth = (11000 / 20);
initialHeight = (8000 / 20);
}
override public function get movieClipData():ByteArray{
if (bytes == null){
bytes = ByteArray(new dataClass());
};
return (bytes);
}
}
}//package
Section 52
//filler_armorSplash_dataClass (filler_armorSplash_dataClass)
package {
import mx.core.*;
public class filler_armorSplash_dataClass extends ByteArrayAsset {
}
}//package
Section 53
//filler_modAlert05Mp3 (filler_modAlert05Mp3)
package {
import mx.core.*;
public class filler_modAlert05Mp3 extends SoundAsset {
}
}//package
Section 54
//filler_modAlert24Mp3 (filler_modAlert24Mp3)
package {
import mx.core.*;
public class filler_modAlert24Mp3 extends SoundAsset {
}
}//package
Section 55
//filler_musicMp3 (filler_musicMp3)
package {
import mx.core.*;
public class filler_musicMp3 extends SoundAsset {
}
}//package
Section 56
//filler_rollOverMp3 (filler_rollOverMp3)
package {
import mx.core.*;
public class filler_rollOverMp3 extends SoundAsset {
}
}//package
Section 57
//filler_thudMp3 (filler_thudMp3)
package {
import mx.core.*;
public class filler_thudMp3 extends SoundAsset {
}
}//package