Section 1
//Kgg (api.Kgg)
package api {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import flash.system.*;
public class Kgg extends Sprite {
public var k;
public var s:Stage;
public function Kgg(stage:Stage):void{
var loadComplete:Function;
var stage = stage;
super();
loadComplete = function (event:Event):void{
k = event.target.content;
k.services.connect();
trace("KGG API LOADED");
};
s = stage;
var paramObj:Object = LoaderInfo(s.loaderInfo).parameters;
var apiPath:String = ((paramObj.kongregate_api_path) || ("http://www.kongregate.com/flash/API_AS3_Local.swf"));
Security.allowDomain(apiPath);
var request:URLRequest = new URLRequest(apiPath);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
loader.load(request);
this.addChild(loader);
Global.kgg = this;
}
}
}//package api
Section 2
//MochiBot (api.MochiBot)
package api {
import flash.display.*;
import flash.net.*;
import flash.system.*;
public class MochiBot extends Sprite {
public function MochiBot(){
super();
}
public static function track(parent:Sprite, tag:String, aim:String=""):MochiBot{
var nklink:URLRequest;
if (Security.sandboxType == "localWithFile"){
return (null);
};
var self:MochiBot = new (MochiBot);
parent.addChild(self);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
var server:String = "http://core.mochibot.com/my/core.swf";
var lv:URLVariables = new URLVariables();
lv["sb"] = Security.sandboxType;
lv["v"] = Capabilities.version;
lv["swfid"] = tag;
lv["mv"] = "8";
lv["fv"] = "9";
var url:String = self.root.loaderInfo.loaderURL;
if (url.indexOf("http") == 0){
lv["url"] = url;
} else {
lv["url"] = "local";
};
var req:URLRequest = new URLRequest(server);
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
var loader:Loader = new Loader();
self.addChild(loader);
loader.load(req);
if (aim != ""){
trace(("MOCHIBOT > Goto URL " + aim));
nklink = new URLRequest(aim);
navigateToURL(nklink, "_blank");
};
return (self);
}
public static function trackUrl(parent:Sprite, tag:String, aim:String):MochiBot{
trace("MOCHIBOT > click");
return (_slot1.track(parent, tag, aim));
}
}
}//package api
Section 3
//PropTween (com.greensock.core.PropTween)
package com.greensock.core {
public class PropTween {
public var priority:int;
public var start:Number;
public var prevNode:PropTween;
public var change:Number;
public var target:Object;
public var name:String;
public var property:String;
public var nextNode:PropTween;
public var isPlugin:Boolean;
public function PropTween(target:Object, property:String, start:Number, change:Number, name:String, isPlugin:Boolean, nextNode:PropTween=null, priority:int=0){
super();
this.target = target;
this.property = property;
this.start = start;
this.change = change;
this.name = name;
this.isPlugin = isPlugin;
if (nextNode){
nextNode.prevNode = this;
this.nextNode = nextNode;
};
this.priority = priority;
}
}
}//package com.greensock.core
Section 4
//SimpleTimeline (com.greensock.core.SimpleTimeline)
package com.greensock.core {
public class SimpleTimeline extends TweenCore {
public var autoRemoveChildren:Boolean;
protected var _lastChild:TweenCore;
protected var _firstChild:TweenCore;
public function SimpleTimeline(vars:Object=null){
super(0, vars);
}
override public function renderTime(time:Number, suppressEvents:Boolean=false, force:Boolean=false):void{
var dur:Number;
var next:TweenCore;
var tween:TweenCore = _firstChild;
this.cachedTotalTime = time;
this.cachedTime = time;
while (tween) {
next = tween.nextNode;
if (((tween.active) || ((((((time >= tween.cachedStartTime)) && (!(tween.cachedPaused)))) && (!(tween.gc)))))){
if (!tween.cachedReversed){
tween.renderTime(((time - tween.cachedStartTime) * tween.cachedTimeScale), suppressEvents, false);
} else {
dur = (tween.cacheIsDirty) ? tween.totalDuration : tween.cachedTotalDuration;
tween.renderTime((dur - ((time - tween.cachedStartTime) * tween.cachedTimeScale)), suppressEvents, false);
};
};
tween = next;
};
}
public function addChild(tween:TweenCore):void{
if (((!(tween.gc)) && (tween.timeline))){
tween.timeline.remove(tween, true);
};
tween.timeline = this;
if (tween.gc){
tween.setEnabled(true, true);
};
if (_firstChild){
_firstChild.prevNode = tween;
};
tween.nextNode = _firstChild;
_firstChild = tween;
tween.prevNode = null;
}
public function remove(tween:TweenCore, skipDisable:Boolean=false):void{
if (tween.gc){
return;
};
if (!skipDisable){
tween.setEnabled(false, true);
};
if (tween.nextNode){
tween.nextNode.prevNode = tween.prevNode;
} else {
if (_lastChild == tween){
_lastChild = tween.prevNode;
};
};
if (tween.prevNode){
tween.prevNode.nextNode = tween.nextNode;
} else {
if (_firstChild == tween){
_firstChild = tween.nextNode;
};
};
}
public function get rawTime():Number{
return (this.cachedTotalTime);
}
}
}//package com.greensock.core
Section 5
//TweenCore (com.greensock.core.TweenCore)
package com.greensock.core {
import com.greensock.*;
public class TweenCore {
public var initted:Boolean;
protected var _hasUpdate:Boolean;
public var active:Boolean;
protected var _delay:Number;
public var cachedTime:Number;
public var cachedReversed:Boolean;
public var nextNode:TweenCore;
protected var _rawPrevTime:Number;// = -1
public var vars:Object;
public var cachedTotalTime:Number;
public var timeline:SimpleTimeline;
public var data;
public var cachedStartTime:Number;
public var prevNode:TweenCore;
public var cachedDuration:Number;
public var gc:Boolean;
protected var _pauseTime:Number;
public var cacheIsDirty:Boolean;
public var cachedPaused:Boolean;
public var cachedTimeScale:Number;
public var cachedTotalDuration:Number;
public static const version:Number = 1.13;
protected static var _classInitted:Boolean;
public function TweenCore(duration:Number=0, vars:Object=null){
super();
this.vars = ((vars) || ({}));
this.cachedDuration = (this.cachedTotalDuration = ((duration) || (0)));
_delay = ((this.vars.delay) || (0));
this.cachedTimeScale = ((this.vars.timeScale) || (1));
this.active = Boolean((((((duration == 0)) && ((_delay == 0)))) && (!((this.vars.immediateRender == false)))));
this.cachedTotalTime = (this.cachedTime = 0);
this.data = this.vars.data;
if (!_classInitted){
if (isNaN(TweenLite.rootFrame)){
TweenLite.initClass();
_classInitted = true;
} else {
return;
};
};
var tl:SimpleTimeline = ((this.vars.timeline is SimpleTimeline)) ? this.vars.timeline : (this.vars.useFrames) ? TweenLite.rootFramesTimeline : TweenLite.rootTimeline;
this.cachedStartTime = (tl.cachedTotalTime + _delay);
tl.addChild(this);
if (this.vars.reversed){
this.cachedReversed = true;
};
if (this.vars.paused){
this.paused = true;
};
}
public function renderTime(time:Number, suppressEvents:Boolean=false, force:Boolean=false):void{
}
public function get delay():Number{
return (_delay);
}
public function get duration():Number{
return (this.cachedDuration);
}
public function restart(includeDelay:Boolean=false, suppressEvents:Boolean=true):void{
this.reversed = false;
this.paused = false;
this.setTotalTime((includeDelay) ? -(_delay) : 0, suppressEvents);
}
public function set reversed(b:Boolean):void{
if (b != this.cachedReversed){
this.cachedReversed = b;
setTotalTime(this.cachedTotalTime, true);
};
}
public function set startTime(n:Number):void{
var adjust:Boolean = Boolean(((!((this.timeline == null))) && (((!((n == this.cachedStartTime))) || (this.gc)))));
this.cachedStartTime = n;
if (adjust){
this.timeline.addChild(this);
};
}
public function set delay(n:Number):void{
this.startTime = (this.startTime + (n - _delay));
_delay = n;
}
public function resume():void{
this.paused = false;
}
public function get paused():Boolean{
return (this.cachedPaused);
}
public function play():void{
this.reversed = false;
this.paused = false;
}
public function set duration(n:Number):void{
this.cachedDuration = (this.cachedTotalDuration = n);
setDirtyCache(false);
}
public function complete(skipRender:Boolean=false, suppressEvents:Boolean=false):void{
if (!skipRender){
renderTime(this.cachedTotalDuration, suppressEvents, false);
return;
};
if (this.timeline.autoRemoveChildren){
this.setEnabled(false, false);
} else {
this.active = false;
};
if (!suppressEvents){
if (((((this.vars.onComplete) && ((this.cachedTotalTime == this.cachedTotalDuration)))) && (!(this.cachedReversed)))){
this.vars.onComplete.apply(null, this.vars.onCompleteParams);
} else {
if (((((this.cachedReversed) && ((this.cachedTotalTime == 0)))) && (this.vars.onReverseComplete))){
this.vars.onReverseComplete.apply(null, this.vars.onReverseCompleteParams);
};
};
};
}
public function invalidate():void{
}
public function get totalTime():Number{
return (this.cachedTotalTime);
}
public function get reversed():Boolean{
return (this.cachedReversed);
}
public function get startTime():Number{
return (this.cachedStartTime);
}
public function set currentTime(n:Number):void{
setTotalTime(n, false);
}
protected function setDirtyCache(includeSelf:Boolean=true):void{
var tween:TweenCore = (includeSelf) ? this : this.timeline;
while (tween) {
tween.cacheIsDirty = true;
tween = tween.timeline;
};
}
public function reverse(forceResume:Boolean=true):void{
this.reversed = true;
if (forceResume){
this.paused = false;
} else {
if (this.gc){
this.setEnabled(true, false);
};
};
}
public function set paused(b:Boolean):void{
if (((!((b == this.cachedPaused))) && (this.timeline))){
if (b){
_pauseTime = this.timeline.rawTime;
} else {
this.cachedStartTime = (this.cachedStartTime + (this.timeline.rawTime - _pauseTime));
_pauseTime = NaN;
setDirtyCache(false);
};
this.cachedPaused = b;
this.active = Boolean(((((!(this.cachedPaused)) && ((this.cachedTotalTime > 0)))) && ((this.cachedTotalTime < this.cachedTotalDuration))));
};
if (((!(b)) && (this.gc))){
this.setTotalTime(this.cachedTotalTime, false);
this.setEnabled(true, false);
};
}
public function kill():void{
setEnabled(false, false);
}
public function set totalTime(n:Number):void{
setTotalTime(n, false);
}
public function get currentTime():Number{
return (this.cachedTime);
}
protected function setTotalTime(time:Number, suppressEvents:Boolean=false):void{
var tlTime:Number;
var dur:Number;
if (this.timeline){
tlTime = (((_pauseTime) || ((_pauseTime == 0)))) ? _pauseTime : this.timeline.cachedTotalTime;
if (this.cachedReversed){
dur = (this.cacheIsDirty) ? this.totalDuration : this.cachedTotalDuration;
this.cachedStartTime = (tlTime - ((dur - time) / this.cachedTimeScale));
} else {
this.cachedStartTime = (tlTime - (time / this.cachedTimeScale));
};
if (!this.timeline.cacheIsDirty){
setDirtyCache(false);
};
if (this.cachedTotalTime != time){
renderTime(time, suppressEvents, false);
};
};
}
public function pause():void{
this.paused = true;
}
public function set totalDuration(n:Number):void{
this.duration = n;
}
public function get totalDuration():Number{
return (this.cachedTotalDuration);
}
public function setEnabled(enabled:Boolean, ignoreTimeline:Boolean=false):Boolean{
if (enabled){
this.active = Boolean(((((!(this.cachedPaused)) && ((this.cachedTotalTime > 0)))) && ((this.cachedTotalTime < this.cachedTotalDuration))));
if (((!(ignoreTimeline)) && (this.gc))){
this.timeline.addChild(this);
};
} else {
this.active = false;
if (!ignoreTimeline){
this.timeline.remove(this, true);
};
};
this.gc = !(enabled);
return (false);
}
}
}//package com.greensock.core
Section 6
//TweenLite (com.greensock.TweenLite)
package com.greensock {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import com.greensock.core.*;
import com.greensock.plugins.*;
public class TweenLite extends TweenCore {
protected var _hasPlugins:Boolean;
public var propTweenLookup:Object;
public var cachedPT1:PropTween;
protected var _overwrite:uint;
protected var _ease:Function;
public var target:Object;
public var ratio:Number;// = 0
protected var _overwrittenProps:Object;
protected var _notifyPluginsOfEnabled:Boolean;
public static const version:Number = 11.2;
public static var rootTimeline:SimpleTimeline;
public static var fastEaseLookup:Dictionary = new Dictionary(false);
public static var onPluginEvent:Function;
public static var rootFramesTimeline:SimpleTimeline;
public static var defaultEase:Function = TweenLite.easeOut;
public static var plugins:Object = {};
public static var masterList:Dictionary = new Dictionary(false);
public static var overwriteManager:Object;
public static var rootFrame:Number;
public static var killDelayedCallsTo:Function = TweenLite.killTweensOf;
private static var _shape:Shape = new Shape();
protected static var _reservedProps:Object = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, roundProps:1, onStart:1, onStartParams:1, onInit:1, onInitParams:1, onReverseComplete:1, onReverseCompleteParams:1, onRepeat:1, onRepeatParams:1, proxiedEase:1, easeParams:1, yoyo:1, onCompleteListener:1, onUpdateListener:1, onStartListener:1, onReverseCompleteListener:1, onRepeatListener:1, orientToBezier:1, timeScale:1, immediateRender:1, repeat:1, repeatDelay:1, timeline:1, data:1, paused:1};
public function TweenLite(target:Object, duration:Number, vars:Object){
var sibling:TweenLite;
super(duration, vars);
this.target = target;
if ((((this.target is TweenCore)) && (("timeScale" in this.vars)))){
this.cachedTimeScale = 1;
};
propTweenLookup = {};
_ease = defaultEase;
_overwrite = (((!((Number(vars.overwrite) > -1))) || (((!(overwriteManager.enabled)) && ((vars.overwrite > 1)))))) ? overwriteManager.mode : int(vars.overwrite);
var a:Array = masterList[target];
if (!a){
masterList[target] = [this];
} else {
if (_overwrite == 1){
for each (sibling in a) {
if (!sibling.gc){
sibling.setEnabled(false, false);
};
};
masterList[target] = [this];
} else {
a[a.length] = this;
};
};
if (((this.active) || (this.vars.immediateRender))){
renderTime(0, false, true);
};
}
protected function easeProxy(t:Number, b:Number, c:Number, d:Number):Number{
return (this.vars.proxiedEase.apply(null, arguments.concat(this.vars.easeParams)));
}
override public function renderTime(time:Number, suppressEvents:Boolean=false, force:Boolean=false):void{
var isComplete:Boolean;
var prevTime:Number = this.cachedTime;
if (time >= this.cachedDuration){
this.cachedTotalTime = (this.cachedTime = this.cachedDuration);
this.ratio = 1;
isComplete = true;
if (this.cachedDuration == 0){
if ((((((time == 0)) || ((_rawPrevTime < 0)))) && (!((_rawPrevTime == time))))){
force = true;
};
_rawPrevTime = time;
};
} else {
if (time <= 0){
this.cachedTotalTime = (this.cachedTime = (this.ratio = 0));
if (time < 0){
this.active = false;
if (this.cachedDuration == 0){
if (_rawPrevTime > 0){
force = true;
isComplete = true;
};
_rawPrevTime = time;
};
};
if (((this.cachedReversed) && (!((prevTime == 0))))){
isComplete = true;
};
} else {
this.cachedTotalTime = (this.cachedTime = time);
this.ratio = _ease(time, 0, 1, this.cachedDuration);
};
};
if ((((this.cachedTime == prevTime)) && (!(force)))){
return;
};
if (!this.initted){
init();
if (((!(isComplete)) && (this.cachedTime))){
this.ratio = _ease(this.cachedTime, 0, 1, this.cachedDuration);
};
};
if (((!(this.active)) && (!(this.cachedPaused)))){
this.active = true;
};
if ((((((((prevTime == 0)) && (this.vars.onStart))) && (!((this.cachedTime == 0))))) && (!(suppressEvents)))){
this.vars.onStart.apply(null, this.vars.onStartParams);
};
var pt:PropTween = this.cachedPT1;
while (pt) {
pt.target[pt.property] = (pt.start + (this.ratio * pt.change));
pt = pt.nextNode;
};
if (((_hasUpdate) && (!(suppressEvents)))){
this.vars.onUpdate.apply(null, this.vars.onUpdateParams);
};
if (isComplete){
if (((_hasPlugins) && (this.cachedPT1))){
onPluginEvent("onComplete", this);
};
complete(true, suppressEvents);
};
}
override public function setEnabled(enabled:Boolean, ignoreTimeline:Boolean=false):Boolean{
var a:Array;
if (enabled){
a = TweenLite.masterList[this.target];
if (!a){
TweenLite.masterList[this.target] = [this];
} else {
a[a.length] = this;
};
};
super.setEnabled(enabled, ignoreTimeline);
if (((_notifyPluginsOfEnabled) && (this.cachedPT1))){
return (onPluginEvent((enabled) ? "onEnable" : "onDisable", this));
};
return (false);
}
protected function init():void{
var p:String;
var i:int;
var plugin:*;
var prioritize:Boolean;
var siblings:Array;
var pt:PropTween;
if (this.vars.onInit){
this.vars.onInit.apply(null, this.vars.onInitParams);
};
if (typeof(this.vars.ease) == "function"){
_ease = this.vars.ease;
};
if (this.vars.easeParams){
this.vars.proxiedEase = _ease;
_ease = easeProxy;
};
this.cachedPT1 = null;
this.propTweenLookup = {};
for (p in this.vars) {
if ((((p in _reservedProps)) && (!((((p == "timeScale")) && ((this.target is TweenCore))))))){
} else {
if ((((p in plugins)) && (new ((plugins[p] as Class)).onInitTween(this.target, this.vars[p], this)))){
this.cachedPT1 = new PropTween(plugin, "changeFactor", 0, 1, ((plugin.overwriteProps.length)==1) ? plugin.overwriteProps[0] : "_MULTIPLE_", true, this.cachedPT1);
if (this.cachedPT1.name == "_MULTIPLE_"){
i = plugin.overwriteProps.length;
while (i--) {
this.propTweenLookup[plugin.overwriteProps[i]] = this.cachedPT1;
};
} else {
this.propTweenLookup[this.cachedPT1.name] = this.cachedPT1;
};
if (plugin.priority){
this.cachedPT1.priority = plugin.priority;
prioritize = true;
};
if (((plugin.onDisable) || (plugin.onEnable))){
_notifyPluginsOfEnabled = true;
};
_hasPlugins = true;
} else {
this.cachedPT1 = new PropTween(this.target, p, Number(this.target[p]), ((typeof(this.vars[p]))=="number") ? (Number(this.vars[p]) - this.target[p]) : Number(this.vars[p]), p, false, this.cachedPT1);
this.propTweenLookup[p] = this.cachedPT1;
};
};
};
if (prioritize){
onPluginEvent("onInit", this);
};
if (this.vars.runBackwards){
pt = this.cachedPT1;
while (pt) {
pt.start = (pt.start + pt.change);
pt.change = -(pt.change);
pt = pt.nextNode;
};
};
_hasUpdate = Boolean(!((this.vars.onUpdate == null)));
if (_overwrittenProps){
killVars(_overwrittenProps);
if (this.cachedPT1 == null){
this.setEnabled(false, false);
};
};
if ((((((((_overwrite > 1)) && (this.cachedPT1))) && (masterList[this.target]))) && ((siblings.length > 1)))){
if (overwriteManager.manageOverwrites(this, this.propTweenLookup, siblings, _overwrite)){
init();
};
};
this.initted = true;
}
public function killVars(vars:Object, permanent:Boolean=true):Boolean{
var p:String;
var pt:PropTween;
var changed:Boolean;
if (_overwrittenProps == null){
_overwrittenProps = {};
};
for (p in vars) {
if ((p in propTweenLookup)){
pt = propTweenLookup[p];
if (((pt.isPlugin) && ((pt.name == "_MULTIPLE_")))){
pt.target.killProps(vars);
if (pt.target.overwriteProps.length == 0){
pt.name = "";
};
};
if (pt.name != "_MULTIPLE_"){
if (pt.nextNode){
pt.nextNode.prevNode = pt.prevNode;
};
if (pt.prevNode){
pt.prevNode.nextNode = pt.nextNode;
} else {
if (this.cachedPT1 == pt){
this.cachedPT1 = pt.nextNode;
};
};
if (((pt.isPlugin) && (pt.target.onDisable))){
pt.target.onDisable();
if (pt.target.activeDisable){
changed = true;
};
};
delete propTweenLookup[p];
};
};
if (permanent){
_overwrittenProps[p] = 1;
};
};
return (changed);
}
override public function invalidate():void{
if (((_notifyPluginsOfEnabled) && (this.cachedPT1))){
onPluginEvent("onDisable", this);
};
this.cachedPT1 = null;
_overwrittenProps = null;
_hasUpdate = (this.initted = (this.active = (_notifyPluginsOfEnabled = false)));
this.propTweenLookup = {};
}
public static function initClass():void{
rootFrame = 0;
rootTimeline = new SimpleTimeline(null);
rootFramesTimeline = new SimpleTimeline(null);
rootTimeline.cachedStartTime = (getTimer() * 0.001);
rootFramesTimeline.cachedStartTime = rootFrame;
rootTimeline.autoRemoveChildren = true;
rootFramesTimeline.autoRemoveChildren = true;
_shape.addEventListener(Event.ENTER_FRAME, updateAll, false, 0, true);
if (overwriteManager == null){
overwriteManager = {mode:1, enabled:false};
};
}
public static function killTweensOf(target:Object, complete:Boolean=false):void{
var a:Array;
var i:int;
if ((target in masterList)){
a = masterList[target];
i = a.length;
while (i--) {
if (!TweenLite(a[i]).gc){
if (complete){
TweenLite(a[i]).complete(false, false);
} else {
TweenLite(a[i]).setEnabled(false, false);
};
};
};
delete masterList[target];
};
}
public static function from(target:Object, duration:Number, vars:Object):TweenLite{
vars.runBackwards = true;
if (!("immediateRender" in vars)){
vars.immediateRender = true;
};
return (new TweenLite(target, duration, vars));
}
protected static function easeOut(t:Number, b:Number, c:Number, d:Number):Number{
t = (1 - (t / d));
return ((1 - (t * t)));
}
public static function delayedCall(delay:Number, onComplete:Function, onCompleteParams:Array=null, useFrames:Boolean=false):TweenLite{
return (new TweenLite(onComplete, 0, {delay:delay, onComplete:onComplete, onCompleteParams:onCompleteParams, immediateRender:false, useFrames:useFrames, overwrite:0}));
}
protected static function updateAll(e:Event=null):void{
var ml:Dictionary;
var tgt:Object;
var a:Array;
var i:int;
rootTimeline.renderTime((((getTimer() * 0.001) - rootTimeline.cachedStartTime) * rootTimeline.cachedTimeScale), false, false);
rootFrame++;
rootFramesTimeline.renderTime(((rootFrame - rootFramesTimeline.cachedStartTime) * rootFramesTimeline.cachedTimeScale), false, false);
if (!(rootFrame % 60)){
ml = masterList;
for (tgt in ml) {
a = ml[tgt];
i = a.length;
while (i--) {
if (TweenLite(a[i]).gc){
a.splice(i, 1);
};
};
if (a.length == 0){
delete ml[tgt];
};
};
};
}
public static function to(target:Object, duration:Number, vars:Object):TweenLite{
return (new TweenLite(target, duration, vars));
}
}
}//package com.greensock
Section 7
//FPSStats (com.hires.FPSStats)
package com.hires {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import flash.utils.*;
import flash.system.*;
public class FPSStats extends Sprite {
protected var timer:uint;
protected var mem_max_graph:uint;
protected var theme:Object;
protected var mem:Number;
protected var xml:XML;
protected var graph:Bitmap;
protected var mem_graph:uint;
public var WIDTH:uint;// = 70
public var HEIGHT:uint;// = 100
protected var fps:uint;
protected var ms_prev:uint;
protected var text:TextField;
protected var rectangle:Rectangle;
protected var style:StyleSheet;
protected var ms:uint;
protected var currentFps:uint;
protected var fps_graph:uint;
protected var mem_max:Number;
public function FPSStats(_theme:Object=null):void{
theme = {bg:51, fps:0xFFFF00, ms:0xFF00, mem:0xFFFF, memmax:0xFF0070};
super();
if (_theme){
if (_theme.bg != null){
theme.bg = _theme.bg;
};
if (_theme.fps != null){
theme.fps = _theme.fps;
};
if (_theme.ms != null){
theme.ms = _theme.ms;
};
if (_theme.mem != null){
theme.mem = _theme.mem;
};
if (_theme.memmax != null){
theme.memmax = _theme.memmax;
};
};
mem_max = 0;
xml = <xml><fps>FPS:</fps><ms>MS:</ms><mem>MEM:</mem><memMax>MAX:</memMax></xml>
;
style = new StyleSheet();
style.setStyle("xml", {fontSize:"9px", fontFamily:"_sans", leading:"-2px"});
style.setStyle("fps", {color:hex2css(theme.fps)});
style.setStyle("ms", {color:hex2css(theme.ms)});
style.setStyle("mem", {color:hex2css(theme.mem)});
style.setStyle("memMax", {color:hex2css(theme.memmax)});
text = new TextField();
text.width = WIDTH;
text.height = 50;
text.styleSheet = style;
text.condenseWhite = true;
text.selectable = false;
text.mouseEnabled = false;
graph = new Bitmap();
graph.y = 50;
rectangle = new Rectangle((WIDTH - 1), 0, 1, (HEIGHT - 50));
addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
addEventListener(Event.REMOVED_FROM_STAGE, destroy, false, 0, true);
}
private function destroy(e:Event):void{
graphics.clear();
while (numChildren > 0) {
removeChildAt(0);
};
graph.bitmapData.dispose();
removeEventListener(MouseEvent.CLICK, onClick);
removeEventListener(Event.ENTER_FRAME, update);
}
public function getFps():uint{
return (currentFps);
}
private function onClick(e:MouseEvent):void{
if (((mouseY / height) > 0.5)){
stage.frameRate--;
} else {
stage.frameRate++;
};
xml.fps = ((("FPS: " + fps) + " / ") + stage.frameRate);
text.htmlText = xml;
}
private function init(e:Event):void{
graphics.beginFill(theme.bg);
graphics.drawRect(0, 0, WIDTH, HEIGHT);
graphics.endFill();
addChild(text);
graph.bitmapData = new BitmapData(WIDTH, (HEIGHT - 50), false, theme.bg);
addChild(graph);
addEventListener(MouseEvent.CLICK, onClick);
addEventListener(Event.ENTER_FRAME, update);
}
private function update(e:Event):void{
timer = getTimer();
if ((timer - 1000) > ms_prev){
ms_prev = timer;
mem = Number((System.totalMemory * 9.54E-7).toFixed(3));
mem_max = ((mem_max > mem)) ? mem_max : mem;
fps_graph = Math.min(graph.height, ((fps / stage.frameRate) * graph.height));
mem_graph = (Math.min(graph.height, Math.sqrt(Math.sqrt((mem * 5000)))) - 2);
mem_max_graph = (Math.min(graph.height, Math.sqrt(Math.sqrt((mem_max * 5000)))) - 2);
graph.bitmapData.scroll(-1, 0);
graph.bitmapData.fillRect(rectangle, theme.bg);
graph.bitmapData.setPixel((graph.width - 1), (graph.height - fps_graph), theme.fps);
graph.bitmapData.setPixel((graph.width - 1), (graph.height - ((timer - ms) >> 1)), theme.ms);
graph.bitmapData.setPixel((graph.width - 1), (graph.height - mem_graph), theme.mem);
graph.bitmapData.setPixel((graph.width - 1), (graph.height - mem_max_graph), theme.memmax);
xml.fps = ((("FPS: " + fps) + " / ") + stage.frameRate);
xml.mem = ("MEM: " + mem);
xml.memMax = ("MAX: " + mem_max);
currentFps = fps;
fps = 0;
};
fps++;
xml.ms = ("MS: " + (timer - ms));
ms = timer;
text.htmlText = xml;
}
private function hex2css(color:int):String{
return (("#" + color.toString(16)));
}
}
}//package com.hires
Section 8
//StopWatch (com.StopWatch)
package com {
public class StopWatch {
public var endTime:Date;
public var elapsedTime:Number;
public var startTime:Date;
public var persistent:Boolean;
public static const START:String = "START";
public static const STOP:String = "STOP";
public static const RESET:String = "RESET";
public function StopWatch(persist:Boolean=false){
super();
zero();
persistent = persist;
}
public function start():void{
if (!persistent){
endTime = null;
startTime = new Date();
};
}
public function reset():void{
startTime = new Date();
endTime = new Date();
elapsedTime = 0;
}
public function toString():String{
var res:String = ("StopWatch : " + getElapsedTime());
return (res);
}
public function zero():void{
startTime = null;
endTime = null;
elapsedTime = 0;
}
public function stop():void{
endTime = new Date();
elapsedTime = (endTime.getTime() - startTime.getTime());
}
public function getSeconds():String{
var secs:Number = (getElapsedTime() / 1000);
return ((secs + " Seconds"));
}
public function getElapsedTime():Number{
if (startTime != null){
if (endTime != null){
elapsedTime = (endTime.getTime() - startTime.getTime());
} else {
elapsedTime = (new Date().getTime() - startTime.getTime());
};
};
return (elapsedTime);
}
public static function formatTime(time:Number):String{
var myPattern:RegExp = /\./g;
var str:String = String((time / 1000));
if (str.length > 4){
str = str.substring(0, (str.length - 2));
};
str = str.replace(myPattern, "'");
return (str);
}
public static function showTime(time:Number):String{
var d:Date = new Date(0, 0, 0, 0, 0, 0, time);
return (((((d.getMinutes() + "'") + d.getSeconds()) + "''") + d.getMilliseconds()));
}
}
}//package com
Section 9
//MochiAd (mochi.as3.MochiAd)
package mochi.as3 {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public class MochiAd {
public function MochiAd(){
super();
}
public static function getVersion():String{
return (MochiServices.getVersion());
}
public static function showClickAwayAd(options:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var options = options;
var DEFAULTS:Object = {ad_timeout:2000, regpt:"o", method:"showClickAwayAd", res:"300x250", no_bg:true, ad_started:function ():void{
}, ad_finished:function ():void{
}, ad_loaded:function (width:Number, height:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
var ad_timeout:Number = options.ad_timeout;
delete options.ad_timeout;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
options.ad_finished();
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.rpc = function (callbackID:Number, arg:Object):void{
MochiAd.rpc(clip, callbackID, arg);
};
chk["onEnterFrame"] = function ():void{
var total:Number;
if (!this.parent){
delete this.onEnterFrame;
return;
};
var ad_clip:Object = this.parent._mochiad_ctr;
var elapsed:Number = (getTimer() - this.started);
var finished:Boolean;
if (!chk.showing){
total = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (total > 0){
chk.showing = true;
finished = true;
chk.started = getTimer();
} else {
if (elapsed > chk.ad_timeout){
options.ad_failed();
finished = true;
};
};
};
if (this.root == null){
finished = true;
};
if (finished){
delete this.onEnterFrame;
};
};
doOnEnterFrame(chk);
}
public static function _isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function _allowDomains(server:String):String{
var hostname:String = server.split("/")[2].split(":")[0];
if (Security.sandboxType == "application"){
return (hostname);
};
Security.allowDomain("*");
Security.allowDomain(hostname);
Security.allowInsecureDomain("*");
Security.allowInsecureDomain(hostname);
return (hostname);
}
public static function unload(clip:Object):Boolean{
if (((clip.clip) && (clip.clip._mochiad))){
clip = clip.clip;
};
if (clip.origFrameRate != undefined){
clip.stage.frameRate = clip.origFrameRate;
};
if (!clip._mochiad){
return (false);
};
if (clip._mochiad._containerLCName != undefined){
clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"unload"});
};
if (clip._mochiad.onUnload){
clip._mochiad.onUnload();
};
delete clip._mochiad_loaded;
delete clip._mochiad;
return (true);
}
public static function showInterLevelAd(options:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var options = options;
var DEFAULTS:Object = {ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_loaded:function (width:Number, height:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
var ad_msec:Number = 11000;
var ad_timeout:Number = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time:Number = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
options.ad_finished();
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
var p:Number = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (p > 0){
this.parent.alpha = (p * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.adjustProgress = function (msec:Number):void{
var _chk:Object = mc._mochiad_wait;
_chk.server_control = true;
_chk.showing = true;
_chk.started = getTimer();
_chk.ad_msec = (msec - 250);
};
mc.rpc = function (callbackID:Number, arg:Object):void{
MochiAd.rpc(clip, callbackID, arg);
};
chk["onEnterFrame"] = function ():void{
var total:Number;
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
var ad_clip:Object = this.parent._mochiad_ctr;
var elapsed:Number = (getTimer() - this.started);
var finished:Boolean;
if (!chk.showing){
total = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (total > 0){
chk.showing = true;
chk.started = getTimer();
MochiAd.adShowing(clip);
} else {
if (elapsed > chk.ad_timeout){
options.ad_failed();
finished = true;
};
};
};
if (elapsed > chk.ad_msec){
finished = true;
};
if (finished){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = this.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function _parseOptions(options:Object, defaults:Object):Object{
var k:String;
var pairs:Array;
var i:Number;
var kv:Array;
var optcopy:Object = {};
for (k in defaults) {
optcopy[k] = defaults[k];
};
if (options){
for (k in options) {
optcopy[k] = options[k];
};
};
if (optcopy.clip == undefined){
throw (new Error("MochiAd is missing the 'clip' parameter. This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite."));
};
options = optcopy.clip.loaderInfo.parameters.mochiad_options;
if (options){
pairs = options.split("&");
i = 0;
while (i < pairs.length) {
kv = pairs[i].split("=");
optcopy[unescape(kv[0])] = unescape(kv[1]);
i++;
};
};
if (optcopy.id == "test"){
trace("[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!");
};
return (optcopy);
}
public static function _cleanup(mc:Object):void{
var k:String;
var lc:LocalConnection;
var f:Function;
var mc = mc;
if (("lc" in mc)){
lc = mc.lc;
f = function ():void{
lc.client = null;
lc.close();
//unresolved jump
var _slot1 = e;
};
setTimeout(f, 0);
};
var idx:Number = DisplayObjectContainer(mc).numChildren;
while (idx > 0) {
idx = (idx - 1);
DisplayObjectContainer(mc).removeChildAt(idx);
};
for (k in mc) {
delete mc[k];
};
}
public static function load(options:Object):MovieClip{
var clip:Object;
var mc:MovieClip;
var k:String;
var server:String;
var hostname:String;
var lc:LocalConnection;
var name:String;
var loader:Loader;
var g:Function;
var req:URLRequest;
var v:Object;
var options = options;
var DEFAULTS:Object = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"};
options = MochiAd._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = MochiAd.getVersion();
clip = options.clip;
if (!(clip is DisplayObject)){
trace("Warning: Object passed as container clip not a descendant of the DisplayObject type");
return (null);
};
if (MovieClip(clip).stage == null){
trace("Warning: Container clip for ad is not attached to the stage");
return (null);
};
if (!MochiAd._isNetworkAvailable()){
return (null);
};
if (clip._mochiad_loaded){
return (null);
};
//unresolved jump
var _slot1 = e;
throw (new Error("MochiAd requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
var depth:Number = options.depth;
delete options.depth;
mc = createEmptyMovieClip(clip, "_mochiad", depth);
var wh:Array = MochiAd._getRes(options, clip);
options.res = ((wh[0] + "x") + wh[1]);
options.server = (options.server + options.id);
delete options.id;
clip._mochiad_loaded = true;
if (clip.loaderInfo.loaderURL.indexOf("http") == 0){
options.as3_swf = clip.loaderInfo.loaderURL;
} else {
trace("[MochiAd] NOTE: Security Sandbox Violation errors below are normal");
};
var lv:URLVariables = new URLVariables();
for (k in options) {
v = options[k];
if (!(v is Function)){
lv[k] = v;
};
};
server = lv.server;
delete lv.server;
hostname = _allowDomains(server);
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.lc = lc;
mc.lcName = name;
lv.lc = name;
lv.st = getTimer();
mc.regContLC = function (lc_name:String):void{
mc._containerLCName = lc_name;
};
loader = new Loader();
g = function (ev:Object):void{
ev.target.removeEventListener(ev.type, arguments.callee);
MochiAd.unload(clip);
};
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g);
req = new URLRequest(((server + ".swf?cacheBust=") + new Date().getTime()));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (io:IOErrorEvent):void{
trace("[MochiAds] Blocked URL");
});
if (!options.skip){
loader.load(req);
};
mc.addChild(loader);
mc._mochiad_ctr = loader;
return (mc);
}
public static function runMethod(base:Object, methodName:String, argsArray:Array):Object{
var nameArray:Array = methodName.split(".");
var i:Number = 0;
while (i < (nameArray.length - 1)) {
if ((((base[nameArray[i]] == undefined)) || ((base[nameArray[i]] == null)))){
return (undefined);
};
base = base[nameArray[i]];
i++;
};
if (typeof(base[nameArray[i]]) == "function"){
return (base[nameArray[i]].apply(base, argsArray));
};
return (undefined);
}
public static function createEmptyMovieClip(parent:Object, name:String, depth:Number):MovieClip{
var mc:MovieClip = new MovieClip();
if (((false) && (depth))){
parent.addChildAt(mc, depth);
} else {
parent.addChild(mc);
};
parent[name] = mc;
mc["_name"] = name;
return (mc);
}
public static function _getRes(options:Object, clip:Object):Array{
var xy:Array;
var b:Object = clip.getBounds(clip.root);
var w:Number = 0;
var h:Number = 0;
if (typeof(options.res) != "undefined"){
xy = options.res.split("x");
w = parseFloat(xy[0]);
h = parseFloat(xy[1]);
} else {
w = (b.xMax - b.xMin);
h = (b.yMax - b.yMin);
};
if ((((w == 0)) || ((h == 0)))){
w = clip.stage.stageWidth;
h = clip.stage.stageHeight;
};
return ([w, h]);
}
public static function adShowing(mc:Object):void{
mc.origFrameRate = mc.stage.frameRate;
mc.stage.frameRate = 30;
}
public static function getValue(base:Object, objectName:String):Object{
var nameArray:Array = objectName.split(".");
var i:Number = 0;
while (i < (nameArray.length - 1)) {
if ((((base[nameArray[i]] == undefined)) || ((base[nameArray[i]] == null)))){
return (undefined);
};
base = base[nameArray[i]];
i++;
};
return (base[nameArray[i]]);
}
public static function rpc(clip:Object, callbackID:Number, arg:Object):void{
var _local4:Object;
var _local5:Object;
switch (arg.id){
case "setValue":
MochiAd.setValue(clip, arg.objectName, arg.value);
break;
case "getValue":
_local4 = MochiAd.getValue(clip, arg.objectName);
clip._mochiad.lc.send(clip._mochiad._containerLCName, "rpcResult", callbackID, _local4);
break;
case "runMethod":
_local5 = MochiAd.runMethod(clip, arg.method, arg.args);
clip._mochiad.lc.send(clip._mochiad._containerLCName, "rpcResult", callbackID, _local5);
break;
default:
trace(("[mochiads rpc] unknown rpc id: " + arg.id));
};
}
public static function setValue(base:Object, objectName:String, value:Object):void{
var nameArray:Array = objectName.split(".");
var i:Number = 0;
while (i < (nameArray.length - 1)) {
if ((((base[nameArray[i]] == undefined)) || ((base[nameArray[i]] == null)))){
return;
};
base = base[nameArray[i]];
i++;
};
base[nameArray[i]] = value;
}
public static function showPreGameAd(options:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var complete:Boolean;
var unloaded:Boolean;
var sendHostProgress:Boolean;
var fn:Function;
var r:MovieClip;
var options = options;
var DEFAULTS:Object = {ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, no_progress_bar:false, ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_loaded:function (width:Number, height:Number):void{
}, ad_failed:function ():void{
trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software");
}, ad_skipped:function ():void{
}, ad_progress:function (percent:Number):void{
}, progress_override:function (_clip:Object):Number{
return (NaN);
}, bar_offset:0};
options = MochiAd._parseOptions(options, DEFAULTS);
if ("c862232051e0a94e1c3609b3916ddb17".substr(0) == "dfeada81ac97cde83665f81c12da7def"){
options.ad_started();
fn = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
return;
};
clip = options.clip;
var ad_msec:Number = 11000;
var ad_timeout:Number = options.ad_timeout;
if (options.skip){
ad_timeout = 0;
};
delete options.ad_timeout;
var fadeout_time:Number = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
var fn:Function = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
};
var wh:Array = MochiAd._getRes(options, clip);
var w:Number = wh[0];
var h:Number = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.x = (w * -0.5);
chk.y = (h * -0.5);
var bar:MovieClip = createEmptyMovieClip(chk, "_mochiad_bar", 4);
if (options.no_progress_bar){
bar.visible = false;
delete options.no_progress_bar;
} else {
bar.x = (10 + options.bar_offset);
bar.y = (h - 20);
};
var bar_w:Number = ((w - bar.x) - 10);
var bar_color:Number = options.color;
delete options.color;
var bar_background:Number = options.background;
delete options.background;
var bar_outline:Number = options.outline;
delete options.outline;
var backing_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 1);
var backing:Object = backing_mc.graphics;
backing.beginFill(bar_background);
backing.moveTo(0, 0);
backing.lineTo(bar_w, 0);
backing.lineTo(bar_w, 10);
backing.lineTo(0, 10);
backing.lineTo(0, 0);
backing.endFill();
var inside_mc:MovieClip = createEmptyMovieClip(bar, "_inside", 2);
var inside:Object = inside_mc.graphics;
inside.beginFill(bar_color);
inside.moveTo(0, 0);
inside.lineTo(bar_w, 0);
inside.lineTo(bar_w, 10);
inside.lineTo(0, 10);
inside.lineTo(0, 0);
inside.endFill();
inside_mc.scaleX = 0;
var outline_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 3);
var outline:Object = outline_mc.graphics;
outline.lineStyle(0, bar_outline, 100);
outline.moveTo(0, 0);
outline.lineTo(bar_w, 0);
outline.lineTo(bar_w, 10);
outline.lineTo(0, 10);
outline.lineTo(0, 0);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.last_pcnt = 0;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
var p:Number = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (p > 0){
this.parent.alpha = (p * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
complete = false;
unloaded = false;
var progress:Number = Math.min(1, options.progress_override(clip));
var f:Function = function (ev:Event):void{
ev.target.removeEventListener(ev.type, arguments.callee);
complete = true;
if (unloaded){
MochiAd.unload(clip);
};
};
if (!isNaN(progress)){
complete = (progress == 1);
} else {
if (clip.loaderInfo.bytesLoaded == clip.loaderInfo.bytesTotal){
complete = true;
} else {
if ((clip.root is MovieClip)){
r = (clip.root as MovieClip);
if (r.framesLoaded >= r.totalFrames){
complete = true;
} else {
clip.loaderInfo.addEventListener(Event.COMPLETE, f);
};
} else {
clip.loaderInfo.addEventListener(Event.COMPLETE, f);
};
};
};
mc.unloadAd = function ():void{
unloaded = true;
if (complete){
MochiAd.unload(clip);
};
};
mc.adLoaded = options.ad_loaded;
mc.adSkipped = options.ad_skipped;
mc.adjustProgress = function (msec:Number):void{
var _chk:Object = mc._mochiad_wait;
_chk.server_control = true;
_chk.showing = true;
_chk.started = getTimer();
_chk.ad_msec = msec;
};
mc.rpc = function (callbackID:Number, arg:Object):void{
MochiAd.rpc(clip, callbackID, arg);
};
mc.rpcTestFn = function (s:String):Object{
trace(("[MOCHIAD rpcTestFn] " + s));
return (s);
};
sendHostProgress = false;
mc.sendHostLoadProgress = function (lc_name:String):void{
sendHostProgress = true;
};
chk["onEnterFrame"] = function ():void{
var total:Number;
if (((!(this.parent)) || (!(this.parent.parent)))){
delete this["onEnterFrame"];
return;
};
var _clip:Object = this.parent.parent.root;
var ad_clip:Object = this.parent._mochiad_ctr;
var elapsed:Number = (getTimer() - this.started);
var finished:Boolean;
var clip_total:Number = _clip.loaderInfo.bytesTotal;
var clip_loaded:Number = _clip.loaderInfo.bytesLoaded;
var clip_progress:Number = Math.min(1, options.progress_override(_clip));
if (clip_progress == 1){
complete = true;
};
if (complete){
clip_loaded = Math.max(1, clip_loaded);
clip_total = clip_loaded;
};
var clip_pcnt:Number = ((100 * clip_loaded) / clip_total);
if (!isNaN(clip_progress)){
clip_pcnt = (100 * clip_progress);
};
var ad_pcnt:Number = ((100 * elapsed) / chk.ad_msec);
var _inside:Object = this._mochiad_bar._inside;
var pcnt:Number = Math.min(100, Math.min(((clip_pcnt) || (0)), ad_pcnt));
pcnt = Math.max(this.last_pcnt, pcnt);
this.last_pcnt = pcnt;
_inside.scaleX = (pcnt * 0.01);
options.ad_progress(pcnt);
if (sendHostProgress){
clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"hostLoadPcnt", pcnt:clip_pcnt});
if (clip_pcnt >= 100){
sendHostProgress = false;
};
};
if (!chk.showing){
total = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal;
if (total > 0){
chk.showing = true;
chk.started = getTimer();
MochiAd.adShowing(clip);
} else {
if ((((elapsed > chk.ad_timeout)) && ((clip_pcnt == 100)))){
options.ad_failed();
finished = true;
};
};
};
if (elapsed > chk.ad_msec){
finished = true;
};
if (((complete) && (finished))){
if (unloaded){
MochiAd.unload(_clip);
} else {
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = chk.fadeFunction;
};
};
};
};
doOnEnterFrame(chk);
}
public static function showPreloaderAd(options:Object):void{
trace("[MochiAd] DEPRECATED: showPreloaderAd was renamed to showPreGameAd in 2.0");
MochiAd.showPreGameAd(options);
}
public static function showTimedAd(options:Object):void{
trace("[MochiAd] DEPRECATED: showTimedAd was renamed to showInterLevelAd in 2.0");
MochiAd.showInterLevelAd(options);
}
public static function doOnEnterFrame(mc:MovieClip):void{
var mc = mc;
var f:Function = function (ev:Object):void{
if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){
mc.onEnterFrame();
} else {
ev.target.removeEventListener(ev.type, arguments.callee);
};
};
mc.addEventListener(Event.ENTER_FRAME, f);
}
}
}//package mochi.as3
Section 10
//MochiCoins (mochi.as3.MochiCoins)
package mochi.as3 {
public class MochiCoins {
public static const STORE_HIDE:String = "StoreHide";
public static const NO_USER:String = "NoUser";
public static const IO_ERROR:String = "IOError";
public static const ITEM_NEW:String = "ItemNew";
public static const ITEM_OWNED:String = "ItemOwned";
public static const STORE_ITEMS:String = "StoreItems";
public static const ERROR:String = "Error";
public static const STORE_SHOW:String = "StoreShow";
public static var _inventory:MochiInventory;
public function MochiCoins(){
super();
}
public static function triggerEvent(eventType:String, args:Object):void{
MochiSocial.triggerEvent(eventType, args);
}
public static function removeEventListener(eventType:String, delegate:Function):void{
MochiSocial.removeEventListener(eventType, delegate);
}
public static function addEventListener(eventType:String, delegate:Function):void{
MochiSocial.addEventListener(eventType, delegate);
}
public static function getStoreItems():void{
MochiServices.send("coins_getStoreItems");
}
public static function get inventory():MochiInventory{
return (_inventory);
}
public static function showStore(options:Object=null):void{
MochiServices.bringToTop();
MochiServices.send("coins_showStore", {options:options}, null, null);
}
public static function showItem(options:Object=null):void{
if (((!(options)) || (!((typeof(options.item) == "string"))))){
trace("ERROR: showItem call must pass an Object with an item key");
return;
};
MochiServices.bringToTop();
MochiServices.send("coins_showItem", {options:options}, null, null);
}
public static function getVersion():String{
return (MochiServices.getVersion());
}
public static function showVideo(options:Object=null):void{
if (((!(options)) || (!((typeof(options.item) == "string"))))){
trace("ERROR: showVideo call must pass an Object with an item key");
return;
};
MochiServices.bringToTop();
MochiServices.send("coins_showVideo", {options:options}, null, null);
}
MochiSocial.addEventListener(MochiSocial.LOGGED_IN, function (args:Object):void{
_inventory = new MochiInventory();
});
MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, function (args:Object):void{
_inventory = null;
});
}
}//package mochi.as3
Section 11
//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(digit:Number=0, index:uint=0):void{
super();
Encoder = 0;
setValue(digit, index);
}
public function reencode():void{
var newEncode:uint = int((2147483647 * Math.random()));
Fragment = (Fragment ^ (newEncode ^ Encoder));
Encoder = newEncode;
}
public function set value(v:Number):void{
setValue(v);
}
public function toString():String{
var s:String = String.fromCharCode((Fragment ^ Encoder));
if (Sibling != null){
s = (s + Sibling.toString());
};
return (s);
}
public function setValue(digit:Number=0, index:uint=0):void{
var s:String = digit.toString();
var _temp1 = index;
index = (index + 1);
Fragment = (s.charCodeAt(_temp1) ^ Encoder);
if (index < s.length){
Sibling = new MochiDigits(digit, index);
} else {
Sibling = null;
};
reencode();
}
public function get value():Number{
return (Number(this.toString()));
}
public function addValue(inc:Number):void{
value = (value + inc);
}
}
}//package mochi.as3
Section 12
//MochiEventDispatcher (mochi.as3.MochiEventDispatcher)
package mochi.as3 {
public class MochiEventDispatcher {
private var eventTable:Object;
public function MochiEventDispatcher():void{
super();
eventTable = {};
}
public function triggerEvent(event:String, args:Object):void{
var i:Object;
if (eventTable[event] == undefined){
return;
};
for (i in eventTable[event]) {
var _local6 = eventTable[event];
_local6[i](args);
};
}
public function removeEventListener(event:String, delegate:Function):void{
var s:Object;
if (eventTable[event] == undefined){
eventTable[event] = [];
return;
};
for (s in eventTable[event]) {
if (eventTable[event][s] != delegate){
} else {
eventTable[event].splice(Number(s), 1);
};
};
}
public function addEventListener(event:String, delegate:Function):void{
removeEventListener(event, delegate);
eventTable[event].push(delegate);
}
}
}//package mochi.as3
Section 13
//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 function MochiEvents(){
super();
}
public static function endPlay():void{
MochiServices.send("events_clearRoundID", null, null, null);
}
public static function addEventListener(eventType:String, delegate:Function):void{
_dispatcher.addEventListener(eventType, delegate);
}
public static function trackEvent(tag:String, value=null):void{
MochiServices.send("events_trackEvent", {tag:tag, value:value}, null, null);
}
public static function removeEventListener(eventType:String, delegate:Function):void{
_dispatcher.removeEventListener(eventType, delegate);
}
public static function startSession(achievementID:String):void{
MochiServices.send("events_beginSession", {achievementID:achievementID}, null, null);
}
public static function triggerEvent(eventType:String, args:Object):void{
_dispatcher.triggerEvent(eventType, args);
}
public static function setNotifications(clip:MovieClip, style:Object):void{
var s:Object;
var args:Object = {};
for (s in style) {
args[s] = style[s];
};
args.clip = clip;
MochiServices.send("events_setNotifications", args, null, null);
}
public static function getVersion():String{
return (MochiServices.getVersion());
}
public static function startPlay(tag:String="gameplay"):void{
MochiServices.send("events_setRoundID", {tag:String(tag)}, null, null);
}
}
}//package mochi.as3
Section 14
//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 _storeSync: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 KEY_SALT:String = " syncMaint";
public static const WRITTEN:String = "InvWritten";
public static const NOT_READY:String = "InvNotReady";
public static const VALUE_ERROR:String = "InvValueError";
private static const CONSUMER_KEY:String = "MochiConsumables";
private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher();
public function MochiInventory():void{
super();
MochiCoins.addEventListener(MochiCoins.ITEM_OWNED, itemOwned);
MochiCoins.addEventListener(MochiCoins.ITEM_NEW, newItems);
MochiSocial.addEventListener(MochiSocial.LOGGED_IN, loggedIn);
MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, loggedOut);
_storeSync = new Object();
_syncPending = false;
_outstandingID = 0;
_syncID = 0;
_timer = new Timer(1000);
_timer.addEventListener(TimerEvent.TIMER, sync);
_timer.start();
if (MochiSocial.loggedIn){
loggedIn();
} else {
loggedOut();
};
}
private function newItems(event:Object):void{
if (!this[(event.id + KEY_SALT)]){
this[(event.id + KEY_SALT)] = 0;
};
if (!this[event.id]){
this[event.id] = 0;
};
this[(event.id + KEY_SALT)] = (this[(event.id + KEY_SALT)] + event.count);
this[event.id] = (this[event.id] + event.count);
if (event.privateProperties.consumable){
if (!this[event.privateProperties.tag]){
this[event.privateProperties.tag] = 0;
};
this[event.privateProperties.tag] = (this[event.privateProperties.tag] + (event.privateProperties.inc * event.count));
};
}
public function release():void{
MochiCoins.removeEventListener(MochiCoins.ITEM_NEW, newItems);
MochiSocial.removeEventListener(MochiSocial.LOGGED_IN, loggedIn);
MochiSocial.removeEventListener(MochiSocial.LOGGED_OUT, loggedOut);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function getProperty(name){
if (_consumableProperties == null){
triggerEvent(ERROR, {type:NOT_READY});
return (-1);
};
if (_consumableProperties[name]){
return (MochiDigits(_consumableProperties[name]).value);
};
return (undefined);
}
private function loggedIn(args:Object=null):void{
MochiUserData.get(CONSUMER_KEY, getConsumableBag);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function hasProperty(name):Boolean{
if (_consumableProperties == null){
triggerEvent(ERROR, {type:NOT_READY});
return (false);
};
if (_consumableProperties[name] == undefined){
return (false);
};
return (true);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextNameIndex(index:int):int{
return (((index)>=_names.length) ? 0 : (index + 1));
}
private function putConsumableBag(userData:MochiUserData):void{
_syncPending = false;
if (userData.error){
triggerEvent(ERROR, {type:IO_ERROR, error:userData.error});
_outstandingID = -1;
};
triggerEvent(WRITTEN, {});
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function setProperty(name, value):void{
var d:MochiDigits;
if (_consumableProperties == null){
triggerEvent(ERROR, {type:NOT_READY});
return;
};
if (!(value is Number)){
triggerEvent(ERROR, {type:VALUE_ERROR, error:"Invalid type", arg:value});
return;
};
if (_consumableProperties[name]){
d = MochiDigits(_consumableProperties[name]);
if (d.value == value){
return;
};
d.value = value;
} else {
_names.push(name);
_consumableProperties[name] = new MochiDigits(value);
};
_syncID++;
}
private function itemOwned(event:Object):void{
_storeSync[event.id] = {properties:event.properties, count:event.count};
}
private function sync(e:Event=null):void{
var key:String;
if (((_syncPending) || ((_syncID == _outstandingID)))){
return;
};
_outstandingID = _syncID;
var output:Object = {};
for (key in _consumableProperties) {
output[key] = MochiDigits(_consumableProperties[key]).value;
};
MochiUserData.put(CONSUMER_KEY, output, putConsumableBag);
_syncPending = true;
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function nextName(index:int):String{
return (_names[(index - 1)]);
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function deleteProperty(name):Boolean{
if (!_consumableProperties[name]){
return (false);
};
_names.splice(_names.indexOf(name), 1);
delete _consumableProperties[name];
return (true);
}
private function getConsumableBag(userData:MochiUserData):void{
var key:String;
var unsynced:Number;
if (userData.error){
triggerEvent(ERROR, {type:IO_ERROR, error:userData.error});
return;
};
_consumableProperties = {};
_names = new Array();
if (userData.data){
for (key in userData.data) {
_names.push(key);
_consumableProperties[key] = new MochiDigits(userData.data[key]);
};
};
for (key in _storeSync) {
unsynced = _storeSync[key].count;
if (_consumableProperties[(key + KEY_SALT)]){
unsynced = (unsynced - _consumableProperties[key]);
};
if (unsynced == 0){
} else {
newItems({id:key, count:unsynced, properties:_storeSync[key].properties});
};
};
triggerEvent(READY, {});
}
private function loggedOut(args:Object=null):void{
_consumableProperties = null;
}
public static function triggerEvent(eventType:String, args:Object):void{
_dispatcher.triggerEvent(eventType, args);
}
public static function removeEventListener(eventType:String, delegate:Function):void{
_dispatcher.removeEventListener(eventType, delegate);
}
public static function addEventListener(eventType:String, delegate:Function):void{
_dispatcher.addEventListener(eventType, delegate);
}
}
}//package mochi.as3
Section 15
//MochiServices (mochi.as3.MochiServices)
package mochi.as3 {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public class MochiServices {
private static var _container:Object;
private static var _connected:Boolean = false;
private static var _queue:Array;
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 _nextCallbackID:Number;
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 _callbacks:Object;
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 function MochiServices(){
super();
}
public static function isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function get connected():Boolean{
return (_connected);
}
private static function onReceive(pkg:Object):void{
var methodName:String;
var pkg = pkg;
var cb:String = pkg.callbackID;
var cblst:Object = _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){
method.apply(obj, pkg.args);
//unresolved jump
var _slot1 = error;
trace(((("Error invoking callback method '" + methodName) + "': ") + _slot1.toString()));
} else {
if (obj != null){
obj(pkg.args);
//unresolved jump
var _slot1 = error;
trace(("Error invoking method on object: " + _slot1.toString()));
};
};
delete _callbacks[cb];
}
public static function send(methodName:String, args:Object=null, callbackObject:Object=null, callbackMethod:Object=null):void{
if (_connected){
_mochiLocalConnection.send(_sendChannelName, "onReceive", {methodName:methodName, args:args, callbackID:_nextCallbackID});
} else {
if ((((_clip == null)) || (!(_connecting)))){
trace(("Error: MochiServices not connected. Please call MochiServices.connect(). Function: " + methodName));
handleError(args, callbackObject, callbackMethod);
flush(true);
return;
};
_queue.push({methodName:methodName, args:args, callbackID:_nextCallbackID});
};
if (_clip != null){
if (_callbacks != null){
_callbacks[_nextCallbackID] = {callbackObject:callbackObject, callbackMethod:callbackMethod};
_nextCallbackID++;
};
};
}
private static function init(id:String, clip:Object):void{
_id = id;
if (clip != null){
_container = clip;
loadCommunicator(id, _container);
};
}
public static function get childClip():Object{
return (_clip);
}
private static function clickMovie(url:String, cb:Function):MovieClip{
var b:int;
var loader:Loader;
var avm1_bytecode: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 header:Array = [104, 0, 31, 64, 0, 7, 208, 0, 0, 12, 1, 0, 67, 2, 0xFF, 0xFF, 0xFF, 63, 3];
var footer:Array = [0, 64, 0, 0, 0];
var mc:MovieClip = new MovieClip();
var lc:LocalConnection = new LocalConnection();
var lc_name:String = ((("_click_" + Math.floor((Math.random() * 999999))) + "_") + Math.floor(new Date().time));
lc = new LocalConnection();
mc.lc = lc;
mc.click = cb;
lc.client = mc;
lc.connect(lc_name);
var ba:ByteArray = new ByteArray();
var cpool:ByteArray = new ByteArray();
cpool.endian = Endian.LITTLE_ENDIAN;
cpool.writeShort(1);
cpool.writeUTFBytes(((url + " ") + lc_name));
cpool.writeByte(0);
var actionLength:uint = ((avm1_bytecode.length + cpool.length) + 4);
var fileLength:uint = (actionLength + 35);
ba.endian = Endian.LITTLE_ENDIAN;
ba.writeUTFBytes("FWS");
ba.writeByte(8);
ba.writeUnsignedInt(fileLength);
for each (b in header) {
ba.writeByte(b);
};
ba.writeUnsignedInt(actionLength);
ba.writeByte(136);
ba.writeShort(cpool.length);
ba.writeBytes(cpool);
for each (b in avm1_bytecode) {
ba.writeByte(b);
};
for each (b in footer) {
ba.writeByte(b);
};
loader = new Loader();
loader.loadBytes(ba);
mc.addChild(loader);
return (mc);
}
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(url:String, burl:String, btn:DisplayObjectContainer, onClick: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 = url;
var burl = burl;
var btn = btn;
var onClick = onClick;
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 (url:String):void{
if (avm1Click){
btn.removeChild(avm1Click);
};
avm1Click = clickMovie(url, onClick);
var rect:Rectangle = btn.getBounds(btn);
btn.addChild(avm1Click);
avm1Click.x = rect.x;
avm1Click.y = rect.y;
avm1Click.scaleX = (0.01 * rect.width);
avm1Click.scaleY = (0.01 * rect.height);
};
err = function (ev:Object):void{
netup = false;
ev.target.removeEventListener(ev.type, arguments.callee);
setURL(burl);
};
complete = function (ev:Object):void{
ev.target.removeEventListener(ev.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 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);
_mochiLocalConnection.close();
//unresolved jump
var _slot1 = error;
};
if (_timer != null){
_timer.stop();
//unresolved jump
var _slot1 = error;
};
}
public static function allowDomains(server:String):String{
var hostname:String;
if (Security.sandboxType != "application"){
Security.allowDomain("*");
Security.allowInsecureDomain("*");
};
if (server.indexOf("http://") != -1){
hostname = server.split("/")[2].split(":")[0];
if (Security.sandboxType != "application"){
Security.allowDomain(hostname);
Security.allowInsecureDomain(hostname);
};
};
return (hostname);
}
public static function getVersion():String{
return ("3.8 as3");
}
public static function doClose():void{
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
}
public static function warnID(bid:String, leaderboard:Boolean):void{
bid = bid.toLowerCase();
if (bid.length != 16){
trace((("WARNING: " + (leaderboard) ? "board" : "game") + " ID is not the appropriate length"));
return;
} else {
if (bid == "1e113c7239048b3f"){
if (leaderboard){
trace("WARNING: Using testing board ID");
} else {
trace("WARNING: Using testing board ID as game ID");
};
return;
} else {
if (bid == "84993a1de4031cd8"){
if (leaderboard){
trace("WARNING: Using testing game ID as board ID");
} else {
trace("WARNING: Using testing game ID");
};
return;
};
};
};
var i:Number = 0;
while (i < bid.length) {
switch (bid.charAt(i)){
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: " + bid));
return;
};
i++;
};
}
private static function flush(error:Boolean):void{
var request:Object;
var callback:Object;
if (((_clip) && (_queue))){
while (_queue.length > 0) {
request = _queue.shift();
callback = null;
if (request != null){
if (request.callbackID != null){
callback = _callbacks[request.callbackID];
};
delete _callbacks[request.callbackID];
if (((error) && (!((callback == null))))){
handleError(request.args, callback.callbackObject, callback.callbackMethod);
};
};
};
};
}
public static function get id():String{
return (_id);
}
private static function onEvent(pkg:Object):void{
var target:String = pkg.target;
var event:String = pkg.event;
switch (target){
case "events":
MochiEvents.triggerEvent(pkg.event, pkg.args);
break;
case "coins":
MochiCoins.triggerEvent(pkg.event, pkg.args);
break;
case "sync":
servicesSync.triggerEvent(pkg.event, pkg.args);
break;
};
}
private static function urlOptions(clip:Object):Object{
var options:String;
var pairs:Array;
var i:Number;
var kv:Array;
var opts:Object = {};
if (clip.stage){
options = clip.stage.loaderInfo.parameters.mochiad_options;
} else {
options = clip.loaderInfo.parameters.mochiad_options;
};
if (options){
pairs = options.split("&");
i = 0;
while (i < pairs.length) {
kv = pairs[i].split("=");
opts[unescape(kv[0])] = unescape(kv[1]);
i++;
};
};
return (opts);
}
public static function setContainer(container:Object=null, doAdd:Boolean=true):void{
if (_clip.parent){
_clip.parent.removeChild(_clip);
};
if (container != null){
if ((container is DisplayObjectContainer)){
_container = container;
};
};
if (doAdd){
if ((_container is DisplayObjectContainer)){
DisplayObjectContainer(_container).addChild(_clip);
};
};
}
private static function handleError(args:Object, callbackObject:Object, callbackMethod:Object):void{
var args = args;
var callbackObject = callbackObject;
var callbackMethod = callbackMethod;
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)))){
var _local5 = callbackObject;
_local5[callbackMethod](args);
//unresolved jump
var _slot1 = error;
} else {
if (callbackMethod != null){
callbackMethod.apply(args);
//unresolved jump
var _slot1 = error;
};
};
};
}
private static function loadError(ev: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 (_queue.length > 0) {
_mochiLocalConnection.send(_sendChannelName, "onReceive", _queue.shift());
};
};
}
private static function loadLCBridge(clip:Object):void{
var loader:Loader;
var clip = clip;
loader = new Loader();
var mochiLCURL:String = (_servURL + _mochiLC);
var req:URLRequest = new URLRequest(mochiLCURL);
var complete:Function = function (ev: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 (args:Object):void{
MochiServices.comChannelName = args.newChannel;
};
trace("Waiting for MochiAds services to connect...");
}
public static function get clip():Object{
return (_container);
}
public static function set comChannelName(val:String):void{
if (val != null){
if (val.length > 3){
_sendChannelName = (val + "_fromgame");
initComChannels();
};
};
}
private static function loadCommunicator(id:String, clip:Object):MovieClip{
if (_clip != null){
return (_clip);
};
if (!MochiServices.isNetworkAvailable()){
return (null);
};
if (urlOptions(clip).servURL){
_servURL = urlOptions(clip).servURL;
};
var servicesURL:String = (_servURL + _services);
if (urlOptions(clip).servicesURL){
servicesURL = urlOptions(clip).servicesURL;
};
_listenChannelName = (_listenChannelName + ((Math.floor(new Date().time) + "_") + Math.floor((Math.random() * 99999))));
MochiServices.allowDomains(servicesURL);
_clip = new MovieClip();
loadLCBridge(_clip);
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError);
var req:URLRequest = new URLRequest(servicesURL);
var vars:URLVariables = new URLVariables();
vars.listenLC = _listenChannelName;
vars.mochiad_options = clip.loaderInfo.parameters.mochiad_options;
vars.api_version = getVersion();
if (widget){
vars.widget = true;
};
req.data = vars;
_loader.load(req);
_clip.addChild(_loader);
_sendChannel = new LocalConnection();
_queue = [];
_nextCallbackID = 0;
_callbacks = {};
_timer = new Timer(10000, 1);
_timer.addEventListener(TimerEvent.TIMER, connectWait);
_timer.start();
return (_clip);
}
public static function connect(id:String, clip:Object, onError:Object=null):void{
var id = id;
var clip = clip;
var onError = onError;
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 (errorCode:String):void{
trace(errorCode);
};
};
};
}
public static function updateCopy(args:Object):void{
MochiServices.send("coins_updateCopy", args, null, null);
}
public static function bringToTop(e:Event=null):void{
var e = e;
if (((!((MochiServices.clip == null))) && (!((MochiServices.childClip == null))))){
if (MochiServices.clip.numChildren > 1){
MochiServices.clip.setChildIndex(MochiServices.childClip, (MochiServices.clip.numChildren - 1));
};
//unresolved jump
var _slot1 = errorObject;
trace("Warning: Depth sort error.");
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
};
}
public static function connectWait(e:TimerEvent):void{
if (!_connected){
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load. (timeout)");
MochiServices.disconnect();
MochiServices.onError("IOError");
};
}
}
}//package mochi.as3
Section 16
//MochiSocial (mochi.as3.MochiSocial)
package mochi.as3 {
public class MochiSocial {
public static const LOGGED_IN:String = "LoggedIn";
public static const PROFILE_HIDE:String = "ProfileHide";
public static const NO_USER:String = "NoUser";
public static const PROPERTIES_SIZE:String = "PropertiesSize";
public static const IO_ERROR:String = "IOError";
public static const PROPERTIES_SAVED:String = "PropertySaved";
public static const WIDGET_LOADED:String = "WidgetLoaded";
public static const USER_INFO:String = "UserInfo";
public static const ERROR:String = "Error";
public static const LOGIN_SHOW:String = "LoginShow";
public static const LOGGED_OUT:String = "LoggedOut";
public static const PROFILE_SHOW:String = "ProfileShow";
public static const LOGIN_SHOWN:String = "LoginShown";
public static const LOGIN_HIDE:String = "LoginHide";
private static var _dispatcher:MochiEventDispatcher = new MochiEventDispatcher();
public static var _user_info:Object = null;
public function MochiSocial(){
super();
}
public static function getVersion():String{
return (MochiServices.getVersion());
}
public static function saveUserProperties(properties:Object):void{
MochiServices.send("coins_saveUserProperties", properties);
}
public static function get loggedIn():Boolean{
return (!((_user_info == null)));
}
public static function triggerEvent(eventType:String, args:Object):void{
_dispatcher.triggerEvent(eventType, args);
}
public static function addEventListener(eventType:String, delegate:Function):void{
_dispatcher.addEventListener(eventType, delegate);
}
public static function getUserInfo():void{
MochiServices.send("coins_getUserInfo");
}
public static function showLoginWidget(options:Object=null):void{
MochiServices.setContainer();
MochiServices.bringToTop();
MochiServices.send("coins_showLoginWidget", {options:options});
}
public static function removeEventListener(eventType:String, delegate:Function):void{
_dispatcher.removeEventListener(eventType, delegate);
}
public static function requestLogin():void{
MochiServices.send("coins_requestLogin");
}
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);
}
MochiSocial.addEventListener(MochiSocial.LOGGED_IN, function (args:Object):void{
_user_info = args;
});
MochiSocial.addEventListener(MochiSocial.LOGGED_OUT, function (args:Object):void{
_user_info = null;
});
}
}//package mochi.as3
Section 17
//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{
super();
_syncContainer = {};
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function setProperty(name, value):void{
if (_syncContainer[name] == value){
return;
};
var n:String = name.toString();
_syncContainer[n] = value;
MochiServices.send("sync_propUpdate", {name:n, value:value});
}
override "http://www.adobe.com/2006/actionscript/flash/proxy"?? function getProperty(name){
return (_syncContainer[name]);
}
public function triggerEvent(eventType:String, args:Object):void{
switch (eventType){
case SYNC_REQUEST:
MochiServices.send("sync_syncronize", _syncContainer);
break;
case SYNC_PROPERTY:
_syncContainer[args.name] = args.value;
break;
};
}
}
}//package mochi.as3
Section 18
//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(key:String="", callback:Function=null){
super();
this.key = key;
this.callback = callback;
}
public function serialize(obj):ByteArray{
var arr:ByteArray = new ByteArray();
arr.objectEncoding = ObjectEncoding.AMF3;
arr.writeObject(obj);
arr.compress();
return (arr);
}
public function errorHandler(event:IOErrorEvent):void{
data = null;
error = event;
if (callback != null){
performCallback();
} else {
dispatchEvent(event);
};
close();
}
public function putEvent(obj):void{
request("put", serialize(obj));
}
public function deserialize(arr:ByteArray){
arr.objectEncoding = ObjectEncoding.AMF3;
arr.uncompress();
return (arr.readObject());
}
public function securityErrorHandler(event:SecurityErrorEvent):void{
errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + event.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{
callback(this);
//unresolved jump
var _slot1 = e;
trace(("[MochiUserData] exception during callback: " + _slot1));
}
public function request(_operation:String, _data:ByteArray):void{
var _operation = _operation;
var _data = _data;
operation = _operation;
var api_url:String = MochiSocial.getAPIURL();
var api_token:String = MochiSocial.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((((MochiSocial.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);
_loader.load(req);
//unresolved jump
var _slot1 = e;
errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("security error: " + _slot1.toString())));
}
public function completeHandler(event:Event):void{
var event = event;
if (_loader.data.length){
data = deserialize(_loader.data);
} else {
data = null;
};
//unresolved jump
var _slot1 = e;
errorHandler(new IOErrorEvent(IOErrorEvent.IO_ERROR, false, false, ("deserialize error: " + _slot1.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(key:String, callback:Function):void{
var userData:MochiUserData = new MochiUserData(key, callback);
userData.getEvent();
}
public static function put(key:String, obj, callback:Function):void{
var userData:MochiUserData = new MochiUserData(key, callback);
userData.putEvent(obj);
}
}
}//package mochi.as3
Section 19
//BitmapAsset (mx.core.BitmapAsset)
package mx.core {
import flash.display.*;
public class BitmapAsset extends FlexBitmap implements IFlexAsset, IFlexDisplayObject {
mx_internal static const VERSION:String = "3.4.1.10084";
public function BitmapAsset(bitmapData:BitmapData=null, pixelSnapping:String="auto", smoothing:Boolean=false){
super(bitmapData, pixelSnapping, smoothing);
}
public function get measuredWidth():Number{
if (bitmapData){
return (bitmapData.width);
};
return (0);
}
public function get measuredHeight():Number{
if (bitmapData){
return (bitmapData.height);
};
return (0);
}
public function setActualSize(newWidth:Number, newHeight:Number):void{
width = newWidth;
height = newHeight;
}
public function move(x:Number, y:Number):void{
this.x = x;
this.y = y;
}
}
}//package mx.core
Section 20
//ByteArrayAsset (mx.core.ByteArrayAsset)
package mx.core {
import flash.utils.*;
public class ByteArrayAsset extends ByteArray implements IFlexAsset {
mx_internal static const VERSION:String = "3.4.1.10084";
public function ByteArrayAsset(){
super();
}
}
}//package mx.core
Section 21
//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.4.1.10084";
public static const EMPTY:EdgeMetrics = new EdgeMetrics(0, 0, 0, 0);
;
public function EdgeMetrics(left:Number=0, top:Number=0, right:Number=0, bottom:Number=0){
super();
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
public function clone():EdgeMetrics{
return (new EdgeMetrics(left, top, right, bottom));
}
}
}//package mx.core
Section 22
//FlexBitmap (mx.core.FlexBitmap)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexBitmap extends Bitmap {
mx_internal static const VERSION:String = "3.4.1.10084";
public function FlexBitmap(bitmapData:BitmapData=null, pixelSnapping:String="auto", smoothing:Boolean=false){
var bitmapData = bitmapData;
var pixelSnapping = pixelSnapping;
var smoothing = smoothing;
super(bitmapData, pixelSnapping, smoothing);
name = NameUtil.createUniqueName(this);
//unresolved jump
var _slot1 = e;
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 23
//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.4.1.10084";
public function FlexMovieClip(){
super();
name = NameUtil.createUniqueName(this);
//unresolved jump
var _slot1 = e;
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 24
//FontAsset (mx.core.FontAsset)
package mx.core {
import flash.text.*;
public class FontAsset extends Font implements IFlexAsset {
mx_internal static const VERSION:String = "3.4.1.10084";
public function FontAsset(){
super();
}
}
}//package mx.core
Section 25
//IBorder (mx.core.IBorder)
package mx.core {
public interface IBorder {
function get borderMetrics():EdgeMetrics;
}
}//package mx.core
Section 26
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 27
//IFlexDisplayObject (mx.core.IFlexDisplayObject)
package mx.core {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.accessibility.*;
public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher {
function get visible():Boolean;
function get rotation():Number;
function localToGlobal(void:Point):Point;
function get name():String;
function set width(flash.display:Number):void;
function get measuredHeight():Number;
function get blendMode():String;
function get scale9Grid():Rectangle;
function set name(flash.display:String):void;
function set scaleX(flash.display:Number):void;
function set scaleY(flash.display:Number):void;
function get measuredWidth():Number;
function get accessibilityProperties():AccessibilityProperties;
function set scrollRect(flash.display:Rectangle):void;
function get cacheAsBitmap():Boolean;
function globalToLocal(void:Point):Point;
function get height():Number;
function set blendMode(flash.display:String):void;
function get parent():DisplayObjectContainer;
function getBounds(String:DisplayObject):Rectangle;
function get opaqueBackground():Object;
function set scale9Grid(flash.display:Rectangle):void;
function setActualSize(_arg1:Number, _arg2:Number):void;
function set alpha(flash.display:Number):void;
function set accessibilityProperties(flash.display:AccessibilityProperties):void;
function get width():Number;
function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean;
function set cacheAsBitmap(flash.display: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(flash.display:Number):void;
function set mask(flash.display:DisplayObject):void;
function getRect(String:DisplayObject):Rectangle;
function get alpha():Number;
function set transform(flash.display:Transform):void;
function move(_arg1:Number, _arg2:Number):void;
function get loaderInfo():LoaderInfo;
function get root():DisplayObject;
function hitTestObject(mx.core:IFlexDisplayObject/mx.core:IFlexDisplayObject:stage/get:DisplayObject):Boolean;
function set opaqueBackground(flash.display:Object):void;
function set visible(flash.display:Boolean):void;
function get mask():DisplayObject;
function set x(flash.display:Number):void;
function set y(flash.display:Number):void;
function get transform():Transform;
function set filters(flash.display:Array):void;
function get x():Number;
function get y():Number;
function get filters():Array;
function set rotation(flash.display:Number):void;
function get stage():Stage;
}
}//package mx.core
Section 28
//IRepeaterClient (mx.core.IRepeaterClient)
package mx.core {
public interface IRepeaterClient {
function get instanceIndices():Array;
function set instanceIndices(C:\autobuild\3.4.0\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:Array):void;
function get isDocument():Boolean;
function set repeaters(C:\autobuild\3.4.0\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:Array):void;
function initializeRepeaterArrays(C:\autobuild\3.4.0\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:IRepeaterClient):void;
function get repeaters():Array;
function set repeaterIndices(C:\autobuild\3.4.0\frameworks\projects\framework\src;mx\core;IRepeaterClient.as:Array):void;
function get repeaterIndices():Array;
}
}//package mx.core
Section 29
//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.4.1.10084";
public function MovieClipAsset(){
super();
_measuredWidth = width;
_measuredHeight = height;
}
public function get measuredWidth():Number{
return (_measuredWidth);
}
public function get measuredHeight():Number{
return (_measuredHeight);
}
public function setActualSize(newWidth:Number, newHeight:Number):void{
width = newWidth;
height = newHeight;
}
public function move(x:Number, y:Number):void{
this.x = x;
this.y = y;
}
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 30
//MovieClipLoaderAsset (mx.core.MovieClipLoaderAsset)
package mx.core {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.system.*;
public class MovieClipLoaderAsset extends MovieClipAsset implements IFlexAsset, IFlexDisplayObject {
protected var initialHeight:Number;// = 0
private var loader:Loader;// = null
private var initialized:Boolean;// = false
protected var initialWidth:Number;// = 0
private var requestedHeight:Number;
private var requestedWidth:Number;
mx_internal static const VERSION:String = "3.4.1.10084";
public function MovieClipLoaderAsset(){
super();
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
if (("allowLoadBytesCodeExecution" in loaderContext)){
loaderContext["allowLoadBytesCodeExecution"] = true;
};
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.loadBytes(movieClipData, loaderContext);
addChild(loader);
}
override public function get width():Number{
if (!initialized){
return (initialWidth);
};
return (super.width);
}
override public function set width(value:Number):void{
if (!initialized){
requestedWidth = value;
} else {
loader.width = value;
};
}
override public function get measuredHeight():Number{
return (initialHeight);
}
private function completeHandler(event:Event):void{
initialized = true;
initialWidth = loader.width;
initialHeight = loader.height;
if (!isNaN(requestedWidth)){
loader.width = requestedWidth;
};
if (!isNaN(requestedHeight)){
loader.height = requestedHeight;
};
dispatchEvent(event);
}
override public function set height(value:Number):void{
if (!initialized){
requestedHeight = value;
} else {
loader.height = value;
};
}
override public function get measuredWidth():Number{
return (initialWidth);
}
override public function get height():Number{
if (!initialized){
return (initialHeight);
};
return (super.height);
}
public function get movieClipData():ByteArray{
return (null);
}
}
}//package mx.core
Section 31
//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 32
//SoundAsset (mx.core.SoundAsset)
package mx.core {
import flash.media.*;
public class SoundAsset extends Sound implements IFlexAsset {
mx_internal static const VERSION:String = "3.4.1.10084";
public function SoundAsset(){
super();
}
}
}//package mx.core
Section 33
//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.4.1.10084";
private static var counter:int = 0;
public function NameUtil(){
super();
}
public static function displayObjectToString(displayObject:DisplayObject):String{
var result:String;
var o:DisplayObject;
var s:String;
var indices:Array;
var displayObject = displayObject;
o = displayObject;
while (o != null) {
if (((((o.parent) && (o.stage))) && ((o.parent == o.stage)))){
break;
};
s = o.name;
if ((o is IRepeaterClient)){
indices = IRepeaterClient(o).instanceIndices;
if (indices){
s = (s + (("[" + indices.join("][")) + "]"));
};
};
result = ((result == null)) ? s : ((s + ".") + result);
o = o.parent;
};
//unresolved jump
var _slot1 = e;
return (result);
}
public static function createUniqueName(object:Object):String{
if (!object){
return (null);
};
var name:String = getQualifiedClassName(object);
var index:int = name.indexOf("::");
if (index != -1){
name = name.substr((index + 2));
};
var charCode:int = name.charCodeAt((name.length - 1));
if ((((charCode >= 48)) && ((charCode <= 57)))){
name = (name + "_");
};
return ((name + counter++));
}
}
}//package mx.utils
Section 34
//ZoBackground (zomg.gui.ZoBackground)
package zomg.gui {
import flash.display.*;
import flash.geom.*;
public class ZoBackground extends Sprite {
protected var col:uint;// = 0
protected var _position:Point;
public var _mySize:Point;
protected var myAlpha:Number;// = 0xFF
public function ZoBackground(size:Point, color:uint=0, alpha:Number=0xFF, pos:Point=null){
super();
mySize = size;
switchColor(color, alpha);
if (pos){
x = pos.x;
y = pos.y;
};
}
public function get position():Point{
position = new Point(x, y);
return (position);
}
public function get mySize():Point{
return (_mySize);
}
public function switchColor(color:uint=0, alpha:Number=0xFF):void{
col = color;
myAlpha = alpha;
graphics.clear();
graphics.beginFill(color, (alpha / 0xFF));
graphics.drawRect(0, 0, mySize.x, mySize.y);
graphics.endFill();
}
public function set position(pos:Point):void{
x = pos.x;
y = pos.y;
}
public function set mySize(pt:Point):void{
_mySize = pt;
switchColor(col, myAlpha);
}
}
}//package zomg.gui
Section 35
//ZoButton (zomg.gui.ZoButton)
package zomg.gui {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import zomg.*;
public class ZoButton extends ZoSprite {
protected var toggle:Boolean;// = false
public function ZoButton(sheet:Bitmap, size:Point, name:String="", toggle:Boolean=false, active:Boolean=true){
super(sheet, size, new Point());
this.name = name;
this.toggle = toggle;
symbol.addAnim("mouseOut", size, 1, new Point(0, 0));
symbol.addAnim("mouseOver", size, 1, new Point(0, 1));
symbol.playAnim("mouseOut");
switchActive(active);
mouseChildren = false;
}
protected function mouseOver(e:MouseEvent):void{
symbol.playAnim("mouseOver");
}
public function update():void{
symbol.update();
}
public function switchAnim(name:String="mouseOut"):void{
symbol.playAnim(name);
}
public function action(flag:Boolean=false):void{
}
protected function mouseDown(e:MouseEvent):void{
var onoff:Boolean;
if (symbol.currentAnim == "mouseOut"){
symbol.playAnim("mouseOver");
onoff = true;
} else {
symbol.playAnim("mouseOut");
};
action(onoff);
}
protected function mouseOut(e:MouseEvent):void{
symbol.playAnim("mouseOut");
}
public function switchActive(flag:Boolean=false):Boolean{
visible = (active = flag);
if (flag){
if (toggle){
addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
} else {
addEventListener(MouseEvent.MOUSE_OUT, mouseOut);
addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
};
} else {
if (toggle){
removeEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
} else {
removeEventListener(MouseEvent.MOUSE_OUT, mouseOut);
removeEventListener(MouseEvent.MOUSE_OVER, mouseOver);
};
};
return (active);
}
}
}//package zomg.gui
Section 36
//ZoGUI (zomg.gui.ZoGUI)
package zomg.gui {
import flash.display.*;
import flash.text.*;
import flash.geom.*;
public class ZoGUI {
public function ZoGUI(){
super();
}
public static function getStdTextField(tfSize:Point, defaultText:String="", param:Object=null, pos:Point=null, container:DisplayObjectContainer=null, name:String=""):TextField{
if (!pos){
pos = new Point();
};
if (!param.size){
param.size = 12;
};
if (!param.font){
param.font = "Arial";
};
if (!param.embed){
param.embed = false;
};
if (!param.align){
param.align = "left";
};
if (!param.color){
param.color = 0;
};
if (!param.letterSpace){
param.letterSpace = 0;
};
if (!param.selectable){
param.selectable = false;
};
if (!param.underline){
param.underline = false;
};
if (!param.bold){
param.bold = false;
};
var format:TextFormat = new TextFormat(param.font, param.size, param.color);
format.align = param.align;
format.letterSpacing = param.letterSpace;
format.underline = param.underline;
format.bold = param.bold;
var tf:TextField = new TextField();
tf.width = tfSize.x;
tf.height = tfSize.y;
tf.name = name;
tf.selectable = false;
tf.embedFonts = param.embed;
tf.defaultTextFormat = format;
tf.text = defaultText;
if (container){
container.addChild(tf);
};
tf.x = pos.x;
tf.y = pos.y;
return (tf);
}
}
}//package zomg.gui
Section 37
//ZoLoadBar (zomg.gui.ZoLoadBar)
package zomg.gui {
import flash.display.*;
import flash.geom.*;
public class ZoLoadBar extends Sprite {
protected var size:Point;
protected var fill:Sprite;
protected var _currentPerc:Number;
protected var cadre:Sprite;
protected var borderSize:Number;// = 2
protected var fillColor:uint;// = 0
protected var myMask:Sprite;
protected var _current:Number;
protected static var min:Number = 0;
protected static var max:Number = 100;
public function ZoLoadBar(size:Point, value:Number=0, fillColor:uint=0xFF0000, borderColor:uint=0){
_current = min;
_currentPerc = min;
super();
this.size = size;
this.fillColor = fillColor;
if (size.y < 20){
borderSize = 1;
};
cadre = new Sprite();
cadre.graphics.beginFill(borderColor);
cadre.graphics.drawRect(0, 0, size.x, size.y);
cadre.graphics.endFill();
fill = new Sprite();
fill.graphics.beginFill(fillColor);
fill.graphics.drawRect(0, 0, (size.x - (borderSize * 2)), (size.y - (borderSize * 2)));
fill.graphics.endFill();
fill.y = (fill.x = borderSize);
myMask = new Sprite();
myMask.graphics.beginFill(0xFFFFFF);
myMask.graphics.drawRect(0, 0, (size.x / 2), (size.y - (borderSize * 2)));
myMask.graphics.endFill();
myMask.x = (myMask.y = borderSize);
addChild(cadre);
addChild(fill);
addChild(myMask);
fill.mask = myMask;
setValue(value);
}
public function reset():void{
currentPerc = 0;
}
public function setFillColor(col:uint=0xFF0000):void{
fill.graphics.clear();
fill.graphics.beginFill(col);
fill.graphics.drawRect(0, 0, (size.x - (borderSize * 2)), (size.y - (borderSize * 2)));
fill.graphics.endFill();
}
public function toggleBar():void{
if (visible){
visible = false;
} else {
visible = true;
};
}
protected function setValue(value:Number):void{
var theWidth:Number = ((size.x / 100) * value);
if (theWidth < 1){
theWidth = 1;
};
myMask.graphics.clear();
myMask.graphics.beginFill(0xFFFFFF);
myMask.graphics.drawRect(0, 0, theWidth, (size.y - (borderSize * 2)));
myMask.graphics.endFill();
}
public function set current(v:Number):void{
_current = v;
setValue(v);
}
public function get current():Number{
return (_current);
}
public function set currentPerc(v:Number):void{
_currentPerc = v;
current = (v * 100);
}
public function get currentPerc():Number{
return ((_current / 100));
}
}
}//package zomg.gui
Section 38
//OLRlinks (zomg.olr.OLRlinks)
package zomg.olr {
import flash.events.*;
import flash.display.*;
import flash.text.*;
import flash.net.*;
public class OLRlinks extends Sprite {
private static var txt:String = ("> By " + owner);
private static var crossColor:uint = 0xFF0000;
private static var useCross:Boolean = true;
private static var owner:String = "OneLifeRemains";
public function OLRlinks(stage:Stage){
var tformat:TextFormat;
var tf:TextField;
var cross:Sprite;
var left:Sprite;
var right:Sprite;
super();
tformat = new TextFormat();
tformat.size = 12;
tformat.font = "Arial";
tformat.align = "right";
tformat.bold = true;
tformat.color = 0xFFFF00;
tf = new TextField();
tf.selectable = false;
tf.width = stage.stageWidth;
tf.height = 20;
tf.x = -10;
tf.y = ((stage.stageHeight - tf.height) - 10);
tf.defaultTextFormat = tformat;
tf.text = txt;
if (useCross){
cross = new Sprite();
left = new Sprite();
left.graphics.lineStyle(1, crossColor);
left.graphics.moveTo(0, 0);
left.graphics.lineTo(stage.stageWidth, stage.stageHeight);
cross.addChild(left);
right = new Sprite();
right.graphics.lineStyle(1, crossColor);
right.graphics.moveTo(stage.stageWidth, 0);
right.graphics.lineTo(0, stage.stageHeight);
cross.addChild(right);
cross.alpha = 0.3;
addChild(cross);
};
addChild(tf);
this.mouseChildren = false;
this.buttonMode = true;
this.addEventListener(MouseEvent.MOUSE_DOWN, onClick);
}
private function onClick(e:MouseEvent):void{
var req:URLRequest = new URLRequest("http://www.oneliferemains.com/");
navigateToURL(req, "_blank");
}
}
}//package zomg.olr
Section 39
//OLRLogo (zomg.olr.OLRLogo)
package zomg.olr {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import flash.net.*;
import zomg.gui.*;
public class OLRLogo extends Sprite {
protected var wait:int;// = 20
protected var myMask:Sprite;
protected var show:int;// = 120
public static const FONT:String = "OLRLogo_FONT";
public function OLRLogo(s:Stage){
var contain:Sprite;
super();
contain = new Sprite();
addChild(new ZoBackground(new Point(s.stageWidth, s.stageHeight)));
addChild(contain);
myMask = new Sprite();
myMask.graphics.beginFill(0);
myMask.graphics.drawRect(0, 0, s.stageWidth, s.stageHeight);
myMask.graphics.endFill();
var tfone:TextField = ZoGUI.getStdTextField(new Point(70, 20), "one", {font:"visitor2", embed:true, size:40, color:0x888888, align:"center"}, new Point(0, 0), contain);
var tflife:TextField = ZoGUI.getStdTextField(new Point(75, 20), "life", {font:"visitor2", embed:true, size:40, color:0xEE0000, align:"center"}, new Point((tfone.x + tfone.width), 0), contain);
var tfremains:TextField = ZoGUI.getStdTextField(new Point(125, 20), "remains", {font:"visitor2", embed:true, size:40, color:0x888888, align:"center"}, new Point((tflife.x + tflife.width), 0), contain);
var tf:TextField = ZoGUI.getStdTextField(new Point(contain.width, 20), "Developed by :", {font:"visitor2", embed:true, size:20, color:0xAAAAAA, align:"center"}, new Point(0, -20), contain);
tfone.selectable = (tflife.selectable = (tfremains.selectable = false));
contain.x = ((s.stageWidth / 2) - (contain.width / 2));
contain.y = ((s.stageHeight / 2) - (contain.height / 2));
addEventListener(Event.ENTER_FRAME, update);
addEventListener(MouseEvent.CLICK, goto);
addChild(myMask);
buttonMode = true;
}
protected function goto(e:MouseEvent):void{
var nklink:URLRequest = new URLRequest("http://www.oneliferemains.com");
navigateToURL(nklink, "_blank");
}
protected function update(e:Event=null):void{
if (wait){
wait--;
} else {
if (show){
if (myMask.alpha > 0){
myMask.alpha = (myMask.alpha - 0.08);
} else {
show--;
};
} else {
if (myMask.alpha < 1){
myMask.alpha = (myMask.alpha + 0.08);
} else {
kill();
};
};
};
}
public function kill():void{
visible = false;
removeEventListener(Event.ENTER_FRAME, update);
removeEventListener(MouseEvent.CLICK, goto);
}
}
}//package zomg.olr
Section 40
//OLRLogo_FONT (zomg.olr.OLRLogo_FONT)
package zomg.olr {
import mx.core.*;
public class OLRLogo_FONT extends FontAsset {
}
}//package zomg.olr
Section 41
//ZoSound (zomg.sound.ZoSound)
package zomg.sound {
import flash.events.*;
import flash.media.*;
import com.greensock.*;
public class ZoSound {
protected var channel:SoundChannel;
protected var _myVolume:Number;// = 1
protected var sndTransform:SoundTransform;
protected var name:String;// = ""
protected var active:Boolean;// = true
protected var state:uint;// = 0
protected var loop:int;// = 1
protected var snd:Sound;
protected var playing:Boolean;// = false
protected var type:String;// = ""
public function ZoSound(sound:Sound, name:String, type:String="music", loop:int=1, active:Boolean=true){
super();
snd = sound;
this.name = name;
this.type = type;
this.loop = loop;
sndTransform = new SoundTransform(1);
this.active = active;
}
protected function updateChannel():void{
channel.soundTransform = sndTransform;
this.myVolume = sndTransform.volume;
}
public function update():void{
var mute:Boolean;
var typeVolume:Number;
if (isPlaying()){
if (ZoSoundEngine.useSound){
mute = false;
typeVolume = 1;
switch (type){
case "fx":
mute = ZoSoundEngine.muteFx;
typeVolume = ZoSoundEngine.volumeFx;
break;
case "music":
mute = ZoSoundEngine.muteMusic;
typeVolume = ZoSoundEngine.volumeMusic;
break;
};
if (mute){
sndTransform.volume = 0;
} else {
sndTransform.volume = ((myVolume * ZoSoundEngine.globalVolume) * typeVolume);
};
channel.soundTransform = sndTransform;
};
};
}
public function set myVolume(v:Number):void{
_myVolume = v;
update();
}
protected function stopChannel():void{
channel.stop();
}
public function isMute():Boolean{
if (sndTransform.volume <= 0){
return (true);
};
return (false);
}
public function get myVolume():Number{
return (_myVolume);
}
public function isPlaying():Boolean{
return (playing);
}
public function stopSound(fadeOut:Number=0):void{
if (playing){
if (fadeOut){
TweenLite.to(sndTransform, fadeOut, {volume:0, onUpdate:updateChannel, onComplete:stopChannel});
} else {
stopChannel();
};
};
playing = false;
}
public function muteSound(mute:Boolean=true, fadeInOut:Number=0):void{
if (playing){
if (mute){
TweenLite.to(sndTransform, fadeInOut, {volume:0, onUpdate:updateChannel});
} else {
TweenLite.to(sndTransform, fadeInOut, {volume:1, onUpdate:updateChannel});
};
};
}
public function complete(e:Event):void{
if (loop == 0){
playSound();
} else {
stopSound();
};
}
public function playSound(offset:Number=0, fadeIn:Number=0):void{
if (ZoSoundEngine.playMp3){
offset = (offset + 0.025);
};
if (((active) && (ZoSoundEngine.useSound))){
if (!playing){
channel = snd.play(offset, loop, sndTransform);
channel.addEventListener(Event.SOUND_COMPLETE, complete);
update();
} else {
stopSound();
playSound(offset, fadeIn);
};
if (fadeIn > 0){
TweenLite.to(sndTransform, fadeIn, {volume:1, onUpdate:updateChannel});
};
playing = true;
update();
};
}
}
}//package zomg.sound
Section 42
//ZoSoundEngine (zomg.sound.ZoSoundEngine)
package zomg.sound {
public class ZoSoundEngine {
public static var sounds:Object;
public static var muteFx:Boolean = false;
public static var muteMusic:Boolean = false;
public static var useSound:Boolean = true;
public static var alias:Array;
public static var playMp3:Boolean = true;
public static var _volumeFx:Number = 1;
public static var _volumeMusic:Number = 1;
public static var _globalVolume:Number = 1;
public function ZoSoundEngine(){
super();
}
public static function setEngineInfo(initVol:Number):void{
sounds = new Object();
alias = new Array();
globalVolume = initVol;
}
public static function get volumeFx():Number{
return (_volumeFx);
}
public static function muting(fx:Boolean=false, music:Boolean=false):void{
muteFx = fx;
muteMusic = music;
globalVolume = globalVolume;
}
public static function getSound(name:String):ZoSound{
if (sounds[name]){
return (sounds[name]);
};
return (null);
}
public static function get globalVolume():Number{
return (_globalVolume);
}
public static function set volumeFx(v:Number):void{
_volumeFx = v;
}
public static function set volumeMusic(v:Number):void{
_volumeMusic = v;
}
public static function addSound(embedSound:Class, name:String="", type:String="music", loop:int=1):void{
if (!sounds[name]){
sounds[name] = new ZoSound(new (embedSound), name, type, loop, true);
alias.push(name);
} else {
trace((("SoundEngine >> sound " + name) + " already exist "));
};
}
public static function get volumeMusic():Number{
return (_volumeMusic);
}
public static function set globalVolume(v:Number):void{
var s:ZoSound;
var i:Number;
_globalVolume = v;
if (alias){
i = 0;
while (i < alias.length) {
s = (sounds[alias[i]] as ZoSound);
if (s.isPlaying()){
s.update();
};
i++;
};
};
}
}
}//package zomg.sound
Section 43
//DebugFatalError (zomg.tools.DebugFatalError)
package zomg.tools {
import flash.display.*;
import flash.text.*;
import flash.geom.*;
import zomg.gui.*;
import zomg.olr.*;
public class DebugFatalError extends Sprite {
public function DebugFatalError(txt:String, stage:Stage){
super();
addChild(new ZoBackground(new Point(stage.stageWidth, stage.stageHeight), 0));
var tformat:TextFormat = new TextFormat();
tformat.size = 30;
tformat.font = "Arial";
tformat.align = "center";
tformat.color = 0xFF0000;
var tf:TextField = new TextField();
tf.selectable = false;
tf.width = 800;
tf.height = 100;
tf.x = ((stage.stageWidth / 2) - (tf.width / 2));
tf.y = ((stage.stageHeight / 2) - (tf.height / 2));
tf.defaultTextFormat = tformat;
tf.text = txt;
addChild(tf);
addChild(new OLRlinks(stage));
}
}
}//package zomg.tools
Section 44
//DebugTitle (zomg.tools.DebugTitle)
package zomg.tools {
import flash.events.*;
import flash.display.*;
import flash.text.*;
public class DebugTitle extends Sprite {
private var mainTitle:TextField;
private var t:TextField;
private var content:Array;
private var titles:Array;
public function DebugTitle(title:String="", cont:String=""){
super();
titles = new Array();
content = new Array();
if (title.length > 0){
addTitle(title, cont);
};
createGlobal();
mainTitle = new TextField();
mainTitle.textColor = 0xFF0000;
mainTitle.width = 200;
mainTitle.height = 25;
mainTitle.x = 0;
mainTitle.y = 0;
mainTitle.text = "DEBUG \n";
addChild(mainTitle);
this.addEventListener(Event.ENTER_FRAME, update);
}
public function getTitle(ind:Number):String{
if (ind < titles.length){
return (titles[ind]);
};
return ("");
}
public function getContent(ind:Number):String{
if (ind < content.length){
return (content[ind]);
};
return ("");
}
public function update(e:Event):void{
var txt:String = "";
var i:Number = 0;
while (i < titles.length) {
txt = (txt + (((this.getTitle(i) + " : ") + this.getContent(i)) + " \n"));
i++;
};
t.text = txt;
}
public function setContent(title:String, contentAdd:String):void{
var exist:Boolean;
var i:Number = 0;
while (i < titles.length) {
if (titles[i] == title){
content[i] = contentAdd;
exist = true;
};
i++;
};
if (!exist){
titles.push(title);
content.push(contentAdd);
};
}
public function addTitle(title:String, contentAdd:String=""):void{
titles.push(title);
content.push(contentAdd);
}
public function getContentByTitle(title:String):String{
var i:Number = 0;
while (i < titles.length) {
if (titles[i] == title){
return (content[i]);
};
i++;
};
return ("");
}
private function createGlobal():void{
t = new TextField();
t.textColor = 0xFF00;
t.width = 400;
t.height = 300;
t.setTextFormat(new TextFormat("Arial", 12));
t.text = "";
t.x = 10;
t.y = 25;
addChild(t);
}
}
}//package zomg.tools
Section 45
//DebugTool (zomg.tools.DebugTool)
package zomg.tools {
import flash.geom.*;
import flash.display.*;
import flash.text.*;
public class DebugTool extends Sprite {
public var shape:Sprite;
protected var color:uint;
private var myType:String;
private var textArray:DebugTitle;
protected var pos:Point;
public var myText:TextField;
public function DebugTool(pos:Point=null, type:String="followGUI", textColor:uint=0xFF0000, defaultText:String=""){
super();
name = "DEBUG TEXT";
if (!pos){
pos = new Point();
};
myType = type;
this.pos = pos;
color = textColor;
switch (myType){
case "point":
createShape();
break;
case "followGUI":
createTextField().text = defaultText;
break;
default:
trace("DebugTool >> wrong debug info");
break;
};
mouseEnabled = false;
}
public function createShape():void{
shape = buildSquare(0xFF0000);
shape.x = (-(width) / 2);
shape.y = (-(height) / 2);
addChild(shape);
}
public function Update():void{
switch (myType){
default:
trace("Debug >> error switch");
break;
};
}
private function buildSquare(color:uint):Sprite{
var width:Number = 5;
var height:Number = 5;
var shape:Sprite = new Sprite();
shape.graphics.beginFill(color);
shape.graphics.drawRect(0, 0, width, height);
shape.graphics.endFill();
return (shape);
}
public function setText(str:String, add:Boolean=false):void{
if (add){
myText.appendText(str);
} else {
myText.text = str;
};
}
public function createTextField():TextField{
myText = new TextField();
myText.text = "DEBUG";
addChild(myText);
myText.textColor = color;
myText.selectable = false;
myText.x = pos.x;
myText.y = pos.y;
myText.width = 500;
myText.height = 200;
myText.mouseEnabled = false;
return (myText);
}
public function pointColor(color:uint):void{
shape.graphics.clear();
shape = buildSquare(color);
toggleShape(true);
}
public function toggleShape(flag:Boolean=true):Boolean{
if (flag){
addChild(shape);
} else {
removeChild(shape);
};
return (flag);
}
}
}//package zomg.tools
Section 46
//ZoConsole (zomg.tools.ZoConsole)
package zomg.tools {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import zomg.*;
import zomg.gui.*;
import flash.ui.*;
public class ZoConsole extends Sprite {
protected var owners:Array;
public var size:Point;
protected var k:ZoKeys;
public var tf:TextField;
protected var lines:Array;
public function ZoConsole(s:Stage, fpsManager:Sprite){
size = new Point(500, 300);
tf = ZoGUI.getStdTextField(size, "BLAH BLAH BLAH", {size:12, font:"Arial", embed:false, align:"left", color:0xFFFFFF});
lines = new Array();
owners = new Array();
super();
addChild(new ZoBackground(size, 16768477, 150));
k = new ZoKeys(s, new Array(new ZoKey(Keyboard.TAB, "show")), "console");
addChild(tf);
tf.x = (tf.y = 10);
if (fpsManager){
addChild(fpsManager);
fpsManager.x = (size.x + 10);
fpsManager.y = y;
};
addEventListener(Event.ENTER_FRAME, update);
x = (y = 10);
visible = false;
}
protected function update(e:Event=null):void{
if (k.getKeyStateByName("show")){
visible = true;
} else {
visible = false;
};
}
public function addLine(s:String="", from:String=""):void{
trace(((("[console] " + from) + " >> ") + s));
tf.text = "Console > \n";
lines.push(s);
owners.push(from);
var start:uint;
if (lines.length > 20){
start = (lines.length - 20);
};
var i:uint = start;
while (i < lines.length) {
tf.appendText((((owners[i] + " >> ") + lines[i]) + "\n"));
i++;
};
}
}
}//package zomg.tools
Section 47
//ZoMathTools (zomg.tools.ZoMathTools)
package zomg.tools {
import flash.geom.*;
public class ZoMathTools {
public function ZoMathTools(){
super();
}
public static function getAngleVector(myPos:Point, aimPos:Point):Number{
var angle:Number = ZoMathTools.dirRotation(myPos, aimPos);
if (angle < 0){
return (-(angle));
};
return ((360 - angle));
}
public static function thresholdInt(min:int, max:int, val:int):int{
if (val < min){
val = min;
} else {
if (val > max){
val = max;
};
};
return (val);
}
public static function randomBetween(min:Number, max:Number, round:Boolean=false):Number{
var val:Number = ((Math.random() * (max - min)) + min);
if (round){
return (Math.round(val));
};
return (val);
}
public static function linearTransform(intA:Point, intB:Point, val:Number):Number{
return (((((val - intA.x) / (intA.y - intA.x)) * (intB.y - intB.x)) + intB.x));
}
public static function vectorLength(pt:Point):Number{
return (Math.sqrt((Math.pow(pt.x, 2) + Math.pow(pt.y, 2))));
}
public static function addDirRotation(dir:Point, rot:Number=90):Point{
var diff:Number = ZoMathTools.degreeToRadian((ZoMathTools.radianToDegree(Math.acos(dir.x)) + rot));
var pt:Point = new Point(Math.cos(diff), Math.sin(diff));
return (pt);
}
public static function getDirectionVec(myPos:Point, aimPos:Point):Point{
return (normalize(new Point((aimPos.x - myPos.x), (aimPos.y - myPos.y))));
}
public static function normalize(pt:Point):Point{
var length:Number = Math.sqrt(((pt.x * pt.x) + (pt.y * pt.y)));
if (length != 0){
return (new Point((pt.x / length), (pt.y / length)));
};
return (new Point());
}
public static function isNearZeroThreshold(limit:Number, val:Number):Number{
if ((((val > -(limit))) && ((val < limit)))){
return (0);
};
return (val);
}
public static function roundNear(val:Number, digit:Number=2):Number{
var num:Number = Math.pow(10, digit);
return ((Math.round((val * num)) / num));
}
public static function getVectorAngle(pt:Point):Number{
var degCos:Number = ZoMathTools.radianToDegree(Math.acos(pt.x));
if (pt.x > 0){
if (pt.y == 0){
return (0);
};
if (pt.y > 0){
return (degCos);
};
if (pt.y < 0){
return ((360 - degCos));
};
} else {
if (pt.x < 0){
if (pt.y == 0){
return (180);
};
if (pt.y > 0){
return (degCos);
};
if (pt.y < 0){
return ((180 + (180 - degCos)));
};
} else {
if (pt.x == 0){
if (pt.y == 0){
return (0);
};
if (pt.y > 0){
return (90);
};
if (pt.y < 0){
return (270);
};
};
};
};
return (0);
}
public static function isNearValue(val:Number, nearValue:Number, gap:Number=0.1, deg:Boolean=false):Boolean{
var intervB:Point;
var interv:Point = new Point((nearValue - gap), (nearValue + gap));
var flag:Boolean;
if ((((val < interv.y)) && ((val > interv.x)))){
flag = true;
} else {
if (deg){
intervB = new Point();
if ((nearValue + gap) > 360){
intervB.x = 0;
intervB.y = ((nearValue + gap) - 360);
} else {
if ((nearValue - gap) < 0){
intervB.x = ((360 - nearValue) - gap);
intervB.y = 360;
};
};
if ((((val < intervB.y)) && ((val > intervB.x)))){
flag = true;
};
};
};
return (flag);
}
public static function reduceToMax(aim:Number, step:Number, value:Number):Number{
if (Math.abs(value) > Math.abs(aim)){
value = (value + (-(ZoMathTools.sign(aim)) * step));
return (value);
};
return (value);
}
public static function randomBoolean():Boolean{
if (Math.random() > 0.5){
return (true);
};
return (false);
}
public static function degreeToRadian(angle:Number):Number{
return ((angle * (Math.PI / 180)));
}
public static function getAngleVector180(pt:Point):Number{
var angle:Number = ZoMathTools.radianToDegree(Math.acos(pt.x));
if (pt.y < 0){
return (-(angle));
};
if (pt.y > 0){
return (angle);
};
return (0);
}
public static function threshold(min:Number, max:Number, val:Number):Number{
if (val < min){
val = min;
} else {
if (val > max){
val = max;
};
};
return (val);
}
public static function circleInter(home:Point, dest:Point, circleCenter:Point, circleRadius:Number):Point{
var distA:Number;
var distB:Number;
var a:Number = (Math.pow((dest.x - home.x), 2) + Math.pow((dest.y - home.y), 2));
var b:Number = (2 * (((dest.x - home.x) * (home.x - circleCenter.x)) + ((dest.y - home.y) * (home.y - circleCenter.y))));
var c:Number = (((((Math.pow(circleCenter.x, 2) + Math.pow(circleCenter.y, 2)) + Math.pow(home.x, 2)) + Math.pow(home.y, 2)) - (2 * ((circleCenter.x * home.x) + (circleCenter.y * home.y)))) - Math.pow(circleRadius, 2));
var coef:Number = ((b * b) - ((4 * a) * c));
var k1:Number = 0;
var k2:Number = 0;
var ptA:Point = new Point();
var ptB:Point = new Point();
if (coef == 0){
k1 = (-(b) / (2 * a));
} else {
if (coef > 0){
k1 = ((-(b) - Math.sqrt(coef)) / (2 * a));
k2 = ((-(b) + Math.sqrt(coef)) / (2 * a));
};
};
if (k1 != 0){
ptA = new Point((home.x + (k1 * (dest.x - home.x))), (home.y + (k1 * (dest.y - home.y))));
distA = ZoMathTools.distance(home, ptA);
if (k2 != 0){
ptB = new Point((home.x + (k2 * (dest.x - home.x))), (home.y + (k2 * (dest.y - home.y))));
distB = ZoMathTools.distance(home, ptB);
if (distA < distB){
return (ptA);
};
return (ptB);
} else {
return (ptA);
};
};
return (new Point());
}
public static function getDirectionObj(me:Object, aim:Object):Point{
return (normalize(new Point((aim.x - me.x), (aim.y - me.y))));
}
public static function radianToDegree(angle:Number):Number{
return ((angle * (180 / Math.PI)));
}
public static function getAdjAngle(adjLen:Number, oppoLen:Number):Number{
var hyp:Number = Math.sqrt((Math.pow(adjLen, 2) + Math.pow(oppoLen, 2)));
var c:Number = (adjLen / hyp);
return (ZoMathTools.radianToDegree(Math.acos(c)));
}
public static function dirRotation(pta:Point, ptb:Point):Number{
return ((Math.atan2((ptb.y - pta.y), (ptb.x - pta.x)) / (Math.PI / 180)));
}
public static function distance(pta:Point, ptb:Point):Number{
return (Math.sqrt((Math.pow((ptb.x - pta.x), 2) + Math.pow((ptb.y - pta.y), 2))));
}
public static function getAdj(adjLen:Number, adjAng:Number):Number{
var hyp:Number = (adjLen / Math.cos(adjAng));
return (Math.sqrt((Math.pow(hyp, 2) - Math.pow(adjLen, 2))));
}
public static function destinationPoint(origin:Point, dir:Point, lenght:Number):Point{
return (new Point((origin.x + (dir.x * lenght)), (origin.y + (dir.y * lenght))));
}
public static function sign(val:Number):Number{
if (val > 0){
return (1);
};
if (val < 0){
return (-1);
};
return (0);
}
public static function isBetween(x:Number, min:Number, max:Number):Boolean{
if ((((x < min)) || ((x > max)))){
return (false);
};
return (true);
}
}
}//package zomg.tools
Section 48
//ZoSitelock (zomg.tools.ZoSitelock)
package zomg.tools {
public class ZoSitelock {
public static var domain:String = "";
public function ZoSitelock(){
super();
}
public static function SiteLock(myUrl:String, allowLocal:Boolean=false, urls_allowed:Array=null):Boolean{
var url:String;
var urlStart:Number;
var urlEnd:Number;
var domain:String;
var LastDot:Number;
var domEnd:Number;
var i:Number;
var lock:Boolean;
if (urls_allowed){
url = myUrl;
urlStart = (url.indexOf("://") + 3);
urlEnd = url.indexOf("/", urlStart);
domain = url.substring(urlStart, urlEnd);
LastDot = (domain.lastIndexOf(".") - 1);
domEnd = (domain.lastIndexOf(".", LastDot) + 1);
domain = domain.substring(domEnd, domain.length);
if (allowLocal){
if (myUrl.indexOf("file://") > -1){
lock = false;
};
};
if (lock){
i = 0;
while (i < urls_allowed.length) {
if (urls_allowed[i] == domain){
trace(("-" + urls_allowed[i]));
lock = false;
};
i++;
};
};
if (domain.length > 0){
_slot1.domain = domain;
} else {
_slot1.domain = "[local]";
};
} else {
_slot1.domain = "No domain list";
};
trace(((((((("ZoSiteLock >> (file:" + myUrl.indexOf("file://")) + " | web:") + lock) + ") URL:") + myUrl) + " || Real domain:") + domain));
return (lock);
}
}
}//package zomg.tools
Section 49
//ZoTools (zomg.tools.ZoTools)
package zomg.tools {
import flash.geom.*;
import flash.display.*;
import flash.net.*;
public class ZoTools {
public function ZoTools(){
super();
}
public static function getSlotLevel(ar:Array, lvl:int=0):Array{
var temp:Array;
var result:Array = new Array();
var middle:int = Math.round((ar.length / 2));
result.push(middle);
var i:uint = 1;
while (i < lvl) {
if ((middle - i) > 0){
temp = new Array();
temp.push((middle - i));
result = temp.concat(result);
};
result.push((middle + i));
i++;
};
return (result);
}
public static function cookie(cookieName:String="olr", saveState:SharedObject=null):SharedObject{
var myState:SharedObject;
if (saveState){
myState = saveState;
myState.flush();
} else {
myState = SharedObject.getLocal(cookieName);
};
return (myState);
}
public static function sortChildrenDepth(container:DisplayObjectContainer, param:String="y"):Boolean{
var depthsSwapped:Boolean;
var child:DisplayObject;
var numChildren:int = container.numChildren;
if (numChildren < 2){
return (false);
};
var children:Array = new Array(numChildren);
var i = -1;
while (++i < numChildren) {
children[i] = container.getChildAt(i);
};
children.sortOn(param, Array.NUMERIC);
i = -1;
while (++i < numChildren) {
child = DisplayObject(children[i]);
if (i != container.getChildIndex(child)){
depthsSwapped = true;
container.setChildIndex(child, i);
};
};
return (depthsSwapped);
}
public static function removeArrayElement(ar:Array, elmt:Object):Array{
var ar_aft:Array;
var ar_bef:Array;
var i:Number = ar.indexOf(elmt);
var arr:Array = ar;
if (i > -1){
ar_aft = ar.slice((i + 1));
ar_bef = ar.slice(0, i);
arr = ar_bef.concat(ar_aft);
};
return (arr);
}
public static function transformToPoint(s:String):Point{
var ar:Array = s.split(",");
return (new Point(Number(ar[0]), Number(ar[1])));
}
public static function insertInFront(ar:Array, elmt:Object):Array{
var arr:Array = new Array(elmt);
return (arr.concat(ar));
}
}
}//package zomg.tools
Section 50
//ZoColor (zomg.ZoColor)
package zomg {
import flash.geom.*;
import flash.display.*;
import zomg.tools.*;
public class ZoColor {
private var num:uint;
public function ZoColor(value:uint, valueS:String=""){
super();
this.num = value;
if (valueS.length > 0){
this.num = uint(value);
};
}
public function toString():String{
var str:String = "ColorManager >> ";
str = (str + (" A:" + ((num & 4278190080) >>> 24)));
str = (str + (" R:" + ((num & 0xFF0000) >>> 16)));
str = (str + (" G:" + ((num & 0xFF00) >>> 8)));
str = (str + (" B:" + (num & 0xFF)));
return (str);
}
public static function getImageFromSheet(sheet:Bitmap, size:Point, posOnSheet:Point=null):Bitmap{
if (!posOnSheet){
posOnSheet = new Point();
};
var current:Bitmap = new Bitmap(new BitmapData(size.x, size.y));
var upLeft:Point = new Point((posOnSheet.y * size.x), (posOnSheet.x * size.y));
var coord:Rectangle = new Rectangle(upLeft.x, upLeft.y, size.x, size.y);
current.bitmapData.copyPixels(sheet.bitmapData, coord, new Point());
return (current);
}
public static function getRandomColor(alpha:Number=0xFF):uint{
alpha = ZoMathTools.threshold(0, 0xFF, alpha);
return (new ColorTransform(0, 0, 0, 0, ZoMathTools.randomBetween(0, 0xFF), ZoMathTools.randomBetween(0, 0xFF), ZoMathTools.randomBetween(0, 0xFF), alpha).color);
}
public static function drawCross(length:Number=10, tickness:Number=1, color:uint=0xFF0000):Sprite{
var s:Sprite = new Sprite();
s.graphics.lineStyle(3, color);
s.graphics.moveTo(-(length), 0);
s.graphics.lineTo(length, 0);
s.graphics.moveTo(0, -(length));
s.graphics.lineTo(0, length);
return (s);
}
public static function rgbaToUint(r:Number=0, g:Number=0, b:Number=0, a:Number=0xFF):uint{
return (new ColorTransform(0, 0, 0, 0, r, g, b, a).color);
}
public static function getComponentValue(color:uint, component:String):Number{
switch (component){
case "a":
return (((color & 4278190080) >>> 24));
case "r":
return (((color & 0xFF0000) >>> 16));
case "g":
return (((color & 0xFF00) >>> 8));
case "b":
return ((color & 0xFF));
default:
trace("World >> getPixelCompo error");
break;
};
return (-1);
}
public static function getRandomColorComponent(component:String="r", alpha:Number=0xFF):uint{
var r:Number = 0;
var g:Number = 0;
var b:Number = 0;
switch (component){
case "r":
r = ZoMathTools.randomBetween(0, 0xFF);
break;
case "g":
g = ZoMathTools.randomBetween(0, 0xFF);
break;
case "b":
b = ZoMathTools.randomBetween(0, 0xFF);
break;
};
alpha = ZoMathTools.threshold(0, 0xFF, alpha);
return (new ColorTransform(0, 0, 0, 0, r, g, b, alpha).color);
}
public static function setSpriteColor(sprite:Sprite, color:uint):void{
var r:Number = ((color >> 16) & 0xFF);
var g:Number = ((color >> 8) & 0xFF);
var b:Number = (color & 0xFF);
sprite.transform.colorTransform = new ColorTransform(0, 0, 0, 0xFF, r, g, b, 0xFF);
}
public static function getPixelComponent(map:Bitmap, x:Number, y:Number, component:String):Number{
return (ZoColor.getComponentValue(map.bitmapData.getPixel32(x, y), "a"));
}
public static function getRandomGrayscale(alpha:Number):uint{
alpha = ZoMathTools.threshold(0, 0xFF, alpha);
var rand:Number = ZoMathTools.randomBetween(0, 0xFF);
return (new ColorTransform(0, 0, 0, 0, rand, rand, rand, alpha).color);
}
}
}//package zomg
Section 51
//ZoCursor (zomg.ZoCursor)
package zomg {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.ui.*;
public class ZoCursor extends ZoSprite {
public var left:Boolean;// = false
protected var _state:uint;
protected var s:Stage;
private var sheet_cursor:Class;
public static var BUSY:uint = 3;
public static var NO:uint = 2;
public static var OVER:uint = 1;
public static var POINT:uint = 4;
public static var IDLE:uint = 0;
public function ZoCursor(s:Stage, listenClick:Boolean=false, bmp:Bitmap=null, sizeOfPointer:Point=null){
var img:Bitmap;
sheet_cursor = ZoCursor_sheet_cursor;
name = "[ZoCursor]Cursor";
this.s = s;
var size:Point = new Point(32, 32);
if (bmp){
img = bmp;
size = sizeOfPointer;
};
super(img, size, new Point());
mouseEnabled = false;
mouseChildren = false;
if (symbol){
symbol.name = "Cursor Sheet";
symbol.addAnim("idle", size, 1, new Point());
};
if (bmp){
symbol.addAnim("over", size, 1, new Point(0, 1));
symbol.addAnim("no", size, 1, new Point(1, 0));
symbol.addAnim("busy", size, 1, new Point(1, 1));
symbol.addAnim("point", size, 1, new Point(0, 2));
};
setCursor();
if (listenClick){
s.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
s.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
};
addEventListener(Event.ENTER_FRAME, update);
if (symbol){
Mouse.hide();
};
}
public function get state():uint{
return (_state);
}
public function activate(flag:Boolean=false):void{
if (flag){
Mouse.hide();
} else {
Mouse.show();
};
symbol.visible = flag;
}
protected function update(e:Event):void{
x = s.mouseX;
y = s.mouseY;
}
public function reset():void{
left = false;
}
override public function get position():Point{
return (localToGlobal(new Point(0, 0)));
}
protected function mouseRelease(e:MouseEvent):void{
left = false;
}
public function setCursor(status:uint=0):void{
var anim:String = "idle";
switch (status){
case OVER:
anim = "over";
break;
case NO:
anim = "no";
break;
case BUSY:
anim = "busy";
break;
case POINT:
anim = "point";
break;
};
state = status;
if (symbol){
symbol.playAnim(anim);
};
}
public function set state(v:uint):void{
_state = v;
}
protected function mouseDown(e:MouseEvent):void{
left = true;
}
}
}//package zomg
Section 52
//ZoCursor_sheet_cursor (zomg.ZoCursor_sheet_cursor)
package zomg {
import mx.core.*;
public class ZoCursor_sheet_cursor extends BitmapAsset {
}
}//package zomg
Section 53
//ZoKey (zomg.ZoKey)
package zomg {
public class ZoKey {
protected var _name:String;
protected var _code:uint;
protected var _state:Boolean;
public function ZoKey(c:uint, n:String){
super();
this.code = c;
this.name = n;
this.state = false;
}
public function set state(v:Boolean):void{
_state = v;
}
public function get name():String{
return (_name);
}
public function get code():uint{
return (_code);
}
public function get state():Boolean{
return (_state);
}
public function set name(v:String):void{
_name = v;
}
public function set code(v:uint):void{
_code = v;
}
}
}//package zomg
Section 54
//ZoKeys (zomg.ZoKeys)
package zomg {
import flash.events.*;
import flash.display.*;
public class ZoKeys {
protected var owner:String;// = ""
protected var isActive:Boolean;
protected var _lastReleased:uint;
protected var _lastPressed:uint;
protected var keys:Array;
protected var s:Stage;
public function ZoKeys(s:Stage, k:Array, owner:String=""){
super();
this.s = s;
this.owner = owner;
keys = new Array(0xFF);
assign(k);
isActive = false;
toggleKeys(true);
}
public function getNameOfCode(keyCode:uint):String{
return (keys[keyCode].name);
}
public function active():Boolean{
return (isActive);
}
protected function clean():void{
var i:Number = 0;
while (i < keys.length) {
if (keys[i]){
keys[i].state = false;
};
i++;
};
}
public function getKeyStateByName(keyName:String):Boolean{
return (keys[getKeyId(keyName)].state);
}
public function get lastReleased():uint{
return (_lastReleased);
}
public function myKeyUp(e:KeyboardEvent):void{
if (keys[e.keyCode]){
keys[e.keyCode].state = false;
lastReleased = e.keyCode;
};
}
public function myKeyDown(e:KeyboardEvent):void{
if (keys[e.keyCode]){
keys[e.keyCode].state = true;
lastPressed = e.keyCode;
};
}
public function getKeyCodeOfName(keyName:String):uint{
return (keys[getKeyId(keyName)].code);
}
public function set lastPressed(v:uint):void{
_lastPressed = v;
}
protected function getKeyId(keyName:String):Number{
var i:Number = 0;
while (i < keys.length) {
if (keys[i]){
if (keys[i].name == keyName){
return (i);
};
};
i++;
};
return (-1);
}
public function getKeyStateByCode(keyCode:uint):Boolean{
return (keys[keyCode].state);
}
protected function assign(k:Array):void{
var i:Number = 0;
while (i < k.length) {
keys[k[i].code] = k[i];
i++;
};
}
public function toggleKeys(active:Boolean):void{
if (((!(isActive)) && (active))){
s.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
s.addEventListener(KeyboardEvent.KEY_UP, myKeyUp);
} else {
if (((isActive) && (!(active)))){
s.removeEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
s.removeEventListener(KeyboardEvent.KEY_UP, myKeyUp);
clean();
};
};
isActive = active;
}
public function get lastPressed():uint{
return (_lastPressed);
}
public function set lastReleased(v:uint):void{
_lastReleased = v;
}
}
}//package zomg
Section 55
//ZoObject (zomg.ZoObject)
package zomg {
import flash.geom.*;
import flash.display.*;
import zomg.tools.*;
public class ZoObject extends Sprite {
protected var _direction:Point;
protected var _infrustrum:Boolean;// = false
protected var _position:Point;
protected var _active:Boolean;// = true
public function ZoObject(){
_position = new Point();
_direction = new Point();
super();
}
public function get active():Boolean{
return (_active);
}
public function inFront(obj:Object, wideangle:Number):Boolean{
var pt:Point = ZoMathTools.getDirectionVec(position, new Point(obj.x, obj.y));
var angle:Number = ZoMathTools.getVectorAngle(direction);
if (ZoMathTools.isNearValue(angle, ZoMathTools.getVectorAngle(pt), wideangle)){
return (true);
};
return (false);
}
public function set active(v:Boolean):void{
_active = v;
}
public function get mySize():Point{
return (new Point(width, height));
}
public function isInFrustrum():Boolean{
infrustrum = true;
var pos:Point = localToGlobal(new Point());
if (stage){
if ((((pos.x < -100)) || ((pos.x > (stage.stageWidth + 100))))){
infrustrum = false;
} else {
if ((((pos.y < -100)) || ((pos.y > (stage.stageHeight + 100))))){
infrustrum = false;
};
};
};
return (infrustrum);
}
public function set infrustrum(v:Boolean):void{
_infrustrum = v;
}
public function set position(v:Point):void{
_position = v;
x = v.x;
y = v.y;
}
public function getLocalDir():Point{
var me:Point = new Point(0, 0);
var forward:Point = localToGlobal(direction);
var diff:Point = new Point(direction.x, (forward.y - me.y));
return (ZoMathTools.normalize(diff));
}
public function getRealDirection():Point{
var rot:Number = 0;
if (rotation > 0){
rot = (360 - rotation);
};
rot = -(rotation);
return (new Point(Math.cos(ZoMathTools.degreeToRadian(rot)), Math.sin(ZoMathTools.degreeToRadian(rot))));
}
public function getTowardObjDir(aim:Object):Point{
var forward:Point = new Point(aim.x, aim.y);
var diff:Point = new Point((forward.x - x), (forward.y - y));
return (ZoMathTools.normalize(diff));
}
public function getTowardVecDir(aimPos:Point):Point{
var diff:Point = new Point((aimPos.x - x), (aimPos.y - y));
return (ZoMathTools.normalize(diff));
}
public function get position():Point{
_position = new Point(x, y);
return (_position);
}
public function get infrustrum():Boolean{
return (_infrustrum);
}
public function getTheRadius():Number{
return ((scaleX * (width / 2)));
}
public function getTowardMouseDir():Point{
var me:Point = localToGlobal(new Point(0, 0));
var forward:Point = localToGlobal(new Point(mouseX, mouseY));
var diff:Point = new Point((forward.x - me.x), (forward.y - me.y));
return (ZoMathTools.normalize(diff));
}
public function toggleActive():Boolean{
if (active){
visible = (active = false);
} else {
visible = (active = true);
};
return (active);
}
public function set direction(v:Point):void{
_direction = v;
rotation = ZoMathTools.dirRotation(new Point(), v);
}
public function get direction():Point{
var rot:Number = rotation;
_direction = new Point(Math.cos(ZoMathTools.degreeToRadian(rotation)), Math.sin(ZoMathTools.degreeToRadian(rotation)));
return (_direction);
}
}
}//package zomg
Section 56
//ZoPreloader (zomg.ZoPreloader)
package zomg {
import flash.events.*;
import flash.display.*;
import flash.text.*;
import flash.geom.*;
import flash.utils.*;
import zomg.gui.*;
public class ZoPreloader {
public var container:Sprite;
public var par:MovieClip;
protected var done:Boolean;// = false
public var tf:TextField;
public var tfpercent:TextField;
public var lb:ZoLoadBar;
protected var finalSize:Number;// = 0
protected var classToLoad:String;
public function ZoPreloader(parent:MovieClip, className:String="Main"):void{
tf = ZoGUI.getStdTextField(new Point(300, 20), "", {size:10, color:0xAAAAAA});
tfpercent = ZoGUI.getStdTextField(new Point(50, 20), "", {size:10, color:0xAAAAAA});
super();
container = new Sprite();
classToLoad = className;
par = parent;
var url:String = parent.loaderInfo.loaderURL;
parent.addEventListener(Event.ENTER_FRAME, checkFrame);
parent.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
var lbSize:Point = new Point(60, 10);
lb = new ZoLoadBar(lbSize);
lb.x = ((parent.stage.stageWidth / 2) - (lbSize.x / 2));
lb.y = ((parent.stage.stageHeight / 2) - (lbSize.y / 2));
tfpercent.text = "0%";
tfpercent.x = ((lb.x + lbSize.x) + 3);
tfpercent.y = (lb.y - (lbSize.y / 4));
tf.x = lb.x;
tf.y = (lb.y + 20);
container.addChild(lb);
container.addChild(tf);
container.addChild(tfpercent);
parent.addChild(container);
}
private function checkFrame(e:Event):void{
if (par.currentFrame == par.totalFrames){
par.removeEventListener(Event.ENTER_FRAME, checkFrame);
startup();
};
}
private function progress(e:ProgressEvent):void{
lb.current = int(((e.bytesLoaded / e.bytesTotal) * 100));
finalSize = e.bytesTotal;
tf.text = ((e.bytesLoaded + " / ") + e.bytesTotal);
tfpercent.text = (lb.current + " %");
trace(("ZoPreloader > current load:" + tf.text));
}
public function isDone():Boolean{
return (done);
}
private function startup():void{
par.stop();
par.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
var mainClass:Class = (getDefinitionByName(classToLoad) as Class);
par.addChild((new (mainClass) as Sprite));
container.removeChild(lb);
container.removeChild(tf);
container.removeChild(tfpercent);
par.removeChild(container);
trace("ZoPreloader > End of load");
done = true;
}
}
}//package zomg
Section 57
//ZoSheet (zomg.ZoSheet)
package zomg {
import flash.geom.*;
import flash.display.*;
public class ZoSheet extends Sprite {
protected var sFlip:Boolean;// = false
protected var anims:Array;
protected var currentLoop:uint;// = 0
protected var zeroPoint:Point;
public var pos:Number;// = 0
protected var sh:BitmapData;
protected var loop:uint;// = 0
protected var _currentAnim:String;// = ""
protected var timerAnim:Number;// = 0
public var useAnim:Boolean;// = true
protected var current:Bitmap;
protected var animSpeed:Number;// = 0
public function ZoSheet(img:Bitmap, size:Point, offset:Point=null, rotate:Number=0){
zeroPoint = new Point();
super();
if (!offset){
offset = new Point();
};
sh = img.bitmapData;
anims = new Array();
current = new Bitmap(new BitmapData(size.x, size.y, true, 0));
current.x = -(((size.x / 2) + offset.x));
current.y = -(((size.y / 2) + offset.y));
addChild(current);
current.rotation = rotate;
}
public function update():void{
var ind:Number = hasAnim(_currentAnim);
var loopDone:Boolean;
if (useAnim){
if (timerAnim == 0){
if ((((currentLoop < loop)) || ((loop == 0)))){
if (currentAnim.length > 1){
if (ind > -1){
if (anims[ind].length > 0){
pos = (pos + anims[ind].dir);
if (anims[ind].backForth){
if ((((((anims[ind].dir < 0)) && ((pos <= 0)))) && (anims[ind].backForth))){
anims[ind].dir = (anims[ind].dir * -1);
loopDone = true;
} else {
if ((((anims[ind].dir > 0)) && ((pos >= anims[ind].length)))){
if (anims[ind].backForth){
anims[ind].dir = (anims[ind].dir * -1);
} else {
pos = anims[ind].colInit;
};
};
};
} else {
if (anims[ind].backWard){
if (pos <= 0){
pos = anims[ind].length;
loopDone = true;
};
} else {
if (pos >= anims[ind].length){
pos = anims[ind].colInit;
loopDone = true;
};
};
};
if (((loopDone) && (!((loop == 0))))){
if (loop > 0){
currentLoop++;
};
if (loop == currentLoop){
if (anims[ind].backWard){
pos = 0;
} else {
pos = anims[ind].length;
};
};
};
setImage(currentAnim, pos);
};
} else {
trace(("ZoSheet >> no anim with name : " + currentAnim));
};
if (sFlip){
this.scaleX = -1;
};
} else {
trace("ZoSheet >> no anim asked");
};
};
};
};
if (anims[ind].speed > 0){
if (timerAnim < anims[ind].speed){
timerAnim++;
} else {
timerAnim = 0;
};
};
}
public function switchSheet(img:Bitmap):void{
sh = img.bitmapData;
}
public function addAnim(name:String, size:Point, length:Number, initPos:Point, animSpeed:uint=30, backForth:Boolean=false, backWard:Boolean=false):void{
var obj:Object = new Object();
obj["name"] = name;
obj["rowInit"] = initPos.x;
obj["colInit"] = initPos.y;
obj["length"] = (length - 1);
obj["width"] = size.x;
obj["height"] = size.y;
obj["speed"] = animSpeed;
obj["backForth"] = backForth;
obj["backWard"] = backWard;
obj["dir"] = 1;
anims.push(obj);
}
protected function setImage(name:String, currentPos:Number):void{
var upLeft:Point;
var coord:Rectangle;
var info:Object = getAnimParams(name);
current.bitmapData = new BitmapData(info.width, info.height);
if (info){
upLeft = new Point(((info.colInit + currentPos) * info.width), (info.rowInit * info.height));
coord = new Rectangle(upLeft.x, upLeft.y, info.width, info.height);
current.bitmapData.copyPixels(sh, coord, zeroPoint);
};
}
protected function hasAnim(name:String):Number{
var i:Number = 0;
while (i < anims.length) {
if (anims[i].name == name){
return (i);
};
i++;
};
return (-1);
}
public function set currentAnim(v:String):void{
_currentAnim = v;
}
public function getInfos():void{
var ind:Number = hasAnim(currentAnim);
trace(((((((((((("anim:" + currentAnim) + " | pos:(") + getAnimParams(currentAnim).rowInit) + ",") + pos) + ") - length:") + anims[ind].length) + " - current/loop:") + currentLoop) + "/") + loop));
}
public function playAnimId(ind:uint, loop:uint=0, flip:Boolean=false):Boolean{
if (anims[ind]){
currentAnim = anims[ind].name;
sFlip = flip;
pos = -1;
currentLoop = 0;
this.loop = loop;
if (anims[ind].backWard){
anims[ind].dir = -1;
pos = anims[ind].length;
};
if (anims[ind].length == 0){
setImage(currentAnim, 0);
} else {
update();
};
return (true);
};
return (false);
}
public function hasFinishedPlaying(name:String):Boolean{
var ind:Number;
if (name == currentAnim){
if (loop > 0){
ind = hasAnim(currentAnim);
if (currentLoop == loop){
return (true);
};
};
};
return (false);
}
public function playAnim(name:String, loop:uint=0, flip:Boolean=false):Boolean{
var i:Number = 0;
while (i < anims.length) {
if (anims[i].name == name){
return (playAnimId(i, loop, flip));
};
i++;
};
return (false);
}
public function getAnimParams(name:String):Object{
var anim:Object;
var i:Number = 0;
while (i < anims.length) {
if (anims[i].name == name){
return (anims[i]);
};
i++;
};
return (null);
}
public function get currentAnim():String{
return (_currentAnim);
}
public function currentAnimLength():Number{
return (anims[hasAnim(currentAnim)].length);
}
}
}//package zomg
Section 58
//ZoSprite (zomg.ZoSprite)
package zomg {
import flash.geom.*;
import flash.display.*;
import zomg.tools.*;
public class ZoSprite extends ZoObject {
public var size:Point;
public var symbol:ZoSheet;
protected var useSheet:Boolean;// = true
public function ZoSprite(sheet:Bitmap=null, objSize:Point=null, initPos:Point=null, offset:Point=null, rotation:Number=0, singleImage:Boolean=false){
super();
if (initPos){
position = initPos;
} else {
position = new Point();
};
if (objSize){
size = objSize;
} else {
size = new Point(0, 0);
};
if (sheet){
symbol = new ZoSheet(sheet, objSize, offset, rotation);
symbol.name = (((((("ZoSheet_spritesheet - " + this) + " - ") + sheet) + " (") + position) + ")");
addChild(symbol);
sheet.x = (-(sheet.width) / 2);
sheet.y = (-(sheet.height) / 2);
if (singleImage){
symbol.addAnim("idle", size, 1, new Point());
symbol.playAnim("idle");
};
} else {
useSheet = false;
};
}
protected function symbolLookAtPoint(pt:Point):void{
symbol.rotation = ZoMathTools.dirRotation(new Point(this.x, this.y), new Point(pt.x, pt.y));
}
public function getCirclePoints(percSize:Number=0.5, n:Number=10):Array{
var theta:Number;
var pointOnCircle:Point;
var alpha:Number = ((Math.PI * 2) / n);
var points:Array = new Array((n + 1));
var radius:Number = (size.x * percSize);
points[0] = new Point(0, 0);
var i:int;
while (i++ < n) {
theta = (alpha * i);
pointOnCircle = new Point((Math.cos(theta) * radius), (Math.sin(theta) * radius));
points[i] = pointOnCircle;
};
return (points);
}
protected function symbolLookAt(obj:Sprite):void{
symbol.rotation = ZoMathTools.dirRotation(new Point(this.x, this.y), new Point(obj.x, obj.y));
}
protected function lookAt(obj:Sprite):void{
rotation = ZoMathTools.dirRotation(new Point(this.x, this.y), new Point(obj.x, obj.y));
}
public function getSizeRect():Rectangle{
return (new Rectangle(0, 0, size.x, size.y));
}
public function getRectPoints():Array{
return (new Array(new Point(this.x, this.y), new Point((this.x - (size.x / 2)), (this.y - (size.y / 2))), new Point((this.x + (size.x / 2)), (this.y - (size.y / 2))), new Point((this.x - (size.x / 2)), (this.y + (size.y / 2))), new Point((this.x + (size.x / 2)), (this.y + (size.y / 2)))));
}
}
}//package zomg
Section 59
//Background (Background)
package {
import flash.geom.*;
import flash.display.*;
import zomg.*;
import zomg.tools.*;
public class Background extends Sprite {
protected var paralax:Sprite;
protected var max:int;// = 1000
protected var move:Boolean;// = false
protected var _useStars:Boolean;// = true
public static var sheet_stars:Class = Background_sheet_stars;
public static var zoneColor:Array = new Array(7517873, 8089524, 15955815, 15911027, 8762994, 4612833);
protected static var speedMin:Number = 0.01;
protected static var speedMax:Number = 0.05;
public function Background(nb:int=1){
paralax = new Sprite();
super();
x = -200;
y = -200;
needMore(paralax, nb);
addChild(paralax);
visible = false;
}
public function countStars():int{
var res:int = paralax.numChildren;
return (res);
}
protected function needMore(paralax:Sprite, nb:int=1):void{
var img:Bitmap;
var i:uint;
i = 0;
while (i < nb) {
img = ZoColor.getImageFromSheet(new sheet_stars(), new Point(16, 16), new Point(0, ZoMathTools.randomBetween(0, 2, true)));
img.alpha = 0.4;
paralax.addChild(img);
i++;
};
}
public function clear():Boolean{
while (paralax.numChildren) {
paralax.removeChildAt(0);
};
removeChild(paralax);
return (true);
}
public function init(bgColorZone:int=0, move:Boolean=false):void{
var i:uint;
var num:int;
this.move = move;
Global.g.bgColor.switchColor(Background.zoneColor[bgColorZone]);
if (useStars){
num = 200;
if (num > max){
num = max;
};
if (paralax.numChildren < num){
needMore(paralax, (num - paralax.numChildren));
};
i = 0;
while (i < paralax.numChildren) {
newPos(paralax.getChildAt(i));
i++;
};
};
visible = true;
}
protected function newPos(obj:DisplayObject):void{
var size:Point = Global.g.appSize.add(new Point(400, 400));
obj.x = ZoMathTools.randomBetween(0, size.x);
obj.y = ZoMathTools.randomBetween(0, size.y);
}
public function motion(move:Point):void{
var pos:Point;
if (this.move){
pos = new Point((paralax.x + (-(move.x) / 20)), (paralax.y + (-(move.y) / 15)));
paralax.x = pos.x;
paralax.y = pos.y;
};
}
public function get useStars():Boolean{
return (_useStars);
}
public function set useStars(v:Boolean):void{
_useStars = v;
visible = v;
}
public function removeStars(flag:Boolean=false):void{
paralax.visible = flag;
}
}
}//package
Section 60
//Background_sheet_stars (Background_sheet_stars)
package {
import mx.core.*;
public class Background_sheet_stars extends BitmapAsset {
}
}//package
Section 61
//Border (Border)
package {
import flash.geom.*;
import flash.display.*;
import zomg.tools.*;
public class Border extends Sprite {
protected var timer:int;// = 0
protected var theHeight:Number;// = 0
protected var dir:int;// = 1
protected var alphaBound:Point;
protected var bottomright:Sprite;
protected var theWidth:Number;// = 0
protected var right:Sprite;
protected var gap:Number;// = 1500
protected var left:Sprite;
protected var aimtimer:int;// = 15
protected var pt_topleft:Point;
protected var topleft:Sprite;
protected var pt_bottomright:Point;
protected var topright:Sprite;
protected var bottom:Sprite;
protected var top:Sprite;
protected var bottomleft:Sprite;
public function Border(){
topleft = new Sprite();
top = new Sprite();
topright = new Sprite();
left = new Sprite();
right = new Sprite();
bottomleft = new Sprite();
bottom = new Sprite();
bottomright = new Sprite();
alphaBound = new Point(0.2, 0.5);
super();
addChild(topleft);
addChild(top);
addChild(topright);
addChild(left);
addChild(right);
addChild(bottomleft);
addChild(bottom);
addChild(bottomright);
}
public function update():void{
if (dir == 1){
if (timer < aimtimer){
timer = (timer + dir);
} else {
dir = (dir * -1);
};
} else {
if (timer > 0){
timer = (timer + dir);
} else {
dir = (dir * -1);
};
};
alpha = ZoMathTools.linearTransform(new Point(0, aimtimer), alphaBound, timer);
}
public function init(topleft:Point, bottomright:Point):void{
pt_topleft = topleft;
pt_bottomright = bottomright;
theWidth = (bottomright.x - topleft.x);
theHeight = (bottomright.y - topleft.y);
drawZones();
}
protected function drawZone(s:Sprite, top:Point, bottom:Point):Sprite{
s.graphics.clear();
s.graphics.beginFill(0xFFFFFF);
s.graphics.drawRect(top.x, top.y, (bottom.x - top.x), (bottom.y - top.y));
s.graphics.endFill();
return (s);
}
protected function drawZones():void{
drawZone(top, new Point((pt_topleft.x - gap), (pt_topleft.y - gap)), new Point((pt_bottomright.x + gap), pt_topleft.y));
drawZone(left, new Point((pt_topleft.x - gap), pt_topleft.y), new Point(pt_topleft.x, pt_bottomright.y));
drawZone(right, new Point(pt_bottomright.x, pt_topleft.y), new Point((pt_bottomright.x + gap), pt_bottomright.y));
drawZone(bottom, new Point((pt_topleft.x - gap), pt_bottomright.y), new Point((pt_bottomright.x + gap), (pt_bottomright.y + gap)));
}
}
}//package
Section 62
//Btn_logo (Btn_logo)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import api.*;
public class Btn_logo extends Sprite {
public static var img:Class = Btn_logo_img;
public static var img2:Class = Btn_logo_img2;
public function Btn_logo(parent:Sprite, initPos:Point, white:Boolean=false):void{
super();
name = "BTNLOGO";
if (white){
addChild(new img2());
} else {
addChild(new img());
};
parent.addChild(this);
x = initPos.x;
y = initPos.y;
buttonMode = true;
addEventListener(MouseEvent.CLICK, tracking);
addEventListener(MouseEvent.MOUSE_OVER, over);
addEventListener(MouseEvent.MOUSE_OUT, out);
}
protected function over(e:MouseEvent):void{
Global.mouse.activate(false);
}
protected function out(e:MouseEvent):void{
Global.mouse.activate(true);
}
protected function tracking(e:MouseEvent):void{
MochiBot.trackUrl(this, "5ee274a2", "http://www.ninjakiwi.com/");
}
}
}//package
Section 63
//Btn_logo_img (Btn_logo_img)
package {
import mx.core.*;
public class Btn_logo_img extends BitmapAsset {
}
}//package
Section 64
//Btn_logo_img2 (Btn_logo_img2)
package {
import mx.core.*;
public class Btn_logo_img2 extends BitmapAsset {
}
}//package
Section 65
//Collectable (Collectable)
package {
import flash.geom.*;
import flash.display.*;
import zomg.sound.*;
import zomg.*;
import zomg.tools.*;
public class Collectable extends ZoSprite {
protected var goToExit:Boolean;// = false
protected var inExit:Boolean;// = false
protected var initPos:Point;
public var params:Object;
protected var speed:Number;// = 8.5
protected var l:LevelManager;
protected var p:Player;
public var value:Number;// = 1
public var type:uint;
public static var CASH:uint = 0;
public static var KEY:uint = 1;
public static var sheet_cash:Class = Collectable_sheet_cash;
public static var sheet_key:Class = Collectable_sheet_key;
public function Collectable(type:uint, initPos:Point, plyr:Player=null, lvl:LevelManager=null){
var bmp:Bitmap;
var thesize:Point;
name = ("COLLECTABLE " + initPos);
if (plyr){
p = plyr;
};
if (lvl){
l = lvl;
};
this.type = type;
this.initPos = initPos;
var simplesheet:Boolean;
switch (type){
case CASH:
bmp = new sheet_cash();
thesize = new Point(13, 13);
simplesheet = false;
break;
case KEY:
bmp = new sheet_key();
thesize = new Point(25, 13);
simplesheet = false;
break;
};
super(bmp, thesize, initPos, new Point(), 0, simplesheet);
switch (type){
case CASH:
symbol.addAnim("idle", new Point(13, 13), 8, new Point(), 10);
symbol.addAnim("taken", new Point(13, 13), 7, new Point(1, 0), 4);
break;
default:
symbol.addAnim("idle", new Point(25, 13), 18, new Point(), 5);
symbol.addAnim("onMove", new Point(25, 13), 18, new Point(1, 0), 5);
break;
};
reset();
}
protected function collect():void{
active = false;
switch (type){
case KEY:
ZoSoundEngine.getSound("collect_key").playSound();
goToExit = true;
symbol.playAnim("onMove");
break;
case CASH:
ZoSoundEngine.getSound("collect").playSound();
symbol.playAnim("taken", 1);
Global.gui.bumpCash();
break;
};
Global.gui.updateGUI();
}
public function reset():void{
symbol.playAnim("idle");
position = initPos;
rotation = 0;
active = true;
visible = true;
if (type == KEY){
goToExit = false;
inExit = false;
};
if (Global.gui){
Global.gui.updateGUI();
};
}
public function update():void{
isInFrustrum();
if (((active) && (infrustrum))){
if (p){
if (p.isAlive()){
if (ZoMathTools.distance(new Point(x, y), new Point(p.x, p.y)) < (p.collectableZone + 5)){
collect();
};
};
};
} else {
switch (type){
case KEY:
if (((goToExit) && (!(inExit)))){
if (ZoMathTools.distance(position, l.endpos) < 10){
goToExit = false;
visible = false;
inExit = true;
Global.gui.updateGUI();
} else {
position = ZoMathTools.destinationPoint(position, ZoMathTools.getDirectionVec(position, l.endpos), speed);
};
};
break;
case CASH:
if (symbol.currentAnim == "taken"){
if (symbol.hasFinishedPlaying("taken")){
visible = false;
Global.gui.updateGUI();
};
};
break;
};
};
if (infrustrum){
symbol.update();
};
}
public function isDone():Boolean{
switch (type){
case KEY:
if (((!(active)) && (!(visible)))){
return (true);
};
break;
case CASH:
if (!active){
return (true);
};
break;
};
return (false);
}
public function isTaken():Boolean{
if (!active){
return (true);
};
return (false);
}
public static function getIcon(what:String="cash"):Bitmap{
switch (what){
case "cash":
return (ZoColor.getImageFromSheet(new sheet_cash(), new Point(13, 13)));
case "key":
return (ZoColor.getImageFromSheet(new sheet_key(), new Point(25, 13)));
};
return (null);
}
}
}//package
Section 66
//Collectable_sheet_cash (Collectable_sheet_cash)
package {
import mx.core.*;
public class Collectable_sheet_cash extends BitmapAsset {
}
}//package
Section 67
//Collectable_sheet_key (Collectable_sheet_key)
package {
import mx.core.*;
public class Collectable_sheet_key extends BitmapAsset {
}
}//package
Section 68
//Collisionable (Collisionable)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import zomg.sound.*;
import zomg.*;
import zomg.tools.*;
import zomg.gui.*;
public class Collisionable extends ZoSprite {
protected var sunGrowSpeed:Number;// = 0
private var editor_end:Class;
public var mouseActive:Boolean;// = false
private var sheet_p45:Class;
private var editor_start:Class;
private var sheet_sun_off:Class;
private var sheet_p320:Class;
public var guitf_collec:TextField;
protected var initPos:Point;
protected var light:ZoSprite;
protected var lvl_lock:Sprite;
protected var ring:ZoSprite;
protected var lvl_score:Sprite;
private var sheet_p170:Class;
protected var halo:Sprite;
private var sheet_exp:Class;
public var type:uint;// = 0
protected var sunGrowSpeedMax:Number;// = 1.8
protected var speed:Number;// = 0
private var sheet_p60:Class;
private var editor_bottom:Class;
protected var alphaDir:Number;// = -0.03
private var sheet_gate_halo:Class;
public var planetRadius:Number;// = 0
protected var star:ZoSprite;
protected var sunOffSize:Point;
private var sheet_p70:Class;
protected var sunSize:Number;
protected var lvl_completed:Sprite;
protected var _need:int;// = 0
private var sheet_cadenas:Class;
private var sheet_start:Class;
private var editor_top:Class;
public var params:XMLList;
private var sheet_p80:Class;
private var sheet_logo:Class;
protected var lvl_desc:Sprite;
protected var _sunLight:Number;// = 0
protected var guitf_lvlNum:TextField;
protected var radius:Number;// = 0
private var sheet_p120:Class;
protected var sunGrow:Number;// = 0
private var sheet_p365:Class;
protected var _gate:int;// = -1
private var sheet_gate:Class;
private var sheet_p10:Class;
protected var lvl_lvlName:TextField;
protected var owner:Object;
protected var sunGrowStepRef:Number;// = 0.15
protected var sunUnGrow:Number;// = 0
protected var disappear:Boolean;// = false
protected var lvl_score_tf:TextField;
private var sheet_p250:Class;
private var sheet_sun_200_on:Class;
private var sheet_debug_red:Class;
protected var sunLightMin:Number;// = 0
private var sheet_sun_45_on:Class;
private var sheet_p20:Class;
protected var angle:Number;// = 0
public var halfSize:Point;
private var sheet_exp_end:Class;
protected var explode:Sprite;
private var sheet_p145:Class;
protected var alphaIntv:Point;
protected var lvl_press:TextField;
private var sheet_sun_80_on:Class;
private var sheet_p30:Class;
protected var debugDot:Sprite;
public var lockLvl:int;// = 2
protected var sunOnSize:Point;
private var sheet_exit:Class;
public static var p320:uint = 11;
public static var p145:uint = 8;
public static var gatetype:uint = 105;
public static var p70:uint = 5;
public static var sun:uint = 15;
public static var p30:uint = 2;
public static var p10:uint = 0;
public static var top:uint = 103;
public static var start:uint = 100;
public static var p250:uint = 10;
public static var p170:uint = 9;
public static var p365:uint = 12;
public static var logotype:uint = 106;
public static var p80:uint = 6;
public static var p60:uint = 4;
public static var bottom:uint = 104;
public static var cp:uint = 102;
public static var p20:uint = 1;
public static var p45:uint = 3;
public static var end:uint = 101;
public static var p120:uint = 7;
public function Collisionable(type:uint, initPos:Point, xm:XMLList=null, inEditor:Boolean=false, owner:Object=null){
var img:Bitmap;
var _local13:int;
var sheet:Bitmap;
sheet_p10 = Collisionable_sheet_p10;
sheet_p20 = Collisionable_sheet_p20;
sheet_p30 = Collisionable_sheet_p30;
sheet_p45 = Collisionable_sheet_p45;
sheet_p60 = Collisionable_sheet_p60;
sheet_p70 = Collisionable_sheet_p70;
sheet_p80 = Collisionable_sheet_p80;
sheet_p120 = Collisionable_sheet_p120;
sheet_p145 = Collisionable_sheet_p145;
sheet_p170 = Collisionable_sheet_p170;
sheet_p250 = Collisionable_sheet_p250;
sheet_p320 = Collisionable_sheet_p320;
sheet_p365 = Collisionable_sheet_p365;
sheet_exp = Collisionable_sheet_exp;
sheet_exp_end = Collisionable_sheet_exp_end;
sheet_start = Collisionable_sheet_start;
sheet_exit = Collisionable_sheet_exit;
sheet_debug_red = Collisionable_sheet_debug_red;
sheet_gate = Collisionable_sheet_gate;
sheet_gate_halo = Collisionable_sheet_gate_halo;
sheet_cadenas = Collisionable_sheet_cadenas;
sheet_logo = Collisionable_sheet_logo;
sheet_sun_off = Collisionable_sheet_sun_off;
sheet_sun_45_on = Collisionable_sheet_sun_45_on;
sheet_sun_80_on = Collisionable_sheet_sun_80_on;
sheet_sun_200_on = Collisionable_sheet_sun_200_on;
editor_start = Collisionable_editor_start;
editor_end = Collisionable_editor_end;
editor_top = Collisionable_editor_top;
editor_bottom = Collisionable_editor_bottom;
halfSize = new Point();
alphaIntv = new Point(0.5, 0.9);
if (!inEditor){
name = ("[COLL] " + Global.lvl.allAsset.length);
};
var thesize:Point = new Point();
var imgsize:Point = new Point();
var animNum:Point = new Point();
var color:int;
this.type = type;
this.initPos = initPos;
params = xm;
if (owner){
this.owner = owner;
};
switch (type){
case p10:
img = new sheet_p10();
thesize = new Point(10, 10);
imgsize = new Point(15, 15);
name = (name + " p10");
break;
case p20:
img = new sheet_p20();
thesize = new Point(20, 20);
imgsize = new Point(22, 22);
name = (name + " p20");
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 7)));
break;
case p30:
img = new sheet_p30();
thesize = new Point(30, 30);
imgsize = new Point(36, 36);
name = (name + " p30");
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 7)));
break;
case p45:
img = new sheet_p45();
thesize = new Point(45, 45);
imgsize = new Point(53, 53);
name = (name + " p45");
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 7)));
break;
case p60:
img = new sheet_p60();
thesize = new Point(60, 60);
imgsize = new Point(72, 72);
name = (name + " p60");
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 3)));
break;
case p70:
img = new sheet_p70();
thesize = new Point(70, 70);
imgsize = new Point(108, 108);
name = (name + " p70");
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 3)));
break;
case p80:
img = new sheet_p80();
thesize = new Point(80, 80);
imgsize = new Point(108, 108);
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 3)));
break;
case p120:
img = new sheet_p120();
thesize = new Point(120, 120);
imgsize = new Point(146, 146);
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 3)));
break;
case p145:
img = new sheet_p145();
thesize = new Point(145, 145);
imgsize = new Point(177, 177);
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 3)));
break;
case p170:
img = new sheet_p170();
thesize = new Point(170, 170);
imgsize = new Point(208, 208);
animNum = new Point(color, int(ZoMathTools.randomBetween(0, 3)));
break;
case p250:
img = new sheet_p250();
thesize = new Point(250, 250);
imgsize = new Point(290, 290);
break;
case p320:
img = new sheet_p320();
thesize = new Point(320, 320);
imgsize = new Point(360, 360);
break;
case p365:
img = new sheet_p365();
thesize = new Point(365, 365);
imgsize = new Point(405, 405);
break;
case start:
img = new sheet_start();
thesize = new Point(107, 113);
break;
case end:
img = new sheet_exit();
thesize = new Point(107, 113);
break;
case top:
img = new editor_top();
thesize = new Point(16, 16);
break;
case bottom:
img = new editor_bottom();
thesize = new Point(16, 16);
break;
case sun:
if (params.@size > 0){
sunSize = Number(params.@size);
img = new sheet_sun_off();
thesize = (sunOffSize = new Point(325, 325));
if (sunSize == 200){
sheet = new sheet_sun_200_on();
sunOnSize = new Point(325, 325);
} else {
if (sunSize == 80){
sheet = new sheet_sun_80_on();
sunOnSize = new Point(170, 170);
} else {
if (sunSize == 45){
sheet = new sheet_sun_45_on();
sunOnSize = new Point(117, 117);
};
};
};
light = new ZoSprite(sheet, sunOnSize, new Point());
light.symbol.addAnim("growing", sunOnSize, 1, new Point());
light.symbol.addAnim("ring", sunOnSize, 6, new Point(0, 1), 4);
light.symbol.playAnim("growing");
if (sunSize == 45){
sunGrow = sunGrowStepRef;
} else {
if (sunSize == 80){
sunGrow = (sunGrowStepRef * 0.5);
} else {
if (sunSize == 200){
sunGrow = (sunGrowStepRef * 0.3);
} else {
Global.console.addLine("ERROR > sun size not valid", "Colli");
};
};
};
} else {
trace(("Colli > sun error size " + name));
};
break;
case cp:
thesize = new Point(109, 110);
name = (name + " checkpoint");
break;
case gatetype:
halo = new Sprite();
_local13 = int(params.@zone);
img = ZoColor.getImageFromSheet(new sheet_gate_halo(), new Point(106, 111), new Point(0, _local13));
img.x = (-(img.width) / 2);
img.y = (-(img.height) / 2);
halo.addChild(img);
addChild(halo);
img = new sheet_gate();
thesize = new Point(51, 59);
name = (name + " [GATE]");
break;
case logotype:
img = new sheet_logo();
imgsize = new Point(318, 336);
break;
};
halfSize = new Point((thesize.x / 2), (thesize.y / 2));
if (type == gatetype){
planetRadius = (thesize.x / 1.4);
} else {
planetRadius = (thesize.x / 2);
};
if (imgsize.length == 0){
imgsize = thesize;
};
super(img, imgsize, initPos);
if (type == gatetype){
symbol.addAnim("idle", imgsize, 1, new Point(0, _local13));
symbol.addAnim("over", imgsize, 1, new Point(0, 6));
symbol.addAnim("lockover", imgsize, 1, new Point(0, 7));
symbol.addAnim("lock", imgsize, 1, new Point(0, 8));
} else {
if (type == start){
symbol.addAnim("idle", imgsize, 1, new Point(0, 17));
symbol.addAnim("open", imgsize, 17, new Point(), 4);
symbol.addAnim("close", imgsize, 17, new Point(), 4, false, true);
} else {
if (type == end){
symbol.addAnim("idle", imgsize, 1, new Point());
symbol.addAnim("open", imgsize, 10, new Point(0, 1), 4);
} else {
symbol.addAnim("idle", imgsize, 1, animNum);
};
};
};
symbol.playAnim("idle");
if (type == start){
active = false;
};
if (xm){
if ((((type == gatetype)) && (!(inEditor)))){
need = int(params.@need);
gate = int(params.@gate);
name = (name + (" gate #" + gate));
lvl_completed = new Sprite();
lvl_completed.addChild(ZoGUI.getStdTextField(new Point(130, 20), "COMPLETED", {font:"grotesque", embed:true, size:15, letterSpace:2, color:0, bold:true}));
lvl_completed.x = 40;
lvl_completed.y = 22;
addChild(lvl_completed);
lvl_desc = new Sprite();
lvl_desc.addChild(ZoGUI.getStdTextField(new Point(350, 25), String(Global.lvl.getLevelName(gate)).toUpperCase(), {font:"futura", embed:true, size:18, letterSpace:1, color:0xFFFFFF}));
lvl_desc.addChild(ZoGUI.getStdTextField(new Point(40, 25), "LEVEL", {font:"grotesque", embed:true, size:18, letterSpace:2, color:0xFFFFFF}, new Point(0, 18)));
lvl_lvlName = ZoGUI.getStdTextField(new Point(300, 25), String(params.@gate), {font:"futura", embed:true, letterSpace:2, size:18, color:0xFFFFFF}, new Point(40, 18));
lvl_desc.addChild(lvl_lvlName);
lvl_desc.x = lvl_completed.x;
lvl_desc.y = -20;
addChild(lvl_desc);
lvl_lock = new Sprite();
img = new sheet_cadenas();
img.y = 5;
lvl_lock.addChild(img);
lvl_lock.addChild(ZoGUI.getStdTextField(new Point(30, 20), (need + "x"), {font:"futura", embed:true, size:18, letterSpace:0, align:"center", color:0}, new Point(13, 0)));
img = Collectable.getIcon("cash");
img.x = (13 + 32);
img.y = 5;
lvl_lock.addChild(img);
lvl_lock.x = lvl_completed.x;
lvl_lock.y = lvl_completed.y;
addChild(lvl_lock);
lvl_score = new Sprite();
lvl_score_tf = ZoGUI.getStdTextField(new Point(54, 20), "0 / 20", {font:"futura", embed:true, size:15, color:0, align:"left"});
lvl_score.x = lvl_lock.x;
lvl_score.y = lvl_lock.y;
lvl_score.addChild(lvl_score_tf);
img = Collectable.getIcon("cash");
img.x = lvl_score_tf.width;
img.y = 3;
lvl_score.addChild(img);
addChild(lvl_score);
lvl_press = ZoGUI.getStdTextField(new Point(200, 100), "PRESS ENTER\nTO BUY", {font:"grotesque", embed:true, size:18, letterSpace:2, color:0xDDDDDD});
lvl_press.x = lvl_completed.x;
lvl_press.y = (lvl_completed.y + 22);
addChild(lvl_press);
setLocked();
};
radius = Number(params.@radius);
speed = Number(params.@speed);
if (params.@size > 0){
planetRadius = (Number(params.@size) / 2);
sunLight = int(params.@sun);
sunLightMin = int(params.@sun);
sunUnGrow = (-(sunGrow) * 0.5);
addChild(light);
symbol.scaleX = (symbol.scaleY = (sunSize / 200));
};
if (params.@explode > 0){
explode = new Sprite();
img = new sheet_exp();
img.x = (-(img.width) / 2);
img.y = (-(img.height) / 2);
explode.addChild(img);
explode.scaleX = (explode.scaleY = (thesize.x / 250));
symbol.addChild(explode);
star = new ZoSprite(new sheet_exp_end(), new Point(30, 30), new Point());
star.symbol.addAnim("idle", new Point(30, 30), 1, new Point());
star.symbol.addAnim("go", new Point(30, 30), 4, new Point(), 4);
addChild(star);
star.visible = false;
};
};
debugDot = new Sprite();
debugDot.addChild(new sheet_debug_red());
debugDot.addChild(ZoGUI.getStdTextField(new Point(100, 30), name, {size:8}));
addChild(debugDot);
toggleDebug(false);
}
public function isMouseOver():Boolean{
var pos:Point;
if (mouseActive){
pos = localToGlobal(new Point());
if (ZoMathTools.isBetween(Global.mouse.position.x, (pos.x - getRadius()), (pos.x + getRadius()))){
if (ZoMathTools.isBetween(Global.mouse.position.y, (pos.y - getRadius()), (pos.y + getRadius()))){
return (true);
};
};
};
return (false);
}
public function setLocked(unlock:Boolean=true, done:Boolean=false, highscore:int=0, max:int=0, over:Boolean=false):void{
lvl_desc.visible = true;
if (need <= 0){
unlock = true;
};
if (unlock){
lvl_press.text = "PRESS ENTER\nTO PLAY";
} else {
lvl_press.text = "PRESS ENTER\nTO BUY";
};
symbol.playAnim("idle");
if (over){
symbol.playAnim("over");
lvl_press.visible = true;
} else {
lvl_press.visible = false;
};
halo.visible = true;
if (!unlock){
lvl_lock.visible = true;
lvl_score.visible = (lvl_completed.visible = false);
if (over){
symbol.playAnim("lockover");
} else {
symbol.playAnim("lock");
};
} else {
if (highscore >= max){
lvl_completed.visible = true;
lvl_lock.visible = (lvl_score.visible = false);
} else {
if (highscore < max){
lvl_score.visible = true;
lvl_lock.visible = (lvl_completed.visible = false);
};
};
};
if (highscore < 0){
highscore = 0;
};
lvl_score_tf.text = ((highscore + " / ") + max);
}
public function isGate():Boolean{
if (gate >= 0){
return (true);
};
return (false);
}
public function isMoving():Boolean{
if (radius > 0){
return (true);
};
return (false);
}
public function isCP():Boolean{
if (type == cp){
return (true);
};
return (false);
}
public function colide(globalPosition:Point):Boolean{
if (ZoMathTools.distance(globalPosition, position) < halfSize.x){
return (true);
};
return (false);
}
public function get sunLight():Number{
return (_sunLight);
}
public function set need(v:int):void{
_need = v;
}
public function isSunOn():Boolean{
if (isSun()){
if (sunGrow >= 100){
return (true);
};
};
return (false);
}
public function set sunLight(v:Number):void{
_sunLight = v;
light.scaleX = (light.scaleY = (v / 100));
if (sunLight > 0){
light.visible = true;
} else {
light.visible = false;
};
}
public function isPlanet():Boolean{
if ((((((type == start)) || ((type == end)))) || ((type == cp)))){
return (false);
};
return (true);
}
public function lightSun():void{
if (isSun()){
light.visible = true;
sunLight = 100;
};
}
public function isExit():Boolean{
if (type == end){
return (true);
};
return (false);
}
protected function open(e:MouseEvent):void{
Global.lvl.gateOpen();
}
public function reset():void{
position = initPos;
angle = (rotation = 0);
active = (visible = true);
if (type == start){
active = false;
} else {
if (type == sun){
sunLight = int(params.@sun);
light.symbol.playAnim("growing");
sunGrowSpeed = 0;
} else {
if (explode){
disappear = false;
symbol.scaleX = (symbol.scaleY = 1);
star.visible = false;
};
};
};
isInFrustrum();
}
public function toggleDebug(flag:Boolean=false):void{
debugDot.visible = flag;
}
public function hasToDestroy():void{
if (params.@explode){
if (int(params.@explode) == 1){
ZoSoundEngine.getSound("planet_dis").playSound();
disappear = true;
};
};
}
public function getRadius():Number{
if (type == sun){
if (sunLight >= 100){
return ((planetRadius + (planetRadius * 0.3)));
};
};
return (planetRadius);
}
public function avatarTouch():Boolean{
var mysize:Number = getRadius();
var ar:Array = Global.p.getColisionPoints();
if (Global.p.comparePlanetLanded(this)){
return (true);
};
var i:int;
while (i < ar.length) {
if (ZoMathTools.distance(position, Global.p.position.add(ar[i])) <= mysize){
if (((!(Global.p.isInvincible())) && (!(Global.p.comparePlanetLanded(this, true))))){
return (true);
};
};
i++;
};
return (false);
}
public function set gate(v:int):void{
_gate = v;
}
public function get need():int{
return (_need);
}
public function update():void{
isInFrustrum();
var touch:Boolean;
if (active){
if (radius > 0){
angle = (angle + (speed / 100));
position = initPos.add(new Point((Math.cos(angle) * radius), (Math.sin(angle) * radius)));
};
if (infrustrum){
touch = avatarTouch();
if (type == sun){
if (sunLight < 100){
if (touch){
sunGrowSpeed = (sunGrowSpeed + sunGrow);
} else {
sunGrowSpeed = (sunGrowSpeed + sunUnGrow);
};
sunGrowSpeed = ZoMathTools.threshold(-(sunGrowSpeedMax), sunGrowSpeedMax, sunGrowSpeed);
if ((sunLight + sunGrowSpeed) > sunLightMin){
sunLight = (sunLight + sunGrowSpeed);
};
} else {
if (sunLight >= 100){
if (light.symbol.currentAnim == "growing"){
ZoSoundEngine.getSound("sun_explode").playSound();
light.symbol.playAnim("ring");
};
if (touch){
Global.p.killPlayer(0);
};
light.symbol.update();
};
};
};
if (Global.p.isFlying()){
if (touch){
if (type == cp){
Global.p.setMotion(this);
active = false;
} else {
if (type == end){
if (((Global.lvl.allKeyCollected) && (Global.lvl.hasExit()))){
Global.p.setMotion(this, true);
};
} else {
Global.p.stop(this);
};
};
};
};
if (isGate()){
if (Global.p.comparePlanetLanded(this, true)){
if (((((lvl_press.alpha + alphaDir) < alphaIntv.x)) || (((lvl_press.alpha + alphaDir) > alphaIntv.y)))){
alphaDir = (alphaDir * -1);
};
lvl_press.alpha = (lvl_press.alpha + alphaDir);
} else {
lvl_press.alpha = 1;
};
};
};
};
if (explode){
if (disappear){
if (symbol.scaleX <= 0){
if (!star.visible){
active = false;
symbol.scaleX = (symbol.scaleY = 0);
star.symbol.playAnim("go", 1);
star.visible = true;
} else {
if (star.symbol.hasFinishedPlaying("go")){
disappear = (visible = false);
} else {
star.symbol.update();
};
};
} else {
symbol.scaleX = (symbol.scaleX - 0.1);
symbol.scaleY = (symbol.scaleY - 0.1);
};
};
};
}
public function get gate():int{
return (_gate);
}
public function isSun():Boolean{
if (light){
return (true);
};
return (false);
}
public function getXML():XMLList{
params.@pos = ((owner.x + ",") + owner.y);
return (params);
}
public function clickable(flag:Boolean):void{
if (isGate()){
mouseActive = flag;
};
}
public static function getStandardXML(type:uint, pos:Point):XMLList{
return (new XMLList((((((("<collision type=\"" + type) + "\" pos=\"") + pos.x) + ",") + pos.y) + "\" />")));
}
}
}//package
Section 69
//Collisionable_editor_bottom (Collisionable_editor_bottom)
package {
import mx.core.*;
public class Collisionable_editor_bottom extends BitmapAsset {
}
}//package
Section 70
//Collisionable_editor_end (Collisionable_editor_end)
package {
import mx.core.*;
public class Collisionable_editor_end extends BitmapAsset {
}
}//package
Section 71
//Collisionable_editor_start (Collisionable_editor_start)
package {
import mx.core.*;
public class Collisionable_editor_start extends BitmapAsset {
}
}//package
Section 72
//Collisionable_editor_top (Collisionable_editor_top)
package {
import mx.core.*;
public class Collisionable_editor_top extends BitmapAsset {
}
}//package
Section 73
//Collisionable_sheet_cadenas (Collisionable_sheet_cadenas)
package {
import mx.core.*;
public class Collisionable_sheet_cadenas extends BitmapAsset {
}
}//package
Section 74
//Collisionable_sheet_debug_red (Collisionable_sheet_debug_red)
package {
import mx.core.*;
public class Collisionable_sheet_debug_red extends BitmapAsset {
}
}//package
Section 75
//Collisionable_sheet_exit (Collisionable_sheet_exit)
package {
import mx.core.*;
public class Collisionable_sheet_exit extends BitmapAsset {
}
}//package
Section 76
//Collisionable_sheet_exp (Collisionable_sheet_exp)
package {
import mx.core.*;
public class Collisionable_sheet_exp extends BitmapAsset {
}
}//package
Section 77
//Collisionable_sheet_exp_end (Collisionable_sheet_exp_end)
package {
import mx.core.*;
public class Collisionable_sheet_exp_end extends BitmapAsset {
}
}//package
Section 78
//Collisionable_sheet_gate (Collisionable_sheet_gate)
package {
import mx.core.*;
public class Collisionable_sheet_gate extends BitmapAsset {
}
}//package
Section 79
//Collisionable_sheet_gate_halo (Collisionable_sheet_gate_halo)
package {
import mx.core.*;
public class Collisionable_sheet_gate_halo extends BitmapAsset {
}
}//package
Section 80
//Collisionable_sheet_logo (Collisionable_sheet_logo)
package {
import mx.core.*;
public class Collisionable_sheet_logo extends BitmapAsset {
}
}//package
Section 81
//Collisionable_sheet_p10 (Collisionable_sheet_p10)
package {
import mx.core.*;
public class Collisionable_sheet_p10 extends BitmapAsset {
}
}//package
Section 82
//Collisionable_sheet_p120 (Collisionable_sheet_p120)
package {
import mx.core.*;
public class Collisionable_sheet_p120 extends BitmapAsset {
}
}//package
Section 83
//Collisionable_sheet_p145 (Collisionable_sheet_p145)
package {
import mx.core.*;
public class Collisionable_sheet_p145 extends BitmapAsset {
}
}//package
Section 84
//Collisionable_sheet_p170 (Collisionable_sheet_p170)
package {
import mx.core.*;
public class Collisionable_sheet_p170 extends BitmapAsset {
}
}//package
Section 85
//Collisionable_sheet_p20 (Collisionable_sheet_p20)
package {
import mx.core.*;
public class Collisionable_sheet_p20 extends BitmapAsset {
}
}//package
Section 86
//Collisionable_sheet_p250 (Collisionable_sheet_p250)
package {
import mx.core.*;
public class Collisionable_sheet_p250 extends BitmapAsset {
}
}//package
Section 87
//Collisionable_sheet_p30 (Collisionable_sheet_p30)
package {
import mx.core.*;
public class Collisionable_sheet_p30 extends BitmapAsset {
}
}//package
Section 88
//Collisionable_sheet_p320 (Collisionable_sheet_p320)
package {
import mx.core.*;
public class Collisionable_sheet_p320 extends BitmapAsset {
}
}//package
Section 89
//Collisionable_sheet_p365 (Collisionable_sheet_p365)
package {
import mx.core.*;
public class Collisionable_sheet_p365 extends BitmapAsset {
}
}//package
Section 90
//Collisionable_sheet_p45 (Collisionable_sheet_p45)
package {
import mx.core.*;
public class Collisionable_sheet_p45 extends BitmapAsset {
}
}//package
Section 91
//Collisionable_sheet_p60 (Collisionable_sheet_p60)
package {
import mx.core.*;
public class Collisionable_sheet_p60 extends BitmapAsset {
}
}//package
Section 92
//Collisionable_sheet_p70 (Collisionable_sheet_p70)
package {
import mx.core.*;
public class Collisionable_sheet_p70 extends BitmapAsset {
}
}//package
Section 93
//Collisionable_sheet_p80 (Collisionable_sheet_p80)
package {
import mx.core.*;
public class Collisionable_sheet_p80 extends BitmapAsset {
}
}//package
Section 94
//Collisionable_sheet_start (Collisionable_sheet_start)
package {
import mx.core.*;
public class Collisionable_sheet_start extends BitmapAsset {
}
}//package
Section 95
//Collisionable_sheet_sun_200_on (Collisionable_sheet_sun_200_on)
package {
import mx.core.*;
public class Collisionable_sheet_sun_200_on extends BitmapAsset {
}
}//package
Section 96
//Collisionable_sheet_sun_45_on (Collisionable_sheet_sun_45_on)
package {
import mx.core.*;
public class Collisionable_sheet_sun_45_on extends BitmapAsset {
}
}//package
Section 97
//Collisionable_sheet_sun_80_on (Collisionable_sheet_sun_80_on)
package {
import mx.core.*;
public class Collisionable_sheet_sun_80_on extends BitmapAsset {
}
}//package
Section 98
//Collisionable_sheet_sun_off (Collisionable_sheet_sun_off)
package {
import mx.core.*;
public class Collisionable_sheet_sun_off extends BitmapAsset {
}
}//package
Section 99
//EndScreen (EndScreen)
package {
import flash.events.*;
import flash.display.*;
public class EndScreen extends Sprite {
protected var aimTimer:int;// = 60
protected var timer:int;// = 0
public var screen:Class;
protected var screen1:Sprite;
public var showed:Boolean;// = false
public function EndScreen(){
screen = EndScreen_screen;
screen1 = new Sprite();
super();
addChild(new screen());
visible = false;
}
protected function update(e:Event=null):void{
if (timer < aimTimer){
timer++;
} else {
addEventListener(MouseEvent.MOUSE_UP, kill);
removeEventListener(Event.ENTER_FRAME, update);
};
}
public function init():void{
trace(("END > end screen ! " + showed));
if (!showed){
showed = true;
addEventListener(Event.ENTER_FRAME, update);
visible = true;
};
}
public function kill(e:MouseEvent=null):void{
visible = false;
removeEventListener(MouseEvent.MOUSE_UP, kill);
}
}
}//package
Section 100
//EndScreen_screen (EndScreen_screen)
package {
import mx.core.*;
public class EndScreen_screen extends BitmapAsset {
}
}//package
Section 101
//Enemy (Enemy)
package {
import flash.geom.*;
import flash.display.*;
import zomg.sound.*;
import zomg.*;
import zomg.tools.*;
public class Enemy extends ZoSprite {
protected var params:XMLList;
private var editor_turret:Class;
private var editor_tracker1:Class;
protected var dir:Point;
private var editor_escan:Class;
protected var setContinueFlying:Number;// = 0
protected var chasing:Boolean;// = false
protected var owner:Object;
protected var timerAim:Number;
private var editor_bar:Class;
protected var timer:Number;// = 0
protected var lifespan:Number;// = 0
protected var speed:Number;// = 0
public var type:int;// = 0
protected var grid:Sprite;
private var sheet_turret:Class;
protected var gridMask:Sprite;
protected var pos:Point;
private var sheet_tracker:Class;
protected var end:Point;
private var sheet_scan:Class;
private var sheet_bullet:Class;
protected var symbols:Array;
protected var distance:Number;// = 0
protected var myZone:int;// = 0
protected var endPos:Sprite;
protected var symb:Sprite;
public static var BULLET:int = 4;
public static var BAR:int = 1;
public static var TURRET:int = 3;
protected static var frequency:Number = 60;
public static var SCAN:int = 0;
public static var TRACKER:int = 2;
public function Enemy(type:uint, initPos:Point, values:XMLList=null, owner:Object=null, inEditor:Boolean=false){
var s:String;
var _local11:Point;
sheet_tracker = Enemy_sheet_tracker;
sheet_scan = Enemy_sheet_scan;
sheet_turret = Enemy_sheet_turret;
sheet_bullet = Enemy_sheet_bullet;
editor_bar = Enemy_editor_bar;
editor_tracker1 = Enemy_editor_tracker1;
editor_escan = Enemy_editor_escan;
editor_turret = Enemy_editor_turret;
dir = new Point();
endPos = new Sprite();
timerAim = frequency;
name = "ENEMY";
if (owner){
this.owner = owner;
};
this.type = type;
symbols = new Array();
var bmp:Bitmap;
var size:Point = new Point();
var simpleSheet:Boolean;
var op:String = "";
if (!inEditor){
setZone();
};
if (values){
pos = ZoTools.transformToPoint(values.@pos);
op = values.@op;
params = values;
};
if (op.length > 0){
s = "";
s = (s + (((("<enemy type=\"" + values.@type) + "\" pos=\"") + values.@pos) + "\""));
switch (type){
case TRACKER:
s = (s + ((" speed=\"" + 2) + "\" "));
s = (s + ((" zone=\"" + 50) + "\" "));
s = (s + ((" zoneactive=\"" + 100) + "\" "));
s = (s + ((" fixe=\"" + 1) + "\" "));
break;
case SCAN:
s = (s + ((" size=\"" + 30) + "\" "));
s = (s + ((" speed=\"" + 1) + "\" "));
s = (s + ((" dir=\"" + 1) + "\" "));
break;
case BAR:
s = (s + ((((" end=\"" + pos.x) + ",") + pos.y) + "\" "));
s = (s + ((" size=\"" + 30) + "\" "));
s = (s + ((" speed=\"" + 1) + "\" "));
s = (s + ((" nb=\"" + 1) + "\" "));
break;
case TURRET:
s = (s + ((" firefreq=\"" + 1) + "\" "));
s = (s + ((" rotate=\"" + 1) + "\" "));
s = (s + ((" bulletSpeed=\"" + 2) + "\" "));
s = (s + ((" bulletLife =\"" + 2) + "\" "));
break;
};
s = (s + "/>");
params = new XMLList(s);
};
if (!inEditor){
switch (type){
case SCAN:
createScan();
size.x = Number(params.@size);
simpleSheet = true;
setContinueFlying = 0.3;
break;
case BAR:
createBAR();
size.x = Number(params.@size);
simpleSheet = true;
break;
case TRACKER:
bmp = new sheet_tracker();
size = new Point(20, 20);
break;
case TURRET:
bmp = new sheet_turret();
size = new Point(49, 43);
simpleSheet = true;
break;
case BULLET:
name = (name + " BULLET");
bmp = new sheet_bullet();
size = new Point(25, 25);
simpleSheet = true;
setContinueFlying = 0.4;
visible = (active = false);
break;
};
} else {
switch (type){
case TRACKER:
bmp = new editor_tracker1();
size = new Point(20, 20);
break;
case SCAN:
bmp = new editor_escan();
size = new Point(20, 20);
break;
case BAR:
bmp = new editor_bar();
size = new Point(20, 20);
break;
case TURRET:
bmp = new editor_turret();
size = new Point(20, 20);
break;
};
simpleSheet = true;
};
super(bmp, size, initPos, new Point(), 0, simpleSheet);
if (type == BULLET){
active = false;
};
if (!inEditor){
switch (type){
case TRACKER:
symbol.addAnim("idle", size, 12, new Point(), 4);
symbol.addAnim("active", size, 12, new Point((myZone + 1), 0), 4);
symbol.playAnim("idle");
break;
case TURRET:
symbol.addAnim("prepare", size, 3, new Point(), 4);
symbol.addAnim("shoot", size, 5, new Point(1, 0), 4);
symbol.playAnim("prepare", 1);
break;
case BULLET:
symbol.addAnim("0", new Point(25, 25), 1, new Point(0, 0));
symbol.addAnim("1", new Point(25, 25), 1, new Point(0, 1));
symbol.addAnim("2", new Point(25, 25), 1, new Point(0, 2));
symbol.addAnim("3", new Point(25, 25), 1, new Point(0, 3));
symbol.addAnim("4", new Point(25, 25), 1, new Point(0, 4));
symbol.addAnim("5", new Point(25, 25), 1, new Point(0, 5));
};
} else {
switch (type){
case BAR:
endPos.graphics.lineStyle(3, 0xFF);
endPos.graphics.moveTo(-5, 0);
endPos.graphics.lineTo(5, 0);
endPos.graphics.moveTo(0, -5);
endPos.graphics.lineTo(0, 5);
addChild(endPos);
_local11 = ZoTools.transformToPoint(params.@end);
endPos.x = (_local11.x - owner.x);
endPos.y = (_local11.y - owner.y);
break;
};
};
}
protected function turretShot(initPos:Point, dir:Point, speed:Number=1, lifespan:Number=1):void{
Global.lvl.bManager.addElement(initPos, new XMLList((((((((("<params dir=\"" + dir.x) + ",") + dir.y) + "\" speed=\"") + speed) + "\" lifespan=\"") + lifespan) + "\"/>")));
symbol.playAnim("shoot", 1);
ZoSoundEngine.getSound("turret_shoot").playSound();
}
protected function createScan():void{
var s:Sprite = new Sprite();
s.addChild(ZoColor.getImageFromSheet(new sheet_scan(), new Point(34, 300), new Point(0, myZone)));
if (params.@dir > 0){
s.scaleX = 1;
} else {
s.scaleX = -1;
};
s.scaleY = (Number(params.@size) / 300);
symb = s;
symb.rotation = -90;
addChild(symb);
}
public function setBulletParams(initPos:Point, par:XMLList):void{
if (type == BULLET){
position = initPos;
params = par;
speed = Number(params.@speed);
dir = ZoTools.transformToPoint(params.@dir);
lifespan = Number(params.@lifespan);
if (lifespan > 5){
lifespan = 5;
};
active = true;
timer = 0;
setZone();
symbol.playAnim(("" + myZone));
};
}
public function setZone():void{
myZone = Global.lvl.currentZone;
}
public function colide(obj:Object):Boolean{
var p:Player = (obj as Player);
if (!p.isInvincible()){
if (type == SCAN){
if (ZoMathTools.distance(position, p.position) < size.x){
if (inFront(p, 5)){
return (true);
};
};
} else {
if (type == BULLET){
if (ZoMathTools.distance(position, p.position) < (6 + 2)){
return (true);
};
} else {
if (type == TURRET){
if (ZoMathTools.distance(position, p.position) < (size.x / 2)){
return (true);
};
} else {
if (ZoMathTools.distance(position, p.position) < (size.x + 2)){
return (true);
};
};
};
};
};
return (false);
}
public function isBullet():Boolean{
if (type == BULLET){
return (true);
};
return (false);
}
public function reset():void{
position = pos;
rotation = 0;
active = (visible = true);
switch (type){
case TRACKER:
chasing = false;
break;
case BAR:
rotation = ZoMathTools.dirRotation(pos, end);
break;
case BULLET:
clear();
break;
};
}
public function clear():void{
if (type == BULLET){
} else {
owner.removeChild(this);
Global.lvl.allEn = ZoTools.removeArrayElement(Global.lvl.allEn, this);
active = (visible = false);
};
}
public function update():void{
var clean:Boolean;
var pos:Point;
var p:Player;
var oldState:Boolean;
var ar:Array;
var posRef:Point;
var zoneDist:Number;
var i:uint;
isInFrustrum();
switch (type){
case BULLET:
if (active){
clean = false;
if (timer < (lifespan * 60)){
x = (x + (dir.x * speed));
y = (y + (dir.y * speed));
timer++;
} else {
clean = true;
};
if (clean){
Global.lvl.bManager.clean(this);
};
};
break;
case TURRET:
if (timer < (Number(params.@firefreq) * 60)){
if (((!((symbol.currentAnim == "prepare"))) && (symbol.hasFinishedPlaying("shoot")))){
symbol.playAnim("prepare", 1);
};
timer++;
} else {
timer = 0;
pos = ZoMathTools.destinationPoint(position, direction, (size.x / 3));
turretShot(pos, direction, Number(params.@bulletSpeed), Number(params.@bulletLife));
};
rotation = (rotation + Number(params.@rotate));
break;
case SCAN:
rotation = (rotation + (params.@speed * params.@dir));
break;
case TRACKER:
if (active){
p = Global.p;
oldState = chasing;
if (params.@zone <= 0){
chasing = true;
} else {
posRef = position;
if (params.@fixe){
posRef = ZoTools.transformToPoint(params.@pos);
};
zoneDist = params.@zone;
if (((chasing) && ((params.@zoneactive > 0)))){
zoneDist = params.@zoneactive;
};
if (ZoMathTools.distance(posRef, p.position) > zoneDist){
chasing = false;
} else {
chasing = true;
};
};
if (p.isInvincible()){
chasing = false;
};
if (chasing){
if (symbol.currentAnim == "idle"){
symbol.playAnim("active");
};
} else {
if (symbol.currentAnim == "active"){
symbol.playAnim("idle");
};
};
if (chasing){
direction = getTowardObjDir(p);
} else {
if (timer < timerAim){
timer++;
if (ZoMathTools.distance(position, posRef) > params.@zone){
direction = getTowardVecDir(ZoTools.transformToPoint(params.@pos));
timer = 0;
};
} else {
timer = 0;
direction = new Point(ZoMathTools.randomBetween(-1, 1), ZoMathTools.randomBetween(-1, 1));
};
};
position = new Point((x + (direction.x * params.@speed)), (y + (direction.y * params.@speed)));
ar = Global.lvl.getPlanetInFrustrum();
i = 0;
while (i < ar.length) {
if (ar[i].isSunOn()){
if (ZoMathTools.distance(ar[i].position, position) < ar[i].getRadius()){
visible = (active = false);
};
};
i++;
};
};
break;
};
if (infrustrum){
if (colide(Global.p)){
if (Global.p.isAlive()){
Global.p.killPlayer(setContinueFlying);
};
};
if (symbol){
if (symbol.currentAnimLength() > 1){
symbol.update();
};
};
};
}
public function getXML():XMLList{
params.@pos = ((owner.x + ",") + owner.y);
switch (type){
case BAR:
params.@end = (((owner.x + endPos.x) + ",") + (owner.y + endPos.y));
break;
};
return (params);
}
protected function createBAR():void{
var e:Sprite;
pos = ZoTools.transformToPoint(params.@pos);
end = ZoTools.transformToPoint(params.@end);
speed = Number(params.@speed);
dir = ZoMathTools.normalize(new Point((end.x - pos.x), (end.y - pos.y)));
distance = ZoMathTools.distance(pos, end);
var s:Sprite = new Sprite();
s.graphics.lineStyle(5, 0);
s.graphics.moveTo(0, 0);
s.graphics.lineTo(params.@size, 0);
var bmpData:BitmapData = new BitmapData(s.width, s.height, true, 0);
bmpData.draw(s);
var i:Number = 0;
while (i < params.@nb) {
e = new Sprite();
e.addChild(new Bitmap(bmpData));
e.x = (((params.@size * 2) + 10) * i);
symbols.push(e);
addChild(e);
i++;
};
rotation = ZoMathTools.dirRotation(pos, end);
}
}
}//package
Section 102
//Enemy_editor_bar (Enemy_editor_bar)
package {
import mx.core.*;
public class Enemy_editor_bar extends BitmapAsset {
}
}//package
Section 103
//Enemy_editor_escan (Enemy_editor_escan)
package {
import mx.core.*;
public class Enemy_editor_escan extends BitmapAsset {
}
}//package
Section 104
//Enemy_editor_tracker1 (Enemy_editor_tracker1)
package {
import mx.core.*;
public class Enemy_editor_tracker1 extends BitmapAsset {
}
}//package
Section 105
//Enemy_editor_turret (Enemy_editor_turret)
package {
import mx.core.*;
public class Enemy_editor_turret extends BitmapAsset {
}
}//package
Section 106
//Enemy_sheet_bullet (Enemy_sheet_bullet)
package {
import mx.core.*;
public class Enemy_sheet_bullet extends BitmapAsset {
}
}//package
Section 107
//Enemy_sheet_scan (Enemy_sheet_scan)
package {
import mx.core.*;
public class Enemy_sheet_scan extends BitmapAsset {
}
}//package
Section 108
//Enemy_sheet_tracker (Enemy_sheet_tracker)
package {
import mx.core.*;
public class Enemy_sheet_tracker extends BitmapAsset {
}
}//package
Section 109
//Enemy_sheet_turret (Enemy_sheet_turret)
package {
import mx.core.*;
public class Enemy_sheet_turret extends BitmapAsset {
}
}//package
Section 110
//Game (Game)
package {
import flash.geom.*;
import flash.display.*;
import zomg.sound.*;
import zomg.*;
import zomg.tools.*;
import zomg.gui.*;
import zomg.olr.*;
import flash.ui.*;
public class Game extends Sprite {
private var api_nk:Class;
public var k:ZoKeys;
protected var appLoaded:Boolean;// = false
public var lvl_bg:Sprite;
protected var pauseKey:Boolean;// = false
protected var pauseScreen:PauseMenu;
protected var useSponsor:Boolean;// = false
protected var result:ResultScreen;
public var bgColor:ZoBackground;
protected var _state:uint;
protected var lvl:LevelManager;
protected var camera:Sprite;
protected var useSS:Boolean;// = true
public var trans:ZoSprite;
protected var _useBg:Boolean;// = true
public var endScreen:EndScreen;
protected var _screenNumber:int;// = -1
public var meta_bg_cloud:Sprite;
public var transitAllow:Boolean;// = false
protected var gui:GUI;
public var meta_bg:Sprite;
protected var timerAim:Number;// = 5
public var appSize:Point;
public var bg:Background;
protected var timer:int;// = 0
protected var debug:DebugTool;
public var unlockScreen:Unlock;
protected var mouseClick:Boolean;// = false
public var htp:HowToPlay;
protected var splash:MovieClip;
public var questionScreen:Question;
protected var s:Stage;
public var sscreen_sponsor:Class;
protected var pauseScreenIdle:Number;// = 10
public static var NEW:uint = 1;
public static var END:uint = 4;
public static var UNPAUSE:uint = 6;
public static var sheet_meta:Class = Game_sheet_meta;
public static var SSCREEN:uint = 7;
public static var LIVE:uint = 2;
public static var sheet_vortex:Class = Game_sheet_vortex;
public static var IDLE:uint = 0;
public static var sheet_transition:Class = Game_sheet_transition;
public static var sheet_meta_cloud:Class = Game_sheet_meta_cloud;
public static var PAUSE:uint = 3;
public static var MENU:uint = 5;
public function Game(){
sscreen_sponsor = Game_sscreen_sponsor;
api_nk = Game_api_nk;
_state = IDLE;
super();
addChild(new ZoBackground(new Point(800, 600)));
Global.g = this;
name = "[Sprite]Game";
s = Global.s;
appSize = new Point(s.stageWidth, s.stageHeight);
trans = new ZoSprite(new sheet_transition(), new Point(800, 600));
trans.symbol.addAnim("transitGo", new Point(800, 600), 3, new Point(0, 0), 4);
trans.symbol.addAnim("transitBack", new Point(800, 600), 3, new Point(0, 0), 4, false, true);
trans.visible = false;
trans.x = (appSize.x / 2);
trans.y = (appSize.y / 2);
addChild(trans);
splash = new api_nk();
splash.x = 400;
splash.y = 300;
if (useSS){
state = SSCREEN;
screenNumber = 0;
} else {
showHtp();
state = LIVE;
};
}
public function showResult():void{
result.init();
state = MENU;
}
public function moveBg(move:Point):void{
var pos:Point;
var posCloud:Point;
if (!lvl.isCamFix()){
if (Global.lvl.isMeta()){
pos = new Point((meta_bg.x + (-(move.x) / 40)), (meta_bg.y + (-(move.y) / 30)));
posCloud = new Point((meta_bg_cloud.x + (-(move.x) / 20)), (meta_bg_cloud.y + (-(move.y) / 15)));
if ((((pos.x >= -200)) && ((pos.x <= 0)))){
meta_bg.x = pos.x;
};
if ((((pos.y >= -200)) && ((pos.y <= 0)))){
meta_bg.y = pos.y;
};
if ((((pos.x >= -200)) && ((pos.x <= 0)))){
meta_bg_cloud.x = posCloud.x;
};
if ((((pos.y >= -200)) && ((pos.y <= 0)))){
meta_bg_cloud.y = posCloud.y;
};
} else {
pos = new Point((lvl_bg.x + (-(move.x) / 40)), (lvl_bg.y + (-(move.y) / 30)));
lvl_bg.x = pos.x;
lvl_bg.y = pos.y;
bg.motion(move);
};
};
}
public function pauseGame():void{
if (state == LIVE){
state = PAUSE;
};
}
public function setCam(newPos:Point):void{
lvl.x = -((newPos.x - (Global.s.stageWidth / 2)));
lvl.y = -((newPos.y - (Global.s.stageHeight / 2)));
}
public function get state():uint{
return (_state);
}
public function set state(v:uint):void{
_state = v;
switch (v){
case IDLE:
break;
case LIVE:
Global.mouse.activate(true);
if (!appLoaded){
loadApp();
};
ZoSoundEngine.globalVolume = 1;
lvl.visible = true;
gui.visible = true;
break;
case PAUSE:
ZoSoundEngine.globalVolume = 0.2;
pauseScreen.pop(true);
break;
case UNPAUSE:
pauseScreen.pop(false);
timer = 0;
timerAim = pauseScreenIdle;
break;
case END:
ZoSoundEngine.globalVolume = 0.2;
pauseScreen.pop(false);
endScreen.visible = true;
break;
case SSCREEN:
Global.mouse.activate(false);
break;
};
}
protected function set screenNumber(v:int):void{
_screenNumber = v;
switch (screenNumber){
case 0:
timerAim = 230;
addChild(splash);
break;
case 1:
removeChild(splash);
timerAim = 200;
addChild(new OLRLogo(Global.s));
break;
case 2:
removeChildAt(1);
showHtp();
timerAim = 0;
break;
case 3:
state = LIVE;
};
}
public function get useBg():Boolean{
return (_useBg);
}
public function isLive():Boolean{
if (state == LIVE){
return (true);
};
return (false);
}
public function toggleMetaBg():void{
if (useBg){
if (lvl.isMeta()){
meta_bg_cloud.visible = (meta_bg.visible = true);
meta_bg_cloud.x = (meta_bg_cloud.y = (meta_bg.y = (meta_bg.x = -100)));
lvl_bg.visible = false;
} else {
bg.visible = true;
meta_bg_cloud.visible = (meta_bg.visible = false);
lvl_bg.visible = true;
lvl_bg.x = ZoMathTools.randomBetween(-300, 100, true);
lvl_bg.y = ZoMathTools.randomBetween(-300, 100, true);
};
} else {
meta_bg_cloud.visible = (bg.visible = (lvl_bg.visible = (meta_bg.visible = false)));
};
}
public function update():void{
var _local3:Boolean;
var s:String;
switch (state){
case IDLE:
break;
case LIVE:
if (!endScreen.visible){
lvl.update();
};
break;
case MENU:
if (!result.visible){
lvl.switchLevel(result.lvlToBuild);
state = LIVE;
};
break;
case PAUSE:
break;
case UNPAUSE:
if (timer < timerAim){
timer++;
} else {
state = LIVE;
};
break;
case SSCREEN:
_local3 = false;
if (screenNumber < 3){
if (timerAim > 0){
if (timer < timerAim){
timer++;
} else {
timer = 0;
_local3 = true;
};
};
if ((((screenNumber == 2)) && (!(htp.visible)))){
_local3 = true;
};
if (_local3){
_local3 = true;
screenNumber++;
};
};
break;
default:
trace("Game >> main switch error game state");
};
if (appLoaded){
if (((k.getKeyStateByName("pause")) || (k.getKeyStateByName("menu")))){
if (!pauseKey){
pauseKey = true;
if (state == PAUSE){
if (((!(htp.visible)) && (!(questionScreen.visible)))){
state = UNPAUSE;
};
} else {
if (state == LIVE){
state = PAUSE;
};
};
};
} else {
pauseKey = false;
};
if (((k.getKeyStateByName("zoomIn")) && (Global.isDebug))){
setZoom(-0.01);
} else {
if (((k.getKeyStateByName("zoomOut")) && (Global.isDebug))){
setZoom(0.01);
};
};
if (Global.isDebug){
s = (((("v" + Global.version) + "\n Frustrum (") + lvl.planetInFrustrum()) + ")\n");
};
};
}
public function showEnd():void{
if (Global.globalStats.allLevelDone()){
endScreen.init();
addChild(endScreen);
};
}
public function reset():void{
if (state == PAUSE){
state = UNPAUSE;
};
screensOff(true);
state = LIVE;
}
public function showHtp():void{
if (!htp){
htp = new HowToPlay();
};
htp.init();
addChild(htp);
}
public function set useBg(v:Boolean):void{
_useBg = v;
toggleMetaBg();
}
private function loadApp():void{
bgColor = new ZoBackground(appSize);
addChild(bgColor);
bg = new Background(50);
addChild(bg);
meta_bg = new Sprite();
meta_bg.addChild(new sheet_meta());
meta_bg_cloud = new Sprite();
meta_bg_cloud.addChild(new sheet_meta_cloud());
meta_bg_cloud.alpha = 0.2;
addChild(meta_bg);
addChild(meta_bg_cloud);
lvl_bg = new Sprite();
lvl_bg.addChild(new sheet_vortex());
lvl_bg.alpha = 0.2;
addChild(lvl_bg);
ManagerSound.loadSounds();
ZoSoundEngine.getSound("track_loop").playSound();
Global.cam = (camera = new Sprite());
addChild(camera);
lvl = new LevelManager();
camera.addChild(lvl);
Global.gui = (gui = new GUI());
addChild(Global.gui);
addChild(trans);
pauseScreen = new PauseMenu(Global.s);
addChild(pauseScreen);
endScreen = new EndScreen();
addChild(endScreen);
unlockScreen = new Unlock(appSize);
addChild(unlockScreen);
questionScreen = new Question(new Point((appSize.x / 2), (appSize.y / 2)));
addChild(questionScreen);
Global.globalStats = new Stats();
k = new ZoKeys(s, new Array(new ZoKey(Keyboard.ESCAPE, "menu"), new ZoKey(80, "pause"), new ZoKey(66, "zoomOut"), new ZoKey(78, "zoomIn"), new ZoKey(Keyboard.ENTER, "go")), "main");
debug = new DebugTool(new Point((Global.s.stageWidth - 200), 0));
if (Global.isDebug){
addChild(debug);
};
lvl.switchLevel();
result = new ResultScreen();
Global.result = result;
result.x = ((appSize.x / 2) - (result.width / 2));
result.y = ((appSize.y / 2) - (result.height / 2));
addChild(result);
appLoaded = true;
state = LIVE;
}
public function setZoom(n:Number, add:Boolean=true):void{
if (add){
Global.zoomLevel = (Global.zoomLevel + n);
} else {
Global.zoomLevel = n;
};
var delay:Number = 1;
camera.scaleX = (camera.scaleY = Global.zoomLevel);
camera.x = ((s.stageWidth * delay) * ((1 - Global.zoomLevel) / 2));
camera.y = ((s.stageHeight * delay) * ((1 - Global.zoomLevel) / 2));
}
public function switchState(value:uint):void{
state = value;
}
protected function get screenNumber():int{
return (_screenNumber);
}
public function screensOff(force:Boolean=false):Boolean{
if (force){
htp.visible = false;
unlockScreen.pop(null, false);
questionScreen.pop(false);
};
if (((((!(unlockScreen.visible)) && (!(questionScreen.visible)))) && (!(htp.visible)))){
return (true);
};
return (false);
}
public function isIdle():Boolean{
if (state == IDLE){
return (true);
};
return (false);
}
public function isPaused():Boolean{
if (state == PAUSE){
return (true);
};
return (false);
}
}
}//package
Section 111
//Game_api_nk (Game_api_nk)
package {
import mx.core.*;
import flash.utils.*;
public class Game_api_nk extends MovieClipLoaderAsset {
public var dataClass:Class;
private static var bytes:ByteArray = null;
public function Game_api_nk(){
dataClass = Game_api_nk_dataClass;
super();
initialWidth = (0x3200 / 20);
initialHeight = (9600 / 20);
}
override public function get movieClipData():ByteArray{
if (bytes == null){
bytes = ByteArray(new dataClass());
};
return (bytes);
}
}
}//package
Section 112
//Game_api_nk_dataClass (Game_api_nk_dataClass)
package {
import mx.core.*;
public class Game_api_nk_dataClass extends ByteArrayAsset {
}
}//package
Section 113
//Game_sheet_meta (Game_sheet_meta)
package {
import mx.core.*;
public class Game_sheet_meta extends BitmapAsset {
}
}//package
Section 114
//Game_sheet_meta_cloud (Game_sheet_meta_cloud)
package {
import mx.core.*;
public class Game_sheet_meta_cloud extends BitmapAsset {
}
}//package
Section 115
//Game_sheet_transition (Game_sheet_transition)
package {
import mx.core.*;
public class Game_sheet_transition extends BitmapAsset {
}
}//package
Section 116
//Game_sheet_vortex (Game_sheet_vortex)
package {
import mx.core.*;
public class Game_sheet_vortex extends BitmapAsset {
}
}//package
Section 117
//Game_sscreen_sponsor (Game_sscreen_sponsor)
package {
import mx.core.*;
public class Game_sscreen_sponsor extends BitmapAsset {
}
}//package
Section 118
//Global (Global)
package {
import flash.display.*;
import api.*;
import zomg.*;
import zomg.tools.*;
public class Global {
public var FONT_GROTESQUE:Class;
public var FONT_FUTURA:Class;
public static var isDebug:Boolean = true;
public static var kgg:Kgg;
public static var cam:Sprite;
public static var console:ZoConsole;
public static var version:String = "0.2";
public static var lvlStats:Stats;
public static var result:ResultScreen;
public static var mouse:ZoCursor;
public static var g:Game;
public static var lvl:LevelManager;
public static var p:Player;
public static var zoomLevel:Number = 1;
public static var s:Stage;
public static var gui:GUI;
public static var globalStats:Stats;
public function Global(){
FONT_GROTESQUE = Global_FONT_GROTESQUE;
FONT_FUTURA = Global_FONT_FUTURA;
super();
}
}
}//package
Section 119
//Global_FONT_FUTURA (Global_FONT_FUTURA)
package {
import mx.core.*;
public class Global_FONT_FUTURA extends FontAsset {
}
}//package
Section 120
//Global_FONT_GROTESQUE (Global_FONT_GROTESQUE)
package {
import mx.core.*;
public class Global_FONT_GROTESQUE extends FontAsset {
}
}//package
Section 121
//GUI (GUI)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import zomg.*;
import zomg.tools.*;
import zomg.gui.*;
public class GUI extends Sprite {
protected var tf_lvlName:TextField;
protected var timer:int;// = 0
protected var tf_lvlKey:TextField;
protected var tf_lvlCoin:TextField;
protected var aimTimer:Number;// = 1
protected var lvlCoin:Sprite;
protected var allGui:Array;
protected var lvlKey:Sprite;
protected var tf_metaCoin:TextField;
protected var aim:int;// = 0
protected var b:Btn_logo;
protected var levelName:Sprite;
protected var remain:int;// = -1
protected var metaCoin:Sprite;
protected var multi:Number;// = 3
protected var l:LevelManager;
public function GUI(){
var img:Bitmap;
super();
l = Global.lvl;
allGui = new Array();
lvlKey = new Sprite();
lvlKey.x = 5;
lvlKey.y = 5;
img = ZoColor.getImageFromSheet(new Collectable.sheet_key(), new Point(25, 13), new Point(1, 2));
lvlKey.addChild(img);
img.y = 8;
tf_lvlKey = ZoGUI.getStdTextField(new Point(300, 25), "1 / 3", {font:"futura", embed:true, size:20, bold:true, align:"left", color:0x222222}, new Point(30, 0), lvlKey);
addChild(lvlKey);
lvlCoin = new Sprite();
lvlCoin.x = lvlKey.x;
lvlCoin.y = (lvlKey.y + 22);
img = ZoColor.getImageFromSheet(new Collectable.sheet_cash(), new Point(13, 13), new Point(0, 0));
lvlCoin.addChild(img);
img.x = 5;
img.y = 9;
tf_lvlCoin = ZoGUI.getStdTextField(new Point(300, 25), "1 / 3", {font:"futura", embed:true, size:20, bold:true, align:"left", color:0x222222}, new Point(30, 0), lvlCoin);
addChild(lvlCoin);
levelName = new Sprite();
levelName.addChild(ZoGUI.getStdTextField(new Point(30, 25), "LEVEL ", {font:"grotesque", embed:true, size:20, align:"left", color:0x222222, align:"right"}, new Point(), levelName));
tf_lvlName = ZoGUI.getStdTextField(new Point(300, 25), "##", {font:"futura", embed:true, size:20, align:"left", color:0x222222, align:"left"}, new Point(30, 0), levelName);
levelName.x = ((Global.g.appSize.x / 2) - 50);
levelName.y = (Global.g.appSize.y - 30);
metaCoin = new Sprite();
var total:TextField = ZoGUI.getStdTextField(new Point(60, 25), "TOTAL", {font:"grotesque", embed:true, size:30, align:"left", bold:true, letterSpace:2, color:0xFFFFFF}, new Point(10, 5), metaCoin);
img = Collectable.getIcon("cash");
img.x = total.x;
img.y = 50;
metaCoin.addChild(img);
tf_metaCoin = ZoGUI.getStdTextField(new Point(60, 25), "x 0", {font:"futura", embed:true, size:25, align:"left", color:0xFFFFFF}, new Point(((img.x + img.width) + 5), (img.y - 12)), metaCoin);
metaCoin.y = (metaCoin.x = 5);
addChild(metaCoin);
b = new Btn_logo(this, new Point(5, 60));
b.scaleX = (b.scaleY = 0.8);
}
public function updateGUI():void{
var i:uint;
var nb:int;
var total:int;
if (Global.lvl.currentLevel == 0){
lvlCoin.visible = false;
lvlKey.visible = false;
metaCoin.visible = true;
b.visible = true;
} else {
lvlCoin.visible = true;
lvlKey.visible = true;
metaCoin.visible = false;
b.visible = false;
};
nb = getKeyLeft();
total = getKeyLeft(true);
tf_lvlKey.text = ((nb + " / ") + total);
if (l.allKeyDone()){
l.allKeyCollected = true;
} else {
l.allKeyCollected = false;
};
nb = l.getNbCollec(Collectable.CASH, false);
total = l.getNbCollec(Collectable.CASH, false, true);
tf_lvlCoin.text = ((nb + " / ") + total);
tf_lvlName.text = Global.lvl.lvlName.toUpperCase();
}
public function toggleElement(name:String, flag:Boolean):void{
var i:Number = 0;
while (i < allGui.length) {
if (allGui[i].name == name){
allGui[i].visible = flag;
};
i++;
};
}
public function bumpCash():void{
var i:Number = 0;
while (i < allGui.length) {
if (allGui[i].name == "red"){
allGui[i].bump();
};
i++;
};
}
protected function goToNumber(e:Event):void{
var sign:int;
if (timer < aimTimer){
timer++;
} else {
timer = 0;
sign = ZoMathTools.sign((aim - remain));
remain = (remain + (sign * multi));
if (sign > 0){
if (remain > aim){
remain = aim;
} else {
if (sign < 0){
if (remain < aim){
remain = aim;
};
};
};
};
tf_metaCoin.text = ("x " + remain);
if (remain == aim){
removeEventListener(Event.ENTER_FRAME, goToNumber);
};
};
}
public function getKeyLeft(total:Boolean=false):int{
var tot:int;
var i:int;
var nb:int;
i = 0;
while (i < l.allColl.length) {
if (l.allColl[i].type == Collectable.KEY){
tot++;
if (l.allColl[i].isTaken()){
nb++;
};
};
i++;
};
if (total){
return (tot);
};
return (nb);
}
public function updateRemain():void{
aim = Global.globalStats.getRemaining();
if (remain != aim){
addEventListener(Event.ENTER_FRAME, goToNumber);
};
}
public function setElementText(name:String, txt:String):void{
var i:Number = 0;
while (i < allGui.length) {
if (allGui[i].name == name){
allGui[i].setElementText(txt);
};
i++;
};
}
public function resetGUI():void{
updateGUI();
}
}
}//package
Section 122
//HowToPlay (HowToPlay)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import zomg.*;
public class HowToPlay extends Sprite {
protected var timerAim:Number;// = 15
public var sscreen_htp:Class;
protected var screen1:Sprite;
protected var screen2:Sprite;
protected var timer:int;// = 0
public function HowToPlay(){
sscreen_htp = HowToPlay_sscreen_htp;
screen1 = new Sprite();
screen2 = new Sprite();
super();
name = "HTP";
screen1.addChild(ZoColor.getImageFromSheet(new sscreen_htp(), new Point(800, 600), new Point(0, 0)));
screen2.addChild(ZoColor.getImageFromSheet(new sscreen_htp(), new Point(800, 600), new Point(0, 1)));
addChild(screen1);
addChild(screen2);
screen2.mouseEnabled = (screen1.mouseEnabled = false);
visible = false;
new Btn_logo(this, new Point(62, 498));
}
public function update(e:Event=null):void{
if (timer < timerAim){
timer++;
} else {
timer = 0;
screen1.visible = !(screen1.visible);
screen2.visible = !(screen2.visible);
};
}
public function init():void{
timer = 0;
screen1.visible = true;
screen2.visible = false;
addEventListener(MouseEvent.MOUSE_UP, kill);
addEventListener(Event.ENTER_FRAME, update);
visible = true;
}
public function kill(e:MouseEvent=null):void{
if (e.target.name == "HTP"){
visible = false;
removeEventListener(MouseEvent.MOUSE_UP, kill);
removeEventListener(Event.ENTER_FRAME, update);
};
}
}
}//package
Section 123
//HowToPlay_sscreen_htp (HowToPlay_sscreen_htp)
package {
import mx.core.*;
public class HowToPlay_sscreen_htp extends BitmapAsset {
}
}//package
Section 124
//LevelManager (LevelManager)
package {
import flash.geom.*;
import flash.display.*;
import flash.utils.*;
import zomg.sound.*;
import zomg.*;
import zomg.tools.*;
import com.*;
public class LevelManager extends Sprite {
protected var zoneA:int;// = 0
protected var xml:XML;
protected var limits:Sprite;
protected var zoneB:int;// = 0
protected var exit:Collisionable;
public var allEn:Array;
public var allColl:Array;
protected var levelC:Sprite;
public var bg:Background;
protected var startLevel:uint;// = 0
public var timer:StopWatch;
public var levelBounds:Rectangle;
protected var levels:Array;
protected var p:Player;
protected var cm:Bitmap;
public var displayList:Array;
public var currentLevel:int;// = 0
protected var _map:Bitmap;
protected var stats:Stats;
public var endpos:Point;
public var oldLevel:int;// = 0
public var levelToLoad:int;// = 0
protected var trans:ZoSprite;
protected var levelLoaded:Boolean;// = false
protected var planetStart:Collisionable;
public var levelSize:Point;
protected var door:Collisionable;
protected var state:uint;// = 0
protected var bounds:Border;
public var startpos:Point;
public var spec:Object;
public var currentZone:int;// = 0
public var lvlName:String;// = ""
public var allAsset:Array;
public var lvlstartpos:Point;
public var allKeyCollected:Boolean;// = false
public var bManager:ManagerBullet;
protected var _objectif:uint;// = 0
public static var TIMER:uint = 2;
protected static var boundEcart:Number = 100;
public static var LIVE:uint = 1;
public static var EXIT:uint = 1;
public static var OPEN:uint = 2;
public static var xmlFile:Class = LevelManager_xmlFile;
public static var IDLE:uint = 0;
public static var TRANSIT:uint = 4;
public static var END:uint = 3;
public static var MENU:uint = 0;
public function LevelManager(){
displayList = new Array();
startpos = new Point();
endpos = new Point();
levelSize = new Point();
lvlstartpos = new Point();
super();
Global.lvl = this;
levelC = this;
Global.p = (p = new Player(this));
var file:ByteArray = new xmlFile();
xml = new XML(file.readUTFBytes(file.length));
bg = Global.g.bg;
bManager = new ManagerBullet(levelC);
trans = Global.g.trans;
bounds = new Border();
}
protected function setLevelBoundsRect():void{
var i:uint;
var ecart:Number = boundEcart;
levelBounds = new Rectangle(allAsset[0].x, allAsset[0].y, allAsset[0].x, allAsset[0].y);
i = 0;
while (i < allAsset.length) {
levelBounds = levelBoundsPointTreat(levelBounds, allAsset[i].position);
i++;
};
levelBounds = levelBoundsPointTreat(levelBounds, startpos);
if (endpos.length > 1){
levelBounds = levelBoundsPointTreat(levelBounds, endpos);
};
levelBounds.x = (levelBounds.x - ecart);
levelBounds.y = (levelBounds.y - ecart);
levelBounds.width = (levelBounds.width + ecart);
levelBounds.height = (levelBounds.height + ecart);
}
public function updateAll():void{
var i:uint;
i = 0;
while (i < allEn.length) {
allEn[i].update();
i++;
};
bManager.update();
i = 0;
while (i < allColl.length) {
allColl[i].update();
i++;
};
i = 0;
while (i < allAsset.length) {
allAsset[i].update();
if (allAsset[i].isSunOn()){
Global.globalStats.setAchievement("lighSun", 1);
};
i++;
};
bounds.update();
}
public function inMenu():Boolean{
if (currentLevel == 0){
return (true);
};
return (false);
}
public function levelDone():void{
var multiplier:Number = 1000;
var timeScore:Number = 100000;
var oldCash:int = (Global.result.oldCash = Global.globalStats.levelDone[currentLevel]);
var newCash:int = (Global.result.newCash = getNbCollec(Collectable.CASH, false));
if (newCash > oldCash){
Global.globalStats.levelDone[currentLevel] = newCash;
};
timer.stop();
var oldTime:Number = (Global.result.oldTime = Global.globalStats.levelTime[currentLevel]);
var newTime:Number = (Global.result.newTime = timer.getElapsedTime());
if (newTime < oldTime){
Global.globalStats.levelTime[currentLevel] = newTime;
};
Global.result.lvlName = lvlName;
Global.globalStats.lastPlayed = (Global.result.lvlNum = currentLevel);
Global.g.showResult();
state = IDLE;
Global.globalStats.cookie("save");
}
protected function clearLevel():Boolean{
var i:Number = 0;
if (allAsset){
i = 0;
while (i < allAsset.length) {
removeChild(allAsset[i]);
allAsset[i] = null;
i++;
};
i = 0;
while (i < allEn.length) {
if (!allEn[i].isBullet()){
removeChild(allEn[i]);
allEn[i] = null;
} else {
bManager.clean(allEn[i]);
};
i++;
};
i = 0;
while (i < allColl.length) {
removeChild(allColl[i]);
allColl[i] = null;
i++;
};
p.remove();
removeChild(bounds);
if (bg){
bg.visible = false;
};
};
if ((numChildren - bManager.countElement()) == 0){
return (true);
};
trace((((("LVLM > Couldn't remove level (numChild:" + numChildren) + " - bullet:") + bManager.countElement()) + ") | CHECK NUM CHILDREN IN LVLM"));
return (false);
}
protected function myLevel():int{
var gate:int;
var lvl:int;
var xm:XML = xml.level[0];
var i:int;
var lvls:Array = new Array(0, 0, 0, 0);
var lvlsDone:Array = new Array(0, 0, 0, 0);
i = 0;
while (i < xm.collision.length()) {
gate = int(xm.collision[i].@gate);
lvl = int(xm.collision[i].@level);
var _local8 = lvls;
var _local9 = lvl;
var _local10 = (_local8[_local9] + 1);
_local8[_local9] = _local10;
if (Global.globalStats.levelDone[gate] >= 0){
_local8 = lvlsDone;
_local9 = lvl;
_local10 = (_local8[_local9] + 1);
_local8[_local9] = _local10;
};
i++;
};
var ret:int;
if (lvlsDone[1] >= zoneA){
if (lvlsDone[2] >= zoneB){
ret = 3;
} else {
ret = 2;
};
} else {
ret = 1;
};
return (ret);
}
public function setLevel(xm:XML):void{
var col:Collisionable;
var e:Enemy;
var c:Collectable;
var top:Point;
var bottom:Point;
var lvlNum:int = int(xm.@num);
var id:int;
allAsset = new Array();
allEn = new Array();
allColl = new Array();
var i:uint;
objectif = uint(xm.@type);
startpos = ZoTools.transformToPoint(xm.@start);
endpos = ZoTools.transformToPoint(xm.@end);
lvlstartpos = startpos;
if (xm.@top){
top = ZoTools.transformToPoint(xm.@top);
bottom = ZoTools.transformToPoint(xm.@bottom);
levelBounds = new Rectangle(top.x, top.y, bottom.x, bottom.y);
bounds.init(top, bottom);
} else {
Global.console.addLine("ERROR > Old school level bounds", "LM");
if (xm.collision.length() > 0){
setLevelBoundsRect();
};
};
currentZone = int(getLevelZone(uint(lvlNum)));
var cameraFix:Boolean = Boolean(int(xm.@camfix));
if (lvlNum == 0){
bg.visible = false;
} else {
bg.init(currentZone, !(cameraFix));
};
addChild(bounds);
if (lvlNum == 0){
id = Collisionable.logotype;
} else {
id = Collisionable.start;
};
door = new Collisionable(id, startpos, null, false);
addChild(door);
allAsset.push(door);
if (objectif == EXIT){
exit = new Collisionable(Collisionable.end, endpos, null, false);
addChild(exit);
allAsset.push(exit);
};
levelSize = ZoTools.transformToPoint(xm.@size);
var myLvl:int;
if (int(xm.@num) < 1){
myLvl = myLevel();
};
var build:Boolean;
var list:Array = new Array();
i = 0;
while (i < xm.collision.length()) {
if (myLvl > 0){
if (xm.collision[i].@level > 0){
if (xm.collision[i].@level > myLvl){
build = false;
};
};
};
if (((build) && ((xm.collision[i].@sun <= 0)))){
list.push(i);
};
i++;
};
i = 0;
while (i < xm.collision.length()) {
if (xm.collision[i].@sun > 0){
list.push(i);
};
i++;
};
var ind:int;
i = 0;
while (i < list.length) {
ind = list[i];
col = new Collisionable(uint(xm.collision[ind].@type), ZoTools.transformToPoint(xm.collision[ind].@pos), new XMLList(xm.collision[ind].toXMLString()));
addChild(col);
allAsset.push(col);
if (lvlNum == 0){
if (Global.globalStats.lastPlayed == 0){
planetStart = col;
} else {
if (col.isGate()){
if (col.gate == Global.globalStats.lastPlayed){
planetStart = col;
lvlstartpos = col.position;
};
};
};
if (planetStart){
planetStart.mouseActive = true;
};
};
i++;
};
i = 0;
while (i < xm.enemy.length()) {
e = new Enemy(uint(xm.enemy[i].@type), ZoTools.transformToPoint(xm.enemy[i].@pos), new XMLList(xm.enemy[i].toXMLString()), this);
addChild(e);
allEn.push(e);
i++;
};
i = 0;
while (i < xm.collect.length()) {
c = new Collectable(uint(xm.collect[i].@type), ZoTools.transformToPoint(xm.collect[i].@pos), p, this);
addChild(c);
allColl.push(c);
i++;
};
bManager.bringFront();
addChild(p);
addChild(p.retic);
currentLevel = int(xm.@num);
var z:Number = 0;
if (xm.@zoom > 0){
z = Number(xm.@zoom);
} else {
z = 1;
};
Global.g.setZoom(z, false);
p.toggleUseCamera(!(cameraFix));
p.reset(planetStart);
i = 0;
while (i < allAsset.length) {
allAsset[i].isInFrustrum();
i++;
};
lvlName = xm.@name;
bManager.reset();
updateMeta();
}
protected function setLevelBoundsCircle():void{
var p:Number;
var i:Number = 0;
var dist:Number = 0;
i = 0;
while (i < allAsset.length) {
p = ZoMathTools.distance(new Point(), allAsset[i].position);
if (p > dist){
dist = p;
};
i++;
};
limits = new Sprite();
limits.graphics.lineStyle(10, 0x345600);
limits.graphics.drawCircle(0, 0, (Math.round(dist) + 100));
addChild(limits);
}
protected function resetLevelVars():void{
if (isMeta()){
p.position = lvlstartpos;
} else {
p.position = startpos;
};
Global.g.toggleMetaBg();
allKeyCollected = false;
Global.gui.updateGUI();
timer = new StopWatch();
timer.start();
}
public function loadLevel():void{
if (clearLevel()){
oldLevel = currentLevel;
setLevel(xml.level[levelToLoad]);
resetLevelVars();
if (currentLevel != 0){
Global.globalStats.lastPlayed = currentLevel;
Global.globalStats.cookie("save");
};
levelLoaded = true;
};
}
public function isMeta():Boolean{
if (currentLevel == 0){
return (true);
};
return (false);
}
public function get map():Bitmap{
return (_map);
}
public function set objectif(v:uint):void{
_objectif = v;
}
public function updateMeta():void{
var gateNum:Number;
var lvlUnlocked:Boolean;
var done:Boolean;
var lvlHS:int;
var over:Boolean;
var i:int;
if (currentLevel == 0){
i = 0;
while (i < allAsset.length) {
if (allAsset[i].isGate()){
gateNum = allAsset[i].gate;
if (allAsset[i].need <= 0){
Global.globalStats.levelUnlocked[gateNum] = true;
};
lvlUnlocked = Global.globalStats.levelUnlocked[gateNum];
done = Global.globalStats.levelDone[gateNum];
lvlHS = int(Global.globalStats.levelDone[gateNum]);
over = p.comparePlanetLanded(allAsset[i], true);
allAsset[i].setLocked(lvlUnlocked, done, lvlHS, getNbCollecXML(gateNum, Collectable.CASH), over);
};
i++;
};
};
}
public function getPlanetInFrustrum():Array{
var planetsToCheck:Array = new Array();
var i:Number = 0;
while (i < allAsset.length) {
if (((((allAsset[i].infrustrum) && (allAsset[i].isPlanet()))) && (allAsset[i].visible))){
planetsToCheck.push(allAsset[i]);
};
i++;
};
return (planetsToCheck);
}
public function resetLevel(transition:Boolean=false):void{
var i:Number;
if (transition){
state = TRANSIT;
} else {
i = 0;
while (i < allAsset.length) {
allAsset[i].reset();
i++;
};
i = 0;
while (i < allEn.length) {
allEn[i].reset();
i++;
};
bManager.reset();
i = 0;
while (i < allColl.length) {
allColl[i].reset();
i++;
};
p.reset(planetStart);
resetLevelVars();
if (currentLevel == 0){
updateMeta();
} else {
exit.symbol.playAnim("idle");
};
};
}
public function getLevelName(ind:uint):String{
return (xml.level[ind].@name);
}
public function setPlanetPaid(planet:Collisionable):void{
Global.globalStats.levelUnlocked[planet.gate] = true;
Global.globalStats.used = (Global.globalStats.used + planet.need);
updateMeta();
Global.gui.updateGUI();
Global.gui.updateRemain();
}
public function isCamFix():Boolean{
return (!(Global.p.useCamFollow));
}
public function getPrice(num:int=1):int{
var price:int = xml.level[0].collision[(num - 1)].@need;
return (price);
}
public function outOfScreen(obj:DisplayObject):Boolean{
var bounds:Rectangle = levelBounds;
var pt:Point = obj.localToGlobal(new Point());
var gap:Number = 300;
var s:Stage = Global.s;
if ((((((((pt.x < (0 - gap))) || ((pt.x > (s.stageWidth + gap))))) || ((pt.y < (0 - gap))))) || ((pt.y > (s.stageHeight + gap))))){
return (true);
};
return (false);
}
public function get objectif():uint{
return (_objectif);
}
protected function getLevelZone(ind:uint):String{
var ind = ind;
return (xml.level[0].collision.(@gate == ind).@zone);
}
protected function levelBoundsPointTreat(rec:Rectangle, pt:Point):Rectangle{
rec.x = Math.min(pt.x, rec.x);
rec.y = Math.min(pt.y, rec.y);
rec.width = Math.max(pt.x, rec.width);
rec.height = Math.max(pt.y, rec.height);
return (rec);
}
public function allKeyDone():Boolean{
var tot:int;
var nb:int;
var i:uint;
while (i < allColl.length) {
if (allColl[i].type == Collectable.KEY){
tot++;
if (allColl[i].isDone()){
nb++;
};
};
i++;
};
if (nb == tot){
return (true);
};
return (false);
}
public function switchLevel(num:int=-1):void{
if (num < 0){
num = 0;
};
levelToLoad = num;
levelLoaded = false;
state = TRANSIT;
}
public function set map(bmp:Bitmap):void{
_map = bmp;
}
public function gateOpen():void{
var planet:Collisionable;
if (isMeta()){
planet = Global.p.planetLandedOnLast;
if (planet){
if (planet.isGate()){
if (!Global.globalStats.levelUnlocked[planet.gate]){
payForPlanet(planet);
} else {
if (Global.globalStats.levelUnlocked[planet.gate]){
switchLevel(planet.gate);
};
};
};
};
};
}
public function outOfLevel(obj:Object):Boolean{
var bounds:Rectangle = levelBounds;
if ((((((((obj.x < bounds.x)) || ((obj.x > bounds.width)))) || ((obj.y < bounds.y)))) || ((obj.y > bounds.height)))){
return (true);
};
return (false);
}
public function countLevel():int{
Global.console.addLine(("nbLvl : " + xml.level[0].collision.length()), "LM");
return (xml.level[0].collision.length());
}
public function update():void{
var i:uint;
switch (state){
case IDLE:
break;
case LIVE:
if (Global.g.screensOff()){
p.update();
};
updateAll();
if (currentLevel > 0){
if (((p.isFlying()) && ((door.symbol.currentAnim == "idle")))){
door.symbol.playAnim("close", 1);
} else {
if ((((door.symbol.currentAnim == "close")) && (!(door.symbol.hasFinishedPlaying("close"))))){
door.symbol.update();
} else {
if (door.symbol.hasFinishedPlaying("close")){
door.visible = false;
};
};
};
if (allKeyCollected){
if (exit.symbol.currentAnim == "idle"){
exit.symbol.playAnim("open", 1);
} else {
if (!exit.symbol.hasFinishedPlaying("open")){
exit.symbol.update();
};
};
};
};
break;
case OPEN:
if (door.symbol.hasFinishedPlaying("open")){
door.symbol.playAnim("idle");
p.visible = true;
state = LIVE;
} else {
door.symbol.update();
};
break;
case TRANSIT:
if (((!(trans.visible)) && (!((trans.symbol.currentAnim == "transitGo"))))){
trans.symbol.playAnim("transitGo", 1);
trans.visible = true;
} else {
if ((((trans.symbol.currentAnim == "transitGo")) && (trans.symbol.hasFinishedPlaying("transitGo")))){
if (!levelLoaded){
loadLevel();
} else {
resetLevel();
};
trans.symbol.playAnim("transitBack", 1);
} else {
if (trans.symbol.hasFinishedPlaying("transitBack")){
trans.visible = false;
if (currentLevel != 0){
p.visible = false;
p.updateCam();
door.visible = true;
door.symbol.playAnim("open", 1);
ZoSoundEngine.getSound("door_open").playSound();
state = OPEN;
} else {
Global.gui.updateRemain();
if (Global.globalStats.allLevelDone()){
if (Global.kgg){
Global.kgg.k.stats.submit("GameEnd", 1);
};
Global.g.showEnd();
} else {
if (Global.kgg){
Global.kgg.k.stats.submit("GameEnd", 0);
};
};
state = LIVE;
};
} else {
trans.symbol.update();
};
};
};
break;
};
if ((((state == OPEN)) || ((state == TRANSIT)))){
if (levelLoaded){
updateAll();
};
};
}
public function getNbCollecXML(lvl:int=1, type:int=0):int{
var xm:XMLList;
var total:int;
var i:int;
var x:XML = xml.level[lvl];
if (x){
xm = new XMLList(x.toXMLString());
total = 0;
i = 0;
while (i < xm.collect.length()) {
if (int(xm.collect[i].@type) == type){
total++;
};
i++;
};
} else {
trace(("LM > error, no level " + lvl));
};
return (total);
}
public function hasExit():Boolean{
if (objectif == EXIT){
return (true);
};
return (false);
}
public function getNbCollec(type:int=0, stillInGame:Boolean=false, max:Boolean=false):int{
var i:int;
var left:int;
var collected:int;
var total:int;
i = 0;
while (i < allColl.length) {
if (allColl[i].type == type){
total++;
if (allColl[i].isDone()){
collected++;
} else {
left++;
};
};
i++;
};
if (max){
return (total);
};
if (stillInGame){
return (left);
};
return (collected);
}
public function getNearestEnemies():Enemy{
var i:int;
var near:Number = 50;
var dist:Number = 0;
var ind = -1;
i = 0;
while (i < allEn.length) {
dist = ZoMathTools.distance(p.position, allEn[i].position);
if (dist < near){
near = dist;
ind = i;
};
i++;
};
if (ind > -1){
return (allEn[ind]);
};
return (null);
}
public function getNearestPlanet(distnear:Number=600):Collisionable{
var i:int;
var near:Number = distnear;
var dist:Number = 0;
var ind = -1;
i = 0;
while (i < allAsset.length) {
dist = ZoMathTools.distance(p.position, allAsset[i].position);
if (dist < near){
near = dist;
ind = i;
};
i++;
};
if (ind > -1){
return (allAsset[ind]);
};
return (null);
}
public function payForPlanet(planet:Collisionable):void{
var canUnlock:Boolean;
if (Global.globalStats.getRemaining() >= planet.need){
canUnlock = true;
} else {
trace("Player > Not enough minerals");
};
Global.g.unlockScreen.pop(planet, true, canUnlock);
}
public function planetInFrustrum():int{
var i:uint;
var nb:int;
if (allAsset){
i = 0;
while (i < allAsset.length) {
if (allAsset[i].infrustrum){
nb++;
};
i++;
};
};
return (nb);
}
}
}//package
Section 125
//LevelManager_xmlFile (LevelManager_xmlFile)
package {
import mx.core.*;
public class LevelManager_xmlFile extends ByteArrayAsset {
}
}//package
Section 126
//Main (Main)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import api.*;
import com.hires.*;
import zomg.*;
import zomg.tools.*;
public class Main extends Sprite {
protected var game:Game;
protected var fpsDisplay:FPSStats;
public static var sheet_cursor:Class = Main_sheet_cursor;
public function Main():void{
super();
if (stage){
init();
} else {
addEventListener(Event.ADDED_TO_STAGE, init);
};
}
private function init(e:Event=null):void{
removeEventListener(Event.ADDED_TO_STAGE, init);
var url:String = this.loaderInfo.loaderURL;
if (url.indexOf("http://") != -1){
Global.isDebug = false;
};
if (url.indexOf("kongregate.com") > -1){
addChild(new Kgg(stage));
};
Global.s = stage;
Global.console = new ZoConsole(stage, new FPSStats());
Global.mouse = new ZoCursor(stage, true, new sheet_cursor(), new Point(26, 26));
Global.mouse.symbol.addAnim("menu", new Point(26, 26), 1, new Point(0, 1));
Global.mouse.symbol.addAnim("menuWhite", new Point(26, 26), 1, new Point(0, 2));
game = new Game();
addChild(game);
if (Global.isDebug){
addChild(Global.console);
};
addChild(Global.mouse);
addEventListener(Event.ENTER_FRAME, loop);
addEventListener(Event.ACTIVATE, flashActive);
addEventListener(Event.DEACTIVATE, flashDeactive);
}
private function flashActive(event:Event):void{
}
private function flashDeactive(event:Event):void{
game.pauseGame();
}
protected function loop(e:Event=null):void{
game.update();
}
}
}//package
Section 127
//Main_sheet_cursor (Main_sheet_cursor)
package {
import mx.core.*;
public class Main_sheet_cursor extends BitmapAsset {
}
}//package
Section 128
//ManagerBullet (ManagerBullet)
package {
import flash.geom.*;
import flash.display.*;
import zomg.tools.*;
public class ManagerBullet {
public var elmtsUsed:Array;
public var elmts:Array;
protected var owner:Sprite;
public function ManagerBullet(owner:Sprite){
var e:Enemy;
super();
this.owner = owner;
elmtsUsed = new Array();
elmts = new Array();
var i:uint;
while (i < 100) {
e = new Enemy(Enemy.BULLET, new Point());
elmts.push(e);
owner.addChild(e);
i++;
};
}
public function update():void{
var i:int;
i = 0;
while (i < elmtsUsed.length) {
elmtsUsed[i].update();
i++;
};
}
public function addElement(pos:Point, params:XMLList):void{
var e:Enemy = getFirstAvailable();
if (e){
e.setBulletParams(pos, params);
makeAvailable(e, false);
} else {
trace("bManager >> No bullet available !");
};
}
public function countElement():int{
return ((elmts.length + elmtsUsed.length));
}
protected function getFirstAvailable():Enemy{
var i:int;
i = 0;
while (i < elmts.length) {
if (!elmts[i].active){
return (elmts[i]);
};
i++;
};
return (null);
}
public function clean(elmt:Enemy):void{
makeAvailable(elmt, true);
}
public function reset():void{
var i:uint;
while (elmtsUsed.length > 0) {
clean(elmtsUsed[i]);
};
}
public function bringFront():void{
var i:uint;
i = 0;
while (i < elmts.length) {
owner.addChild(elmts[i]);
i++;
};
i = 0;
while (i < elmtsUsed.length) {
owner.addChild(elmtsUsed[i]);
i++;
};
}
protected function makeAvailable(e:Enemy, flag:Boolean=false):void{
if (!flag){
elmts = ZoTools.removeArrayElement(elmts, e);
elmtsUsed.push(e);
} else {
elmtsUsed = ZoTools.removeArrayElement(elmtsUsed, e);
elmts.push(e);
};
e.active = (e.visible = !(flag));
}
}
}//package
Section 129
//ManagerSound (ManagerSound)
package {
import zomg.sound.*;
public class ManagerSound {
public static var snd_door_open:Class = ManagerSound_snd_door_open;
public static var snd_turret_shoot:Class = ManagerSound_snd_turret_shoot;
public static var snd_sun_explode:Class = ManagerSound_snd_sun_explode;
public static var snd_meta_buy:Class = ManagerSound_snd_meta_buy;
public static var snd_menu_bip:Class = ManagerSound_snd_menu_bip;
public static var snd_collect_key:Class = ManagerSound_snd_collect_key;
public static var snd_player_die:Class = ManagerSound_snd_player_die;
public static var snd_collect:Class = ManagerSound_snd_collect;
public static var snd_planet_dis:Class = ManagerSound_snd_planet_dis;
public static var track_loop:Class = ManagerSound_track_loop;
public function ManagerSound(){
super();
}
public static function loadSounds():void{
ZoSoundEngine.setEngineInfo(1);
ZoSoundEngine.addSound(track_loop, "track_loop", "music", 0);
ZoSoundEngine.addSound(snd_collect, "collect", "fx", 1);
ZoSoundEngine.addSound(snd_collect_key, "collect_key", "fx", 1);
ZoSoundEngine.addSound(snd_player_die, "player_die", "fx", 1);
ZoSoundEngine.addSound(snd_door_open, "door_open", "fx", 1);
ZoSoundEngine.addSound(snd_turret_shoot, "turret_shoot", "fx", 1);
ZoSoundEngine.addSound(snd_meta_buy, "meta_buy", "fx", 1);
ZoSoundEngine.addSound(snd_planet_dis, "planet_dis", "fx", 1);
ZoSoundEngine.addSound(snd_sun_explode, "sun_explode", "fx", 1);
ZoSoundEngine.addSound(snd_menu_bip, "bip", "fx", 1);
ZoSoundEngine.getSound("collect").myVolume = 0.37;
ZoSoundEngine.getSound("planet_dis").myVolume = 0.38;
ZoSoundEngine.getSound("turret_shoot").myVolume = 0;
ZoSoundEngine.getSound("sun_explode").myVolume = 0;
ZoSoundEngine.getSound("bip").myVolume = 0;
}
}
}//package
Section 130
//ManagerSound_snd_collect (ManagerSound_snd_collect)
package {
import mx.core.*;
public class ManagerSound_snd_collect extends SoundAsset {
}
}//package
Section 131
//ManagerSound_snd_collect_key (ManagerSound_snd_collect_key)
package {
import mx.core.*;
public class ManagerSound_snd_collect_key extends SoundAsset {
}
}//package
Section 132
//ManagerSound_snd_door_open (ManagerSound_snd_door_open)
package {
import mx.core.*;
public class ManagerSound_snd_door_open extends SoundAsset {
}
}//package
Section 133
//ManagerSound_snd_menu_bip (ManagerSound_snd_menu_bip)
package {
import mx.core.*;
public class ManagerSound_snd_menu_bip extends SoundAsset {
}
}//package
Section 134
//ManagerSound_snd_meta_buy (ManagerSound_snd_meta_buy)
package {
import mx.core.*;
public class ManagerSound_snd_meta_buy extends SoundAsset {
}
}//package
Section 135
//ManagerSound_snd_planet_dis (ManagerSound_snd_planet_dis)
package {
import mx.core.*;
public class ManagerSound_snd_planet_dis extends SoundAsset {
}
}//package
Section 136
//ManagerSound_snd_player_die (ManagerSound_snd_player_die)
package {
import mx.core.*;
public class ManagerSound_snd_player_die extends SoundAsset {
}
}//package
Section 137
//ManagerSound_snd_sun_explode (ManagerSound_snd_sun_explode)
package {
import mx.core.*;
public class ManagerSound_snd_sun_explode extends SoundAsset {
}
}//package
Section 138
//ManagerSound_snd_turret_shoot (ManagerSound_snd_turret_shoot)
package {
import mx.core.*;
public class ManagerSound_snd_turret_shoot extends SoundAsset {
}
}//package
Section 139
//ManagerSound_track_loop (ManagerSound_track_loop)
package {
import mx.core.*;
public class ManagerSound_track_loop extends SoundAsset {
}
}//package
Section 140
//PauseMenu (PauseMenu)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import zomg.sound.*;
import api.*;
import zomg.gui.*;
public class PauseMenu extends Sprite {
private var sheet_soundButton:Class;
protected var container:Sprite;
protected var quality_med:ZoButton;
protected var quality_low:ZoButton;
protected var quality_hig:ZoButton;
protected var sndFx:ZoButton;
protected var btn:Array;
private var sheet_btn_ghig:Class;
private var bmp_pauseback:Class;
protected var backg:Bitmap;
private var sheet_btn_gmed:Class;
protected var mouseClick:Boolean;// = false
private var sheet_btn_glow:Class;
protected var sndMusic:ZoButton;
public function PauseMenu(s:Stage){
var b:ZoButton;
sheet_btn_glow = PauseMenu_sheet_btn_glow;
sheet_btn_gmed = PauseMenu_sheet_btn_gmed;
sheet_btn_ghig = PauseMenu_sheet_btn_ghig;
bmp_pauseback = PauseMenu_bmp_pauseback;
sheet_soundButton = PauseMenu_sheet_soundButton;
btn = new Array();
container = new Sprite();
super();
var soundPos:Point = new Point(125, 340);
backg = new bmp_pauseback();
container.addChild(backg);
var pt:Point = new Point(140, 170);
var size:Point = new Point(300, 40);
var o:Object = {size:24, font:"futura", embed:true, align:"center", color:0, letterSpace:6};
btn.push(toggleListener(ZoGUI.getStdTextField(size, "CONTINUE", o, pt, container, "backgame")));
btn.push(toggleListener(ZoGUI.getStdTextField(size, "RETRY", o, new Point(pt.x, (pt.y + 30)), container, "retry")));
btn.push(toggleListener(ZoGUI.getStdTextField(size, "HOW TO PLAY", o, new Point(pt.x, (pt.y + 60)), container, "htp")));
btn.push(toggleListener(ZoGUI.getStdTextField(size, "BACK TO MENU", o, new Point(pt.x, (pt.y + 90)), container, "backmenu")));
btn.push(toggleListener(ZoGUI.getStdTextField(size, "ERASE DATA", o, new Point(pt.x, (pt.y + 120)), container, "delete")));
btn.push(toggleListener(ZoGUI.getStdTextField(size, "MORE GAME", o, new Point(pt.x, (pt.y + 150)), container, "more")));
sndFx = new ZoButton(new sheet_soundButton(), new Point(11, 11), "fx", true);
container.addChild(sndFx);
sndFx.addEventListener(MouseEvent.MOUSE_UP, toggleFx);
sndFx.x = 300;
sndFx.y = 399;
sndMusic = new ZoButton(new sheet_soundButton(), new Point(11, 11), "music", true);
container.addChild(sndMusic);
sndMusic.addEventListener(MouseEvent.MOUSE_UP, toggleMusic);
sndMusic.x = 355;
sndMusic.y = sndFx.y;
quality_low = new ZoButton(new sheet_btn_glow(), new Point(21, 11), StageQuality.LOW, true);
container.addChild(quality_low);
quality_low.addEventListener(MouseEvent.MOUSE_UP, quality);
quality_low.x = 158;
quality_med = new ZoButton(new sheet_btn_gmed(), new Point(35, 11), StageQuality.MEDIUM, true);
container.addChild(quality_med);
quality_med.addEventListener(MouseEvent.MOUSE_UP, quality);
quality_med.x = (quality_low.x + 38);
quality_hig = new ZoButton(new sheet_btn_ghig(), new Point(23, 11), StageQuality.HIGH, true);
container.addChild(quality_hig);
quality_hig.addEventListener(MouseEvent.MOUSE_UP, quality);
quality_hig.x = (quality_med.x + 40);
quality_hig.y = (quality_med.y = (quality_low.y = 400));
addChild(container);
quality();
container.x = ((s.stageWidth / 2) - (container.width / 2));
container.y = ((s.stageHeight / 2) - (container.height / 2));
visible = false;
}
protected function quality(e:MouseEvent=null):void{
var btn:ZoButton;
var qual:String = StageQuality.HIGH;
if (e){
qual = e.target.name;
};
Global.s.quality = qual;
if ((((qual == StageQuality.MEDIUM)) || ((qual == StageQuality.LOW)))){
Global.g.useBg = false;
};
if (qual == StageQuality.HIGH){
Global.g.useBg = true;
};
switch (qual){
case StageQuality.LOW:
btn = quality_low;
break;
case StageQuality.MEDIUM:
btn = quality_med;
break;
case StageQuality.HIGH:
btn = quality_hig;
break;
};
quality_low.switchAnim();
quality_med.switchAnim();
quality_hig.switchAnim();
btn.switchAnim("mouseOver");
}
public function pop(flag:Boolean):void{
var ar:Array;
var i:uint;
visible = flag;
if (Global.lvl.currentLevel == 0){
ar = new Array(1, 0, 1, 0, 1, 1);
} else {
ar = new Array(1, 1, 1, 1, 1, 1);
};
i = 0;
while (i < btn.length) {
toggleListener(btn[i], ar[i]);
i++;
};
if (flag){
Global.mouse.symbol.playAnim("menu");
} else {
Global.mouse.symbol.playAnim("idle");
};
addChild(container);
}
protected function out(e:MouseEvent):void{
(e.target as TextField).textColor = 0;
}
protected function toggleFx(e:MouseEvent):void{
ZoSoundEngine.muting(!(ZoSoundEngine.muteFx), ZoSoundEngine.muteMusic);
feedback();
}
public function update():void{
var i:uint;
i = 0;
while (i < btn.length) {
btn[i].update();
i++;
};
sndFx.update();
sndMusic.update();
}
protected function over(e:MouseEvent):void{
(e.target as TextField).textColor = 0xDDDDDD;
}
protected function toggleMusic(e:MouseEvent):void{
ZoSoundEngine.muting(ZoSoundEngine.muteFx, !(ZoSoundEngine.muteMusic));
feedback();
}
protected function button(e:MouseEvent):void{
var unpause:Boolean;
switch (e.target.name){
case "backgame":
unpause = true;
break;
case "backmenu":
Global.lvl.switchLevel(0);
unpause = true;
break;
case "htp":
Global.g.showHtp();
break;
case "retry":
Global.lvl.resetLevel(true);
unpause = true;
break;
case "delete":
Global.g.questionScreen.pop(true);
break;
case "more":
MochiBot.track(this, "5ee274a2", "http://www.ninjakiwi.com/");
break;
};
if (unpause){
Global.g.switchState(Game.UNPAUSE);
};
PauseMenu.feedback();
}
protected function toggleListener(tf:TextField, flag:Boolean=false):TextField{
if (flag){
tf.addEventListener(MouseEvent.MOUSE_OVER, over);
tf.addEventListener(MouseEvent.MOUSE_OUT, out);
tf.addEventListener(MouseEvent.MOUSE_UP, button);
tf.textColor = 0;
} else {
tf.removeEventListener(MouseEvent.MOUSE_OVER, over);
tf.removeEventListener(MouseEvent.MOUSE_OUT, out);
tf.removeEventListener(MouseEvent.MOUSE_UP, button);
tf.textColor = 0x555555;
};
return (tf);
}
public static function feedback():void{
ZoSoundEngine.getSound("bip").playSound();
}
}
}//package
Section 141
//PauseMenu_bmp_pauseback (PauseMenu_bmp_pauseback)
package {
import mx.core.*;
public class PauseMenu_bmp_pauseback extends BitmapAsset {
}
}//package
Section 142
//PauseMenu_sheet_btn_ghig (PauseMenu_sheet_btn_ghig)
package {
import mx.core.*;
public class PauseMenu_sheet_btn_ghig extends BitmapAsset {
}
}//package
Section 143
//PauseMenu_sheet_btn_glow (PauseMenu_sheet_btn_glow)
package {
import mx.core.*;
public class PauseMenu_sheet_btn_glow extends BitmapAsset {
}
}//package
Section 144
//PauseMenu_sheet_btn_gmed (PauseMenu_sheet_btn_gmed)
package {
import mx.core.*;
public class PauseMenu_sheet_btn_gmed extends BitmapAsset {
}
}//package
Section 145
//PauseMenu_sheet_soundButton (PauseMenu_sheet_soundButton)
package {
import mx.core.*;
public class PauseMenu_sheet_soundButton extends BitmapAsset {
}
}//package
Section 146
//Player (Player)
package {
import flash.geom.*;
import flash.display.*;
import zomg.sound.*;
import zomg.*;
import zomg.tools.*;
import flash.ui.*;
public class Player extends ZoSprite {
protected var jumpButton:Boolean;// = false
public var planetLandedOn:Collisionable;
protected var planetLandedGapDir:Point;
protected var arrow:PlayerArrow;
protected var aimTimer:Number;// = 0
public var _collectableZone:Number;// = 0
protected var continueFlying:Number;// = 0
protected var aimTimerColideBox:Number;// = 15
protected var lvl:LevelManager;
protected var jumpMouseButton:Boolean;// = false
protected var inFrontAngle:Number;// = 20
protected var noMove:Boolean;// = true
protected var angleAllow:Number;// = 100
public var planetLandedOnLast:Collisionable;
protected var timer:Number;// = 0
protected var _speed:Number;// = 3
protected var collectableZoneImg:Sprite;
protected var aimTimerDeath:Number;// = 30
protected var colisionRadius:Number;// = 1
protected var debug:DebugTool;
protected var k:ZoKeys;
protected var endPos:Point;
public var retic:ZoSprite;
protected var upgradeMaxSpeed:Number;// = 0
protected var lastCP:Collisionable;
protected var dir:Point;
public var _state:uint;
public var useCamFollow:Boolean;// = true
protected var planetsNearMe:Array;
protected var rayLength:Number;// = 1500
protected var owner:Sprite;
protected var inGame:Boolean;// = false
protected var gateButton:Boolean;// = false
protected var camButton:Boolean;// = false
protected var inExit:Boolean;// = false
protected var planetLandedGap:Point;
protected static var looseSpeedTimerStep:Number = 30;
protected static var collectableZoneStepLoose:Number = 0.3;
protected static var collectableZoneStep:Number = 0.5;
protected static var looseSpeed:Number = 0.5;
protected static var maxSpeed:Number = 10;
public static var FLYING:uint = 1;
public static var MOVE:uint = 7;
public static var JETPACK:uint = 5;
public static var IDLE:uint = 0;
protected static var initSpeed:Number = 8;
public static var EXIT:uint = 4;
protected static var collectableZoneMin:Number = 30;
public static var DEAD:uint = 2;
protected static var addSpeed:Number = 2;
public static var sheet_reticule:Class = Player_sheet_reticule;
protected static var collectableZoneMax:Number = 60;
public static var LANDING:uint = 6;
public static var sheet_avatar:Class = Player_sheet_avatar;
public static var AIMING:uint = 3;
public function Player(owner:Object){
dir = new Point();
collectableZoneImg = new Sprite();
_state = IDLE;
name = "PLAYER";
if ((owner as LevelManager)){
inGame = true;
this.lvl = (owner as LevelManager);
} else {
this.owner = (owner as Sprite);
};
var size:Point = new Point(40, 30);
super(new sheet_avatar(), size, new Point());
symbol.addAnim("idle", size, 22, new Point(0, 0), 5);
symbol.addAnim("jump", size, 4, new Point(1, 0), 5);
symbol.addAnim("land", size, 6, new Point(2, 0), 2);
symbol.addAnim("death", size, 6, new Point(3, 0), 3);
debug = new DebugTool(new Point(-5, -30));
addChild(debug);
k = new ZoKeys(Global.s, new Array(new ZoKey(Keyboard.SPACE, "jump"), new ZoKey(Keyboard.ENTER, "open"), new ZoKey(87, "menu"), new ZoKey(88, "win"), new ZoKey(83, "die")), "player");
arrow = new PlayerArrow(this);
addChild(arrow);
aimTimer = looseSpeedTimerStep;
retic = new ZoSprite(new sheet_reticule(), new Point(45, 45), new Point(), new Point(), 0, true);
retic.name = "PLAYER RETICULE";
retic.mouseChildren = false;
mouseChildren = false;
state = IDLE;
}
public function comparePlanetLanded(planet:Collisionable, last:Boolean=false):Boolean{
if ((((planet == planetLandedOnLast)) && (last))){
return (true);
};
if (((!(last)) && ((planet == planetLandedOn)))){
return (true);
};
return (false);
}
protected function movePlayer(move:Point):void{
position = new Point((this.x + move.x), (this.y + move.y));
Global.g.moveBg(move);
}
protected function jump():void{
if (planetLandedOn){
if (planetLandedOn.isGate()){
lvl.updateMeta();
};
};
state = FLYING;
if (planetLandedOn){
planetLandedOn.hasToDestroy();
};
if (planetLandedOn){
planetLandedOn.mouseActive = false;
};
if (planetLandedOnLast){
planetLandedOnLast.mouseActive = false;
};
planetLandedOn = null;
}
public function set state(v:uint):void{
var planetdir:Point;
_state = v;
switch (v){
case IDLE:
symbol.playAnim("idle");
break;
case FLYING:
noMove = false;
symbol.playAnim("jump");
retic.visible = (arrow.visible = false);
arrow.toggle();
speed = initSpeed;
symbol.rotation = ZoMathTools.getAngleVector180(dir);
fly();
break;
case LANDING:
if (planetLandedOn){
planetdir = ZoMathTools.getDirectionVec(planetLandedOn.position, position);
symbol.rotation = ZoMathTools.getAngleVector180(planetdir);
symbol.playAnim("land", 1);
};
state = AIMING;
break;
case AIMING:
if (symbol.currentAnim == "jump"){
symbol.playAnim("idle");
};
timer = 0;
speed = 0;
colisionRadius = 0.1;
arrow.visible = true;
if (!arrow.active){
arrow.toggle();
};
break;
case DEAD:
if (!Global.lvl.inMenu()){
Global.globalStats.setAchievement("nbDeath", 1, true);
};
ZoSoundEngine.getSound("player_die").playSound();
symbol.playAnim("death", 1);
timer = 0;
break;
case MOVE:
if (planetLandedOn){
endPos = planetLandedOn.position;
} else {
endPos = Global.lvl.endpos;
};
break;
case EXIT:
break;
default:
trace("Plyr switch state error !");
break;
};
}
public function stop(p:Collisionable):void{
var dir:Point;
var radiusNeeded:Number;
var destPt:Point;
speed = 0;
planetLandedOn = p;
if (planetLandedOn.isGate()){
p.clickable(true);
state = MOVE;
} else {
dir = ZoMathTools.getDirectionVec(planetLandedOn.position, position);
radiusNeeded = (p.getRadius() + (size.y / 4));
destPt = new Point((p.x + (radiusNeeded * dir.x)), (p.y + (radiusNeeded * dir.y)));
position = destPt;
planetLandedGap = new Point((x - planetLandedOn.position.x), (y - planetLandedOn.position.y));
state = LANDING;
};
}
public function updateCam():void{
if (useCamFollow){
Global.g.setCam(position);
} else {
Global.g.setCam(new Point());
};
}
public function get speed():Number{
return (_speed);
}
protected function aim():void{
var arrowAngle:Number;
var planetAngle:Number;
var arrowAngleReal:Number;
var pt:Point;
arrow.update();
dir = arrow.getDir();
var canShoot:Boolean;
var dist:Number = 0;
if (planetLandedOn){
arrowAngle = arrow.getRotation();
planetAngle = ZoMathTools.getAngleVector(planetLandedOn.position, position);
arrowAngleReal = (arrowAngle - planetAngle);
if (arrowAngleReal < -180){
arrowAngleReal = (arrowAngleReal + 360);
} else {
if (arrowAngleReal > 180){
arrowAngleReal = (arrowAngleReal - 360);
};
};
arrowAngleReal = Math.abs(arrowAngleReal);
if (arrowAngleReal > angleAllow){
canShoot = false;
};
};
retic.visible = (arrow.visible = canShoot);
if (canShoot){
pt = cursorDestination();
if (pt.length != 0){
dist = ZoMathTools.distance(position, pt);
} else {
dist = rayLength;
};
if (((k.getKeyStateByName("jump")) && (!(jumpButton)))){
jumpButton = true;
jump();
} else {
if (((!(k.getKeyStateByName("jump"))) && (jumpButton))){
jumpButton = false;
};
};
if (((Global.mouse.left) && (!(jumpMouseButton)))){
jumpMouseButton = true;
jump();
} else {
if (((!(Global.mouse.left)) && (jumpMouseButton))){
jumpMouseButton = false;
};
};
retic.position = pt;
};
if (dist >= (rayLength - 10)){
retic.visible = false;
};
if (planetLandedOn){
if (planetLandedOn.isMoving()){
position = new Point((planetLandedOn.position.x + planetLandedGap.x), (planetLandedOn.position.y + planetLandedGap.y));
};
};
}
public function reset(planetOn:Collisionable=null):void{
inExit = false;
noMove = true;
state = AIMING;
collectableZone = collectableZoneMin;
planetLandedOnLast = planetOn;
planetLandedOn = null;
resetDir();
updateCam();
symbol.playAnim("idle");
visible = true;
}
public function get collectableZone():Number{
return (_collectableZone);
}
public function isFlying():Boolean{
if (state == FLYING){
return (true);
};
return (false);
}
override public function set position(pt:Point):void{
_position = pt;
this.x = pt.x;
this.y = pt.y;
}
protected function endLevel():void{
state = IDLE;
Global.lvl.levelDone();
}
protected function fly():void{
var move:Point;
if (inGame){
if (timer < aimTimerColideBox){
timer++;
} else {
colisionRadius = 0.5;
};
if (((!((state == DEAD))) && (Global.lvl.outOfLevel(this)))){
killPlayer(0.4);
};
if (speed < 0){
speed = 0;
};
move = new Point((dir.x * speed), (dir.y * speed));
movePlayer(move);
};
}
public function remove():void{
lvl.removeChild(this);
lvl.removeChild(retic);
}
public function set speed(v:Number):void{
_speed = v;
}
public function get state():uint{
return (_state);
}
protected function getPlanetInFront():Array{
var ptangle:Number;
var dist:Number;
var i:uint;
var ar:Array = lvl.getPlanetInFrustrum();
var planet:Array = new Array();
var pt:Point = new Point();
var elmtPos:Point = new Point();
var arrowAngle:Number = ZoMathTools.getVectorAngle(dir);
var outplanet:Array = new Array();
i = 0;
while (i < ar.length) {
if (((!((ar[i] == planetLandedOn))) && (!((ar[i] == planetLandedOnLast))))){
pt = ZoMathTools.getDirectionVec(position, ar[i].position);
ptangle = ZoMathTools.getVectorAngle(pt);
dist = ZoMathTools.distance(position, ar[i].position);
if (ZoMathTools.isNearValue(arrowAngle, ptangle, ZoMathTools.getAdjAngle(dist, ar[i].getRadius()), true)){
if (ar[i] != planetLandedOn){
planet.push(ar[i]);
};
};
};
i++;
};
return (planet);
}
public function getColisionPoints():Array{
return (getCirclePoints(colisionRadius, 6));
}
public function toggleUseCamera(flag:Boolean=true):void{
useCamFollow = flag;
}
public function set collectableZone(v:Number):void{
_collectableZone = v;
collectableZoneImg.graphics.clear();
collectableZoneImg.graphics.beginFill(0xFF0000, 0.1);
collectableZoneImg.graphics.drawCircle(0, 0, collectableZone);
collectableZoneImg.graphics.endFill();
}
public function setMotion(p:Collisionable, exit:Boolean=false):void{
planetLandedOn = p;
state = MOVE;
if (exit){
inExit = true;
};
}
public function resetDir():void{
symbol.rotation = -90;
}
public function isAlive():Boolean{
if ((((state == FLYING)) || ((state == AIMING)))){
return (true);
};
return (false);
}
public function update():void{
var _local3:Number;
var sp:Number;
var dir:Point;
switch (state){
case IDLE:
break;
case FLYING:
fly();
Global.globalStats.setAchievement("distance", speed, true);
break;
case AIMING:
if (symbol.hasFinishedPlaying("land")){
if (symbol.currentAnim != "idle"){
symbol.playAnim("idle");
};
};
aim();
if (((k.getKeyStateByName("open")) && (!(gateButton)))){
gateButton = true;
} else {
if (((!(k.getKeyStateByName("open"))) && (gateButton))){
gateButton = false;
lvl.gateOpen();
};
};
break;
case DEAD:
if (symbol.hasFinishedPlaying("death")){
visible = false;
timer++;
} else {
if (continueFlying > 0){
speed = (speed - continueFlying);
fly();
};
};
if (timer == aimTimerDeath){
lvl.resetLevel(true);
};
break;
case MOVE:
_local3 = ZoMathTools.distance(position, endPos);
if (_local3 > 5){
if (_local3 > 300){
position = endPos;
} else {
sp = 4;
if (planetLandedOn){
if (planetLandedOn.isCP()){
sp = 5;
};
};
dir = ZoMathTools.getDirectionVec(position, endPos);
movePlayer(new Point((dir.x * sp), (dir.y * sp)));
};
} else {
if (planetLandedOn){
if (planetLandedOn.isGate()){
planetLandedOnLast = planetLandedOn;
planetLandedOn = null;
resetDir();
lvl.updateMeta();
state = AIMING;
} else {
if (planetLandedOn.isCP()){
state = AIMING;
} else {
if (planetLandedOn.isExit()){
endLevel();
};
};
};
} else {
Global.console.addLine("Player > Arrived nowhere DEBUG");
endLevel();
};
};
break;
default:
trace("PLAYER >> main switch error game state");
break;
};
if (Global.isDebug){
if (k.getKeyStateByName("menu")){
Global.lvl.switchLevel(0);
} else {
if (k.getKeyStateByName("die")){
reset();
};
};
};
updateCam();
symbol.update();
}
protected function cursorDestination():Point{
var dist:Number;
var close:int;
var pt:Point;
var i:uint;
var ar:Array = getPlanetInFront();
var endPos:Point = ZoMathTools.destinationPoint(position, dir, rayLength);
if (ar.length > 0){
dist = 10000;
close = -1;
i = 0;
while (i < ar.length) {
if (ZoMathTools.distance(position, ar[i].position) < dist){
dist = ZoMathTools.distance(position, ar[i].position);
close = i;
};
i++;
};
if (close >= 0){
pt = ZoMathTools.circleInter(position, endPos, ar[close].position, ar[close].getRadius());
if (pt.length != 0){
return (pt);
};
};
};
return (new Point());
}
public function killPlayer(dontstop:Number=0.1):void{
if (state != DEAD){
state = DEAD;
continueFlying = dontstop;
};
}
public function isInvincible():Boolean{
if ((((state == EXIT)) || ((noMove == true)))){
return (true);
};
return (false);
}
protected function touchExit():Boolean{
if (ZoMathTools.distance(position, Global.lvl.endpos) < 50){
return (true);
};
return (false);
}
}
}//package
Section 147
//Player_sheet_avatar (Player_sheet_avatar)
package {
import mx.core.*;
public class Player_sheet_avatar extends BitmapAsset {
}
}//package
Section 148
//Player_sheet_reticule (Player_sheet_reticule)
package {
import mx.core.*;
public class Player_sheet_reticule extends BitmapAsset {
}
}//package
Section 149
//PlayerArrow (PlayerArrow)
package {
import flash.geom.*;
import zomg.*;
import zomg.tools.*;
public class PlayerArrow extends ZoSprite {
protected var p:Player;
protected var _state:uint;// = 0
private var sheet:Class;
public static var NO:uint = 1;
public static var OK:uint = 0;
public function PlayerArrow(plyr:Player){
sheet = PlayerArrow_sheet;
p = plyr;
name = "PLAYER ARROW";
active = false;
var size:Point = new Point(25, 25);
super(new sheet(), size, new Point());
symbol.addAnim("yes", size, 1, new Point());
symbol.addAnim("no", size, 1, new Point(0, 1));
addChild(symbol);
state = OK;
symbol.x = symbol.width;
}
public function set state(v:uint):void{
switch (v){
case OK:
visible = true;
symbol.playAnim("yes");
break;
case NO:
visible = false;
symbol.playAnim("no");
break;
};
_state = v;
}
public function getRotation():Number{
if (rotation > 0){
return ((360 - rotation));
};
return (-(rotation));
}
public function update():void{
if (active){
rotate();
};
}
public function get state():uint{
return (_state);
}
public function toggle():Boolean{
toggleActive();
if (!active){
update();
};
return (active);
}
public function getDir():Point{
return (ZoMathTools.normalize(new Point(p.mouseX, p.mouseY)));
}
protected function rotate():void{
var value:Number = (Math.atan2(p.mouseY, p.mouseX) / (Math.PI / 180));
rotation = value;
}
}
}//package
Section 150
//PlayerArrow_sheet (PlayerArrow_sheet)
package {
import mx.core.*;
public class PlayerArrow_sheet extends BitmapAsset {
}
}//package
Section 151
//PreloaderAPI (PreloaderAPI)
package {
import flash.events.*;
import flash.display.*;
import mochi.as3.*;
import flash.utils.*;
import zomg.*;
import zomg.tools.*;
public dynamic class PreloaderAPI extends MovieClip {
private var did_load:Boolean;
public static var GAME_OPTIONS:Object = {id:"b9b4c93784819402", res:"800x600"};
public static var mochi:Boolean = true;
public static var MAIN_CLASS:String = "Main";
public function PreloaderAPI(){
var f:Function;
var opts:Object;
var k:String;
super();
trace(("Preload > API : mochi :" + mochi));
var url:String = this.loaderInfo.loaderURL;
var lock:Boolean;
trace("Preloader > don't use sitelock");
if (lock){
addChild(new DebugFatalError((("SITE LOCKED !\ndomain: \"" + ZoSitelock.domain) + "\" not allowed."), stage));
} else {
if (url.indexOf("kongregate.com") > -1){
new ZoPreloader(this);
} else {
if (_slot1.mochi){
f = function (ev:IOErrorEvent):void{
};
loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
opts = {};
for (k in GAME_OPTIONS) {
opts[k] = GAME_OPTIONS[k];
};
opts.ad_started = function ():void{
did_load = true;
};
opts.ad_finished = function ():void{
var mainClass:Class = Class(getDefinitionByName(MAIN_CLASS));
var app:Object = new (mainClass);
addChild((app as DisplayObject));
};
opts.clip = this;
if (url.indexOf("ile://")){
opts.skip = true;
};
MochiAd.showPreGameAd(opts);
} else {
new ZoPreloader(this);
};
};
};
}
}
}//package
Section 152
//Question (Question)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import zomg.sound.*;
import zomg.gui.*;
public class Question extends Sprite {
protected var timerAim:int;// = 60
protected var no:TextField;
protected var timer:int;// = 0
protected var yes:TextField;
protected var overColor:uint;// = 0xFFFFFF
protected var outColor:uint;// = 0
protected var inactiveColor:uint;// = 0x222222
public static var sheet:Class = Question_sheet;
public function Question(size:Point){
super();
addChild(new sheet());
yes = ZoGUI.getStdTextField(new Point(50, 30), "YES", {font:"futura", embed:true, size:25, letterSpace:1, underline:true, bold:true}, new Point(70, 250), this, "yes");
no = ZoGUI.getStdTextField(new Point(50, 30), "NO", {font:"futura", embed:true, size:25, letterSpace:1, underline:true, bold:true}, new Point(145, 250), this, "no");
visible = false;
x = 75;
y = 30;
}
protected function toggleListener(tf:TextField, flag:Boolean=false):TextField{
if (flag){
tf.addEventListener(MouseEvent.MOUSE_OVER, over);
tf.addEventListener(MouseEvent.MOUSE_OUT, out);
tf.addEventListener(MouseEvent.MOUSE_UP, button);
tf.textColor = outColor;
} else {
tf.removeEventListener(MouseEvent.MOUSE_OVER, over);
tf.removeEventListener(MouseEvent.MOUSE_OUT, out);
tf.removeEventListener(MouseEvent.MOUSE_UP, button);
};
return (tf);
}
public function pop(flag:Boolean=true):void{
var i:uint;
timer = 0;
if (flag){
toggleListener(yes, true);
toggleListener(no, true);
Global.mouse.symbol.playAnim("menuWhite");
} else {
toggleListener(yes, false);
toggleListener(no, false);
Global.mouse.symbol.playAnim("idle");
};
visible = flag;
}
protected function button(e:MouseEvent=null):void{
var unpause:Boolean;
var yes:Boolean;
if (e){
if (e.target.name == "no"){
yes = false;
} else {
if (e.target.name == "yes"){
yes = true;
};
};
};
PauseMenu.feedback();
pop(false);
if (yes){
ZoSoundEngine.getSound("meta_buy").playSound();
Global.globalStats.cookie("clear");
};
}
protected function over(e:MouseEvent):void{
(e.target as TextField).textColor = overColor;
}
protected function out(e:MouseEvent):void{
(e.target as TextField).textColor = outColor;
}
}
}//package
Section 153
//Question_sheet (Question_sheet)
package {
import mx.core.*;
public class Question_sheet extends BitmapAsset {
}
}//package
Section 154
//ResultScreen (ResultScreen)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import api.*;
import zomg.gui.*;
import com.*;
public class ResultScreen extends Sprite {
public var lvlNum:int;// = 0
protected var btn_retry:TextField;
protected var tf_time_best:TextField;
public var newTime:Number;// = 0
public var oldTime:Number;// = 0
protected var tf_cash_current:TextField;
public var lvlToBuild:int;// = 0
protected var outColor:uint;// = 0x111111
protected var myMask:Sprite;
protected var tf_time_current:TextField;
protected var tf_cash_complete:TextField;
protected var img:Sprite;
private var sheet_back:Class;
public var lvlName:String;// = ""
protected var btn_more:TextField;
protected var becomeClickable:uint;// = 20
protected var tf_time_complete:TextField;
protected var tf_cash_best:TextField;
protected var mouseDown:Boolean;// = false
protected var btn_back:TextField;
protected var overColor:uint;// = 0xEEEEEE
protected var clickable:uint;// = 0
public var newCash:int;// = 0
protected var tf_lvlNum:TextField;
public var oldCash:int;// = 0
public function ResultScreen(){
sheet_back = ResultScreen_sheet_back;
img = new Sprite();
myMask = new Sprite();
super();
addChild(new sheet_back());
tf_lvlNum = ZoGUI.getStdTextField(new Point(598, 40), "LVL # COMPLETED", {size:20, font:"futura", embed:true, letterSpace:1, align:"center"}, new Point(0, 155));
addChild(tf_lvlNum);
tf_cash_current = ZoGUI.getStdTextField(new Point(200, 35), "0/0", {size:33, font:"grotesque", embed:true}, new Point(210, 328), this);
tf_cash_best = ZoGUI.getStdTextField(new Point(200, 40), "0/0", {size:33, font:"grotesque", embed:true}, new Point(380, 328), this);
tf_cash_complete = ZoGUI.getStdTextField(new Point(200, 50), "RECORD!", {size:33, font:"grotesque", embed:true, color:0xFFFFFF}, new Point(450, 328), this);
tf_time_current = ZoGUI.getStdTextField(new Point(200, 35), "0'00", {size:33, font:"grotesque", letterSpace:1, embed:true}, new Point(210, 398), this);
tf_time_best = ZoGUI.getStdTextField(new Point(200, 35), "0'00", {size:33, font:"grotesque", letterSpace:1, embed:true}, new Point(380, 398), this);
tf_time_complete = ZoGUI.getStdTextField(new Point(200, 50), "RECORD!", {size:33, font:"grotesque", embed:true, color:0xFFFFFF}, new Point(450, 398), this);
btn_retry = ZoGUI.getStdTextField(new Point(100, 30), "RETRY", {size:25, font:"futura", embed:true, letterSpace:1}, new Point(100, 480), this, "retry");
btn_more = ZoGUI.getStdTextField(new Point(200, 30), "MORE GAMES", {size:25, font:"futura", embed:true, letterSpace:1}, new Point((btn_retry.x + 90), 480), this, "more");
btn_back = ZoGUI.getStdTextField(new Point(200, 30), "CONTINUE", {size:25, font:"futura", embed:true, letterSpace:1}, new Point((btn_retry.x + 280), 480), this, "back");
visible = false;
}
public function init():void{
var cashTotal:int = Global.lvl.getNbCollec(Collectable.CASH, false, true);
tf_lvlNum.text = String((((("LEVEL " + lvlNum) + " ") + lvlName) + "\nCOMPLETED !")).toUpperCase();
tf_cash_best.text = (tf_cash_current.text = ((newCash + " / ") + cashTotal));
if (newCash > oldCash){
tf_cash_complete.visible = true;
} else {
tf_cash_complete.visible = false;
tf_cash_best.text = ((oldCash + " / ") + cashTotal);
};
tf_time_best.text = (tf_time_current.text = ("" + StopWatch.formatTime(newTime)));
if (newTime < oldTime){
tf_time_complete.visible = true;
} else {
tf_time_best.text = ("" + StopWatch.formatTime(oldTime));
tf_time_complete.visible = false;
};
pop(true);
}
protected function toggleListener(tf:TextField, flag:Boolean=false):TextField{
if (flag){
tf.addEventListener(MouseEvent.MOUSE_OVER, over);
tf.addEventListener(MouseEvent.MOUSE_OUT, out);
tf.addEventListener(MouseEvent.MOUSE_UP, button);
tf.textColor = outColor;
} else {
tf.removeEventListener(MouseEvent.MOUSE_OVER, over);
tf.removeEventListener(MouseEvent.MOUSE_OUT, out);
tf.removeEventListener(MouseEvent.MOUSE_UP, button);
};
return (tf);
}
protected function button(e:MouseEvent):void{
var unpause:Boolean;
switch (e.target.name){
case "retry":
lvlToBuild = lvlNum;
break;
case "back":
lvlToBuild = 0;
break;
case "more":
MochiBot.track(this, "5ee274a2", "http://www.ninjakiwi.com/");
break;
};
PauseMenu.feedback();
pop(false);
}
public function pop(flag:Boolean=false):void{
toggleListener(btn_back, flag);
toggleListener(btn_retry, flag);
toggleListener(btn_more, flag);
if (flag){
Global.mouse.symbol.playAnim("menu");
} else {
Global.mouse.symbol.playAnim("idle");
};
visible = flag;
}
protected function out(e:MouseEvent):void{
(e.target as TextField).textColor = outColor;
}
protected function over(e:MouseEvent):void{
(e.target as TextField).textColor = overColor;
}
}
}//package
Section 155
//ResultScreen_sheet_back (ResultScreen_sheet_back)
package {
import mx.core.*;
public class ResultScreen_sheet_back extends BitmapAsset {
}
}//package
Section 156
//Stats (Stats)
package {
import flash.net.*;
public class Stats {
public var achivements:Object;
public var myState:SharedObject;
public var levelUnlocked:Array;
public var lastPlayed:int;// = 0
public var name:String;// = "Stats"
protected var lastLevelNum:int;// = 0
public var levelDone:Array;
public var levelTime:Array;
public var used:int;// = 0
public function Stats(){
levelDone = new Array();
levelUnlocked = new Array();
levelTime = new Array();
super();
lastLevelNum = Global.lvl.countLevel();
if (!cookie("load")){
newCookie();
};
}
public function getRemaining():int{
return ((getAllCount() - getUsed()));
}
public function getUsed():int{
var num:int;
var i:uint;
while (i < levelDone.length) {
if (levelUnlocked[i]){
num = (num + Global.lvl.getPrice(i));
};
i++;
};
return (num);
}
public function levelRemain():int{
var num:int;
var i:uint = 1;
while (i < levelDone.length) {
if (levelDone[i] <= 0){
num++;
};
i++;
};
return (num);
}
public function allLevelDone():Boolean{
var done:Boolean;
var i:uint = 1;
var total:int;
i = 0;
while (i < levelDone.length) {
if (levelDone[i] > 0){
total++;
};
i++;
};
if (Global.kgg){
Global.kgg.k.stats.submit("LevelDone", total);
};
trace(("Level done :" + total));
if (total < lastLevelNum){
done = false;
};
return (done);
}
public function newCookie():void{
levelDone = new Array();
levelUnlocked = new Array();
levelTime = new Array();
var i:uint;
while (i <= lastLevelNum) {
levelDone.push(-1);
levelUnlocked.push(false);
levelTime.push(999999);
i++;
};
achivements = {nbDeath:0, lightSun:0, cash:0, distance:0};
lastPlayed = 0;
used = 0;
Global.console.addLine((((((("New COOKIE ! (nbLvl:" + lastLevelNum) + ",Length:") + levelTime.length) + ",") + levelDone.length) + ")"), "Stats");
cookie("save");
}
public function getAllCount():int{
var nb:int;
var add:int;
var i:int;
while (i < levelDone.length) {
if (levelDone[i] < 0){
add = 0;
} else {
add = levelDone[i];
};
nb = (nb + add);
i++;
};
return (nb);
}
public function setAchievement(what:String="", value:int=0, incr:Boolean=false):void{
if (what.length > 0){
if (incr){
value = (achivements[what] + value);
};
achivements[what] = value;
};
}
public function getAchievement(what:String=""):String{
return (String(achivements[what]));
}
public function cookie(fct:String="load"):Boolean{
switch (fct){
case "load":
myState = SharedObject.getLocal("OLR_galaxy");
if (myState.data.version){
if (myState.data.version == Global.version){
levelDone = myState.data.levelDone;
levelUnlocked = myState.data.levelUnlocked;
levelTime = myState.data.levelTime;
used = myState.data.used;
achivements = myState.data.ach;
lastPlayed = myState.data.last;
Global.console.addLine((("Cookie valid and loaded (v" + myState.data.version) + ")"), "Stats");
if (allLevelDone()){
Global.g.endScreen.showed = true;
};
return (true);
} else {
Global.console.addLine(("Old version cookie : " + myState.data.version), "Stats");
};
} else {
Global.console.addLine("No cookie", "Stats");
};
break;
case "save":
myState = SharedObject.getLocal("OLR_galaxy");
myState.data.version = Global.version;
myState.data.levelDone = levelDone;
myState.data.levelUnlocked = levelUnlocked;
myState.data.levelTime = levelTime;
myState.data.used = used;
myState.data.ach = achivements;
myState.data.last = lastPlayed;
Global.console.addLine("saving cookie", "Stats");
myState.flush();
break;
case "clear":
if (myState){
newCookie();
Global.g.endScreen.showed = false;
Global.g.reset();
Global.lvl.switchLevel(0);
Global.console.addLine("Cookie deleted", name);
};
break;
};
return (false);
}
}
}//package
Section 157
//Unlock (Unlock)
package {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import flash.text.*;
import zomg.sound.*;
import zomg.gui.*;
public class Unlock extends Sprite {
protected var timerAim:int;// = 60
protected var no:TextField;
protected var timer:int;// = 0
protected var need:TextField;
protected var planet:Collisionable;
protected var enterBtn:Boolean;// = false
protected var yes:TextField;
protected var overColor:uint;// = 0xDDDDDD
protected var outColor:uint;// = 0x888888
protected var inactiveColor:uint;// = 0x222222
public static var sheet_unlock:Class = Unlock_sheet_unlock;
public function Unlock(size:Point){
super();
addChild(new sheet_unlock());
need = ZoGUI.getStdTextField(new Point(100, 30), "00", {font:"futura", embed:true, size:25, letterSpace:1, color:0xFFFFFF}, new Point(87, 172), this, "num");
yes = ZoGUI.getStdTextField(new Point(50, 30), "YES", {font:"futura", embed:true, size:25, letterSpace:1, underline:true, bold:true}, new Point(105, 230), this, "yes");
no = ZoGUI.getStdTextField(new Point(50, 30), "NO", {font:"futura", embed:true, size:25, letterSpace:1, underline:true, bold:true}, new Point(185, 230), this, "no");
visible = false;
x = ((size.x / 2) - (width / 2));
y = ((size.y / 2) - (height / 2));
}
public function pop(pla:Collisionable=null, flag:Boolean=true, canUnlock:Boolean=false):void{
var i:uint;
timer = 0;
if (flag){
planet = pla;
if (canUnlock){
toggleListener(yes, true);
stage.addEventListener(KeyboardEvent.KEY_UP, pressOk);
} else {
yes.textColor = inactiveColor;
};
toggleListener(no, true);
need.text = String(planet.need);
Global.mouse.symbol.playAnim("menuWhite");
} else {
toggleListener(yes, false);
toggleListener(no, false);
stage.removeEventListener(KeyboardEvent.KEY_UP, pressOk);
Global.mouse.symbol.playAnim("idle");
};
visible = flag;
}
protected function over(e:MouseEvent):void{
(e.target as TextField).textColor = overColor;
}
protected function out(e:MouseEvent):void{
(e.target as TextField).textColor = outColor;
}
protected function toggleListener(tf:TextField, flag:Boolean=false):TextField{
if (flag){
tf.addEventListener(MouseEvent.MOUSE_OVER, over);
tf.addEventListener(MouseEvent.MOUSE_OUT, out);
tf.addEventListener(MouseEvent.MOUSE_UP, button);
tf.textColor = outColor;
} else {
tf.removeEventListener(MouseEvent.MOUSE_OVER, over);
tf.removeEventListener(MouseEvent.MOUSE_OUT, out);
tf.removeEventListener(MouseEvent.MOUSE_UP, button);
};
return (tf);
}
protected function button(e:MouseEvent=null):void{
var unpause:Boolean;
var yes:Boolean;
if (e){
if (e.target.name == "no"){
yes = false;
} else {
if (e.target.name == "yes"){
yes = true;
};
};
};
if (yes){
ZoSoundEngine.getSound("meta_buy").playSound();
Global.lvl.setPlanetPaid(planet);
};
PauseMenu.feedback();
pop(null, false);
}
protected function pressOk(e:Event):void{
button();
}
}
}//package
Section 158
//Unlock_sheet_unlock (Unlock_sheet_unlock)
package {
import mx.core.*;
public class Unlock_sheet_unlock extends BitmapAsset {
}
}//package