Section 1
//Debug (alcon.Debug)
package alcon {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public final class Debug {
public static const LEVEL_WARN:int = 2;
public static const LEVEL_DEBUG:int = 0;
public static const LEVEL_INFO:int = 1;
public static const LEVEL_FATAL:int = 4;
public static const LEVEL_ERROR:int = 3;
private static var _stage:Stage;
private static var _filterLevel:int = 0;
private static var _isEnabled:Boolean = true;
private static var _isConnected:Boolean = false;
private static var _isPollingFPS:Boolean = false;
private static var _stopWatch:StopWatch;
private static var _connection:LocalConnection;
private static var _fpsMeter:FPSMeter;
public static function forceGC():void{
try {
} catch(e1:Error) {
try {
new LocalConnection().connect("forceGC");
new LocalConnection().connect("forceGC");
} catch(e2:Error) {
};
};
}
private static function send(_arg1:String, _arg2, _arg3:int=1, _arg4:int=0):void{
var _local5:Number;
var _local6:ByteArray;
if (_isEnabled){
if (!_isConnected){
_isConnected = true;
_connection = new LocalConnection();
_connection.addEventListener(StatusEvent.STATUS, onStatus);
};
_local5 = 0;
if (typeof(_arg2) == "string"){
_local5 = String(_arg2).length;
} else {
if (typeof(_arg2) == "object"){
_local6 = new ByteArray();
_local6.writeObject(_arg2);
_local5 = _local6.length;
_local6 = null;
};
};
if (_local5 > 39000){
storeDataLSO(_arg1, _arg2);
_arg1 = "onLargeData";
_arg2 = null;
};
_connection.send("_alcon_lc", _arg1, _arg2, _arg3, _arg4, "");
};
}
public static function stop():void{
if (_fpsMeter){
_isPollingFPS = false;
_fpsMeter.stop();
_fpsMeter.removeEventListener(FPSMeter.FPS_UPDATE, onFPSUpdate);
_fpsMeter = null;
_stage = null;
};
}
public static function timerReset():void{
if (_stopWatch){
_stopWatch.reset();
};
}
private static function onFPSUpdate(_arg1:Event):void{
send("onFPS", ((((((_fpsMeter.fps + ",") + _stage.frameRate) + ",") + _fpsMeter.frt) + ",") + System.totalMemory));
}
public static function delimiter():void{
Debug.trace("[%DLT%]", 5);
}
public static function set enabled(_arg1:Boolean):void{
_isEnabled = _arg1;
}
public static function inspect(_arg1:Object):void{
send("onInspect", _arg1, 1, -1);
}
public static function timerStart(_arg1:String=""):void{
if (_isEnabled){
if (!_stopWatch){
_stopWatch = new StopWatch();
};
_stopWatch.start(_arg1);
};
}
public static function createCategory(_arg1:int, _arg2:String="", _arg3:uint=0, _arg4:uint=0xFFFF00):void{
send("onCategory", [_arg1, _arg2, _arg3, _arg4], 0, 0);
}
private static function storeDataLSO(_arg1:String, _arg2):void{
var flushResult:String;
var m = _arg1;
var d = _arg2;
var sharedObject:SharedObject = SharedObject.getLocal("alcon", "/");
sharedObject.data["alconMethod"] = m;
sharedObject.data["alconData"] = d;
try {
flushResult = sharedObject.flush();
if (flushResult == SharedObjectFlushStatus.FLUSHED){
return;
};
} catch(e:Error) {
Security.showSettings(SecurityPanel.LOCAL_STORAGE);
};
}
public static function hexDump(_arg1:Object):void{
send("onHexDump", _arg1, 0, 0);
}
private static function onStatus(_arg1:StatusEvent):void{
}
public static function get enabled():Boolean{
return (_isEnabled);
}
public static function trace(... _args):void{
var _local2:int = ((_args[1] is int)) ? _args[1] : 1;
if ((((_local2 >= _filterLevel)) && ((_local2 < 7)))){
send("onData", _args[0], _local2, 0);
};
}
public static function timerToString():void{
if (_stopWatch){
Debug.trace(_stopWatch.toString());
};
}
public static function mark(_arg1:uint=0xFF00FF):void{
send("onMarker", _arg1, 1, -1);
}
public static function timerInSeconds():void{
if (_stopWatch){
Debug.trace((_stopWatch.timeInSeconds + "s"));
};
}
public static function set filterLevel(_arg1:int):void{
if ((((_arg1 >= 0)) && ((_arg1 < 5)))){
_filterLevel = _arg1;
};
}
public static function monitor(_arg1:Stage, _arg2:int=500):void{
if (_isPollingFPS){
Debug.stop();
};
if (((_isEnabled) && (!(_fpsMeter)))){
_isPollingFPS = true;
_stage = _arg1;
sendCapabilities();
_fpsMeter = new FPSMeter(_stage, _arg2);
_fpsMeter.addEventListener(FPSMeter.FPS_UPDATE, onFPSUpdate);
_fpsMeter.start();
};
}
public static function time():void{
Debug.trace("[%TME%]", 5);
}
private static function sendCapabilities():void{
var _local3:XML;
var _local4:String;
var _local1:XML = describeType(Capabilities);
var _local2:Array = [];
for each (_local3 in _local1.*) {
_local4 = _local3.@name.toString();
if ((((((_local4.length > 0)) && (!((_local4 == "_internal"))))) && (!((_local4 == "prototype"))))){
_local2.push({p:_local4, v:Capabilities[_local4].toString()});
};
};
_local2.sortOn(["p"], Array.CASEINSENSITIVE);
send("onCap", _local2);
}
public static function clear():void{
Debug.trace("[%CLR%]", 5);
}
public static function timerStop():void{
if (_stopWatch){
_stopWatch.stop();
};
}
public static function timerInMilliSeconds():void{
if (_stopWatch){
Debug.trace((_stopWatch.timeInMilliSeconds + "ms"));
};
}
public static function get filterLevel():int{
return (_filterLevel);
}
public static function traceObj(_arg1:Object, _arg2:int=64, _arg3:int=1):void{
if ((((_arg3 >= _filterLevel)) && ((_arg3 < 7)))){
send("onData", _arg1, _arg3, _arg2);
};
}
public static function timerStopToString(_arg1:Boolean=false):void{
if (_stopWatch){
_stopWatch.stop();
Debug.trace(_stopWatch.toString());
if (_arg1){
_stopWatch.reset();
};
};
}
public static function pause():void{
Debug.trace("[%PSE%]", 5);
}
}
}//package alcon
Section 2
//FPSMeter (alcon.FPSMeter)
package alcon {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class FPSMeter extends EventDispatcher {
private var _delayMax:int;// = 10
private var _pollInterval:int;
private var _delay:int;
private var _ms:int;
private var _timer:Timer;
private var _prev:int;
private var _frt:int;
private var _fps:int;
private var _isRunning:Boolean;
private var _stage:Stage;
public static const FPS_UPDATE:String = "fpsUpdate";
public function FPSMeter(_arg1:Stage, _arg2:int=500){
_stage = _arg1;
_pollInterval = _arg2;
reset();
}
public function stop():void{
if (_isRunning){
_timer.stop();
_timer.removeEventListener(TimerEvent.TIMER, onTimer);
_stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
_timer = null;
reset();
};
}
public function reset():void{
_fps = 0;
_frt = 0;
_ms = 0;
_delay = 0;
_prev = 0;
_isRunning = false;
}
public function start():void{
if (!_isRunning){
_isRunning = true;
_timer = new Timer(_pollInterval, 0);
_timer.addEventListener(TimerEvent.TIMER, onTimer);
_stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
_timer.start();
};
}
private function onTimer(_arg1:TimerEvent):void{
dispatchEvent(new Event(FPSMeter.FPS_UPDATE));
}
public function get frt():int{
return (_frt);
}
public function get fps():int{
return (_fps);
}
private function onEnterFrame(_arg1:Event):void{
var _local2:Number = getTimer();
_delay++;
if (_delay >= _delayMax){
_delay = 0;
_fps = int(((1000 * _delayMax) / (_local2 - _prev)));
_prev = _local2;
};
_frt = (_local2 - _ms);
_ms = _local2;
}
}
}//package alcon
Section 3
//StopWatch (alcon.StopWatch)
package alcon {
import flash.utils.*;
public class StopWatch {
private var _stopTimeKeys:Array;
private var _startTimeKeys:Array;
private var _started:Boolean;// = false
private var _title:String;
public function StopWatch(){
reset();
}
public function get started():Boolean{
return (_started);
}
public function get timeInMilliSeconds():int{
if (_started){
_stopTimeKeys[(_startTimeKeys.length - 1)] = getTimer();
};
var _local1:int;
var _local2:int;
while (_local2 < _startTimeKeys.length) {
_local1 = (_local1 + (_stopTimeKeys[_local2] - _startTimeKeys[_local2]));
_local2++;
};
return (_local1);
}
public function stop():void{
var _local1:int;
if (_started){
_local1 = getTimer();
_stopTimeKeys[(_startTimeKeys.length - 1)] = _local1;
_started = false;
};
}
public function toString():String{
var _local3:int;
var _local4:int;
var _local1 = "\n ********************* [STOPWATCH] *********************";
if (_title != ""){
_local1 = (_local1 + ("\n * " + _title));
};
var _local2:int;
while (_local2 < _startTimeKeys.length) {
_local3 = _startTimeKeys[_local2];
_local4 = _stopTimeKeys[_local2];
_local1 = (_local1 + (((((("\n * started [" + format(_local3)) + "ms] stopped [") + format(_local4)) + "ms] time [") + format((_local4 - _local3))) + "ms]"));
_local2++;
};
if (_local2 == 0){
_local1 = (_local1 + "\n * never started.");
} else {
_local1 = (_local1 + (("\n * total runnning time: " + timeInSeconds) + "s"));
};
_local1 = (_local1 + "\n *******************************************************");
return (_local1);
}
public function get timeInSeconds():Number{
return ((timeInMilliSeconds / 1000));
}
public function reset():void{
_startTimeKeys = [];
_stopTimeKeys = [];
_started = false;
}
private function format(_arg1:int):String{
var _local2 = "";
var _local3:int = _arg1.toString().length;
var _local4:int;
while (_local4 < (5 - _local3)) {
_local2 = (_local2 + "0");
_local4++;
};
return ((_local2 + _arg1));
}
public function start(_arg1:String=""):void{
if (!_started){
_title = _arg1;
_started = true;
_startTimeKeys.push(getTimer());
};
}
}
}//package alcon
Section 4
//Debug (com.hexagonstar.util.debug.Debug)
package com.hexagonstar.util.debug {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public final class Debug {
public static const LEVEL_WARN:int = 2;
public static const LEVEL_DEBUG:int = 0;
public static const LEVEL_INFO:int = 1;
public static const LEVEL_FATAL:int = 4;
public static const LEVEL_ERROR:int = 3;
private static var _stage:Stage;
private static var _filterLevel:int = 0;
private static var _isEnabled:Boolean = true;
private static var _isConnected:Boolean = false;
private static var _isPollingFPS:Boolean = false;
private static var _stopWatch:StopWatch;
private static var _connection:LocalConnection;
private static var _fpsMeter:FPSMeter;
public static function forceGC():void{
try {
} catch(e1:Error) {
try {
new LocalConnection().connect("forceGC");
new LocalConnection().connect("forceGC");
} catch(e2:Error) {
};
};
}
private static function send(_arg1:String, _arg2, _arg3:int=1, _arg4:int=0):void{
var _local5:Number;
var _local6:ByteArray;
if (_isEnabled){
if (!_isConnected){
_isConnected = true;
_connection = new LocalConnection();
_connection.addEventListener(StatusEvent.STATUS, onStatus);
};
_local5 = 0;
if (typeof(_arg2) == "string"){
_local5 = String(_arg2).length;
} else {
if (typeof(_arg2) == "object"){
_local6 = new ByteArray();
_local6.writeObject(_arg2);
_local5 = _local6.length;
_local6 = null;
};
};
if (_local5 > 39000){
storeDataLSO(_arg1, _arg2);
_arg1 = "onLargeData";
_arg2 = null;
};
_connection.send("_alcon_lc", _arg1, _arg2, _arg3, _arg4, "");
};
}
public static function stop():void{
if (_fpsMeter){
_isPollingFPS = false;
_fpsMeter.stop();
_fpsMeter.removeEventListener(FPSMeter.FPS_UPDATE, onFPSUpdate);
_fpsMeter = null;
_stage = null;
};
}
public static function timerReset():void{
if (_stopWatch){
_stopWatch.reset();
};
}
private static function onFPSUpdate(_arg1:Event):void{
send("onFPS", ((((((_fpsMeter.fps + ",") + _stage.frameRate) + ",") + _fpsMeter.frt) + ",") + System.totalMemory));
}
public static function delimiter():void{
Debug.trace("[%DLT%]", 5);
}
public static function set enabled(_arg1:Boolean):void{
_isEnabled = _arg1;
}
public static function inspect(_arg1:Object):void{
send("onInspect", _arg1, 1, -1);
}
public static function timerStart(_arg1:String=""):void{
if (_isEnabled){
if (!_stopWatch){
_stopWatch = new StopWatch();
};
_stopWatch.start(_arg1);
};
}
public static function createCategory(_arg1:int, _arg2:String="", _arg3:uint=0, _arg4:uint=0xFFFF00):void{
send("onCategory", [_arg1, _arg2, _arg3, _arg4], 0, 0);
}
private static function storeDataLSO(_arg1:String, _arg2):void{
var flushResult:String;
var m = _arg1;
var d = _arg2;
var sharedObject:SharedObject = SharedObject.getLocal("alcon", "/");
sharedObject.data["alconMethod"] = m;
sharedObject.data["alconData"] = d;
try {
flushResult = sharedObject.flush();
if (flushResult == SharedObjectFlushStatus.FLUSHED){
return;
};
} catch(e:Error) {
Security.showSettings(SecurityPanel.LOCAL_STORAGE);
};
}
public static function hexDump(_arg1:Object):void{
send("onHexDump", _arg1, 0, 0);
}
private static function onStatus(_arg1:StatusEvent):void{
}
public static function get enabled():Boolean{
return (_isEnabled);
}
public static function trace(... _args):void{
var _local2:int = ((_args[1] is int)) ? _args[1] : 1;
if ((((_local2 >= _filterLevel)) && ((_local2 < 7)))){
send("onData", _args[0], _local2, 0);
};
}
public static function timerToString():void{
if (_stopWatch){
Debug.trace(_stopWatch.toString());
};
}
public static function mark(_arg1:uint=0xFF00FF):void{
send("onMarker", _arg1, 1, -1);
}
public static function timerInSeconds():void{
if (_stopWatch){
Debug.trace((_stopWatch.timeInSeconds + "s"));
};
}
public static function set filterLevel(_arg1:int):void{
if ((((_arg1 >= 0)) && ((_arg1 < 5)))){
_filterLevel = _arg1;
};
}
public static function monitor(_arg1:Stage, _arg2:int=500):void{
if (_isPollingFPS){
Debug.stop();
};
if (((_isEnabled) && (!(_fpsMeter)))){
_isPollingFPS = true;
_stage = _arg1;
sendCapabilities();
_fpsMeter = new FPSMeter(_stage, _arg2);
_fpsMeter.addEventListener(FPSMeter.FPS_UPDATE, onFPSUpdate);
_fpsMeter.start();
};
}
public static function time():void{
Debug.trace("[%TME%]", 5);
}
private static function sendCapabilities():void{
var _local3:XML;
var _local4:String;
var _local1:XML = describeType(Capabilities);
var _local2:Array = [];
for each (_local3 in _local1.*) {
_local4 = _local3.@name.toString();
if ((((((_local4.length > 0)) && (!((_local4 == "_internal"))))) && (!((_local4 == "prototype"))))){
_local2.push({p:_local4, v:Capabilities[_local4].toString()});
};
};
_local2.sortOn(["p"], Array.CASEINSENSITIVE);
send("onCap", _local2);
}
public static function clear():void{
Debug.trace("[%CLR%]", 5);
}
public static function timerStop():void{
if (_stopWatch){
_stopWatch.stop();
};
}
public static function timerInMilliSeconds():void{
if (_stopWatch){
Debug.trace((_stopWatch.timeInMilliSeconds + "ms"));
};
}
public static function get filterLevel():int{
return (_filterLevel);
}
public static function traceObj(_arg1:Object, _arg2:int=64, _arg3:int=1):void{
if ((((_arg3 >= _filterLevel)) && ((_arg3 < 7)))){
send("onData", _arg1, _arg3, _arg2);
};
}
public static function timerStopToString(_arg1:Boolean=false):void{
if (_stopWatch){
_stopWatch.stop();
Debug.trace(_stopWatch.toString());
if (_arg1){
_stopWatch.reset();
};
};
}
public static function pause():void{
Debug.trace("[%PSE%]", 5);
}
}
}//package com.hexagonstar.util.debug
Section 5
//FPSMeter (com.hexagonstar.util.debug.FPSMeter)
package com.hexagonstar.util.debug {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class FPSMeter extends EventDispatcher {
private var _delayMax:int;// = 10
private var _pollInterval:int;
private var _delay:int;
private var _ms:int;
private var _timer:Timer;
private var _prev:int;
private var _frt:int;
private var _fps:int;
private var _isRunning:Boolean;
private var _stage:Stage;
public static const FPS_UPDATE:String = "fpsUpdate";
public function FPSMeter(_arg1:Stage, _arg2:int=500){
_stage = _arg1;
_pollInterval = _arg2;
reset();
}
public function stop():void{
if (_isRunning){
_timer.stop();
_timer.removeEventListener(TimerEvent.TIMER, onTimer);
_stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
_timer = null;
reset();
};
}
public function reset():void{
_fps = 0;
_frt = 0;
_ms = 0;
_delay = 0;
_prev = 0;
_isRunning = false;
}
public function start():void{
if (!_isRunning){
_isRunning = true;
_timer = new Timer(_pollInterval, 0);
_timer.addEventListener(TimerEvent.TIMER, onTimer);
_stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
_timer.start();
};
}
private function onTimer(_arg1:TimerEvent):void{
dispatchEvent(new Event(FPSMeter.FPS_UPDATE));
}
public function get frt():int{
return (_frt);
}
public function get fps():int{
return (_fps);
}
private function onEnterFrame(_arg1:Event):void{
var _local2:Number = getTimer();
_delay++;
if (_delay >= _delayMax){
_delay = 0;
_fps = int(((1000 * _delayMax) / (_local2 - _prev)));
_prev = _local2;
};
_frt = (_local2 - _ms);
_ms = _local2;
}
}
}//package com.hexagonstar.util.debug
Section 6
//StopWatch (com.hexagonstar.util.debug.StopWatch)
package com.hexagonstar.util.debug {
import flash.utils.*;
public class StopWatch {
private var _stopTimeKeys:Array;
private var _startTimeKeys:Array;
private var _started:Boolean;// = false
private var _title:String;
public function StopWatch(){
reset();
}
public function get started():Boolean{
return (_started);
}
public function get timeInMilliSeconds():int{
if (_started){
_stopTimeKeys[(_startTimeKeys.length - 1)] = getTimer();
};
var _local1:int;
var _local2:int;
while (_local2 < _startTimeKeys.length) {
_local1 = (_local1 + (_stopTimeKeys[_local2] - _startTimeKeys[_local2]));
_local2++;
};
return (_local1);
}
public function stop():void{
var _local1:int;
if (_started){
_local1 = getTimer();
_stopTimeKeys[(_startTimeKeys.length - 1)] = _local1;
_started = false;
};
}
public function toString():String{
var _local3:int;
var _local4:int;
var _local1 = "\n ********************* [STOPWATCH] *********************";
if (_title != ""){
_local1 = (_local1 + ("\n * " + _title));
};
var _local2:int;
while (_local2 < _startTimeKeys.length) {
_local3 = _startTimeKeys[_local2];
_local4 = _stopTimeKeys[_local2];
_local1 = (_local1 + (((((("\n * started [" + format(_local3)) + "ms] stopped [") + format(_local4)) + "ms] time [") + format((_local4 - _local3))) + "ms]"));
_local2++;
};
if (_local2 == 0){
_local1 = (_local1 + "\n * never started.");
} else {
_local1 = (_local1 + (("\n * total runnning time: " + timeInSeconds) + "s"));
};
_local1 = (_local1 + "\n *******************************************************");
return (_local1);
}
public function get timeInSeconds():Number{
return ((timeInMilliSeconds / 1000));
}
public function reset():void{
_startTimeKeys = [];
_stopTimeKeys = [];
_started = false;
}
private function format(_arg1:int):String{
var _local2 = "";
var _local3:int = _arg1.toString().length;
var _local4:int;
while (_local4 < (5 - _local3)) {
_local2 = (_local2 + "0");
_local4++;
};
return ((_local2 + _arg1));
}
public function start(_arg1:String=""):void{
if (!_started){
_title = _arg1;
_started = true;
_startTimeKeys.push(getTimer());
};
}
}
}//package com.hexagonstar.util.debug
Section 7
//Behaviour (flesh.particles.Behaviour)
package flesh.particles {
import flash.display.*;
import flesh.*;
import flash.utils.*;
import flash.net.*;
public class Behaviour {
public var directionRange:Number;
public var rotationAccel:Number;
public var motionType:int;
public var alphaEndTime:Number;
public var scaleRange:Number;
public var dragMultiplier:Number;
public var emitterBehaviourName:String;
public var id:String;
public var velocityY:RangedValue;
public var scaleSpeed:RangedValue;
public var scaleStartTime:Number;
public var colours:Array;
public var colourType:Number;
public var velocityX:RangedValue;
public var speedRange:Number;
public var motionStartTime:Number;
public var targetScale:Number;
public var speed:RangedValue;
public var paintAdditive:Boolean;
public var alphaAccel:Number;
public var targetAlpha:Number;
public var scale:RangedValue;
public var alpha:RangedValue;
public var bitmapDataArray:Array;
public var rotationSpeed:RangedValue;
public var restitution:Number;
public var emitterRate:Number;
public var rotationStartTime:Number;
public var accelX:RangedValue;
public var accelY:RangedValue;
public var bitmapData:BitmapData;
public var floorOffsetY:Number;
public var rotation:RangedValue;
public var direction:RangedValue;
public var alphaSpeed:RangedValue;
public var alphaStartTime:Number;
public var numberOfRotations:Number;
public var scaleEndTime:Number;
public var displayObject:DisplayObject;
public var scaleType:int;
public var motionEndTime:Number;
public var alphaType:int;
public var bitmapMask:String;
public var scaleAccel:Number;
public var killOnEnd:Boolean;
public var bitmapMaskIndex:int;
public var rotationType:int;
public var colour0:Number;
public var targetRegion:Region;
public var lifeTime:Number;
public var rotationEndTime:Number;
public var colour1:Number;
public static var usingZipHandler:Boolean = false;
public static var behaviourDictionary:Dictionary = null;
public function Behaviour(){
lifeTime = 5;
killOnEnd = true;
paintAdditive = true;
displayObject = null;
setDefaults();
}
public function setMotionTargetedWithDrag(_arg1:Region, _arg2:RangedValue, _arg3:RangedValue, _arg4:Number, _arg5:Number=0, _arg6:Number=1):void{
trace(("MOTION_TYPE_TARGETED_WITH_DRAG dragMultiplier = " + dragMultiplier));
this.motionType = Particle.MOTION_TYPE_TARGETED_WITH_DRAG;
this.targetRegion = _arg1;
this.dragMultiplier = dragMultiplier;
this.accelX = _arg2;
this.accelY = _arg3;
this.motionStartTime = _arg5;
this.motionEndTime = _arg6;
}
public function setRotationTargeted(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number, _arg4:Number=0, _arg5:Number=1):void{
this.rotationType = Particle.ROTATION_TYPE_TARGETED;
this.rotation = _arg1;
this.numberOfRotations = _arg3;
this.rotationSpeed = _arg2;
this.rotationStartTime = _arg4;
this.rotationEndTime = _arg5;
}
public function setScaleTargeted(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number, _arg4:Number=0, _arg5:Number=1):void{
this.scaleType = Particle.SCALE_TYPE_TARGETED;
this.scale = _arg1;
this.scaleSpeed = _arg2;
this.targetScale = _arg3;
this.scaleStartTime = _arg4;
this.scaleEndTime = _arg5;
this.scaleRange = (_arg1.max - _arg1.min);
}
public function setMotionPolarEqualDistribution(_arg1:RangedValue, _arg2:RangedValue, _arg3:RangedValue, _arg4:RangedValue, _arg5:Number, _arg6:Number=0, _arg7:Number=1):void{
setMotionPolar(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7);
this.motionType = Particle.MOTION_TYPE_POLAR_EQUAL_DISTRIBUTION;
}
public function bitmapLoaded(_arg1:Bitmap, _arg2:String):void{
bitmapData = _arg1.bitmapData;
}
public function setAlphaTargeted(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number, _arg4:Number=0, _arg5:Number=1):void{
this.alphaType = Particle.ALPHA_TYPE_TARGETED;
this.alpha = _arg1;
this.alphaSpeed = _arg2;
this.targetAlpha = _arg3;
this.alphaStartTime = _arg4;
this.alphaEndTime = _arg5;
}
public function loadMotionFromXML(_arg1:XML):void{
var _local6:RangedValue;
var _local7:RangedValue;
var _local8:XML;
var _local2:String = Utils.getStringAttributeFromXML(_arg1, "type");
if (_local2 == null){
trace(" ** Error: no type specified for MOTION");
return;
};
var _local3:Number = Utils.getFloatAttributeFromXML(_arg1, "startTime", 0);
var _local4:Number = Utils.getFloatAttributeFromXML(_arg1, "endTime", 1);
floorOffsetY = Utils.getFloatAttributeFromXML(_arg1, "floorOffsetY", 100000);
restitution = Utils.getFloatAttributeFromXML(_arg1, "restitution", 1);
var _local5:int = getMotionTypeFromString(_local2);
switch (_local5){
case Particle.MOTION_TYPE_CARTESIAN:
setMotionCartesian(getRFloatFromXML(_arg1, "velocityX"), getRFloatFromXML(_arg1, "velocityY"), getRFloatFromXML(_arg1, "accelX"), getRFloatFromXML(_arg1, "accelY"), Utils.getFloatAttributeFromXML(_arg1, "dragMultiplier", 0), _local3, _local4);
break;
case Particle.MOTION_TYPE_POLAR:
setMotionPolar(getRFloatFromXML(_arg1, "direction"), getRFloatFromXML(_arg1, "speed"), getRFloatFromXML(_arg1, "accelX"), getRFloatFromXML(_arg1, "accelY"), Utils.getFloatAttributeFromXML(_arg1, "dragMultiplier", 0), _local3, _local4);
break;
case Particle.MOTION_TYPE_TARGETED:
_local6 = getRFloatFromXML(_arg1, "accelX");
_local7 = getRFloatFromXML(_arg1, "accelY");
targetRegion = null;
for each (_local8 in _arg1.children()) {
if (_local8.name() == "REGION"){
targetRegion = new Region();
targetRegion.loadXML(_local8);
break;
};
};
dragMultiplier = Utils.getFloatAttributeFromXML(_arg1, "dragMultiplier", 0);
if (dragMultiplier != 0){
setMotionTargetedWithDrag(targetRegion, _local6, _local7, dragMultiplier, _local3, _local4);
} else {
setMotionTargeted(targetRegion, _local6, _local7, _local3, _local4);
};
break;
case Particle.MOTION_TYPE_AWAY_FROM_CENTRE:
setMotionAwayFromCentre(getRFloatFromXML(_arg1, "speed"), getRFloatFromXML(_arg1, "accelX"), getRFloatFromXML(_arg1, "accelY"), Utils.getFloatAttributeFromXML(_arg1, "dragMultiplier", 0), _local3, _local4);
break;
case Particle.MOTION_TYPE_POLAR_EQUAL_DISTRIBUTION:
setMotionPolarEqualDistribution(getRFloatFromXML(_arg1, "direction"), getRFloatFromXML(_arg1, "speed"), getRFloatFromXML(_arg1, "accelX"), getRFloatFromXML(_arg1, "accelY"), Utils.getFloatAttributeFromXML(_arg1, "dragMultiplier", 0), _local3, _local4);
break;
};
}
public function loadFromXML(_arg1:XML):void{
var _local3:XML;
var _local4:ImageLoader;
this.id = Utils.getStringAttributeFromXML(_arg1, "id");
this.bitmapData = null;
lifeTime = Utils.getFloatAttributeFromXML(_arg1, "lifetime", 3);
dragMultiplier = Utils.getFloatAttributeFromXML(_arg1, "dragMultiplier", 0);
paintAdditive = Utils.getBooleanAttributeFromXML(_arg1, "additive", paintAdditive);
emitterBehaviourName = Utils.getStringAttributeFromXML(_arg1, "emitterBehaviour", null);
emitterRate = Utils.getFloatAttributeFromXML(_arg1, "emitterRate", 5);
var _local2:String = Utils.getStringAttributeFromXML(_arg1, "bitmap");
if (_local2 != null){
if (_local2.indexOf("*") != -1){
bitmapDataArray = new Array();
bitmapMaskIndex = 0;
bitmapMask = _local2;
trace(("loading bitmaps against mask " + bitmapMask));
loadNextBitmapMask();
} else {
if (usingZipHandler){
bitmapLoaded(ZipHandler.getBitmap(_local2), _local2);
} else {
_local4 = new ImageLoader();
_local4.loadSprite(_local2, bitmapLoaded);
};
};
};
for each (_local3 in _arg1.children()) {
if (_local3.name() == "MOTION"){
loadMotionFromXML(_local3);
} else {
if (_local3.name() == "ROTATION"){
loadRotationFromXML(_local3);
} else {
if (_local3.name() == "SCALE"){
loadScaleFromXML(_local3);
} else {
if (_local3.name() == "ALPHA"){
loadAlphaFromXML(_local3);
} else {
if (_local3.name() == "COLOUR"){
loadColourFromXML(_local3);
};
};
};
};
};
};
}
public function loadColourFromXML(_arg1:XML):void{
var _local6:Array;
var _local7:int;
var _local8:int;
var _local2:String = Utils.getStringAttributeFromXML(_arg1, "type");
if (_local2 == null){
trace(" ** Error: no type specified for COLOUR");
return;
};
var _local3:Number = Utils.getFloatAttributeFromXML(_arg1, "startTime", 0);
var _local4:Number = Utils.getFloatAttributeFromXML(_arg1, "endTime", 1);
var _local5:int = getColourTypeFromString(_local2);
switch (_local5){
case Particle.COLOUR_TYPE_INTERPOLATED:
setColourInterpolated(Utils.getIntAttributeFromXML(_arg1, "colour0", 0), Utils.getIntAttributeFromXML(_arg1, "colour1", 0xFFFFFF));
break;
case Particle.COLOUR_TYPE_RANDOMPICK:
_local6 = new Array();
_local7 = 0;
while (true) {
_local8 = Utils.getIntAttributeFromXML(_arg1, ("colour" + _local7), 1);
if (_local8 == 1){
break;
} else {
_local6.push(_local8);
_local7++;
};
};
setColourRandomPick(_local6);
break;
};
}
public function setDisplayObject(_arg1:DisplayObject, _arg2:Boolean=true):void{
this.displayObject = _arg1;
this.paintAdditive = _arg2;
}
public function setMotionPolar(_arg1:RangedValue, _arg2:RangedValue, _arg3:RangedValue, _arg4:RangedValue, _arg5:Number, _arg6:Number=0, _arg7:Number=1):void{
this.motionType = Particle.MOTION_TYPE_POLAR;
this.direction = _arg1;
this.speed = _arg2;
this.accelX = _arg3;
this.accelY = _arg4;
this.dragMultiplier = _arg5;
this.motionStartTime = _arg6;
this.motionEndTime = _arg7;
this.speedRange = (_arg2.max - _arg2.min);
this.directionRange = (_arg1.max - _arg1.min);
}
public function setScalePulse(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number=0, _arg4:Number=1):void{
this.scaleType = Particle.SCALE_TYPE_PULSE;
this.scale = _arg1;
this.scaleSpeed = _arg2;
this.scaleStartTime = _arg3;
this.scaleEndTime = _arg4;
}
public function loadScaleFromXML(_arg1:XML):void{
var _local2:String = Utils.getStringAttributeFromXML(_arg1, "type");
if (_local2 == null){
trace(" ** Error: no type specified for SCALE");
return;
};
var _local3:Number = Utils.getFloatAttributeFromXML(_arg1, "startTime", 0);
var _local4:Number = Utils.getFloatAttributeFromXML(_arg1, "endTime", 1);
var _local5:int = getScaleTypeFromString(_local2);
switch (_local5){
case Particle.SCALE_TYPE_TARGETED:
setScaleTargeted(getRFloatFromXML(_arg1, "initial"), getRFloatFromXML(_arg1, "speed"), Utils.getFloatAttributeFromXML(_arg1, "target", 0), _local3, _local4);
break;
};
}
public function setMotionAwayFromCentre(_arg1:RangedValue, _arg2:RangedValue, _arg3:RangedValue, _arg4:Number, _arg5:Number=0, _arg6:Number=1):void{
this.motionType = Particle.MOTION_TYPE_AWAY_FROM_CENTRE;
this.speed = _arg1;
this.accelX = _arg2;
this.accelY = _arg3;
this.dragMultiplier = _arg4;
this.motionStartTime = _arg5;
this.motionEndTime = _arg6;
}
public function setColourInterpolated(_arg1:uint, _arg2:uint):void{
this.colourType = Particle.COLOUR_TYPE_INTERPOLATED;
this.colour0 = _arg1;
this.colour1 = _arg2;
}
public function setMotionTarget(_arg1:Region):void{
this.targetRegion = _arg1;
}
public function setColourRandomPickInterpolated(_arg1:Array):void{
this.colourType = Particle.COLOUR_TYPE_RANDOMPICK_INTERPOLATED;
this.colours = _arg1;
}
public function setScaleLinkedToPolarSpeed3D(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number, _arg4:Number=0, _arg5:Number=1):void{
setScaleConstant(_arg1, _arg2, _arg3, _arg4, _arg5);
this.scaleType = Particle.SCALE_TYPE_LINKED_TO_POLAR_SPEED;
}
public function loadedBitmapMask(_arg1:Bitmap, _arg2:String):void{
bitmapDataArray.push(_arg1.bitmapData);
bitmapMaskIndex++;
loadNextBitmapMask();
}
public function loadNextBitmapMask():void{
var _local2:ImageLoader;
var _local1:String = bitmapMask;
_local1 = _local1.replace("*", bitmapMaskIndex);
if (usingZipHandler){
if (ZipHandler.hasBitmapFile(_local1)){
loadedBitmapMask(ZipHandler.getBitmap(_local1), _local1);
};
} else {
_local2 = new ImageLoader();
_local2.loadSprite(_local1, loadedBitmapMask);
};
}
public function setRotationConstant(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number, _arg4:Number=0, _arg5:Number=1):void{
this.rotationType = Particle.ROTATION_TYPE_CONSTANT;
this.rotation = _arg1;
this.rotationSpeed = _arg2;
this.rotationAccel = _arg3;
this.rotationStartTime = _arg4;
this.rotationEndTime = _arg5;
}
public function setScaleConstant(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number, _arg4:Number=0, _arg5:Number=1):void{
this.scaleType = Particle.SCALE_TYPE_CONSTANT;
this.scale = _arg1;
this.scaleSpeed = _arg2;
this.scaleAccel = _arg3;
this.scaleStartTime = _arg4;
this.scaleEndTime = _arg5;
this.scaleRange = (_arg1.max - _arg1.min);
}
public function setMotionTargeted(_arg1:Region, _arg2:RangedValue, _arg3:RangedValue, _arg4:Number=0, _arg5:Number=1):void{
this.motionType = Particle.MOTION_TYPE_TARGETED;
this.targetRegion = _arg1;
this.accelX = _arg2;
this.accelY = _arg3;
this.motionStartTime = _arg4;
this.motionEndTime = _arg5;
}
public function loadAlphaFromXML(_arg1:XML):void{
var _local2:String = Utils.getStringAttributeFromXML(_arg1, "type");
if (_local2 == null){
trace(" ** Error: no type specified for ALPHA");
return;
};
var _local3:Number = Utils.getFloatAttributeFromXML(_arg1, "startTime", 0);
var _local4:Number = Utils.getFloatAttributeFromXML(_arg1, "endTime", 1);
var _local5:int = getScaleTypeFromString(_local2);
switch (_local5){
case Particle.ALPHA_TYPE_TARGETED:
setAlphaTargeted(getRFloatFromXML(_arg1, "initial"), getRFloatFromXML(_arg1, "speed"), Utils.getFloatAttributeFromXML(_arg1, "target", 0), _local3, _local4);
break;
};
}
public function setDefaults():void{
this.motionType = Particle.MOTION_TYPE_NONE;
this.velocityX = Particle.getSimpleRFloat(0);
this.velocityY = Particle.getSimpleRFloat(0);
this.accelX = Particle.getSimpleRFloat(0);
this.accelY = Particle.getSimpleRFloat(0);
this.dragMultiplier = 0;
this.rotationType = Particle.ROTATION_TYPE_NONE;
this.rotation = Particle.getSimpleRFloat(0);
this.rotationSpeed = Particle.getSimpleRFloat(0);
this.rotationAccel = 0;
this.scaleType = Particle.SCALE_TYPE_NONE;
this.scale = Particle.getSimpleRFloat(1);
this.scaleSpeed = Particle.getSimpleRFloat(0);
this.scaleAccel = 0;
this.alphaType = Particle.ALPHA_TYPE_NONE;
this.alpha = Particle.getSimpleRFloat(1);
this.alphaSpeed = Particle.getSimpleRFloat(0);
this.alphaAccel = 0;
this.colourType = Particle.COLOUR_TYPE_NONE;
this.emitterBehaviourName = null;
}
public function setAlphaConstant(_arg1:RangedValue, _arg2:RangedValue, _arg3:Number, _arg4:Number=0, _arg5:Number=1):void{
this.alphaType = Particle.ALPHA_TYPE_CONSTANT;
this.alpha = _arg1;
this.alphaSpeed = _arg2;
this.alphaAccel = _arg3;
this.alphaStartTime = _arg4;
this.alphaEndTime = _arg5;
}
public function setRotationFromDirection():void{
this.rotationType = Particle.ROTATION_TYPE_FROM_DIRECTION;
}
public function loadRotationFromXML(_arg1:XML):void{
var _local2:String = Utils.getStringAttributeFromXML(_arg1, "type");
if (_local2 == null){
trace(" ** Error: no type specified for ROTATION");
return;
};
var _local3:Number = Utils.getFloatAttributeFromXML(_arg1, "startTime", 0);
var _local4:Number = Utils.getFloatAttributeFromXML(_arg1, "endTime", 1);
var _local5:int = getRotationTypeFromString(_local2);
switch (_local5){
case Particle.ROTATION_TYPE_CONSTANT:
setRotationConstant(getRFloatFromXML(_arg1, "initial"), getRFloatFromXML(_arg1, "speed"), Utils.getFloatAttributeFromXML(_arg1, "accel", 0), _local3, _local4);
break;
case Particle.ROTATION_TYPE_FROM_DIRECTION:
setRotationFromDirection();
break;
};
}
public function setMotionCartesian(_arg1:RangedValue, _arg2:RangedValue, _arg3:RangedValue, _arg4:RangedValue, _arg5:Number, _arg6:Number=0, _arg7:Number=1):void{
this.motionType = Particle.MOTION_TYPE_CARTESIAN;
this.velocityX = _arg1;
this.velocityY = _arg2;
this.accelX = _arg3;
this.accelY = _arg4;
this.dragMultiplier = _arg5;
this.motionStartTime = _arg6;
this.motionEndTime = _arg7;
}
public function setColourRandomPick(_arg1:Array):void{
this.colourType = Particle.COLOUR_TYPE_RANDOMPICK;
this.colours = _arg1;
}
public static function getMotionTypeFromString(_arg1:String):int{
var _local2:int = Particle.MOTION_TYPE_COUNT;
while (--_local2 >= 0) {
if (_arg1.toUpperCase() == Particle.MOTION_TYPE_NAMES[_local2].toUpperCase()){
return (_local2);
};
};
return (Particle.MOTION_TYPE_NONE);
}
public static function getScaleTypeFromString(_arg1:String):int{
var _local2:int = Particle.SCALE_TYPE_COUNT;
while (--_local2 >= 0) {
if (_arg1.toUpperCase() == Particle.SCALE_TYPE_NAMES[_local2].toUpperCase()){
return (_local2);
};
};
return (Particle.SCALE_TYPE_NONE);
}
public static function useZipHandler(_arg1:Boolean):void{
usingZipHandler = _arg1;
}
public static function getRFloatFromXML(_arg1:XML, _arg2:String):RangedValue{
var _local4:Number;
var _local5:Number;
var _local3:Number = Utils.getFloatAttributeFromXML(_arg1, _arg2, -1);
if (_local3 != -1){
return (RangedValue.getSimpleRFloat(_local3));
};
_local4 = Utils.getFloatAttributeFromXML(_arg1, (_arg2 + ".min"), -1);
_local5 = Utils.getFloatAttributeFromXML(_arg1, (_arg2 + ".max"), -1);
return (RangedValue.getLinearRFloat(_local4, _local5));
}
public static function createBehaviourDictionary(_arg1:XML):Dictionary{
var _local2:XML;
var _local3:Behaviour;
var _local4:String;
behaviourDictionary = new Dictionary();
for each (_local2 in _arg1.children()) {
_local3 = new (Behaviour);
_local4 = Utils.getStringAttributeFromXML(_local2, "id");
_local3.loadFromXML(_local2);
behaviourDictionary[_local4] = _local3;
};
return (behaviourDictionary);
}
public static function getRotationTypeFromString(_arg1:String):int{
var _local2:int = Particle.ROTATION_TYPE_COUNT;
while (--_local2 >= 0) {
if (_arg1.toUpperCase() == Particle.ROTATION_TYPE_NAMES[_local2].toUpperCase()){
return (_local2);
};
};
return (Particle.ROTATION_TYPE_NONE);
}
public static function getAlphaTypeFromString(_arg1:String):int{
var _local2:int = Particle.ALPHA_TYPE_COUNT;
while (--_local2 >= 0) {
if (_arg1.toUpperCase() == Particle.ALPHA_TYPE_NAMES[_local2].toUpperCase()){
return (_local2);
};
};
return (Particle.ALPHA_TYPE_NONE);
}
public static function getColourTypeFromString(_arg1:String):int{
var _local2:int = Particle.COLOUR_TYPE_COUNT;
while (--_local2 >= 0) {
if (_arg1.toUpperCase() == Particle.COLOUR_TYPE_NAMES[_local2].toUpperCase()){
return (_local2);
};
};
return (Particle.COLOUR_TYPE_NONE);
}
}
}//package flesh.particles
Section 8
//Emitter (flesh.particles.Emitter)
package flesh.particles {
import flash.display.*;
import flesh.*;
public class Emitter {
private var container:DisplayObjectContainer;
private var particlesPerSecond:Number;
private var timeStored:Number;
private var particlePool:ManagedPool;
private var emitting:Boolean;
private var lifeTime:Number;
private var particleCount:int;
public var region:Region;
private var usesOwnParticlePool:Boolean;
private var behaviour:Behaviour;
public function Emitter(_arg1:DisplayObjectContainer, _arg2:Number, _arg3:Number, _arg4:Behaviour, _arg5:uint, _arg6:Number, _arg7:Number, _arg8:Number=0, _arg9:Number=0, _arg10:Boolean=false){
this.container = _arg1;
this.lifeTime = _arg2;
this.particlesPerSecond = _arg3;
this.behaviour = _arg4;
this.region = Region.createRegion(_arg5, _arg6, _arg7, _arg8, _arg9, _arg10);
this.timeStored = 0;
this.usesOwnParticlePool = false;
this.particlePool = null;
this.emitting = false;
}
public function deactivate():void{
}
public function update(_arg1:Number):void{
var _local3:Vector;
if (!emitting){
return;
};
if (usesOwnParticlePool){
particlePool.updateAll(_arg1);
};
timeStored = (timeStored + _arg1);
if (lifeTime > 0){
lifeTime = (lifeTime - _arg1);
if (lifeTime < 0){
deactivate();
};
};
var _local2:int = Math.floor((particlesPerSecond * timeStored));
if (_local2 == 0){
return;
};
timeStored = (timeStored - (_local2 / particlesPerSecond));
if (region.getType() == Region.TYPE_POINT){
_local3 = region.getRandomPositionInRegion();
Particle.requestParticles(this.container, _local2, behaviour, _local3.x, _local3.y, region.getCentreX(), region.getCentreY(), particlePool);
} else {
Particle.requestParticlesForRegion(region, this.container, _local2, behaviour, particlePool);
};
}
public function setParticleRate(_arg1:Number):void{
this.particlesPerSecond = _arg1;
}
public function useOwnParticlePool(_arg1:String, _arg2:int):void{
this.particleCount = _arg2;
var _local3:Particle = new Particle(0);
this.particlePool = new ManagedPool(_arg1, _local3, _arg2);
this.usesOwnParticlePool = true;
}
public function start():void{
this.emitting = true;
}
public function stop():void{
this.emitting = false;
}
public function setPosition(_arg1:Number, _arg2:Number):void{
region.setPosition(_arg1, _arg2);
}
public function setBehaviour(_arg1:Behaviour):void{
this.behaviour = _arg1;
}
}
}//package flesh.particles
Section 9
//Particle (flesh.particles.Particle)
package flesh.particles {
import flash.display.*;
import flesh.*;
import flash.geom.*;
public class Particle extends PoolObject {
public var rotationAccel:Number;
public var alphaEndTime:Number;
public var scaleRange:Number;
public var dragMultiplier:Number;
public var minScale:Number;
public var finalRotation:Number;
public var displayType:Number;
public var scaleSpeed:Number;
public var scaleStartTime:Number;
public var position:Vector;
public var alphaAccel:Number;
public var ownedByEmitterPool:Boolean;
public var rotateType:int;
public var motionStartTime:Number;
public var maxScale:Number;
public var scale:Number;
public var moving:Boolean;
public var rotating:Boolean;
public var paintAdditive:Boolean;
public var alpha:Number;
public var deathTime:Number;
public var rotationSpeed:Number;
public var emitter:Emitter;
public var rotationStartTime:Number;
public var finalScale:Number;
public var rotation:Number;
public var container:DisplayObjectContainer;
public var scaling:Boolean;
public var alphaSpeed:Number;
public var alphaStartTime:Number;
public var scaleEndTime:Number;
public var finalX:Number;
public var finalY:Number;
public var scaleType:int;
public var scaleMin:Number;
public var emitterPool:ManagedPool;
public var motionEndTime:Number;
public var alpharizing:Boolean;
public var scaleAccel:Number;
public var behaviour:Behaviour;
public var sprite:DisplayObject;
public var colour:Number;
public var killOnEnd:Boolean;
public var floorY:Number;
public var velocity:Vector;
public var lineThickness:Number;
public var accel:Vector;
public var lifeTime:Number;
public var rotationEndTime:Number;
public var lineLength:Number;
public static const MOTION_TYPE_NAMES:Array = new Array("none", "cartesian", "polar", "targeted", "awayFromCentre", "polarEqualDistribution", "targetedWithDrag");
public static const ALPHA_TYPE_NAMES:Array = new Array("none", "constant", "targeted");
public static const SCALE_TYPE_NAMES:Array = new Array("none", "constant", "targeted", "linkedToPolarSpeed", "pulse");
public static const COLOUR_TYPE_NAMES:Array = new Array("none", "interpolated", "randompick", "randompickinterpolated");
public static const ROTATION_TYPE_NAMES:Array = new Array("none", "constant", "targeted", "fromDirection");
public static var SCALE_TYPE_TARGETED:uint = 2;
public static var MOTION_TYPE_POLAR:uint = 2;
public static var ROTATION_TYPE_CONSTANT:uint = 1;
public static var ROTATION_TYPE_COUNT:uint = 4;
public static var MOTION_TYPE_CARTESIAN:uint = 1;
public static var MOTION_TYPE_TARGETED:uint = 3;
public static var ALPHA_TYPE_TARGETED:uint = 2;
public static var MOTION_TYPE_TARGETED_WITH_DRAG:uint = 6;
public static var pool:ManagedPool;
public static var ZERO_RFLOAT:RangedValue = getSimpleRFloat(0);
public static var ROTATION_TYPE_NONE:uint = 0;
public static var COLOUR_TYPE_RANDOMPICK_INTERPOLATED:uint = 3;
public static var COLOUR_TYPE_RANDOMPICK:uint = 2;
public static var MOTION_TYPE_POLAR_EQUAL_DISTRIBUTION:uint = 5;
public static var SCALE_TYPE_CONSTANT:uint = 1;
public static var COLOUR_TYPE_INTERPOLATED:uint = 1;
public static var ALPHA_TYPE_COUNT:uint = 3;
public static var SCALE_TYPE_NONE:uint = 0;
public static var MOTION_TYPE_COUNT:uint = 7;
public static var ROTATION_TYPE_TARGETED:uint = 2;
public static var ALPHA_TYPE_CONSTANT:uint = 1;
public static var SCALE_TYPE_LINKED_TO_POLAR_SPEED:uint = 3;
public static var MOTION_TYPE_NONE:uint = 0;
public static var MOTION_TYPE_AWAY_FROM_CENTRE:uint = 4;
public static var ALPHA_TYPE_NONE:uint = 0;
private static var max:int;
public static var SCALE_TYPE_COUNT:uint = 5;
public static var SCALE_TYPE_PULSE:uint = 4;
public static var COLOUR_TYPE_NONE:uint = 0;
public static var ROTATION_TYPE_FROM_DIRECTION:uint = 3;
private static var visible:Boolean = true;
private static var globalAlpha:Number = 1;
public static var COLOUR_TYPE_COUNT:uint = 4;
public function Particle(_arg1:uint){
super(_arg1);
sprite = null;
position = new Vector(0, 0);
velocity = new Vector(0, 0);
accel = new Vector(0, 0);
active = false;
}
public function setRotation(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{
this.rotateType = ROTATION_TYPE_CONSTANT;
this.rotation = _arg1;
this.rotationSpeed = _arg2;
this.rotationAccel = _arg3;
this.rotationStartTime = _arg4;
this.rotationEndTime = _arg5;
this.rotating = true;
}
public function applyStateToSprite():void{
sprite.x = position.x;
sprite.y = position.y;
sprite.rotation = ((rotation * 360) / Utils.RAD360);
sprite.alpha = alpha;
sprite.scaleX = (sprite.scaleY = scale);
}
public function setScale(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{
this.scaleType = SCALE_TYPE_CONSTANT;
this.scale = _arg1;
this.scaleSpeed = _arg2;
this.scaleAccel = _arg3;
this.scaleStartTime = _arg4;
this.scaleEndTime = _arg5;
this.scaling = true;
}
public function init(_arg1:DisplayObjectContainer, _arg2:Behaviour, _arg3:Number, _arg4:Number, _arg5:Number):void{
var _local6:Sprite;
var _local7:Bitmap;
var _local8:BitmapData;
var _local9:Graphics;
var _local10:MovieClip;
var _local11:Behaviour;
if (_arg2.bitmapData != null){
_local7 = new Bitmap(_arg2.bitmapData);
_local7.smoothing = true;
_local6 = new Sprite();
_local6.addChild(_local7);
_local7.x = -((_arg2.bitmapData.width * 0.5));
_local7.y = -((_arg2.bitmapData.height * 0.5));
this.sprite = _local6;
} else {
if (_arg2.bitmapDataArray != null){
_local8 = _arg2.bitmapDataArray[int((Math.random() * _arg2.bitmapDataArray.length))];
_local7 = new Bitmap(_local8);
_local7.smoothing = true;
_local6 = new Sprite();
_local6.addChild(_local7);
_local7.x = -((_local8.width * 0.5));
_local7.y = -((_local8.height * 0.5));
this.sprite = _local6;
} else {
if (_arg2.displayObject != null){
this.sprite = Utils.duplicateDisplayObject(_arg2.displayObject);
} else {
_local6 = new Sprite();
_local9 = _local6.graphics;
_local9.beginFill(0xFF0000);
_local9.drawCircle(0, 0, 10);
_local9.endFill();
this.sprite = _local6;
};
};
};
if ((sprite is MovieClip)){
_local10 = (sprite as MovieClip);
_local10.gotoAndStop((1 + int((_local10.totalFrames * Math.random()))));
};
this.sprite.cacheAsBitmap = true;
this.deathTime = _arg5;
this.killOnEnd = _arg2.killOnEnd;
this.position.set(_arg3, _arg4);
this.paintAdditive = _arg2.paintAdditive;
initDefaults();
this.container = _arg1;
this.container.addChild(this.sprite);
if (paintAdditive){
this.sprite.blendMode = BlendMode.ADD;
};
if (_arg2.emitterBehaviourName != null){
_local11 = Behaviour.behaviourDictionary[_arg2.emitterBehaviourName];
if (_local11 == null){
trace(("couldn't find emitterBehaviour " + _arg2.emitterBehaviourName));
} else {
trace(("created emitter for particle with behaviour " + _arg2.emitterBehaviourName));
emitter = new Emitter(this.container, 0, _arg2.emitterRate, _local11, Region.TYPE_POINT, position.x, position.y);
emitter.start();
};
};
}
public function setAlpha(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{
this.alpha = _arg1;
this.alphaSpeed = _arg2;
this.alphaAccel = _arg3;
this.alphaStartTime = _arg4;
this.alphaEndTime = _arg5;
this.alpharizing = true;
}
public function setScalePulse(_arg1:Number, _arg2:Number, _arg3:Number):void{
this.scaleType = SCALE_TYPE_PULSE;
this.scaleMin = (this.scale = _arg1);
this.scaleRange = (_arg2 - _arg1);
this.scaleSpeed = _arg3;
this.scaleAccel = 0;
this.scaling = true;
}
override public function deactivate():void{
this.container.removeChild(this.sprite);
sprite = null;
if (ownedByEmitterPool){
emitterPool.notifyDeactivated(this);
} else {
pool.notifyDeactivated(this);
};
if (emitter != null){
emitter.stop();
emitter = null;
};
active = false;
}
public function initDefaults():void{
this.lifeTime = 0;
this.rotation = 0;
this.scale = (this.alpha = 1);
this.moving = false;
this.rotating = false;
this.scaling = false;
this.alpharizing = false;
this.colour = 4294967295;
this.active = true;
this.emitter = null;
}
override public function createInstance(_arg1:uint):PoolObject{
return (new Particle(_arg1));
}
public function setMotion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number):void{
this.velocity.set(_arg1, _arg2);
this.accel.set(_arg3, _arg4);
this.dragMultiplier = _arg5;
this.motionStartTime = _arg6;
this.motionEndTime = _arg7;
this.moving = true;
}
override public function update(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
var _local4:Vector;
var _local5:Vector;
var _local6:Vector;
var _local7:Number;
var _local8:Number;
if (emitter != null){
emitter.update(_arg1);
};
if (((moving) && ((((((lifeTime >= motionStartTime)) && ((lifeTime <= motionEndTime)))) || ((behaviour.motionType == MOTION_TYPE_TARGETED_WITH_DRAG)))))){
_local2 = position.x;
_local3 = position.y;
_local4 = velocity.clone();
_local4.multiply(_arg1);
position.addVector(_local4);
if (position.y >= floorY){
position.y = floorY;
velocity.multiply(behaviour.restitution);
velocity.y = -(velocity.y);
if (rotating){
rotationSpeed = (rotationSpeed * behaviour.restitution);
};
};
_local5 = accel.clone();
_local5.multiply(_arg1);
velocity.addVector(_local5);
if (dragMultiplier != 0){
_local6 = velocity.clone();
_local6.multiply((_arg1 * dragMultiplier));
velocity.subtractVector(_local6);
};
if (behaviour.motionType == MOTION_TYPE_TARGETED_WITH_DRAG){
_local7 = Utils.getDistanceBetweenLineAndPoint(_local2, _local3, position.x, position.y, finalX, finalY);
if (_local7 < _local4.length()){
position.set(finalX, finalY);
finishedJourney();
return;
};
};
if (emitter != null){
emitter.setPosition(position.x, position.y);
};
};
if (((((rotating) && ((lifeTime >= rotationStartTime)))) && ((lifeTime <= rotationEndTime)))){
if (rotateType == ROTATION_TYPE_FROM_DIRECTION){
rotation = Utils.getAngle(velocity.x, velocity.y);
} else {
rotation = (rotation + (rotationSpeed * _arg1));
rotationSpeed = (rotationSpeed + (rotationAccel * _arg1));
};
};
if (((((scaling) && ((lifeTime >= scaleStartTime)))) && ((lifeTime <= scaleEndTime)))){
if (scaleType == SCALE_TYPE_PULSE){
scaleAccel = (scaleAccel + (scaleSpeed * _arg1));
if (scaleAccel > (Math.PI * 2)){
scaleAccel = (scaleAccel - (Math.PI * 2));
};
_local8 = ((Math.sin(scaleAccel) + 1) * 0.5);
scale = ((_local8 * scaleRange) + scaleMin);
} else {
scale = (scale + (scaleSpeed * _arg1));
scaleSpeed = (scaleSpeed + (scaleAccel * _arg1));
};
};
if (((((alpharizing) && ((lifeTime >= alphaStartTime)))) && ((lifeTime <= alphaEndTime)))){
alpha = (alpha + (alphaSpeed * _arg1));
alphaSpeed = (alphaSpeed + (alphaAccel * _arg1));
};
if ((((lifeTime < deathTime)) && (!((behaviour.motionType == MOTION_TYPE_TARGETED_WITH_DRAG))))){
lifeTime = (lifeTime + _arg1);
if (lifeTime >= deathTime){
finishedJourney();
return;
};
};
applyStateToSprite();
}
public function setColour(_arg1:uint):void{
this.colour = _arg1;
var _local2:ColorTransform = sprite.transform.colorTransform;
_local2.color = _arg1;
sprite.transform.colorTransform = _local2;
}
public function setRotationFromDirection():void{
this.rotationStartTime = 0;
this.rotationEndTime = 1;
this.rotateType = ROTATION_TYPE_FROM_DIRECTION;
this.rotating = true;
}
public function finishedJourney():void{
if (killOnEnd){
deactivate();
return;
};
position.set(finalX, finalY);
rotation = finalRotation;
scale = finalScale;
scaling = false;
moving = false;
rotating = false;
}
public static function getLinearRFloat(_arg1:Number, _arg2:Number):RangedValue{
var _local3:RangedValue = new RangedValue();
_local3.type = RangedValue.TYPE_LINEAR;
_local3.min = _arg1;
_local3.max = _arg2;
return (_local3);
}
public static function setAllVisible(_arg1:Boolean):void{
visible = _arg1;
}
public static function initStart(_arg1:int):void{
Particle.max = _arg1;
var _local2:Particle = new Particle(0);
pool = new ManagedPool("GlossParticlePool", _local2, _arg1);
}
public static function getValue(_arg1:RangedValue):Number{
switch (_arg1.type){
case RangedValue.TYPE_NONE:
return (_arg1.min);
case RangedValue.TYPE_LINEAR:
return ((_arg1.min + (Math.random() * (_arg1.max - _arg1.min))));
case RangedValue.TYPE_SINE:
return ((_arg1.min + (Math.sin((Math.random() * Math.PI)) * (_arg1.max - _arg1.min))));
};
return (0);
}
public static function deactivateAllParticles():void{
pool.deactivateAll();
}
public static function updateAll(_arg1:Number):void{
var _local3:Particle;
var _local2:Number = pool.getActiveObjectCount();
while (--_local2 >= 0) {
_local3 = Particle(pool.getActiveObject(_local2));
_local3.update(_arg1);
};
}
public static function getSimpleRFloat(_arg1:Number):RangedValue{
var _local2:RangedValue = new RangedValue();
_local2.type = RangedValue.TYPE_NONE;
_local2.min = (_local2.max = _arg1);
return (_local2);
}
public static function requestParticles(_arg1:DisplayObjectContainer, _arg2:Number, _arg3:Behaviour, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:ManagedPool=null, _arg9:Boolean=false, _arg10:Array=null):void{
var _local12:Particle;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Vector;
var _local24:Number;
var _local25:Vector;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:Number;
var _local31:Number;
var _local32:Number;
var _local33:Number;
var _local34:Number;
var _local35:Number;
var _local36:Number;
var _local37:Number;
var _local38:Number;
var _local39:Number;
var _local40:Number;
var _local41:Number;
var _local42:Number;
var _local43:Number;
var _local44:Number;
var _local45:Number;
var _local46:int;
var _local47:int;
var _local11:int = _arg2;
if (_arg10 != null){
_arg10.splice(0);
};
while (_local11 > 0) {
if (_arg8 != null){
_local12 = (_arg8.requestObject() as Particle);
if (_local12 != null){
_local12.ownedByEmitterPool = true;
_local12.emitterPool = _arg8;
};
} else {
_local12 = (pool.requestObject() as Particle);
if (_local12 != null){
_local12.ownedByEmitterPool = false;
_local12.emitterPool = null;
};
};
if (_local12 == null){
break;
};
if (_arg10 != null){
_arg10.push(_local12);
};
_local13 = _arg3.lifeTime;
_local14 = 0;
_local12.behaviour = _arg3;
_local12.finalScale = 1;
_local12.finalRotation = 0;
_local12.init(_arg1, _arg3, _arg4, _arg5, _local13);
if (_arg3.motionType != MOTION_TYPE_NONE){
_local17 = (_local13 * _arg3.motionStartTime);
_local18 = (_local13 * _arg3.motionEndTime);
_local19 = 0;
_local20 = 0;
_local21 = getValue(_arg3.accelX);
_local22 = getValue(_arg3.accelY);
_local12.floorY = (_arg5 + _arg3.floorOffsetY);
switch (_arg3.motionType){
case MOTION_TYPE_CARTESIAN:
_local19 = getValue(_arg3.velocityX);
_local20 = getValue(_arg3.velocityY);
break;
case MOTION_TYPE_POLAR_EQUAL_DISTRIBUTION:
case MOTION_TYPE_POLAR:
if (_arg3.motionType == MOTION_TYPE_POLAR_EQUAL_DISTRIBUTION){
_local24 = (_arg3.direction.min + ((_local11 / _arg2) * _arg3.directionRange));
} else {
_local24 = getValue(_arg3.direction);
};
_local14 = getValue(_arg3.speed);
_local19 = (Math.sin(((_local24 * Utils.RAD360) / 360)) * _local14);
_local20 = (-(Math.cos(((_local24 * Utils.RAD360) / 360))) * _local14);
break;
case MOTION_TYPE_TARGETED:
case MOTION_TYPE_TARGETED_WITH_DRAG:
_local25 = new Vector(0, 0);
_local25 = _arg3.targetRegion.getRandomPositionInRegion();
_local12.finalX = _local25.x;
_local12.finalY = _local25.y;
_local26 = (_local25.x - _arg4);
_local27 = (_local25.y - _arg5);
_local15 = (_local18 - _local17);
_local16 = ((_local18 - _local17) * _local15);
_local19 = ((_local26 - ((0.5 * _local21) * _local16)) / _local15);
_local20 = ((_local27 - ((0.5 * _local22) * _local16)) / _local15);
break;
case MOTION_TYPE_AWAY_FROM_CENTRE:
_local23 = new Vector((_arg4 - _arg6), (_arg5 - _arg7));
_local23.unit();
_local14 = getValue(_arg3.speed);
_local19 = (_local23.x * _local14);
_local20 = (_local23.y * _local14);
break;
};
if (_arg9){
_local19 = -(_local19);
_local21 = -(_local21);
};
_local12.setMotion(_local19, _local20, _local21, _local22, _arg3.dragMultiplier, _local17, _local18);
};
if (_arg3.rotationType == ROTATION_TYPE_FROM_DIRECTION){
_local12.setRotationFromDirection();
} else {
if (_arg3.rotationType != ROTATION_TYPE_NONE){
_local28 = (_local13 * _arg3.rotationStartTime);
_local29 = (_local13 * _arg3.rotationEndTime);
_local30 = 0;
_local31 = getValue(_arg3.rotation);
_local32 = getValue(_arg3.rotationSpeed);
switch (_arg3.rotationType){
case ROTATION_TYPE_CONSTANT:
_local30 = _arg3.rotationAccel;
break;
case ROTATION_TYPE_TARGETED:
_local15 = (_local29 - _local28);
_local16 = ((_local29 - _local28) * _local15);
_local33 = ((_arg3.numberOfRotations * Math.PI) * 2);
_local30 = ((_local33 - (_local32 * _local15)) / (0.5 * _local16));
_local12.finalRotation = (_local31 + _local33);
break;
};
_local12.setRotation(_local31, _local32, _local30, _local28, _local29);
};
};
if (_arg3.scaleType != SCALE_TYPE_NONE){
_local34 = (_local13 * _arg3.scaleStartTime);
_local35 = (_local13 * _arg3.scaleEndTime);
_local36 = getValue(_arg3.scaleSpeed);
if (_arg3.scaleType == SCALE_TYPE_PULSE){
_local12.setScalePulse(_arg3.scale.min, _arg3.scale.max, _local36);
} else {
_local37 = 0;
if (_arg3.scaleType == SCALE_TYPE_LINKED_TO_POLAR_SPEED){
_local39 = (_arg3.speedRange / _local14);
_local38 = (_arg3.scale.min + (_arg3.scaleRange * _local39));
} else {
_local38 = getValue(_arg3.scale);
};
switch (_arg3.scaleType){
case SCALE_TYPE_LINKED_TO_POLAR_SPEED:
case SCALE_TYPE_CONSTANT:
_local37 = _arg3.rotationAccel;
break;
case SCALE_TYPE_TARGETED:
_local33 = (_arg3.targetScale - _local38);
_local15 = (_local35 - _local34);
_local16 = ((_local35 - _local34) * _local15);
_local37 = ((_local33 - (_local36 * _local15)) / (0.5 * _local16));
_local12.finalScale = _arg3.targetScale;
break;
};
_local12.setScale(_local38, _local36, _local37, _local34, _local35);
};
};
if (_arg3.alphaType != ALPHA_TYPE_NONE){
_local40 = (_local13 * _arg3.alphaStartTime);
_local41 = (_local13 * _arg3.alphaEndTime);
_local42 = 0;
_local43 = getValue(_arg3.alpha);
_local44 = getValue(_arg3.alphaSpeed);
switch (_arg3.alphaType){
case ALPHA_TYPE_CONSTANT:
_local42 = _arg3.alphaAccel;
break;
case ALPHA_TYPE_TARGETED:
_local33 = (_arg3.targetAlpha - _local43);
_local15 = (_local41 - _local40);
_local16 = ((_local41 - _local40) * _local15);
_local42 = ((_local33 - (_local44 * _local15)) / (0.5 * _local16));
break;
};
_local12.setAlpha(_local43, _local44, _local42, _local40, _local41);
};
if (_arg3.colourType != COLOUR_TYPE_NONE){
_local45 = 4294967295;
switch (_arg3.colourType){
case COLOUR_TYPE_INTERPOLATED:
_local45 = Utils.getInterpolatedColour(_arg3.colour0, _arg3.colour1, Math.random(), 1);
break;
case COLOUR_TYPE_RANDOMPICK:
if (_arg3.colours.length > 0){
_local45 = _arg3.colours[Math.floor((_arg3.colours.length * Math.random()))];
};
break;
case COLOUR_TYPE_RANDOMPICK_INTERPOLATED:
if (_arg3.colours.length > 0){
_local46 = Math.floor(((_arg3.colours.length * 0.5) * Math.random()));
_local47 = (_local46 << 1);
_local45 = Utils.getInterpolatedColour(_arg3.colours[_local47], _arg3.colours[(_local47 + 1)], Math.random(), 1);
};
break;
};
_local12.setColour(_local45);
};
_local12.applyStateToSprite();
--_local11;
if (_local11 <= 0){
return;
};
};
if (_local11 > 0){
trace(" ** NOT ENOUGH PARTICLES!!");
};
}
public static function getSineRFloat(_arg1:Number, _arg2:Number):RangedValue{
var _local3:RangedValue = new RangedValue();
_local3.type = RangedValue.TYPE_SINE;
_local3.min = _arg1;
_local3.max = _arg2;
return (_local3);
}
public static function requestParticlesForRegion(_arg1:Region, _arg2:DisplayObjectContainer, _arg3:Number, _arg4:Behaviour, _arg5:ManagedPool=null, _arg6:Boolean=false, _arg7:Array=null):void{
var _local8:Vector;
var _local9:int = _arg3;
while (--_local9 >= 0) {
_local8 = _arg1.getRandomPositionInRegion();
requestParticles(_arg2, 1, _arg4, _local8.x, _local8.y, _arg1.getCentreX(), _arg1.getCentreY(), _arg5, _arg6, _arg7);
};
}
public static function setGlobalAlpha(_arg1:Number):void{
globalAlpha = _arg1;
}
}
}//package flesh.particles
Section 10
//RangedValue (flesh.particles.RangedValue)
package flesh.particles {
public class RangedValue {
public var min:Number;
public var max:Number;
public var type:int;
public static const TYPE_LINEAR:int = 1;
public static const TYPE_SINE:int = 2;
public static const TYPE_NONE:int = 0;
public static function getLinearRFloat(_arg1:Number, _arg2:Number):RangedValue{
var _local3:RangedValue = new (RangedValue);
_local3.type = TYPE_LINEAR;
_local3.min = _arg1;
_local3.max = _arg2;
return (_local3);
}
public static function getSineRFloat(_arg1:Number, _arg2:Number):RangedValue{
var _local3:RangedValue = new (RangedValue);
_local3.type = TYPE_SINE;
_local3.min = _arg1;
_local3.max = _arg2;
return (_local3);
}
public static function getSimpleRFloat(_arg1:Number):RangedValue{
var _local2:RangedValue = new (RangedValue);
_local2.type = TYPE_NONE;
_local2.min = (_local2.max = _arg1);
return (_local2);
}
}
}//package flesh.particles
Section 11
//Region (flesh.particles.Region)
package flesh.particles {
import flesh.*;
public class Region {
private var width:Number;
private var outlineOnly:Boolean;
private var centreX:Number;
private var centreY:Number;
private var endPosition:Vector;
private var height:Number;
private var position:Vector;
private var lineDirection:Vector;
private var type:int;
public static const TYPE_ELLIPSE:int = 2;
public static const TYPE_NAMES:Array = new Array("POINT", "LINE", "ELLIPSE", "RECT");
public static const TYPE_RECT:int = 3;
public static const TYPE_POINT:int = 0;
public static const TYPE_COUNT:int = 4;
public static const TYPE_LINE:int = 1;
public static const TYPE_NONE:int = -1;
public function Region(){
position = new Vector(0, 0);
endPosition = new Vector(0, 0);
lineDirection = new Vector(0, 0);
}
public function loadXML(_arg1:XML):void{
var _local5:int;
var _local6:int;
var _local2:String = Utils.getStringAttributeFromXML(_arg1, "type", null);
if (_local2 == null){
trace(" ** Error: no type specified for REGION");
return;
};
type = getRegionTypeFromString(_local2);
if (type == TYPE_NONE){
trace(" ** Error: unknown type specified for REGION");
};
var _local3:int = Utils.getIntAttributeFromXML(_arg1, "x", 0);
var _local4:int = Utils.getIntAttributeFromXML(_arg1, "y", 0);
switch (type){
case TYPE_POINT:
setPosition(_local3, _local4);
break;
case TYPE_LINE:
_local5 = Utils.getIntAttributeFromXML(_arg1, "x1", 0);
_local6 = Utils.getIntAttributeFromXML(_arg1, "y1", 0);
setLine(_local3, _local4, _local5, _local6);
break;
case TYPE_ELLIPSE:
_local5 = Utils.getIntAttributeFromXML(_arg1, "x1", 0);
_local6 = Utils.getIntAttributeFromXML(_arg1, "y1", 0);
setEllipse(_local3, _local4, _local5, _local6);
break;
case TYPE_RECT:
_local5 = Utils.getIntAttributeFromXML(_arg1, "x1", 0);
_local6 = Utils.getIntAttributeFromXML(_arg1, "y1", 0);
setRect(_local3, _local4, _local5, _local6);
break;
};
}
public function getRandomPositionInRegion():Vector{
var _local1:Number;
var _local3:Number;
var _local4:Number;
var _local5:Vector;
var _local6:int;
switch (type){
case TYPE_POINT:
return (new Vector(position.x, position.y));
case TYPE_LINE:
_local5 = lineDirection.clone();
_local5.multiply((Math.random() * width));
_local5.addVector(position);
return (_local5);
case TYPE_ELLIPSE:
if (outlineOnly){
_local1 = ((Math.random() * Math.PI) * 2);
return (new Vector((centreX + (Math.sin(_local1) * (width / 2))), (centreY - (Math.cos(_local1) * (height / 2)))));
};
_local1 = ((Math.random() * Math.PI) * 2);
return (new Vector((centreX + ((Math.sin(_local1) * Math.random()) * (width / 2))), (centreY - ((Math.cos(_local1) * Math.random()) * (height / 2)))));
case TYPE_RECT:
_local3 = (Math.random() * width);
_local4 = (Math.random() * height);
if (outlineOnly){
_local6 = Math.floor((Math.random() * 4));
switch (_local6){
case 0:
return (new Vector((position.x + _local3), position.y));
case 1:
return (new Vector((position.x + _local3), (position.y + height)));
case 2:
return (new Vector(position.x, (position.y + _local4)));
case 3:
return (new Vector((position.x + width), (position.y + _local4)));
};
} else {
return (new Vector((position.x + _local3), (position.y + _local4)));
};
break;
};
var _local2:Vector = new Vector(0, 0);
return (_local2);
}
public function getPosition():Vector{
return (position);
}
public function setEndPosition(_arg1:Number, _arg2:Number):void{
endPosition.set(_arg1, _arg2);
}
public function setEllipse(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
setPosition(_arg1, _arg2);
setEndPosition(_arg3, _arg4);
this.width = (_arg3 - _arg1);
this.height = (_arg4 - _arg2);
this.centreX = (_arg1 + (width / 2));
this.centreY = (_arg2 + (height / 2));
type = TYPE_ELLIPSE;
}
public function setRect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
setPosition(_arg1, _arg2);
setEndPosition(_arg3, _arg4);
this.width = (_arg3 - _arg1);
this.height = (_arg4 - _arg2);
this.centreX = (_arg1 + (width / 2));
this.centreY = (_arg2 + (height / 2));
type = TYPE_RECT;
}
public function getCentreY():Number{
return (centreY);
}
public function getCentreX():Number{
return (centreX);
}
public function getType():uint{
return (type);
}
public function setPosition(_arg1:Number, _arg2:Number):void{
this.centreX = _arg1;
this.centreY = _arg2;
position.set(_arg1, _arg2);
}
public function getLinePosition():Vector{
return (lineDirection);
}
public function setLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
setPosition(_arg1, _arg2);
setEndPosition(_arg3, _arg4);
lineDirection = endPosition.clone();
lineDirection.subtractVector(position);
this.width = lineDirection.unit();
this.centreX = ((_arg1 + _arg3) / 2);
this.centreY = ((_arg2 + _arg4) / 2);
type = TYPE_LINE;
}
public static function createLineRegion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Region{
var _local5:Region = new (Region);
_local5.setLine(_arg1, _arg2, _arg3, _arg4);
return (_local5);
}
public static function createEllipseRegion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Boolean=false):Region{
var _local6:Region = new (Region);
_local6.setEllipse(_arg1, _arg2, _arg3, _arg4);
_local6.outlineOnly = _arg5;
return (_local6);
}
public static function createPointRegion(_arg1:Number, _arg2:Number):Region{
var _local3:Region = new (Region);
_local3.setPosition(_arg1, _arg2);
return (_local3);
}
public static function createRegion(_arg1:uint, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Boolean=false):Region{
var _local7:Region;
switch (_arg1){
case TYPE_POINT:
_local7 = createPointRegion(_arg2, _arg3);
break;
case TYPE_LINE:
_local7 = createLineRegion(_arg2, _arg3, _arg4, _arg5);
break;
case TYPE_ELLIPSE:
_local7 = createEllipseRegion(_arg2, _arg3, _arg4, _arg5, _arg6);
break;
case TYPE_RECT:
_local7 = createRectRegion(_arg2, _arg3, _arg4, _arg5, _arg6);
break;
};
if (_local7 != null){
_local7.type = _arg1;
};
return (_local7);
}
public static function createRectRegion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Boolean=false):Region{
var _local6:Region = new (Region);
_local6.setRect(_arg1, _arg2, _arg3, _arg4);
_local6.outlineOnly = _arg5;
return (_local6);
}
public static function getRegionTypeFromString(_arg1:String):int{
var _local2:int = TYPE_COUNT;
while (--_local2 >= 0) {
if (_arg1.toUpperCase().indexOf(TYPE_NAMES[_local2]) != -1){
return (_local2);
};
};
return (TYPE_NONE);
}
}
}//package flesh.particles
Section 12
//ArmorGamesInterface (flesh.ArmorGamesInterface)
package flesh {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import flash.system.*;
public class ArmorGamesInterface {
private var isGuiVisible:Boolean;
private var agi:Object;
private var devKey:String;
private var gameKey:String;
private var parentClip:Sprite;
private static var agi_url:String = "http://agi.armorgames.com/assets/agi/AGI.swf";
public function ArmorGamesInterface(){
isGuiVisible = false;
}
public function isHighScoreVisible():Boolean{
return (isGuiVisible);
}
public function init(_arg1:Sprite, _arg2:String, _arg3:String):void{
this.parentClip = _arg1;
this.devKey = _arg2;
this.gameKey = _arg3;
Security.allowDomain(agi_url);
var _local4:URLRequest = new URLRequest(agi_url);
var _local5:Loader = new Loader();
_local5.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
_local5.load(_local4);
}
private function onCloseHandler():void{
isGuiVisible = false;
}
public function submitScore(_arg1:int):void{
agi.showScoreboardSubmit(_arg1);
isGuiVisible = true;
}
public function viewScores():void{
agi.showScoreboardList();
isGuiVisible = true;
}
private function loadComplete(_arg1:Event):void{
agi = _arg1.currentTarget.content;
parentClip.addChild((agi as DisplayObject));
agi.init(devKey, gameKey);
agi.initAGUI({onClose:onCloseHandler});
}
}
}//package flesh
Section 13
//DelayedFunction (flesh.DelayedFunction)
package flesh {
public class DelayedFunction {
public var time:Number;
public var f:Function;
public function DelayedFunction(_arg1:Function, _arg2:Number){
this.f = _arg1;
this.time = _arg2;
}
public function update(_arg1:Number):Boolean{
time = (time - _arg1);
if (time <= 0){
f.call();
return (true);
};
return (false);
}
}
}//package flesh
Section 14
//DraggableSprite (flesh.DraggableSprite)
package flesh {
import flash.events.*;
import flash.display.*;
public class DraggableSprite {
public var mouseOffsetX:Number;
public var mouseOffsetY:Number;
public var sprite:Sprite;
public var beingDragged:Boolean;
public var startX:Number;
public var startY:Number;
public var dropFunction:Function;
public function DraggableSprite(_arg1:Sprite, _arg2:Function=null){
this.sprite = _arg1;
this.dropFunction = _arg2;
this.startX = _arg1.x;
this.startY = _arg1.y;
reset();
}
public function mouseDown(_arg1:MouseEvent):void{
mouseOffsetX = (sprite.x - sprite.root.mouseX);
mouseOffsetY = (sprite.y - sprite.root.mouseY);
this.sprite.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
this.sprite.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
beingDragged = true;
}
public function mouseUp(_arg1:MouseEvent):void{
var _local2:Boolean;
this.sprite.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
if (dropFunction != null){
_local2 = dropFunction(sprite);
};
reset();
}
public function update(_arg1:Number):void{
if (beingDragged){
sprite.x = (sprite.root.mouseX + mouseOffsetX);
sprite.y = (sprite.root.mouseY + mouseOffsetY);
};
}
public function reset():void{
beingDragged = false;
sprite.x = startX;
sprite.y = startY;
this.sprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
}
}
}//package flesh
Section 15
//FleshSound (flesh.FleshSound)
package flesh {
import flash.events.*;
import flash.media.*;
public class FleshSound {
private var fadeInVolume:Number;
private var stopOnFadeOut:Boolean;
private var defaultVolume:Number;
public var name:String;
private var sound:Sound;
private var channels:Array;
private var state:uint;
private var fadeVolumePerSecond:Number;
private var loopNextSound:Boolean;
private var urlString:String;
public var id:String;
private var transform:SoundTransform;
private var soundToPlayOnFadeOut:FleshSound;
private var type:uint;
public var filters:String;
private var multiMode:uint;
public static const MUSIC:uint = 0;
public static const SINGLETON:uint = 0;
public static const STATE_PLAYING:uint = 0;
public static const MULTIPLE:uint = 1;
public static const FX:uint = 1;
public static const STATE_FADING_IN:uint = 3;
public static const STATE_FADING_OUT:uint = 2;
public static const STATE_STOPPED:uint = 1;
public function FleshSound(_arg1:String, _arg2:Sound, _arg3:uint, _arg4:uint){
this.id = _arg1;
this.channels = new Array();
this.type = _arg3;
this.multiMode = _arg4;
this.urlString = urlString;
this.sound = _arg2;
transform = new SoundTransform(1, 0);
state = STATE_STOPPED;
}
public function fadeIn(_arg1:Boolean=false, _arg2:Number=0, _arg3:Number=0, _arg4:Number=-1):SoundChannel{
return (play(_arg1, _arg2, _arg3, _arg4));
}
public function loadFailed(_arg1:Event):void{
sound.removeEventListener(IOErrorEvent.IO_ERROR, loadFailed);
trace((" ** ERROR: Couldn't load sound " + getUrl()));
}
public function setDefaultVolume(_arg1:Number):void{
defaultVolume = _arg1;
}
public function play(_arg1:Boolean=false, _arg2:Number=0, _arg3:Number=0, _arg4:Number=-1, _arg5:Number=0):SoundChannel{
var _local6:Number = ((_arg4 == -1)) ? defaultVolume : _arg4;
if ((((((state == STATE_PLAYING)) && ((_arg3 > 0)))) && ((transform.volume == 0)))){
state = STATE_FADING_IN;
fadeInVolume = _local6;
return (null);
};
if ((((multiMode == SINGLETON)) && ((channels.length > 0)))){
stop();
};
transform.pan = _arg2;
if (_arg3 > 0){
fadeInVolume = _local6;
fadeVolumePerSecond = (fadeInVolume / _arg3);
state = STATE_FADING_IN;
trace(((("fading in sound " + id) + " fadeVolumePerSecond = ") + fadeVolumePerSecond));
} else {
state = STATE_PLAYING;
};
transform.volume = ((_arg3 > 0)) ? 0 : _local6;
var _local7:SoundChannel = sound.play((_arg5 * 1000), (_arg1) ? 100000 : 1, transform);
if (_local7 != null){
channels.push(_local7);
_local7.addEventListener(Event.SOUND_COMPLETE, soundFinished);
};
return (_local7);
}
public function getSound():Sound{
return (sound);
}
public function stop():void{
var _local1:uint;
while (_local1 < channels.length) {
channels[_local1].stop();
_local1++;
};
channels.splice(0);
state = STATE_STOPPED;
}
public function applyTransformToAllChannels():void{
var _local1:SoundChannel;
for each (_local1 in channels) {
_local1.soundTransform = transform;
};
}
public function stopChannel(_arg1:SoundChannel):void{
_arg1.stop();
var _local2:int = channels.indexOf(_arg1);
if (_local2 != -1){
channels.splice(_local2, 1);
_arg1.removeEventListener(Event.SOUND_COMPLETE, soundFinished);
};
}
public function soundFinished(_arg1:Event):void{
var _local2:SoundChannel = SoundChannel(_arg1.target);
_local2.removeEventListener(Event.SOUND_COMPLETE, soundFinished);
channels.splice(channels.indexOf(_local2), 1);
}
public function update(_arg1:Number):void{
var _local2:SoundChannel;
switch (state){
case STATE_FADING_OUT:
transform.volume = (transform.volume - (fadeVolumePerSecond * _arg1));
_local2 = (channels[0] as SoundChannel);
if (_local2 == null){
stop();
trace("strange sound problem");
return;
};
_local2.soundTransform = transform;
if (transform.volume <= 0){
transform.volume = 0;
_local2.soundTransform = transform;
if (stopOnFadeOut){
stop();
} else {
state = STATE_PLAYING;
};
if (soundToPlayOnFadeOut != null){
soundToPlayOnFadeOut.play(loopNextSound);
};
};
break;
case STATE_FADING_IN:
transform.volume = (transform.volume + (fadeVolumePerSecond * _arg1));
if (transform.volume >= fadeInVolume){
transform.volume = fadeInVolume;
state = STATE_PLAYING;
};
_local2 = (channels[0] as SoundChannel);
if (_local2 != null){
_local2.soundTransform = transform;
};
break;
};
}
public function fadeOut(_arg1:Boolean=true, _arg2:FleshSound=null, _arg3:Boolean=true, _arg4:Number=1):void{
if (channels.length == 0){
return;
};
this.soundToPlayOnFadeOut = _arg2;
this.loopNextSound = _arg3;
this.stopOnFadeOut = _arg1;
fadeVolumePerSecond = (transform.volume / _arg4);
state = STATE_FADING_OUT;
}
public function getType():uint{
return (type);
}
public function getUrl():String{
return (urlString);
}
public function loadComplete(_arg1:Event):void{
sound.removeEventListener(Event.COMPLETE, loadComplete);
SoundManager.notifySoundLoaded(this);
}
}
}//package flesh
Section 16
//FloatingText (flesh.FloatingText)
package flesh {
import flash.display.*;
public class FloatingText {
public var scaleAmount:Number;
public var sprite:Sprite;
public var parent:DisplayObjectContainer;
public var fadeSpeed:Number;
public var preFadeTime:Number;
public var dy:Number;
public function FloatingText(_arg1:DisplayObjectContainer, _arg2:Class, _arg3:String, _arg4:Number, _arg5:Number, _arg6:Number=-50, _arg7:Number=0.5, _arg8:Number=3, _arg9:Number=0, _arg10:int=0xFFFFFF){
this.parent = _arg1;
this.sprite = new (_arg2);
this.sprite["text"].text = _arg3;
this.sprite.x = _arg4;
this.sprite.y = _arg5;
this.sprite.cacheAsBitmap = true;
this.dy = _arg6;
this.scaleAmount = _arg9;
this.fadeSpeed = (1 / _arg8);
this.preFadeTime = _arg7;
if (_arg10 != 0xFFFFFF){
sprite["text"].textColor = _arg10;
};
_arg1.addChild(sprite);
}
public function update(_arg1:Number):void{
sprite.y = (sprite.y + (dy * _arg1));
sprite.scaleX = (sprite.scaleX + (scaleAmount * _arg1));
sprite.scaleY = sprite.scaleX;
if (preFadeTime > 0){
preFadeTime = (preFadeTime - _arg1);
} else {
sprite.alpha = (sprite.alpha - (fadeSpeed * _arg1));
if (sprite.alpha <= 0){
remove();
};
};
}
public function remove():void{
Utils.removeChild(sprite, parent);
Utils.removeFloatingText(this);
}
}
}//package flesh
Section 17
//FPSCounter (flesh.FPSCounter)
package flesh {
import flash.display.*;
import flash.text.*;
import flash.system.*;
public class FPSCounter extends Sprite {
private var memGraphics:Graphics;
private var total:Number;
private var time:Array;
private var fpsGraphSprite:Sprite;
private var versionTextField:TextField;
private var maxMem:int;
private var maxMemInMeg:int;
private var fpsGraphics:Graphics;
private var memGraphSprite:Sprite;
private var lastMem:int;
private var ready:Boolean;
private var fpsTextField:TextField;
private var maxFPS:Number;
private var minFPS:Number;
private var memTextField:TextField;
private var pointer:Number;
public static var BUFFER_SIZE:int = 60;
public static var GRAPH_HEIGHT:int = 20;
public function FPSCounter(_arg1:Number=20, _arg2:Number=10, _arg3:int=0xFFFFFF, _arg4:String=""){
fpsTextField = new TextField();
this.addChild(fpsTextField);
memTextField = new TextField();
this.addChild(memTextField);
memTextField.y = (GRAPH_HEIGHT + 2);
versionTextField = new TextField();
versionTextField.text = _arg4;
this.addChild(versionTextField);
versionTextField.y = 60;
versionTextField = new TextField();
this.addChild(versionTextField);
versionTextField.y = 60;
versionTextField.text = _arg4;
time = new Array(BUFFER_SIZE);
total = 0;
pointer = 0;
var _local5:Number = BUFFER_SIZE;
while (--_local5 >= 0) {
time[_local5] = 0;
};
maxMem = 0;
ready = false;
minFPS = 100000;
maxFPS = 0;
this.x = _arg1;
this.y = _arg2;
fpsTextField.textColor = (memTextField.textColor = _arg3);
fpsTextField.selectable = (memTextField.selectable = false);
fpsGraphSprite = new Sprite();
fpsGraphics = fpsGraphSprite.graphics;
this.addChild(fpsGraphSprite);
clearFpsGraph();
memGraphSprite = new Sprite();
memGraphics = memGraphSprite.graphics;
this.addChild(memGraphSprite);
memGraphSprite.y = (GRAPH_HEIGHT + 2);
clearMemGraph();
fpsGraphSprite.x = (fpsGraphSprite.x - BUFFER_SIZE);
memGraphSprite.x = (memGraphSprite.x - BUFFER_SIZE);
}
public function getFPS():Number{
if (!ready){
return (0);
};
var _local1:Number = (total / BUFFER_SIZE);
var _local2:Number = Math.round((1 / _local1));
return (_local2);
}
public function paintMemBar():void{
memGraphics.lineStyle(1, 0xFFFF);
memGraphics.moveTo(pointer, GRAPH_HEIGHT);
var _local1:int = System.totalMemory;
if (_local1 > maxMem){
maxMem = _local1;
maxMemInMeg = ((_local1 / (0x0400 * 0x0400)) + 4);
};
var _local2:int = ((GRAPH_HEIGHT * _local1) / ((0x0400 * 0x0400) * maxMemInMeg));
if (_local2 > GRAPH_HEIGHT){
_local2 = GRAPH_HEIGHT;
};
if ((lastMem - _local1) > (0x0400 * 0x0400)){
memGraphics.lineStyle(1, 0xFF0000);
};
lastMem = _local1;
memGraphics.lineTo(pointer, (GRAPH_HEIGHT - _local2));
memGraphics.lineStyle(1, 0);
memGraphics.lineTo(pointer, 0);
}
public function addTime(_arg1:Number):void{
total = (total - time[pointer]);
total = (total + _arg1);
var _local2 = pointer++;
time[_local2] = _arg1;
if (pointer >= BUFFER_SIZE){
clearFpsGraph();
clearMemGraph();
pointer = 0;
ready = true;
};
if (ready){
setMemText(memTextField);
setFPSText(fpsTextField);
paintFPSBar();
paintMemBar();
};
}
public function clearFpsGraph():void{
fpsGraphics.clear();
fpsGraphics.beginFill(0);
fpsGraphics.drawRect(0, 0, BUFFER_SIZE, GRAPH_HEIGHT);
fpsGraphics.endFill();
}
private function setMemText(_arg1:TextField):void{
if (!ready){
return;
};
_arg1.text = (int((lastMem / (0x0400 * 0x0400))) + "mb");
}
public function clearMemGraph():void{
memGraphics.clear();
memGraphics.beginFill(0);
memGraphics.drawRect(0, 0, BUFFER_SIZE, GRAPH_HEIGHT);
memGraphics.endFill();
}
public function paintFPSBar():void{
fpsGraphics.lineStyle(1, 0xFF00);
fpsGraphics.moveTo(pointer, GRAPH_HEIGHT);
var _local1:Number = time[pointer];
var _local2:Number = (total / BUFFER_SIZE);
var _local3:Number = (_local1 - _local2);
var _local4:int = ((GRAPH_HEIGHT * _local1) * 10);
if (_local4 > GRAPH_HEIGHT){
_local4 = GRAPH_HEIGHT;
};
if (_local3 > 0.02){
fpsGraphics.lineStyle(1, 0xFF0000);
};
fpsGraphics.lineTo(pointer, (GRAPH_HEIGHT - _local4));
fpsGraphics.lineStyle(1, 0);
}
private function setFPSText(_arg1:TextField):void{
if (!ready){
return;
};
var _local2:Number = getFPS();
if (_local2 < minFPS){
minFPS = _local2;
};
if (_local2 > maxFPS){
maxFPS = _local2;
};
_arg1.text = (_local2 + "fps");
}
}
}//package flesh
Section 18
//ImageLoader (flesh.ImageLoader)
package flesh {
import flash.events.*;
import flash.display.*;
import flash.net.*;
public class ImageLoader {
private var failFunction:Function;
private var returnFunction:Function;
private var imageLoader:Loader;
private var url:String;
public function ImageLoader(){
imageLoader = new Loader();
}
public function loadUrlSuccess(_arg1:Event):void{
var loaderInfo:LoaderInfo;
var object:Object;
var e = _arg1;
try {
loaderInfo = (e.target as LoaderInfo);
object = loaderInfo.loader.content;
returnFunction(object, url);
} catch(e:Error) {
trace("loadUrlSuccess Error");
};
}
public function loadUrlFail(_arg1:IOErrorEvent):void{
trace(("problem loading: " + _arg1.text));
}
public function loadSprite(_arg1:String, _arg2:Function, _arg3:Function=null):void{
this.returnFunction = _arg2;
this.failFunction = _arg3;
var _local4:int = _arg1.lastIndexOf("/");
if (_local4 == -1){
_local4 = 0;
} else {
_local4++;
};
this.url = _arg1.substring(_local4, _arg1.length);
var _local5:URLRequest = new URLRequest(_arg1);
imageLoader.contentLoaderInfo.addEventListener(Event.INIT, loadUrlSuccess);
if (_arg3 == null){
_arg3 = loadUrlFail;
};
imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadUrlFail);
imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.DISK_ERROR, _arg3);
imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.NETWORK_ERROR, _arg3);
imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.VERIFY_ERROR, _arg3);
imageLoader.load(_local5);
}
}
}//package flesh
Section 19
//KeyCodes (flesh.KeyCodes)
package flesh {
public class KeyCodes {
public static const NUM_0:uint = 48;
public static const NUM_2:uint = 50;
public static const NUM_4:uint = 52;
public static const NUM_6:uint = 54;
public static const NUM_1:uint = 49;
public static const NUM_3:uint = 51;
public static const NUM_5:uint = 53;
public static const NUM_7:uint = 55;
public static const NUM_9:uint = 57;
public static const A:uint = 65;
public static const B:uint = 66;
public static const C:uint = 67;
public static const D:uint = 68;
public static const E:uint = 69;
public static const F:uint = 70;
public static const G:uint = 71;
public static const H:uint = 72;
public static const I:uint = 73;
public static const J:uint = 74;
public static const K:uint = 75;
public static const L:uint = 76;
public static const M:uint = 77;
public static const N:uint = 78;
public static const O:uint = 79;
public static const P:uint = 80;
public static const Q:uint = 81;
public static const R:uint = 82;
public static const S:uint = 83;
public static const T:uint = 84;
public static const U:uint = 85;
public static const V:uint = 86;
public static const W:uint = 87;
public static const X:uint = 88;
public static const Y:uint = 89;
public static const Z:uint = 90;
public static const NUM_8:uint = 56;
}
}//package flesh
Section 20
//KeyPoll (flesh.KeyPoll)
package flesh {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class KeyPoll {
private var states:ByteArray;
private var dispObj:DisplayObject;
public function KeyPoll(_arg1:DisplayObject){
states = new ByteArray();
states.writeUnsignedInt(0);
states.writeUnsignedInt(0);
states.writeUnsignedInt(0);
states.writeUnsignedInt(0);
states.writeUnsignedInt(0);
states.writeUnsignedInt(0);
states.writeUnsignedInt(0);
states.writeUnsignedInt(0);
dispObj = _arg1;
dispObj.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true);
dispObj.addEventListener(KeyboardEvent.KEY_UP, keyUpListener, false, 0, true);
dispObj.addEventListener(Event.ACTIVATE, activateListener, false, 0, true);
dispObj.addEventListener(Event.DEACTIVATE, deactivateListener, false, 0, true);
}
private function activateListener(_arg1:Event):void{
var _local2:int;
while (_local2 < 8) {
states[_local2] = 0;
_local2++;
};
}
private function deactivateListener(_arg1:Event):void{
var _local2:int;
while (_local2 < 8) {
states[_local2] = 0;
_local2++;
};
}
public function isDown(_arg1:uint):Boolean{
return (!(((states[(_arg1 >>> 3)] & (1 << (_arg1 & 7))) == 0)));
}
private function keyDownListener(_arg1:KeyboardEvent):void{
states[(_arg1.keyCode >>> 3)] = (states[(_arg1.keyCode >>> 3)] | (1 << (_arg1.keyCode & 7)));
}
public function isUp(_arg1:uint):Boolean{
return (((states[(_arg1 >>> 3)] & (1 << (_arg1 & 7))) == 0));
}
private function keyUpListener(_arg1:KeyboardEvent):void{
states[(_arg1.keyCode >>> 3)] = (states[(_arg1.keyCode >>> 3)] & ~((1 << (_arg1.keyCode & 7))));
}
}
}//package flesh
Section 21
//ManagedPool (flesh.ManagedPool)
package flesh {
public class ManagedPool {
public var activePool:Array;
public var max:uint;
public var maxActiveObjectCount:uint;
public var inactivePool:Array;
private var id:String;
public function ManagedPool(_arg1:String, _arg2:PoolObject, _arg3:Number){
this.id = _arg1;
this.max = _arg3;
activePool = new Array(0);
inactivePool = new Array(_arg3);
var _local4:uint = _arg3;
while (--_local4 >= 0) {
inactivePool[_local4] = _arg2.createInstance(_local4);
inactivePool[_local4].active = false;
};
maxActiveObjectCount = 0;
}
public function paintAll(_arg1:Object):void{
var _local2:uint = activePool.length;
while (--_local2 >= 0) {
activePool[_local2].paint(_arg1);
};
}
public function getActiveObject(_arg1:uint):PoolObject{
return (activePool[_arg1]);
}
public function deactivateAll():void{
var _local2:PoolObject;
while (activePool.length > 0) {
_local2 = activePool.shift();
_local2.deactivate();
inactivePool.push(_local2);
};
var _local1:uint;
while (_local1 < inactivePool.length) {
_local2 = inactivePool[_local1];
_local2.index = _local1;
_local2.active = false;
_local1++;
};
}
private function getObjectAt(_arg1:uint):PoolObject{
var _local2:uint = activePool.length;
while (--_local2 >= 0) {
if (activePool[_local2].index == _arg1){
return (activePool[_local2]);
};
};
_local2 = inactivePool.length;
while (--_local2 >= 0) {
if (inactivePool[_local2].index == _arg1){
return (inactivePool[_local2]);
};
};
return (null);
}
public function setAllInactive():void{
deactivateAll();
}
public function getActiveObjectCount():uint{
return (activePool.length);
}
public function requestObject():PoolObject{
var _local1:uint;
var _local2:PoolObject;
if (inactivePool.length > 0){
_local1 = 0;
while (_local1 < inactivePool.length) {
_local2 = inactivePool[_local1];
if (!_local2.active){
inactivePool.splice(_local1, 1);
activePool.push(_local2);
if (activePool.length > maxActiveObjectCount){
maxActiveObjectCount = activePool.length;
};
_local2.active = true;
_local2.index = (activePool.length - 1);
return (_local2);
};
_local1++;
};
};
trace((("ManagedPool " + id) + " doesn't have enough objects"));
return (null);
}
public function updateAll(_arg1:Number):void{
var _local2:uint = activePool.length;
while (--_local2 >= 0) {
activePool[_local2].update(_arg1);
};
}
public function getMaxActiveObjectCount():int{
return (maxActiveObjectCount);
}
public function getRandomActiveObject():PoolObject{
var _local1:uint;
while (true) {
_local1 = Math.floor((Math.random() * activePool.length));
if (activePool[_local1].active){
return (activePool[_local1]);
};
};
return (null);
}
public function notifyDeactivated(_arg1:PoolObject):void{
_arg1.active = false;
var _local2:int = activePool.indexOf(_arg1);
if (_local2 != -1){
activePool.splice(_local2, 1);
};
var _local3:int = inactivePool.indexOf(_arg1);
if (_local3 == -1){
inactivePool.push(_arg1);
};
}
}
}//package flesh
Section 22
//ParallaxScrollingLayer (flesh.ParallaxScrollingLayer)
package flesh {
import flash.display.*;
public class ParallaxScrollingLayer extends Sprite {
public var bgWidth:Number;
public var closestBg:DisplayObject;
public var flipListener:Object;
public var bg1:DisplayObject;
public var bg2:DisplayObject;
public var index:int;
public var furthestBg:DisplayObject;
public var shakeDecay:Number;
public var scrollSpeed:Number;
public var baseY:Number;
public var shakeAmount:Number;
public function ParallaxScrollingLayer(_arg1:int, _arg2:DisplayObject, _arg3:Number, _arg4:Number){
this.index = _arg1;
this.scrollSpeed = _arg3;
this.bgWidth = _arg2.width;
this.y = (this.baseY = _arg4);
closestBg = (bg1 = _arg2);
this.addChild(bg1);
bg1.x = 0;
bg1.cacheAsBitmap = true;
bg2 = null;
if (_arg3 != 0){
bg2 = Utils.duplicateDisplayObject(bg1);
this.addChild(bg2);
bg2.x = bgWidth;
furthestBg = bg2;
bg2.cacheAsBitmap = true;
};
flipListener = null;
shakeAmount = 0;
}
public function registerFlipListener(_arg1:Object):void{
flipListener = _arg1;
}
public function shake(_arg1:Number, _arg2:Number):void{
shakeAmount = _arg1;
shakeDecay = _arg2;
}
public function update(_arg1:Number):void{
if (shakeAmount > 0){
this.x = ((Math.random() * shakeAmount) - (shakeAmount * 0.5));
this.y = ((baseY + (Math.random() * shakeAmount)) - (shakeAmount * 0.5));
shakeAmount = (shakeAmount - (_arg1 * shakeDecay));
if (shakeAmount < 0){
this.x = 0;
this.y = baseY;
};
};
if (bg2 == null){
return;
};
var _local2:Number = (closestBg.x + bgWidth);
if (_local2 <= 0){
if (closestBg == bg1){
bg1.x = (bg2.x + bgWidth);
closestBg = bg2;
furthestBg = bg1;
} else {
if (closestBg == bg2){
bg2.x = (bg1.x + bgWidth);
closestBg = bg1;
furthestBg = bg2;
};
};
if (flipListener != null){
flipListener.notifyFlipped(index);
};
};
var _local3:Number = (scrollSpeed * _arg1);
closestBg.x = (closestBg.x - _local3);
furthestBg.x = ((closestBg.x + bgWidth) - 3);
}
public function setBothBgVisible(_arg1:Boolean):void{
bg1.visible = (bg2.visible = _arg1);
}
public function setLeftBgVisible(_arg1:Boolean):void{
var _local2:DisplayObject = ((bg1.x > bg2.x)) ? bg2 : bg1;
_local2.visible = _arg1;
}
public function setRightBgVisible(_arg1:Boolean):void{
var _local2:DisplayObject = ((bg1.x < bg2.x)) ? bg2 : bg1;
_local2.visible = _arg1;
}
public function setScrollSpeed(_arg1:Number):void{
this.scrollSpeed = _arg1;
}
}
}//package flesh
Section 23
//ParallaxScrollingSprite (flesh.ParallaxScrollingSprite)
package flesh {
import flash.display.*;
public class ParallaxScrollingSprite extends Sprite {
public var layers:Array;
public function ParallaxScrollingSprite(_arg1:Array){
var _local3:DisplayObject;
var _local4:Number;
var _local5:Number;
var _local6:ParallaxScrollingLayer;
super();
layers = new Array();
var _local2:int;
while (_local2 < _arg1.length) {
_local3 = _arg1[_local2];
_local4 = _arg1[(_local2 + 1)];
_local5 = _arg1[(_local2 + 2)];
_local6 = new ParallaxScrollingLayer((_local2 / 3), _local3, _local5, _local4);
this.addChild(_local6);
layers.push(_local6);
_local2 = (_local2 + 3);
};
}
public function setLayerVisible(_arg1:int, _arg2:Boolean):void{
layers[_arg1].visible = _arg2;
}
public function getOffset(_arg1:int):Number{
return (layers[_arg1].closestBg.x);
}
public function setBothBgVisible(_arg1:int, _arg2:Boolean):void{
layers[_arg1].setBothBgVisible(_arg2);
}
public function setLeftBgVisible(_arg1:int, _arg2:Boolean):void{
layers[_arg1].setLeftBgVisible(_arg2);
}
public function getLayerAt(_arg1:int):ParallaxScrollingLayer{
return (layers[_arg1]);
}
public function setLayerAlpha(_arg1:int, _arg2:Number):void{
layers[_arg1].alpha = _arg2;
}
public function update(_arg1:Number):void{
var _local2:ParallaxScrollingLayer;
for each (_local2 in layers) {
_local2.update(_arg1);
};
}
public function shakeLayer(_arg1:int, _arg2:Number=20, _arg3:Number=10):void{
layers[_arg1].shake(_arg2, _arg3);
}
public function setScrollSpeed(_arg1:int, _arg2:Number):void{
layers[_arg1].setScrollSpeed(_arg2);
}
public function setRightBgVisible(_arg1:int, _arg2:Boolean):void{
layers[_arg1].setRightBgVisible(_arg2);
}
public function registerFlipListener(_arg1:int, _arg2:Object):void{
layers[_arg1].registerFlipListener(_arg2);
}
}
}//package flesh
Section 24
//PoolObject (flesh.PoolObject)
package flesh {
public class PoolObject {
public var index:uint;
public var active:Boolean;
public function PoolObject(_arg1:uint){
this.index = _arg1;
active = false;
}
public function createInstance(_arg1:uint):PoolObject{
return (undefined);
}
public function getIndex():uint{
return (index);
}
public function update(_arg1:Number):void{
}
public function deactivate():void{
active = false;
}
public function paint(_arg1:Object):void{
}
}
}//package flesh
Section 25
//Portals (flesh.Portals)
package flesh {
public class Portals {
public static const SPIL:uint = 2;
public static const GIMME5:uint = 1;
public static const ARMOR:uint = 4;
public static const NONE:int = 0;
public static const MINICLIP:uint = 3;
}
}//package flesh
Section 26
//Preloader (flesh.Preloader)
package flesh {
import flash.events.*;
import flash.display.*;
import alcon.*;
import flash.utils.*;
public class Preloader extends MovieClip {
private var logoClassInstance:Object;
private var logoX:int;
private var logoY:int;
private var waitUntilEndOfLogoAnimation:Boolean;
private var logoClass:Class;
private var logoClipClass:Class;
public function Preloader(_arg1:Class, _arg2:Boolean){
Debug.trace("Preloader::ctor");
this.logoClipClass = _arg1;
this.waitUntilEndOfLogoAnimation = _arg2;
stop();
stage.showDefaultContextMenu = false;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.quality = StageQuality.HIGH;
addEventListener(Event.ENTER_FRAME, mainloop);
}
private function triggerLogo():void{
Debug.trace("Preloader::triggerLogo");
logoClass = (getDefinitionByName("PreloaderLogo") as Class);
if (logoClass){
logoClassInstance = new logoClass(logoClipClass, waitUntilEndOfLogoAnimation);
addChild((logoClassInstance as DisplayObject));
};
}
private function triggerGame():void{
var _local2:Object;
Debug.trace("Preloader::triggerGame");
var _local1:Class = (getDefinitionByName("App") as Class);
if (_local1){
_local2 = new (_local1);
addChild((_local2 as DisplayObject));
_local2.initGame();
logoClassInstance.dispose();
};
}
private function mainloop(_arg1:Event):void{
Debug.trace(("Preloader::mainLoop framesLoaded = " + framesLoaded));
if (framesLoaded >= 2){
nextFrame();
triggerLogo();
removeEventListener(Event.ENTER_FRAME, mainloop);
addEventListener(Event.ENTER_FRAME, mainloop2);
};
}
private function mainloop2(_arg1:Event):void{
if (framesLoaded == totalFrames){
if (logoClassInstance.animCompletedFlag == true){
removeEventListener(Event.ENTER_FRAME, mainloop2);
nextFrame();
triggerGame();
};
};
}
}
}//package flesh
Section 27
//Screen (flesh.Screen)
package flesh {
import flash.events.*;
import flash.display.*;
import flash.text.*;
import flash.utils.*;
public class Screen extends Sprite {
public var buttons:Array;// = null
public var scaleMouseButton:Boolean;
private var id:String;
public var extraToolTips:Dictionary;
public var screenManager:ScreenManager;
public var toolTipText:TextField;
public var toolTipsEnabled:Boolean;
public var mouseButton:DisplayObject;
public var toolTipFormat:TextFormat;
public var buttonToolTips:Array;
private var buttonsScale:Array;
public var extraToolTipObject:DisplayObject;
public var autoBlankTooltip:Boolean;
public var scaleMouseButtonSpecific:Dictionary;
public function Screen(_arg1:String){
this.id = _arg1;
this.toolTipsEnabled = false;
scaleMouseButton = true;
extraToolTips = new Dictionary();
scaleMouseButtonSpecific = new Dictionary();
autoBlankTooltip = true;
}
public function addExtraToolTip(_arg1:DisplayObject, _arg2:String):void{
extraToolTips[_arg1.name] = _arg2;
_arg1.addEventListener(MouseEvent.MOUSE_OVER, mouseOverExtraToolTipObject);
_arg1.addEventListener(MouseEvent.MOUSE_OUT, mouseOutExtraToolTipObject);
}
public function linkButtonsByName(_arg1:Array):void{
var name:String;
var sprite:Sprite;
var array:Array;
var i:uint;
var buttonNamesArray = _arg1;
buttons = new Array();
buttonsScale = new Array();
for each (name in buttonNamesArray) {
try {
if (name.indexOf(".") != -1){
array = name.split(".");
sprite = (this.getChildByName(array[0]) as Sprite);
i = 1;
while (i < array.length) {
sprite = (sprite.getChildByName(array[i]) as Sprite);
i = (i + 1);
};
} else {
sprite = (this.getChildByName(name) as Sprite);
};
} catch(err:Error) {
};
linkButton(sprite, name);
};
}
public function firePressed():void{
}
public function setScaleMouseButton(_arg1:Boolean):void{
scaleMouseButton = _arg1;
}
public function buttonClickedId(_arg1:String):void{
}
public function getId():String{
return (id);
}
public function buttonClicked(_arg1:uint):void{
}
private function scaleButton(_arg1:DisplayObject, _arg2:Number):void{
var _local3:int = buttons.indexOf(_arg1);
if (_local3 == -1){
return;
};
var _local4:Number = buttonsScale[_local3];
var _local5:Number = ((_arg2 * _local4) - _arg1.scaleX);
_arg1.scaleX = (_arg1.scaleX + (_local5 * 0.5));
_arg1.scaleY = _arg1.scaleX;
}
public function notifyScreenEntered():void{
}
public function linkButtons(_arg1:Array):void{
var _local2:String;
var _local3:Sprite;
var _local4:Array;
var _local5:uint;
buttons = new Array();
buttonsScale = new Array();
for each (_local2 in _arg1) {
if (_local2.indexOf(".") != -1){
_local4 = _local2.split(".");
_local3 = this[_local4[0]];
if (_local3 != null){
_local5 = 1;
while (_local5 < _local4.length) {
if (_local3[_local4[_local5]] != null){
_local3 = _local3[_local4[_local5]];
};
_local5++;
};
};
} else {
_local3 = this[_local2];
};
linkButton(_local3, _local2);
};
}
public function keyDown(_arg1:KeyboardEvent):void{
}
public function mouseOutExtraToolTipObject(_arg1:Event):void{
extraToolTipObject = null;
}
public function mouseOverButton(_arg1:MouseEvent):void{
var _local2:String;
var _local3:int;
mouseButton = (_arg1.target as Sprite);
if (mouseButton == null){
return;
};
while (true) {
if (buttons.indexOf(mouseButton) != -1){
break;
};
mouseButton = mouseButton.parent;
if (mouseButton == null){
break;
};
};
if (toolTipsEnabled){
_local2 = null;
_local3 = buttons.indexOf(mouseButton);
if (buttonToolTips.length > _local3){
_local2 = buttonToolTips[_local3];
};
if (_local2 != null){
toolTipText.text = _local2;
};
};
}
public function notifyLoaded():void{
}
public function resetTooltip():void{
if (toolTipText != null){
toolTipText.text = "";
};
}
public function updateMouseButton(_arg1:Number):void{
var _local2:Sprite;
if (toolTipsEnabled){
if (root.mouseX > 400){
toolTipText.x = ((root.mouseX - toolTipText.textWidth) - 10);
} else {
toolTipText.x = (root.mouseX + 10);
};
toolTipText.y = (root.mouseY - (toolTipText.textHeight * 0.5));
if ((((((mouseButton == null)) && ((extraToolTipObject == null)))) && (autoBlankTooltip))){
toolTipText.text = "";
};
};
if (scaleMouseButton){
if (mouseButton != null){
if ((((scaleMouseButtonSpecific[mouseButton.name] == undefined)) || ((scaleMouseButtonSpecific[mouseButton.name] == true)))){
scaleButton(mouseButton, 1.1);
};
};
for each (_local2 in buttons) {
if (_local2 != mouseButton){
scaleButton(_local2, 1);
};
};
};
}
public function mouseOverExtraToolTipObject(_arg1:Event):void{
extraToolTipObject = (_arg1.target as DisplayObject);
toolTipText.text = extraToolTips[extraToolTipObject.name];
}
public function linkButton(_arg1:Sprite, _arg2:String=null):void{
if (buttons == null){
buttons = new Array();
buttonsScale = new Array();
};
if (_arg1 == null){
trace((((" ** Error: Couldn't find button " + _arg2) + " in screen ") + id));
return;
};
_arg1.buttonMode = true;
_arg1.tabEnabled = false;
_arg1.addEventListener(MouseEvent.MOUSE_OVER, mouseOverButton);
_arg1.addEventListener(MouseEvent.MOUSE_OUT, mouseOutButton);
buttons.push(_arg1);
buttonsScale.push(_arg1.scaleX);
_arg1.addEventListener(MouseEvent.CLICK, mouseClick);
}
public function update(_arg1:Number):void{
}
public function mouseClick(_arg1:MouseEvent):void{
if (screenManager.isTransitioning()){
return;
};
mouseButton = (_arg1.target as Sprite);
if (mouseButton == null){
return;
};
while (true) {
if (buttons.indexOf(mouseButton) != -1){
break;
};
mouseButton = mouseButton.parent;
if (mouseButton == null){
break;
};
};
var _local2:int = buttons.indexOf(mouseButton);
screenManager.notifyButtonPressed();
buttonClicked(_local2);
buttonClickedId(mouseButton.name);
}
public function setManager(_arg1:ScreenManager):void{
this.screenManager = _arg1;
}
public function setupTooltips(_arg1:TextField, _arg2:Array):void{
this.toolTipsEnabled = true;
this.toolTipText = _arg1;
this.buttonToolTips = _arg2;
this.toolTipText.mouseEnabled = false;
toolTipFormat = new TextFormat();
_arg1.defaultTextFormat = toolTipFormat;
}
public function setAllButtonsVisible(_arg1:Boolean):void{
var _local2:Sprite;
for each (_local2 in buttons) {
_local2.visible = _arg1;
};
}
public function mouseOutButton(_arg1:MouseEvent):void{
mouseButton = null;
}
public function setScaleSpecificMouseButton(_arg1:String, _arg2:Boolean):void{
scaleMouseButtonSpecific[_arg1] = _arg2;
}
}
}//package flesh
Section 28
//ScreenManager (flesh.ScreenManager)
package flesh {
import flash.events.*;
import flash.display.*;
public class ScreenManager extends Sprite {
private var currentScreen:Screen;
private var screenArray:Array;
private var scaleButtons:Boolean;
private var transitionManager:ScreenTransitionManager;
private var buttonClickSoundId:String;
private var playSound:Function;
public function ScreenManager(){
screenArray = new Array();
transitionManager = new ScreenTransitionManager(this);
currentScreen = null;
scaleButtons = true;
buttonClickSoundId = null;
}
public function notifyButtonPressed():void{
if (buttonClickSoundId != null){
playSound(buttonClickSoundId);
};
}
public function hideAllScreens():void{
var _local1:Screen;
for each (_local1 in screenArray) {
if (this.contains(_local1)){
this.removeChild(_local1);
};
};
currentScreen = null;
transitionManager.reset();
}
public function update(_arg1:Number):void{
if (transitionManager.isTransitioning()){
transitionManager.update(_arg1);
} else {
if (currentScreen != null){
currentScreen.update(_arg1);
if (scaleButtons){
currentScreen.updateMouseButton(_arg1);
};
};
};
}
public function setDefaultTransitionType(_arg1:uint):void{
transitionManager.setDefaultType(_arg1);
}
public function getCurrentScreen():Screen{
return (currentScreen);
}
public function removeScreen(_arg1:String):void{
var _local2:int;
while (_local2 < screenArray.length) {
if (screenArray[_local2].getId() == _arg1){
screenArray.splice(_local2, 1);
return;
};
_local2++;
};
}
public function getCurrentScreenId():String{
if (currentScreen == null){
return (null);
};
return (currentScreen.getId());
}
public function setScaleButtons(_arg1:Boolean):void{
this.scaleButtons = _arg1;
}
public function keyDown(_arg1:KeyboardEvent):void{
if (currentScreen != null){
currentScreen.keyDown(_arg1);
};
}
public function getScreen(_arg1:String):Screen{
var _local2:Screen;
for each (_local2 in screenArray) {
if (_local2.getId() == _arg1){
return (_local2);
};
};
return (undefined);
}
public function isTransitioning():Boolean{
return (transitionManager.isTransitioning());
}
public function addScreen(_arg1:Screen):void{
screenArray.push(_arg1);
_arg1.setManager(this);
_arg1.notifyLoaded();
}
public function setScreen(_arg1:String, _arg2:uint=1000):void{
var _local3:Screen = getScreen(_arg1);
if (_local3 == null){
trace(("** ScreenManager cannot transition to unfound screen " + _arg1));
};
if (currentScreen != null){
transitionManager.transition(currentScreen, _local3, _arg2);
} else {
_local3.alpha = 1;
transitionManager.setScreenScaleAndCentre(_local3, 1);
_local3.x = (_local3.y = 0);
this.addChild(_local3);
};
currentScreen = _local3;
_local3.resetTooltip();
_local3.notifyScreenEntered();
}
public function setPlaySoundFunction(_arg1:Function):void{
playSound = _arg1;
}
public function setButtonClickSoundId(_arg1:String):void{
buttonClickSoundId = _arg1;
}
}
}//package flesh
Section 29
//ScreenTransitionManager (flesh.ScreenTransitionManager)
package flesh {
import flash.display.*;
public class ScreenTransitionManager {
private var xAngle:Number;
private var maskSprite:Sprite;
private var angle:Number;
private var yAngle:Number;
private var defaultType:uint;
private var screenManager:ScreenManager;
private var sourceScreen:Screen;
private var maskSizeX:Number;
private var maskSizeY:Number;
private var destScreen:Screen;
private var transitionType:uint;
private var angleSpeed:Number;
private var maskCheckScale:Number;
private var isTransitioningFlag:Boolean;
public static const TYPE_MASK_OUT:uint = 4;
public static const TYPE_ROTATE_OUT_TOP_LEFT:uint = 2;
private static const HALF_CHECK_SIZE:int = 32;
private static const CHECK_SIZE:int = 64;
public static const TYPE_ZOOM_OUT_FADE_SOURCE:uint = 1;
public static const TYPE_ROTATE_IN_TOP_LEFT:uint = 3;
public static const TYPE_ZOOM_IN_DEST:uint = 0;
public static const TYPE_NONE:uint = 999;
public static const DEFAULT_TYPE:uint = 1000;
public function ScreenTransitionManager(_arg1:ScreenManager){
this.screenManager = _arg1;
defaultType = TYPE_ZOOM_IN_DEST;
reset();
maskSprite = new Sprite();
}
public function putSourceScreenOnTop():void{
if (screenManager.getChildIndex(sourceScreen) < screenManager.getChildIndex(destScreen)){
screenManager.swapChildren(sourceScreen, destScreen);
};
}
public function update(_arg1:Number):void{
switch (transitionType){
case TYPE_MASK_OUT:
paintCheckerBoardOnMask(maskCheckScale);
maskCheckScale = (maskCheckScale - (_arg1 * 0.7));
if (maskCheckScale <= 0){
finishedTransition();
};
break;
case TYPE_ROTATE_OUT_TOP_LEFT:
angleSpeed = (angleSpeed + (_arg1 * 0.3));
angle = (angle - angleSpeed);
sourceScreen.rotation = ((angle * 360) / Utils.RAD360);
if (angle <= -(Utils.RAD90)){
finishedTransition();
};
break;
case TYPE_ROTATE_IN_TOP_LEFT:
angleSpeed = (angleSpeed + (_arg1 * 0.3));
angle = (angle + angleSpeed);
destScreen.rotation = ((angle * 360) / Utils.RAD360);
if (angle >= 0){
finishedTransition();
};
break;
case TYPE_ZOOM_OUT_FADE_SOURCE:
setScreenScaleAndCentre(sourceScreen, (sourceScreen.scaleX * (1 + (_arg1 * 5))));
sourceScreen.alpha = (sourceScreen.alpha - _arg1);
if (sourceScreen.alpha < 0){
finishedTransition();
};
break;
case TYPE_ZOOM_IN_DEST:
xAngle = (xAngle + (_arg1 * 3));
if (xAngle > Utils.RAD120){
xAngle = Utils.RAD120;
};
yAngle = (yAngle + (_arg1 * 2.5));
setScreenScaleAndCentre(destScreen, (Math.sin(xAngle) / Math.sin(Utils.RAD120)), (Math.sin(yAngle) / Math.sin(Utils.RAD120)));
if (yAngle >= Utils.RAD120){
destScreen.x = (destScreen.y = 0);
destScreen.scaleX = (destScreen.scaleY = 1);
finishedTransition();
};
break;
};
}
private function initTransition():void{
switch (transitionType){
case TYPE_MASK_OUT:
sourceScreen.mask = maskSprite;
maskSizeX = sourceScreen.width;
maskSizeY = sourceScreen.height;
maskCheckScale = 1;
paintCheckerBoardOnMask(maskCheckScale);
putSourceScreenOnTop();
break;
case TYPE_ZOOM_IN_DEST:
yAngle = 0;
xAngle = 0;
destScreen.scaleX = (destScreen.scaleY = 0);
putDestScreenOnTop();
break;
case TYPE_ZOOM_OUT_FADE_SOURCE:
putSourceScreenOnTop();
break;
case TYPE_ROTATE_OUT_TOP_LEFT:
angle = (angleSpeed = 0);
putSourceScreenOnTop();
break;
case TYPE_ROTATE_IN_TOP_LEFT:
angle = -(Utils.RAD90);
angleSpeed = 0;
destScreen.rotation = -90;
putDestScreenOnTop();
break;
};
}
public function reset():void{
isTransitioningFlag = false;
}
public function transition(_arg1:Screen, _arg2:Screen, _arg3:uint):void{
if (_arg3 == DEFAULT_TYPE){
_arg3 = defaultType;
};
if (_arg3 == TYPE_NONE){
if (screenManager.contains(_arg1)){
screenManager.removeChild(_arg1);
};
if (!screenManager.contains(_arg2)){
screenManager.addChild(_arg2);
};
isTransitioningFlag = false;
return;
};
this.sourceScreen = _arg1;
this.destScreen = _arg2;
this.transitionType = _arg3;
if (!screenManager.contains(_arg1)){
screenManager.addChild(_arg1);
};
if (!screenManager.contains(_arg2)){
screenManager.addChild(_arg2);
};
initTransition();
isTransitioningFlag = true;
}
public function setDefaultType(_arg1:uint):void{
this.defaultType = _arg1;
}
public function putDestScreenOnTop():void{
if (screenManager.getChildIndex(sourceScreen) > screenManager.getChildIndex(destScreen)){
screenManager.swapChildren(sourceScreen, destScreen);
};
}
public function isTransitioning():Boolean{
return (isTransitioningFlag);
}
private function paintCheckerBoardOnMask(_arg1:Number):void{
var _local4:int;
var _local2:Graphics = maskSprite.graphics;
_local2.clear();
var _local3:int;
while (_local3 < maskSizeX) {
_local4 = 0;
while (_local4 < maskSizeY) {
_local2.beginFill(0xFFFFFF, 1);
_local2.drawCircle((_local3 + HALF_CHECK_SIZE), (_local4 + HALF_CHECK_SIZE), ((CHECK_SIZE * 0.75) * _arg1));
_local4 = (_local4 + CHECK_SIZE);
};
_local3 = (_local3 + CHECK_SIZE);
};
_local2 = destScreen.graphics;
_local2.drawRect(0, 0, maskSizeX, maskSizeY);
}
public function setScreenScaleAndCentre(_arg1:Screen, _arg2:Number, _arg3:Number=-1):void{
_arg1.scaleX = _arg2;
if (_arg3 != -1){
_arg1.scaleY = _arg3;
} else {
_arg1.scaleY = _arg2;
};
_arg1.x = ((640 - _arg1.width) * 0.5);
_arg1.y = ((480 - _arg1.height) * 0.5);
}
private function finishedTransition():void{
sourceScreen.mask = (destScreen.mask = null);
destScreen.rotation = (sourceScreen.rotation = 0);
sourceScreen.alpha = 1;
setScreenScaleAndCentre(sourceScreen, 1);
sourceScreen.x = (sourceScreen.y = 0);
screenManager.removeChild(sourceScreen);
isTransitioningFlag = false;
}
}
}//package flesh
Section 30
//SeededRandom (flesh.SeededRandom)
package flesh {
public class SeededRandom {
protected var _currentSeed:uint;// = 0
protected var _seed:uint;// = 0
protected static var _instance:SeededRandom;
public function SeededRandom(_arg1:uint=1){
_seed = (_currentSeed = _arg1);
}
public function set seed(_arg1:uint):void{
_seed = (_currentSeed = _arg1);
}
public function random():Number{
return ((((_currentSeed = ((_currentSeed * 16807) % 2147483647)) / 2147483647) + 2.33E-10));
}
public function boolean(_arg1:Number=0.5):Boolean{
return ((random() < _arg1));
}
public function get currentSeed():uint{
return (_currentSeed);
}
public function bit(_arg1:Number=0.5):int{
return (((random())<_arg1) ? 1 : 0);
}
public function reset():void{
_seed = _currentSeed;
}
public function get seed():uint{
return (_seed);
}
public function float(_arg1:Number, _arg2:Number=NaN):Number{
if (isNaN(_arg2)){
_arg2 = _arg1;
_arg1 = 0;
};
return (((random() * (_arg2 - _arg1)) + _arg1));
}
public function sign(_arg1:Number=0.5):int{
return (((random())<_arg1) ? 1 : -1);
}
public function integer(_arg1:Number, _arg2:Number=NaN):int{
if (isNaN(_arg2)){
_arg2 = _arg1;
_arg1 = 0;
};
return (Math.floor(float(_arg1, _arg2)));
}
public static function random():Number{
return (instance.random());
}
public static function set seed(_arg1:uint):void{
instance.seed = _arg1;
}
public static function get currentSeed():uint{
return (instance.currentSeed);
}
public static function bit(_arg1:Number=0.5):int{
return (instance.bit(_arg1));
}
public static function boolean(_arg1:Number=0.5):Boolean{
return (instance.boolean(_arg1));
}
public static function get seed():uint{
return (instance.seed);
}
public static function get instance():SeededRandom{
if (_instance == null){
_instance = new (SeededRandom);
};
return (_instance);
}
public static function reset():void{
instance.reset();
}
public static function float(_arg1:Number, _arg2:Number=NaN):Number{
return (instance.float(_arg1, _arg2));
}
public static function sign(_arg1:Number=0.5):int{
return (instance.sign(_arg1));
}
public static function integer(_arg1:Number, _arg2:Number=NaN):int{
return (instance.integer(_arg1, _arg2));
}
}
}//package flesh
Section 31
//SoundManager (flesh.SoundManager)
package flesh {
import flash.utils.*;
import flash.media.*;
public class SoundManager {
public static const CROSS_FADE_MUSIC_TIME:Number = 0.5;
public static const SOUND_DATA_PROPERTY_COUNT:uint = 4;
private static var soundCount:uint;
private static var sounds:Dictionary;
private static var instance:SoundManager;
private static var currentMusic:FleshSound;
private static var soundsArray:Array;
public static function getSoundsAsDictionary():Dictionary{
return (sounds);
}
public static function update(_arg1:Number):void{
var _local2:FleshSound;
for each (_local2 in sounds) {
_local2.update(_arg1);
};
}
public static function fadeInSound(_arg1:String):void{
var _local2:FleshSound = sounds[_arg1];
_local2.fadeIn();
}
public static function setNameAndFilters(_arg1:String, _arg2:String, _arg3:String):void{
var _local4:FleshSound = sounds[_arg1];
if (_local4 != null){
_local4.name = _arg2;
_local4.filters = _arg3;
} else {
trace(("couldn't find sound " + _arg1));
};
}
public static function getSound(_arg1:String):FleshSound{
if (sounds == null){
return (null);
};
return (sounds[_arg1]);
}
public static function stopAllSounds():void{
var _local1:FleshSound;
for each (_local1 in sounds) {
_local1.stop();
};
currentMusic = null;
}
public static function notifySoundLoaded(_arg1:FleshSound):void{
trace(("loaded " + _arg1.getUrl()));
}
public static function stopSound(_arg1:String):void{
var _local2:FleshSound = sounds[_arg1];
if (_local2 == currentMusic){
currentMusic = null;
};
_local2.stop();
}
public static function initStart(_arg1:Array):void{
sounds = new Dictionary();
soundsArray = new Array();
soundCount = 0;
currentMusic = null;
}
public static function getSoundsAsArray():Array{
return (soundsArray);
}
public static function embedSound(_arg1:Array, _arg2:Sound):void{
var _local3:uint = soundCount;
var _local4:uint = (_local3 * SOUND_DATA_PROPERTY_COUNT);
var _local5:String = _arg1[_local4];
var _local6:uint = _arg1[(_local4 + 1)];
var _local7:uint = _arg1[(_local4 + 2)];
var _local8:Number = _arg1[(_local4 + 3)];
var _local9:FleshSound = new FleshSound(_local5, _arg2, _local6, _local7);
_local9.setDefaultVolume(_local8);
sounds[_local5] = _local9;
soundsArray.push(_local9);
soundCount++;
}
public static function playSound(_arg1:String, _arg2:Boolean=false, _arg3:Number=0, _arg4:Number=-1):SoundChannel{
var _local5:FleshSound = sounds[_arg1];
if (_local5 == null){
trace(("sound not found " + _arg1));
return (null);
};
if (_local5.getType() == FleshSound.MUSIC){
if (currentMusic == null){
trace("currentMusic is null");
} else {
if (currentMusic.id == _local5.id){
return (null);
};
};
};
if ((((_local5.getType() == FleshSound.MUSIC)) && (!((currentMusic == null))))){
currentMusic.fadeOut(false, null, false, CROSS_FADE_MUSIC_TIME);
currentMusic = _local5;
return (_local5.play(_arg2, _arg3, CROSS_FADE_MUSIC_TIME, _arg4));
};
if (_local5.getType() == FleshSound.MUSIC){
currentMusic = _local5;
};
return (_local5.play(_arg2, _arg3, 0, _arg4));
}
public static function fadeOutSound(_arg1:String):void{
var _local2:FleshSound = sounds[_arg1];
if (_local2 == currentMusic){
currentMusic = null;
};
_local2.fadeOut();
}
}
}//package flesh
Section 32
//Utils (flesh.Utils)
package flesh {
import flash.display.*;
import flash.utils.*;
import flash.media.*;
import flash.geom.*;
import alcon.*;
public class Utils {
public static const OPPOSITE_DIR:Array = new Array(DOWN, UP, RIGHT, LEFT);
public static const MOVE:Array = new Array(0, -1, 0, 1, -1, 0, 1, 0);
public static var LEFT:uint = 2;
private static var draggingSprites:Array = null;
public static var RAD30:Number = (Math.PI / 6);
public static var RAD360:Number = (Math.PI * 2);
public static var RAD120:Number = ((Math.PI / 2) + (Math.PI / 6));
private static var mixerByteArray:ByteArray = null;
public static var RAD45:Number = (Math.PI / 4);
public static var RAD135:Number = (RAD45 + RAD90);
private static var delayedFunctions:Array = null;
public static var ANTICLOCKWISE:uint = 0;
public static var RAD270:Number = (RAD180 + RAD90);
public static var RAD315:Number = (RAD270 + RAD45);
public static var CLOCKWISE:uint = 1;
public static var allFloatingText:Array = null;
public static var RAD280:Number = (RAD270 + RAD10);
public static var UP:uint = 0;
public static var DOWN:uint = 1;
public static var RAD80:Number = (RAD90 - RAD10);
public static var RAD90:Number = (Math.PI / 2);
public static var RAD10:Number = (Math.PI / 18);
public static var RAD15:Number = (Math.PI / 12);
public static var RAD180:Number = Math.PI;
public static var RAD5:Number = (Math.PI / 36);
public static var RAD225:Number = (RAD180 + RAD45);
public static var RIGHT:uint = 3;
public static function getIndexOfString(_arg1:String, _arg2:Array, _arg3:int):int{
if (_arg1 == null){
return (_arg3);
};
var _local4:int = _arg2.indexOf(_arg1);
if (_local4 == -1){
return (_arg3);
};
return (_local4);
}
public static function paintRectOnSprite(_arg1:Sprite, _arg2:Number=0, _arg3:Number=0, _arg4:Number=1000, _arg5:Number=1000, _arg6:int=0xFF0000, _arg7:Number=1, _arg8:Boolean=false, _arg9:Number=1):void{
var _local10:Graphics = _arg1.graphics;
if (_arg8){
_local10.lineStyle(_arg9, _arg6, _arg7);
} else {
_local10.beginFill(_arg6, _arg7);
};
_local10.drawRect(_arg2, _arg3, _arg4, _arg5);
if (!_arg8){
_local10.endFill();
};
}
public static function getAngleBetweenAngles(_arg1:Number, _arg2:Number):Number{
if ((((_arg1 > RAD270)) && ((_arg2 < RAD90)))){
return (((RAD360 - _arg1) + _arg2));
};
if ((((_arg2 > RAD270)) && ((_arg1 < RAD90)))){
return (((RAD360 - _arg2) + _arg1));
};
return (Math.abs((_arg1 - _arg2)));
}
public static function removeChild(_arg1:DisplayObject, _arg2:DisplayObjectContainer=null):void{
if (_arg1 == null){
return;
};
if (_arg2 == null){
_arg2 = _arg1.parent;
};
if (((((!((_arg1 == null))) && (!((_arg2 == null))))) && (_arg2.contains(_arg1)))){
_arg2.removeChild(_arg1);
};
}
public static function ccw(_arg1:Vector2D, _arg2:Vector2D, _arg3:Vector2D):int{
var _local4:Number = (_arg2.x - _arg1.x);
var _local5:Number = (_arg2.y - _arg1.y);
var _local6:Number = (_arg3.x - _arg1.x);
var _local7:Number = (_arg3.y - _arg1.y);
if ((_local4 * _local7) > (_local5 * _local6)){
return (1);
};
if ((_local4 * _local7) < (_local5 * _local6)){
return (-1);
};
if (((((_local4 * _local6) < 0)) || (((_local5 * _local7) < 0)))){
return (-1);
};
if (((_local4 * _local4) + (_local5 * _local5)) < ((_local6 * _local6) + (_local7 * _local7))){
return (1);
};
return (0);
}
public static function getAngle(_arg1:Number, _arg2:Number):Number{
var _local3:Number = (Math.atan2(_arg2, _arg1) + (Math.PI / 2));
if (_local3 < 0){
_local3 = (_local3 + (Math.PI * 2));
};
return (_local3);
}
public static function trim(_arg1:String):String{
if (_arg1 == null){
return (_arg1);
};
var _local2:int;
while (_arg1.charCodeAt(_local2) < 33) {
_local2++;
};
var _local3:int = (_arg1.length - 1);
while (_arg1.charCodeAt(_local3) < 33) {
_local3--;
};
return (_arg1.substring(_local2, (_local3 + 1)));
}
public static function getInterpolatedColour(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return (getInterpolatedColourUtil((0xFF & (_arg1 >> 24)), (0xFF & (_arg1 >> 16)), (0xFF & (_arg1 >> 8)), (0xFF & (_arg1 >> 0)), (0xFF & (_arg2 >> 24)), (0xFF & (_arg2 >> 16)), (0xFF & (_arg2 >> 8)), (0xFF & (_arg2 >> 0)), _arg3, _arg4));
}
public static function toDegrees(_arg1:Number):Number{
return (((_arg1 * 180) / Math.PI));
}
public static function encryptText(_arg1:String):String{
var _local5:int;
var _local2:SeededRandom = new SeededRandom(4435543);
var _local3 = "";
var _local4:uint;
while (_local4 < _arg1.length) {
_local5 = _arg1.charCodeAt(_local4);
if (_local5 > 34){
_local5 = (_local5 + _local2.integer(1, 4));
};
_local3 = (_local3 + String.fromCharCode(_local5));
_local4++;
};
return (_local3);
}
public static function getVectorBetweenLineAndPoint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Vector{
var _local7:Number = (_arg3 - _arg1);
var _local8:Number = (_arg4 - _arg2);
var _local9:Number = ((((_arg5 - _arg1) * _local7) + ((_arg6 - _arg2) * _local8)) / ((_local7 * _local7) + (_local8 * _local8)));
var _local10:Number = 0;
var _local11:Number = 0;
if ((((_local9 >= 0)) && ((_local9 <= 1)))){
_local10 = (_arg1 + int((_local9 * _local7)));
_local11 = (_arg2 + int((_local9 * _local8)));
} else {
if (_local9 < 0){
_local10 = _arg1;
_local11 = _arg2;
} else {
if (_local9 > 0){
_local10 = _arg3;
_local11 = _arg4;
};
};
};
_local7 = (_local10 - _arg5);
_local8 = (_local11 - _arg6);
return (new Vector(_local7, _local8));
}
public static function getMixerEQ(_arg1:uint=0, _arg2:uint=0x0200):Number{
var _local5:Number;
if (mixerByteArray == null){
mixerByteArray = new ByteArray();
};
SoundMixer.computeSpectrum(mixerByteArray, true);
var _local3:Number = 0;
var _local4:uint;
while (_local4 < 0x0200) {
_local5 = mixerByteArray.readFloat();
if ((((_local4 >= _arg1)) && ((_local4 < _arg2)))){
_local3 = (_local3 + _local5);
};
_local4++;
};
return ((_local3 / (_arg2 - _arg1)));
}
public static function clearFloatingText():void{
if (allFloatingText == null){
return;
};
while (allFloatingText.length > 0) {
allFloatingText[0].remove();
};
}
public static function updateDelayedFunctions(_arg1:Number):void{
if (delayedFunctions == null){
return;
};
var _local2:uint = delayedFunctions.length;
while (--_local2 >= 0) {
if (delayedFunctions[_local2].update(_arg1)){
delayedFunctions.splice(_local2, 1);
};
};
}
public static function getRandomElementFromChanceArray(_arg1:Array):int{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:uint;
var _local2:Number = 0;
for each (_local3 in _arg1) {
_local2 = (_local2 + _local3);
};
_local4 = (Math.random() * _local2);
_local5 = 0;
_local6 = 0;
while (_local6 < _arg1.length) {
_local5 = (_local5 + _arg1[_local6]);
if (_local4 < _local5){
return (_local6);
};
_local6++;
};
return (0);
}
public static function getRandomNumberInRange(_arg1:Number=0, _arg2:Number=1):Number{
return (((Math.random() * (_arg2 - _arg1)) + _arg1));
}
public static function decryptText(_arg1:String):String{
var _local5:int;
var _local2:SeededRandom = new SeededRandom(4435543);
var _local3 = "";
var _local4:uint;
while (_local4 < _arg1.length) {
_local5 = _arg1.charCodeAt(_local4);
if (_local5 > 34){
_local5 = (_local5 - _local2.integer(1, 4));
};
_local3 = (_local3 + String.fromCharCode(_local5));
_local4++;
};
return (_local3);
}
public static function duplicateDisplayObject(_arg1:DisplayObject, _arg2:Boolean=false):DisplayObject{
var _local5:Rectangle;
var _local3:Class = Object(_arg1).constructor;
var _local4:DisplayObject = new (_local3);
_local4.transform = _arg1.transform;
_local4.filters = _arg1.filters;
_local4.cacheAsBitmap = _arg1.cacheAsBitmap;
_local4.opaqueBackground = _arg1.opaqueBackground;
if (_arg1.scale9Grid){
_local5 = _arg1.scale9Grid;
_local4.scale9Grid = _local5;
};
if (((_arg2) && (_arg1.parent))){
_arg1.parent.addChild(_local4);
};
return (_local4);
}
public static function getDistanceBetweenPoints(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
var _local5:Number = (_arg3 - _arg1);
var _local6:Number = (_arg4 - _arg2);
return (Math.sqrt(((_local5 * _local5) + (_local6 * _local6))));
}
public static function getPeakMixerEQ(_arg1:uint=0, _arg2:uint=0x0200):int{
var _local6:Number;
if (mixerByteArray == null){
mixerByteArray = new ByteArray();
};
SoundMixer.computeSpectrum(mixerByteArray, true);
var _local3:Number = 0;
var _local4 = -1;
var _local5:uint;
while (_local5 < 0x0200) {
_local6 = mixerByteArray.readFloat();
if ((((((_local5 >= _arg1)) && ((_local5 < _arg2)))) && ((_local6 > _local3)))){
_local3 = _local6;
_local4 = _local5;
};
_local5++;
};
return (_local4);
}
public static function formatDecimals(_arg1:Number, _arg2:uint):String{
var _local5:int;
var _local10:int;
var _local3:Number = Math.pow(10, _arg2);
var _local4:String = String((Math.round((_arg1 * _local3)) / _local3));
var _local6:int;
while (_local6 < _local4.length) {
if (_local4.charAt(_local6) == "."){
_local5 = _local6;
};
_local6++;
};
var _local7:String = _local4;
var _local8:String = _local4.substr((_local5 + 1), _local4.length);
var _local9:Number = (_arg2 - _local8.length);
if ((((_local8.length < _arg2)) && ((_local5 > 0)))){
_local10 = 0;
while (_local10 < _local9) {
_local7 = (_local7 + "0");
_local10++;
};
};
return (_local7);
}
public static function createFloatingText(_arg1:DisplayObjectContainer, _arg2:Class, _arg3:String, _arg4:Number, _arg5:Number, _arg6:Number=-50, _arg7:Number=0.5, _arg8:Number=3, _arg9:Number=0.1, _arg10:int=0xFFFFFF):void{
if (allFloatingText == null){
allFloatingText = new Array();
};
var _local11:FloatingText = new FloatingText(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10);
allFloatingText.push(_local11);
}
public static function paintCircleOnSprite(_arg1:Sprite, _arg2:int=3, _arg3:int=0xFF0000, _arg4:Number=1, _arg5:Boolean=false, _arg6:Number=1):void{
var _local7:Graphics = _arg1.graphics;
if (_arg5){
_local7.lineStyle(_arg6, _arg3, _arg4);
} else {
_local7.beginFill(_arg3, _arg4);
};
_local7.drawCircle(0, 0, _arg2);
if (!_arg5){
_local7.endFill();
};
}
public static function setSpriteColour(_arg1:Sprite, _arg2:int):void{
var _local3:ColorTransform = _arg1.transform.colorTransform;
_local3.color = _arg2;
_arg1.transform.colorTransform = _local3;
}
public static function toRadians(_arg1:Number):Number{
return (((_arg1 * Math.PI) / 180));
}
public static function delayFunction(_arg1:Function, _arg2:Number):void{
if (delayedFunctions == null){
delayedFunctions = new Array();
};
delayedFunctions.push(new DelayedFunction(_arg1, _arg2));
}
public static function paintMixerEQToSprite(_arg1:Sprite, _arg2:int=0xFF0000, _arg3:int=0):void{
var _local4:int;
var _local7:Number;
var _local8:Number;
if (mixerByteArray == null){
mixerByteArray = new ByteArray();
};
SoundMixer.computeSpectrum(mixerByteArray, true);
_arg1.graphics.clear();
var _local5 = !((_arg3 == 0));
if (!_local5){
_arg1.graphics.beginFill(_arg2);
};
_arg1.graphics.moveTo(0, 0);
var _local6:uint = 2;
_local4 = 0;
while (_local4 < 0x0100) {
if (_local5){
_arg1.graphics.beginFill(Utils.getInterpolatedColour(_arg2, _arg3, _local4, 0x0100));
};
_local7 = mixerByteArray.readFloat();
_local8 = (_local7 * 100);
_arg1.graphics.drawRect(_local4, 0, _local6, -(_local8));
if (_local5){
_arg1.graphics.endFill();
};
_local4 = (_local4 + _local6);
};
if (!_local5){
_arg1.graphics.endFill();
};
}
public static function addChildAt(_arg1:DisplayObject, _arg2:DisplayObjectContainer, _arg3:int):void{
if (((((!((_arg1 == null))) && (!((_arg2 == null))))) && (!(_arg2.contains(_arg1))))){
_arg2.addChildAt(_arg1, _arg3);
};
}
public static function stopDraggingSprite(_arg1:Sprite):void{
if (draggingSprites == null){
return;
};
var _local2:int = draggingSprites.indexOf(_arg1);
if (_local2 != -1){
draggingSprites.splice(_local2, 1);
};
}
public static function paintBigRedRectOnSprite(_arg1:Sprite, _arg2:Number=0, _arg3:Number=0, _arg4:Number=1000, _arg5:Number=1000):void{
var _local6:Graphics = _arg1.graphics;
_local6.beginFill(0xFF0000);
_local6.drawRect(_arg2, _arg3, _arg4, _arg5);
_local6.endFill();
}
public static function getFloatAttributeFromXML(_arg1:XML, _arg2:String, _arg3:Number=0):Number{
if (_arg1.attribute(_arg2).length() > 0){
return (parseFloat(_arg1.attribute(_arg2)));
};
return (_arg3);
}
public static function clearDraggingSprite():void{
if (draggingSprites != null){
draggingSprites.splice(0);
};
}
public static function getIntAttributeFromXML(_arg1:XML, _arg2:String, _arg3:int=0):int{
if (_arg1.attribute(_arg2).length() > 0){
return (parseInt(_arg1.attribute(_arg2)));
};
return (_arg3);
}
public static function updateFloatingText(_arg1:Number):void{
if (allFloatingText == null){
return;
};
var _local2:uint = allFloatingText.length;
while (--_local2 >= 0) {
allFloatingText[_local2].update(_arg1);
};
}
public static function getProjectedPoint2D(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Vector2D):void{
var _local5:Number = Math.sin(_arg3);
var _local6:Number = Math.cos(_arg3);
var _local7:Number = (_local6 * _arg1);
var _local8:Number = (_local5 * _arg1);
var _local9:Number = (_local6 * _arg2);
var _local10:Number = -((_local5 * _arg2));
_arg4.set((_local7 + _local10), (_local8 + _local9));
}
public static function getRandomIntInRange(_arg1:Number=0, _arg2:Number=1):int{
return (int(((Math.random() * (_arg2 - _arg1)) + _arg1)));
}
public static function clearDelayedFunctions():void{
if (delayedFunctions != null){
delayedFunctions.splice(0);
};
}
public static function getInterpolatedColourUtil(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number):Number{
var _local11:Number = (_arg10 - _arg9);
_arg1 = (((_arg5 * _arg9) + (_arg1 * _local11)) / _arg10);
_arg2 = (((_arg6 * _arg9) + (_arg2 * _local11)) / _arg10);
_arg3 = (((_arg7 * _arg9) + (_arg3 * _local11)) / _arg10);
_arg4 = (((_arg8 * _arg9) + (_arg4 * _local11)) / _arg10);
_arg1 = ((_arg1)>0xFF) ? 0xFF : ((_arg1)<0) ? 0 : _arg1;
_arg2 = ((_arg2)>0xFF) ? 0xFF : ((_arg2)<0) ? 0 : _arg2;
_arg3 = ((_arg3)>0xFF) ? 0xFF : ((_arg3)<0) ? 0 : _arg3;
_arg4 = ((_arg4)>0xFF) ? 0xFF : ((_arg4)<0) ? 0 : _arg4;
var _local12:Number = Math.round(_arg1);
var _local13:Number = Math.round(_arg2);
var _local14:Number = Math.round(_arg3);
var _local15:Number = Math.round(_arg4);
return (((((_local12 << 24) | (_local13 << 16)) | (_local14 << 8)) | _local15));
}
public static function getDistanceBetweenLineAndPoint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Number{
var _local7:Number = (_arg3 - _arg1);
var _local8:Number = (_arg4 - _arg2);
var _local9:Number = ((((_arg5 - _arg1) * _local7) + ((_arg6 - _arg2) * _local8)) / ((_local7 * _local7) + (_local8 * _local8)));
var _local10:Number = 0;
var _local11:Number = 0;
if ((((_local9 >= 0)) && ((_local9 <= 1)))){
_local10 = (_arg1 + int((_local9 * _local7)));
_local11 = (_arg2 + int((_local9 * _local8)));
} else {
if (_local9 < 0){
_local10 = _arg1;
_local11 = _arg2;
} else {
if (_local9 > 0){
_local10 = _arg3;
_local11 = _arg4;
};
};
};
_local7 = (_local10 - _arg5);
_local8 = (_local11 - _arg6);
var _local12:Number = Math.sqrt(((_local7 * _local7) + (_local8 * _local8)));
return (_local12);
}
public static function getTurnDirection(_arg1:Number, _arg2:Number):int{
var _local3:Number;
var _local4:Number;
if (_arg2 >= _arg1){
_local3 = (_arg2 - _arg1);
_local4 = ((RAD360 - _arg2) + _arg1);
if (_local3 <= _local4){
return (1);
};
return (-1);
//unresolved jump
};
_local3 = (_arg1 - _arg2);
_local4 = ((RAD360 - _arg1) + _arg2);
if (_local3 <= _local4){
return (-1);
};
return (1);
}
public static function replaceCharactersInText(_arg1:String, _arg2:int, _arg3:int):String{
var _local6:int;
if (_arg1.indexOf(String.fromCharCode(_arg3)) != -1){
Debug.trace(("Utils.replaceCharactersInText already has character " + _arg3));
trace(("Utils.replaceCharactersInText already has character " + _arg3));
};
var _local4 = "";
var _local5:uint;
while (_local5 < _arg1.length) {
_local6 = _arg1.charCodeAt(_local5);
if (_local6 == _arg2){
_local6 = _arg3;
};
_local4 = (_local4 + String.fromCharCode(_local6));
_local5++;
};
return (_local4);
}
public static function getBooleanAttributeFromXML(_arg1:XML, _arg2:String, _arg3:Boolean=false):Boolean{
if (_arg1.attribute(_arg2).length() > 0){
return ((_arg1.attribute(_arg2) == "true"));
};
return (_arg3);
}
public static function getSquaredDistanceBetweenPoints(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
var _local5:Number = (_arg3 - _arg1);
var _local6:Number = (_arg4 - _arg2);
return (((_local5 * _local5) + (_local6 * _local6)));
}
public static function getVector2DBetweenLineAndPoint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Vector2D{
var _local7:Number = (_arg3 - _arg1);
var _local8:Number = (_arg4 - _arg2);
var _local9:Number = ((((_arg5 - _arg1) * _local7) + ((_arg6 - _arg2) * _local8)) / ((_local7 * _local7) + (_local8 * _local8)));
var _local10:Number = 0;
var _local11:Number = 0;
if ((((_local9 >= 0)) && ((_local9 <= 1)))){
_local10 = (_arg1 + int((_local9 * _local7)));
_local11 = (_arg2 + int((_local9 * _local8)));
} else {
if (_local9 < 0){
_local10 = _arg1;
_local11 = _arg2;
} else {
if (_local9 > 0){
_local10 = _arg3;
_local11 = _arg4;
};
};
};
_local7 = (_local10 - _arg5);
_local8 = (_local11 - _arg6);
return (new Vector2D(_local7, _local8));
}
public static function getProjectedPoint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Vector):void{
var _local5:Number = Math.sin(_arg3);
var _local6:Number = Math.cos(_arg3);
var _local7:Number = (_local6 * _arg1);
var _local8:Number = (_local5 * _arg1);
var _local9:Number = (_local6 * _arg2);
var _local10:Number = -((_local5 * _arg2));
_arg4.set((_local7 + _local10), (_local8 + _local9));
}
public static function linesIntersect(_arg1:Vector2D, _arg2:Vector2D, _arg3:Vector2D, _arg4:Vector2D):Boolean{
return (((((ccw(_arg1, _arg2, _arg3) * ccw(_arg1, _arg2, _arg4)) <= 0)) && (((ccw(_arg3, _arg4, _arg1) * ccw(_arg3, _arg4, _arg2)) <= 0))));
}
public static function startDraggingSprite(_arg1:Sprite, _arg2:Function=null):void{
if (draggingSprites == null){
draggingSprites = new Array();
};
draggingSprites.push(new DraggableSprite(_arg1, _arg2));
}
public static function removeFloatingText(_arg1:FloatingText):void{
var _local2:int = allFloatingText.indexOf(_arg1);
if (_local2 != -1){
allFloatingText.splice(_local2, 1);
};
}
public static function getStringAttributeFromXML(_arg1:XML, _arg2:String, _arg3:String=null):String{
if (_arg1.attribute(_arg2).length() > 0){
return (_arg1.attribute(_arg2));
};
return (_arg3);
}
public static function addChild(_arg1:DisplayObject, _arg2:DisplayObjectContainer):void{
if (((((!((_arg1 == null))) && (!((_arg2 == null))))) && (!(_arg2.contains(_arg1))))){
_arg2.addChild(_arg1);
};
}
public static function updateDraggingSprites(_arg1:Number):void{
if (draggingSprites == null){
return;
};
var _local2:uint = draggingSprites.length;
while (--_local2 >= 0) {
draggingSprites[_local2].update(_arg1);
};
}
}
}//package flesh
Section 33
//Vector (flesh.Vector)
package flesh {
public class Vector {
public var y:Number;
public var x:Number;
public function Vector(_arg1:Number, _arg2:Number){
x = _arg1;
y = _arg2;
}
public function getUnitNormal():Vector{
var _local1:Vector = new Vector(y, -(x));
_local1.unit();
return (_local1);
}
public function addVector(_arg1:Vector):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
}
public function setVector(_arg1:Vector):void{
x = _arg1.x;
y = _arg1.y;
}
public function addNew(_arg1:Vector):Vector{
return (new Vector((x - _arg1.x), (y - _arg1.y)));
}
public function unit():Number{
var _local1:Number = Math.sqrt(((x * x) + (y * y)));
if (_local1 > 0){
x = (x / _local1);
y = (y / _local1);
return (_local1);
};
return (0);
}
public function subtract(_arg1:Number, _arg2:Number):void{
x = (x - _arg1);
y = (y - _arg2);
}
public function invert():void{
x = -(x);
y = -(y);
}
public function multiplyNew(_arg1:Number):Vector{
return (new Vector((x * _arg1), (y * _arg1)));
}
public function square():void{
x = (x * x);
y = (y * y);
}
public function add(_arg1:Number, _arg2:Number):void{
x = (x + _arg1);
y = (y + _arg2);
}
public function set(_arg1:Number, _arg2:Number):void{
x = _arg1;
y = _arg2;
}
public function multiply(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
}
public function length():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function subtractNew(_arg1:Vector):Vector{
return (new Vector((x - _arg1.x), (y - _arg1.y)));
}
public function dotProduct(_arg1:Vector):Number{
return (((this.x * _arg1.x) + (this.y * _arg1.y)));
}
public function makeNormal():void{
var _local1:Number = x;
x = y;
y = -(_local1);
}
public function subtractVector(_arg1:Vector):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
}
public function divide(_arg1:Number):void{
x = (x / _arg1);
y = (y / _arg1);
}
public function toString():String{
return (((x + ",") + y));
}
public function getSquaredLength():Number{
return (((x * x) + (y * y)));
}
public function clone():Vector{
return (new Vector(x, y));
}
public static function getRandomVectorBetween(_arg1:Vector, _arg2:Vector):Vector{
var _local3:Vector = _arg2.clone();
_local3.subtractVector(_arg1);
_local3.multiply(Math.random());
_local3.addVector(_arg1);
return (_local3);
}
}
}//package flesh
Section 34
//Vector2D (flesh.Vector2D)
package flesh {
public class Vector2D {
public var y:Number;
public var x:Number;
public function Vector2D(_arg1:Number, _arg2:Number){
x = _arg1;
y = _arg2;
}
public function getUnitNormal():Vector2D{
var _local1:Vector2D = new Vector2D(y, -(x));
_local1.unit();
return (_local1);
}
public function addVector(_arg1:Vector2D):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
}
public function setVector(_arg1:Vector2D):void{
x = _arg1.x;
y = _arg1.y;
}
public function addNew(_arg1:Vector2D):Vector2D{
return (new Vector2D((x - _arg1.x), (y - _arg1.y)));
}
public function unit():Number{
var _local1:Number = Math.sqrt(((x * x) + (y * y)));
if (_local1 > 0){
x = (x / _local1);
y = (y / _local1);
return (_local1);
};
return (0);
}
public function subtract(_arg1:Number, _arg2:Number):void{
x = (x - _arg1);
y = (y - _arg2);
}
public function invert():void{
x = -(x);
y = -(y);
}
public function multiplyNew(_arg1:Number):Vector2D{
return (new Vector2D((x * _arg1), (y * _arg1)));
}
public function square():void{
x = (x * x);
y = (y * y);
}
public function add(_arg1:Number, _arg2:Number):void{
x = (x + _arg1);
y = (y + _arg2);
}
public function set(_arg1:Number, _arg2:Number):void{
x = _arg1;
y = _arg2;
}
public function multiply(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
}
public function length():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function subtractNew(_arg1:Vector2D):Vector2D{
return (new Vector2D((x - _arg1.x), (y - _arg1.y)));
}
public function dotProduct(_arg1:Vector2D):Number{
return (((this.x * _arg1.x) + (this.y * _arg1.y)));
}
public function makeNormal():void{
var _local1:Number = x;
x = y;
y = -(_local1);
}
public function subtractVector(_arg1:Vector2D):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
}
public function divide(_arg1:Number):void{
x = (x / _arg1);
y = (y / _arg1);
}
public function toString():String{
return (((x + ",") + y));
}
public function getSquaredLength():Number{
return (((x * x) + (y * y)));
}
public function clone():Vector2D{
return (new Vector2D(x, y));
}
public static function getRandomVectorBetween(_arg1:Vector2D, _arg2:Vector2D):Vector2D{
var _local3:Vector2D = _arg2.clone();
_local3.subtractVector(_arg1);
_local3.multiply(Math.random());
_local3.addVector(_arg1);
return (_local3);
}
}
}//package flesh
Section 35
//ZipHandler (flesh.ZipHandler)
package flesh {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import nochump.util.zip.*;
public class ZipHandler {
private static var xmlFiles:Dictionary = null;
private static var imageLoaders:Array;
private static var bitmapDataFiles:Dictionary = null;
private static var urlStream:URLStream;
private static var completeFunction:Function;
private static var imageLoaderURLs:Array;
public static function getXML(_arg1:String):XML{
var _local2:XML = (getFile(_arg1, xmlFiles) as XML);
if (_local2 == null){
trace(("ZipHandler: couldn't find bitmap file " + _arg1));
};
return (_local2);
}
private static function loadFailed(_arg1:Event):void{
trace("couldn't load zipFile!");
}
private static function zipLoaded(_arg1:Event):void{
var _local5:ZipEntry;
var _local6:ByteArray;
var _local7:Loader;
urlStream.removeEventListener(Event.COMPLETE, zipLoaded);
var _local2:URLStream = URLStream(_arg1.target);
var _local3:ZipFile = new ZipFile(_local2);
var _local4:int;
while (_local4 < _local3.entries.length) {
_local5 = _local3.entries[_local4];
_local6 = _local3.getInput(_local5);
if (hasFileExtension(_local5.name, ".xml")){
if (xmlFiles == null){
xmlFiles = new Dictionary();
};
trace(("ZipHander: adding XML file " + _local5.name));
xmlFiles[_local5.name] = new XML(_local6.toString());
} else {
if (((((hasFileExtension(_local5.name, ".png")) || (hasFileExtension(_local5.name, ".jpg")))) || (hasFileExtension(_local5.name, ".gif")))){
if (imageLoaders == null){
imageLoaders = new Array();
imageLoaderURLs = new Array();
};
if (bitmapDataFiles == null){
bitmapDataFiles = new Dictionary();
};
_local7 = new Loader();
_local7.contentLoaderInfo.addEventListener(Event.COMPLETE, getBitmapData);
_local7.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadBitmapFailed);
_local7.loadBytes(_local6);
imageLoaders.push(_local7);
imageLoaderURLs.push(_local5.name);
};
};
_local4++;
};
if (((!((completeFunction == null))) && ((imageLoaders == null)))){
completeFunction();
};
}
public static function hasBitmapFile(_arg1:String):Boolean{
var _local2:Object = getFile(_arg1, bitmapDataFiles);
return (!((_local2 == null)));
}
private static function hasFileExtension(_arg1:String, _arg2:String):Boolean{
var _local3:int = _arg1.indexOf(_arg2);
return ((_local3 == (_arg1.length - _arg2.length)));
}
public static function getBitmap(_arg1:String):Bitmap{
var _local2:BitmapData = (getFile(_arg1, bitmapDataFiles) as BitmapData);
if (_local2 == null){
trace(("ZipHandler: couldn't find bitmap file " + _arg1));
return (null);
};
return (new Bitmap(_local2));
}
private static function getBitmapData(_arg1:Event):void{
var _local2:LoaderInfo = (_arg1.target as LoaderInfo);
var _local3:Loader = _local2.loader;
var _local4:int = imageLoaders.indexOf(_local3);
var _local5:String = imageLoaderURLs[_local4];
var _local6:BitmapData = Bitmap(_arg1.target.content).bitmapData;
trace((((((("ZipHander: adding bitmap file " + _local5) + " (") + _local6.width) + "x") + _local6.height) + ")"));
bitmapDataFiles[_local5] = _local6;
_local3.contentLoaderInfo.removeEventListener(Event.COMPLETE, getBitmapData);
imageLoaders.splice(_local4, 1);
imageLoaderURLs.splice(_local4, 1);
if (((!((completeFunction == null))) && ((imageLoaders.length == 0)))){
completeFunction();
};
}
public static function loadZipFile(_arg1:String, _arg2:Function=null):void{
ZipHandler.completeFunction = _arg2;
urlStream = new URLStream();
urlStream.addEventListener(Event.COMPLETE, zipLoaded);
urlStream.addEventListener(IOErrorEvent.IO_ERROR, loadFailed);
urlStream.load(new URLRequest(_arg1));
}
public static function getFile(_arg1:String, _arg2:Dictionary):Object{
if (_arg2[_arg1] != null){
return (_arg2[_arg1]);
};
if (_arg1.indexOf("/") != -1){
_arg1 = _arg1.substring((_arg1.indexOf("/") + 1), _arg1.length);
if (_arg2[_arg1] != null){
return (_arg2[_arg1]);
};
};
return (null);
}
private static function loadBitmapFailed(_arg1:Event):void{
trace(" ** loadBitmapFailed");
}
}
}//package flesh
Section 36
//MochiCoins (mochi.as3.MochiCoins)
package mochi.as3 {
public class MochiCoins {
public static const STORE_HIDE:String = "StoreHide";
public static const LOGGED_IN:String = "LoggedIn";
public static const NO_USER:String = "NoUser";
public static const PROPERTIES_SIZE:String = "PropertiesSize";
public static const IO_ERROR:String = "IOError";
public static const STORE_ITEMS:String = "StoreItems";
public static const USER_INFO:String = "UserInfo";
public static const LOGIN_SHOW:String = "LoginShow";
public static const PROFILE_HIDE:String = "ProfileHide";
public static const STORE_SHOW:String = "StoreShow";
public static const ITEM_NEW:String = "ItemNew";
public static const ITEM_OWNED:String = "ItemOwned";
public static const PROPERTIES_SAVED:String = "PropertySaved";
public static const WIDGET_LOADED:String = "WidgetLoaded";
public static const ERROR:String = "Error";
public static const LOGGED_OUT:String = "LoggedOut";
public static const PROFILE_SHOW:String = "ProfileShow";
public static const LOGIN_HIDE:String = "LoginHide";
public static const LOGIN_SHOWN:String = "LoginShown";
public static var _user_info:Object = null;
private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher();
public static var _inventory:MochiInventory;
public static function getUserInfo():void{
MochiServices.send("coins_getUserInfo");
}
public static function requestLogin():void{
MochiServices.send("coins_requestLogin");
}
public static function showItem(_arg1:Object=null):void{
if (((!(_arg1)) || (!((typeof(_arg1.item) == "string"))))){
trace("ERROR: showItem call must pass an Object with an item key");
return;
};
MochiServices.bringToTop();
MochiServices.send("coins_showItem", {options:_arg1}, null, null);
}
public static function saveUserProperties(_arg1:Object):void{
MochiServices.send("coins_saveUserProperties", _arg1);
}
public static function get loggedIn():Boolean{
return (!((_user_info == null)));
}
public static function triggerEvent(_arg1:String, _arg2:Object):void{
if (_arg1 == LOGGED_IN){
_inventory = new MochiInventory();
_user_info = _arg2;
} else {
if (_arg1 == LOGGED_OUT){
if (inventory){
_inventory.release();
_inventory = null;
};
_user_info = null;
};
};
_dispatcher.triggerEvent(_arg1, _arg2);
}
public static function removeEventListener(_arg1:String, _arg2:Function):void{
_dispatcher.removeEventListener(_arg1, _arg2);
}
public static function getVersion():String{
return (MochiServices.getVersion());
}
public static function getStoreItems():void{
MochiServices.send("coins_getStoreItems");
}
public static function showLoginWidget(_arg1:Object=null):void{
MochiServices.setContainer();
MochiServices.bringToTop();
MochiServices.send("coins_showLoginWidget", {options:_arg1});
}
public static function get inventory():MochiInventory{
return (_inventory);
}
public static function showStore(_arg1:Object=null):void{
MochiServices.bringToTop();
MochiServices.send("coins_showStore", {options:_arg1}, null, null);
}
public static function addEventListener(_arg1:String, _arg2:Function):void{
_dispatcher.addEventListener(_arg1, _arg2);
}
public static function getAPIURL():String{
if (!_user_info){
return (null);
};
return (_user_info.api_url);
}
public static function hideLoginWidget():void{
MochiServices.send("coins_hideLoginWidget");
}
public static function getAPIToken():String{
if (!_user_info){
return (null);
};
return (_user_info.api_token);
}
public static function showVideo(_arg1:Object=null):void{
if (((!(_arg1)) || (!((typeof(_arg1.item) == "string"))))){
trace("ERROR: showVideo call must pass an Object with an item key");
return;
};
MochiServices.bringToTop();
MochiServices.send("coins_showVideo", {options:_arg1}, null, null);
}
}
}//package mochi.as3
Section 37
//MochiDigits (mochi.as3.MochiDigits)
package mochi.as3 {
public final class MochiDigits {
private var Sibling:MochiDigits;
private var Fragment:Number;
private var Encoder:Number;
public function MochiDigits(_arg1:Number=0, _arg2:uint=0):void{
Encoder = 0;
setValue(_arg1, _arg2);
}
public function reencode():void{
var _local1:uint = int((2147483647 * Math.random()));
Fragment = (Fragment ^ (_local1 ^ Encoder));
Encoder = _local1;
}
public function set value(_arg1:Number):void{
setValue(_arg1);
}
public function toString():String{
var _local1:String = String.fromCharCode((Fragment ^ Encoder));
if (Sibling != null){
_local1 = (_local1 + Sibling.toString());
};
return (_local1);
}
public function setValue(_arg1:Number=0, _arg2:uint=0):void{
var _local3:String = _arg1.toString();
var _temp1 = _arg2;
_arg2 = (_arg2 + 1);
Fragment = (_local3.charCodeAt(_temp1) ^ Encoder);
if (_arg2 < _local3.length){
Sibling = new MochiDigits(_arg1, _arg2);
} else {
Sibling = null;
};
reencode();
}
public function get value():Number{
return (Number(this.toString()));
}
public function addValue(_arg1:Number):void{
value = (value + _arg1);
}
}
}//package mochi.as3
Section 38
//MochiEventDispatcher (mochi.as3.MochiEventDispatcher)
package mochi.as3 {
public class MochiEventDispatcher {
private var eventTable:Object;
public function MochiEventDispatcher():void{
eventTable = {};
}
public function triggerEvent(_arg1:String, _arg2:Object):void{
var _local3:Object;
if (eventTable[_arg1] == undefined){
return;
};
for (_local3 in eventTable[_arg1]) {
var _local6 = eventTable[_arg1];
_local6[_local3](_arg2);
};
}
public function removeEventListener(_arg1:String, _arg2:Function):void{
var _local3:Object;
if (eventTable[_arg1] == undefined){
eventTable[_arg1] = [];
return;
};
for (_local3 in eventTable[_arg1]) {
if (eventTable[_arg1][_local3] != _arg2){
} else {
eventTable[_arg1].splice(Number(_local3), 1);
};
};
}
public function addEventListener(_arg1:String, _arg2:Function):void{
removeEventListener(_arg1, _arg2);
eventTable[_arg1].push(_arg2);
}
}
}//package mochi.as3
Section 39
//MochiEvents (mochi.as3.MochiEvents)
package mochi.as3 {
import flash.display.*;
public class MochiEvents {
public static const ALIGN_BOTTOM_LEFT:String = "ALIGN_BL";
public static const FORMAT_LONG:String = "LongForm";
public static const ALIGN_BOTTOM:String = "ALIGN_B";
public static const ACHIEVEMENT_RECEIVED:String = "AchievementReceived";
public static const FORMAT_SHORT:String = "ShortForm";
public static const ALIGN_TOP_RIGHT:String = "ALIGN_TR";
public static const ALIGN_BOTTOM_RIGHT:String = "ALIGN_BR";
public static const ALIGN_TOP:String = "ALIGN_T";
public static const ALIGN_LEFT:String = "ALIGN_L";
public static const ALIGN_RIGHT:String = "ALIGN_R";
public static const ALIGN_TOP_LEFT:String = "ALIGN_TL";
public static const ALIGN_CENTER:String = "ALIGN_C";
private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher();
private static var gameStart:Number;
private static var levelStart:Number;
public static function addEventListener(_arg1:String, _arg2:Function):void{
_dispatcher.addEventListener(_arg1, _arg2);
}
public static function removeEventListener(_arg1:String, _arg2:Function):void{
_dispatcher.removeEventListener(_arg1, _arg2);
}
public static function startSession(_arg1:String):void{
MochiServices.send("events_beginSession", {achievementID:_arg1}, null, null);
}
public static function triggerEvent(_arg1:String, _arg2:Object):void{
_dispatcher.triggerEvent(_arg1, _arg2);
}
public static function setNotifications(_arg1:MovieClip, _arg2:Object):void{
var _local4:Object;
var _local3:Object = {};
for (_local4 in _arg2) {
_local3[_local4] = _arg2[_local4];
};
_local3.clip = _arg1;
MochiServices.send("events_setNotifications", _local3, null, null);
}
public static function endGame():void{
var _local1:Number = (new Date().time - gameStart);
trigger("end_game", {time:_local1});
}
public static function startGame():void{
gameStart = new Date().time;
trigger("start_game");
}
public static function trigger(_arg1:String, _arg2:Object=null):void{
if (_arg2 == null){
_arg2 = {};
} else {
if (_arg2["kind"] != undefined){
trace("WARNING: optional arguments package contains key 'id', it will be overwritten");
_arg2["kind"] = _arg1;
};
};
MochiServices.send("events_triggerEvent", {eventObject:_arg2}, null, null);
}
public static function getVersion():String{
return (MochiServices.getVersion());
}
public static function startLevel():void{
levelStart = new Date().time;
trigger("start_level");
}
public static function endLevel():void{
var _local1:Number = (new Date().time - levelStart);
trigger("end_level", {time:_local1});
}
}
}//package mochi.as3
Section 40
//MochiInventory (mochi.as3.MochiInventory)
package mochi.as3 {
import flash.events.*;
import flash.utils.*;
public dynamic class MochiInventory extends Proxy {
private var _timer:Timer;
private var _names:Array;
private var _syncID:Number;
private var _consumableProperties:Object;
private var _outstandingID:Number;
private var _syncPending:Boolean;
public static const READY:String = "InvReady";
public static const ERROR:String = "Error";
public static const IO_ERROR:String = "IoError";
private static const CONSUMER_KEY:String = "MochiConsumables";
public static const WRITTEN:String = "InvWritten";
public static const NOT_READY:String = "InvNotReady";
public static const VALUE_ERROR:String = "InvValueError";
private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher();
public function MochiInventory():void{
MochiCoins.addEventListener(MochiCoins.ITEM_NEW, newItems);
MochiCoins.addEventListener(MochiCoins.LOGGED_IN, loggedIn);
MochiCoins.addEventListener(MochiCoins.LOGGED_OUT, loggedOut);
_syncPending = false;
_outstandingID = 0;
_syncID = 0;
_timer = new Timer(1000);
_timer.addEventListener(TimerEvent.TIMER, sync);
_timer.start();
if (MochiCoins.loggedIn){
loggedIn();
} else {
loggedOut();
};
}
private function newItems(_arg1:Object):void{
this[_arg1.id] = (this[_arg1.id] + _arg1.count);
}
public function release():void{
MochiCoins.removeEventListener(MochiCoins.ITEM_NEW, newItems);
MochiCoins.removeEventListener(MochiCoins.LOGGED_IN, loggedIn);
MochiCoins.removeEventListener(MochiCoins.LOGGED_OUT, loggedOut);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function getProperty(_arg1){
if (_consumableProperties == null){
triggerEvent(ERROR, {type:NOT_READY});
return (-1);
};
if (_consumableProperties[_arg1]){
return (MochiDigits(_consumableProperties[_arg1]).value);
};
return (undefined);
}
private function loggedIn(_arg1:Object=null):void{
MochiUserData.get(CONSUMER_KEY, getConsumableBag);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function hasProperty(_arg1):Boolean{
if (_consumableProperties == null){
triggerEvent(ERROR, {type:NOT_READY});
return (false);
};
if (_consumableProperties[_arg1] == undefined){
return (false);
};
return (true);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextNameIndex(_arg1:int):int{
return (((_arg1)>=_names.length) ? 0 : (_arg1 + 1));
}
private function putConsumableBag(_arg1:MochiUserData):void{
_syncPending = false;
if (_arg1.error){
triggerEvent(ERROR, {type:IO_ERROR, error:_arg1.error});
_outstandingID = -1;
};
triggerEvent(WRITTEN, {});
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function setProperty(_arg1, _arg2):void{
var _local3:MochiDigits;
if (_consumableProperties == null){
triggerEvent(ERROR, {type:NOT_READY});
return;
};
if (!(_arg2 is Number)){
triggerEvent(ERROR, {type:VALUE_ERROR, error:"Invalid type", arg:_arg2});
return;
};
if (_consumableProperties[_arg1]){
_local3 = MochiDigits(_consumableProperties[_arg1]);
if (_local3.value == _arg2){
return;
};
_local3.value = _arg2;
} else {
_names.push(_arg1);
_consumableProperties[_arg1] = new MochiDigits(_arg2);
};
_syncID++;
}
private function sync(_arg1:Event=null):void{
var _local3:String;
if (((_syncPending) || ((_syncID == _outstandingID)))){
return;
};
_outstandingID = _syncID;
var _local2:Object = {};
for (_local3 in _consumableProperties) {
_local2[_local3] = MochiDigits(_consumableProperties[_local3]).value;
};
MochiUserData.put(CONSUMER_KEY, _local2, putConsumableBag);
_syncPending = true;
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextName(_arg1:int):String{
return (_names[(_arg1 - 1)]);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function deleteProperty(_arg1):Boolean{
if (!_consumableProperties[_arg1]){
return (false);
};
_names.splice(_names.indexOf(_arg1), 1);
delete _consumableProperties[_arg1];
return (true);
}
private function getConsumableBag(_arg1:MochiUserData):void{
var _local2:String;
if (_arg1.error){
triggerEvent(ERROR, {type:IO_ERROR, error:_arg1.error});
return;
};
_consumableProperties = {};
_names = new Array();
if (_arg1.data){
for (_local2 in _arg1.data) {
_names.push(_local2);
_consumableProperties[_local2] = new MochiDigits(_arg1.data[_local2]);
};
};
triggerEvent(READY, {});
}
private function loggedOut(_arg1:Object=null):void{
_consumableProperties = null;
}
public static function triggerEvent(_arg1:String, _arg2:Object):void{
_dispatcher.triggerEvent(_arg1, _arg2);
}
public static function removeEventListener(_arg1:String, _arg2:Function):void{
_dispatcher.removeEventListener(_arg1, _arg2);
}
public static function addEventListener(_arg1:String, _arg2:Function):void{
_dispatcher.addEventListener(_arg1, _arg2);
}
}
}//package mochi.as3
Section 41
//MochiScores (mochi.as3.MochiScores)
package mochi.as3 {
import flash.display.*;
import flash.text.*;
public class MochiScores {
private static var boardID:String;
public static var onErrorHandler:Object;
public static var onCloseHandler:Object;
public static function showLeaderboard(_arg1:Object=null):void{
var n:Number;
var options = _arg1;
if (options != null){
delete options.clip;
MochiServices.setContainer();
MochiServices.bringToTop();
if (options.name != null){
if ((options.name is TextField)){
if (options.name.text.length > 0){
options.name = options.name.text;
};
};
};
if (options.score != null){
if ((options.score is TextField)){
if (options.score.text.length > 0){
options.score = options.score.text;
};
} else {
if ((options.score is MochiDigits)){
options.score = options.score.value;
};
};
n = Number(options.score);
if (isNaN(n)){
trace((("ERROR: Submitted score '" + options.score) + "' will be rejected, score is 'Not a Number'"));
} else {
if ((((n == Number.NEGATIVE_INFINITY)) || ((n == Number.POSITIVE_INFINITY)))){
trace((("ERROR: Submitted score '" + options.score) + "' will be rejected, score is an infinite"));
} else {
if (Math.floor(n) != n){
trace((("WARNING: Submitted score '" + options.score) + "' will be truncated"));
};
options.score = n;
};
};
};
if (options.onDisplay != null){
options.onDisplay();
} else {
if (MochiServices.clip != null){
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
};
} else {
options = {};
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
if (options.onClose != null){
onCloseHandler = options.onClose;
} else {
onCloseHandler = function ():void{
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.play();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onClose.");
};
};
};
if (options.onError != null){
onErrorHandler = options.onError;
} else {
onErrorHandler = null;
};
if (options.boardID == null){
if (MochiScores.boardID != null){
options.boardID = MochiScores.boardID;
};
};
MochiServices.warnID(options.boardID, true);
trace("[MochiScores] NOTE: Security Sandbox Violation errors below are normal");
MochiServices.send("scores_showLeaderboard", {options:options}, null, onClose);
}
public static function closeLeaderboard():void{
MochiServices.send("scores_closeLeaderboard");
}
public static function getPlayerInfo(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_getPlayerInfo", null, _arg1, _arg2);
}
public static function requestList(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_requestList", null, _arg1, _arg2);
}
public static function scoresArrayToObjects(_arg1:Object):Object{
var _local3:Number;
var _local4:Number;
var _local5:Object;
var _local6:Object;
var _local7:String;
var _local8:String;
var _local2:Object = {};
for (_local7 in _arg1) {
if (typeof(_arg1[_local7]) == "object"){
if (((!((_arg1[_local7].cols == null))) && (!((_arg1[_local7].rows == null))))){
_local2[_local7] = [];
_local5 = _arg1[_local7];
_local4 = 0;
while (_local4 < _local5.rows.length) {
_local6 = {};
_local3 = 0;
while (_local3 < _local5.cols.length) {
_local6[_local5.cols[_local3]] = _local5.rows[_local4][_local3];
_local3++;
};
_local2[_local7].push(_local6);
_local4++;
};
} else {
_local2[_local7] = {};
for (_local8 in _arg1[_local7]) {
_local2[_local7][_local8] = _arg1[_local7][_local8];
};
};
} else {
_local2[_local7] = _arg1[_local7];
};
};
return (_local2);
}
public static function submit(_arg1:Number, _arg2:String, _arg3:Object=null, _arg4:Object=null):void{
_arg1 = Number(_arg1);
if (isNaN(_arg1)){
trace((("ERROR: Submitted score '" + String(_arg1)) + "' will be rejected, score is 'Not a Number'"));
} else {
if ((((_arg1 == Number.NEGATIVE_INFINITY)) || ((_arg1 == Number.POSITIVE_INFINITY)))){
trace((("ERROR: Submitted score '" + String(_arg1)) + "' will be rejected, score is an infinite"));
} else {
if (Math.floor(_arg1) != _arg1){
trace((("WARNING: Submitted score '" + String(_arg1)) + "' will be truncated"));
};
_arg1 = Number(_arg1);
};
};
MochiServices.send("scores_submit", {score:_arg1, name:_arg2}, _arg3, _arg4);
}
public static function onClose(_arg1:Object=null):void{
if (((((_arg1) && ((_arg1.error == true)))) && (onErrorHandler))){
if (_arg1.errorCode == null){
_arg1.errorCode = "IOError";
};
onErrorHandler(_arg1.errorCode);
MochiServices.doClose();
return;
};
onCloseHandler();
MochiServices.doClose();
}
public static function setBoardID(_arg1:String):void{
MochiServices.warnID(_arg1, true);
MochiScores.boardID = _arg1;
MochiServices.send("scores_setBoardID", {boardID:_arg1});
}
}
}//package mochi.as3
Section 42
//MochiServices (mochi.as3.MochiServices)
package mochi.as3 {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
import flash.geom.*;
public class MochiServices {
private static var _container:Object;
private static var _connected:Boolean = false;
private static var _swfVersion:String;
private static var _preserved:Object;
public static var netupAttempted:Boolean = false;
private static var _sendChannel:LocalConnection;
public static var servicesSync:MochiSync = new MochiSync();
private static var _clip:MovieClip;
private static var _id:String;
private static var _services:String = "services.swf";
private static var _servURL:String = "http://www.mochiads.com/static/lib/services/";
public static var widget:Boolean = false;
private static var _timer:Timer;
private static var _sendChannelName:String;
private static var _loader:Loader;
private static var _connecting:Boolean = false;
private static var _mochiLocalConnection:MovieClip;
private static var _listenChannelName:String = "__ms_";
public static var onError:Object;
public static var netup:Boolean = true;
private static var _mochiLC:String = "MochiLC.swf";
public static function isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function get connected():Boolean{
return (_connected);
}
private static function onReceive(_arg1:Object):void{
var methodName:String;
var pkg = _arg1;
var cb:String = pkg.callbackID;
var cblst:Object = _clip._callbacks[cb];
if (!cblst){
return;
};
var method:* = cblst.callbackMethod;
methodName = "";
var obj:Object = cblst.callbackObject;
if (((obj) && ((typeof(method) == "string")))){
methodName = method;
if (obj[method] != null){
method = obj[method];
} else {
trace((("Error: Method " + method) + " does not exist."));
};
};
if (method != undefined){
try {
method.apply(obj, pkg.args);
} catch(error:Error) {
trace(((("Error invoking callback method '" + methodName) + "': ") + error.toString()));
};
} else {
if (obj != null){
try {
obj(pkg.args);
} catch(error:Error) {
trace(("Error invoking method on object: " + error.toString()));
};
};
};
delete _clip._callbacks[cb];
}
public static function get childClip():Object{
return (_clip);
}
public static function send(_arg1:String, _arg2:Object=null, _arg3:Object=null, _arg4:Object=null):void{
if (_connected){
_mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID});
} else {
if ((((_clip == null)) || (!(_connecting)))){
trace(("Error: MochiServices not connected. Please call MochiServices.connect(). Function: " + _arg1));
handleError(_arg2, _arg3, _arg4);
flush(true);
return;
};
_clip._queue.push({methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID});
};
if (_clip != null){
if (((!((_clip._callbacks == null))) && (!((_clip._nextcallbackID == null))))){
_clip._callbacks[_clip._nextcallbackID] = {callbackObject:_arg3, callbackMethod:_arg4};
_clip._nextcallbackID++;
};
};
}
private static function init(_arg1:String, _arg2:Object):void{
_id = _arg1;
if (_arg2 != null){
_container = _arg2;
loadCommunicator(_arg1, _container);
};
}
private static function clickMovie(_arg1:String, _arg2:Function):MovieClip{
var _local4:int;
var _local14:Loader;
var _local3:Array = [150, 21, 0, 7, 1, 0, 0, 0, 0, 98, 116, 110, 0, 7, 2, 0, 0, 0, 0, 116, 104, 105, 115, 0, 28, 150, 22, 0, 0, 99, 114, 101, 97, 116, 101, 69, 109, 112, 116, 121, 77, 111, 118, 105, 101, 67, 108, 105, 112, 0, 82, 135, 1, 0, 0, 23, 150, 13, 0, 4, 0, 0, 111, 110, 82, 101, 108, 101, 97, 115, 101, 0, 142, 8, 0, 0, 0, 0, 2, 42, 0, 114, 0, 150, 17, 0, 0, 32, 0, 7, 1, 0, 0, 0, 8, 0, 0, 115, 112, 108, 105, 116, 0, 82, 135, 1, 0, 1, 23, 150, 7, 0, 4, 1, 7, 0, 0, 0, 0, 78, 150, 8, 0, 0, 95, 98, 108, 97, 110, 107, 0, 154, 1, 0, 0, 150, 7, 0, 0, 99, 108, 105, 99, 107, 0, 150, 7, 0, 4, 1, 7, 1, 0, 0, 0, 78, 150, 27, 0, 7, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 76, 111, 99, 97, 108, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 0, 64, 150, 6, 0, 0, 115, 101, 110, 100, 0, 82, 79, 150, 15, 0, 4, 0, 0, 95, 97, 108, 112, 104, 97, 0, 7, 0, 0, 0, 0, 79, 150, 23, 0, 7, 0xFF, 0, 0xFF, 0, 7, 1, 0, 0, 0, 4, 0, 0, 98, 101, 103, 105, 110, 70, 105, 108, 108, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 109, 111, 118, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 100, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 100, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 25, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 2, 0, 0, 0, 4, 0, 0, 108, 105, 110, 101, 84, 111, 0, 82, 23, 150, 16, 0, 7, 0, 0, 0, 0, 4, 0, 0, 101, 110, 100, 70, 105, 108, 108, 0, 82, 23];
var _local5:Array = [104, 0, 31, 64, 0, 7, 208, 0, 0, 12, 1, 0, 67, 2, 0xFF, 0xFF, 0xFF, 63, 3];
var _local6:Array = [0, 64, 0, 0, 0];
var _local7:MovieClip = new MovieClip();
var _local8:LocalConnection = new LocalConnection();
var _local9:String = ((("_click_" + Math.floor((Math.random() * 999999))) + "_") + Math.floor(new Date().time));
_local8 = new LocalConnection();
_local7.lc = _local8;
_local7.click = _arg2;
_local8.client = _local7;
_local8.connect(_local9);
var _local10:ByteArray = new ByteArray();
var _local11:ByteArray = new ByteArray();
_local11.endian = Endian.LITTLE_ENDIAN;
_local11.writeShort(1);
_local11.writeUTFBytes(((_arg1 + " ") + _local9));
_local11.writeByte(0);
var _local12:uint = ((_local3.length + _local11.length) + 4);
var _local13:uint = (_local12 + 35);
_local10.endian = Endian.LITTLE_ENDIAN;
_local10.writeUTFBytes("FWS");
_local10.writeByte(8);
_local10.writeUnsignedInt(_local13);
for each (_local4 in _local5) {
_local10.writeByte(_local4);
};
_local10.writeUnsignedInt(_local12);
_local10.writeByte(136);
_local10.writeShort(_local11.length);
_local10.writeBytes(_local11);
for each (_local4 in _local3) {
_local10.writeByte(_local4);
};
for each (_local4 in _local6) {
_local10.writeByte(_local4);
};
_local14 = new Loader();
_local14.loadBytes(_local10);
_local7.addChild(_local14);
return (_local7);
}
public static function stayOnTop():void{
_container.addEventListener(Event.ENTER_FRAME, MochiServices.bringToTop, false, 0, true);
if (_clip != null){
_clip.visible = true;
};
}
public static function addLinkEvent(_arg1:String, _arg2:String, _arg3:DisplayObjectContainer, _arg4:Function=null):void{
var avm1Click:DisplayObject;
var x:String;
var req:URLRequest;
var loader:Loader;
var setURL:Function;
var err:Function;
var complete:Function;
var url = _arg1;
var burl = _arg2;
var btn = _arg3;
var onClick = _arg4;
var vars:Object = new Object();
vars["mav"] = getVersion();
vars["swfv"] = "9";
vars["swfurl"] = btn.loaderInfo.loaderURL;
vars["fv"] = Capabilities.version;
vars["os"] = Capabilities.os;
vars["lang"] = Capabilities.language;
vars["scres"] = ((Capabilities.screenResolutionX + "x") + Capabilities.screenResolutionY);
var s = "?";
var i:Number = 0;
for (x in vars) {
if (i != 0){
s = (s + "&");
};
i = (i + 1);
s = (((s + x) + "=") + escape(vars[x]));
};
req = new URLRequest("http://x.mochiads.com/linkping.swf");
loader = new Loader();
setURL = function (_arg1:String):void{
if (avm1Click){
btn.removeChild(avm1Click);
};
avm1Click = clickMovie(_arg1, onClick);
var _local2:Rectangle = btn.getBounds(btn);
btn.addChild(avm1Click);
avm1Click.x = _local2.x;
avm1Click.y = _local2.y;
avm1Click.scaleX = (0.01 * _local2.width);
avm1Click.scaleY = (0.01 * _local2.height);
};
err = function (_arg1:Object):void{
netup = false;
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
setURL(burl);
};
complete = function (_arg1:Object):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
};
if (netup){
setURL((url + s));
} else {
setURL(burl);
};
if (!((netupAttempted) || (_connected))){
netupAttempted = true;
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, err);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete);
loader.load(req);
};
}
public static function warnID(_arg1:String, _arg2:Boolean):void{
_arg1 = _arg1.toLowerCase();
if (_arg1.length != 16){
trace((("WARNING: " + (_arg2) ? "board" : "game") + " ID is not the appropriate length"));
return;
} else {
if (_arg1 == "1e113c7239048b3f"){
if (_arg2){
trace("WARNING: Using testing board ID");
} else {
trace("WARNING: Using testing board ID as game ID");
};
return;
} else {
if (_arg1 == "84993a1de4031cd8"){
if (_arg2){
trace("WARNING: Using testing game ID as board ID");
} else {
trace("WARNING: Using testing game ID");
};
return;
};
};
};
var _local3:Number = 0;
while (_local3 < _arg1.length) {
switch (_arg1.charAt(_local3)){
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
case "a":
case "b":
case "c":
case "d":
case "e":
case "f":
break;
default:
trace(("WARNING: Board ID contains illegal characters: " + _arg1));
return;
};
_local3++;
};
}
public static function disconnect():void{
if (((_connected) || (_connecting))){
if (_clip != null){
if (_clip.parent != null){
if ((_clip.parent is Sprite)){
Sprite(_clip.parent).removeChild(_clip);
_clip = null;
};
};
};
_connecting = (_connected = false);
flush(true);
try {
_mochiLocalConnection.close();
} catch(error:Error) {
};
};
if (_timer != null){
try {
_timer.stop();
} catch(error:Error) {
};
};
}
public static function allowDomains(_arg1:String):String{
var _local2:String;
if (Security.sandboxType != "application"){
Security.allowDomain("*");
Security.allowInsecureDomain("*");
};
if (_arg1.indexOf("http://") != -1){
_local2 = _arg1.split("/")[2].split(":")[0];
if (Security.sandboxType != "application"){
Security.allowDomain(_local2);
Security.allowInsecureDomain(_local2);
};
};
return (_local2);
}
public static function getVersion():String{
return ("3.4 as3");
}
public static function doClose():void{
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
}
private static function flush(_arg1:Boolean):void{
var _local2:Object;
var _local3:Object;
if (((_clip) && (_clip._queue))){
while (_clip._queue.length > 0) {
_local2 = _clip._queue.shift();
_local3 = null;
if (_local2 != null){
if (_local2.callbackID != null){
_local3 = _clip._callbacks[_local2.callbackID];
};
delete _clip._callbacks[_local2.callbackID];
if (((_arg1) && (!((_local3 == null))))){
handleError(_local2.args, _local3.callbackObject, _local3.callbackMethod);
};
};
};
};
}
public static function get id():String{
return (_id);
}
private static function onEvent(_arg1:Object):void{
var _local2:String = _arg1.target;
var _local3:String = _arg1.event;
switch (_local2){
case "events":
MochiEvents.triggerEvent(_arg1.event, _arg1.args);
break;
case "coins":
MochiCoins.triggerEvent(_arg1.event, _arg1.args);
break;
case "sync":
servicesSync.triggerEvent(_arg1.event, _arg1.args);
break;
};
}
private static function urlOptions(_arg1:Object):Object{
var _local3:String;
var _local4:Array;
var _local5:Number;
var _local6:Array;
var _local2:Object = {};
if (_arg1.stage){
_local3 = _arg1.stage.loaderInfo.parameters.mochiad_options;
} else {
_local3 = _arg1.loaderInfo.parameters.mochiad_options;
};
if (_local3){
_local4 = _local3.split("&");
_local5 = 0;
while (_local5 < _local4.length) {
_local6 = _local4[_local5].split("=");
_local2[unescape(_local6[0])] = unescape(_local6[1]);
_local5++;
};
};
return (_local2);
}
public static function setContainer(_arg1:Object=null, _arg2:Boolean=true):void{
if (_arg1 != null){
if ((_arg1 is Sprite)){
_container = _arg1;
};
};
if (_arg2){
if ((_container is Sprite)){
Sprite(_container).addChild(_clip);
};
};
}
private static function handleError(_arg1:Object, _arg2:Object, _arg3:Object):void{
var args = _arg1;
var callbackObject = _arg2;
var callbackMethod = _arg3;
if (args != null){
if (args.onError != null){
args.onError.apply(null, ["NotConnected"]);
};
if (((!((args.options == null))) && (!((args.options.onError == null))))){
args.options.onError.apply(null, ["NotConnected"]);
};
};
if (callbackMethod != null){
args = {};
args.error = true;
args.errorCode = "NotConnected";
if (((!((callbackObject == null))) && ((callbackMethod is String)))){
try {
var _local5 = callbackObject;
_local5[callbackMethod](args);
} catch(error:Error) {
};
} else {
if (callbackMethod != null){
try {
callbackMethod.apply(args);
} catch(error:Error) {
};
};
};
};
}
private static function loadError(_arg1:Object):void{
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
MochiServices.disconnect();
MochiServices.onError("IOError");
}
private static function initComChannels():void{
if (!_connected){
trace("[SERVICES_API] connected!");
_connecting = false;
_connected = true;
_mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:"handshakeDone"});
_mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:"registerGame", preserved:_preserved, id:_id, version:getVersion(), parentURL:_container.loaderInfo.loaderURL});
_clip.onReceive = onReceive;
_clip.onEvent = onEvent;
_clip.onError = function ():void{
MochiServices.onError("IOError");
};
while (_clip._queue.length > 0) {
_mochiLocalConnection.send(_sendChannelName, "onReceive", _clip._queue.shift());
};
};
}
private static function loadLCBridge(_arg1:Object):void{
var loader:Loader;
var clip = _arg1;
loader = new Loader();
var mochiLCURL:String = (_servURL + _mochiLC);
var req:URLRequest = new URLRequest(mochiLCURL);
var complete:Function = function (_arg1:Object):void{
_mochiLocalConnection = MovieClip(loader.content);
listen();
};
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError);
loader.load(req);
clip.addChild(loader);
}
private static function listen():void{
_mochiLocalConnection.connect(_listenChannelName);
_clip.handshake = function (_arg1:Object):void{
MochiServices.comChannelName = _arg1.newChannel;
};
trace("Waiting for MochiAds services to connect...");
}
public static function get clip():Object{
return (_container);
}
public static function set comChannelName(_arg1:String):void{
if (_arg1 != null){
if (_arg1.length > 3){
_sendChannelName = (_arg1 + "_fromgame");
initComChannels();
};
};
}
private static function loadCommunicator(_arg1:String, _arg2:Object):MovieClip{
var _local3:String = ("_mochiservices_com_" + _arg1);
if (_clip != null){
return (_clip);
};
if (!MochiServices.isNetworkAvailable()){
return (null);
};
if (urlOptions(_arg2).servURL){
_servURL = urlOptions(_arg2).servURL;
};
var _local4:String = (_servURL + _services);
if (urlOptions(_arg2).servicesURL){
_local4 = urlOptions(_arg2).servicesURL;
};
_listenChannelName = (_listenChannelName + ((Math.floor(new Date().time) + "_") + Math.floor((Math.random() * 99999))));
MochiServices.allowDomains(_local4);
_clip = createEmptyMovieClip(_arg2, _local3, 10336, false);
loadLCBridge(_clip);
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError);
var _local5:URLRequest = new URLRequest(_local4);
var _local6:URLVariables = new URLVariables();
_local6.listenLC = _listenChannelName;
_local6.mochiad_options = _arg2.loaderInfo.parameters.mochiad_options;
_local6.api_version = getVersion();
if (widget){
_local6.widget = true;
};
_local5.data = _local6;
_loader.load(_local5);
_clip.addChild(_loader);
_clip._mochiservices_com = _loader;
_sendChannel = new LocalConnection();
_clip._queue = [];
_clip._nextcallbackID = 0;
_clip._callbacks = {};
_timer = new Timer(10000, 1);
_timer.addEventListener(TimerEvent.TIMER, connectWait);
_timer.start();
return (_clip);
}
public static function connect(_arg1:String, _arg2:Object, _arg3:Object=null):void{
var id = _arg1;
var clip = _arg2;
var onError = _arg3;
warnID(id, false);
if ((clip is DisplayObject)){
if (clip.stage == null){
trace("MochiServices connect requires the containing clip be attached to the stage");
};
if (((!(_connected)) && ((_clip == null)))){
trace("MochiServices Connecting...");
_connecting = true;
init(id, clip);
};
} else {
trace("Error, MochiServices requires a Sprite, Movieclip or instance of the stage.");
};
if (onError != null){
MochiServices.onError = onError;
} else {
if (MochiServices.onError == null){
MochiServices.onError = function (_arg1:String):void{
trace(_arg1);
};
};
};
}
public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number, _arg4:Boolean=true):MovieClip{
var parent = _arg1;
var name = _arg2;
var depth = _arg3;
var doAdd = _arg4;
var mc:MovieClip = new MovieClip();
if (doAdd){
if (((false) && (depth))){
parent.addChildAt(mc, depth);
} else {
parent.addChild(mc);
};
};
try {
parent[name] = mc;
} catch(e:Error) {
throw (new Error("MochiServices requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
};
mc["_name"] = name;
return (mc);
}
public static function bringToTop(_arg1:Event=null):void{
var e = _arg1;
if (((!((MochiServices.clip == null))) && (!((MochiServices.childClip == null))))){
try {
if (MochiServices.clip.numChildren > 1){
MochiServices.clip.setChildIndex(MochiServices.childClip, (MochiServices.clip.numChildren - 1));
};
} catch(errorObject:Error) {
trace("Warning: Depth sort error.");
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
};
};
}
public static function connectWait(_arg1:TimerEvent):void{
if (!_connected){
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load. (timeout)");
MochiServices.disconnect();
MochiServices.onError("IOError");
};
}
}
}//package mochi.as3
Section 43
//MochiSync (mochi.as3.MochiSync)
package mochi.as3 {
import flash.utils.*;
public dynamic class MochiSync extends Proxy {
private var _syncContainer:Object;
public static var SYNC_PROPERTY:String = "UpdateProperty";
public static var SYNC_REQUEST:String = "SyncRequest";
public function MochiSync():void{
_syncContainer = {};
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function setProperty(_arg1, _arg2):void{
if (_syncContainer[_arg1] == _arg2){
return;
};
var _local3:String = _arg1.toString();
_syncContainer[_local3] = _arg2;
MochiServices.send("sync_propUpdate", {name:_local3, value:_arg2});
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function getProperty(_arg1){
return (_syncContainer[_arg1]);
}
public function triggerEvent(_arg1:String, _arg2:Object):void{
switch (_arg1){
case SYNC_REQUEST:
MochiServices.send("sync_syncronize", _syncContainer);
break;
case SYNC_PROPERTY:
_syncContainer[_arg2.name] = _arg2.value;
break;
};
}
}
}//package mochi.as3
Section 44
//MochiUserData (mochi.as3.MochiUserData)
package mochi.as3 {
import flash.events.*;
import flash.utils.*;
import flash.net.*;
public class MochiUserData extends EventDispatcher {
public var callback:Function;// = null
public var operation:String;// = null
public var error:Event;// = null
public var data;// = null
public var _loader:URLLoader;
public var key:String;// = null
public function MochiUserData(_arg1:String="", _arg2:Function=null){
this.key = _arg1;
this.callback = _arg2;
}
public function serialize(_arg1):ByteArray{
var _local2:ByteArray = new ByteArray();
_local2.objectEncoding = ObjectEncoding.AMF3;
_local2.writeObject(_arg1);
_local2.compress();
return (_local2);
}
public function errorHandler(_arg1:IOErrorEvent):void{
data = null;
error = _arg1;
if (callback != null){
performCallback();
} else {
dispatchEvent(_arg1);
};
close();
}
public function putEvent(_arg1):void{
request("put", serialize(_arg1));
}
public function deserialize(_arg1:ByteArray){
_arg1.objectEncoding = ObjectEncoding.AMF3;
_arg1.uncompress();
return (_arg1.readObject());
}
public function securityErrorHandler(_arg1:SecurityErrorEvent):void{
errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + _arg1.toString())));
}
public function getEvent():void{
request("get", serialize(null));
}
override public function toString():String{
return ((((((((("[MochiUserData operation=" + operation) + " key=\"") + key) + "\" data=") + data) + " error=\"") + error) + "\"]"));
}
public function performCallback():void{
try {
callback(this);
} catch(e:Error) {
trace(("[MochiUserData] exception during callback: " + e));
};
}
public function request(_arg1:String, _arg2:ByteArray):void{
var _operation = _arg1;
var _data = _arg2;
operation = _operation;
var api_url:String = MochiCoins.getAPIURL();
var api_token:String = MochiCoins.getAPIToken();
if ((((api_url == null)) || ((api_token == null)))){
errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, "not logged in"));
return;
};
_loader = new URLLoader();
var args:URLVariables = new URLVariables();
args.op = _operation;
args.key = key;
var req:URLRequest = new URLRequest((((MochiCoins.getAPIURL() + "/") + "MochiUserData?") + args.toString()));
req.method = URLRequestMethod.POST;
req.contentType = "application/x-mochi-userdata";
req.requestHeaders = [new URLRequestHeader("x-mochi-services-version", MochiServices.getVersion()), new URLRequestHeader("x-mochi-api-token", api_token)];
req.data = _data;
_loader.dataFormat = URLLoaderDataFormat.BINARY;
_loader.addEventListener(Event.COMPLETE, completeHandler);
_loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
try {
_loader.load(req);
} catch(e:SecurityError) {
errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + e.toString())));
};
}
public function completeHandler(_arg1:Event):void{
var event = _arg1;
try {
if (_loader.data.length){
data = deserialize(_loader.data);
} else {
data = null;
};
} catch(e:Error) {
errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("deserialize error: " + e.toString())));
return;
};
if (callback != null){
performCallback();
} else {
dispatchEvent(event);
};
close();
}
public function close():void{
if (_loader){
_loader.removeEventListener(Event.COMPLETE, completeHandler);
_loader.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler);
_loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
_loader.close();
_loader = null;
};
error = null;
callback = null;
}
public static function get(_arg1:String, _arg2:Function):void{
var _local3:MochiUserData = new MochiUserData(_arg1, _arg2);
_local3.getEvent();
}
public static function put(_arg1:String, _arg2, _arg3:Function):void{
var _local4:MochiUserData = new MochiUserData(_arg1, _arg3);
_local4.putEvent(_arg2);
}
}
}//package mochi.as3
Section 45
//EdgeMetrics (mx.core.EdgeMetrics)
package mx.core {
public class EdgeMetrics {
public var top:Number;
public var left:Number;
public var bottom:Number;
public var right:Number;
mx_internal static const VERSION:String = "3.0.0.0";
public static const EMPTY:EdgeMetrics = new EdgeMetrics(0, 0, 0, 0);
;
public function EdgeMetrics(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0){
this.left = _arg1;
this.top = _arg2;
this.right = _arg3;
this.bottom = _arg4;
}
public function clone():EdgeMetrics{
return (new EdgeMetrics(left, top, right, bottom));
}
}
}//package mx.core
Section 46
//FlexMovieClip (mx.core.FlexMovieClip)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexMovieClip extends MovieClip {
mx_internal static const VERSION:String = "3.0.0.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 47
//FlexSprite (mx.core.FlexSprite)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexSprite extends Sprite {
mx_internal static const VERSION:String = "3.0.0.0";
public function FlexSprite(){
super();
try {
name = NameUtil.createUniqueName(this);
} catch(e:Error) {
};
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 48
//IBorder (mx.core.IBorder)
package mx.core {
public interface IBorder {
function get borderMetrics():EdgeMetrics;
}
}//package mx.core
Section 49
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 50
//IFlexDisplayObject (mx.core.IFlexDisplayObject)
package mx.core {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.accessibility.*;
public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher {
function get visible():Boolean;
function get rotation():Number;
function localToGlobal(_arg1:Point):Point;
function get name():String;
function set width(_arg1:Number):void;
function get measuredHeight():Number;
function get blendMode():String;
function get scale9Grid():Rectangle;
function set name(_arg1:String):void;
function set scaleX(_arg1:Number):void;
function set scaleY(_arg1:Number):void;
function get measuredWidth():Number;
function get accessibilityProperties():AccessibilityProperties;
function set scrollRect(_arg1:Rectangle):void;
function get cacheAsBitmap():Boolean;
function globalToLocal(_arg1:Point):Point;
function get height():Number;
function set blendMode(_arg1:String):void;
function get parent():DisplayObjectContainer;
function getBounds(_arg1:DisplayObject):Rectangle;
function get opaqueBackground():Object;
function set scale9Grid(_arg1:Rectangle):void;
function setActualSize(_arg1:Number, _arg2:Number):void;
function set alpha(_arg1:Number):void;
function set accessibilityProperties(_arg1:AccessibilityProperties):void;
function get width():Number;
function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean;
function set cacheAsBitmap(_arg1:Boolean):void;
function get scaleX():Number;
function get scaleY():Number;
function get scrollRect():Rectangle;
function get mouseX():Number;
function get mouseY():Number;
function set height(_arg1:Number):void;
function set mask(_arg1:DisplayObject):void;
function getRect(_arg1:DisplayObject):Rectangle;
function get alpha():Number;
function set transform(_arg1:Transform):void;
function move(_arg1:Number, _arg2:Number):void;
function get loaderInfo():LoaderInfo;
function get root():DisplayObject;
function hitTestObject(_arg1:DisplayObject):Boolean;
function set opaqueBackground(_arg1:Object):void;
function set visible(_arg1:Boolean):void;
function get mask():DisplayObject;
function set x(_arg1:Number):void;
function set y(_arg1:Number):void;
function get transform():Transform;
function set filters(_arg1:Array):void;
function get x():Number;
function get y():Number;
function get filters():Array;
function set rotation(_arg1:Number):void;
function get stage():Stage;
}
}//package mx.core
Section 51
//IRepeaterClient (mx.core.IRepeaterClient)
package mx.core {
public interface IRepeaterClient {
function get instanceIndices():Array;
function set instanceIndices(_arg1:Array):void;
function get isDocument():Boolean;
function set repeaters(_arg1:Array):void;
function initializeRepeaterArrays(_arg1:IRepeaterClient):void;
function get repeaters():Array;
function set repeaterIndices(_arg1:Array):void;
function get repeaterIndices():Array;
}
}//package mx.core
Section 52
//MovieClipAsset (mx.core.MovieClipAsset)
package mx.core {
public class MovieClipAsset extends FlexMovieClip implements IFlexAsset, IFlexDisplayObject, IBorder {
private var _measuredHeight:Number;
private var _measuredWidth:Number;
mx_internal static const VERSION:String = "3.0.0.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;
}
public function get borderMetrics():EdgeMetrics{
if (scale9Grid == null){
return (EdgeMetrics.EMPTY);
};
return (new EdgeMetrics(scale9Grid.left, scale9Grid.top, Math.ceil((measuredWidth - scale9Grid.right)), Math.ceil((measuredHeight - scale9Grid.bottom))));
}
}
}//package mx.core
Section 53
//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 54
//SoundAsset (mx.core.SoundAsset)
package mx.core {
import flash.media.*;
public class SoundAsset extends Sound implements IFlexAsset {
mx_internal static const VERSION:String = "3.0.0.0";
}
}//package mx.core
Section 55
//SpriteAsset (mx.core.SpriteAsset)
package mx.core {
public class SpriteAsset extends FlexSprite implements IFlexAsset, IFlexDisplayObject, IBorder {
private var _measuredHeight:Number;
private var _measuredWidth:Number;
mx_internal static const VERSION:String = "3.0.0.0";
public function SpriteAsset(){
_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;
}
public function get borderMetrics():EdgeMetrics{
if (scale9Grid == null){
return (EdgeMetrics.EMPTY);
};
return (new EdgeMetrics(scale9Grid.left, scale9Grid.top, Math.ceil((measuredWidth - scale9Grid.right)), Math.ceil((measuredHeight - scale9Grid.bottom))));
}
}
}//package mx.core
Section 56
//NameUtil (mx.utils.NameUtil)
package mx.utils {
import flash.display.*;
import mx.core.*;
import flash.utils.*;
public class NameUtil {
mx_internal static const VERSION:String = "3.0.0.0";
private static var counter:int = 0;
public static function displayObjectToString(_arg1:DisplayObject):String{
var _local2:String;
var _local4:String;
var _local5:Array;
var _local3:DisplayObject = _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{
if (!_arg1){
return (null);
};
var _local2:String = getQualifiedClassName(_arg1);
var _local3:int = _local2.indexOf("::");
if (_local3 != -1){
_local2 = _local2.substr((_local3 + 2));
};
var _local4:int = _local2.charCodeAt((_local2.length - 1));
if ((((_local4 >= 48)) && ((_local4 <= 57)))){
_local2 = (_local2 + "_");
};
return ((_local2 + counter++));
}
}
}//package mx.utils
Section 57
//Inflater (nochump.util.zip.Inflater)
package nochump.util.zip {
import flash.utils.*;
public class Inflater {
private var lencode:Object;
private var bitbuf:int;
private var distcode:Object;
private var incnt:uint;
private var inbuf:ByteArray;
private var bitcnt:int;
private static const LENS:Array = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258];
private static const MAXDCODES:int = 30;
private static const MAXCODES:int = (MAXLCODES + MAXDCODES);
private static const MAXBITS:int = 15;
private static const MAXLCODES:int = 286;
private static const FIXLCODES:int = 288;
private static const LEXT:Array = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];
private static const DISTS:Array = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 0x0101, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577];
private static const DEXT:Array = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];
private function bits(_arg1:int):int{
var _local2:int;
_local2 = bitbuf;
while (bitcnt < _arg1) {
if (incnt == inbuf.length){
throw (new Error("available inflate data did not terminate", 2));
};
_local2 = (_local2 | (inbuf[incnt++] << bitcnt));
bitcnt = (bitcnt + 8);
};
bitbuf = (_local2 >> _arg1);
bitcnt = (bitcnt - _arg1);
return ((_local2 & ((1 << _arg1) - 1)));
}
public function inflate(_arg1:ByteArray):uint{
var _local2:int;
var _local3:*;
var _local4:*;
incnt = (bitbuf = (bitcnt = 0));
_local2 = 0;
do {
_local3 = bits(1);
_local4 = bits(2);
if (_local4 == 0){
stored(_arg1);
} else {
if (_local4 == 3){
throw (new Error("invalid block type (type == 3)", -1));
};
lencode = {count:[], symbol:[]};
distcode = {count:[], symbol:[]};
if (_local4 == 1){
constructFixedTables();
} else {
if (_local4 == 2){
_local2 = constructDynamicTables();
};
};
if (_local2 != 0){
return (_local2);
};
_local2 = codes(_arg1);
};
} while (_local2 == 0);
return (_local2);
}
public function setInput(_arg1:ByteArray):void{
inbuf = _arg1;
inbuf.endian = Endian.LITTLE_ENDIAN;
}
private function construct(_arg1:Object, _arg2:Array, _arg3:int):int{
var _local4:Array;
var _local5:int;
var _local6:int;
var _local7:int;
_local4 = [];
_local5 = 0;
while (_local5 <= MAXBITS) {
_arg1.count[_local5] = 0;
_local5++;
};
_local6 = 0;
while (_local6 < _arg3) {
var _local8 = _arg1.count;
var _local9 = _arg2[_local6];
var _local10 = (_local8[_local9] + 1);
_local8[_local9] = _local10;
_local6++;
};
if (_arg1.count[0] == _arg3){
return (0);
};
_local7 = 1;
_local5 = 1;
while (_local5 <= MAXBITS) {
_local7 = (_local7 << 1);
_local7 = (_local7 - _arg1.count[_local5]);
if (_local7 < 0){
return (_local7);
};
_local5++;
};
_local4[1] = 0;
_local5 = 1;
while (_local5 < MAXBITS) {
_local4[(_local5 + 1)] = (_local4[_local5] + _arg1.count[_local5]);
_local5++;
};
_local6 = 0;
while (_local6 < _arg3) {
if (_arg2[_local6] != 0){
_local9 = _local4;
_local10 = _arg2[_local6];
var _local11 = (_local9[_local10] + 1);
_local9[_local10] = _local11;
_local8 = _local9[_local10];
_arg1.symbol[_local8] = _local6;
};
_local6++;
};
return (_local7);
}
private function constructFixedTables():void{
var _local1:Array;
var _local2:int;
_local1 = [];
_local2 = 0;
while (_local2 < 144) {
_local1[_local2] = 8;
_local2++;
};
while (_local2 < 0x0100) {
_local1[_local2] = 9;
_local2++;
};
while (_local2 < 280) {
_local1[_local2] = 7;
_local2++;
};
while (_local2 < FIXLCODES) {
_local1[_local2] = 8;
_local2++;
};
construct(lencode, _local1, FIXLCODES);
_local2 = 0;
while (_local2 < MAXDCODES) {
_local1[_local2] = 5;
_local2++;
};
construct(distcode, _local1, MAXDCODES);
}
private function stored(_arg1:ByteArray):void{
var _local2:uint;
bitbuf = 0;
bitcnt = 0;
if ((incnt + 4) > inbuf.length){
throw (new Error("available inflate data did not terminate", 2));
};
_local2 = inbuf[incnt++];
var _temp1 = _local2;
_local2 = (_temp1 | (inbuf[++] << 8));
if (((!((inbuf[incnt++] == (~(_local2) & 0xFF)))) || (!((inbuf[incnt++] == ((~(_local2) >> 8) & 0xFF)))))){
throw (new Error("stored block length did not match one's complement", -2));
};
if ((incnt + _local2) > inbuf.length){
throw (new Error("available inflate data did not terminate", 2));
};
while (_local2--) {
_arg1[_arg1.length] = inbuf[incnt++];
};
}
private function constructDynamicTables():int{
var _local1:Array;
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local1 = [];
_local2 = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
_local3 = (bits(5) + 0x0101);
_local4 = (bits(5) + 1);
_local5 = (bits(4) + 4);
if ((((_local3 > MAXLCODES)) || ((_local4 > MAXDCODES)))){
throw (new Error("dynamic block code description: too many length or distance codes", -3));
};
_local6 = 0;
while (_local6 < _local5) {
_local1[_local2[_local6]] = bits(3);
_local6++;
};
while (_local6 < 19) {
_local1[_local2[_local6]] = 0;
_local6++;
};
_local7 = construct(lencode, _local1, 19);
if (_local7 != 0){
throw (new Error("dynamic block code description: code lengths codes incomplete", -4));
};
_local6 = 0;
while (_local6 < (_local3 + _local4)) {
_local8 = decode(lencode);
if (_local8 < 16){
var _temp1 = _local6;
_local6 = (_local6 + 1);
var _local10 = _temp1;
_local1[_local10] = _local8;
} else {
_local9 = 0;
if (_local8 == 16){
if (_local6 == 0){
throw (new Error("dynamic block code description: repeat lengths with no first length", -5));
};
_local9 = _local1[(_local6 - 1)];
_local8 = (3 + bits(2));
} else {
if (_local8 == 17){
_local8 = (3 + bits(3));
} else {
_local8 = (11 + bits(7));
};
};
if ((_local6 + _local8) > (_local3 + _local4)){
throw (new Error("dynamic block code description: repeat more than specified lengths", -6));
};
while (_local8--) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local10 = _temp2;
_local1[_local10] = _local9;
};
};
};
_local7 = construct(lencode, _local1, _local3);
if ((((_local7 < 0)) || ((((_local7 > 0)) && (!(((_local3 - lencode.count[0]) == 1))))))){
throw (new Error("dynamic block code description: invalid literal/length code lengths", -7));
};
_local7 = construct(distcode, _local1.slice(_local3), _local4);
if ((((_local7 < 0)) || ((((_local7 > 0)) && (!(((_local4 - distcode.count[0]) == 1))))))){
throw (new Error("dynamic block code description: invalid distance code lengths", -8));
};
return (_local7);
}
private function decode(_arg1:Object):int{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local2 = 0;
_local3 = 0;
_local4 = 0;
_local5 = 1;
while (_local5 <= MAXBITS) {
_local2 = (_local2 | bits(1));
_local6 = _arg1.count[_local5];
if (_local2 < (_local3 + _local6)){
return (_arg1.symbol[(_local4 + (_local2 - _local3))]);
};
_local4 = (_local4 + _local6);
_local3 = (_local3 + _local6);
_local3 = (_local3 << 1);
_local2 = (_local2 << 1);
_local5++;
};
return (-9);
}
private function codes(_arg1:ByteArray):int{
var _local2:*;
var _local3:*;
var _local4:*;
do {
_local2 = decode(lencode);
if (_local2 < 0){
return (_local2);
};
if (_local2 < 0x0100){
_arg1[_arg1.length] = _local2;
} else {
if (_local2 > 0x0100){
_local2 = (_local2 - 0x0101);
if (_local2 >= 29){
throw (new Error("invalid literal/length or distance code in fixed or dynamic block", -9));
};
_local3 = (LENS[_local2] + bits(LEXT[_local2]));
_local2 = decode(distcode);
if (_local2 < 0){
return (_local2);
};
_local4 = (DISTS[_local2] + bits(DEXT[_local2]));
if (_local4 > _arg1.length){
throw (new Error("distance is too far back in fixed or dynamic block", -10));
};
while (_local3--) {
_arg1[_arg1.length] = _arg1[(_arg1.length - _local4)];
};
};
};
} while (_local2 != 0x0100);
return (0);
}
}
}//package nochump.util.zip
Section 58
//ZipConstants (nochump.util.zip.ZipConstants)
package nochump.util.zip {
class ZipConstants {
static const ENDOFF:uint = 16;
static const CENSIG:uint = 33639248;
static const CENNAM:uint = 28;
static const EXTSIG:uint = 134695760;
static const LOCSIG:uint = 67324752;
static const ENDSIG:uint = 101010256;
static const CENVER:uint = 6;
static const DEFLATED:uint = 8;
static const LOCNAM:uint = 26;
static const ENDTOT:uint = 10;
static const LOCVER:uint = 4;
static const CENHDR:uint = 46;
static const CENOFF:uint = 42;
static const EXTHDR:uint = 16;
static const LOCHDR:uint = 30;
static const STORED:uint = 0;
static const ENDHDR:uint = 22;
}
}//package nochump.util.zip
Section 59
//ZipEntry (nochump.util.zip.ZipEntry)
package nochump.util.zip {
import flash.utils.*;
public class ZipEntry {
private var _compressedSize:int;// = -1
private var _extra:ByteArray;
var offset:int;
private var _crc:uint;
var dostime:uint;
var version:int;
private var _size:int;// = -1
private var _method:int;// = -1
private var _comment:String;
private var _name:String;
var flag:int;
public function ZipEntry(_arg1:String){
_size = -1;
_compressedSize = -1;
_method = -1;
super();
_name = _arg1;
}
public function get compressedSize():int{
return (_compressedSize);
}
public function set size(_arg1:int):void{
_size = _arg1;
}
public function get name():String{
return (_name);
}
public function get time():Number{
var _local1:Date;
_local1 = new Date((((dostime >> 25) & 127) + 1980), (((dostime >> 21) & 15) - 1), ((dostime >> 16) & 31), ((dostime >> 11) & 31), ((dostime >> 5) & 63), ((dostime & 31) << 1));
return (_local1.time);
}
public function get size():int{
return (_size);
}
public function get extra():ByteArray{
return (_extra);
}
public function set time(_arg1:Number):void{
var _local2:Date;
_local2 = new Date(_arg1);
dostime = ((((((((_local2.fullYear - 1980) & 127) << 25) | ((_local2.month + 1) << 21)) | (_local2.day << 16)) | (_local2.hours << 11)) | (_local2.minutes << 5)) | (_local2.seconds >> 1));
}
public function get crc():uint{
return (_crc);
}
public function get method():int{
return (_method);
}
public function isDirectory():Boolean{
return ((_name.charAt((_name.length - 1)) == "/"));
}
public function set method(_arg1:int):void{
_method = _arg1;
}
public function set crc(_arg1:uint):void{
_crc = _arg1;
}
public function get comment():String{
return (_comment);
}
public function set extra(_arg1:ByteArray):void{
_extra = _arg1;
}
public function toString():String{
return (_name);
}
public function set compressedSize(_arg1:int):void{
_compressedSize = _arg1;
}
public function set comment(_arg1:String):void{
_comment = _arg1;
}
}
}//package nochump.util.zip
Section 60
//ZipError (nochump.util.zip.ZipError)
package nochump.util.zip {
import flash.errors.*;
public class ZipError extends IOError {
public function ZipError(_arg1:String="", _arg2:int=0){
super(_arg1, _arg2);
}
}
}//package nochump.util.zip
Section 61
//ZipFile (nochump.util.zip.ZipFile)
package nochump.util.zip {
import flash.utils.*;
import flash.system.*;
public class ZipFile {
private var entryList:Array;
private var buf:ByteArray;
private var locOffsetTable:Dictionary;
private var entryTable:Dictionary;
public function ZipFile(_arg1:IDataInput){
buf = new ByteArray();
buf.endian = Endian.LITTLE_ENDIAN;
_arg1.readBytes(buf);
readEntries();
}
private function findEND():uint{
var _local1:uint;
var _local2:uint;
_local1 = (buf.length - ZipConstants.ENDHDR);
_local2 = Math.max(0, (_local1 - 0xFFFF));
while (_local1 >= _local2) {
if (buf[_local1] != 80){
} else {
buf.position = _local1;
if (buf.readUnsignedInt() == ZipConstants.ENDSIG){
return (_local1);
};
};
_local1--;
};
throw (new ZipError("invalid zip"));
}
public function getEntry(_arg1:String):ZipEntry{
return (entryTable[_arg1]);
}
private function readEND():void{
var _local1:ByteArray;
_local1 = new ByteArray();
_local1.endian = Endian.LITTLE_ENDIAN;
buf.position = findEND();
buf.readBytes(_local1, 0, ZipConstants.ENDHDR);
_local1.position = ZipConstants.ENDTOT;
entryList = new Array(_local1.readUnsignedShort());
_local1.position = ZipConstants.ENDOFF;
buf.position = _local1.readUnsignedInt();
}
public function get size():uint{
return (entryList.length);
}
private function readEntries():void{
var _local1:uint;
var _local2:ByteArray;
var _local3:uint;
var _local4:ZipEntry;
readEND();
entryTable = new Dictionary();
locOffsetTable = new Dictionary();
_local1 = 0;
while (_local1 < entryList.length) {
_local2 = new ByteArray();
_local2.endian = Endian.LITTLE_ENDIAN;
buf.readBytes(_local2, 0, ZipConstants.CENHDR);
if (_local2.readUnsignedInt() != ZipConstants.CENSIG){
throw (new ZipError("invalid CEN header (bad signature)"));
};
_local2.position = ZipConstants.CENNAM;
_local3 = _local2.readUnsignedShort();
if (_local3 == 0){
throw (new ZipError("missing entry name"));
};
_local4 = new ZipEntry(buf.readUTFBytes(_local3));
_local3 = _local2.readUnsignedShort();
_local4.extra = new ByteArray();
if (_local3 > 0){
buf.readBytes(_local4.extra, 0, _local3);
};
buf.position = (buf.position + _local2.readUnsignedShort());
_local2.position = ZipConstants.CENVER;
_local4.version = _local2.readUnsignedShort();
_local4.flag = _local2.readUnsignedShort();
if ((_local4.flag & 1) == 1){
throw (new ZipError("encrypted ZIP entry not supported"));
};
_local4.method = _local2.readUnsignedShort();
_local4.dostime = _local2.readUnsignedInt();
_local4.crc = _local2.readUnsignedInt();
_local4.compressedSize = _local2.readUnsignedInt();
_local4.size = _local2.readUnsignedInt();
entryList[_local1] = _local4;
entryTable[_local4.name] = _local4;
_local2.position = ZipConstants.CENOFF;
locOffsetTable[_local4.name] = _local2.readUnsignedInt();
_local1++;
};
}
public function getInput(_arg1:ZipEntry):ByteArray{
var _local2:uint;
var _local3:ByteArray;
var _local4:ByteArray;
var _local5:Inflater;
buf.position = ((locOffsetTable[_arg1.name] + ZipConstants.LOCHDR) - 2);
_local2 = buf.readShort();
buf.position = (buf.position + (_arg1.name.length + _local2));
_local3 = new ByteArray();
if (_arg1.compressedSize > 0){
buf.readBytes(_local3, 0, _arg1.compressedSize);
};
switch (_arg1.method){
case ZipConstants.STORED:
return (_local3);
case ZipConstants.DEFLATED:
if (Security.sandboxType == Security.APPLICATION){
_local3.inflate();
return (_local3);
};
_local4 = new ByteArray();
_local5 = new Inflater();
_local5.setInput(_local3);
_local5.inflate(_local4);
return (_local4);
default:
throw (new ZipError("invalid compression method"));
};
}
public function get entries():Array{
return (entryList);
}
}
}//package nochump.util.zip
Section 62
//ArmorIntroScreen (screens.ArmorIntroScreen)
package screens {
import flash.events.*;
import flash.display.*;
import flesh.*;
import flash.net.*;
public dynamic class ArmorIntroScreen extends Screen {
public var engine:Engine;
private var armorSplash:MovieClip;
public static const BUTTON_INSTANCE_NAMES:Array = new Array("splash");
public function ArmorIntroScreen(_arg1:Engine){
super("armor");
this.engine = _arg1;
linkButtons(BUTTON_INSTANCE_NAMES);
this.scaleMouseButton = false;
armorSplash = this["splash"];
armorSplash.visible = false;
trace(("armorSplash = " + armorSplash));
}
override public function buttonClickedId(_arg1:String):void{
switch (_arg1){
case "armorSplash":
navigateToURL(new URLRequest("http://www.armorgames.com"), "_blank");
break;
};
}
override public function keyDown(_arg1:KeyboardEvent):void{
}
override public function notifyScreenEntered():void{
if (armorSplash){
armorSplash.gotoAndPlay(1);
};
armorSplash.addEventListener(Event.ENTER_FRAME, updateAnim);
}
public function updateAnim(_arg1:Event):void{
armorSplash.visible = true;
if (armorSplash.currentFrame == armorSplash.totalFrames){
armorSplash.stop();
armorSplash.removeEventListener(Event.ENTER_FRAME, updateAnim);
engine.openTitle();
};
}
override public function firePressed():void{
}
}
}//package screens
Section 63
//CreditsScreen (screens.CreditsScreen)
package screens {
import flash.events.*;
import flesh.*;
import flash.net.*;
public dynamic class CreditsScreen extends Screen {
public var engine:Engine;
public static const BUTTON_INSTANCE_NAMES:Array = new Array("buttonDick", "buttonRicky", "buttonKwok", "buttonOktomusic", "buttonMark", "buttonKokoromi", "buttonHoneyslug");
public function CreditsScreen(_arg1:Engine){
super("credits");
this.engine = _arg1;
linkButtons(BUTTON_INSTANCE_NAMES);
this.scaleMouseButton = false;
}
override public function buttonClickedId(_arg1:String):void{
switch (_arg1){
case "buttonDick":
navigateToURL(new URLRequest("http://www.h099.com"), "_blank");
break;
case "buttonRicky":
navigateToURL(new URLRequest("http://twitter.com/KommanderKlobb"), "_blank");
break;
case "buttonKwok":
navigateToURL(new URLRequest("http://www.kwokfunglam.com"), "_blank");
break;
case "buttonOktomusic":
navigateToURL(new URLRequest("http://www.oktomusic.co.uk"), "_blank");
break;
case "buttonMark":
navigateToURL(new URLRequest("http://twitter.com/Honeyslug"), "_blank");
break;
case "buttonKokoromi":
navigateToURL(new URLRequest("http://www.kokoromi.org"), "_blank");
break;
case "buttonHoneyslug":
navigateToURL(new URLRequest("http://www.honeyslug.com"), "_blank");
break;
};
}
override public function keyDown(_arg1:KeyboardEvent):void{
engine.openTitle();
}
override public function update(_arg1:Number):void{
}
override public function notifyScreenEntered():void{
}
override public function firePressed():void{
}
}
}//package screens
Section 64
//EndScreen (screens.EndScreen)
package screens {
import flash.events.*;
import flash.display.*;
import flesh.*;
import flash.net.*;
public dynamic class EndScreen extends Screen {
public var engine:Engine;
public var timeOnThisScreen:Number;
public static const BUTTON_COUNT:uint = 1;
public static const BUTTON_SUBMIT_SCORE:uint = 0;
public static const BUTTON_INSTANCE_NAMES:Array = new Array("buttonScoreSubmit");
public function EndScreen(_arg1:Engine){
super("end");
linkButtons(BUTTON_INSTANCE_NAMES);
this.engine = _arg1;
this.scaleMouseButton = false;
}
override public function keyDown(_arg1:KeyboardEvent):void{
switch (Engine.PORTAL){
case Portals.GIMME5:
if (engine.g5HiScores.visible){
return;
};
break;
case Portals.ARMOR:
if (engine.armorGamesInterface.isHighScoreVisible()){
return;
};
break;
};
if (timeOnThisScreen > 2){
engine.openTitle();
};
}
override public function buttonClicked(_arg1:uint):void{
switch (_arg1){
case BUTTON_SUBMIT_SCORE:
engine.submitHighScore(World.instance.score);
this["buttonScoreSubmit"].visible = false;
break;
};
}
override public function update(_arg1:Number):void{
timeOnThisScreen = (timeOnThisScreen + _arg1);
if ((((Engine.PORTAL == Portals.GIMME5)) && ((timeOnThisScreen > 3)))){
engine.openScreen("g5HighScore");
};
}
override public function notifyScreenEntered():void{
this["playerScoreText"].text = ("You scored: " + World.instance.score);
this["highScoreText"].text = ("High score: " + engine.highScore);
this["highScoreText"].visible = false;
timeOnThisScreen = 0;
this["buttonScoreSubmit"].visible = true;
}
override public function firePressed():void{
}
}
}//package screens
Section 65
//G5HighScoreScreen (screens.G5HighScoreScreen)
package screens {
import flesh.*;
public dynamic class G5HighScoreScreen extends Screen {
public var engine:Engine;
public static const BUTTON_INSTANCE_NAMES:Array = new Array("buttonReturn");
public function G5HighScoreScreen(_arg1:Engine){
super("g5HighScore");
this.engine = _arg1;
linkButtons(BUTTON_INSTANCE_NAMES);
this.scaleMouseButton = false;
}
override public function buttonClickedId(_arg1:String):void{
switch (_arg1){
case "buttonReturn":
engine.g5HiScores.visible = false;
engine.openTitle();
break;
};
}
override public function notifyScreenEntered():void{
}
override public function firePressed():void{
}
}
}//package screens
Section 66
//G5IntroScreen (screens.G5IntroScreen)
package screens {
import flash.events.*;
import flash.display.*;
import flesh.*;
import flash.net.*;
public dynamic class G5IntroScreen extends Screen {
public var engine:Engine;
private var splashClip:MovieClip;
public static const BUTTON_INSTANCE_NAMES:Array = new Array("splash", "buttonPlay");
public function G5IntroScreen(_arg1:Engine){
super("g5");
this.engine = _arg1;
linkButtons(BUTTON_INSTANCE_NAMES);
this.scaleMouseButton = false;
splashClip = this["splash"];
splashClip.visible = false;
this["buttonPlay"].visible = false;
this["buttonPlay"].gotoAndStop(1);
this["buttonPlay"].addEventListener(MouseEvent.MOUSE_OVER, mouseOverPlayButton);
this["buttonPlay"].addEventListener(MouseEvent.MOUSE_OUT, mouseOutPlayButton);
}
override public function buttonClickedId(_arg1:String):void{
switch (_arg1){
case "splash":
navigateToURL(new URLRequest("http://www.gimme5games.com/?ref=poto-and-cabenga_SPLASH"), "_blank");
break;
case "buttonPlay":
MochiBot.track(this, "2484d7f5");
engine.openTitle();
break;
};
}
override public function keyDown(_arg1:KeyboardEvent):void{
}
public function mouseOutPlayButton(_arg1:Event):void{
this["buttonPlay"].gotoAndStop(1);
}
override public function notifyScreenEntered():void{
if (splashClip){
splashClip.gotoAndPlay(1);
};
splashClip.addEventListener(Event.ENTER_FRAME, updateAnim);
}
public function updateAnim(_arg1:Event):void{
splashClip.visible = true;
if (splashClip.currentFrame == splashClip.totalFrames){
splashClip.stop();
splashClip.removeEventListener(Event.ENTER_FRAME, updateAnim);
this["buttonPlay"].visible = true;
};
}
override public function firePressed():void{
}
public function mouseOverPlayButton(_arg1:Event):void{
this["buttonPlay"].gotoAndStop(2);
}
}
}//package screens
Section 67
//GameScreen (screens.GameScreen)
package screens {
import flash.events.*;
import flash.display.*;
import flash.text.*;
import flesh.*;
import flash.net.*;
public dynamic class GameScreen extends Screen {
public var instructionsTime:Number;
public var engine:Engine;
public var eventText:TextField;
public var fadingInEventText:Boolean;
public var lastUpdateTime:Number;
public var displayScore:int;
public var instructionsText:TextField;
public var scoreText:TextField;
public static const BUTTON_NAME:String = "Space";
public function GameScreen(_arg1:Engine){
super("game");
this.engine = _arg1;
scoreText = this["scoreText"];
instructionsText = this["instructionsText"];
}
public function setLifeText(_arg1:Boolean, _arg2:int):void{
var _local3:TextField = (_arg1) ? this["topLivesText"] : this["bottomLivesText"];
_local3.text = ("" + _arg2);
}
public function reset():void{
scoreText.text = "";
scoreText.alpha = 0;
instructionsText.alpha = 0;
instructionsText.text = "";
this["newHighScore"].visible = false;
this["topLivesIcon"].alpha = (this["bottomLivesIcon"].alpha = 0);
this["topLivesText"].visible = false;
this["bottomLivesText"].visible = false;
}
override public function notifyScreenEntered():void{
instructionsText.y = 200;
}
public function setInstructionsText(_arg1:String):void{
instructionsText.text = _arg1;
instructionsText.alpha = 0;
instructionsTime = 0;
}
override public function update(_arg1:Number):void{
var _local2:Number = World.instance.levelTime;
if (((((World.instance.newHighScore) && ((_local2 > (World.TIME_END - 8))))) && ((_local2 < (World.TIME_END + 4))))){
this["newHighScore"].visible = ((Math.floor((_local2 * 2)) % 2) == 0);
} else {
this["newHighScore"].visible = false;
};
if ((((World.instance.levelTime > World.TIME_ENEMIES)) && ((this["topLivesIcon"].alpha < 1)))){
this["topLivesIcon"].alpha = (this["topLivesIcon"].alpha + _arg1);
this["bottomLivesIcon"].alpha = this["topLivesIcon"].alpha;
this["topLivesText"].visible = true;
this["bottomLivesText"].visible = true;
};
if (((!((scoreText.text == ""))) && ((scoreText.alpha < 1)))){
scoreText.alpha = (scoreText.alpha + _arg1);
};
if (instructionsText.text != ""){
if (instructionsTime < 6){
instructionsTime = (instructionsTime + _arg1);
instructionsText.alpha = (instructionsText.alpha + _arg1);
} else {
instructionsText.alpha = (instructionsText.alpha - _arg1);
if (instructionsText.alpha <= 0){
instructionsText.text = "";
};
};
};
if (Math.floor(lastUpdateTime) != Math.floor(World.instance.levelTime)){
switch (Math.floor(World.instance.levelTime)){
case 1:
setInstructionsText((("HOLD " + BUTTON_NAME) + " to DASH"));
break;
case 6:
setInstructionsText((("RELEASE " + BUTTON_NAME) + " to JUMP"));
break;
case (World.TIME_TOP_SCREEN_APPEARS + 2):
instructionsText.y = 100;
setInstructionsText((("PRESS " + BUTTON_NAME) + " to JUMP"));
break;
case (World.TIME_TOP_SCREEN_APPEARS + 7):
setInstructionsText((("DON'T HOLD " + BUTTON_NAME) + " to DASH"));
break;
case (World.TIME_ENEMIES - 1):
instructionsText.y = 200;
setInstructionsText("Avoid Beasties!");
break;
case (World.TIME_ENEMIES_FROM_BEHIND - 3):
setInstructionsText("Watch out Behind!");
break;
case World.TIME_SQUASHABLE_ENEMIES:
setInstructionsText("Some Beasties can be Squashed");
break;
case (World.TIME_BIG_ENEMIES - 3):
setInstructionsText("Eggs & Gut-Nodules clear Beasties!");
break;
case World.TIME_HARD:
setInstructionsText("Beastie Rush!");
break;
case World.TIME_SPEED_UP:
setInstructionsText("Speed Up!");
break;
};
};
lastUpdateTime = World.instance.levelTime;
}
override public function firePressed():void{
}
public function setScoreText(_arg1:int):void{
scoreText.text = ("" + _arg1);
}
}
}//package screens
Section 68
//TitleScreen (screens.TitleScreen)
package screens {
import flash.events.*;
import flash.display.*;
import flesh.*;
import flash.net.*;
public dynamic class TitleScreen extends Screen {
public var boardID:String;
public var engine:Engine;
public var creditsClip:MovieClip;
public var copyrightSprite:Sprite;
public var time:Number;
public var logoSprite:Sprite;
public var creditsId:int;
public var timeBeforeNextCredits:Number;
public var playedSound:Boolean;
public static const BUTTON_G5:uint = 4;
public static const INITIAL_TIME_BEFORE_CREDITS:Number = 5;
public static const BUTTON_ARMOR:uint = 3;
public static const TIME_BEFORE_LOGO_APPEARS:Number = 0.5;
public static const BUTTON_COUNT:uint = 5;
public static const BUTTON_INSTANCE_NAMES:Array = new Array("logo.buttonHighScoreSubmit", "logo.buttonViewHighScores", "copyright.creditsButton", "buttonArmor", "buttonG5");
public static const TIME_PER_CREDIT:Number = 3;
public static const BUTTON_VIEW_SCORES:uint = 1;
public static const TIME_BETWEEN_CREDITS:Number = 0;
public static const BUTTON_CREDITS:uint = 2;
public static const BUTTON_SUBMIT_SCORE:uint = 0;
public static const CREDITS:Array = new Array("ART & DESIGN BY RICHARD HOGG", "CODE & DESIGN BY RICKY HAGGETT", "ANIMATION BY KWOK FUNG LAM", "MUSIC BY DNR (WWW.DNRMUSIC.COM)", "TESTING & FEEDBACK BY MARK INMAN");
public function TitleScreen(_arg1:Engine){
super("title");
this.engine = _arg1;
linkButtons(BUTTON_INSTANCE_NAMES);
creditsClip = this["credits"];
copyrightSprite = this["copyright"];
logoSprite = this["logo"];
this.scaleMouseButton = false;
buttons[BUTTON_ARMOR].visible = (Engine.PORTAL == Portals.ARMOR);
buttons[BUTTON_G5].visible = (Engine.PORTAL == Portals.GIMME5);
}
override public function keyDown(_arg1:KeyboardEvent):void{
if ((((Engine.PORTAL == Portals.ARMOR)) && (engine.armorGamesInterface.isHighScoreVisible()))){
return;
};
if (((!((_arg1.keyCode == KeyCodes.F))) && ((time > (TIME_BEFORE_LOGO_APPEARS + 2))))){
Engine.instance.playSound("LEAF_COLLECT2");
engine.startGame();
};
}
override public function update(_arg1:Number):void{
var _local2:Number;
time = (time + _arg1);
if (time > TIME_BEFORE_LOGO_APPEARS){
if (!playedSound){
Engine.instance.playSound("FALL");
playedSound = true;
};
_local2 = (7 - logoSprite.y);
logoSprite.y = (logoSprite.y + (_local2 * 0.05));
if (Engine.PORTAL != Portals.NONE){
_local2 = (450 - copyrightSprite.y);
} else {
_local2 = (460 - copyrightSprite.y);
};
copyrightSprite.y = (copyrightSprite.y + (_local2 * 0.05));
};
timeBeforeNextCredits = (timeBeforeNextCredits - _arg1);
if (timeBeforeNextCredits < -(TIME_PER_CREDIT)){
_local2 = (-600 - creditsClip.x);
creditsClip.x = (creditsClip.x + (_local2 * 0.05));
if (Math.abs(_local2) < 10){
creditsId++;
if (creditsId >= CREDITS.length){
creditsId = 0;
};
creditsClip["creditsText"].text = CREDITS[creditsId];
creditsClip.x = 1000;
timeBeforeNextCredits = TIME_BETWEEN_CREDITS;
};
} else {
if (timeBeforeNextCredits < 0){
_local2 = (320 - creditsClip.x);
creditsClip.x = (creditsClip.x + (_local2 * 0.1));
};
};
}
override public function notifyScreenEntered():void{
playedSound = false;
buttons[BUTTON_SUBMIT_SCORE].visible = (Engine.instance.highScore > 0);
boardID = Engine.instance.scoresObject.f(0, "");
this["logo"]["highScoreText"].text = ("High score: " + engine.highScore);
logoSprite.y = -600;
copyrightSprite.y = 800;
creditsClip.x = 1000;
creditsId = 0;
creditsClip["creditsText"].text = CREDITS[creditsId];
time = 0;
timeBeforeNextCredits = INITIAL_TIME_BEFORE_CREDITS;
}
override public function buttonClicked(_arg1:uint):void{
switch (_arg1){
case BUTTON_VIEW_SCORES:
engine.viewScores();
break;
case BUTTON_G5:
navigateToURL(new URLRequest("http://www.gimme5games.com/?ref=poto-and-cabenga_TITLE"), "_blank");
break;
case BUTTON_ARMOR:
navigateToURL(new URLRequest("http://www.armorgames.com"), "_blank");
break;
case BUTTON_CREDITS:
engine.openScreen("credits");
break;
case BUTTON_SUBMIT_SCORE:
buttons[BUTTON_SUBMIT_SCORE].visible = false;
engine.submitHighScore(Engine.instance.highScore);
break;
};
}
}
}//package screens
Section 69
//App (App)
package {
import flash.events.*;
import flash.display.*;
import flash.text.*;
import flesh.*;
import flash.utils.*;
import mochi.as3.*;
import flash.system.*;
public dynamic class App extends Sprite {
private var needToAddEngineKeyListener:Boolean;
public var engine:Engine;
public var fpsCounter:FPSCounter;
public var _mochiads_game_id:String;// = "15693ddd8d40f3a7"
private var lastUpdateTime:Number;
public var key:KeyPoll;
public static const WIDTH:uint = 640;
public static const HEIGHT:uint = 480;
public static var instance:App;
public static var RoundedMask:Class = App_RoundedMask;
public function App(){
needToAddEngineKeyListener = false;
instance = this;
fpsCounter = new FPSCounter(600, 20, 0, World.VERSION);
}
public function onMochiConnectError(_arg1:String):void{
trace(("Mochi connect error: " + _arg1));
}
public function update(_arg1:Event):void{
var _local2:Number = getTimer();
var _local3:Number = ((_local2 - lastUpdateTime) / 1000);
lastUpdateTime = _local2;
fpsCounter.addTime(_local3);
if (needToAddEngineKeyListener){
needToAddEngineKeyListener = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN, engine.keyDown, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_UP, engine.keyUp, false, 0, true);
};
engine.update(_local3);
}
public function lockedToSiteFailed():void{
var _local1:TextField = new TextField();
_local1.width = 1000;
_local1.textColor = 0xFFFFFF;
_local1.x = (_local1.y = 10);
_local1.text = "This game is locked to a different domain - please email ricky@honeyslug.com if you’d like a version to host on your site.";
this.addChild(_local1);
engine.visible = false;
}
public function initGame():void{
trace("**** initGame()");
initEngine();
lastUpdateTime = getTimer();
stageIsNotNull(null);
}
public function initEngine():void{
engine = new Engine(this);
checkDomainLock();
engine.scaleX = (engine.scaleY = 1);
var _local1:Sprite = new RoundedMask();
this.addChild(_local1);
engine.mask = _local1;
this.addChild(engine);
this.addChild(fpsCounter);
fpsCounter.visible = false;
if (Engine.ONLY_RUN_LOCALLY){
Engine.traceBoth(("Security.sandboxType = " + Security.sandboxType));
if (Security.sandboxType == Security.REMOTE){
lockedToSiteFailed();
return;
};
};
addEventListener(Event.ENTER_FRAME, update, false, 0, true);
addEventListener(MouseEvent.MOUSE_DOWN, engine.mouseDown, false, 0, true);
addEventListener(MouseEvent.MOUSE_UP, engine.mouseUp, false, 0, true);
addEventListener(MouseEvent.MOUSE_MOVE, engine.mouseMove, false, 0, true);
addEventListener(MouseEvent.MOUSE_WHEEL, engine.mouseWheel, false, 0, true);
addEventListener(MouseEvent.ROLL_OUT, engine.mouseOut, false, 0, true);
}
public function checkDomainLock():void{
var _local1:String;
var _local2:Array;
var _local3:Boolean;
var _local4:String;
if (Engine.LOCKED_TO_DOMAIN != ""){
_local1 = App.getHostURL();
trace(("hostUrl = " + _local1));
_local2 = Engine.LOCKED_TO_DOMAIN.split(",");
_local3 = false;
for each (_local4 in _local2) {
if (_local1.indexOf(("http://" + _local4)) == 0){
_local3 = true;
};
};
if (!_local3){
trace("failed domain lock check");
App.instance.lockedToSiteFailed();
return;
};
};
}
public function stageIsNotNull(_arg1:Event):void{
trace("********* stageIsNotNull");
this.tabEnabled = false;
engine.tabEnabled = false;
needToAddEngineKeyListener = true;
key = new KeyPoll(parent.root.stage);
if (Engine.PORTAL == Portals.NONE){
trace("mochi connect");
MochiServices.connect(_mochiads_game_id, root, onMochiConnectError);
};
if (Engine.START_FULLSCREEN){
this.stage.displayState = StageDisplayState.FULL_SCREEN;
};
}
public static function getHostURL():String{
return (instance.root.loaderInfo.loaderURL);
}
}
}//package
Section 70
//App_RoundedMask (App_RoundedMask)
package {
import mx.core.*;
public class App_RoundedMask extends SpriteAsset {
}
}//package
Section 71
//EndSequence (EndSequence)
package {
import flash.display.*;
public class EndSequence extends MovieClip {
public var frameTime:Number;
public function update(_arg1:Number):void{
var _local2:int;
frameTime = (frameTime + _arg1);
if (frameTime > 0.08){
frameTime = 0;
_local2 = currentFrame;
_local2++;
this.gotoAndStop(_local2);
if (_local2 == 40){
Engine.instance.playSoundPanned("WYRM_FART", Engine.HALFWIDTH);
};
if (_local2 == 71){
Engine.instance.playSoundPanned("FALL", Engine.HALFWIDTH);
};
if (_local2 == 139){
Engine.instance.playSoundPanned("LAND", Engine.HALFWIDTH);
Player.pool.deactivateAll();
World.instance.player0 = Player.create(true, Engine.HALFWIDTH, World.GROUND_Y0);
World.instance.player1 = Player.create(false, Engine.HALFWIDTH, World.GROUND_Y1);
};
};
}
public function reset():void{
this.gotoAndStop(1);
frameTime = 0;
}
}
}//package
Section 72
//Engine (Engine)
package {
import flash.events.*;
import flash.display.*;
import flesh.*;
import flash.utils.*;
import flesh.particles.*;
import mochi.as3.*;
import flash.net.*;
import screens.*;
import flash.ui.*;
import alcon.*;
public dynamic class Engine extends Sprite {
public var gameScreen:GameScreen;
public var sound:Boolean;
public var highScore:int;
public var state:uint;
public var world:World;
public var armorGamesInterface:ArmorGamesInterface;
public var screenManager:ScreenManager;
public var endScreen:EndScreen;
public var app:App;
public var paused:Boolean;
public var levelId:int;
public var scoresObject:Object;
public var urlStream:URLStream;
public var g5HiScores:ZattikkaHiScores;
public var cookie:SharedObject;
public var titleScreen:TitleScreen;
public var particleBehaviours:Dictionary;
public static const CHEAT_KEYS:Boolean = false;
public static const PORTAL:int = 4;
public static const STATE_GAME:uint = 2;
public static const LOCKED_TO_DOMAIN:String = "";
public static const MUTE:Boolean = false;
public static const HALFHEIGHT:Number = 240;
public static const WIDTH:uint = 640;
public static const HEIGHT:uint = 480;
public static const ONLY_RUN_LOCALLY:Boolean = false;
public static const STATE_GAME_OVER:uint = 3;
public static const INVUNERABLE:Boolean = false;
public static const HALFWIDTH:Number = 320;
public static const STATE_LOADING:uint = 0;
public static const DATA_ROOT:String = "../data/";
public static const START_FULLSCREEN:Boolean = false;
public static const DT_MULTIPLY:Number = 1;
public static const STATE_END:uint = 4;
public static const STATE_SPLASH:uint = 1;
public static const STRAIGHT_INTO_GAME:Boolean = false;
public static const STATE_MENU:uint = 5;
public static var FartSprite:Class = Engine_FartSprite;
public static var instance:Engine;
public static var DustSprite:Class = Engine_DustSprite;
public static var SmokeBottomSprite:Class = Engine_SmokeBottomSprite;
public static var SplatBlackSprite:Class = Engine_SplatBlackSprite;
public static var SplatGreenSprite:Class = Engine_SplatGreenSprite;
public static var LeafSprite:Class = Engine_LeafSprite;
public static var SmokeTopSprite:Class = Engine_SmokeTopSprite;
public static var SplatWhiteSprite:Class = Engine_SplatWhiteSprite;
public function Engine(_arg1:App){
var app = _arg1;
super();
instance = this;
this.app = app;
this.state = STATE_LOADING;
this.sound = true;
scoresObject = {n:[6, 1, 9, 15, 3, 12, 1, 1, 0, 2, 5, 15, 3, 12, 4, 5], f:function (_arg1:Number, _arg2:String):String{
if (_arg2.length == 16){
return (_arg2);
};
return (this.f((_arg1 + 1), (_arg2 + this.n[_arg1].toString(16))));
}};
var bgRect:Sprite = new Sprite();
Utils.paintRectOnSprite(bgRect, 0, 0, WIDTH, HEIGHT, 6920633);
this.addChild(bgRect);
Particle.initStart(200);
particleBehaviours = Behaviour.createBehaviourDictionary(ParticleBehavioursXML.XML_DATA);
particleBehaviours["FOOTSTEP_TOP"].setDisplayObject(new SmokeTopSprite(), false);
particleBehaviours["FOOTSTEP_BOTTOM"].setDisplayObject(new SmokeBottomSprite(), false);
particleBehaviours["LEAF"].setDisplayObject(new LeafSprite(), false);
particleBehaviours["FART"].setDisplayObject(new FartSprite(), false);
particleBehaviours["SPLAT_BLACK"].setDisplayObject(new SplatBlackSprite(), false);
particleBehaviours["SPLAT_WHITE"].setDisplayObject(new SplatWhiteSprite(), false);
particleBehaviours["SPLAT_GREEN"].setDisplayObject(new SplatGreenSprite(), false);
initStart();
}
public function togglePause():void{
paused = !(paused);
}
public function mouseMove(_arg1:MouseEvent):void{
}
public function viewScores():void{
switch (Engine.PORTAL){
case Portals.NONE:
break;
case Portals.ARMOR:
armorGamesInterface.viewScores();
break;
case Portals.GIMME5:
navigateToURL(new URLRequest("http://www.gimme5games.com/index.jsp?id=poto-and-cabenga_hs&ref=poto-and-cabenga_HISCORE"), "_blank");
break;
};
}
public function keyDown(_arg1:KeyboardEvent):void{
if (paused){
return;
};
switch (_arg1.keyCode){
case KeyCodes.F:
if (PreloadedApp.instance.stage.displayState == StageDisplayState.NORMAL){
PreloadedApp.instance.stage.displayState = StageDisplayState.FULL_SCREEN;
PreloadedApp.instance.stage.scaleMode = StageScaleMode.EXACT_FIT;
} else {
PreloadedApp.instance.stage.displayState = StageDisplayState.NORMAL;
};
break;
};
switch (state){
case STATE_GAME:
world.keyDown(_arg1.keyCode);
switch (_arg1.keyCode){
case Keyboard.END:
app.fpsCounter.visible = !(app.fpsCounter.visible);
break;
case Keyboard.TAB:
if (CHEAT_KEYS){
};
break;
case Keyboard.SHIFT:
if (CHEAT_KEYS){
};
break;
case 80:
togglePause();
break;
case Keyboard.PAGE_UP:
if (CHEAT_KEYS){
};
break;
case Keyboard.ESCAPE:
break;
};
break;
case STATE_MENU:
case STATE_END:
if (_arg1.keyCode == Keyboard.SPACE){
screenManager.getCurrentScreen().firePressed();
};
screenManager.keyDown(_arg1);
break;
};
}
public function initStart():void{
trace("initStart");
highScore = 0;
screenManager = new ScreenManager();
screenManager.setDefaultTransitionType(ScreenTransitionManager.TYPE_NONE);
gameScreen = new GameScreen(this);
screenManager.addScreen(gameScreen);
titleScreen = new TitleScreen(this);
screenManager.addScreen(titleScreen);
endScreen = new EndScreen(this);
screenManager.addScreen(endScreen);
screenManager.addScreen(new CreditsScreen(this));
world = new World();
if (!MUTE){
SoundManager.initStart(SoundData.SOUND_DATA);
SoundData.initStart();
playSoundPanned("JUMP0", 0, 0);
playSoundPanned("JUMP1", 0, 0);
};
this.addChild(world);
this.addChild(screenManager);
paused = false;
switch (PORTAL){
case Portals.ARMOR:
screenManager.addScreen(new ArmorIntroScreen(this));
armorGamesInterface = new ArmorGamesInterface();
armorGamesInterface.init(this, "6e1abb5f4edaa4034f775a755528a13b", "poto-cabenga");
openScreen("armor");
state = STATE_SPLASH;
break;
case Portals.GIMME5:
g5HiScores = new ZattikkaHiScores();
g5HiScores.x = ((640 - g5HiScores.width) * 0.5);
g5HiScores.y = ((480 - g5HiScores.height) * 0.5);
addChild(g5HiScores);
screenManager.addScreen(new G5IntroScreen(this));
screenManager.addScreen(new G5HighScoreScreen(this));
openScreen("g5");
state = STATE_SPLASH;
break;
default:
if (STRAIGHT_INTO_GAME){
startGame();
} else {
openTitle();
};
break;
};
}
public function mouseWheel(_arg1:MouseEvent):void{
}
public function mouseUp(_arg1:MouseEvent):void{
}
public function playSound(_arg1:String):void{
if (MUTE){
return;
};
if (!sound){
return;
};
SoundManager.playSound(_arg1, false);
}
public function openTitle(_arg1:Boolean=true):void{
if (_arg1){
reset();
};
world.resetInvisible();
gameScreen.alpha = 1;
gameScreen.reset();
openScreen("title");
world.player1.clip.x = Engine.HALFWIDTH;
world.levelTime = 0;
state = STATE_MENU;
}
public function writeToCookie():void{
cookie.flush();
}
public function setupCookie():void{
cookie = SharedObject.getLocal("ArtThief");
if (cookie.size == 0){
trace("cookie size = 0: first play");
writeToCookie();
} else {
trace("have existing cookie - read from it");
readFromCookie();
};
}
public function setSound(_arg1:Boolean):void{
this.sound = _arg1;
if (!sound){
SoundManager.stopAllSounds();
} else {
playMusic("MUSIC_GAME");
};
}
public function reset():void{
Utils.clearDelayedFunctions();
Particle.deactivateAllParticles();
Utils.clearFloatingText();
gameScreen.reset();
world.reset();
world.resetInvisible();
openScreen("game");
state = STATE_GAME;
}
public function openGameOver():void{
if (highScore <= world.score){
highScore = world.score;
};
if (!MUTE){
SoundManager.fadeOutSound("MUSIC_GAME");
};
openScreen("end");
Utils.clearDelayedFunctions();
state = STATE_END;
}
public function playMusic(_arg1:String):void{
if (MUTE){
return;
};
if (!sound){
return;
};
SoundManager.playSound(_arg1, true);
}
public function submitHighScore(_arg1:int):void{
var theScore = _arg1;
if (theScore < 0){
theScore = 0;
};
PreloadedApp.instance.stage.displayState = StageDisplayState.NORMAL;
try {
switch (Engine.PORTAL){
case Portals.NONE:
MochiScores.showLeaderboard({boardID:titleScreen.boardID, score:theScore});
break;
case Portals.ARMOR:
armorGamesInterface.submitScore(theScore);
break;
case Portals.GIMME5:
openScreen("g5HighScore");
g5HiScores.setDetails(389, 0, "poto-and-cabenga", "mVWBenIAj5QlT2h", false, theScore, ("" + theScore), "points!", true);
break;
};
} catch(e:Error) {
trace(e.message);
};
}
public function keyUp(_arg1:KeyboardEvent):void{
world.keyUp(_arg1.keyCode);
}
public function openScreen(_arg1:String):void{
trace(("openScreen " + _arg1));
state = STATE_MENU;
if (!this.contains(screenManager)){
this.addChild(screenManager);
};
screenManager.setScreen(_arg1);
}
public function setState(_arg1:uint):void{
state = _arg1;
}
public function update(_arg1:Number):void{
if (_arg1 > 0.1){
Debug.trace((("dt is " + _arg1) + " capping to 0.1"));
_arg1 = 0.1;
};
if (state == STATE_LOADING){
return;
};
if (paused){
return;
};
_arg1 = (_arg1 * DT_MULTIPLY);
SoundManager.update(_arg1);
Utils.updateDelayedFunctions(_arg1);
Utils.updateFloatingText(_arg1);
Particle.updateAll(_arg1);
switch (state){
case STATE_SPLASH:
case STATE_GAME_OVER:
case STATE_END:
screenManager.update(_arg1);
break;
case STATE_MENU:
world.update(_arg1);
screenManager.update(_arg1);
break;
case STATE_GAME:
world.update(_arg1);
screenManager.update(_arg1);
break;
};
}
public function readFromCookie():void{
}
public function gameOver():void{
state = STATE_GAME_OVER;
Utils.delayFunction(openGameOver, 1);
}
public function mouseDown(_arg1:MouseEvent):void{
if (((paused) && ((state == STATE_GAME)))){
togglePause();
};
}
public function mouseOut(_arg1:MouseEvent):void{
}
public function playSoundPanned(_arg1:String, _arg2:Number, _arg3:Number=-1):void{
if (MUTE){
return;
};
if (!sound){
return;
};
SoundManager.playSound(_arg1, false, (((_arg2 / WIDTH) * 2) - 1), _arg3);
}
public function startGame():void{
reset();
}
public function pause():void{
paused = true;
}
public static function traceBoth(_arg1:String):void{
Debug.trace(_arg1);
trace(_arg1);
}
}
}//package
Section 73
//Engine_DustSprite (Engine_DustSprite)
package {
import mx.core.*;
public class Engine_DustSprite extends SpriteAsset {
}
}//package
Section 74
//Engine_FartSprite (Engine_FartSprite)
package {
import mx.core.*;
public class Engine_FartSprite extends SpriteAsset {
}
}//package
Section 75
//Engine_LeafSprite (Engine_LeafSprite)
package {
import mx.core.*;
public class Engine_LeafSprite extends SpriteAsset {
}
}//package
Section 76
//Engine_SmokeBottomSprite (Engine_SmokeBottomSprite)
package {
import mx.core.*;
public class Engine_SmokeBottomSprite extends SpriteAsset {
}
}//package
Section 77
//Engine_SmokeTopSprite (Engine_SmokeTopSprite)
package {
import mx.core.*;
public class Engine_SmokeTopSprite extends SpriteAsset {
}
}//package
Section 78
//Engine_SplatBlackSprite (Engine_SplatBlackSprite)
package {
import mx.core.*;
public class Engine_SplatBlackSprite extends SpriteAsset {
}
}//package
Section 79
//Engine_SplatGreenSprite (Engine_SplatGreenSprite)
package {
import mx.core.*;
public class Engine_SplatGreenSprite extends SpriteAsset {
}
}//package
Section 80
//Engine_SplatWhiteSprite (Engine_SplatWhiteSprite)
package {
import mx.core.*;
public class Engine_SplatWhiteSprite extends SpriteAsset {
}
}//package
Section 81
//MochiBot (MochiBot)
package {
import flash.display.*;
import flash.net.*;
import flash.system.*;
public dynamic class MochiBot extends Sprite {
public static function track(_arg1:Sprite, _arg2:String):MochiBot{
if (Security.sandboxType == "localWithFile"){
return (null);
};
var _local3:MochiBot = new (MochiBot);
_arg1.addChild(_local3);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
var _local4 = "http://core.mochibot.com/my/core.swf";
var _local5:URLVariables = new URLVariables();
_local5["sb"] = Security.sandboxType;
_local5["v"] = Capabilities.version;
_local5["swfid"] = _arg2;
_local5["mv"] = "8";
_local5["fv"] = "9";
var _local6:String = _local3.root.loaderInfo.loaderURL;
if (_local6.indexOf("http") == 0){
_local5["url"] = _local6;
} else {
_local5["url"] = "local";
};
var _local7:URLRequest = new URLRequest(_local4);
_local7.contentType = "application/x-www-form-urlencoded";
_local7.method = URLRequestMethod.POST;
_local7.data = _local5;
var _local8:Loader = new Loader();
_local3.addChild(_local8);
_local8.load(_local7);
return (_local3);
}
}
}//package
Section 82
//ParticleBehavioursXML (ParticleBehavioursXML)
package {
public class ParticleBehavioursXML {
public static const XML_DATA:XML = <BEHAVIOURS>
<BEHAVIOUR id="SPLAT_WHITE" lifetime="1">
<MOTION type="cartesian" velocityX.min="-150" velocityX.max="150" velocityY.min="-250" velocityY.max="-200" accelX="0" accelY="400" dragMultiplier="0"/>
<ROTATION type="fromDirection"/>
<SCALE type="targeted" initial.min="0.6" initial.max="0.8" speed="1" target="0"/>
<!--ALPHA type="targeted"
initial = "1.0"
target="0"
startTime="0.6"
/-->
</BEHAVIOUR>
<BEHAVIOUR id="SPLAT_BLACK" lifetime="1">
<MOTION type="cartesian" velocityX.min="-150" velocityX.max="150" velocityY.min="-250" velocityY.max="-200" accelX="0" accelY="400" dragMultiplier="0"/>
<ROTATION type="fromDirection"/>
<SCALE type="targeted" initial.min="0.6" initial.max="0.8" speed="1" target="0"/>
<!--ALPHA type="targeted"
initial = "1.0"
target="0"
startTime="0.6"
/-->
</BEHAVIOUR>
<BEHAVIOUR id="SPLAT_GREEN" lifetime="1">
<MOTION type="cartesian" velocityX.min="-150" velocityX.max="150" velocityY.min="-250" velocityY.max="-200" accelX="0" accelY="400" dragMultiplier="0"/>
<ROTATION type="fromDirection"/>
<SCALE type="targeted" initial.min="0.6" initial.max="0.8" speed="1" target="0"/>
<!--ALPHA type="targeted"
initial = "1.0"
target="0"
startTime="0.6"
/-->
</BEHAVIOUR>
<BEHAVIOUR id="FOOTSTEP_TOP" lifetime="1">
<MOTION type="cartesian" velocityX.min="-30" velocityX.max="30" velocityY.min="-30" velocityY.max="-60" accelX="0" accelY="50">
</MOTION>
<ROTATION type="constant" initial.min="0" initial.max="360" speed.min="-4" speed.max="4" accel="0"/>
<SCALE type="targeted" initial.min="0.1" initial.max="0.2" speed="1" target="0"/>
<!--ALPHA type="targeted"
initial.min="0.1" initial.max="0.5"
startTime="0.5"
target="0"
/-->
</BEHAVIOUR>
<BEHAVIOUR id="FOOTSTEP_BOTTOM" lifetime="1">
<MOTION type="cartesian" velocityX.min="-30" velocityX.max="30" velocityY.min="-30" velocityY.max="-60" accelX="0" accelY="50">
</MOTION>
<ROTATION type="constant" initial.min="0" initial.max="360" speed.min="-4" speed.max="4" accel="0"/>
<SCALE type="targeted" initial.min="0.1" initial.max="0.2" speed="1" target="0"/>
<!--ALPHA type="targeted"
initial.min="0.1" initial.max="0.5"
startTime="0.5"
target="0"
/-->
</BEHAVIOUR>
<BEHAVIOUR id="FART" lifetime="2">
<MOTION type="cartesian" velocityX.min="-100" velocityX.max="100" velocityY.min="-100" velocityY.max="100" accelX="0" accelY="0" dragMultiplier="2"/>
<ROTATION type="constant" initial.min="0" initial.max="360" speed.min="-4" speed.max="4" accel="0"/>
<SCALE type="targeted" initial.min="0.1" initial.max="0.3" speed="0.4" target="1" startTime="0"/>
<ALPHA type="targeted" initial="0.5" target="0" startTime="0.8"/>
</BEHAVIOUR>
<BEHAVIOUR id="LEAF" lifetime="3">
<MOTION type="cartesian" velocityX.min="-60" velocityX.max="60" velocityY.min="-60" velocityY.max="60" accelX="-200" accelY="-100" dragMultiplier="0"/>
<ROTATION type="constant" initial.min="0" initial.max="360" speed.min="-2" speed.max="-3" accel="-2"/>
<SCALE type="targeted" initial.min="0.3" initial.max="0.5" speed="1" target="1" startTime="0"/>
<ALPHA type="targeted" initial="1" target="0" startTime="0.6"/>
</BEHAVIOUR>
</BEHAVIOURS>
;
}
}//package
Section 83
//Player (Player)
package {
import flash.events.*;
import flash.display.*;
import flesh.*;
import flesh.particles.*;
import alcon.*;
public class Player extends PoolObject {
public var animClip:MovieClip;
public var dyLastFrame:Number;
public var lives:int;
public var invincibleTime:Number;
public var clip:MovieClip;
public var invincibleFlash:int;
public var timeSinceLastFootstepSound:Number;
public var dx:Number;
public var dy:Number;
public var state:int;
public var frameTime:Number;
public var top:Boolean;
public var hangTime:Number;
public var groundY:Number;
public var otherPlayer:Player;
public var lostRider:Boolean;
public static const GRAVITY_X:Number = -2500;
public static const MIN_X:int = 120;
public static const FRAME_WTF:int = 5;
public static const STATE_RUN:int = 0;
public static const ACCEL_X:Number = 2500;
public static const STATE_HIT:int = 2;
public static const MAX_X:int = 520;
public static const GRAVITY:Number = 1875;
public static const MIN_SPEED_X:Number = -125;
public static const STATE_JUMP:int = 1;
public static const STATE_THINKING:int = 3;
public static const MAX:Number = 2;
public static const MAX_SPEED_X:Number = 125;
public static const JUMP_DY:Number = -562.5;
public static const FRAME_DASH:int = 2;
public static const MIN_X_WYRM:int = 200;
public static const FRAME_JUMP:int = 3;
public static const LIFE_COUNT:int = 9;
public static const INVINCIBLE_TIME:Number = 4;
public static const FRAME_DIE:int = 4;
public static const HANG_TIME:Number = 0.5;
public static const FRAME_WALK:int = 1;
public static var BottomSteedRiderClip:Class = Player_BottomSteedRiderClip;
public static var pool:ManagedPool;
public static var BottomSteedClip:Class = Player_BottomSteedClip;
public static var TopHeroClip:Class = Player_TopHeroClip;
public function Player(_arg1:uint){
super(_arg1);
}
public function collidedWithObject(_arg1:WorldObject):void{
var _local2:Region;
var _local3:int;
Debug.trace(((((((((((((("player " + (top) ? "top" : "bot") + " collided with worldObject ") + _arg1.index) + " type = ") + _arg1.type) + " frame = ") + _arg1.clip.currentFrame) + " squashable = ") + _arg1.isSquashable()) + " player state = ") + state) + " dy = ") + dy));
if (_arg1.type == WorldObject.TYPE_LEAF){
_arg1.deactivate();
Particle.requestParticles((_arg1.top) ? World.instance.particleSpriteTop : World.instance.particleSpriteBottom, 8, Engine.instance.particleBehaviours["LEAF"], _arg1.clip.x, (_arg1.clip.y - 8), _arg1.clip.x, (_arg1.clip.y - 8));
World.instance.addPoints(100);
do {
_local3 = Math.floor((Math.random() * 3));
} while (_local3 == World.instance.lastLeafSoundId);
World.instance.lastLeafSoundId = _local3;
Engine.instance.playSoundPanned(("LEAF_COLLECT" + _local3), clip.x);
} else {
if ((((_arg1.type == WorldObject.TYPE_BOTTOM_EGG)) || ((_arg1.type == WorldObject.TYPE_TOP_NODULE)))){
_arg1.kill(1);
WorldObject.killAllBaddies(!(_arg1.top));
Engine.instance.playSoundPanned("SMARTBOMB", clip.x);
World.instance.wyrmBackground.bite(1.5);
if (_arg1.top){
_local2 = Region.createLineRegion((_arg1.clip.x + 15), (clip.y - 20), (clip.x + 15), (clip.y - 20));
Particle.requestParticlesForRegion(_local2, World.instance.particleSpriteTop, 10, Engine.instance.particleBehaviours["SPLAT_GREEN"]);
World.instance.shakeBottomScreen();
} else {
World.instance.shakeTopScreen();
};
World.instance.addPoints(250);
} else {
if (((_arg1.isSquashable()) && ((((dy > 0)) || ((dyLastFrame > 0)))))){
_arg1.squash();
World.instance.addPoints(500);
Engine.instance.playSoundPanned("SQUASH_ENEMY", clip.x);
_local2 = Region.createLineRegion((_arg1.clip.x - 10), (clip.y + 10), (clip.x + 15), (clip.y + 15));
Particle.requestParticlesForRegion(_local2, (top) ? World.instance.particleSpriteTop : World.instance.particleSpriteBottom, 10, Engine.instance.particleBehaviours[(top) ? "SPLAT_WHITE" : "SPLAT_BLACK"]);
if (dy > 0){
dy = (-(dy) * 0.5);
} else {
dy = (-(dyLastFrame) * 0.5);
};
} else {
hit(_arg1);
};
};
};
}
override public function update(_arg1:Number):void{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:int;
dyLastFrame = dy;
if (invincibleTime > 0){
invincibleTime = (invincibleTime - _arg1);
invincibleFlash++;
if (invincibleFlash > 1){
invincibleFlash = 0;
};
clip.visible = (invincibleFlash < 1);
} else {
clip.visible = true;
};
var _local2:Boolean = (((((index == 0)) && (!(World.instance.buttonIsDown)))) || ((((index == 1)) && (World.instance.buttonIsDown))));
if (World.instance.loseControlOfPlayers){
_local4 = (Engine.HALFWIDTH - clip.x);
if (_local4 > 5){
_local2 = true;
} else {
if (_local4 < -5){
_local2 = false;
} else {
if (((top) && (World.instance.topScreenStoppedScrolling))){
setFrame(FRAME_WTF);
} else {
setFrame(FRAME_WALK);
};
return;
};
};
};
switch (state){
case STATE_RUN:
if (!_local2){
setFrame(FRAME_WALK);
} else {
setFrame(FRAME_DASH);
if (Math.random() < 0.3){
_local7 = (clip.x - (top) ? 10 : 30);
Particle.requestParticles((top) ? World.instance.particleSpriteTop : World.instance.particleSpriteBottom, 1, Engine.instance.particleBehaviours[(top) ? "FOOTSTEP_TOP" : "FOOTSTEP_BOTTOM"], _local7, clip.y, _local7, clip.y);
};
};
break;
case STATE_HIT:
animClip = clip["anim"];
if (animClip == null){
return;
};
frameTime = (frameTime + _arg1);
if (frameTime > 0.08){
frameTime = 0;
_local8 = animClip.currentFrame;
++_local8;
if (_local8 > animClip.totalFrames){
lives--;
Engine.instance.gameScreen.setLifeText(top, lives);
if (lives > 0){
invincibleTime = INVINCIBLE_TIME;
reset((Engine.WIDTH - otherPlayer.clip.x), groundY);
} else {
if (Engine.instance.state == Engine.STATE_GAME){
Engine.instance.gameOver();
};
};
} else {
animClip.gotoAndStop(_local8);
if (_local8 == 5){
Engine.instance.playSoundPanned("PLAYER_SPLAT", clip.x);
clip.y = groundY;
};
};
};
break;
case STATE_JUMP:
if (hangTime > 0){
hangTime = (hangTime - _arg1);
break;
};
_local5 = clip.y;
_local5 = (_local5 + (dy * _arg1));
_local6 = dy;
dy = (dy + (GRAVITY * _arg1));
if ((((dy > 0)) && ((_local6 <= 0)))){
hangTime = HANG_TIME;
};
if ((((dy > 0)) && ((_local5 > groundY)))){
_local5 = groundY;
run();
};
clip.y = _local5;
break;
};
if (Engine.instance.state != Engine.STATE_GAME){
return;
};
if (_local2){
_local4 = MAX_SPEED_X;
} else {
_local4 = MIN_SPEED_X;
};
if (state == STATE_HIT){
_local4 = -60;
} else {
if ((((World.instance.player0.state == STATE_JUMP)) || ((World.instance.player1.state == STATE_JUMP)))){
_local4 = 0;
};
};
var _local3:Number = clip.x;
_local3 = (_local3 + (_local4 * _arg1));
if (_local3 < MIN_X){
_local4 = 0;
_local3 = MIN_X;
};
if ((((((World.instance.levelTime < (World.TIME_WYRM_CHARGE + 3))) && (!(top)))) && ((_local3 < MIN_X_WYRM)))){
_local4 = 0;
_local3 = MIN_X_WYRM;
};
if (_local3 > MAX_X){
_local4 = 0;
_local3 = MAX_X;
};
clip.x = _local3;
}
public function setFrame(_arg1:int):void{
if (clip.currentFrame != _arg1){
clip.gotoAndStop(_arg1);
clip.addEventListener(Event.ENTER_FRAME, clipEnteredFrame);
};
}
public function reset(_arg1:Number, _arg2:Number):void{
clip.x = _arg1;
clip.y = _arg2;
clip.alpha = 1;
groundY = _arg2;
dx = (dy = 0);
hangTime = 0;
frameTime = 0;
clip.rotation = 0;
timeSinceLastFootstepSound = 0;
clip.scaleX = (clip.scaleY = 1);
invincibleFlash = 0;
setFrame(FRAME_WALK);
run();
}
public function hit(_arg1:WorldObject):void{
if ((((((invincibleTime > 0)) || (Engine.INVUNERABLE))) || ((state == STATE_HIT)))){
return;
};
if ((((((state == STATE_JUMP)) && ((dy < 0)))) && ((Math.abs((clip.x - _arg1.clip.x)) > 12)))){
return;
};
if (Math.abs((clip.x - _arg1.clip.x)) > 36){
return;
};
var _local2:MovieClip = _arg1.clip;
Engine.instance.playSoundPanned("PLAYER_DIE", clip.x);
setState(STATE_HIT);
setFrame(FRAME_DIE);
frameTime = 0;
dy = 0;
World.instance.addPoints(-200);
}
public function setState(_arg1:int):void{
state = _arg1;
}
public function init(_arg1:Boolean, _arg2:int, _arg3:int):void{
Utils.removeChild(clip);
lostRider = false;
lives = LIFE_COUNT;
this.top = _arg1;
Engine.instance.gameScreen.setLifeText(_arg1, lives);
if (_arg1){
clip = new TopHeroClip();
Utils.addChild(clip, World.instance.playerSpriteTop);
} else {
clip = new BottomSteedRiderClip();
Utils.addChild(clip, World.instance.playerSpriteBottom);
};
invincibleTime = 0;
reset(_arg2, _arg3);
}
public function run():void{
dy = 0;
setState(STATE_RUN);
}
public function loseRider():void{
if (lostRider){
return;
};
var _local1:Number = clip.x;
var _local2:Number = clip.y;
Utils.removeChild(clip);
clip = new BottomSteedClip();
clip.x = _local1;
clip.y = _local2;
World.instance.playerSpriteBottom.addChild(clip);
lostRider = true;
if (state == STATE_JUMP){
clip.gotoAndStop(FRAME_JUMP);
} else {
clip.gotoAndStop(FRAME_WALK);
};
}
public function clipEnteredFrame(_arg1:Event=null):void{
animClip = clip["anim"];
clip.removeEventListener(Event.ENTER_FRAME, clipEnteredFrame);
}
public function jump():void{
if (state != STATE_RUN){
return;
};
setState(STATE_JUMP);
setFrame(FRAME_JUMP);
dy = JUMP_DY;
if (((!(top)) || ((World.instance.levelTime > World.TIME_TOP_SCREEN_APPEARS)))){
Engine.instance.playSoundPanned("JUMP0", clip.x);
};
}
override public function createInstance(_arg1:uint):PoolObject{
return (new Player(_arg1));
}
override public function deactivate():void{
active = false;
clip.visible = false;
Utils.removeChild(clip);
pool.notifyDeactivated(this);
}
public static function create(_arg1:Boolean, _arg2:int, _arg3:int):Player{
var _local4:Player = (pool.requestObject() as Player);
_local4.init(_arg1, _arg2, _arg3);
return (_local4);
}
public static function initStart():void{
pool = new ManagedPool("PlayerPool", new Player(0), MAX);
}
}
}//package
Section 84
//Player_BottomSteedClip (Player_BottomSteedClip)
package {
import mx.core.*;
import flash.display.*;
public class Player_BottomSteedClip extends MovieClipAsset {
public var buttonG5:DisplayObject;
public var buttonReturn:DisplayObject;
public var playerScoreText:DisplayObject;
public var buttonPlay:DisplayObject;
public var anim:DisplayObject;
public var topLivesText:DisplayObject;
public var credits:DisplayObject;
public var buttonOktomusic:DisplayObject;
public var buttonMark:DisplayObject;
public var buttonKwok:DisplayObject;
public var logo:DisplayObject;
public var buttonArmor:DisplayObject;
public var buttonKokoromi:DisplayObject;
public var bottomLivesIcon:DisplayObject;
public var buttonHighScoreSubmit:DisplayObject;
public var buttonScoreSubmit:DisplayObject;
public var buttonViewHighScores:DisplayObject;
public var copyright:DisplayObject;
public var topLivesIcon:DisplayObject;
public var newHighScore:DisplayObject;
public var buttonHoneyslug:DisplayObject;
public var highScoreText:DisplayObject;
public var scoreText:DisplayObject;
public var splash:DisplayObject;
public var buttonRicky:DisplayObject;
public var bottomLivesText:DisplayObject;
public var creditsButton:DisplayObject;
public var creditsText:DisplayObject;
public var instructionsText:DisplayObject;
public var buttonDick:DisplayObject;
}
}//package
Section 85
//Player_BottomSteedRiderClip (Player_BottomSteedRiderClip)
package {
import mx.core.*;
import flash.display.*;
public class Player_BottomSteedRiderClip extends MovieClipAsset {
public var buttonG5:DisplayObject;
public var buttonReturn:DisplayObject;
public var playerScoreText:DisplayObject;
public var buttonPlay:DisplayObject;
public var anim:DisplayObject;
public var topLivesText:DisplayObject;
public var credits:DisplayObject;
public var buttonOktomusic:DisplayObject;
public var buttonMark:DisplayObject;
public var buttonKwok:DisplayObject;
public var logo:DisplayObject;
public var buttonArmor:DisplayObject;
public var buttonKokoromi:DisplayObject;
public var bottomLivesIcon:DisplayObject;
public var buttonHighScoreSubmit:DisplayObject;
public var buttonScoreSubmit:DisplayObject;
public var buttonViewHighScores:DisplayObject;
public var copyright:DisplayObject;
public var topLivesIcon:DisplayObject;
public var newHighScore:DisplayObject;
public var buttonHoneyslug:DisplayObject;
public var highScoreText:DisplayObject;
public var scoreText:DisplayObject;
public var splash:DisplayObject;
public var buttonRicky:DisplayObject;
public var bottomLivesText:DisplayObject;
public var creditsButton:DisplayObject;
public var creditsText:DisplayObject;
public var instructionsText:DisplayObject;
public var buttonDick:DisplayObject;
}
}//package
Section 86
//Player_TopHeroClip (Player_TopHeroClip)
package {
import mx.core.*;
import flash.display.*;
public class Player_TopHeroClip extends MovieClipAsset {
public var buttonG5:DisplayObject;
public var buttonReturn:DisplayObject;
public var playerScoreText:DisplayObject;
public var buttonPlay:DisplayObject;
public var anim:DisplayObject;
public var topLivesText:DisplayObject;
public var credits:DisplayObject;
public var buttonOktomusic:DisplayObject;
public var buttonMark:DisplayObject;
public var buttonKwok:DisplayObject;
public var logo:DisplayObject;
public var buttonArmor:DisplayObject;
public var buttonKokoromi:DisplayObject;
public var bottomLivesIcon:DisplayObject;
public var buttonHighScoreSubmit:DisplayObject;
public var buttonScoreSubmit:DisplayObject;
public var buttonViewHighScores:DisplayObject;
public var copyright:DisplayObject;
public var topLivesIcon:DisplayObject;
public var newHighScore:DisplayObject;
public var buttonHoneyslug:DisplayObject;
public var highScoreText:DisplayObject;
public var scoreText:DisplayObject;
public var splash:DisplayObject;
public var buttonRicky:DisplayObject;
public var bottomLivesText:DisplayObject;
public var creditsButton:DisplayObject;
public var creditsText:DisplayObject;
public var instructionsText:DisplayObject;
public var buttonDick:DisplayObject;
}
}//package
Section 87
//PreloadedApp (PreloadedApp)
package {
import flesh.*;
public dynamic class PreloadedApp extends Preloader {
public static var PreloaderLogoClip:Class = PreloadedApp_PreloaderLogoClip;
public static var instance:PreloadedApp;
public function PreloadedApp(){
trace("PreloadedApp ctor");
super(PreloaderLogoClip, false);
instance = this;
}
}
}//package
Section 88
//PreloadedApp_PreloaderLogoClip (PreloadedApp_PreloaderLogoClip)
package {
import mx.core.*;
public class PreloadedApp_PreloaderLogoClip extends MovieClipAsset {
}
}//package
Section 89
//PreloaderLogo (PreloaderLogo)
package {
import flash.events.*;
import flash.display.*;
public class PreloaderLogo extends Sprite {
private var gywLogo:MovieClip;
public var waitUntilEndOfAnimation:Boolean;// = false
public var animCompletedFlag:Boolean;// = false
public function PreloaderLogo(_arg1:Class, _arg2:Boolean){
gywLogo = new (_arg1);
this.waitUntilEndOfAnimation = _arg2;
waiting();
}
public function waiting():void{
addEventListener(Event.ADDED_TO_STAGE, logoAddedToStage);
}
private function waitingToEnd(_arg1:Event):void{
if (((waitUntilEndOfAnimation) && ((gywLogo.currentFrame == gywLogo.totalFrames)))){
gywLogo.gotoAndStop(gywLogo.totalFrames);
gywLogo.removeEventListener(Event.ENTER_FRAME, waitingToEnd);
animCompletedFlag = true;
} else {
if (waitUntilEndOfAnimation == false){
animCompletedFlag = true;
};
};
}
private function logoAddedToStage(_arg1:Event):void{
stage.addChild(gywLogo);
gywLogo.gotoAndPlay(1);
gywLogo.addEventListener(Event.ENTER_FRAME, waitingToEnd);
}
public function dispose():void{
stage.removeChild(gywLogo);
}
}
}//package
Section 90
//SoundData (SoundData)
package {
import flesh.*;
public class SoundData {
private static var Sound11:Class = SoundData_Sound11;
private static var Sound13:Class = SoundData_Sound13;
private static var Sound15:Class = SoundData_Sound15;
private static var Sound10:Class = SoundData_Sound10;
private static var Sound12:Class = SoundData_Sound12;
private static var Sound14:Class = SoundData_Sound14;
private static var Sound16:Class = SoundData_Sound16;
private static var Sound0:Class = SoundData_Sound0;
private static var Sound2:Class = SoundData_Sound2;
private static var Sound3:Class = SoundData_Sound3;
private static var Sound4:Class = SoundData_Sound4;
private static var Sound5:Class = SoundData_Sound5;
private static var Sound6:Class = SoundData_Sound6;
private static var Sound7:Class = SoundData_Sound7;
private static var Sound1:Class = SoundData_Sound1;
private static var Sound9:Class = SoundData_Sound9;
private static var Sound8:Class = SoundData_Sound8;
public static var SOUND_DATA:Array;
public static function initStart():void{
var _local2:XML;
var _local3:String;
var _local4:int;
var _local5:int;
var _local6:Number;
var _local1:XML = SoundDataXML.XML_DATA;
SOUND_DATA = new Array();
for each (_local2 in _local1.children()) {
_local3 = Utils.getStringAttributeFromXML(_local2, "id");
_local4 = ((Utils.getStringAttributeFromXML(_local2, "type") == "sfx")) ? FleshSound.FX : FleshSound.MUSIC;
_local5 = (Utils.getBooleanAttributeFromXML(_local2, "multiple")) ? FleshSound.MULTIPLE : FleshSound.SINGLETON;
_local6 = Utils.getFloatAttributeFromXML(_local2, "volume");
SOUND_DATA.push(_local3);
SOUND_DATA.push(_local4);
SOUND_DATA.push(_local5);
SOUND_DATA.push(_local6);
};
SoundManager.embedSound(SOUND_DATA, new Sound0());
SoundManager.embedSound(SOUND_DATA, new Sound1());
SoundManager.embedSound(SOUND_DATA, new Sound2());
SoundManager.embedSound(SOUND_DATA, new Sound3());
SoundManager.embedSound(SOUND_DATA, new Sound4());
SoundManager.embedSound(SOUND_DATA, new Sound5());
SoundManager.embedSound(SOUND_DATA, new Sound6());
SoundManager.embedSound(SOUND_DATA, new Sound7());
SoundManager.embedSound(SOUND_DATA, new Sound8());
SoundManager.embedSound(SOUND_DATA, new Sound9());
SoundManager.embedSound(SOUND_DATA, new Sound10());
SoundManager.embedSound(SOUND_DATA, new Sound11());
SoundManager.embedSound(SOUND_DATA, new Sound12());
SoundManager.embedSound(SOUND_DATA, new Sound13());
SoundManager.embedSound(SOUND_DATA, new Sound14());
SoundManager.embedSound(SOUND_DATA, new Sound15());
SoundManager.embedSound(SOUND_DATA, new Sound16());
}
}
}//package
Section 91
//SoundData_Sound0 (SoundData_Sound0)
package {
import mx.core.*;
public class SoundData_Sound0 extends SoundAsset {
}
}//package
Section 92
//SoundData_Sound1 (SoundData_Sound1)
package {
import mx.core.*;
public class SoundData_Sound1 extends SoundAsset {
}
}//package
Section 93
//SoundData_Sound10 (SoundData_Sound10)
package {
import mx.core.*;
public class SoundData_Sound10 extends SoundAsset {
}
}//package
Section 94
//SoundData_Sound11 (SoundData_Sound11)
package {
import mx.core.*;
public class SoundData_Sound11 extends SoundAsset {
}
}//package
Section 95
//SoundData_Sound12 (SoundData_Sound12)
package {
import mx.core.*;
public class SoundData_Sound12 extends SoundAsset {
}
}//package
Section 96
//SoundData_Sound13 (SoundData_Sound13)
package {
import mx.core.*;
public class SoundData_Sound13 extends SoundAsset {
}
}//package
Section 97
//SoundData_Sound14 (SoundData_Sound14)
package {
import mx.core.*;
public class SoundData_Sound14 extends SoundAsset {
}
}//package
Section 98
//SoundData_Sound15 (SoundData_Sound15)
package {
import mx.core.*;
public class SoundData_Sound15 extends SoundAsset {
}
}//package
Section 99
//SoundData_Sound16 (SoundData_Sound16)
package {
import mx.core.*;
public class SoundData_Sound16 extends SoundAsset {
}
}//package
Section 100
//SoundData_Sound2 (SoundData_Sound2)
package {
import mx.core.*;
public class SoundData_Sound2 extends SoundAsset {
}
}//package
Section 101
//SoundData_Sound3 (SoundData_Sound3)
package {
import mx.core.*;
public class SoundData_Sound3 extends SoundAsset {
}
}//package
Section 102
//SoundData_Sound4 (SoundData_Sound4)
package {
import mx.core.*;
public class SoundData_Sound4 extends SoundAsset {
}
}//package
Section 103
//SoundData_Sound5 (SoundData_Sound5)
package {
import mx.core.*;
public class SoundData_Sound5 extends SoundAsset {
}
}//package
Section 104
//SoundData_Sound6 (SoundData_Sound6)
package {
import mx.core.*;
public class SoundData_Sound6 extends SoundAsset {
}
}//package
Section 105
//SoundData_Sound7 (SoundData_Sound7)
package {
import mx.core.*;
public class SoundData_Sound7 extends SoundAsset {
}
}//package
Section 106
//SoundData_Sound8 (SoundData_Sound8)
package {
import mx.core.*;
public class SoundData_Sound8 extends SoundAsset {
}
}//package
Section 107
//SoundData_Sound9 (SoundData_Sound9)
package {
import mx.core.*;
public class SoundData_Sound9 extends SoundAsset {
}
}//package
Section 108
//SoundDataXML (SoundDataXML)
package {
public class SoundDataXML {
public static const XML_DATA:XML = <SOUNDS>
<SOUND id="FALL" type="sfx" multiple="true" volume="0.3"/>
<SOUND id="WYRM_FART" type="sfx" multiple="true" volume="0.3"/>
<SOUND id="JUMP0" type="sfx" multiple="true" volume="0.7"/>
<SOUND id="JUMP1" type="sfx" multiple="true" volume="0.7"/>
<SOUND id="LAND" type="sfx" multiple="true" volume="0.7"/>
<SOUND id="LEAF_COLLECT0" type="sfx" multiple="true" volume="0.3"/>
<SOUND id="PLAYER_DIE" type="sfx" multiple="true" volume="0.3"/>
<SOUND id="SMARTBOMB" type="sfx" multiple="false" volume="0.3"/>
<SOUND id="SQUASH_ENEMY" type="sfx" multiple="false" volume="0.7"/>
<SOUND id="THINK" type="sfx" multiple="false" volume="0.7"/>
<SOUND id="WYRM_BITE" type="sfx" multiple="false" volume="0.7"/>
<SOUND id="WYRM_ROAR" type="sfx" multiple="false" volume="0.4"/>
<SOUND id="WYRM_JAW_SNAP" type="sfx" multiple="false" volume="0.7"/>
<SOUND id="MUSIC_GAME" type="music" multiple="false" volume="0.4"/>
<SOUND id="LEAF_COLLECT1" type="sfx" multiple="true" volume="0.3"/>
<SOUND id="LEAF_COLLECT2" type="sfx" multiple="true" volume="0.3"/>
<SOUND id="PLAYER_SPLAT" type="sfx" multiple="true" volume="0.3"/>
</SOUNDS>
;
}
}//package
Section 109
//World (World)
package {
import flash.display.*;
import flesh.*;
import flesh.particles.*;
import flash.ui.*;
public class World extends Sprite {
public var maxTimeBetweenBaddies:Number;
public var minTimeBetweenBaddies:Number;
public var baddieTypes:Array;
public var endSequence:EndSequence;
public var state:String;
public var score:int;
public var leavesSpawned:int;
public var timeSinceLastLeaf:Number;
public var parallaxBackground:ParallaxScrollingSprite;
public var topScreenReachedEnd:Boolean;
public var wyrmBackground:WyrmBackground;
public var timeSinceLastSmartBomb:Number;
public var seededRandom:SeededRandom;
public var baddieSpriteTop:Sprite;
public var loseControlOfPlayers:Boolean;
public var buttonIsDown:Boolean;
public var wyrmForeground:WyrmForeground;
public var topScreenScrollAmount:Number;
public var baddieSpriteBottom:Sprite;
public var preparingToStopTopScreenScroll:Boolean;
public var playerSpriteBottom:Sprite;
public var newHighScore:Boolean;
public var timeTilNextBaddie:Number;
public var dtMultiply:Number;
public var lastLeafSoundId:int;
public var topScreenStoppedScrolling:Boolean;
public var playerSpriteTop:Sprite;
public var displayScore:int;
public var levelTime:Number;
public var nextBaddieOnTopScreen:Boolean;
public var player1:Player;
public var particleSpriteTop:Sprite;
public var lastLevelTime:Number;
public var particleSpriteBottom:Sprite;
public var player0:Player;
public var scoreColourSlider:Number;
public static const INITIAL_MAX_TIME_BETWEEN_OBJECTS:Number = 2;
public static const TIME_BETWEEN_LEAVES:Number = 15;
public static const TIME_TOP_SCREEN_APPEARS:int = 35;
public static const PARALLAX_ARRAY:Array = new Array(new BottomBg0Clouds(), 275, 10, new BottomBg1Mountains(), 331, 20, new BottomBg2Hills(), 348, 30, new BottomBg3Floor(), 427, 60, new Sprite(), 0, 0, new BottomBg5Foreground(), 421, 150, new TopBg0AnusBack(), -40, 60, new TopBg0Back(), -40, 60, new TopBg1AnusFloor(), 181, 60, new TopBg1Floor(), 181, 60, new Sprite(), 0, 0, new TopBg3Top(), -55, 60, new TopBg3AnusTop(), -55, 60);
public static const TIME_ENEMIES:int = 55;
public static const TIME_OBJECTS_ON_TOP_SCREEN:int = 40;
public static const TIME_SQUASHABLE_ENEMIES:int = 110;
public static const TIME_WYRM_CHARGE:int = 25;
public static const TIME_MEDIUM:int = 120;
public static const TIME_HARD:int = 160;
public static const GROUND_Y0:Number = 190;
public static const GROUND_Y1:Number = 430;
public static const START_TIME:int = 0;
public static const VERSION:String = "1.0.29";
public static const TIME_BIG_ENEMIES:int = 140;
public static const TIME_END:int = 250;
public static const TIME_ENEMIES_FROM_BEHIND:int = 90;
public static const INITIAL_MIN_TIME_BETWEEN_OBJECTS:Number = 2;
public static const LEVEL_HEIGHT:Number = 141;
public static const TIME_SPEED_UP:int = 200;
public static const LEVEL_SEED:int = 3;
public static const TIME_WYRM_APPEARS:int = 20;
public static const TIME_OBJECTS_APPEAR:int = 4;
public static const TIME_SWAP_IN_ANUS:int = 240;
public static var TopBg3Top:Class = World_TopBg3Top;
public static var BottomBg3Floor:Class = World_BottomBg3Floor;
public static var instance:World;
public static var TopBg0Back:Class = World_TopBg0Back;
public static var TopScreenMaskSprite:Class = World_TopScreenMaskSprite;
public static var TopBg1Floor:Class = World_TopBg1Floor;
public static var BottomBg2Hills:Class = World_BottomBg2Hills;
public static var BottomBg0Clouds:Class = World_BottomBg0Clouds;
public static var BottomBg1Mountains:Class = World_BottomBg1Mountains;
public static var TopBg0AnusBack:Class = World_TopBg0AnusBack;
public static var BottomBg5Foreground:Class = World_BottomBg5Foreground;
public static var TopBg3AnusTop:Class = World_TopBg3AnusTop;
public static var TopBg1AnusFloor:Class = World_TopBg1AnusFloor;
public function World(){
var _local4:Sprite;
super();
instance = this;
seededRandom = new SeededRandom(LEVEL_SEED);
parallaxBackground = new ParallaxScrollingSprite(PARALLAX_ARRAY);
baddieTypes = new Array();
WorldObject.initStart();
Player.initStart();
this.addChild(parallaxBackground);
baddieSpriteBottom = new Sprite();
playerSpriteBottom = new Sprite();
baddieSpriteTop = new Sprite();
playerSpriteTop = new Sprite();
var _local1:Sprite = parallaxBackground.getLayerAt(4);
wyrmBackground = new WyrmBackground();
_local1.addChild(wyrmBackground);
_local1.addChild(playerSpriteBottom);
_local1.addChild(baddieSpriteBottom);
var _local2:Sprite = parallaxBackground.getLayerAt(10);
_local2.addChild(playerSpriteTop);
_local2.addChild(baddieSpriteTop);
parallaxBackground.registerFlipListener(6, this);
particleSpriteTop = new Sprite();
_local2.addChild(particleSpriteTop);
particleSpriteBottom = new Sprite();
_local1.addChild(particleSpriteBottom);
wyrmForeground = new WyrmForeground();
_local1.addChild(wyrmForeground);
buttonIsDown = false;
var _local3:uint = 6;
while (_local3 < 13) {
_local4 = new TopScreenMaskSprite();
parallaxBackground.getLayerAt(_local3).mask = _local4;
this.addChild(_local4);
_local3++;
};
endSequence = new EndSequence();
endSequence.x = -20;
endSequence.y = 312;
this.addChild(endSequence);
}
public function resetTopScreenScroll():void{
preparingToStopTopScreenScroll = false;
topScreenStoppedScrolling = false;
var _local1:uint = 6;
while (_local1 < 13) {
if (_local1 != 10){
parallaxBackground.setScrollSpeed(_local1, 60);
};
_local1++;
};
}
public function notifyFlipped(_arg1:int):void{
if (levelTime < TIME_SWAP_IN_ANUS){
return;
};
loseControlOfPlayers = true;
topScreenReachedEnd = true;
showAnus();
}
public function spawnWorldObject(_arg1:int, _arg2:int, _arg3:Boolean, _arg4:Boolean, _arg5:Boolean):void{
if (((((!(_arg4)) && ((_arg1 >= WorldObject.TYPE_TOP_BADDIE_SPIKEY)))) && ((_arg1 <= WorldObject.TYPE_TOP_BADDIE_BIG)))){
_arg1 = (_arg1 - 5);
} else {
if (((!(_arg4)) && ((_arg1 == WorldObject.TYPE_TOP_NODULE)))){
_arg1 = WorldObject.TYPE_BOTTOM_EGG;
};
};
var _local6:Number = ((_arg2 == Utils.LEFT)) ? (Engine.WIDTH + 32) : -32;
var _local7:Number = (_arg4) ? (_arg3) ? (GROUND_Y0 - LEVEL_HEIGHT) : GROUND_Y0 : (_arg3) ? (GROUND_Y1 - LEVEL_HEIGHT) : GROUND_Y1;
if (_arg1 == WorldObject.TYPE_LEAF){
leavesSpawned++;
timeSinceLastLeaf = 0;
};
WorldObject.create(_arg4, _arg1, _local6, _local7, _arg2);
}
public function hideAnus():void{
parallaxBackground.setLayerVisible(6, false);
parallaxBackground.setLayerVisible(8, false);
parallaxBackground.setLayerVisible(12, false);
parallaxBackground.setBothBgVisible(7, true);
parallaxBackground.setBothBgVisible(9, true);
parallaxBackground.setBothBgVisible(11, true);
parallaxBackground.setBothBgVisible(6, true);
parallaxBackground.setBothBgVisible(8, true);
parallaxBackground.setBothBgVisible(12, true);
}
public function fartOnBottomScreen():void{
var _local1:Region = Region.createRectRegion(0, 200, 640, 480);
Particle.requestParticlesForRegion(_local1, particleSpriteBottom, 150, Engine.instance.particleBehaviours["FART"]);
}
public function shakeBottomScreen():void{
var _local1:uint;
while (_local1 < 6) {
parallaxBackground.shakeLayer(_local1);
_local1++;
};
}
public function resetInvisible():void{
WorldObject.pool.deactivateAll();
player0.otherPlayer = player1;
player1.otherPlayer = player0;
baddieTypes.splice(0);
baddieTypes.push(WorldObject.TYPE_TOP_BADDIE_SPIKEY);
baddieTypes.push(WorldObject.TYPE_TOP_BADDIE_SPIKEY);
levelTime = START_TIME;
minTimeBetweenBaddies = INITIAL_MIN_TIME_BETWEEN_OBJECTS;
maxTimeBetweenBaddies = INITIAL_MAX_TIME_BETWEEN_OBJECTS;
leavesSpawned = 0;
timeSinceLastLeaf = 0;
timeSinceLastSmartBomb = 0;
dtMultiply = 1;
score = (displayScore = 0);
scoreColourSlider = 0;
setTimeTilNextBaddie();
Engine.instance.gameScreen.scoreText.textColor = 0xFFFF00;
setTopScreenMaskX(Engine.WIDTH);
hideAnus();
newHighScore = false;
wyrmForeground.reset();
wyrmBackground.visible = true;
wyrmBackground.reset();
endSequence.visible = false;
loseControlOfPlayers = false;
}
public function setTimeTilNextBaddie():void{
timeTilNextBaddie = (minTimeBetweenBaddies + (seededRandom.random() * (maxTimeBetweenBaddies - minTimeBetweenBaddies)));
}
public function showAnus():void{
parallaxBackground.setRightBgVisible(7, false);
parallaxBackground.setRightBgVisible(9, false);
parallaxBackground.setRightBgVisible(11, false);
parallaxBackground.setLeftBgVisible(8, false);
parallaxBackground.setLeftBgVisible(12, false);
parallaxBackground.setLayerVisible(6, true);
parallaxBackground.setLayerVisible(8, true);
parallaxBackground.setLayerVisible(12, true);
preparingToStopTopScreenScroll = true;
topScreenScrollAmount = 0;
Utils.delayFunction(startEndSequence, (11.6 + 5));
}
public function keyDown(_arg1:int):void{
if (loseControlOfPlayers){
return;
};
switch (_arg1){
case KeyCodes.Q:
case Keyboard.SPACE:
if (!buttonIsDown){
player0.jump();
};
buttonIsDown = true;
break;
};
}
public function shakeTopScreen():void{
var _local1:uint = 6;
while (_local1 < 13) {
parallaxBackground.shakeLayer(_local1);
_local1++;
};
}
public function levelTimeCrossed(_arg1:Number):Boolean{
return ((((lastLevelTime < _arg1)) && ((levelTime >= _arg1))));
}
public function update(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
var _local4:Boolean;
var _local5:int;
var _local6:Boolean;
var _local7:int;
var _local8:Boolean;
_arg1 = (_arg1 * dtMultiply);
lastLevelTime = levelTime;
if (preparingToStopTopScreenScroll){
topScreenScrollAmount = (topScreenScrollAmount + (60 * _arg1));
if (topScreenScrollAmount >= 810){
preparingToStopTopScreenScroll = false;
stopTopScreenScroll();
};
};
timeSinceLastSmartBomb = (timeSinceLastSmartBomb + _arg1);
if (endSequence.visible){
Engine.instance.gameScreen.alpha = (Engine.instance.gameScreen.alpha - (_arg1 * 2));
endSequence.update(_arg1);
if (endSequence.currentFrame == endSequence.totalFrames){
Engine.instance.openTitle(false);
} else {
if (endSequence.currentFrame >= 136){
_local2 = (0 - parallaxBackground.y);
parallaxBackground.y = (parallaxBackground.y + (_local2 * 0.5));
};
};
};
if (Engine.instance.state == Engine.STATE_GAME){
levelTime = (levelTime + (_arg1 / dtMultiply));
};
if (displayScore < score){
displayScore = (displayScore + 10);
Engine.instance.gameScreen.setScoreText(displayScore);
if (scoreColourSlider < 1){
scoreColourSlider = (scoreColourSlider + 0.1);
};
} else {
if (displayScore > score){
displayScore = (displayScore - 10);
if (scoreColourSlider > -1){
scoreColourSlider = (scoreColourSlider - 0.1);
};
Engine.instance.gameScreen.scoreText.textColor = Utils.getInterpolatedColour(0xFFFF00, 0xFF0000, -(scoreColourSlider), 1);
Engine.instance.gameScreen.setScoreText(displayScore);
} else {
scoreColourSlider = (scoreColourSlider * 0.95);
};
};
if (scoreColourSlider > 0){
Engine.instance.gameScreen.scoreText.textColor = Utils.getInterpolatedColour(0xFFFF00, 0xFFFFFF, scoreColourSlider, 1);
} else {
Engine.instance.gameScreen.scoreText.textColor = Utils.getInterpolatedColour(0xFFFF00, 0xFF0000, -(scoreColourSlider), 1);
};
if (!endSequence.visible){
_local3 = parallaxBackground.getLayerAt(6).mask.x;
if ((((levelTime > TIME_TOP_SCREEN_APPEARS)) && ((_local3 > -240)))){
setTopScreenMaskX((_local3 - (_arg1 * 800)));
};
};
if (levelTimeCrossed(TIME_TOP_SCREEN_APPEARS)){
Engine.instance.playMusic("MUSIC_GAME");
};
if (levelTimeCrossed(TIME_MEDIUM)){
};
if (levelTimeCrossed(TIME_HARD)){
minTimeBetweenBaddies = (maxTimeBetweenBaddies = 1.25);
};
if ((((levelTime > TIME_SPEED_UP)) && ((dtMultiply < 1.175)))){
dtMultiply = (dtMultiply + (_arg1 * 0.1));
};
parallaxBackground.update(_arg1);
WorldObject.pool.updateAll(_arg1);
Player.pool.updateAll(_arg1);
wyrmForeground.update(_arg1);
if (levelTime > (TIME_TOP_SCREEN_APPEARS + 5)){
wyrmBackground.update(_arg1);
};
if (levelTimeCrossed(TIME_SQUASHABLE_ENEMIES)){
baddieTypes.push(WorldObject.TYPE_TOP_BADDIE_SQUASHABLE);
baddieTypes.push(WorldObject.TYPE_TOP_BADDIE_SQUASHABLE);
baddieTypes.push(WorldObject.TYPE_TOP_BADDIE_SQUASHABLE);
baddieTypes.push(WorldObject.TYPE_TOP_BADDIE_FLY);
};
if (levelTimeCrossed(TIME_HARD)){
baddieTypes.push(WorldObject.TYPE_TOP_BADDIE_BIG);
baddieTypes.push(WorldObject.TYPE_TOP_NODULE);
};
if (levelTimeCrossed((TIME_END - 3))){
if (Engine.instance.highScore <= score){
newHighScore = true;
Engine.instance.highScore = score;
};
};
if ((((((((levelTime > TIME_OBJECTS_APPEAR)) && ((((levelTime < (TIME_WYRM_APPEARS - 1))) || ((levelTime > (TIME_WYRM_CHARGE + 2))))))) && ((levelTime < (TIME_END - 10))))) && (!(loseControlOfPlayers)))){
timeTilNextBaddie = (timeTilNextBaddie - _arg1);
timeSinceLastLeaf = (timeSinceLastLeaf + _arg1);
if (timeTilNextBaddie < 0){
setTimeTilNextBaddie();
_local4 = (((levelTime < TIME_ENEMIES)) || ((timeSinceLastLeaf > TIME_BETWEEN_LEAVES)));
_local5 = ((((((levelTime < TIME_ENEMIES_FROM_BEHIND)) || (_local4))) || ((seededRandom.random() < 0.9)))) ? Utils.LEFT : Utils.RIGHT;
if (_local4){
_local7 = WorldObject.TYPE_LEAF;
_local6 = (seededRandom.random() < 0.75);
} else {
do {
_local7 = baddieTypes[Math.floor((seededRandom.random() * baddieTypes.length))];
} while ((((((((((_local7 == WorldObject.TYPE_TOP_NODULE)) || ((_local7 == WorldObject.TYPE_BOTTOM_EGG)))) || ((_local7 == WorldObject.TYPE_BOTTOM_BADDIE_BIG)))) || ((_local7 == WorldObject.TYPE_TOP_BADDIE_BIG)))) && ((timeSinceLastSmartBomb < 15))));
_local6 = (_local7 == WorldObject.TYPE_TOP_BADDIE_FLY);
if ((((((((_local7 == WorldObject.TYPE_TOP_NODULE)) || ((_local7 == WorldObject.TYPE_BOTTOM_EGG)))) || ((_local7 == WorldObject.TYPE_BOTTOM_BADDIE_BIG)))) || ((_local7 == WorldObject.TYPE_TOP_BADDIE_BIG)))){
_local5 = Utils.LEFT;
timeSinceLastSmartBomb = 0;
};
};
if (_local7 == WorldObject.TYPE_TOP_BADDIE_BIG){
_local5 = Utils.LEFT;
};
if ((((((((((levelTime >= TIME_ENEMIES_FROM_BEHIND)) && (((levelTime - TIME_ENEMIES_FROM_BEHIND) < 10)))) && (!(_local4)))) && (!((_local7 == WorldObject.TYPE_BOTTOM_EGG))))) && (!((_local7 == WorldObject.TYPE_TOP_NODULE))))){
_local5 = Utils.RIGHT;
};
if ((((((levelTime >= TIME_SQUASHABLE_ENEMIES)) && (((levelTime - TIME_SQUASHABLE_ENEMIES) < 15)))) && (!(_local4)))){
_local5 = Utils.LEFT;
_local6 = false;
_local7 = WorldObject.TYPE_TOP_BADDIE_SQUASHABLE;
};
if ((((((levelTime >= TIME_BIG_ENEMIES)) && (((levelTime - TIME_BIG_ENEMIES) < 15)))) && (!(_local4)))){
_local5 = Utils.LEFT;
_local6 = false;
_local7 = WorldObject.TYPE_TOP_BADDIE_BIG;
};
_local8 = (((levelTime > (TIME_TOP_SCREEN_APPEARS + 1))) && (nextBaddieOnTopScreen));
nextBaddieOnTopScreen = !(nextBaddieOnTopScreen);
spawnWorldObject(_local7, _local5, _local6, _local8, _local4);
if (_local7 == WorldObject.TYPE_TOP_BADDIE_BIG){
spawnWorldObject((_local8) ? WorldObject.TYPE_BOTTOM_EGG : WorldObject.TYPE_TOP_NODULE, Utils.LEFT, false, !(_local8), false);
timeTilNextBaddie = (timeTilNextBaddie + 2);
};
};
};
}
public function reset():void{
seededRandom.seed = LEVEL_SEED;
Player.pool.deactivateAll();
player0 = Player.create(true, Engine.HALFWIDTH, GROUND_Y0);
player1 = Player.create(false, Engine.HALFWIDTH, GROUND_Y1);
resetTopScreenScroll();
}
public function keyUp(_arg1:int):void{
switch (_arg1){
case KeyCodes.Q:
case Keyboard.SPACE:
if (buttonIsDown){
player1.jump();
};
buttonIsDown = false;
break;
};
}
public function setTopScreenMaskX(_arg1:Number):void{
var _local2:uint = 6;
while (_local2 < 13) {
parallaxBackground.getLayerAt(_local2).mask.x = _arg1;
_local2++;
};
}
public function addPoints(_arg1:int):void{
score = (score + _arg1);
}
public function stopTopScreenScroll():void{
if (!Engine.MUTE){
SoundManager.fadeOutSound("MUSIC_GAME");
};
topScreenStoppedScrolling = true;
var _local1:uint = 6;
while (_local1 < 13) {
if (_local1 != 10){
parallaxBackground.setScrollSpeed(_local1, 0);
};
_local1++;
};
}
public function startEndSequence():void{
wyrmBackground.reset();
wyrmBackground.visible = false;
setTopScreenMaskX(Engine.WIDTH);
parallaxBackground.y = 600;
endSequence.reset();
endSequence.visible = true;
}
}
}//package
Section 110
//World_BottomBg0Clouds (World_BottomBg0Clouds)
package {
import mx.core.*;
public class World_BottomBg0Clouds extends SpriteAsset {
}
}//package
Section 111
//World_BottomBg1Mountains (World_BottomBg1Mountains)
package {
import mx.core.*;
public class World_BottomBg1Mountains extends SpriteAsset {
}
}//package
Section 112
//World_BottomBg2Hills (World_BottomBg2Hills)
package {
import mx.core.*;
public class World_BottomBg2Hills extends SpriteAsset {
}
}//package
Section 113
//World_BottomBg3Floor (World_BottomBg3Floor)
package {
import mx.core.*;
public class World_BottomBg3Floor extends SpriteAsset {
}
}//package
Section 114
//World_BottomBg5Foreground (World_BottomBg5Foreground)
package {
import mx.core.*;
public class World_BottomBg5Foreground extends SpriteAsset {
}
}//package
Section 115
//World_TopBg0AnusBack (World_TopBg0AnusBack)
package {
import mx.core.*;
public class World_TopBg0AnusBack extends SpriteAsset {
}
}//package
Section 116
//World_TopBg0Back (World_TopBg0Back)
package {
import mx.core.*;
public class World_TopBg0Back extends SpriteAsset {
}
}//package
Section 117
//World_TopBg1AnusFloor (World_TopBg1AnusFloor)
package {
import mx.core.*;
public class World_TopBg1AnusFloor extends SpriteAsset {
}
}//package
Section 118
//World_TopBg1Floor (World_TopBg1Floor)
package {
import mx.core.*;
public class World_TopBg1Floor extends SpriteAsset {
}
}//package
Section 119
//World_TopBg3AnusTop (World_TopBg3AnusTop)
package {
import mx.core.*;
public class World_TopBg3AnusTop extends SpriteAsset {
}
}//package
Section 120
//World_TopBg3Top (World_TopBg3Top)
package {
import mx.core.*;
public class World_TopBg3Top extends SpriteAsset {
}
}//package
Section 121
//World_TopScreenMaskSprite (World_TopScreenMaskSprite)
package {
import mx.core.*;
public class World_TopScreenMaskSprite extends SpriteAsset {
}
}//package
Section 122
//WorldObject (WorldObject)
package {
import flash.events.*;
import flash.display.*;
import flesh.*;
public class WorldObject extends PoolObject {
public var timeBeforeCharge:Number;
private var WorldObjectClip:Class;
public var maxSpeed:Number;
public var speed:Number;
public var clip:MovieClip;
public var state:int;
public var top:Boolean;
public var fadeDelay:Number;
public var squashTime:Number;
public var killFlash:int;
public var rotateAngle:Number;
public var type:int;
public var direction:int;
public static const TYPE_LEAF:uint = 1;
public static const MAX:uint = 25;
public static const STATE_FADING:uint = 2;
public static const TYPE_BOTTOM_BADDIE_BIG:uint = 5;
public static const TYPE_BOTTOM_BADDIE_SQUASHABLE:uint = 4;
public static const TYPE_TOP_BADDIE_SPIKEY:uint = 7;
public static const STATE_SQUASHED:uint = 1;
public static const TYPE_TOP_NODULE_BREAK:uint = 13;
public static const TYPE_TOP_BADDIE_FLY:uint = 8;
public static const TYPE_BOTTOM_EGG_BREAK:uint = 12;
public static const TYPE_TOP_BADDIE_SQUASHABLE_DIE:uint = 15;
public static const TYPE_BOTTOM_BADDIE_SPIKEY:uint = 2;
public static const TYPE_TOP_BADDIE_BIG:uint = 10;
public static const TYPE_TOP_BADDIE_SQUASHABLE:uint = 9;
public static const TYPE_BOTTOM_BADDIE_SQUASHABLE_DIE:uint = 14;
public static const STATE_NORMAL:uint = 0;
public static const TYPE_BOTTOM_EGG:uint = 6;
public static const TYPE_TOP_NODULE:uint = 11;
public static const TYPE_BOTTOM_BADDIE_FLY:uint = 3;
public static var pool:ManagedPool;
public function WorldObject(_arg1:uint){
WorldObjectClip = WorldObject_WorldObjectClip;
super(_arg1);
clip = new WorldObjectClip();
}
override public function update(_arg1:Number):void{
var _local2:Number;
var _local3:Player;
if (direction == Utils.RIGHT){
if (timeBeforeCharge > 0){
timeBeforeCharge = (timeBeforeCharge - _arg1);
_local2 = (30 - clip.x);
clip.x = (clip.x + (_local2 * 0.05));
} else {
speed = (speed + (300 * _arg1));
clip.x = (clip.x + (speed * _arg1));
};
} else {
clip.x = (clip.x + (speed * _arg1));
};
if ((((clip.x < -100)) || ((clip.x > (Engine.WIDTH + 100))))){
deactivate();
return;
};
switch (state){
case STATE_NORMAL:
for each (_local3 in Player.pool.activePool) {
if (clip.hitTestObject(_local3.clip)){
_local3.collidedWithObject(this);
};
};
break;
case STATE_SQUASHED:
squashTime = (squashTime + _arg1);
if (squashTime > 1){
deactivate();
};
break;
case STATE_FADING:
if (fadeDelay > 0){
fadeDelay = (fadeDelay - _arg1);
} else {
killFlash++;
clip.visible = (((killFlash / 1) % 2) == 0);
if (killFlash > 20){
deactivate();
};
};
break;
};
if (type == TYPE_LEAF){
rotateAngle = (rotateAngle + (_arg1 * 5));
clip.rotation = (Math.sin(rotateAngle) * 10);
};
}
public function init(_arg1:Boolean, _arg2:int, _arg3:int, _arg4:int, _arg5:int):void{
this.top = _arg1;
this.type = _arg2;
this.direction = _arg5;
rotateAngle = 0;
clip.x = _arg3;
clip.y = _arg4;
clip.rotation = 0;
clip.alpha = 1;
clip.visible = true;
timeBeforeCharge = 2;
state = STATE_NORMAL;
setFrame(_arg2);
clip.scaleX = ((_arg5 == Utils.LEFT)) ? 1 : -1;
clip.scaleY = 1;
Utils.addChild(clip, (_arg1) ? World.instance.baddieSpriteTop : World.instance.baddieSpriteBottom);
if (_arg5 == Utils.LEFT){
speed = Player.MIN_SPEED_X;
} else {
speed = (Player.MAX_SPEED_X * 5);
};
switch (_arg2){
case TYPE_TOP_BADDIE_BIG:
case TYPE_BOTTOM_BADDIE_BIG:
speed = (speed * 0.5);
break;
case TYPE_LEAF:
speed = (speed * 0.75);
break;
case TYPE_TOP_BADDIE_FLY:
case TYPE_BOTTOM_BADDIE_FLY:
speed = (speed * 1.5);
break;
case TYPE_TOP_BADDIE_SPIKEY:
case TYPE_BOTTOM_BADDIE_SPIKEY:
case TYPE_TOP_BADDIE_SQUASHABLE:
case TYPE_BOTTOM_BADDIE_SQUASHABLE:
speed = (speed * 1.25);
break;
case TYPE_TOP_NODULE:
case TYPE_BOTTOM_EGG:
speed = -60;
break;
};
maxSpeed = speed;
if (_arg5 == Utils.RIGHT){
speed = 0;
};
}
public function kill(_arg1:Number=0):void{
state = STATE_FADING;
this.fadeDelay = _arg1;
killFlash = 0;
if (type == TYPE_BOTTOM_EGG){
clip.gotoAndStop(TYPE_BOTTOM_EGG_BREAK);
} else {
if (type == TYPE_TOP_NODULE){
clip.gotoAndStop(TYPE_TOP_NODULE_BREAK);
};
};
}
public function squash():void{
state = STATE_SQUASHED;
squashTime = 0;
if (type == TYPE_TOP_BADDIE_SQUASHABLE){
clip.gotoAndStop(TYPE_TOP_BADDIE_SQUASHABLE_DIE);
} else {
if (type == TYPE_BOTTOM_BADDIE_SQUASHABLE){
clip.gotoAndStop(TYPE_BOTTOM_BADDIE_SQUASHABLE_DIE);
};
};
}
public function isSquashable():Boolean{
return ((((type == WorldObject.TYPE_BOTTOM_BADDIE_SQUASHABLE)) || ((type == WorldObject.TYPE_TOP_BADDIE_SQUASHABLE))));
}
public function isBaddie():Boolean{
return ((((((type >= TYPE_BOTTOM_BADDIE_SPIKEY)) && ((type <= TYPE_TOP_BADDIE_BIG)))) && (!((type == TYPE_BOTTOM_EGG)))));
}
public function setFrame(_arg1:int):void{
clip.gotoAndStop(_arg1);
clip.addEventListener(Event.ENTER_FRAME, clipFrameChanged);
}
override public function createInstance(_arg1:uint):PoolObject{
return (new WorldObject(_arg1));
}
public function clipFrameChanged(_arg1:Event):void{
var _local2:MovieClip;
if (type == TYPE_LEAF){
_local2 = clip["leaf"];
_local2.gotoAndStop((Math.floor((Math.random() * 2)) + 1));
};
clip.removeEventListener(Event.ENTER_FRAME, clipFrameChanged);
}
override public function deactivate():void{
active = false;
pool.notifyDeactivated(this);
Utils.removeChild(clip);
}
public static function killAllBaddies(_arg1:Boolean):void{
var _local2:WorldObject;
for each (_local2 in pool.activePool) {
if (_local2.top != _arg1){
} else {
if (_local2.isBaddie()){
_local2.kill();
};
};
};
}
public static function create(_arg1:Boolean, _arg2:int, _arg3:int, _arg4:int, _arg5:int):WorldObject{
var _local6:WorldObject = (pool.requestObject() as WorldObject);
_local6.init(_arg1, _arg2, _arg3, _arg4, _arg5);
return (_local6);
}
public static function initStart():void{
pool = new ManagedPool("ObstaclePool", new WorldObject(0), MAX);
}
}
}//package
Section 123
//WorldObject_WorldObjectClip (WorldObject_WorldObjectClip)
package {
import mx.core.*;
import flash.display.*;
public class WorldObject_WorldObjectClip extends MovieClipAsset {
public var buttonG5:DisplayObject;
public var buttonReturn:DisplayObject;
public var playerScoreText:DisplayObject;
public var buttonPlay:DisplayObject;
public var anim:DisplayObject;
public var topLivesText:DisplayObject;
public var credits:DisplayObject;
public var buttonOktomusic:DisplayObject;
public var buttonMark:DisplayObject;
public var buttonKwok:DisplayObject;
public var logo:DisplayObject;
public var buttonArmor:DisplayObject;
public var buttonKokoromi:DisplayObject;
public var bottomLivesIcon:DisplayObject;
public var buttonHighScoreSubmit:DisplayObject;
public var buttonScoreSubmit:DisplayObject;
public var buttonViewHighScores:DisplayObject;
public var copyright:DisplayObject;
public var topLivesIcon:DisplayObject;
public var newHighScore:DisplayObject;
public var buttonHoneyslug:DisplayObject;
public var clip:DisplayObject;
public var highScoreText:DisplayObject;
public var leaf:DisplayObject;
public var scoreText:DisplayObject;
public var splash:DisplayObject;
public var buttonRicky:DisplayObject;
public var bottomLivesText:DisplayObject;
public var creditsText:DisplayObject;
public var instructionsText:DisplayObject;
public var creditsButton:DisplayObject;
public var buttonDick:DisplayObject;
}
}//package
Section 124
//WyrmBackground (WyrmBackground)
package {
import flash.display.*;
import flesh.*;
public dynamic class WyrmBackground extends MovieClip {
public var dir:int;
public var mouthOpenTime:Number;
public static const RANGE:Number = (MAX_X - MIN_X);
public static const SPEED:Number = 120;
public static const MIN_X:Number = -80;
public static const MAX_X:Number = (Engine.WIDTH + 80);
public function bite(_arg1:Number=0.5):void{
mouthOpenTime = _arg1;
}
public function update(_arg1:Number):void{
var _local3:Number;
if (mouthOpenTime > 0){
mouthOpenTime = (mouthOpenTime - _arg1);
if (mouthOpenTime <= 0){
};
};
switch (dir){
case Utils.LEFT:
x = (x - (SPEED * _arg1));
if (x < MIN_X){
dir = Utils.RIGHT;
};
break;
case Utils.RIGHT:
x = (x + (SPEED * _arg1));
if (x > MAX_X){
dir = Utils.LEFT;
};
break;
};
var _local2:Number = Math.sin((((x - MIN_X) / RANGE) * Utils.RAD180));
if (dir == Utils.LEFT){
_local3 = (1 - (0.5 * _local2));
} else {
_local3 = (0.25 + (0.75 * _local2));
};
scaleX = ((dir == Utils.LEFT)) ? _local3 : -(_local3);
scaleY = _local3;
}
public function reset():void{
x = MAX_X;
y = 284;
mouthOpenTime = 0;
dir = Utils.LEFT;
}
}
}//package
Section 125
//WyrmForeground (WyrmForeground)
package {
import flash.display.*;
public dynamic class WyrmForeground extends MovieClip {
public var speed:Number;
public var frameTime:Number;
public var crossedRider:Boolean;
public var mouthOpenTime:Number;
public static const HERO_DISAPPEAR_FRAME:int = 17;
public static const FLY_LAST_FRAME:int = 14;
public static const MAX_SPEED:Number = 400;
public static const EAT_FIRST_FRAME:int = 17;
public static const START_X:Number = 118;
public static const CHARGE_ACCEL:Number = 600;
public function update(_arg1:Number):void{
var _local2:Number;
if (World.instance.levelTime > World.TIME_WYRM_APPEARS){
frameTime = (frameTime + _arg1);
if (frameTime > 0.08){
frameTime = 0;
gotoNextFrame();
};
};
if (World.instance.levelTimeCrossed(World.TIME_WYRM_APPEARS)){
Engine.instance.playSoundPanned("WYRM_ROAR", x);
};
if (World.instance.levelTimeCrossed(World.TIME_WYRM_CHARGE)){
Engine.instance.playSoundPanned("WYRM_ROAR", x);
};
if ((((World.instance.levelTime > World.TIME_WYRM_CHARGE)) && (!(crossedRider)))){
speed = (speed + (CHARGE_ACCEL * _arg1));
if (speed > MAX_SPEED){
speed = MAX_SPEED;
};
x = (x + (speed * _arg1));
if (((((x + 80) > World.instance.player1.clip.x)) && (!(World.instance.player1.lostRider)))){
crossedRider = true;
mouthOpenTime = 0;
};
} else {
if (World.instance.levelTime > World.TIME_WYRM_APPEARS){
if (((((World.instance.levelTimeCrossed((World.TIME_WYRM_APPEARS + 1))) || (World.instance.levelTimeCrossed((World.TIME_WYRM_APPEARS + 2))))) || (World.instance.levelTimeCrossed((World.TIME_WYRM_APPEARS + 2.5))))){
bite(0.15);
};
_local2 = (START_X - x);
x = (x + (_local2 * 0.1));
};
};
}
public function reset():void{
x = -150;
y = 327;
speed = 0;
mouthOpenTime = 0;
frameTime = 0;
gotoAndStop(1);
crossedRider = false;
}
public function gotoNextFrame():void{
var _local1:int = currentFrame;
if ((((World.instance.levelTime < World.TIME_WYRM_CHARGE)) || (!(crossedRider)))){
_local1++;
if (_local1 > FLY_LAST_FRAME){
_local1 = 1;
};
} else {
if (_local1 < EAT_FIRST_FRAME){
_local1 = EAT_FIRST_FRAME;
} else {
_local1++;
};
if (_local1 == HERO_DISAPPEAR_FRAME){
World.instance.player1.loseRider();
} else {
if (_local1 == 28){
Engine.instance.playSoundPanned("WYRM_BITE", x);
};
};
};
if ((((_local1 == 1)) || ((_local1 == 12)))){
Engine.instance.playSoundPanned("WYRM_JAW_SNAP", x);
};
gotoAndStop(_local1);
}
public function bite(_arg1:Number=0.5):void{
mouthOpenTime = _arg1;
}
}
}//package
Section 126
//ZattikkaHiScores (ZattikkaHiScores)
package {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import com.hexagonstar.util.debug.*;
import flash.external.*;
public class ZattikkaHiScores extends MovieClip {
private const EVENT_VIEW_HI_SCORE:String = "ViewHiScore=";
private const MSG_SERVER_ERROR:String = "Could not contact server, please try again in a few minutes.";
private const FB_ACTION:String = "/Facebook.action?";
private const HS_PLATFORM_WEB:int = 0;
private const TEST_SERVER_URL:String = "http://api.staging.zattikka.com";
private const DEV_TEST_MODE_FB:int = 2;
private const EVENT_SUBMIT_HI_SCORE:String = "SubmitHiScore=";
private const DEV_TEST_MODE_G5:int = 1;
private const EVENT_GET_HI_SCORES:String = "GetHiScores=";
private const VERSION_NUM:String = "1.0.15 (AS3)";
private const EVENT_VIEW_HI_SCORES:String = "ViewHiScores=";
private const TW_ACTION:String = "/Twitter.action?";
private const LIVE_SERVER_URL:String = "http://api.zattikka.com";
private const MSG_SUBMITTING_DETAILS:String = "Submitting hi-score details to the server, please wait.";
private const GFTP_URL:String = "http://www.gamesfortheplanet.com";
private const MSG_PLEASE_ENTER_NICKNAME:String = "Please enter your nickname.";
private const EVENT_PUBLISH_HI_SCORE_FEED_EXTERNAL:String = "PublishHiScoreFeedExternal=";
private const EVENT_POST_TWEET:String = "PostTweet=";
private const HS_PLATFORM_FACEBOOK:int = 1;
private const HS_ACTION:String = "/HiScore.action?";
private const EVENT_PUBLISH_HI_SCORE_FEED:String = "PublishHiScoreFeed=";
private const DEV_TEST_MODE_OFF:int = 0;
public var btnGFTP:SimpleButton;
private var gameKey:String;
private var SERVER_URL:String;// = "http://api.zattikka.com"
private var g5UserExists:Boolean;
private var entryScreen:MovieClip;// = null
private var devTestMode:int;// = 0
private var caller:Object;
private var score:Number;
private var g5User:Object;
private var fbUser:Object;
private var cxn:LocalConnection;
private var lowIsBest:Boolean;
private var gameId:Number;
private var infoScreen:MovieClip;// = null
private var levelId:Number;
private var fbSessionKey:String;
public var movEntryScreen:MovieClip;
private var msg1:String;
private var msg2:String;
private var fbUserExists:Boolean;
public var movInfoScreen:MovieClip;
private var gameCode:String;
public function ZattikkaHiScores(){
debug((("[ZattikkaHiScores VERSION " + VERSION_NUM) + "]"));
this.visible = false;
}
private function grabG5User():void{
this.g5User = ExternalInterface.call("getG5User");
this.g5UserExists = ((g5User == null)) ? false : !(isNaN(this.g5User[0]));
if (devTestMode == DEV_TEST_MODE_G5){
this.g5User = new Array("9", "RocketRonz");
this.g5UserExists = ((g5User == null)) ? false : !(isNaN(this.g5User[0]));
};
debug(("[ZattikkaHiScores::grabG5User] " + (g5UserExists) ? ((("userId = " + this.g5User[0]) + ", userName = ") + this.g5User[1]) : "g5User is empty"));
}
private function grabFacebookUser():void{
this.fbUser = ExternalInterface.call("getFBUser");
this.fbUserExists = ((fbUser == null)) ? false : !(isNaN(this.fbUser[0]));
this.fbSessionKey = ExternalInterface.call("getFBSessionKey");
if (devTestMode == DEV_TEST_MODE_FB){
this.fbUser = new Array("1383775213", "Dolphin Gimme-Five");
this.fbUserExists = ((fbUser == null)) ? false : !(isNaN(this.fbUser[0]));
this.fbSessionKey = "ad4dff81c4d2467efc456072-1383775213";
};
debug(("[ZattikkaHiScores::grabFacebookUser] " + (fbUserExists) ? ((((("userId = " + this.fbUser[0]) + ", userName = ") + this.fbUser[1]) + ", sessionKey = ") + this.fbSessionKey) : "fbUser is empty"));
}
private function getRandomString(_arg1:int):String{
var _local2 = "";
var _local3:int;
while (_local3 < _arg1) {
_local2 = (_local2 + String.fromCharCode(getRandom(48, 122)));
_local3++;
};
return (_local2);
}
public function showInfoMessage(_arg1:String, _arg2:Boolean):void{
infoScreen["txtInfo"].text = _arg1;
infoScreen["btnBack"].visible = _arg2;
infoScreen["btnView"].visible = ((!(_arg2)) && (!(fbUserExists)));
infoScreen.visible = true;
entryScreen.visible = false;
}
private function showEntryScreen():void{
entryScreen["txtMsg1"].text = msg1;
entryScreen["txtMsg2"].text = msg2;
entryScreen["movNameAuto"].visible = ((g5UserExists) || (fbUserExists));
entryScreen["movNameManual"].visible = ((!(g5UserExists)) && (!(fbUserExists)));
entryScreen["movNameAuto"]["txtName"].text = (g5UserExists) ? this.g5User[1] : (fbUserExists) ? this.fbUser[1] : "";
entryScreen["movNameManual"]["txtName"].text = "";
entryScreen.visible = true;
infoScreen.visible = false;
}
private function replaceAll(_arg1:String, _arg2:String, _arg3:String):String{
var _local4 = "";
var _local5:int;
while (_local5 < _arg1.length) {
if (_arg1.charAt(_local5) == _arg2){
_local4 = (_local4 + _arg3);
} else {
_local4 = (_local4 + _arg1.charAt(_local5));
};
_local5++;
};
return (_local4);
}
private function xor(_arg1:String, _arg2:String, _arg3:Boolean):String{
var _local7:int;
var _local4 = "";
var _local5:int;
var _local6:int;
while (_local5 < _arg1.length) {
if (_local6 >= _arg2.length){
_local6 = 0;
};
_local7 = ((_arg1.charCodeAt(_local5) ^ _arg2.charCodeAt(_local6)) + 1);
if (_arg3){
debug(((("charCode = " + _local7) + " = ") + String.fromCharCode(_local7)));
};
_local4 = (_local4 + String.fromCharCode(_local7));
_local5++;
_local6++;
};
return (_local4);
}
private function submitScore():void{
showInfoMessage(MSG_SUBMITTING_DETAILS, false);
infoScreen.visible = true;
entryScreen.visible = false;
var _local1:int = (fbUserExists) ? HS_PLATFORM_FACEBOOK : HS_PLATFORM_WEB;
var _local2 = "";
var _local3 = "";
if (fbUserExists){
_local3 = this.fbUser[0];
_local2 = this.fbUser[1];
} else {
if (g5UserExists){
_local3 = this.g5User[0];
_local2 = this.g5User[1];
} else {
_local2 = entryScreen["movNameManual"]["txtName"].text;
};
};
var _local4:String = String(new Date().getTime());
var _local5:String = _local4.split("").reverse().join("");
var _local6:String = xor(_local5, this.gameKey, false);
var _local7 = "";
_local7 = (_local7 + (this.gameId + ","));
_local7 = (_local7 + (this.levelId + ","));
_local7 = (_local7 + (_local1 + ","));
_local7 = (_local7 + (this.score + ","));
_local7 = (_local7 + (_local3 + ","));
_local7 = (_local7 + (replaceAll(_local2, ",", "") + ","));
_local7 = (_local7 + ",");
_local7 = (_local7 + lowIsBest);
var _local8:String = xor(_local7, _local6, false);
debug(((("key [" + _local6.length) + "] = ") + _local6));
debug(((("plain [" + _local7.length) + "] = ") + _local7));
debug(((("cipher [" + _local8.length) + "] = ") + _local8));
_local8 = ((getRandomString(5) + _local8) + getRandomString(5));
var _local9:URLVariables = new URLVariables();
_local9.gameId = this.gameId;
_local9.platformId = _local1;
_local9.time = _local4;
_local9.data = _local8;
_local9.returnMessage = true;
hitServer(HS_ACTION, EVENT_SUBMIT_HI_SCORE, _local9);
}
private function debug(_arg1:String):void{
trace(_arg1);
Debug.trace(_arg1);
}
public function viewHiScores(_arg1:int, _arg2:Boolean=false):void{
debug(((("[ZattikkaHiScores::viewHiScores] gameId = " + _arg1) + ", testMode = ") + _arg2));
initServerURL(_arg2);
var _local3:String = ((SERVER_URL + HS_ACTION) + EVENT_VIEW_HI_SCORES);
_local3 = (_local3 + ("&gameId=" + _arg1));
navigateToURL(new URLRequest(_local3), "_blank");
}
private function facebookFeedExternal():void{
navigateToURL(new URLRequest(((SERVER_URL + FB_ACTION) + EVENT_PUBLISH_HI_SCORE_FEED_EXTERNAL)), "_blank");
try {
cxn = new LocalConnection();
cxn.allowDomain("*");
cxn.client = this;
cxn.connect("_cxnZattikkaHS");
} catch(err:Error) {
};
}
public function setDetails(_arg1:int, _arg2:int, _arg3:String, _arg4:String, _arg5:Boolean, _arg6:Number, _arg7:String, _arg8:String, _arg9:Boolean=false):void{
var gameId = _arg1;
var levelId = _arg2;
var gameCode = _arg3;
var gameKey = _arg4;
var lowIsBest = _arg5;
var score = _arg6;
var msg1 = _arg7;
var msg2 = _arg8;
var testMode = _arg9;
debug(((((((((((("[ZattikkaHiScores::setDetails] gameId = " + gameId) + ", levelId = ") + levelId) + ", gameCode = ") + gameCode) + ", lowIsBest = ") + lowIsBest) + ", score = ") + score) + ", testMode = ") + testMode));
initServerURL(testMode);
entryScreen = this["movEntryScreen"];
infoScreen = this["movInfoScreen"];
entryScreen.visible = false;
infoScreen.visible = false;
this.gameId = gameId;
this.levelId = levelId;
this.gameCode = gameCode;
this.gameKey = gameKey;
this.lowIsBest = lowIsBest;
this.score = score;
this.msg1 = msg1;
this.msg2 = msg2;
try {
grabG5User();
if (!g5UserExists){
grabFacebookUser();
};
} catch(err:Error) {
};
this["btnGFTP"].addEventListener(MouseEvent.MOUSE_DOWN, onButtonPress);
entryScreen["btnSubmit"].addEventListener(MouseEvent.MOUSE_DOWN, onButtonPress);
entryScreen["btnTwitter"].addEventListener(MouseEvent.MOUSE_DOWN, onButtonPress);
entryScreen["btnFacebook"].addEventListener(MouseEvent.MOUSE_DOWN, onButtonPress);
infoScreen["btnView"].addEventListener(MouseEvent.MOUSE_DOWN, onButtonPress);
infoScreen["btnBack"].addEventListener(MouseEvent.MOUSE_DOWN, onButtonPress);
if (fbUserExists){
btn_submitScore();
} else {
showEntryScreen();
};
this.visible = true;
}
private function facebookFeed():void{
var _local1:URLVariables = new URLVariables();
_local1.gameId = this.gameId;
_local1.levelId = this.levelId;
_local1.score = this.score;
_local1.sessionKey = this.fbSessionKey;
_local1.returnMessage = true;
hitServer(FB_ACTION, EVENT_PUBLISH_HI_SCORE_FEED, _local1);
}
public function setFBUser(_arg1:String, _arg2:String):void{
debug(((("[ZattikkaHiScores::setFBUser] fbUserId = " + _arg1) + ", fbSessionKey = ") + _arg2));
this.fbUser = new Array(_arg1, "");
this.fbUserExists = true;
this.fbSessionKey = _arg2;
cxn.close();
facebookFeed();
}
public function loadHandler(_arg1:String, _arg2:Boolean, _arg3:Event):void{
var response:URLLoader;
var xml:XML;
var resCode:int;
var stripesEvent = _arg1;
var success = _arg2;
var event = _arg3;
debug(((((("[ZattikkaHiScores::loadHandler] stripesEvent = " + stripesEvent) + ", success = ") + success) + ", event = ") + event.toString()));
if (!success){
if (stripesEvent == EVENT_GET_HI_SCORES){
caller.getHiScores_Error();
} else {
showInfoMessage(MSG_SERVER_ERROR, true);
};
} else {
response = URLLoader(event.target);
xml = new XML(response.data);
resCode = xml.@code;
switch (stripesEvent){
case EVENT_SUBMIT_HI_SCORE:
showInfoMessage(xml.@msg, (resCode == -1));
if (((fbUserExists) && ((((resCode == 1)) || ((resCode == 2)))))){
try {
ExternalInterface.call("refreshFBHiScores", this.score, this.levelId);
ExternalInterface.call("streamPublish_FBConnect", this.msg1, this.levelId);
} catch(err:Error) {
};
};
break;
case EVENT_PUBLISH_HI_SCORE_FEED:
submitScore();
break;
case EVENT_GET_HI_SCORES:
caller.getHiScores_Callback(xml);
break;
};
};
}
private function getRandom(_arg1:Number, _arg2:Number):Number{
return ((Math.floor((Math.random() * ((_arg2 - _arg1) + 1))) + _arg1));
}
private function hitServer(_arg1:String, _arg2:String, _arg3:URLVariables):void{
var stripesAction = _arg1;
var stripesEvent = _arg2;
var vars = _arg3;
debug(((("[ZattikkaHiScores::hitServer] url = " + SERVER_URL) + stripesAction) + stripesEvent));
var request:URLRequest = new URLRequest(((SERVER_URL + stripesAction) + stripesEvent));
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
request.data = vars;
request.method = URLRequestMethod.POST;
request.requestHeaders = new Array(new URLRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
loader.addEventListener(Event.COMPLETE, function (_arg1:Event):void{
loadHandler(stripesEvent, true, _arg1);
});
loader.addEventListener(IOErrorEvent.IO_ERROR, function (_arg1:Event):void{
loadHandler(stripesEvent, false, _arg1);
});
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (_arg1:Event):void{
loadHandler(stripesEvent, false, _arg1);
});
loader.load(request);
}
private function twitterTweet():void{
var _local1:String = ((SERVER_URL + TW_ACTION) + EVENT_POST_TWEET);
_local1 = (_local1 + ("&gameId=" + this.gameId));
_local1 = (_local1 + ("&levelId=" + this.levelId));
_local1 = (_local1 + ("&score=" + this.score));
navigateToURL(new URLRequest(_local1), "_blank");
submitScore();
}
public function onButtonPress(_arg1:MouseEvent):void{
switch (_arg1.target.name){
case "btnGFTP":
navigateToURL(new URLRequest(GFTP_URL), "_blank");
break;
case "btnSubmit":
btn_submitScore();
break;
case "btnTwitter":
if (((((!(this.g5UserExists)) && (!(this.fbUserExists)))) && ((entryScreen["movNameManual"]["txtName"].text.length == 0)))){
showInfoMessage(MSG_PLEASE_ENTER_NICKNAME, true);
} else {
twitterTweet();
};
break;
case "btnFacebook":
if (this.fbUserExists){
facebookFeed();
} else {
facebookFeedExternal();
};
break;
case "btnView":
viewScore();
break;
case "btnBack":
setDetails(this.gameId, this.levelId, this.gameCode, this.gameKey, this.lowIsBest, this.score, this.msg1, this.msg2);
break;
};
}
public function viewScore():void{
var _local1:String = ((SERVER_URL + HS_ACTION) + EVENT_VIEW_HI_SCORE);
_local1 = (_local1 + ("&gameId=" + this.gameId));
_local1 = (_local1 + ("&levelId=" + this.levelId));
_local1 = (_local1 + ("&platformId=" + HS_PLATFORM_WEB));
_local1 = (_local1 + ("&gameCode=" + this.gameCode));
if (this.g5UserExists){
_local1 = (_local1 + ("&userId=" + this.g5User[0]));
} else {
_local1 = (_local1 + ("&name=" + entryScreen["movNameManual"]["txtName"].text));
};
navigateToURL(new URLRequest(_local1), "_blank");
}
private function btn_submitScore():void{
if (((((!(this.g5UserExists)) && (!(this.fbUserExists)))) && ((entryScreen["movNameManual"]["txtName"].text.length == 0)))){
showInfoMessage(MSG_PLEASE_ENTER_NICKNAME, true);
} else {
submitScore();
};
}
public function getHiScores(_arg1:Object, _arg2:int, _arg3:int, _arg4:int, _arg5:Boolean, _arg6:Boolean=false):void{
debug(((((((((("[ZattikkaHiScores::getHiScores] gameId = " + _arg2) + ", levelId = ") + _arg3) + ", numRows = ") + _arg4) + ", lowIsBest = ") + _arg5) + ", testMode = ") + _arg6));
initServerURL(_arg6);
this.caller = _arg1;
var _local7:URLVariables = new URLVariables();
_local7.gameId = _arg2;
_local7.levelId = _arg3;
_local7.platformId = 0;
_local7.viewPlatformId = 0;
_local7.userId = "";
_local7.numRows = _arg4;
_local7.lowIsBest = _arg5;
hitServer(HS_ACTION, EVENT_GET_HI_SCORES, _local7);
}
public function initServerURL(_arg1:Boolean):void{
var params:Object;
var fvSvrUrl:Object;
var testMode = _arg1;
if (testMode){
SERVER_URL = TEST_SERVER_URL;
} else {
try {
params = LoaderInfo(this.root.loaderInfo).parameters;
fvSvrUrl = params["svrUrl"];
if (((!((fvSvrUrl == null))) && ((fvSvrUrl.length > 0)))){
SERVER_URL = String(fvSvrUrl);
};
} catch(err:Error) {
};
};
debug(("[ZattikkaHiScores::initServerURL] SERVER_URL = " + SERVER_URL));
}
}
}//package