STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
232775
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2637 · P5274

<div style="position:absolute;top:-99px;left:-99px;"><img src="https://tools.swfchan.com/stathit.asp?noj=FRM61617369-9DC&rnd=61617369" width="1" height="1"></div>

armorgames areas-658.swf

This is the info page for
Flash #263240

(Click the ID number above for more basic data on this flash file.)


Text
(you shouldn't see this.)

ActionScript [AS3]

Section 1
//MainTimeline (Areas_fla.MainTimeline) package Areas_fla { import flash.events.*; import flash.display.*; import flash.media.*; import flash.utils.*; import flash.text.*; import flash.system.*; import flash.ui.*; import flash.net.*; import flash.filters.*; import flash.errors.*; import flash.geom.*; import adobe.utils.*; import flash.accessibility.*; import flash.external.*; import flash.printing.*; import flash.xml.*; public dynamic class MainTimeline extends MovieClip { public var menu:ContextMenu; public var MOA:MotherOfAll; public function MainTimeline(){ addFrameScript(0, frame1, 2, frame3); } public function createLoader():void{ var loader:LoadingScreen; loader = new LoadingScreen(); this.addChild(loader); loader.init(550, 550); loader.finishedLoading = function (){ removeEventListener("enterFrame", loader.run); loader.parent.removeChild(loader); gotoAndStop(3); }; addEventListener("enterFrame", loader.run, false, 0, true); } function frame3(){ stop(); createMotherOfAll(); } function frame1(){ createLoader(); menu = new ContextMenu(); menu.hideBuiltInItems(); menu.addEventListener(ContextMenuEvent.MENU_SELECT, hideMouse, false, 0, true); this.contextMenu = menu; stop(); } public function hideMouse(_arg1){ Mouse.hide(); } public function createMotherOfAll(){ MOA = new MotherOfAll(); this.addChild(MOA); MOA.init(550, 550); addEventListener("enterFrame", MOA.run, false, 0, true); } } }//package Areas_fla
Section 2
//KongregateEvent (com.kongregate.as3.client.events.KongregateEvent) package com.kongregate.as3.client.events { import flash.events.*; public class KongregateEvent extends Event { public static const COMPLETE:String = "component_api_available"; public function KongregateEvent(_arg1:String){ super(_arg1); } } }//package com.kongregate.as3.client.events
Section 3
//AbstractShadowService (com.kongregate.as3.client.services.AbstractShadowService) package com.kongregate.as3.client.services { import flash.events.*; public class AbstractShadowService extends EventDispatcher { protected function alert(_arg1:String, _arg2:String, _arg3="", _arg4:String=""):void{ trace(((((((("Kongregate API: " + _arg1) + ".") + _arg2) + "(") + _arg3) + ") ") + _arg4)); } } }//package com.kongregate.as3.client.services
Section 4
//HighScoreServiceShadow (com.kongregate.as3.client.services.HighScoreServiceShadow) package com.kongregate.as3.client.services { public class HighScoreServiceShadow extends AbstractShadowService implements IHighScoreServices { private var mode:String; public function HighScoreServiceShadow(){ mode = ""; } public function submit(_arg1:Number, _arg2:String=null):void{ alert("IHighScoreServices", "submit", arguments); } public function connect():Boolean{ alert("IKongregateServices", "connect"); return (true); } public function requestList(_arg1:Function):void{ alert("IHighScoreServices", "requestList", "", (("[Mode: " + mode) + "]")); _arg1({success:false}); } public function setMode(_arg1:String):void{ alert("IHighScoreServices", "setMode", arguments); this.mode = _arg1; } } }//package com.kongregate.as3.client.services
Section 5
//IHighScoreServices (com.kongregate.as3.client.services.IHighScoreServices) package com.kongregate.as3.client.services { public interface IHighScoreServices { function setMode(_arg1:String):void; function submit(_arg1:Number, _arg2:String=null):void; function requestList(_arg1:Function):void; } }//package com.kongregate.as3.client.services
Section 6
//IKongregateServices (com.kongregate.as3.client.services.IKongregateServices) package com.kongregate.as3.client.services { import flash.events.*; public interface IKongregateServices extends IEventDispatcher { function getPlayerInfo(_arg1:Function):void; function connect(_arg1:Number=-1):Boolean; } }//package com.kongregate.as3.client.services
Section 7
//IStatServices (com.kongregate.as3.client.services.IStatServices) package com.kongregate.as3.client.services { public interface IStatServices { function submitArray(_arg1:Array):void; function submit(_arg1:String, _arg2:Number):void; } }//package com.kongregate.as3.client.services
Section 8
//IUserServices (com.kongregate.as3.client.services.IUserServices) package com.kongregate.as3.client.services { public interface IUserServices { function getName():String; function getPlayerInfo(_arg1:Function):void; } }//package com.kongregate.as3.client.services
Section 9
//KongregateServiceShadow (com.kongregate.as3.client.services.KongregateServiceShadow) package com.kongregate.as3.client.services { public class KongregateServiceShadow extends AbstractShadowService implements IKongregateServices { public function getName():String{ alert("IKongregateServices", "getName"); return ("Guest"); } public function connect(_arg1:Number=-1):Boolean{ alert("IKongregateServices", "connect", arguments); return (true); } public function getPlayerInfo(_arg1:Function):void{ alert("IKongregateServices", "getPlayerInfo"); _arg1(new Object()); } } }//package com.kongregate.as3.client.services
Section 10
//StatServiceShadow (com.kongregate.as3.client.services.StatServiceShadow) package com.kongregate.as3.client.services { public class StatServiceShadow extends AbstractShadowService implements IStatServices { public function submitArray(_arg1:Array):void{ alert("IStatServices", "submitArray", arguments); } public function submit(_arg1:String, _arg2:Number):void{ alert("IStatServices", "submitStat", arguments); } } }//package com.kongregate.as3.client.services
Section 11
//UserServiceShadow (com.kongregate.as3.client.services.UserServiceShadow) package com.kongregate.as3.client.services { public class UserServiceShadow extends AbstractShadowService implements IUserServices { public function getName():String{ alert("UserService", "getName"); return ("Guest"); } public function getPlayerInfo(_arg1:Function):void{ alert("UserService", "getPlayerInfo"); _arg1({isGuest:true, name:"Guest", points:0, level:0, isMode:false, isAdmin:false, isDeveloper:false, avatarPath:"", chatAvatarPath:""}); } } }//package com.kongregate.as3.client.services
Section 12
//IAPIBootstrap (com.kongregate.as3.client.IAPIBootstrap) package com.kongregate.as3.client { import flash.events.*; import flash.display.*; public interface IAPIBootstrap { function init(_arg1:Event=null, _arg2:Stage=null):void; function hideLog():void; function showLog(_arg1:int=0):void; } }//package com.kongregate.as3.client
Section 13
//KongregateAPI (com.kongregate.as3.client.KongregateAPI) package com.kongregate.as3.client { import flash.events.*; import flash.display.*; import com.kongregate.as3.client.services.*; import com.kongregate.as3.client.events.*; import flash.utils.*; import flash.system.*; import flash.net.*; import flash.errors.*; public class KongregateAPI extends Sprite { private const VERSION:Number = 1; private var loader:Loader; private var loadedDomain:ApplicationDomain; private static const CLASS_USER:String = "com.kongregate.as3.client.services.UserServices"; private static const CLASS_STATS:String = "com.kongregate.as3.client.services.StatServices"; private static const CLASS_SERVICES:String = "com.kongregate.as3.client.services.KongregateServices"; private static const CLASS_SCORES:String = "com.kongregate.as3.client.services.HighScoreServices"; private static const DEBUG_API_URL:String = "//Linuxpc/kongregate/public/flash/API_AS3.swf"; private static var _connected:Boolean; private static var kUser:IUserServices; private static var _loaded:Boolean; private static var kServices:IKongregateServices; private static var kScores:IHighScoreServices; private static var mInstance:KongregateAPI; private static var kStats:IStatServices; private static var kAPI:IAPIBootstrap; public function KongregateAPI(){ if (mInstance != null){ throw (new Error("Warning: KongregateAPI has been added to stage more than once or accessed improperly. Use getInstance() or a stage reference to access.")); }; mInstance = this; this.addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true); } public function get loaded():Boolean{ return (_loaded); } public function get connected():Boolean{ return (_connected); } private function alertConnected(_arg1:TimerEvent=null):void{ var _local2:KongregateEvent; var _local3:Boolean; _local2 = new KongregateEvent(KongregateEvent.COMPLETE); _local3 = this.dispatchEvent(_local2); } private function init(_arg1:Event):void{ var _local2:Object; var _local3:String; var _local4:URLRequest; var _local5:LoaderContext; this.removeEventListener(Event.ADDED_TO_STAGE, init); _loaded = false; _connected = false; _local2 = LoaderInfo(root.loaderInfo).parameters; _local3 = _local2.api_path; if (_local3 == null){ trace("Alert: Kongregate API could not be loaded, due to local testing. API will load when the game is uploaded."); createShadowServices(); return; }; Security.allowDomain("*.kongregate.com"); Security.allowDomain("kongregatetrunk.com"); _local4 = new URLRequest(_local3); _local5 = new LoaderContext(false); _local5.applicationDomain = ApplicationDomain.currentDomain; _local5.securityDomain = SecurityDomain.currentDomain; loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); loader.load(_local4, _local5); } public function get api():IAPIBootstrap{ return (kAPI); } private function loadComplete(_arg1:Event):void{ getServices(); } public function get scores():IHighScoreServices{ return (kScores); } private function ioErrorHandler(_arg1:IOErrorEvent):void{ throw (new IOError(("API file not found. " + _arg1))); } public function get services():IKongregateServices{ return (kServices); } public function get stats():IStatServices{ return (kStats); } private function createShadowServices():void{ var _local1:Timer; trace(">>> Kongregate Shadow Services instantiated for local development.."); kServices = new KongregateServiceShadow(); kScores = new HighScoreServiceShadow(); kStats = new StatServiceShadow(); kUser = new UserServiceShadow(); _local1 = new Timer(200, 1); _local1.addEventListener(TimerEvent.TIMER_COMPLETE, alertConnected); _local1.start(); _connected = true; } public function get user():IUserServices{ return (kUser); } private function getServices():void{ var _local1:ApplicationDomain; var _local2:*; var _local3:*; var _local4:*; var _local5:*; _local1 = ApplicationDomain.currentDomain; kAPI = IAPIBootstrap(loader.getChildAt(0)); this.addChild(loader); _local2 = _local1.getDefinition(CLASS_SERVICES); trace(_local2); kServices = _local2.getInstance(); _local3 = _local1.getDefinition(CLASS_SCORES); kScores = _local3.getInstance(); _local4 = _local1.getDefinition(CLASS_STATS); kStats = _local4.getInstance(); _local5 = _local1.getDefinition(CLASS_USER); kUser = _local5.getInstance(); kServices.connect(VERSION); _loaded = true; _connected = true; alertConnected(); } public static function getInstance():KongregateAPI{ if (!mInstance){ throw (new IllegalOperationError("You must add the Kongregate API component to the stage before attempting to access it.")); }; return (mInstance); } } }//package com.kongregate.as3.client
Section 14
//aMath (aMath) package { class aMath { public static function atan(_arg1:Number, _arg2:Number):Number{ return (r2d(Math.atan2(_arg1, _arg2))); } public static function tan(_arg1:Number):Number{ return (Math.tan(d2r(_arg1))); } public static function random(_arg1:Number, _arg2:Number=0):Number{ _arg1 = (_arg1 - _arg2); return ((_arg2 + Math.round((Math.random() * _arg1)))); } public static function r2d(_arg1:Number):Number{ return (((_arg1 * 180) / Math.PI)); } public static function acos(_arg1:Number):Number{ return (r2d(Math.acos(_arg1))); } public static function cos(_arg1:Number):Number{ return (Math.cos(d2r(_arg1))); } public static function subA(_arg1:Number, _arg2:Number){ var _local3:Number; _local3 = ((_arg2 - _arg1) % 360); if (_local3 > 180){ _local3 = (_local3 - 360); } else { if (_local3 < -180){ _local3 = (_local3 + 360); }; }; return (_local3); } public static function d2r(_arg1:Number):Number{ return (((_arg1 / 180) * Math.PI)); } public static function subR(_arg1:Number, _arg2:Number){ var _local3:Number; _local3 = ((_arg2 - _arg1) % (Math.PI * 2)); if (_local3 > Math.PI){ _local3 = (_local3 - (Math.PI * 2)); } else { if (_local3 < -(Math.PI)){ _local3 = (_local3 + (Math.PI * 2)); }; }; return (_local3); } public static function asin(_arg1:Number):Number{ return (r2d(Math.asin(_arg1))); } public static function sin(_arg1:Number):Number{ return (Math.sin(d2r(_arg1))); } public static function limit(_arg1:Number, _arg2:Number, _arg3:Number):Number{ return (Math.min(Math.max(_arg2, _arg1), _arg3)); } public static function findDist(_arg1:Object, _arg2:Object):Number{ var _local3:Number; var _local4:Number; _local3 = (_arg1.x - _arg2.x); _local4 = (_arg1.y - _arg2.y); return (Math.sqrt(((_local3 * _local3) + (_local4 * _local4)))); } } }//package
Section 15
//Area (Area) package { import flash.display.*; public class Area extends MovieClip { private var field:Field; public var hitTestWithPlayer:Boolean; public var active:Boolean; private var counter:Counter; public var hitTestWithBullets:Boolean; public var expired:Function; private var cont:Container; public var demoMode:Boolean; public var hitTestWithEvils:Boolean; protected var lifeSpan:uint; private var MrNumber:Number; private var phase:uint; public var radius:Number; public var type:uint; private var minimap:Minimap; private var MsNumber:Number; public var ready:Function; private var laser:Laser; private var angle:Number; private var MrEvil:Evil; private static const COMPRESSOR_DELAY:int = 10; public static const R2D:Number = 57.2957795130823; public static const PI:Number = 3.14159265358979; override public function stop():void{ var _local1:*; var _local2:*; _local2 = 0; while (_local2 < numChildren) { _local1 = getChildAt(_local2); if (_local1.hasOwnProperty("stop")){ _local1.stop(); }; _local2++; }; } public function init(){ active = true; setRadius(50); phase = 0; lifeSpan = (60 * 20); alpha = 0; demoMode = false; } public function link(_arg1:Field, _arg2:Container){ field = _arg1; cont = _arg2; } private function teleportBullet(_arg1:Bullet, _arg2:Evil):void{ var _local3:BulletTeleporter; var _local4:Number; var _local5:Number; var _local6:Explosion; if (_arg2){ _arg1.registerArea(this); _local3 = field.createOO("bulletTeleporter", "underlay"); _local4 = (_arg2.radius + 20); _local5 = (Math.atan2((_arg2.y - y), (_arg2.x - x)) + (((Math.random() * 60) - 30) / R2D)); _local3.setup(_arg1.x, _arg1.y, (_arg1.radius * 5)); _arg1.x = (_arg2.x - (_local4 * Math.cos(_local5))); _arg1.y = (_arg2.y - (_local4 * Math.sin(_local5))); _arg1.rotation = (_local5 * R2D); _arg1.updateSpeeds(); _arg1.increaseLifeSpan(15); _arg1.bonusDamage = (_arg1.bonusDamage + 10); _local6 = field.createOO("explosion", "overlay"); _local6.setup(_arg1.x, _arg1.y, (_arg1.radius + 10), _arg1.damage, 7); }; } private function cordsOnField(_arg1:Number, _arg2:Number):Boolean{ var _local3:Number; _local3 = field.radius; return ((((_arg1 * _arg1) + (_arg2 * _arg2)) < (_local3 * _local3))); } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } private function createRandomLaser():void{ var _local1:Laser; var _local2:Number; _local2 = ((Math.random() * 2) * PI); _local1 = field.createOO("laser", "overlay"); _local1.setup((x + (radius * Math.cos(_local2))), (y + (radius * Math.sin(_local2))), _local2, ((MrNumber / 40) + (Math.random() * 20))); _local1.scaleY = (_local1.scaleY * 1.5); _local1.addTimer(int((3 + (Math.random() * 5)))); _local1.rotating = true; _local1.fire(); } override public function play():void{ var _local1:*; var _local2:*; _local2 = 0; while (_local2 < numChildren) { _local1 = getChildAt(_local2); if (_local1.hasOwnProperty("play")){ _local1.play(); }; _local2++; }; } private function attractEvil(_arg1, _arg2:int, _arg3:Array){ var _local4:Number; var _local5:Number; var _local6:Number; _local4 = (((x + ((Math.random() * radius) * 2)) - radius) - _arg1.x); _local5 = (((y + ((Math.random() * radius) * 2)) - radius) - _arg1.y); _local6 = ((_arg1.radius * _arg1.radius) / 100); _local4 = ((10 * _local4) / (1000 * _local6)); _local5 = ((10 * _local5) / (1000 * _local6)); if (_local4 > 0.05){ _local4 = 0.05; } else { if (_local4 < -0.05){ _local4 = -0.05; }; }; if (_local5 > 0.05){ _local5 = 0.05; } else { if (_local5 < -0.05){ _local5 = -0.05; }; }; _arg1.push(_local4, _local5); } private function setGraphic(_arg1:Number){ this.gotoAndStop(_arg1); } private function shrinkEvil(_arg1, _arg2:int, _arg3:Array){ if (_arg1.active){ _arg1.setRadius(Math.max((_arg1.desiredRadius - ((_arg1.desiredRadius / 1000) * MrNumber)), 20)); }; } public function hitPlayer(_arg1:Player){ switch (type){ case 4: setRadius((radius + 0.5)); break; case 16: createRandomBullets(2); break; case 19: createPushGoo(_arg1.x, _arg1.y, (_arg1.rotation + 180)); _arg1.push((15 * Math.cos((_arg1.rotation / R2D))), (15 * Math.sin((_arg1.rotation / R2D)))); _arg1.bulletMode = true; break; }; } private function createPushGoo(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Goo; var _local5:uint; _local5 = 0; while (_local5 < 5) { _local4 = field.createOO("goo", "ground"); _local4.setup(_arg1, _arg2, (5 + (Math.random() * 5)), (_arg3 + (((Math.random() * 60) - 30) / R2D))); _local4.setFade(0.05); _local4.setShrink(1.07); _local4.setSlowdown(0.92); _local4.alpha = 0.5; _local4.draw(7, 10, 2, 0xFFFFFF, 0xFFFFFF, 0); _local5++; }; } private function fixPosition():void{ var _local1:Number; var _local2:Number; _local1 = (field.radius - this.radius); if (((x * x) + (y * y)) > (_local1 * _local1)){ _local2 = Math.atan2(y, x); x = (_local1 * Math.cos(_local2)); y = (_local1 * Math.sin(_local2)); }; } public function hitBullet(_arg1:Bullet){ var _local2:Laser; var _local3:Number; var _local4:Spirit; var _local5:Explosion; switch (type){ case 1: _arg1.rotation = (_arg1.rotation + 6); _arg1.updateSpeeds(); break; case 2: _arg1.rotation = (_arg1.rotation - 6); _arg1.updateSpeeds(); break; case 3: _arg1.setLevel((_arg1.level + 0.6)); break; case 5: _local2 = field.createOO("laser", "overlay"); _local2.setup((x + (radius * Math.cos((_arg1.rotation / R2D)))), (y + (radius * Math.sin((_arg1.rotation / R2D)))), (_arg1.rotation / R2D), (_arg1.damage * 2)); _local2.fire(); _arg1.active = false; break; case 6: if (!_arg1.hasRegisteredArea(this)){ splitBullet(_arg1); }; break; case 7: _arg1.expireTo(x, y); _arg1.active = false; counter.value = (counter.value + ((_arg1.damage * 12) / Math.sqrt(counter.value))); break; case 8: if (_arg1.targetEvil){ pushBulletToTarget(_arg1, _arg1.targetEvil); } else { pushBulletToTarget(_arg1, findNearestEvil(_arg1)); }; break; case 9: _local3 = ((Math.atan2((_arg1.y - y), (_arg1.x - x)) - angle) % (PI * 2)); if (_local3 > PI){ _local3 = (_local3 - (PI * 2)); } else { if (_local3 < -(PI)){ _local3 = (_local3 + (PI * 2)); }; }; if (_local3 > 0){ angle = (angle + (0.5 / R2D)); } else { if (_local3 < 0){ angle = (angle - (0.5 / R2D)); }; }; _arg1.expireTo(x, y); _arg1.active = false; break; case 10: _local4 = field.createOO("spirit", "overlay"); _local4.inherit(_arg1); _arg1.kill(); break; case 11: _local5 = field.createOO("explosion", "overlay"); _local5.setup((x + (radius * Math.cos((_arg1.rotation / R2D)))), (y + (radius * Math.sin((_arg1.rotation / R2D)))), (_arg1.radius * 5), (_arg1.damage / 5), 50); _local5.push(((_arg1.speed * 2) * Math.cos((_arg1.rotation / R2D))), ((_arg1.speed * 2) * Math.sin((_arg1.rotation / R2D)))); _local5.expand(5); _arg1.active = false; break; case 12: MrNumber = _arg1.damage; field.evils.L.forEach(attractEvil); break; case 13: MrNumber = (_arg1.damage * 1.5); field.evils.L.forEach(shrinkEvil); _arg1.expireTo(x, y); _arg1.active = false; break; case 15: if ((((MrNumber <= 0)) && (!(_arg1.hasRegisteredArea(this))))){ teleportBullet(_arg1, MrEvil); MrNumber = 2; }; break; case 17: MrNumber = (MrNumber + _arg1.damage); _arg1.expireTo(x, y); _arg1.active = false; break; case 18: if (!_arg1.explosive){ _arg1.bouncy = true; _arg1.increaseLifeSpan(5); }; break; case 20: if (_arg1.hasRegisteredArea(this)){ if (!_arg1.compressed){ _arg1.freeze = true; }; } else { if (Math.random() < 0.05){ _arg1.registerArea(this); }; }; break; }; } public function setVar(_arg1:String, _arg2):void{ this[_arg1] = _arg2; } public function kill():void{ if (counter){ removeChild(counter); counter = null; }; if (laser){ laser.kill(); laser = null; }; if (minimap){ minimap.kill(); removeChild(minimap); minimap = null; }; MrEvil = null; expired = null; ready = null; } public function run(){ switch (phase){ case 0: act(); alpha = (alpha + 0.05); if (alpha >= 1){ phase = 1; if (((demoMode) && (Boolean(ready)))){ ready(); }; }; break; case 1: act(); lifeSpan--; if (lifeSpan <= 120){ alpha = (alpha - 0.005); if (lifeSpan == 0){ expire(); }; }; break; case 2: alpha = (alpha - 0.01); if (alpha <= 0){ kill(); }; break; }; } public function act(){ var _local1:Number; switch (type){ case 4: if (radius > 100){ _local1 = (radius * radius); setRadius(((radius - (_local1 / 500000)) - MrNumber)); }; MrNumber = 0; break; case 9: laser.setup((x + (radius * Math.cos(angle))), (y + (radius * Math.sin(angle))), (angle + (((Math.random() * 2) - 1) / R2D)), (40 + (Math.random() * 10)), true); laser.scaleY = (laser.scaleY * 3); break; case 14: minimap.run(); break; case 15: MrNumber--; if ((((MsNumber <= 0)) || (((MrEvil) && (!(MrEvil.active)))))){ MrEvil = findNearestEvil(); MsNumber = 120; }; MsNumber--; break; case 17: if ((Math.random() * 750) < MrNumber){ createRandomLaser(); }; if (MrNumber > 0){ MrNumber = (MrNumber * 0.97); }; break; case 20: if (MrNumber <= 0){ compressBullets(); MrNumber = COMPRESSOR_DELAY; }; MrNumber--; break; }; } private function aimBullet(_arg1:Bullet, _arg2:Number, _arg3:Number){ var _local4:Number; var _local5:Number; var _local6:Number; _local4 = (_arg2 - _arg1.x); _local5 = (_arg3 - _arg1.y); _local6 = Math.atan2(_local5, _local4); _arg1.rotation = (_local6 * R2D); _arg1.updateSpeeds(); } private function findNearestEvil(_arg1=null):Evil{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Array; var _local7:Evil; var _local8:String; var _local9:Evil; if (_arg1 == null){ _arg1 = this; }; _local5 = (field.radius * 2); _local6 = field.evils.L; for (_local8 in _local6) { _local9 = _local6[_local8]; if (_local9.active){ _local2 = (_local9.x - _arg1.x); _local3 = (_local9.y - _arg1.y); _local4 = ((Math.sqrt(((_local2 * _local2) + (_local3 * _local3))) - _arg1.radius) - _local9.radius); if (_local4 < _local5){ _local7 = _local9; _local5 = _local4; }; }; }; return (_local7); } private function createAttractionBlobs():void{ var _local1:Blob; var _local2:Number; var _local3:Number; _local1 = field.createOO("blob", "ground"); _local2 = ((Math.random() * PI) * 2); _local3 = (15 + (Math.random() * 30)); _local1.setup((x + (_local3 * Math.cos(_local2))), (y + (_local3 * Math.sin(_local2))), 10, 0, 0); _local1.setSlowdown(1.01); _local1.alpha = 0; _local1.setFade(-0.1); _local1.setShrink(0.73); _local1.polarPush((_local2 + PI), 3); } private function expire(){ var _local1:BulletCompressor; switch (type){ case 7: explode((counter.value + this.radius)); removeChild(counter); counter = null; break; case 9: laser.active = false; break; case 14: minimap = null; break; case 20: _local1 = field.createOO("bulletCompressor", "ground"); _local1.setup(x, y, radius); break; }; active = false; phase = 2; if (demoMode){ callEvent("expired"); }; } public function setRadius(_arg1:Number){ radius = _arg1; scaleX = (radius / 50); scaleY = (radius / 50); } public function hitEvil(_arg1:Evil){ switch (type){ case 4: _arg1.shrink(10); MrNumber = (MrNumber + 0.2); break; case 20: _arg1.shrink(20); setRadius((radius * 0.99)); break; }; } public function applyType(_arg1:uint){ fixPosition(); setGraphic(_arg1); switch (_arg1){ case 1: setTests(true, false, false); break; case 2: setTests(true, false, false); break; case 3: setTests(true, false, false); break; case 4: setTests(false, true, true); MrNumber = 0; break; case 5: setTests(true, false, false); break; case 6: setTests(true, false, false); break; case 7: setTests(true, false, false); counter = new Counter(); this.addChild(counter); counter.init(); counter.setRadius(8); counter.value = 1; lifeSpan = (lifeSpan / 2); break; case 8: setTests(true, false, false); break; case 9: setTests(true, false, false); angle = ((Math.random() * PI) * 2); laser = field.createOO("laser", "overlay"); laser.setup((x + (radius * Math.cos(angle))), (y + (radius * Math.sin(angle))), angle, (20 + (Math.random() * 20)), true); break; case 10: setTests(true, false, false); break; case 11: setTests(true, false, false); break; case 12: setTests(true, false, false); break; case 13: setTests(true, false, false); break; case 14: setTests(false, false, false); minimap = new Minimap(); this.addChild(minimap); minimap.link(field); minimap.init(); minimap.setRadius(50); rotation = 0; break; case 15: setTests(true, false, false); MrNumber = 0; MsNumber = 0; break; case 16: setTests(false, false, true); break; case 17: setTests(true, false, false); MrNumber = 0; break; case 18: setTests(true, false, false); break; case 19: setTests(false, false, true); break; case 20: setTests(true, false, false); MrNumber = COMPRESSOR_DELAY; break; default: throw (new Error((("cannot set area type to " + _arg1) + " - no such type."))); }; } public function setType(_arg1:uint){ type = _arg1; applyType(_arg1); if (demoMode){ lifeSpan = 4; }; } private function pushEvil(_arg1, _arg2:int, _arg3:Array){ if (_arg1.active){ _arg1.push(((MrNumber * 100) / _arg1.radius), ((MsNumber * 100) / _arg1.radius)); }; } private function pushBulletToTarget(_arg1:Bullet, _arg2:Evil):void{ var _local3:Number; var _local4:Number; var _local5:Number; if (_arg2){ _local3 = (_arg2.x - _arg1.x); _local4 = (_arg2.y - _arg1.y); _local5 = (Math.atan2(_local4, _local3) + (((Math.random() * 30) - 15) / R2D)); _arg1.targetEvil = _arg2; _arg1.push((1 * Math.cos(_local5)), (1 * Math.sin(_local5))); _arg1.updateSpeeds(true); _arg1.explosive = true; }; } private function createRandomBullets(_arg1:uint):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:int; var _local6:Bullet; var _local7:uint; _local7 = 0; while (_local7 < _arg1) { do { _local2 = (((Math.random() * field.radius) * 2) - field.radius); _local3 = (((Math.random() * field.radius) * 2) - field.radius); } while (!(cordsOnField(_local2, _local3))); _local4 = ((Math.random() * PI) * 2); _local5 = ((Math.random() * 10) + 1); _local6 = field.createBullet(_local2, _local3, _local4, _local5); _local6.increaseLifeSpan(-55); _local6.bonusDamage = 10; _local6 = field.createBullet(_local2, _local3, (_local4 - PI), _local5); _local6.increaseLifeSpan(-55); _local6.bonusDamage = 10; _local7++; }; } private function dumbFindNearestEvil(_arg1=null):Evil{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Array; var _local7:Evil; var _local8:String; var _local9:Evil; if (_arg1 == null){ _arg1 = this; }; _local5 = (field.radius * 2); _local6 = field.evils.L; for (_local8 in _local6) { _local9 = _local6[_local8]; if (_local9.active){ _local2 = (_local9.x - _arg1.x); _local3 = (_local9.y - _arg1.y); _local4 = Math.sqrt(((_local2 * _local2) + (_local3 * _local3))); if (_local4 < _local5){ _local7 = _local9; _local5 = _local4; }; }; }; return (_local7); } private function splitBullet(_arg1:Bullet):void{ var _local2:Number; var _local3:Bullet; _arg1.registerArea(this); _local2 = 3; _local3 = field.createBullet(_arg1.x, _arg1.y, ((_arg1.rotation + _local2) / R2D), _arg1.level); _local3.setDNA(_arg1.getDNA()); _arg1.rotation = (_arg1.rotation - _local2); _local3.updateSpeeds(); _arg1.updateSpeeds(); } private function explode(_arg1:Number):void{ var _local2:Explosion; _local2 = field.createOO("explosion", "overlay"); _local2.setup(x, y, (_arg1 / 2), (_arg1 / 6), (_arg1 / 50)); _local2.expand(2); } private function setTests(_arg1:Boolean, _arg2:Boolean, _arg3:Boolean){ hitTestWithBullets = _arg1; hitTestWithEvils = _arg2; hitTestWithPlayer = _arg3; } private function compressBullets():void{ var _local1:BulletCompressor; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Array; var _local6:Bullet; var _local7:Array; _local5 = field.bullets.L; _local7 = []; for each (_local6 in _local5) { if (_local6.active){ if (((!(_local6.compressed)) || (!(_local6.hasRegisteredArea(this))))){ _local2 = (_local6.x - x); _local3 = (_local6.y - y); _local4 = (radius + _local6.radius); if (((_local2 * _local2) + (_local3 * _local3)) < (_local4 * _local4)){ _local7.push(_local6); }; }; }; }; _local1 = field.createOO("bulletCompressor", "overlay"); _local1.setup(x, y, _local7); if (_local1.bullet){ _local1.bullet.registerArea(this); }; } public function getVar(_arg1:String){ return (this[_arg1]); } } }//package
Section 16
//BGMusic (BGMusic) package { import flash.events.*; import flash.media.*; import flash.utils.*; import flash.net.*; public class BGMusic { private var channel:SoundChannel; private var timer:Timer; private var sound:Sound; private var playMusic:Boolean;// = true private var currentTrack:int; private var vol:Number; private var position:Number; private var volMod:Number; public var status:int; private var fadeRate:Number; public var randomRepeat:Boolean; private var fadeEnd:Function; private static const STOPPED:int = 3; private static const PLAYING:int = 1; private static const PAUSED:int = 2; public static var that:BGMusic; public function BGMusic(){ playMusic = true; super(); } public function stop():void{ if ((((status == PLAYING)) || ((status == PAUSED)))){ position = 0; channel.stop(); status = STOPPED; }; } private function timeOut(_arg1:TimerEvent):void{ fadeToPause(); } public function set volume(_arg1:Number):void{ vol = _arg1; } private function clearTimer():void{ if (timer){ timer.removeEventListener("timerComplete", timeOut); timer = null; }; } public function init():void{ sound = null; channel = null; position = 0; vol = 0; volMod = 1; fadeRate = 0; randomRepeat = true; that = this; } public function loadVol():void{ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); if (_local1.data.hasOwnProperty("volume")){ vol = _local1.data.volume; } else { vol = 0.7; }; } public function fadeToPlay(_arg1:Number=0):void{ if (playMusic){ if (status != PLAYING){ volMod = 0; fadeRate = (1 / 20); fadeEnd = null; play(_arg1); }; }; } public function get volume():Number{ return (vol); } private function setTimer(_arg1:Number):void{ clearTimer(); timer = new Timer(_arg1, 1); timer.addEventListener("timerComplete", timeOut, false, 0, true); timer.start(); } public function saveVol():void{ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); _local1.data.volume = vol; _local1.flush(); } public function fadeToPause():void{ if (status == PLAYING){ clearTimer(); volMod = 1; fadeRate = (-1 / 20); fadeEnd = pause; }; } public function setFade(_arg1:Number):void{ fadeRate = _arg1; } public function run():void{ if (playMusic){ adjustFade(); correctVolume(); }; } public function kill():void{ if (playMusic){ channel.removeEventListener("soundComplete", loopBack); channel.stop(); channel = null; sound = null; }; } private function adjustFade():void{ volMod = (volMod + fadeRate); if ((((fadeRate > 0)) && ((volMod > 1)))){ volMod = 1; fadeRate = 0; } else { if ((((fadeRate < 0)) && ((volMod < 0)))){ volMod = 0; fadeRate = 0; fadeEnd(); fadeEnd = null; }; }; } private function correctVolume():void{ var _local1:SoundTransform; if (channel){ _local1 = new SoundTransform((vol * volMod)); channel.soundTransform = _local1; }; } public function chooseTrack(_arg1:int):void{ if (playMusic){ if (_arg1 == 0){ _arg1 = (int((Math.random() * 3)) + 1); randomRepeat = true; } else { randomRepeat = false; }; currentTrack = _arg1; switch (currentTrack){ case 1: sound = new TheOperaOfTheFrogs(); break; default: throw (new Error((("cannot create BGMusic track #" + _arg1) + " - no such track"))); }; position = 0; }; } public function pause():void{ if (status == PLAYING){ position = channel.position; status = PAUSED; channel.stop(); }; } public function fadeToStop():void{ if (status == PLAYING){ clearTimer(); volMod = 1; fadeRate = (-1 / 20); fadeEnd = stop; } else { if (status == PAUSED){ stop(); }; }; } private function loopBack(_arg1:Event):void{ var _local2:SoundTransform; if (status == PLAYING){ if (channel){ _local2 = channel.soundTransform; }; channel.removeEventListener("souneDomplete", loopBack); if (randomRepeat){ chooseTrack(0); }; channel = sound.play(); channel.addEventListener("soundComplete", loopBack, false, 0, false); if (_local2){ channel.soundTransform = _local2; }; }; } public function play(_arg1:Number=0):void{ var _local2:SoundTransform; if (playMusic){ volMod = 1; if (_arg1 > 0){ setTimer((_arg1 * 1000)); } else { clearTimer(); }; if (status != PLAYING){ if (channel){ _local2 = channel.soundTransform; channel.removeEventListener("souneDomplete", loopBack); }; channel = sound.play(position); channel.addEventListener("soundComplete", loopBack, false, 0, true); if (_local2){ channel.soundTransform = _local2; }; }; status = PLAYING; }; } public static function STFU():void{ that.playMusic = false; } } }//package
Section 17
//Blob (Blob) package { import flash.display.*; class Blob extends FieldObject { private var fadeRate:Number; private var shrinkRate:Number; private var slowdownRate:Number; public function setFade(_arg1:Number=0.01):void{ fadeRate = _arg1; } public function setShrink(_arg1:Number=1):void{ shrinkRate = _arg1; } override public function init():void{ super.init(); draw(3, 0xFFFFFF); } public function pushTo(_arg1:Number, _arg2:Number, _arg3:int):void{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; stop(); _local4 = (_arg1 - x); _local5 = (_arg2 - y); _local6 = (Math.atan2(_local5, _local4) * R2D); _local7 = Math.sqrt(((_local4 * _local4) + (_local5 * _local5))); _local8 = slowdownRate; _local9 = _arg3; _local10 = ((_local7 * (_local8 - 1)) / (Math.pow(_local8, _local9) - 1)); polarPush(_local6, _local10); } public function draw(_arg1:int, _arg2:Number){ var _local3:Graphics; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:int; _local3 = this.graphics; _local3.clear(); _local7 = 0; _local8 = 0; _local5 = 0; _local9 = 0; while (_local9 < _arg1) { _local4 = (Math.random() * 50); _local6 = ((Math.random() * PI) * 2); _local3.beginFill(_arg2); _local3.drawCircle((_local7 + (_local5 * Math.cos(_local6))), (_local8 + (_local5 * Math.sin(_local6))), _local4); _local7 = (_local7 + (_local5 * Math.cos(_local6))); _local8 = (_local8 + (_local5 * Math.sin(_local6))); _local3.endFill(); _local5 = _local4; _local9++; }; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=0, _arg5:Number=10831349.82):void{ x = _arg1; y = _arg2; rotation = (Math.random() * 360); setRadius(_arg3); _arg5 = ((_arg5)==10831349.82) ? ((Math.random() * PI) * 2) : _arg5; if (_arg4 != 0){ XS = (_arg4 * Math.cos(_arg5)); YS = (_arg4 * Math.sin(_arg5)); }; setFade(); setShrink(); setSlowdown(); } public function setSlowdown(_arg1:Number=0.9):void{ slowdownRate = _arg1; } public function run(){ move(); slowDown(slowdownRate); setRadius((radius * shrinkRate)); alpha = (alpha - fadeRate); if ((((alpha <= 0)) || ((radius < 0.5)))){ kill(); }; } } }//package
Section 18
//Bonus (Bonus) package { import flash.display.*; public class Bonus extends MovieClip { private var field:Field; public var active:Boolean; private var YS:Number; public var expired:Function; private var cont:Container; public var demoMode:Boolean; private var lifeSpan:int; private var XS:Number; public var level:Number; public var radius:Number; private var type:Number; private var spin:Number; public var ready:Function; private var desiredRadius:Number; public static const PI:Number = 3.14159265358979; public static const R2D:Number = 57.2957795130823; private function createRandomSpikes(_arg1:int=50):void{ var _local2:Spike; var _local3:*; _local3 = 0; while (_local3 < _arg1) { _local2 = field.createOO("spike", "underlay"); _local2.setup(x, y, ((Math.random() * PI) * 2)); _local3++; }; } public function link(_arg1:Field, _arg2:Container):void{ field = _arg1; cont = _arg2; } private function cordsOnField(_arg1:Number, _arg2:Number):Boolean{ var _local3:Number; _local3 = field.radius; return ((((_arg1 * _arg1) + (_arg2 * _arg2)) < (_local3 * _local3))); } public function init():void{ active = true; XS = 0; YS = 0; spin = (((Math.random() * 6) - 3) / R2D); forceRadius(1); setRadius(((20 + (Math.random() * 6)) - 3)); lifeSpan = -1; } public function slideToPlayer(_arg1:Number):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local2 = (field.player.x - x); _local3 = (field.player.y - y); _local4 = Math.sqrt(((_local2 * _local2) + (_local3 * _local3))); _local5 = Math.atan2(_local3, _local2); XS = ((_arg1 / _local4) * Math.cos(_local5)); YS = ((_arg1 / _local4) * Math.sin(_local5)); } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } public function expire(){ desiredRadius = 0; active = false; if (demoMode){ callEvent("expired"); }; } private function createRandomDrillers(_arg1:int=10):void{ var _local2:Driller; var _local3:*; _local3 = 0; while (_local3 < _arg1) { _local2 = field.createOO("driller", "underlay"); _local2.setup(x, y, ((Math.random() * PI) * 2), (3 + (level / 3))); _local3++; }; } private function createRandomExplosions(_arg1:int=15):void{ var _local2:Explosion; var _local3:Number; var _local4:Number; var _local5:*; _local5 = 0; while (_local5 < _arg1) { do { _local3 = (((Math.random() * 2) - 1) * field.radius); _local4 = (((Math.random() * 2) - 1) * field.radius); } while (!(cordsOnField(_local3, _local4))); _local2 = field.createOO("explosion", "overlay"); _local2.setup(_local3, _local4, (30 + ((Math.random() * level) * 6)), (10 + (level * 1.5))); _local5++; }; } public function hitPlayer():void{ var _local1:Explosion; var _local2:LaserSpinner; var _local3:LaserTurret; var _local4:*; var _local5:TrackerTurret; var _local6:Ghost; var _local7:Cannon; var _local8:Fance; var _local9:SweeperTurret; var _local10:CreatureBait; switch (type){ case 1: _local1 = field.createOO("explosion", "overlay"); _local1.setup(x, y, ((field.radius * 0.08) * (5 + (level * 1.5))), 20, (field.radius / 40)); break; case 2: createExplosiveBullets((20 + (level * 5))); break; case 3: createRandomExplosions((5 + level)); break; case 4: _local2 = field.createOO("laserSpinner", "ground"); _local2.setup(x, y, (5 + (level * 1))); break; case 5: _local3 = field.createOO("laserTurret", "ground"); _local3.setup(x, y, ((60 * 15) + ((60 * level) * 1.5)), (15 + (1.5 * level))); break; case 6: createRandomSpikes((20 + (level * 5))); break; case 7: _local4 = field.createOO("megaball", "overlay"); _local4.setup(x, y, field.player.rotation, (75 + (level * 5))); break; case 8: _local5 = field.createOO("trackerTurret", "ground"); _local5.setup(x, y, ((60 * 5) + ((60 * level) * 0.5)), (17 + (level * 1.3))); break; case 9: field.evils.L.forEach(shrinkEvil); break; case 10: _local6 = field.createOO("ghost", "overlay"); _local6.setup(x, y, (5 + level), 0.8); break; case 11: _local7 = field.createOO("cannon", "ground"); _local7.setup(x, y, (40 - (3 * (level - 1))), (60 * 25)); break; case 12: _local8 = field.createOO("fance", "overlay"); _local8.setup(x, y, (5 + (2 * level))); break; case 13: createRandomMines((5 + level)); break; case 14: _local9 = field.createOO("sweeperTurret", "ground"); _local9.setup(x, y, (4 + (level * 0.95))); break; case 15: _local10 = field.createOO("creatureBait", "overlay"); _local10.setup(x, y, (100 + (level * 30))); break; default: throw (new Error((("cannot activate bonus effect #" + type) + " - no such effect."))); }; expire(); } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } private function shrinkEvil(_arg1, _arg2:int, _arg3:Array):void{ if (_arg1.active){ _arg1.shrink((120 + (20 * level))); }; } public function kill():void{ expired = null; ready = null; field = null; cont.removeElement(this); cont = null; } public function getDistFromPlayer(_arg1):void{ if (_arg1 < (radius + 150)){ slideToPlayer(100); if (_arg1 < (radius + field.player.radius)){ hitPlayer(); }; } else { XS = (XS * 0.92); YS = (YS * 0.92); }; x = (x + XS); y = (y + YS); } private function createExplosiveBullets(_arg1:int=50):void{ var _local2:*; var _local3:Bullet; _local2 = 0; while (_local2 < _arg1) { _local3 = field.createBullet(x, y, ((Math.random() * PI) * 2), 5); _local3.explosive = true; _local3.bonusDamage = (5 + (level / 2)); _local3.increaseLifeSpan((60 + (level * 6))); _local2++; }; } public function setVar(_arg1:String, _arg2):void{ this[_arg1] = _arg2; } public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } public function run(){ rotation = (rotation + spin); forceRadius((radius + ((desiredRadius - radius) / 5))); if (active){ if (((demoMode) && (Boolean(ready)))){ ready(); ready = null; }; lifeSpan--; if (lifeSpan == 0){ expire(); }; } else { if (radius <= 0.1){ kill(); }; }; } public function setType(_arg1:uint):void{ type = _arg1; gotoAndStop(type); } private function createRandomMines(_arg1:int=20):void{ var _local2:Mine; var _local3:*; _local3 = 0; while (_local3 < _arg1) { _local2 = field.createOO("mine", "ground"); _local2.setup(x, y, 5); _local3++; }; } public function getVar(_arg1:String){ return (this[_arg1]); } public function setLevel(_arg1:Number):void{ level = Math.min(10, Math.max(1, _arg1)); setRadius((15 + (1.2 * level))); } } }//package
Section 19
//Bullet (Bullet) package { class Bullet extends FieldObject { public var teleported:Boolean; private var _dmg:Number; public var speed:Number; private var lifeSpan:int; public var bonusDamage:Number; public var compressed:Boolean; public var level:Number; public var freeze:Boolean; private var TY:Number; private var TX:Number; public var bouncy:Boolean; public var targetEvil:Evil; private var areaList:VolatileList; public var explosive:Boolean; function Bullet():void{ } override public function init():void{ super.init(); x = 0; y = 0; speed = (5 + (Math.random() * 4)); lifeSpan = (60 + int((Math.random() * 10))); bonusDamage = 0; areaList = new VolatileList(); drawCircle(50, 0, 0xFFFFFF); setLevel(1); updateSpeeds(); active = true; } public function expireTo(_arg1:Number, _arg2:Number):void{ TX = _arg1; TY = _arg2; active = false; } private function createHitGoo(_arg1:Evil):void{ var _local2:Goo; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:uint; var _local7:uint; var _local8:uint; _local5 = Math.atan2((_arg1.y - y), (_arg1.x - x)); _local6 = Math.sqrt(((XS * XS) + (YS * YS))); _local7 = Math.min(10, radius); _local3 = (x + ((radius * Math.cos(_local5)) * 1.5)); _local4 = (y + ((radius * Math.sin(_local5)) * 1.5)); _local8 = 0; while (_local8 < _local7) { _local2 = field.createOO("goo", "underlay"); _local2.setup(_local3, _local4, ((_local6 + (Math.random() * _local6)) / 5), ((_local5 + (PI / 2)) + (Math.random() * PI))); _local2.setFade(0); _local2.setShrink(0.92); _local2.setSlowdown(0.92); _local2.draw(8, (radius * 2), 2, 0xFFFFFF, 0xFFFFFF, 1); _local8++; }; } public function updateSpeeds(_arg1:Boolean=false):void{ if (_arg1){ speed = Math.sqrt(((XS * XS) + (YS * YS))); rotation = (Math.atan2(YS, XS) * R2D); } else { XS = (speed * Math.cos((rotation / R2D))); YS = (speed * Math.sin((rotation / R2D))); }; } public function setLevel(_arg1:Number):void{ if (_arg1 > 50){ _arg1 = 50; } else { if (_arg1 < 1){ _arg1 = 1; }; }; level = _arg1; setRadius((1 + (0.25 * (_arg1 - 1)))); _dmg = (8 + (0.8 * (_arg1 - 1))); } public function hasRegisteredArea(_arg1:Area):Boolean{ return ((areaList.indexOf(_arg1) >= 0)); } override public function kill():void{ areaList.clear(); areaList = null; targetEvil = null; super.kill(); } public function get damage():Number{ return ((_dmg + bonusDamage)); } public function setDNA(_arg1:Array):void{ setRadius(_arg1[0]); level = _arg1[1]; _dmg = _arg1[2]; speed = _arg1[3]; lifeSpan = _arg1[4]; explosive = _arg1[5]; teleported = _arg1[6]; bouncy = _arg1[7]; areaList.seed(_arg1[8]); } public function run():void{ if (freeze){ freeze = false; } else { if (!onField()){ bounceOff(field, true); }; if (active){ move(); lifeSpan--; if (lifeSpan <= 0){ active = false; }; } else { if (((!(isNaN(TX))) && (!(isNaN(TY))))){ x = (x + ((TX - x) / 5)); y = (y + ((TY - y) / 5)); } else { move(); slowDown(0.8); }; alpha = (alpha - 0.05); setRadius((radius * 0.95)); if (radius <= 0.5){ kill(); }; }; }; } public function increaseLifeSpan(_arg1:int){ lifeSpan = (lifeSpan + _arg1); if (lifeSpan < 0){ lifeSpan = 0; }; } public function hitEvil(_arg1:Evil):void{ var _local2:Explosion; bounceOff(_arg1); createHitGoo(_arg1); if (explosive){ _local2 = field.createOO("explosion", "overlay"); _local2.setup(x, y, (damage * 3), (damage * 2)); kill(); return; }; if (!bouncy){ this.active = false; }; } public function registerArea(_arg1:Area):void{ if (areaList.indexOf(_arg1) == -1){ areaList.push(_arg1); }; } public function getDNA():Array{ return ([radius, level, _dmg, speed, lifeSpan, explosive, teleported, bouncy, areaList]); } } }//package
Section 20
//BulletCompressor (BulletCompressor) package { public class BulletCompressor extends FieldObject { private var _bullet:Bullet; private var desiredBulletRad:Number; public function get bullet():Bullet{ return (_bullet); } private function materializeBullet():void{ _bullet.setRadius(desiredBulletRad); field.bullets.addToList(_bullet); } override public function kill():void{ _bullet = null; super.kill(); } private function getBullets(_arg1:Array):void{ var _local2:Bullet; var _local3:Number; var _local4:Number; var _local5:Number; _local3 = 0; _local4 = 0; _local5 = 0; for each (_local2 in _arg1) { _local3 = (_local3 + _local2.level); _local2.expireTo(x, y); _local4 = (_local4 + Math.cos((_local2.rotation / R2D))); _local5 = (_local5 + Math.sin((_local2.rotation / R2D))); }; if (_local3 > 0){ createPhantomBullet(Math.atan2(_local5, _local4), _local3, (_local3 / 5)); } else { kill(); }; } public function setup(_arg1:Number, _arg2:Number, _arg3):void{ x = _arg1; y = _arg2; if ((_arg3 is Number)){ findBullets((_arg3 as Number)); } else { if ((_arg3 is Array)){ getBullets((_arg3 as Array)); }; }; } public function run():void{ _bullet.setRadius((_bullet.radius + ((desiredBulletRad - _bullet.radius) / 5))); if ((desiredBulletRad - _bullet.radius) < 0.5){ materializeBullet(); kill(); }; } private function findBullets(_arg1:Number):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Bullet; var _local6:Array; var _local7:Number; var _local8:Number; var _local9:Number; _local6 = field.bullets.L; _local7 = 0; _local8 = 0; _local9 = 0; for each (_local5 in _local6) { if (((_local5.active) && (!(_local5.compressed)))){ _local2 = (_local5.x - x); _local3 = (_local5.y - y); _local4 = (_arg1 + _local5.radius); if (((_local2 * _local2) + (_local3 * _local3)) < (_local4 * _local4)){ _local7 = (_local7 + _local5.level); _local5.expireTo(x, y); _local8 = (_local8 + Math.cos((_local5.rotation / R2D))); _local9 = (_local9 + Math.sin((_local5.rotation / R2D))); }; }; }; if (_local7 > 0){ createPhantomBullet(Math.atan2(_local9, _local8), _local7, (_local7 / 5)); } else { kill(); }; } private function createPhantomBullet(_arg1:Number, _arg2:Number, _arg3:Number=0):void{ _bullet = field.createBullet(x, y, _arg1, _arg2); _bullet.bonusDamage = _arg3; _bullet.compressed = true; _bullet.explosive = true; _bullet.increaseLifeSpan(120); field.bullets.removeFromList(_bullet); desiredBulletRad = _bullet.radius; _bullet.setRadius(0); } } }//package
Section 21
//BulletTeleporter (BulletTeleporter) package { public class BulletTeleporter extends FieldObject { private var dna:Array; private var TY:Number; private var TX:Number; private var TR:Number; public function BulletTeleporter():void{ } override public function init():void{ super.init(); drawGradCircle(50, [0xFFFFFF, 0xFFFFFF], [1, 0], [0, 100]); dna = []; TX = 0; TY = 0; TR = 0; alpha = 0; } private function unLoadBullet():void{ var _local1:Bullet; var _local2:Explosion; _local1 = field.createBullet(TX, TY, TR, 1); _local1.setDNA(dna); _local1.x = TX; _local1.y = TY; _local1.rotation = (TR * R2D); _local1.updateSpeeds(); _local2 = field.createOO("explosion", "overlay"); _local2.setup(_local1.x, _local1.y, (_local1.damage * 3), _local1.damage, (_local1.damage / 2)); } override public function kill():void{ dna = null; super.kill(); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number):void{ x = _arg1; y = _arg2; setRadius(_arg3); } private function loadBullet(_arg1:Bullet):void{ dna = _arg1.getDNA(); _arg1.active = false; _arg1.stop(); } public function run():void{ alpha = (alpha + 0.1); setRadius((radius * 0.9)); if (radius < 0.5){ kill(); }; } private function setTarget(_arg1:Number, _arg2:Number, _arg3:Number):void{ TX = _arg1; TY = _arg2; TR = _arg3; } } }//package
Section 22
//ButtonCreationListEntry (ButtonCreationListEntry) package { public class ButtonCreationListEntry { public var num:Number; public var radius:Number; public var str:String; public var x:Number; public var y:Number; public function ButtonCreationListEntry(_arg1:Number=0, _arg2:Number=0, _arg3:Number=30, _arg4:Number=0, _arg5:String=""){ x = _arg1; y = _arg2; radius = _arg3; num = _arg4; str = _arg5; } } }//package
Section 23
//ButtonGraphic (ButtonGraphic) package { import flash.display.*; public dynamic class ButtonGraphic extends MovieClip { } }//package
Section 24
//Cable (Cable) package { import flash.display.*; public class Cable extends FieldObject { private var A2:CableAnchor; public var startPointDist:Number; private var A1:CableAnchor; private var speed:Number; private var C1:CableAnchor; public var startPointDir:Number; private var C2:CableAnchor; private var thickness:Array; private var colors:Array; public var endAnchor:Object; private var MP:CableAnchor; public var startAnchor:Object; public var endPointDist:Number; private var stopDist:Number; public var endPointDir:Number; override public function init():void{ super.init(); active = true; startPointDir = 0; startPointDist = 0; endPointDir = 0; endPointDist = 0; CPSetup(); graphicSetup(1, 0xFFFFFF); A1 = new CableAnchor(); C1 = new CableAnchor(); MP = new CableAnchor(); C2 = new CableAnchor(); A2 = new CableAnchor(); } private function pointProx(_arg1:Number):Boolean{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Array; var _local7:Object; _local2 = 0; _local3 = 0; _local6 = [A1, C1, C2, A2]; for each (_local7 in _local6) { _local2 = (_local2 + _local7.x); _local3 = (_local3 + _local7.y); }; _local2 = (_local2 / _local6.length); _local3 = (_local3 / _local6.length); for each (_local7 in _local6) { _local4 = (_local2 - _local7.x); _local5 = (_local3 - _local7.y); if (((_local4 * _local4) + (_local5 * _local5)) > (_arg1 * _arg1)){ return (false); }; }; return (true); } public function CPSetup(_arg1:Number=10, _arg2:Number=15):void{ speed = _arg1; stopDist = _arg2; } public function expire():void{ startAnchor = null; endAnchor = null; stopDist = 0; speed = 2; } private function get maxThinkness():Number{ var _local1:Number; var _local2:*; _local1 = 0; for (_local2 in thickness) { _local1 = ((thickness[_local2])>_local1) ? thickness[_local2] : _local1; }; return (_local1); } private function createPoint():Object{ var _local1:Object; _local1 = new Object(); _local1.x = new Number(0); _local1.y = new Number(0); return (_local1); } override public function kill():void{ startAnchor = null; endAnchor = null; A1 = null; C1 = null; MP = null; C2 = null; A2 = null; super.kill(); } public function graphicSetup(_arg1:Object, _arg2:Object):void{ if ((((_arg1 is Number)) && ((_arg2 is Number)))){ thickness = [_arg1]; colors = [_arg2]; } else { if ((((((_arg1 is Array)) && ((_arg2 is Array)))) && ((_arg1.length == _arg2.length)))){ thickness = []; colors = []; thickness = (_arg1 as Array); colors = (_arg2 as Array); } else { throw (new Error((("cannon set line thinkness and color for cable " + this.name) + " - types do not match"))); }; }; } public function setup(_arg1:Object, _arg2:Object, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0, _arg6:Number=0):void{ if (((((((_arg1.hasOwnProperty("x")) && (_arg1.hasOwnProperty("y")))) && (_arg2.hasOwnProperty("x")))) && (_arg2.hasOwnProperty("y")))){ startAnchor = _arg1; endAnchor = _arg2; startPointDir = _arg3; startPointDist = _arg4; endPointDir = _arg5; endPointDist = _arg6; moveCPToStartLoc(); } else { throw (new Error((("cannot set anchors for cable " + this.name) + " - anchor object cannot be used"))); }; } private function verify(_arg1:Object):Boolean{ if (((_arg1) && (_arg1.active))){ return (true); }; _arg1 = null; return (false); } private function paintLine():void{ var _local1:Graphics; var _local2:Number; var _local3:Number; var _local4:Boolean; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:uint; _local1 = this.graphics; _local4 = false; if (verify(startAnchor)){ A1.x = startAnchor.x; A1.y = startAnchor.y; _local5 = ((startAnchor.rotation / R2D) + startPointDir); _local6 = startPointDist; _local2 = ((A1.x + (_local6 * Math.cos(_local5))) - C1.x); _local3 = ((A1.y + (_local6 * Math.sin(_local5))) - C1.y); C1.x = (C1.x + (_local2 / speed)); C1.y = (C1.y + (_local3 / speed)); } else { _local2 = (A2.x - A1.x); _local3 = (A2.y - A1.y); A1.x = (A1.x + (_local2 / speed)); A1.y = (A1.y + (_local3 / speed)); _local2 = (A1.x - C1.x); _local3 = (A1.y - C1.y); C1.x = (C1.x + (_local2 / 2)); C1.y = (C1.y + (_local3 / 2)); endPointDist = (endPointDist * 0.8); _local4 = true; }; if (verify(endAnchor)){ A2.x = endAnchor.x; A2.y = endAnchor.y; _local5 = ((endAnchor.rotation / R2D) + endPointDir); _local6 = endPointDist; _local2 = ((A2.x + (_local6 * Math.cos(_local5))) - C2.x); _local3 = ((A2.y + (_local6 * Math.sin(_local5))) - C2.y); C2.x = (C2.x + (_local2 / speed)); C2.y = (C2.y + (_local3 / speed)); } else { _local2 = (A1.x - A2.x); _local3 = (A1.y - A2.y); A2.x = (A2.x + (_local2 / speed)); A2.y = (A2.y + (_local3 / speed)); _local2 = (A2.x - C2.x); _local3 = (A2.y - C2.y); C2.x = (C2.x + (_local2 / 2)); C2.y = (C2.y + (_local3 / 2)); startPointDist = (startPointDist * 0.8); _local4 = true; }; MP.x = ((C1.x + C2.x) / 2); MP.y = ((C1.y + C2.y) / 2); _local1.clear(); _local9 = (colors.length - 1); while (_local9 >= 0) { _local1.lineStyle(thickness[_local9], colors[_local9]); _local1.moveTo(A1.x, A1.y); _local1.curveTo(C1.x, C1.y, MP.x, MP.y); _local1.curveTo(C2.x, C2.y, A2.x, A2.y); _local9--; }; if (_local4){ if (pointProx(2)){ kill(); }; }; } public function run():void{ if (active){ paintLine(); }; } private function moveCPToStartLoc():void{ C1.x = ((startAnchor.x + endAnchor.x) / 2); C1.y = ((startAnchor.y + endAnchor.y) / 2); MP.x = C1.x; MP.y = C1.y; C2.x = MP.x; C2.y = MP.y; } private function modifyThickness(_arg1:Number):void{ var _local2:*; for (_local2 in thickness) { thickness[_local2] = (thickness[_local2] * _arg1); }; } } }//package
Section 25
//CableAnchor (CableAnchor) package { public class CableAnchor { public var x:Number;// = 0 public var y:Number;// = 0 public var YS:Number;// = 0 public var XS:Number;// = 0 public function CableAnchor(){ x = 0; y = 0; XS = 0; YS = 0; super(); } } }//package
Section 26
//Cannon (Cannon) package { import flash.display.*; class Cannon extends SpriteFieldObject { private var bullet:Bullet; private var chargeSpeed:Number; private var timer:uint; private var phase:uint; private var delayTimer:uint; private var delay:uint; private var chargeCircle:Shape; private var _lifeSpan:uint; private var desiredRadius:Number; private var growthSpeed:Number; private var player:Player; private var _interfacing:Boolean; private static const INTERFACE_DIST:Number = 40; private static const INTERFACE_DELAY:uint = 40; override public function init():void{ super.init(); setRadius(15); forceRadius(15); player = field.player; interfacing = true; rotation = (Math.random() * 360); draw(); fireRate = 60; lifeSpan = (60 * 30); active = true; beginWaitPhase(); } private function handlePlayerInterface():void{ if (interfacing){ moveToPlayer(); if (((!(player.moving)) && ((distFromPlayer < INTERFACE_DIST)))){ timer++; if (timer >= INTERFACE_DELAY){ interfacing = false; }; } else { timer = 0; }; } else { if (((!(player.moving)) && ((distFromPlayer < INTERFACE_DIST)))){ if (timer >= INTERFACE_DELAY){ interfacing = true; } else { timer++; }; } else { timer = 0; }; }; } private function fireBullet():void{ field.bullets.addElement(bullet); bullet.setLevel(50); bullet.x = x; bullet.y = y; bullet.rotation = ((rotation + (Math.random() * 12)) - 6); bullet.speed = (bullet.speed + 2); bullet.updateSpeeds(); polarPush(((bullet.rotation + 180) / R2D), (bullet.speed / 5)); bullet = null; beginWaitPhase(); } public function expire():void{ var _local1:Explosion; if (bullet){ fireBullet(); }; _local1 = field.createOO("explosion", "overlay"); _local1.setup(x, y, (50 + (radius * 3)), 20, 10); setRadius(0); active = false; } private function moveToPlayer(){ var _local1:Number; var _local2:Number; _local1 = Math.atan2((player.y - y), (player.x - x)); _local2 = ((rotation - player.rotation) % 360); if (_local2 > 180){ _local2 = (_local2 - 360); } else { if (_local2 < -180){ _local2 = (_local2 + 360); }; }; rotation = (rotation - (_local2 / 10)); if (distFromPlayer >= INTERFACE_DIST){ polarPush(((_local1 + (Math.random() * PI)) - (PI / 2)), (1 + (Math.random() * 0.5))); }; } public function set fireRate(_arg1:uint):void{ var _local2:Number; var _local3:Number; _arg1 = Math.max(10, _arg1); delay = (_arg1 * 0.3); _local2 = (_arg1 * 0.6); _local3 = (_arg1 * 0.1); growthSpeed = (50 / _local2); chargeSpeed = (5 / _local3); } private function draw(_arg1:uint=1, _arg2:Number=10):void{ var _local3:*; graphics.clear(); drawCircle(50, 0, 0xFFFFFF); drawLimb(-52, 10, 0); _local3 = 1; while (_local3 <= _arg1) { drawLimb(50, -10, (-180 + (_local3 * _arg2))); drawLimb(50, -10, (180 - (_local3 * _arg2))); _local3++; }; } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } override public function kill():void{ if (chargeCircle){ removeChild(chargeCircle); chargeCircle = null; }; bullet = null; player = null; } private function removeChargeCircle():void{ removeChild(chargeCircle); chargeCircle = null; } private function get distFromPlayer():Number{ var _local1:Number; var _local2:Number; _local1 = (player.x - x); _local2 = (player.y - y); return (((Math.sqrt(((_local1 * _local1) + (_local2 * _local2))) - this.radius) - player.radius)); } private function beginWaitPhase():void{ delayTimer = delay; phase = 4; } private function set interfacing(_arg1:Boolean):void{ _interfacing = _arg1; setRadius((_interfacing) ? 10 : 15); timer = 0; } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ x = _arg1; y = _arg2; fireRate = _arg3; lifeSpan = _arg4; draw((((60 - _arg3) / 4) + 1), 9); } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 10))); if (active){ if (_lifeSpan <= 0){ expire(); }; handlePlayerInterface(); if (!interfacing){ doCannonAction(); _lifeSpan--; }; hitCheckWithEvils(expire); if (!onField()){ bounceOff(field, true); rotation = (rotation - 180); }; move(); slowDown(0.85); } else { if (radius <= 0.1){ kill(); }; }; } private function beginLoadPhase():void{ bullet = field.createBullet(0, 0, 0, 50); field.bullets.removeElement(bullet); addChild(bullet); bullet.setRadius(0); phase = 1; } private function get interfacing():Boolean{ return (_interfacing); } private function beginChargePhase():void{ createChargeCircle(); phase = 2; } private function doChargePhase():void{ chargeCircle.scaleX = (chargeCircle.scaleX - (chargeSpeed / 100)); chargeCircle.scaleY = chargeCircle.scaleX; if (chargeCircle.scaleX <= 0.9){ removeChargeCircle(); bullet.bonusDamage = 50; bullet.increaseLifeSpan(60); phase = 3; }; } private function doCannonAction():void{ switch (phase){ case 1: doLoadPhase(); break; case 2: doChargePhase(); break; case 3: fireBullet(); break; case 4: if (delayTimer <= 0){ beginLoadPhase(); } else { delayTimer--; }; break; default: throw (new Error((("phase value out of range in inastance " + this.name) + " of class Cannon"))); }; } public function set lifeSpan(_arg1:uint):void{ _lifeSpan = _arg1; } private function createChargeCircle():void{ var _local1:Graphics; chargeCircle = new Shape(); _local1 = chargeCircle.graphics; _local1.lineStyle(1, 0xFFFFFF); _local1.drawCircle(0, 0, 50); this.addChild(chargeCircle); this.swapChildren(chargeCircle, bullet); } private function doLoadPhase():void{ bullet.setRadius((bullet.radius + growthSpeed)); if (bullet.radius >= 45){ bullet.setRadius(45); beginChargePhase(); }; } } }//package
Section 27
//CircleButton (CircleButton) package { import flash.events.*; import flash.display.*; import flash.text.*; public class CircleButton extends Sprite { public var hittable:Boolean; public var mouseIsOver:Boolean; private var reHoverHandled:Boolean; public var bottomBorder:Number; private var BG:Shape; public var mouseOut:Function; public var dontEnable:Boolean; private var TX:Number; private var TF:TextField; private var TY:Number; public var maxShrink:Number; public var radius:Number; public var FG:Sprite; private var mother:MotherOfAll; public var whileMouseOver:Function; private var HA:Sprite; public var XS:Number; private var mouseMoved:Boolean; public var leftBorder:Number; public var mouseOver:Function; public var YS:Number; public var finishedAnimating:Function; private var slideSpeed:Number; public var expired:Function; public var halfBaked:Function; public var enabled:Boolean; private var timer:uint; public var impact:Function; public var softClickTime:uint; public var rightBorder:Number; public var pushable:Boolean; private var phase:int; public var softClick:Function; private var slowdownRate:Number; public var stopped:Function; public var topBorder:Number; public static const REVEAL_BG_PHASE:uint = 2; public static const MAIN_PHASE:uint = 3; public static const BANISH_PHASE:uint = 4; public static const REVEAL_FG_PHASE:uint = 1; public function stop():void{ XS = 0; YS = 0; slideSpeed = 0; callEvent("stopped"); } public function isMoving():Boolean{ return (((Boolean(slideSpeed)) || ((((XS * XS) + (YS * YS)) > 0.1)))); } private function removeListeners():void{ if (HA){ HA.removeEventListener("mouseOver", _mouseOver); HA.removeEventListener("mouseOut", _mouseOut); HA.removeEventListener("mouseMove", _mouseMove); }; } private function slowdown():void{ var _local1:Number; var _local2:Number; XS = (XS * slowdownRate); YS = (YS * slowdownRate); if (((XS * XS) + (YS * YS)) <= 0.01){ stop(); } else { if (((XS * XS) + (YS * YS)) >= (50 * 50)){ _local1 = Math.sqrt(((XS * XS) + (YS * YS))); _local2 = aMath.atan(YS, XS); XS = (50 * aMath.cos(XS)); YS = (50 * aMath.sin(YS)); }; }; } private function createBG():void{ BG = new Shape(); this.addChild(BG); BG.graphics.lineStyle(5, 0xFFFFFF); BG.graphics.beginFill(0); BG.graphics.drawCircle(0, 0, 50); BG.graphics.endFill(); BG.scaleX = 0; BG.scaleY = 0; } private function createTF(){ var _local1:TextFormat; TF = new TextField(); _local1 = new TextFormat(); TF.selectable = false; TF.embedFonts = true; TF.textColor = 0xFFFFFF; TF.height = 125; TF.width = 180; _local1.align = TextFormatAlign.CENTER; _local1.font = "LilyUPC"; _local1.size = 160; TF.defaultTextFormat = _local1; TF.text = ""; adjustText(); FG.addChild(TF); } public function beginSlide(_arg1:Number, _arg2:Number, _arg3:Number):void{ XS = 0; YS = 0; TX = _arg1; TY = _arg2; slideSpeed = _arg3; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number=50, _arg4="", _arg5:Number=0.9):void{ var _local6:ButtonGraphic; x = _arg1; y = _arg2; setRadius(_arg3); if ((_arg4 is String)){ if (_arg4.charAt(0) == "#"){ setText(_arg4.slice(1), 0xFFFFFF, _arg5); } else { _local6 = new ButtonGraphic(); _local6.gotoAndStop((_arg4 as String)); addGraphic(_local6, _arg5); }; } else { if ((_arg4 is DisplayObject)){ addGraphic(_arg4, _arg5); }; }; } private function _mouseMove(_arg1:MouseEvent):void{ if (mouseIsOver){ mouseMoved = true; }; } public function getSpeed():Number{ return (Math.sqrt(((XS * XS) + (YS * YS)))); } public function run(){ switch (phase){ case REVEAL_FG_PHASE: FG.alpha = (FG.alpha + 0.07); if (timer > 15){ visible = true; enabled = !(dontEnable); phase = REVEAL_BG_PHASE; callEvent("halfBaked"); } else { visible = Boolean((Math.random() < (timer / 15))); timer++; }; break; case REVEAL_BG_PHASE: drawToScale(BG, 1.1, 5); if (BG.scaleX >= 1){ phase = MAIN_PHASE; cacheAsBitmap = true; createListeners(); callEvent("finishedAnimating"); }; break; case MAIN_PHASE: if (slideSpeed > 0){ slide(); move(); } else { move(); slowdown(); }; if (enabled){ if (mouseIsOver){ if (mouseMoved){ mother.pointer.leaveTarget(this); drawToScale(FG, 1.01, 10); mouseMoved = false; reHoverHandled = false; } else { if (!reHoverHandled){ _mouseOver(null); reHoverHandled = true; }; callEvent("whileMouseOver"); if (FG.scaleX >= maxShrink){ drawToScale(FG, (FG.scaleX * 0.93), 10); }; timer--; if (((Boolean(softClick)) && ((timer == 0)))){ mother.pointer.leaveTarget(this, true); mouseIsOver = false; softClick(); }; }; } else { if (FG.scaleX < 1){ drawToScale(FG, 1.01, 10); }; }; }; break; case BANISH_PHASE: FG.alpha = (FG.alpha - 0.1); drawToScale(BG, -0.1, 5); if (BG.scaleX <= 0){ callEvent("expired"); remove(); }; break; }; } private function createListeners():void{ HA.addEventListener("mouseOver", _mouseOver, false, 0, true); HA.addEventListener("mouseOut", _mouseOut, false, 0, true); HA.addEventListener("mouseMove", _mouseMove, false, 0, true); } public function remove():void{ kill(); if (parent){ var _local1 = parent; _local1["removeElement"](this); }; } public function setText(_arg1:String, _arg2:Number, _arg3:Number=1):void{ TF.text = _arg1; TF.textColor = _arg2; setTextScale(_arg3); } public function popup():void{ if ((((phase == REVEAL_FG_PHASE)) || ((phase == REVEAL_BG_PHASE)))){ FG.visible = true; FG.alpha = 1; BG.scaleX = 1; BG.scaleY = 1; phase = MAIN_PHASE; enabled = !(dontEnable); cacheAsBitmap = true; createListeners(); callEvent("finishedAnimating"); }; } private function createFG():void{ FG = new Sprite(); this.addChild(FG); createTF(); FG.alpha = 0; } public function drawShape(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Array, _arg5:Array):void{ var _local6:uint; var _local7:uint; var _local8:Graphics; _local7 = _arg4.length; _local8 = FG.graphics; if (_arg4.length != _arg5.length){ throw (new Error("cannot draw shape - cord lists are equal in length.")); }; _local8.lineStyle(_arg3, _arg2); _local8.beginFill(_arg1); _local8.moveTo(_arg4[_local7], _arg5[_local7]); _local6 = 0; while (_local6 < _local7) { _local8.lineTo(_arg4[_local6], _arg5[_local6]); _local6++; }; } private function createHA(){ HA = new Sprite(); HA.graphics.beginFill(0xFF00FF); HA.graphics.drawCircle(0, 0, 50); HA.graphics.endFill(); this.addChild(HA); HA.alpha = 0; } public function setBorders(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ leftBorder = _arg1; topBorder = _arg2; rightBorder = _arg4; bottomBorder = _arg3; } public function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } public function init(){ createBG(); createFG(); createHA(); phase = 1; timer = 0; XS = 0; YS = 0; setRadius(50); setSlowdownRate(0.91); slideSpeed = 0; hittable = false; pushable = true; enabled = false; dontEnable = false; softClickTime = 40; maxShrink = 0.8; } public function push(_arg1:Number, _arg2:Number):void{ if ((((slideSpeed == 0)) && (pushable))){ XS = (XS + _arg1); YS = (YS + _arg2); }; } public function setSlowdownRate(_arg1:Number):void{ slowdownRate = _arg1; } public function pushTo(_arg1:Number, _arg2:Number, _arg3:int):void{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; _local4 = (_arg1 - x); _local5 = (_arg2 - y); _local6 = ((Math.atan2(_local5, _local4) * 180) / Math.PI); _local7 = Math.sqrt(((_local4 * _local4) + (_local5 * _local5))); _local8 = slowdownRate; _local9 = _arg3; _local10 = ((_local7 * (_local8 - 1)) / (Math.pow(_local8, _local9) - 1)); polarPush(_local6, _local10); } public function drawCircle(_arg1:Number=0, _arg2:Number=0xFFFFFF, _arg3:Number=5, _arg4:Number=0, _arg5:Number=0, _arg6:Number=50):void{ var _local7:Graphics; _local7 = FG.graphics; _local7.lineStyle(_arg3, _arg2); _local7.beginFill(_arg1); _local7.drawCircle(_arg4, _arg5, _arg6); _local7.endFill(); } public function addGraphic(_arg1, _arg2:Number, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0){ FG.addChild(_arg1); _arg1.x = _arg4; _arg1.y = _arg5; _arg1.scaleX = _arg2; _arg1.scaleY = _arg2; _arg1.rotation = _arg3; return (_arg1); } private function adjustText(){ TF.x = (-(TF.getBounds(this).width) / 2); TF.y = (-(TF.getBounds(this).height) / 2); } public function kill():void{ phase = -1; enabled = false; removeListeners(); clearFunctions(); if (TF){ TF = null; }; if (FG){ removeChild(FG); FG = null; }; if (BG){ removeChild(BG); BG = null; }; if (HA){ removeChild(HA); HA = null; }; } public function drawTriangle(_arg1:Number=0, _arg2:Number=0xFFFFFF, _arg3:Number=5, _arg4:Number=45, _arg5:Number=120):void{ var _local6:Graphics; _local6 = FG.graphics; _local6.lineStyle(_arg3, _arg2); _local6.beginFill(_arg1); _local6.moveTo((_arg4 * aMath.cos(_arg5)), (_arg4 * aMath.sin(_arg5))); _arg5 = (_arg5 + 120); _local6.lineTo((_arg4 * aMath.cos(_arg5)), (_arg4 * aMath.sin(_arg5))); _arg5 = (_arg5 + 120); _local6.lineTo((_arg4 * aMath.cos(_arg5)), (_arg4 * aMath.sin(_arg5))); _arg5 = (_arg5 + 120); _local6.lineTo((_arg4 * aMath.cos(_arg5)), (_arg4 * aMath.sin(_arg5))); _local6.endFill(); } public function polarPush(_arg1:Number, _arg2:Number):void{ push((_arg2 * aMath.cos(_arg1)), (_arg2 * aMath.sin(_arg1))); } public function setTrajectory(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Number; if (slideSpeed == 0){ _local4 = aMath.atan((_arg2 - y), (_arg1 - x)); push((_arg3 * aMath.cos(_local4)), (_arg3 * aMath.sin(_local4))); }; } public function onScreenRemove(){ enabled = false; phase = BANISH_PHASE; } public function setRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } private function _mouseOver(_arg1:MouseEvent):void{ if (enabled){ cacheAsBitmap = false; FG.visible = true; FG.alpha = 1; timer = softClickTime; mouseIsOver = true; mother.pointer.homeOnObject(this); callEvent("mouseOver"); }; } public function hit(_arg1:CircleButton){ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; var _local18:Number; if (((hittable) && (_arg1.hittable))){ _local2 = (this.x - _arg1.x); _local3 = (this.y - _arg1.y); _local4 = Math.atan2(_local3, _local2); _local5 = Math.sqrt(((this.XS * this.XS) + (this.YS * this.YS))); _local6 = Math.sqrt(((_arg1.XS * _arg1.XS) + (_arg1.YS * _arg1.YS))); _local7 = Math.atan2(this.YS, this.XS); _local8 = Math.atan2(_arg1.YS, _arg1.XS); _local9 = (_local5 * Math.cos((_local7 - _local4))); _local10 = (_local5 * Math.sin((_local7 - _local4))); _local11 = (_local6 * Math.cos((_local8 - _local4))); _local12 = (_local6 * Math.sin((_local8 - _local4))); _local13 = ((((this.radius - _arg1.radius) * _local9) + ((_arg1.radius + _arg1.radius) * _local11)) / (this.radius + _arg1.radius)); _local15 = ((((this.radius + this.radius) * _local9) + ((_arg1.radius - this.radius) * _local11)) / (this.radius + _arg1.radius)); _local14 = _local10; _local16 = _local12; if (((this.pushable) && (_arg1.pushable))){ this.XS = ((Math.cos(_local4) * _local13) + (Math.cos((_local4 + (Math.PI / 2))) * _local14)); this.YS = ((Math.sin(_local4) * _local13) + (Math.sin((_local4 + (Math.PI / 2))) * _local14)); _arg1.XS = ((Math.cos(_local4) * _local15) + (Math.cos((_local4 + (Math.PI / 2))) * _local16)); _arg1.YS = ((Math.sin(_local4) * _local15) + (Math.sin((_local4 + (Math.PI / 2))) * _local16)); this.x = (((x + _arg1.x) / 2) + ((radius + 1) * Math.cos(_local4))); this.y = (((y + _arg1.y) / 2) + ((radius + 1) * Math.sin(_local4))); _arg1.x = (((x + _arg1.x) / 2) - ((_arg1.radius + 1) * Math.cos(_local4))); _arg1.y = (((y + _arg1.y) / 2) - ((_arg1.radius + 1) * Math.sin(_local4))); } else { if (this.pushable){ this.XS = ((Math.cos(_local4) * _local13) + (Math.cos((_local4 + (Math.PI / 2))) * _local14)); this.YS = ((Math.sin(_local4) * _local13) + (Math.sin((_local4 + (Math.PI / 2))) * _local14)); this.XS = (this.XS - ((Math.cos(_local4) * _local15) + (Math.cos((_local4 + (Math.PI / 2))) * _local16))); this.YS = (this.YS - ((Math.sin(_local4) * _local15) + (Math.sin((_local4 + (Math.PI / 2))) * _local16))); this.x = (_arg1.x + ((this.radius + _arg1.radius) * Math.cos(_local4))); this.y = (_arg1.y + ((this.radius + _arg1.radius) * Math.sin(_local4))); } else { if (_arg1.pushable){ _arg1.XS = ((Math.cos(_local4) * _local15) + (Math.cos((_local4 + (Math.PI / 2))) * _local16)); _arg1.YS = ((Math.sin(_local4) * _local15) + (Math.sin((_local4 + (Math.PI / 2))) * _local16)); _arg1.XS = (_arg1.XS - ((Math.cos(_local4) * _local13) + (Math.cos((_local4 + (Math.PI / 2))) * _local14))); _arg1.YS = (_arg1.YS - ((Math.sin(_local4) * _local13) + (Math.sin((_local4 + (Math.PI / 2))) * _local14))); _arg1.x = (this.x - ((_arg1.radius + this.radius) * Math.cos(_local4))); _arg1.y = (this.y - ((_arg1.radius + this.radius) * Math.sin(_local4))); } else { Console.trace("whoa! two non-pushable objects just hit each other! dude!"); }; }; }; callEvent("impact"); _arg1.callEvent("impact"); }; } public function isSliding():Boolean{ return (Boolean(slideSpeed)); } public function drawCross(_arg1:Number=0xFFFFFF, _arg2:Number=5, _arg3:Number=45, _arg4:Number=0):void{ var _local5:Graphics; _local5 = FG.graphics; _local5.lineStyle(_arg2, _arg1); _local5.moveTo((_arg3 * aMath.cos(_arg4)), (_arg3 * aMath.sin(_arg4))); _arg4 = (_arg4 + 180); _local5.lineTo((_arg3 * aMath.cos(_arg4)), (_arg3 * aMath.sin(_arg4))); _arg4 = (_arg4 + 90); _local5.moveTo((_arg3 * aMath.cos(_arg4)), (_arg3 * aMath.sin(_arg4))); _arg4 = (_arg4 + 180); _local5.lineTo((_arg3 * aMath.cos(_arg4)), (_arg3 * aMath.sin(_arg4))); } private function slide():void{ var _local1:Number; var _local2:Number; _local1 = (TX - x); _local2 = (TY - y); XS = (_local1 / slideSpeed); YS = (_local2 / slideSpeed); if (((_local1 * _local1) + (_local2 * _local2)) <= 0.5){ x = TX; y = TY; stop(); }; } private function drawToScale(_arg1, _arg2:Number, _arg3:Number):void{ _arg1.scaleX = (_arg1.scaleX + ((_arg2 - _arg1.scaleX) / _arg3)); _arg1.scaleY = (_arg1.scaleY + ((_arg2 - _arg1.scaleY) / _arg3)); } public function setMother(_arg1:MotherOfAll){ mother = _arg1; } private function bounceOff(_arg1):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; _local2 = aMath.atan(YS, XS); _local3 = aMath.atan((y - _arg1.y), (x - _arg1.x)); _local4 = ((_local3 + aMath.subA(_local2, _local3)) + 180); _local5 = (_arg1.radius + this.radius); _local6 = Math.sqrt(((XS * XS) + (YS * YS))); _local7 = _arg1.getSpeed(); if ((((slideSpeed == 0)) && (pushable))){ _arg1.push((XS + (2 * aMath.cos(_local3))), (YS + (2 * aMath.sin(_local3)))); x = (_arg1.x + (_local5 * aMath.cos(_local3))); y = (_arg1.y + (_local5 * aMath.sin(_local3))); XS = (_local6 * aMath.cos(_local4)); YS = (_local6 * aMath.sin(_local4)); } else { _local8 = (XS - _arg1.XS); _local9 = (YS - _arg1.YS); _local5 = (Math.sqrt(((_local8 * _local8) + (_local9 * _local9))) / 4); _local2 = aMath.atan(_local9, _local8); _arg1.push((-(_local5) * aMath.cos(_local2)), (-(_local5) * aMath.sin(_local2))); }; } private function _mouseOut(_arg1:MouseEvent):void{ if (enabled){ cacheAsBitmap = true; mouseIsOver = false; mother.pointer.leaveTarget(this); callEvent("mouseOut"); }; } private function clearFunctions():void{ halfBaked = null; finishedAnimating = null; impact = null; stopped = null; mouseOver = null; whileMouseOver = null; mouseOut = null; softClick = null; expired = null; } private function move():void{ var _local1:Number; var _local2:Number; _local1 = (x + XS); _local2 = (y + YS); if (hittable){ if (_local1 < (leftBorder + radius)){ _local1 = (leftBorder + radius); XS = (XS * -1); }; if (_local2 < (topBorder + radius)){ _local2 = (topBorder + radius); YS = (YS * -1); }; if (_local1 > (rightBorder - radius)){ _local1 = (rightBorder - radius); XS = (XS * -1); }; if (_local2 > (bottomBorder - radius)){ _local2 = (bottomBorder - radius); YS = (YS * -1); }; }; x = _local1; y = _local2; } public function setTextScale(_arg1:Number):void{ TF.scaleX = _arg1; TF.scaleY = _arg1; adjustText(); } public static function create(_arg1:Container, _arg2:MotherOfAll):CircleButton{ var _local3:CircleButton; _local3 = new (CircleButton); _arg1.addElement(_local3); _local3.init(); _local3.setMother(_arg2); _local3.x = 0; _local3.y = 0; return (_local3); } } }//package
Section 28
//Console (Console) package { import flash.events.*; import flash.display.*; import flash.text.*; import flash.ui.*; public class Console extends Sprite { private var inpTF:TextField; private var history:Array; private var password:String; private var logTF:TextField; private var passwordLoc:int; private var histPos:int; private var usable:Boolean; public static var ref:Console; private function keyControl(_arg1:KeyboardEvent):void{ if (usable){ if (_arg1.keyCode == 192){ toggleVis(); return; }; if (visible){ switch (_arg1.keyCode){ case Keyboard.PAGE_UP: scroll("up"); break; case Keyboard.PAGE_DOWN: scroll("down"); break; case Keyboard.ENTER: getCommand(); break; case Keyboard.UP: scrollHistory(1); break; case Keyboard.DOWN: scrollHistory(-1); break; }; }; } else { inputPassword(String.fromCharCode(_arg1.charCode)); }; } private function scrollHistory(_arg1:int):void{ if (history.length > 0){ if (histPos < 0){ histPos = 0; } else { if (histPos > (history.length - 1)){ histPos = (history.length - 1); }; }; inpTF.text = history[histPos]; histPos = (histPos + _arg1); }; } public function init():void{ ref = this; draw(550, 550); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl, false, 0, true); visible = false; mouseEnabled = false; usable = false; history = []; histPos = 0; password = "yo ho ho"; passwordLoc = 0; } public function adjustScale(_arg1:Number, _arg2:Number):void{ inpTF.width = _arg1; inpTF.text = "#@&|"; inpTF.height = (inpTF.textHeight + 5); inpTF.text = ""; inpTF.y = (_arg2 - inpTF.height); logTF.width = _arg1; logTF.height = (inpTF.y - 1); } private function addToHistory(_arg1:String):void{ history.unshift(_arg1); histPos = 0; } private function getCommand():void{ var _local1:TextEvent; addToHistory(inpTF.text); _local1 = new TextEvent("input", false, false, inpTF.text); trace(("┬" + inpTF.text)); inpTF.text = ""; this.dispatchEvent(_local1); } private function toggleVis():void{ if (visible){ visible = false; } else { if (usable){ visible = true; if (visible){ parent.setChildIndex(this, (parent.numChildren - 1)); }; }; }; } public function addLine(_arg1:String):void{ var _local2:Boolean; var _local3:int; _local2 = (logTF.scrollV == logTF.maxScrollV); _local3 = logTF.scrollV; logTF.appendText((_arg1 + "\n")); if (_local2){ scroll("bottom", true); } else { logTF.scrollV = _local3; }; } private function draw(_arg1:Number, _arg2:Number):void{ var _local3:TextFormat; logTF = new TextField(); _local3 = new TextFormat(); logTF.selectable = true; logTF.multiline = true; logTF.wordWrap = true; logTF.mouseWheelEnabled = true; logTF.textColor = 0xFFFFFF; logTF.background = true; logTF.backgroundColor = 51; logTF.border = true; logTF.borderColor = 0xFFFFFF; _local3.align = TextFormatAlign.LEFT; _local3.font = "_typewriter"; _local3.size = 12; logTF.defaultTextFormat = _local3; this.addChild(logTF); inpTF = new TextField(); _local3 = new TextFormat(); inpTF.type = "input"; inpTF.selectable = true; inpTF.multiline = false; inpTF.wordWrap = false; inpTF.mouseWheelEnabled = false; inpTF.textColor = 0xFFFFFF; inpTF.background = true; inpTF.backgroundColor = 51; inpTF.border = true; inpTF.borderColor = 0xFFFFFF; _local3.align = TextFormatAlign.LEFT; _local3.font = "_typewriter"; _local3.size = 12; inpTF.defaultTextFormat = _local3; this.addChild(inpTF); adjustScale(_arg1, _arg2); } private function inputPassword(_arg1:String){ if (password.charAt(passwordLoc) == _arg1){ passwordLoc++; if (passwordLoc >= password.length){ show(); trace("YARRR! There be great, big console! She's enabled now, she is!"); trace("Press ~ to send her back to Davy Jones or call her again to do your bidding!"); passwordLoc = 0; }; } else { passwordLoc = 0; }; } private function scroll(_arg1:String, _arg2:Boolean=false):void{ var _local3:Number; var _local4:Number; var _local5:Number; if (((visible) || (_arg2))){ switch (_arg1){ case "up": logTF.scrollV = (logTF.scrollV - 18); break; case "down": logTF.scrollV = (logTF.scrollV + 18); break; case "top": logTF.scrollV = 1; break; case "bottom": logTF.scrollV = logTF.maxScrollV; break; }; }; } private static function fixNum(_arg1:int, _arg2:uint):String{ var _local3:int; var _local4:String; var _local5:*; _local4 = String(_arg1); _local3 = (_arg2 - _local4.length); if (_local3 < 0){ return (_local4.substr(0, _arg2)); }; if (_local3 > 0){ _local5 = 0; while (_local5 < _local3) { _local4 = ("0" + _local4); _local5++; }; return (_local4); }; return (_local4); } public static function trace(_arg1):void{ var _local2:Date; _local2 = new Date(); ref.addLine(((((((fixNum(_local2.minutes, 2) + ":") + fixNum(_local2.seconds, 2)) + ":") + fixNum(_local2.milliseconds, 3)) + "> ") + _arg1.toString())); } public static function create(_arg1:DisplayObjectContainer):Console{ var _local2:Console; _local2 = new (Console); _arg1.addChild(_local2); _local2.init(); return (_local2); } public static function show():void{ if (!ref.visible){ ref.usable = true; ref.toggleVis(); }; } } }//package
Section 29
//Container (Container) package { import flash.display.*; import flash.utils.*; public dynamic class Container extends Sprite { public var L:Array; public function init(){ L = []; } public function removeFromList(_arg1:DisplayObject):void{ var _local2:String; for (_local2 in L) { if (L[_local2].name == _arg1.name){ L.splice(_local2, 1); return; }; }; throw (new Error("cannot remove object from container's array - wasn't there in the first place.")); } public function getElementOfType(_arg1:String, _arg2:String){ var _local3:Class; var _local4:int; var _local5:int; var _local6:Array; _local3 = (getDefinitionByName(_arg1) as Class); _local5 = L.length; switch (_arg2){ case "first": _local4 = 0; while (_local4 < _local5) { if ((L[_local4] is _local3)){ return (L[_local4]); }; _local4++; }; break; case "last": _local4 = (_local5 - 1); while (_local4 >= 0) { if ((L[_local4] is _local3)){ return (L[_local4]); }; _local4--; }; break; case "all": _local6 = []; _local4 = (_local5 - 1); while (_local4 >= 0) { if ((L[_local4] is _local3)){ _local6.push(L[_local4]); }; _local4--; }; return (_local6); }; } public function addElement(_arg1:DisplayObject){ this.addChild(_arg1); addToList(_arg1); } public function getLastElement(){ if (L.length > 0){ return (L[(L.length - 1)]); }; return (null); } public function hasActiveElements():Boolean{ var _local1:String; for (_local1 in L) { if (L[_local1].active){ return (true); }; }; return (false); } public function kill():void{ orderAllElements("kill"); removeAllElements(); } public function setElementsProp(_arg1:String, _arg2):void{ var _local3:String; for (_local3 in L) { if (L[_local3].hasOwnProperty(_arg1)){ L[_local3][_arg1] = _arg2; }; }; } public function orderAllElements(_arg1:String){ var _local2:String; for (_local2 in L) { if (Boolean(L[_local2][_arg1])){ var _local5 = L[_local2]; _local5[_arg1](); }; }; } public function moveElementToButtom(_arg1:DisplayObject):void{ setChildIndex(_arg1, 0); } public function clearList(){ L = []; } public function getFirstElement(){ if (L.length > 0){ return (L[0]); }; return (null); } public function removeAllElements(){ clearList(); while (this.numChildren > 0) { this.removeChildAt(0); }; } public function run(){ var _local1:*; for (_local1 in L) { L[_local1].run(); }; } public function moveElementToTop(_arg1:DisplayObject):void{ setChildIndex(_arg1, (numChildren - 1)); } public function hasElements():Boolean{ return ((L.length > 0)); } public function addToList(_arg1:DisplayObject){ if (L.indexOf(_arg1) == -1){ L.push(_arg1); } else { throw (new Error("cannot add object to container's array - it's already there.")); }; } public function reloadList(){ var _local1:int; var _local2:int; clearList(); _local1 = this.numChildren; _local2 = 0; while (_local2 < _local1) { addToList(this[_local2]); _local2++; }; } public function removeElement(_arg1:DisplayObject){ removeFromList(_arg1); this.removeChild(_arg1); } public static function create(_arg1:DisplayObjectContainer):Container{ var _local2:Container; _local2 = new (Container); _arg1.addChild(_local2); _local2.init(); return (_local2); } } }//package
Section 30
//Counter (Counter) package { import flash.display.*; class Counter extends Sprite { private var circleCount:Number; private var rings:Array; private var V:Number; public function init(){ V = 0; rings = []; } public function get value():Number{ return (V); } public function setRadius(_arg1:Number){ scaleX = (_arg1 / 50); scaleY = scaleX; } private function addCircle():Shape{ var _local1:Shape; var _local2:Graphics; _local1 = new Shape(); this.addChild(_local1); _local1.scaleX = (50 + (20 * rings.length)); _local1.scaleX = (_local1.scaleX / 100); _local1.scaleY = _local1.scaleX; _local2 = _local1.graphics; _local2.lineStyle(1, 0xFFFFFF); _local2.drawCircle(0, 0, 50); rings.push(_local1); return (_local1); } public function set value(_arg1:Number){ var _local2:uint; var _local3:uint; var _local4:uint; var _local5:Shape; var _local6:uint; V = _arg1; _local2 = (V % 100); _local3 = Math.floor((V / 100)); _local4 = Math.max(rings.length, (_local3 + 1)); _local6 = 0; while (_local6 < _local4) { _local5 = rings[_local6]; if (_local5 == null){ _local5 = addCircle(); }; if (_local6 < _local3){ _local5.alpha = 1; } else { if (_local6 == _local3){ _local5.alpha = (_local2 / 100); } else { if (_local6 > _local3){ _local5.alpha = 0; }; }; }; _local6++; }; } } }//package
Section 31
//Creature (Creature) package { public class Creature extends FieldObject { public var bonusChance:uint; private var phase:uint; public var level:uint; private var thrustPower:Number; public var bait:CreatureBait; private var mode:int; private var desiredRadius:Number; private var home:Evil; public var buried:Boolean; private function safeMove():void{ var _local1:Number; var _local2:Number; _local1 = (x + XS); _local2 = (y + YS); if (pointAtHome(_local1, _local2)){ move(); } else { if (findNewHome(_local1, _local2)){ move(); } else { if (homeOK()){ home.grow((0.1 * level)); }; runHome((thrustPower * 1.5)); move(); if (!homeOK()){ expire(); return; }; }; if (!pointAtHome(x, y)){ expire(); }; }; } override public function init():void{ super.init(); active = true; mode = 0; phase = 1; drawCircle(50, 0xFFFFFF, 0); graphics.lineStyle(2, 0); drawLine(35, 0, 40, 0); drawLeg(60); drawLeg(90); drawLeg(120); drawLeg(-60); drawLeg(-90); drawLeg(-120); setRadius(0); forceRadius(0); setLevel(1); rotation = (Math.random() * 360); buried = false; } private function runHome(_arg1:Number):void{ if (homeOK()){ rotation = (Math.atan2((home.y - this.y), (home.x - this.x)) * R2D); thrust(_arg1); }; } private function homeOK():Boolean{ if (home){ return (((home.active) && ((home.radius > (this.radius * 2))))); }; return (false); } public function moveToUnderlay():void{ cont.removeFromList(this); field.underlay.addElement(this); cont = field.underlay; } private function expire():void{ setRadius(0); active = false; phase = 3; } private function drawLeg(_arg1:Number){ drawLimb(50, 20, _arg1); } public function creature(){ } public function setLevel(_arg1:Number):void{ _arg1 = Math.max(1, Math.min(10, _arg1)); level = _arg1; thrustPower = (4 + (1 * (_arg1 - 1))); setRadius((3 + (0.3 * (_arg1 - 1)))); } private function forceRadius(_arg1):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } private function thrust(_arg1:Number):void{ XS = (XS + (_arg1 * Math.cos((rotation / R2D)))); YS = (YS + (_arg1 * Math.sin((rotation / R2D)))); rotation = (Math.atan2(YS, XS) * R2D); } private function pointAtHome(_arg1:Number, _arg2:Number):Boolean{ var _local3:Number; var _local4:Number; var _local5:Number; if (homeOK()){ _local3 = (home.radius - this.radius); _local4 = (home.x - _arg1); _local5 = (home.y - _arg2); if (((_local4 * _local4) + (_local5 * _local5)) < (_local3 * _local3)){ return (true); }; }; return (false); } override public function kill():void{ home = null; bait = null; super.kill(); } public function setHome(_arg1:Evil):void{ home = _arg1; } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function findNewHome(_arg1:Number, _arg2:Number):Boolean{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Object; var _local7:Evil; var _local8:Array; _local8 = field.evils.L; for (_local6 in _local8) { _local7 = _local8[_local6]; if (_local7.active){ _local3 = (_local7.x - _arg1); _local4 = (_local7.y - _arg2); _local5 = (_local7.radius - radius); if (((_local3 * _local3) + (_local4 * _local4)) < (_local5 * _local5)){ home = _local7; return (true); }; }; }; return (false); } public function run():void{ var _local1:Graveyard; forceRadius((radius + ((desiredRadius - radius) / 10))); switch (phase){ case 1: if ((desiredRadius - radius) <= 1){ forceRadius(desiredRadius); phase = 2; }; break; case 2: if (((XS * XS) + (YS * YS)) < 0.5){ randomize(); thrust(thrustPower); }; safeMove(); slowDown(0.9); break; case 3: active = false; phase = 4; break; case 4: if (((!(buried)) && ((bonusChance > 0)))){ _local1 = field.createOO("graveyard", "ground"); _local1.x = x; _local1.y = y; _local1.bonusChance = bonusChance; _local1.go(); }; if (radius <= 0.5){ cont.removeElement(this); }; break; }; } private function randomize():void{ var _local1:Number; if (((bait) && (bait.active))){ _local1 = ((rotation - (Math.atan2((bait.y - y), (bait.x - x)) * R2D)) % 360); if (_local1 > 180){ _local1 = (_local1 - 360); } else { if (_local1 < -180){ _local1 = (_local1 + 360); }; }; if (_local1 > 45){ _local1 = 45; } else { if (_local1 < -45){ _local1 = -45; }; }; rotation = (rotation - _local1); } else { bait = null; rotation = (rotation + ((Math.random() * 60) - 30)); }; } } }//package
Section 32
//CreatureBait (CreatureBait) package { class CreatureBait extends FieldObject { private var timer:int; private var phase:uint; private var desiredRadius:Number; private var lurePower:Number; override public function init():void{ super.init(); active = true; setRadius(((10 + (Math.random() * 4)) - 2)); forceRadius(0); lurePower = 100; phase = 1; timer = 0; draw(); } public function expire():void{ var _local1:Explosion; _local1 = field.createOO("explosion", "overlay"); _local1.setup(x, y, (((100 + (lurePower * 0.5)) + (Math.random() * 40)) - 20), 35, 15); setRadius(0); active = false; } private function pushToTarget():Boolean{ var _local1:Evil; var _local2:Number; _local1 = largeEvil(); if (_local1){ _local2 = ((Math.atan2((_local1.y - y), (_local1.x - x)) + (Math.random() * 60)) - 30); polarPush(_local2, 5); return (true); }; return (false); } private function draw():void{ var _local1:Number; var _local2:Number; var _local3:int; graphics.beginFill(0xFFFFFF); graphics.lineStyle(1, 0xFFFFFF); graphics.drawCircle(0, 0, 50); graphics.endFill(); graphics.lineStyle(); _local3 = 0; while (_local3 < 5) { _local1 = (Math.random() * 360); _local2 = (20 + (Math.random() * 20)); graphics.beginFill(0); graphics.drawCircle((_local2 * Math.cos((_local1 / R2D))), (_local2 * Math.sin((_local1 / R2D))), (5 + (Math.random() * (((50 - _local2) / 2) - 5)))); graphics.endFill(); _local3++; }; } private function forceRadius(_arg1):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } private function largeEvil():Evil{ var _local1:Array; var _local2:int; if (field.evils.L.length > 0){ _local1 = field.evils.L.sortOn("radius", ((Array.DESCENDING | Array.NUMERIC) | Array.RETURNINDEXEDARRAY)); _local2 = (_local1.length - 1); if (_local2 > 10){ _local2 = 10; }; _local2 = (Math.random() * _local2); return (field.evils.L[_local1[_local2]]); }; return (null); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number):void{ x = _arg1; y = _arg2; lurePower = _arg3; } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 5))); if (active){ switch (phase){ case 1: if (timer <= 0){ if (pushToTarget()){ phase = 2; } else { timer = 10; }; }; timer--; break; case 2: move(); if (!onField()){ bounceOff(field, true); }; hitCheckWithEvils(hitEvil); lureCreatures(); break; case 3: move(); if (!onField()){ bounceOff(field, true); }; slowDown(0.95); lureCreatures(); if (timer <= 0){ expire(); }; timer--; break; }; } else { if (radius <= 0.5){ kill(); }; }; } private function creatureIsClose(_arg1:Creature):Boolean{ var _local2:Number; var _local3:Number; return ((((_local2 * _local2) + (_local3 * _local3)) < (lurePower * lurePower))); } private function hitEvil():void{ timer = (60 * 5); phase = 3; } private function lureCreatures():void{ var _local1:Creature; var _local2:Array; _local2 = field.creatures.L; for each (_local1 in _local2) { if (((!(_local1.bait)) && ((((((Math.random() * 1) / lurePower) < 5E-5)) || (creatureIsClose(_local1)))))){ _local1.bait = this; }; }; } } }//package
Section 33
//CreditsScreen (CreditsScreen) package { import flash.display.*; public class CreditsScreen extends Sprite { private var titles:Container; private var titleList:Array; public var expired:Function; private var pointer:Pointer; private var BG:Shape; public var sizeX:Number; private var phase:int; public var sizeY:Number; private var buttons:Container; public var radius:Number; private var finalRadius:Number; private var area:Area; public var mother:MotherOfAll; private var pointerAdjusted:Boolean; private var backButton:CircleButton; private static const SHRINK_PHASE:int = 3; private static const MAIN_PHASE:int = 2; private static const GROW_PHASE:int = 1; public function init(_arg1:Number, _arg2:Number):void{ sizeX = _arg1; sizeY = _arg2; finalRadius = ((Math.min(sizeX, sizeY) - 20) / 2); pointer = mother.pointer; buttons = Container.create(this); titles = Container.create(this); enterGrowPhase(); } private function drawBGBorder():void{ BG.graphics.lineStyle(2, 0xFFFFFF, 1, false, "none"); BG.graphics.drawCircle(0, 0, 50); } private function createBackButton():void{ var bt:CircleButton; bt = CircleButton.create(buttons, mother); bt.setup(0, (radius - 50), 30, "back"); bt.hittable = false; bt.softClick = function (){ enterShrinkPhase(); }; } private function enterGrowPhase():void{ drawBG(); setRadius(0); pointer.homeOnObject(this); phase = GROW_PHASE; } public function kill():void{ mother = null; backButton = null; titleList = null; pointer = null; buttons = null; titles = null; BG = null; area = null; expired = null; } private function enterMainPhase():void{ drawBGBorder(); pointer.leaveTarget(this, true); setRadius(finalRadius); drawArea(); seedTitleList(); createNextTitle(); createBackButton(); phase = MAIN_PHASE; } public function softSetRadius(_arg1:Number):void{ BG.scaleX = (_arg1 / 50); BG.scaleY = (_arg1 / 50); } private function drawBG():void{ BG = new Shape(); this.addChildAt(BG, 0); BG.graphics.beginFill(0); BG.graphics.drawCircle(0, 0, 50); BG.graphics.endFill(); } public function run():void{ switch (phase){ case GROW_PHASE: radius = (radius + ((finalRadius - radius) / 4)); softSetRadius(pointer.radius); if ((finalRadius - pointer.radius) < 0.5){ setRadius(finalRadius); enterMainPhase(); }; break; case MAIN_PHASE: if (area.alpha < 0.7){ area.alpha = (area.alpha + 0.05); }; buttons.run(); titles.run(); break; case SHRINK_PHASE: if (area.alpha > 0){ area.alpha = (area.alpha - 0.1); }; buttons.run(); titles.run(); if (pointerAdjusted){ radius = (radius - (radius / 4)); softSetRadius(pointer.radius); if (pointer.radius < 0.5){ pointer.leaveTarget(this); callEvent("expired"); }; } else { if (Math.abs((radius - pointer.radius)) < 0.5){ pointerAdjusted = true; }; }; break; }; } private function createNextTitle():void{ var f:Flasher; var BCLE:ButtonCreationListEntry; if ((((titleList.length > 0)) && (!((phase == SHRINK_PHASE))))){ f = Flasher.create(titles); BCLE = titleList.shift(); f.setup(BCLE.x, BCLE.y, BCLE.radius, BCLE.str); f.align = BCLE.num; f.setFilter(1, 3, 0xFFFFFF); f.finishedAnimating = function (){ createNextTitle(); }; }; } public function setRadius(_arg1:Number):void{ radius = _arg1; BG.scaleX = (_arg1 / 50); BG.scaleY = (_arg1 / 50); } private function seedTitleList():void{ var _local1:Array; var _local2:ButtonCreationListEntry; var _local3:int; _local1 = []; if (Global.kong){ _local3 = 0; while (_local3 < 10) { _local2 = new ButtonCreationListEntry(); _local1.push(_local2); _local3++; }; } else { _local3 = 0; while (_local3 < 10) { _local2 = new ButtonCreationListEntry(); _local1.push(_local2); _local3++; }; }; _local3 = 0; _local1[_local3].str = "#Areas"; _local1[_local3].x = 0; _local1[_local3].y = -205; _local1[_local3].radius = 100; _local3++; _local1[_local3].str = "#A game by Ridiculous."; _local1[_local3].x = 0; _local1[_local3].y = -141; _local1[_local3].num = 0; _local1[_local3].radius = 40; _local3++; _local1[_local3].str = "#Music"; _local1[_local3].x = 0; _local1[_local3].y = -70; _local1[_local3].num = 0; _local1[_local3].radius = 40; _local3++; _local1[_local3].str = "#The Opera of the frogs - e-d"; _local1[_local3].x = 0; _local1[_local3].y = -35; _local1[_local3].num = 0; _local1[_local3].radius = 30; _local3++; _local1[_local3].str = "#Beta testing"; _local1[_local3].x = -80; _local1[_local3].y = 30; _local1[_local3].num = 0; _local1[_local3].radius = 40; _local3++; _local1[_local3].str = "#The Magical Oak"; _local1[_local3].x = -80; _local1[_local3].y = 70; _local1[_local3].num = 0; _local1[_local3].radius = 30; _local3++; _local1[_local3].str = "#AlienChickenPie"; _local1[_local3].x = -80; _local1[_local3].y = 110; _local1[_local3].radius = 30; _local3++; _local1[_local3].str = "#The Sentry"; _local1[_local3].x = -80; _local1[_local3].y = 150; _local1[_local3].radius = 30; _local3++; _local1[_local3].str = "#Hosted on"; _local1[_local3].x = 130; _local1[_local3].y = 80; _local1[_local3].radius = 30; _local3++; _local1[_local3].str = "#ArmorGames"; _local1[_local3].x = 130; _local1[_local3].y = 105; _local1[_local3].radius = 40; titleList = _local1; } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } private function drawArea():void{ area = new Area(); addChildAt(area, 1); area.setRadius(240); area.x = 0; area.y = 0; area.alpha = 0; area.gotoAndStop(int(((Math.random() * area.totalFrames) + 1))); } private function enterShrinkPhase():void{ buttons.orderAllElements("onScreenRemove"); titles.orderAllElements("remove"); pointerAdjusted = false; pointer.homeOnObject(this); phase = SHRINK_PHASE; } } }//package
Section 34
//Driller (Driller) package { import flash.display.*; public class Driller extends MovieClip { private var targetDir_D:Number; public var active:Boolean; private var field:Field; private var YS:Number; private var angleDelta_D:Number; private var cont:Container; private var turning:Boolean; private var speed:Number; private var lifeSpan:int; private var XS:Number; public var radius:Number; public var desiredRadius:Number; public static const PI:Number = 3.14159265358979; public static const R2D:Number = 57.2957795130823; public function init():void{ active = true; forceRadius(1); setRadius(((10 + (Math.random() * 6)) - 3)); lifeSpan = (60 * 4); } public function link(_arg1:Field, _arg2:Container):void{ field = _arg1; cont = _arg2; } private function updateSpeeds(){ XS = (speed * Math.cos((rotation / R2D))); YS = (speed * Math.sin((rotation / R2D))); } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } private function onField():Boolean{ var _local1:Number; _local1 = (field.radius + this.radius); return ((((x * x) + (y * y)) < (_local1 * _local1))); } public function kill():void{ field = null; cont.removeElement(this); cont = null; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number){ x = _arg1; y = _arg2; rotation = (_arg3 * R2D); speed = _arg4; updateSpeeds(); } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 10))); if (active){ if (turning){ turn(); } else { if (Math.random() < 0.02){ beginTurn(); }; }; field.evils.L.forEach(hitTestEvil); move(); lifeSpan--; if ((((lifeSpan <= 0)) || ((desiredRadius <= 2)))){ active = false; setRadius(1); }; } else { alpha = (alpha - 0.05); if (alpha <= 0){ kill(); }; }; } private function turn():void{ var _local1:Number; rotation = (rotation + angleDelta_D); updateSpeeds(); _local1 = ((rotation - targetDir_D) % 360); if (_local1 > 180){ _local1 = (_local1 - 360); } else { if (_local1 < -180){ _local1 = (_local1 + 360); }; }; if ((((-3 < _local1)) && ((_local1 < 3)))){ turning = false; }; } public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function beginTurn():void{ var _local1:Number; targetDir_D = (Math.random() * 360); _local1 = ((rotation - targetDir_D) % 360); if (_local1 > 180){ _local1 = (_local1 - 360); } else { if (_local1 < -180){ _local1 = (_local1 + 360); }; }; angleDelta_D = ((_local1)>0) ? -2 : 2; turning = true; } private function move():void{ x = (x + XS); y = (y + YS); } private function hitTestEvil(_arg1, _arg2:Number, _arg3:Array):void{ var _local4:Number; var _local5:Number; var _local6:Number; if (((_arg1.active) && (field.contact(this, _arg1)))){ _local4 = (this.x - _arg1.x); _local5 = (this.y - _arg1.y); _local6 = ((this.radius + _arg1.radius) - Math.sqrt(((_local4 * _local4) + (_local5 * _local5)))); _arg1.setRadius(((_arg1.radius - this.radius) - _local6)); setRadius((desiredRadius - 0.01)); updateSpeeds(); x = (x + ((Math.random() * 4) - 2)); y = (y + ((Math.random() * 4) - 2)); }; } public function Bonus(){ } } }//package
Section 35
//DynProp (DynProp) package { public class DynProp { public var mod:Number; private var _max:Number; private var _value:Number; private var _min:Number; public function DynProp(_arg1:Number=0.5, _arg2:Number=0, _arg3:Number=1, _arg4:Number=0.1):void{ setup(_arg1, _arg2, _arg3, _arg4); } public function set max(_arg1:Number):void{ if (_arg1 >= _min){ if (_arg1 < _value){ _value = _arg1; }; _max = _arg1; }; } public function set value(_arg1:Number):void{ _value = _arg1; if (_value < _min){ _value = _min; } else { if (_value > _max){ _value = _max; }; }; } public function step():void{ value = (value + mod); } public function get max():Number{ return (_max); } public function unstep():void{ value = (value - mod); } public function get value():Number{ return (_value); } public function get min():Number{ return (_min); } public function set min(_arg1:Number):void{ if (_arg1 <= _max){ if (_arg1 > _value){ _value = _arg1; }; _min = _arg1; }; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ _value = _arg1; _min = _arg2; _max = _arg3; mod = _arg4; } } }//package
Section 36
//Evil (Evil) package { class Evil extends FieldObject { public var reachedSizeLimit:Function; public var expired:Function; public var demoMode:Boolean; public var areaChance:uint; private var armor:Number; public var sizeLimit:uint; public var dontGrow:Boolean; private var growthRate:Number; private var moving:Boolean; public var noScore:Boolean; public var creatureChance:uint; private var deathPhase:Number; private var level:Number; public var haunted:Boolean; private var maxSize:Number; public var desiredRadius:Number; private var lifeTime:int; function Evil():void{ } override public function stop():void{ super.stop(); moving = false; } private function setArmor():void{ if (demoMode){ armor = (1 + (Math.random() * 0.05)); if (Math.random() < 0.5){ armor = (1 / armor); }; } else { armor = (1 + (Math.random() * 0.2)); if (Math.random() < 0.5){ armor = (1 / armor); }; }; } override public function init():void{ super.init(); x = 0; y = 0; drawCircle(50, 0xFFFFFF); setRadius(30); forceRadius(1); setArmor(); areaChance = 100; active = true; moving = false; lifeTime = 0; maxSize = 0; sizeLimit = 0; dontGrow = false; noScore = false; } public function grow(_arg1:Number):void{ desiredRadius = (desiredRadius + (growthRate * _arg1)); } public function shrink(_arg1:Number):void{ desiredRadius = (desiredRadius - _arg1); } override public function push(_arg1:Number, _arg2:Number):void{ super.push(_arg1, _arg2); moving = true; } public function get nextRad():Number{ return ((radius + growthRate)); } override protected function slowDown(_arg1:Number):void{ super.slowDown(_arg1); if (((XS * XS) + (YS * YS)) < 0.01){ stop(); }; } public function hitMegaBall(_arg1:MegaBall){ takeDamage((_arg1.damage * armor)); } override public function kill():void{ expired = null; reachedSizeLimit = null; super.kill(); } public function setLevel(_arg1:uint):void{ level = _arg1; growthRate = (0.4 + (0.23 * (_arg1 - 1))); setRadius((30 + (5 * (_arg1 - 1)))); } private function addScore():void{ var _local1:int; _local1 = ((level * 500) * Math.exp((-(lifeTime) * 0.0013))); field.spawnHint(x, y, String(("+" + _local1))); field.score = (field.score + _local1); } private function forceRadius(_arg1):void{ radius = _arg1; scaleX = (radius / 50); scaleY = (radius / 50); } private function emmitBlob():Blob{ var _local1:Blob; var _local2:Number; var _local3:Number; _local1 = field.createOO("blob", "underlay"); _local2 = ((Math.random() * PI) * 2); _local3 = (radius - 5); _local1.setup((x + (_local3 * Math.cos(_local2))), (y + (_local3 * Math.sin(_local2))), (5 + (Math.random() * 5)), (2 + (Math.random() * 3)), _local2); _local1.setFade(0); _local1.setShrink(0.92); _local1.setSlowdown(0.92); _local1.draw(5, 0xFFFFFF); return (_local1); } public function setVar(_arg1:String, _arg2):void{ this[_arg1] = _arg2; } private function sizeCheck():void{ if (demoMode){ if ((((sizeLimit > 0)) && ((radius > sizeLimit)))){ radius = sizeLimit; desiredRadius = sizeLimit; callEvent("reachedSizeLimit"); }; }; } public function endLife():void{ desiredRadius = 20; active = false; deathPhase = 0; callEvent("expired"); } public function hitSpirit(_arg1:Spirit):void{ takeDamage((_arg1.damage * armor)); } public function hitBullet(_arg1:Bullet):void{ takeDamage((_arg1.damage * armor)); } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function emmitBlobs(_arg1:Number):void{ var _local2:*; _local2 = 0; while (_local2 < _arg1) { emmitBlob(); _local2++; }; } private function almostDead(){ emmitBlobs((5 + int((Math.random() * 10)))); if (Math.random() < (areaChance / 100)){ field.createRandomArea(x, y); }; if (!noScore){ addScore(); }; } public function run():void{ if (moving){ move(); slowDown(0.81); if (!field.cordsOnField(x, y)){ bounceAsPoint(field, true); }; }; reScale(); if (active){ haunted = false; lifeTime++; if (dontGrow){ dontGrow = false; } else { grow((1 * armor)); }; if (desiredRadius < 20){ endLife(); }; if ((((creatureChance > 0)) && ((Math.random() < (1 / creatureChance))))){ field.spawnRandomCreature(this); }; } else { switch (deathPhase){ case 0: setRadius((14 + ((desiredRadius - 14) * 0.8))); if (radius < 15){ almostDead(); deathPhase = 1; }; break; case 1: setRadius((radius * 0.3)); if (radius < 0.5){ kill(); }; break; }; }; } public function hitExplosion(_arg1:Explosion):void{ takeDamage(_arg1.damage); } public function hardShrink(_arg1:Number):void{ forceRadius((radius - _arg1)); desiredRadius = radius; } private function reScale():void{ var _local1:Number; _local1 = (radius - desiredRadius); maxSize = Math.max(maxSize, radius); if (_local1 > 25){ emmitBlobs((Math.random() * Math.min((_local1 / 4), 10))); }; forceRadius((radius + ((desiredRadius - radius) / 5))); } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } private function takeDamage(_arg1:Number):void{ desiredRadius = (desiredRadius - _arg1); desiredRadius = Math.max(0, desiredRadius); } public function getVar(_arg1:String){ return (this[_arg1]); } public function hitLaser(_arg1:Laser):void{ takeDamage(_arg1.damage); } } }//package
Section 37
//Explosion (Explosion) package { public class Explosion extends FieldObject { private var alphaDelta:Number; public var damage:Number; private var finalRadius:Number; private var delta:Number; override public function init():void{ super.init(); setup(0, 0, 10, 1); drawGradCircle(50, [0xFFFFFF, 0xFFFFFF], [0, 100], [0, 100]); active = true; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=10):void{ x = _arg1; y = _arg2; finalRadius = Math.max(_arg3, 1); damage = _arg4; delta = ((finalRadius - 1) / _arg5); alphaDelta = (1 / _arg5); scaleX = 0; scaleY = 0; alpha = 0; setSize(1); } public function setSize(_arg1:Number):void{ radius = _arg1; scaleX = (radius / 50); scaleY = (radius / 50); } override public function setRadius(_arg1:Number):void{ finalRadius = _arg1; } private function applyDamage():void{ var _local1:String; var _local2:Evil; var _local3:Array; _local3 = field.evils.L; for (_local1 in _local3) { _local2 = _local3[_local1]; if (_local2.active){ if (field.contact(this, _local2)){ _local2.hitExplosion(this); }; }; }; } public function expand(_arg1:uint=1):void{ alpha = (alpha + (alphaDelta * _arg1)); setSize((radius + (delta * _arg1))); if (radius >= finalRadius){ radius = finalRadius; alpha = 1; delta = (delta / 2.5); alphaDelta = (alphaDelta * 2); active = false; }; } public function run():void{ move(); if (active){ applyDamage(); expand(); } else { setSize((radius + delta)); alpha = (alpha - alphaDelta); if (alpha <= 0){ kill(); }; }; } } }//package
Section 38
//Fance (Fance) package { public class Fance extends FieldObject { private var spawnNum:int; private var left:Fance; private var right:Fance; private var angleSpeed:Number; private var father:Fance; private var lifeSpan:int; private var deployCount:int; private var phase:int; private var target:Evil; private var son:Fance; private var main:Boolean; private var baseAS:Number; private static const WAIT_PHASE:int = 5; private static const FIRE_PHASE:int = 3; private static const DEPLOY_PHASE:int = 2; private static const SLIDE_PHASE:int = 4; private static const HUNT_PHASE:int = 1; override public function init():void{ super.init(); setRadius(10); deployCount = 2; lifeSpan = (40 * 15); draw(); active = true; } private function acquireNewTarget():void{ target = nearestEvil(); } private function expire():void{ active = false; } private function slideOnTarget():void{ var _local1:Number; var _local2:Number; if (((target) && (target.active))){ _local1 = Math.atan2((target.y - y), (target.x - x)); _local2 = target.radius; _local1 = (_local1 + (angleSpeed / target.radius)); x = (target.x + (_local2 * Math.cos((_local1 - PI)))); y = (target.y + (_local2 * Math.sin((_local1 - PI)))); rotation = (_local1 * R2D); angleSpeed = (angleSpeed * 0.6); if ((angleSpeed * angleSpeed) <= 0.1){ settle(); }; } else { settle(); }; } private function pushToTarget():void{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local1 = (target.x - x); _local2 = (target.y - y); _local3 = Math.atan2(_local2, _local1); _local4 = (radius + target.radius); _local5 = ((rotation - (_local3 * R2D)) % 360); if (_local5 > 180){ _local5 = (_local5 - 360); } else { if (_local5 < -180){ _local5 = (_local5 + 360); }; }; polarPush(_local3, 1); rotation = (rotation - (_local5 / 10)); } private function fire():void{ var _local1:Laser; _local1 = field.createOO("laser", "overlay"); _local1.setup(x, y, (rotation / R2D), 15); _local1.addTimer(4); _local1.fire(); expire(); } private function draw():void{ graphics.beginFill(0); graphics.lineStyle(1, 0xFFFFFF); graphics.moveTo(-25, 43); graphics.curveTo(0, 0, 50, 0); graphics.curveTo(0, 0, -25, -43); graphics.lineTo(-25, 43); graphics.endFill(); } private function settle():void{ stop(); angleSpeed = 0; deploy(); } override public function kill():void{ target = null; left = null; right = null; father = null; son = null; super.kill(); } public function setup(_arg1:Number, _arg2:Number, _arg3:int, _arg4:Evil=null, _arg5:Number=0, _arg6:Fance=null):void{ x = _arg1; y = _arg2; spawnNum = _arg3; target = _arg4; angleSpeed = _arg5; baseAS = _arg5; father = _arg6; if (father){ main = false; phase = SLIDE_PHASE; } else { main = true; phase = HUNT_PHASE; }; } private function hunt():void{ if (((target) && (target.active))){ pushToTarget(); } else { acquireNewTarget(); }; if (hitCheckWithEvils()){ deploy(); }; } private function openFire():void{ phase = FIRE_PHASE; if (son){ son.openFire(); }; if (left){ left.openFire(); }; if (right){ right.openFire(); }; } public function run():void{ if (active){ if (main){ switch (phase){ case HUNT_PHASE: hunt(); if (lifeSpan <= 0){ expire(); }; lifeSpan--; break; case DEPLOY_PHASE: hitTestWithEvils(hitEvil); break; case FIRE_PHASE: if (Math.random() < 0.4){ fire(); }; hitTestWithEvils(hitEvil); break; }; move(); slowDown(0.8); } else { switch (phase){ case SLIDE_PHASE: slideOnTarget(); hitTestWithEvils(hitEvil); break; case WAIT_PHASE: hitTestWithEvils(hitEvil); break; case FIRE_PHASE: if (Math.random() < 0.4){ fire(); }; hitTestWithEvils(hitEvil); break; }; }; } else { setRadius((radius * 0.9)); if (radius <= 0.5){ kill(); }; }; } private function signal():void{ if (father){ father.signal(); } else { deployCount--; if (deployCount == 0){ openFire(); }; }; } private function hitEvil(_arg1:Evil):void{ _arg1.dontGrow = true; if ((((((phase == SLIDE_PHASE)) && (!((_arg1 == target))))) && ((distFrom(_arg1) < distFrom(target))))){ target = _arg1; }; } private function deploy():void{ var _local1:Fance; if (main){ phase = DEPLOY_PHASE; stop(); target = nearestEvil(); _local1 = field.createOO("fance", "overlay"); _local1.setup(x, y, (spawnNum - 1), target, 15, this); left = _local1; _local1 = field.createOO("fance", "overlay"); _local1.setup(x, y, (spawnNum - 1), target, -15, this); right = _local1; } else { if ((((spawnNum > 0)) && (onField()))){ phase = WAIT_PHASE; _local1 = field.createOO("fance", "overlay"); _local1.setup(x, y, (spawnNum - 1), target, baseAS, this); son = _local1; } else { phase = WAIT_PHASE; signal(); }; }; } } }//package
Section 39
//Field (Field) package { import flash.display.*; import flash.utils.*; public class Field extends Sprite { private var evilTimerOffset:uint; public var mouseArrived:Function; private var evilTimer:uint; public var creatures:Container; private var areaChance:DynProp; public var demoMode:Boolean; private var levelMaxTime:int; private var areaSize:Number; private var bonusChance:DynProp; public var gameLost:Function; public var overlay:Container; private var evilLevel:uint; private var creatureChance:uint; public var soundList:VolatileList; private var areaSizeOffset:Number; private var levelTime:int; private var evilTimeOffset:uint; private var creatureLevel:uint; private var evilTime:DynProp; public var radius:Number; public var score:uint; private var mouseSpeed:Number; public var frozen:Boolean; public var groundlay:Container; public var hints:Container; public var player:Player; private var freezeTimer:int; private var dynamicsTime:uint; public var bonuses:Container; public var xmouse:Number; private var background:Shape; public var gameWon:Function; public var evils:Container; private var mouseNeedsMoving:Boolean; private var levelTag:Sign; private var creatureLevelOffset:uint; private var phase:int; private var dynamicsTimer:int; public var areas:Container; private var bonusTypes:Array; public var bullets:Container; public var finalLevel:Boolean; public var underlay:Container; private var scoreDisplay:ScoreDisplay; public var ymouse:Number; private var mouseTX:Number; private var areaTypes:Array; private var mouseTY:Number; public var game:Game; public static const R2D:Number = 57.2957795130823; public static const BEGIN_PHASE:int = 0; public static const PLAY_PHASE:int = 1; public static const LOSE_PHASE:int = 3; public static const WIN_PHASE:int = 2; public static const PI:Number = 3.14159265358979; public function playAreasAnim():void{ areas.orderAllElements("play"); } public function cordsOnField(_arg1:Number, _arg2:Number):Boolean{ return ((((_arg1 * _arg1) + (_arg2 * _arg2)) < (radius * radius))); } public function createRandomArea(_arg1:Number, _arg2:Number):Area{ return (createArea(_arg1, _arg2, ((areaSize + ((Math.random() * areaSizeOffset) * 2)) - areaSizeOffset), areaTypes[int((Math.random() * areaTypes.length))])); } public function setupCreatures(_arg1:uint, _arg2:uint, _arg3:uint):void{ creatureChance = _arg1; creatureLevel = _arg2; creatureLevelOffset = _arg3; } public function getDist(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{ return (Math.sqrt((((_arg3 - _arg1) * (_arg3 - _arg1)) + ((_arg4 - _arg2) * (_arg4 - _arg2))))); } public function contact(_arg1:Object, _arg2:Object):Boolean{ var _local3:Number; var _local4:Number; var _local5:Number; _local3 = (_arg1.x - _arg2.x); _local4 = (_arg1.y - _arg2.y); _local5 = (_arg1.radius + _arg2.radius); return ((((_local3 * _local3) + (_local4 * _local4)) < (_local5 * _local5))); } public function fixTimer(_arg1:Number):void{ var _local2:Number; _local2 = (_arg1 / levelMaxTime); levelMaxTime = _arg1; levelTime = (levelTime * _local2); } public function runAsPausedDemo():void{ if (mouseNeedsMoving){ moveMouse(); }; } public function beginGame(){ phase = BEGIN_PHASE; } public function createGraphic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:String, _arg5:int, _arg6:Number=0):void{ var _local7:Flasher; _local7 = Flasher.create(hints); _local7.setup(_arg1, _arg2, _arg3, _arg4); _local7.time = _arg5; _local7.rotation = _arg6; } private function hitTestBulletsWithEvils(){ var _local1:String; var _local2:Evil; var _local3:String; var _local4:Bullet; var _local5:Array; var _local6:Array; _local5 = evils.L; _local6 = bullets.L; for (_local1 in _local5) { _local2 = _local5[_local1]; if (_local2.active){ for (_local3 in _local6) { _local4 = _local6[_local3]; if (((_local4.active) && (contact(_local2, _local4)))){ _local2.hitBullet(_local4); _local4.hitEvil(_local2); }; }; }; }; } public function clear(){ areas.removeAllElements(); bonuses.removeAllElements(); underlay.removeAllElements(); evils.removeAllElements(); creatures.removeAllElements(); bullets.removeAllElements(); overlay.removeAllElements(); hints.removeAllElements(); player.x = 0; player.y = 0; player.rotation = 0; player.active = true; player.stop(); xmouse = 0; ymouse = 0; mouseNeedsMoving = false; phase = PLAY_PHASE; } public function unfreeze():void{ areas.orderAllElements("play"); frozen = false; } public function demoSetup(){ setupLevel(300, 15); setupEvils(60, 15, 1); setupAreas(0, 75, 25, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); setupCreatures(0, 1, 0); setupBonuses(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]); setupPlayer(1, 5, 1, 3, 0); setupDynamics(0, 0, 0, 0, 0, 0, 0); } public function createRandomBonus(_arg1:Number, _arg2:Number, _arg3:Number=5):Bonus{ return (createBonus(_arg1, _arg2, bonusTypes[int((Math.random() * bonusTypes.length))], _arg3)); } public function createBonus(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Bonus{ var _local5:Bonus; _local5 = new Bonus(); bonuses.addElement(_local5); _local5.link(this, bonuses); _local5.init(); _local5.x = _arg1; _local5.y = _arg2; _local5.rotation = (Math.random() * 360); _local5.setType(_arg3); _local5.setLevel(_arg4); _local5.demoMode = demoMode; return (_local5); } public function spawnRandomCreature(_arg1:Evil):void{ var _local2:Number; var _local3:Number; _local2 = (Math.random() * (_arg1.radius - 20)); _local3 = ((Math.random() * PI) * 2); createCreature((_arg1.x + (_local2 * Math.cos(_local3))), (_arg1.y + (_local2 * Math.sin(_local3))), ((creatureLevel + ((Math.random() * creatureLevelOffset) * 2)) - creatureLevelOffset)); } public function initAsDemo(){ demoMode = true; x = 0; y = 0; score = 0; finalLevel = false; createBackground(true); areas = Container.create(this); groundlay = Container.create(this); createPlayer(); bonuses = Container.create(this); underlay = Container.create(this); evils = Container.create(this); creatures = Container.create(this); bullets = Container.create(this); overlay = Container.create(this); hints = Container.create(this); soundList = new VolatileList(); FieldSound.globalInit(this); demoSetup(); if (isNaN(xmouse)){ xmouse = 0; }; if (isNaN(ymouse)){ ymouse = 0; }; mouseSpeed = 10; mouseNeedsMoving = false; } public function freeze(_arg1:int):void{ frozen = true; if (freezeTimer < 0){ freezeTimer = 0; }; freezeTimer = (freezeTimer + _arg1); areas.orderAllElements("stop"); } public function run():void{ switch (phase){ case BEGIN_PHASE: phase = PLAY_PHASE; break; case PLAY_PHASE: if (frozen){ moveScreen(1); player.run(); bonuses.run(); hints.run(); hitTestBonuses(); hitTestPlayerWithEvils(); soundList.orderAllElements("run"); soundList.verify("active"); freezeTimer--; if (freezeTimer <= 0){ unfreeze(); }; } else { if (evilTimer == 0){ spawnRandomEvil(); evilTimer = (evilTime.value + int((((Math.random() * 2) - 1) * evilTimeOffset))); if (evilTimer < 0){ evilTimer = 0; }; }; evilTimer--; if (dynamicsTimer > 0){ dynamicsTimer--; if (dynamicsTimer == 0){ applyDynamics(); dynamicsTimer = dynamicsTime; }; }; scoreDisplay.updateScore(score); scoreDisplay.run(); moveScreen(1); areas.run(); groundlay.run(); player.run(); bonuses.run(); underlay.run(); evils.run(); creatures.run(); overlay.run(); bullets.run(); hints.run(); hitTestBonuses(); hitTestAreas(); hitTestPlayerWithEvils(); hitTestBulletsWithEvils(); playerDeathTest(); soundList.orderAllElements("run"); soundList.verify("active"); if (!finalLevel){ player.pie.value = (levelTime / levelMaxTime); if (levelTime >= levelMaxTime){ winGame(1.5); }; }; levelTime++; }; break; case LOSE_PHASE: scoreDisplay.updateScore(score); scoreDisplay.run(); areas.run(); groundlay.run(); bonuses.run(); underlay.run(); evils.run(); creatures.run(); overlay.run(); bullets.run(); hints.run(); moveScreenToPoint(0, 0, 10); if (levelTime <= 0){ callEvent("gameLost"); }; levelTime--; break; case WIN_PHASE: scoreDisplay.updateScore(score); scoreDisplay.run(); player.run(); groundlay.run(); areas.run(); bonuses.run(); underlay.run(); evils.run(); creatures.run(); overlay.run(); bullets.run(); hints.run(); moveScreenToPoint(0, 0, 10); if (levelTime <= 0){ callEvent("gameWon"); }; levelTime--; break; }; } private function loseGame(_arg1:Number){ if (phase == PLAY_PHASE){ player.active = false; phase = LOSE_PHASE; showGOMessage(); levelTime = (_arg1 * 40); }; } public function createEvil(_arg1:Number, _arg2:Number, _arg3:Number):Evil{ var _local4:Evil; _local4 = new Evil(); evils.addElement(_local4); _local4.demoMode = demoMode; _local4.link(this, evils); _local4.init(); _local4.x = _arg1; _local4.y = _arg2; _local4.setLevel(_arg3); _local4.areaChance = areaChance.value; _local4.creatureChance = creatureChance; return (_local4); } public function spawnHint(_arg1:Number, _arg2:Number, _arg3:String, _arg4:Boolean=false):Hint{ var _local5:*; _local5 = createHint(); _local5.setup(_arg1, _arg2, _arg4); _local5.setText(_arg3, 20); _local5.setFade(0.02); return (_local5); } private function hitTestBonuses():void{ var _local1:String; var _local2:Bonus; var _local3:*; _local3 = bonuses.L; for (_local1 in _local3) { _local2 = _local3[_local1]; if (_local2.active){ _local2.getDistFromPlayer(getDist(player.x, player.y, _local2.x, _local2.y)); }; }; } private function showGWMessage():void{ var ht:Hint; ht = spawnHint(0, 0, ""); ht.reset(); ht.setTextWidth(200); ht.setText("^_^", 100); ht.addBG(); ht.setupFilter(3, 5); ht.setTimer((60 * 10)); ht.setFade(0.02); ht.expired = function (){ game.endGame(true); }; } private function spawnRandomEvil():Evil{ var _local1:Number; var _local2:Number; var _local3:Evil; do { _local1 = (((Math.random() * radius) * 2) - radius); _local2 = (((Math.random() * radius) * 2) - radius); } while (!(cordsOnField(_local1, _local2))); _local3 = createEvil(_local1, _local2, evilLevel); return (_local3); } public function stopAreasAnim():void{ areas.orderAllElements("stop"); } private function hitTestPlayerWithEvils():void{ var _local1:String; var _local2:Evil; var _local3:*; _local3 = evils.L; for (_local1 in _local3) { _local2 = _local3[_local1]; if (((_local2.active) && (contact(player, _local2)))){ player.hitEvil(_local2); }; }; } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } public function setupEvils(_arg1:uint, _arg2:uint, _arg3:uint):void{ evilTime = new DynProp(_arg1, _arg1, _arg1, 0); evilTimeOffset = _arg2; evilLevel = _arg3; } private function createPlayer():void{ player = new Player(); this.addChild(player); player.setFather(this); player.init(); player.demoMode = demoMode; player.setupWeapon(1, 1, 1, 12); } public function findDist(_arg1:Object, _arg2:Object, _arg3:Number):Boolean{ var _local4:Number; var _local5:Number; var _local6:Number; _local4 = (_arg1.x - _arg2.x); _local5 = (_arg1.y - _arg2.y); _local6 = ((_arg1.radius + _arg2.radius) + _arg3); return ((((_local4 * _local4) + (_local5 * _local5)) < (_local6 * _local6))); } public function unpause():void{ game.unpause(); } public function setupAreas(_arg1:uint, _arg2:Number, _arg3:Number, _arg4:Array):void{ areaChance = new DynProp(_arg1, _arg1, _arg1, 0); areaSize = _arg2; areaSizeOffset = _arg3; areaTypes = _arg4; } public function setupLevel(_arg1:Number, _arg2:uint):void{ setRadius(_arg1); levelMaxTime = (_arg2 * 40); levelTime = 0; if (finalLevel){ player.pie.value = 0; }; } public function init():void{ x = 0; y = 0; score = 0; finalLevel = false; createBackground(); createDataDisplay(); areas = Container.create(this); groundlay = Container.create(this); createPlayer(); bonuses = Container.create(this); underlay = Container.create(this); evils = Container.create(this); creatures = Container.create(this); bullets = Container.create(this); overlay = Container.create(this); hints = Container.create(this); soundList = new VolatileList(); FieldSound.globalInit(this); frozen = false; freezeTimer = 0; dynamicsTimer = 0; emptySetup(); demoMode = false; xmouse = 0; ymouse = 0; mouseSpeed = 10; mouseNeedsMoving = false; } public function setupLevelTag(_arg1):void{ levelTag.setup(0, 0, 100, _arg1); levelTag.rotation = ((Math.random() * 60) - 30); } private function createDataDisplay():void{ levelTag = new Sign(); this.addChild(levelTag); scoreDisplay = new ScoreDisplay(); this.addChild(scoreDisplay); scoreDisplay.y = 50; } public function createBullet(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Bullet{ var _local5:Bullet; _local5 = new Bullet(); bullets.addElement(_local5); _local5.link(this, bullets); _local5.init(); _local5.x = _arg1; _local5.y = _arg2; _local5.rotation = (_arg3 * R2D); _local5.setLevel(_arg4); _local5.updateSpeeds(); return (_local5); } public function emptySetup():void{ setupLevel(300, 15); setupEvils(60, 15, 1); setupAreas(0, 75, 25, []); setupCreatures(0, 1, 0); setupBonuses(0, []); setupPlayer(1, 5, 1, 3, 0); setupDynamics(0, 0, 0, 0, 0, 0, 0); } public function rawSetup(_arg1:Array):void{ setupLevel(_arg1[5], _arg1[6]); setupEvils.apply(this, _arg1[0]); setupAreas.apply(this, _arg1[1]); setupCreatures.apply(this, _arg1[2]); setupBonuses.apply(this, _arg1[3]); setupPlayer.apply(this, _arg1[4]); setupDynamics.apply(this, _arg1[7]); } private function playerDeathTest():void{ var _local1:String; var _local2:Evil; var _local3:*; if (!player.bulletMode){ _local3 = evils.L; for (_local1 in _local3) { _local2 = _local3[_local1]; if (((_local2.active) && (findDist(player, _local2, -(player.radius))))){ loseGame((demoMode) ? 2 : 1.5); }; }; }; } private function moveMouse(){ var _local1:Number; var _local2:Number; _local1 = (mouseTX - xmouse); _local2 = (mouseTY - ymouse); xmouse = (xmouse + (_local1 / mouseSpeed)); ymouse = (ymouse + (_local2 / mouseSpeed)); if (((_local1 * _local1) + (_local2 * _local2)) < 0.5){ mouseNeedsMoving = false; callEvent("mouseArrived"); }; } private function createBackground(_arg1:Boolean=false){ var _local2:Graphics; background = new Shape(); this.addChild(background); _local2 = background.graphics; if (_arg1){ _local2.lineStyle(1, 0xFFFFFF); } else { _local2.lineStyle(0, 0); }; _local2.beginFill(0); _local2.drawCircle(0, 0, 50); _local2.endFill(); background.cacheAsBitmap = true; } public function createCreature(_arg1:Number, _arg2:Number, _arg3:Number):Creature{ var _local4:Creature; _local4 = new Creature(); creatures.addElement(_local4); _local4.link(this, creatures); _local4.init(); _local4.x = _arg1; _local4.y = _arg2; _local4.bonusChance = bonusChance.value; _local4.setLevel(_arg3); return (_local4); } public function kill():void{ game = null; if (background){ removeChild(background); background = null; }; if (areas){ areas.kill(); removeChild(areas); areas = null; }; if (groundlay){ groundlay.kill(); removeChild(groundlay); groundlay = null; }; if (bonuses){ bonuses.kill(); removeChild(bonuses); bonuses = null; }; if (underlay){ underlay.kill(); removeChild(underlay); underlay = null; }; if (evils){ evils.kill(); removeChild(evils); evils = null; }; if (creatures){ creatures.kill(); removeChild(creatures); creatures = null; }; if (bullets){ bullets.kill(); removeChild(bullets); bullets = null; }; if (overlay){ overlay.kill(); removeChild(overlay); overlay = null; }; if (hints){ hints.kill(); removeChild(hints); hints = null; }; if (player){ player.kill(); removeChild(player); player = null; }; if (scoreDisplay){ scoreDisplay.kill(); removeChild(scoreDisplay); scoreDisplay = null; }; areaTypes = null; bonusTypes = null; mouseArrived = null; gameLost = null; gameWon = null; } private function hitTestAreaWithEvils(_arg1:Area){ var _local2:String; var _local3:Evil; var _local4:*; _local4 = evils.L; for (_local2 in _local4) { _local3 = _local4[_local2]; if (((_local3.active) && (contact(_arg1, _local3)))){ _arg1.hitEvil(_local3); }; }; } private function moveScreenToPoint(_arg1:Number, _arg2:Number, _arg3:Number){ var _local4:Number; var _local5:Number; _local4 = (-(_arg1) - x); _local5 = (-(_arg2) - y); x = (x + (_local4 / _arg3)); y = (y + (_local5 / _arg3)); } private function screenIsAtPoint(_arg1:Number, _arg2:Number){ if ((((Math.round(-(_arg1)) == Math.round(x))) && ((Math.round(-(_arg2)) == Math.round(y))))){ return (true); }; return (false); } public function setRadius(_arg1:Number):void{ radius = _arg1; background.scaleX = ((radius * 2) / 100); background.scaleY = ((radius * 2) / 100); } public function beginMouseSlide(_arg1:Number, _arg2:Number, _arg3:Number):void{ mouseTX = _arg1; mouseTY = _arg2; mouseSpeed = _arg3; mouseNeedsMoving = true; } private function moveScreen(_arg1:uint):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; switch (_arg1){ case 1: _local2 = (-(player.x) - (this.x / scaleX)); _local3 = (-(player.y) - (this.y / scaleY)); _local4 = ((game.mouseX / scaleX) - _local2); _local5 = ((game.mouseY / scaleY) - _local3); this.x = (this.x + ((_local2 / 25) - (_local4 / 10))); this.y = (this.y + ((_local3 / 25) - (_local5 / 10))); break; case 2: _local2 = ((((-(game.mouseX) / game.sizeX) * this.radius) * 2) - x); _local3 = ((((-(game.mouseY) / game.sizeY) * this.radius) * 2) - y); x = (x + (_local2 / 10)); y = (y + (_local3 / 10)); break; case 3: _local2 = (-(player.x) - x); _local3 = (-(player.y) - y); x = (x + (_local2 / 10)); y = (y + (_local3 / 10)); break; case 4: _local2 = (((((-(game.mouseX) / game.sizeX) * radius) * radius) * 1.5) - x); _local3 = (((((-(game.mouseY) / game.sizeY) * radius) * radius) * 1.5) - y); x = (x + (_local2 / 10)); y = (y + (_local3 / 10)); break; }; } private function applyDynamics():void{ evilTime.step(); areaChance.step(); bonusChance.step(); } public function createArea(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:uint):Area{ var _local5:Area; _local5 = new Area(); areas.addElement(_local5); _local5.link(this, areas); _local5.init(); _local5.demoMode = demoMode; _local5.x = _arg1; _local5.y = _arg2; _local5.setRadius(_arg3); _local5.rotation = (Math.random() * 360); _local5.setType(_arg4); return (_local5); } public function createHint():Hint{ var _local1:Hint; _local1 = new Hint(); hints.addElement(_local1); _local1.link(this, hints); _local1.init(); return (_local1); } public function runAsDemo():void{ switch (phase){ case BEGIN_PHASE: phase = PLAY_PHASE; break; case PLAY_PHASE: if (mouseNeedsMoving){ moveMouse(); }; areas.run(); groundlay.run(); player.run(); bonuses.run(); underlay.run(); evils.run(); creatures.run(); overlay.run(); bullets.run(); hints.run(); hitTestBonuses(); hitTestAreas(); hitTestPlayerWithEvils(); hitTestBulletsWithEvils(); playerDeathTest(); soundList.orderAllElements("run"); soundList.verify("active"); if (!finalLevel){ player.pie.value = (levelTime / levelMaxTime); if (levelTime >= levelMaxTime){ winGame(1.5); }; }; levelTime++; break; case LOSE_PHASE: areas.run(); groundlay.run(); bonuses.run(); underlay.run(); evils.run(); creatures.run(); overlay.run(); bullets.run(); hints.run(); moveScreenToPoint(0, 0, 50); if (levelTime <= 0){ callEvent("gameLost"); }; levelTime--; break; case WIN_PHASE: player.run(); areas.run(); groundlay.run(); bonuses.run(); underlay.run(); evils.run(); creatures.run(); overlay.run(); bullets.run(); hints.run(); if (levelTime <= 0){ callEvent("gameWon"); }; levelTime--; break; }; } private function hitTestAreaWithBullets(_arg1:Area){ var _local2:String; var _local3:Bullet; var _local4:*; _local4 = bullets.L; for (_local2 in _local4) { _local3 = _local4[_local2]; if (((_local3.active) && (contact(_arg1, _local3)))){ _arg1.hitBullet(_local3); }; }; } private function showGOMessage():void{ var ht:Hint; ht = spawnHint(0, 0, ""); ht.reset(); ht.setTextWidth(200); ht.setText(">_<", 100); ht.setupFilter(3, 5); ht.setTimer((40 * 3)); ht.setFade(0.02); ht.expired = function (){ game.endGame(false); }; } private function killAllEvils(){ var _local1:*; for each (_local1 in evils.L) { _local1.endLife(); }; } public function setupPlayer(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint, _arg5:int):void{ player.setupWeapon(_arg1, _arg2, _arg3, _arg4, _arg5); } public function setupDynamics(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):void{ dynamicsTime = _arg1; dynamicsTimer = (_arg1 - 1); evilTime.mod = _arg2; evilTime.min = _arg3; areaChance.mod = _arg4; areaChance.min = _arg5; bonusChance.mod = _arg6; bonusChance.max = _arg7; } private function hitTestAreas(){ var _local1:String; var _local2:Area; var _local3:*; _local3 = areas.L; for (_local1 in _local3) { _local2 = _local3[_local1]; if (_local2.active){ if (_local2.hitTestWithBullets){ hitTestAreaWithBullets(_local2); }; if (_local2.hitTestWithEvils){ hitTestAreaWithEvils(_local2); }; if (_local2.hitTestWithPlayer){ hitTestAreaWithPlayer(_local2); }; }; }; } public function setupBonuses(_arg1:uint, _arg2:Array):void{ bonusChance = new DynProp(_arg1, _arg1, _arg1, 0); bonusTypes = _arg2; } private function hitTestAreaWithPlayer(_arg1:Area):void{ if (contact(_arg1, player)){ _arg1.hitPlayer(player); }; } public function createOO(_arg1:String, _arg2:String){ var oo:DisplayObject; var classRef:Class; var type = _arg1; var layer = _arg2; switch (type){ case "laser": oo = new Laser(); break; case "explosion": oo = new Explosion(); break; case "spirit": oo = new Spirit(); break; case "bulletTeleporter": oo = new BulletTeleporter(); break; case "graveyard": oo = new Graveyard(); break; case "megaball": oo = new MegaBall(); break; case "spark": oo = new Spark(); break; case "ghost": oo = new Ghost(); break; case "driller": oo = new Driller(); break; case "laserTurret": oo = new LaserTurret(); break; case "spike": oo = new Spike(); break; case "blob": oo = new Blob(); break; case "goo": oo = new Goo(); break; case "cannon": oo = new Cannon(); break; case "fance": oo = new Fance(); break; case "mine": oo = new Mine(); break; case "plug": oo = new Plug(); break; case "cable": oo = new Cable(); break; case "sweeperTurret": oo = new SweeperTurret(); break; case "sweeperTurretBase": oo = new SweeperTurretBase(); break; case "creatureBait": oo = new CreatureBait(); break; case "trackerTurret": oo = new TrackerTurret(); break; case "bulletCompressor": oo = new BulletCompressor(); break; case "laserSpinner": oo = new LaserSpinner(); break; case "guide": oo = new Guide(); break; default: try { classRef = (getDefinitionByName(type) as Class); } catch(e:ReferenceError) { throw (new Error((("cannot create misc object of type " + type) + " - no such type"))); }; oo = new (classRef); break; }; switch (layer){ case "overlay": overlay.addElement(oo); var _local4 = oo; _local4["link"](this, overlay); break; case "underlay": underlay.addElement(oo); _local4 = oo; _local4["link"](this, underlay); break; case "ground": groundlay.addElement(oo); _local4 = oo; _local4["link"](this, groundlay); break; default: throw (new Error((((("cannot create misc object of type " + type) + " in layer ") + layer) + " - no such layer"))); }; _local4 = oo; _local4["init"](); return (oo); } private function winGame(_arg1:Number):void{ if (phase == PLAY_PHASE){ killAllEvils(); phase = WIN_PHASE; showGWMessage(); levelTime = (_arg1 * 40); }; } public function pause():void{ game.pause(); } } }//package
Section 40
//FieldObject (FieldObject) package { import flash.display.*; public class FieldObject extends Shape { protected var XS:Number; public var radius:Number; protected var YS:Number; protected var cont:Container; public var active:Boolean; protected var field:Field; public static const PI:Number = 3.14159265358979; public static const R2D:Number = 57.2957795130823; public function init():void{ active = false; setRadius(50); XS = 0; YS = 0; } protected function largestEvil():Evil{ var _local1:Number; var _local2:Evil; var _local3:*; _local1 = 0; for each (_local3 in field.evils.L) { if (_local3.radius > _local1){ _local1 = _local3.radius; _local2 = _local3; }; }; return (_local2); } public function setRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } protected function hitCheckWithEvils(_arg1:Function=null):Boolean{ var _local2:Array; var _local3:Function; var _local4:Evil; _local2 = field.evils.L; _local3 = field.contact; for each (_local4 in _local2) { if (_local4.active){ if (touchingEvil(_local4)){ if (Boolean(_arg1)){ _arg1(); }; return (true); }; }; }; return (false); } protected function drawGradCircle(_arg1:Number, _arg2:Array, _arg3:Array, _arg4:Array, _arg5:uint=0xFF00FF):void{ var _local6:Graphics; _local6 = this.graphics; _local6.clear(); if (_arg5 != 0xFF00FF){ _local6.lineStyle(1, _arg5); }; _local6.beginGradientFill("radial", _arg2, _arg3, _arg4); _local6.drawCircle(0, 0, _arg1); _local6.endFill(); } protected function touchingEvil(_arg1:Evil):Boolean{ var _local2:Number; var _local3:Number; var _local4:Number; _local2 = (_arg1.x - x); _local3 = (_arg1.y - y); _local4 = (_arg1.radius + radius); return ((((_local2 * _local2) + (_local3 * _local3)) < (_local4 * _local4))); } protected function drawLimb(_arg1:Number, _arg2:Number, _arg3:Number){ drawLine((_arg1 * Math.cos((_arg3 / R2D))), (_arg1 * Math.sin((_arg3 / R2D))), _arg2, _arg3); } public function bounceAsPoint(_arg1:Object, _arg2:Boolean=false):void{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; _local7 = Math.sqrt(((XS * XS) + (YS * YS))); if (_arg2){ _local6 = (_arg1.radius - 1); } else { _local6 = (_arg1.radius + 1); }; if ((_arg1 is Field)){ _local3 = Math.atan2(YS, XS); _local4 = Math.atan2(y, x); _local5 = ((_local4 - _local3) % (PI * 2)); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_local6 * Math.cos(_local4)); y = (_local6 * Math.sin(_local4)); } else { _local3 = Math.atan2(YS, XS); _local4 = Math.atan2((y - _arg1.y), (x - _arg1.x)); _local5 = (((_local4 - _local3) % PI) * 2); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_arg1.x + (_local6 * Math.cos(_local4))); y = (_arg1.y + (_local6 * Math.sin(_local4))); }; XS = (_local7 * Math.cos(_local5)); YS = (_local7 * Math.sin(_local5)); rotation = (_local5 * R2D); } protected function hitTestWithEvils(_arg1:Function):void{ var _local2:Array; var _local3:Function; var _local4:Evil; _local2 = field.evils.L; _local3 = field.contact; for each (_local4 in _local2) { if (_local4.active){ if (touchingEvil(_local4)){ _arg1(_local4); }; }; }; } protected function drawCircle(_arg1:Number, _arg2:uint, _arg3:uint=0xFF00FF):void{ var _local4:Graphics; _local4 = this.graphics; if (_arg3 != 0xFF00FF){ _local4.lineStyle(1, _arg3); }; _local4.beginFill(_arg2); _local4.drawCircle(0, 0, _arg1); _local4.endFill(); } protected function slowDown(_arg1:Number):void{ XS = (XS * _arg1); YS = (YS * _arg1); } public function stop():void{ XS = 0; YS = 0; } protected function offField():Boolean{ var _local1:Number; _local1 = (field.radius + this.radius); return ((((x * x) + (y * y)) > (_local1 * _local1))); } public function bounceOff(_arg1:Object, _arg2:Boolean=false):void{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; _local7 = Math.sqrt(((XS * XS) + (YS * YS))); if (_arg2){ _local6 = (_arg1.radius - this.radius); } else { _local6 = (_arg1.radius + this.radius); }; if ((_arg1 is Field)){ _local3 = Math.atan2(YS, XS); _local4 = Math.atan2(y, x); _local5 = ((_local4 - _local3) % (PI * 2)); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_local6 * Math.cos(_local4)); y = (_local6 * Math.sin(_local4)); } else { _local3 = Math.atan2(YS, XS); _local4 = Math.atan2((y - _arg1.y), (x - _arg1.x)); _local5 = ((_local4 - _local3) % (PI * 2)); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_arg1.x + (_local6 * Math.cos(_local4))); y = (_arg1.y + (_local6 * Math.sin(_local4))); }; XS = (_local7 * Math.cos(_local5)); YS = (_local7 * Math.sin(_local5)); rotation = (_local5 * R2D); } protected function onField():Boolean{ var _local1:Number; _local1 = (field.radius - this.radius); return ((((x * x) + (y * y)) < (_local1 * _local1))); } public function link(_arg1:Field, _arg2:Container):void{ field = _arg1; cont = _arg2; } protected function move():void{ x = (x + XS); y = (y + YS); } protected function nearestEvil(_arg1:Boolean=false, _arg2:Number=50000):Evil{ var _local3:Evil; var _local4:Number; var _local5:Evil; var _local6:Number; var _local7:Number; var _local8:Number; _local4 = (_arg1) ? (_arg2 * _arg2) : _arg2; if (_arg1){ for each (_local5 in field.evils.L) { if (_local5.active){ _local6 = (_local5.x - x); _local7 = (_local5.y - y); _local8 = ((_local6 * _local6) + (_local7 * _local7)); if (_local8 <= _local4){ _local4 = _local8; _local3 = _local5; }; }; }; } else { for each (_local5 in field.evils.L) { if (_local5.active){ _local6 = (_local5.x - x); _local7 = (_local5.y - y); _local8 = ((Math.sqrt(((_local6 * _local6) + (_local7 * _local7))) - radius) - _local5.radius); if (_local8 <= _local4){ _local4 = _local8; _local3 = _local5; }; }; }; }; return (_local3); } protected function drawLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number){ var _local5:Graphics; _local5 = this.graphics; _local5.moveTo(_arg1, _arg2); _local5.lineTo((_arg1 + (_arg3 * Math.cos((_arg4 / R2D)))), (_arg2 + (_arg3 * Math.sin((_arg4 / R2D))))); } public function kill():void{ field = null; active = false; cont.removeElement(this); cont = null; } public function push(_arg1:Number, _arg2:Number):void{ XS = (XS + _arg1); YS = (YS + _arg2); } protected function distFrom(_arg1):Number{ var _local2:Number; var _local3:Number; _local2 = (_arg1.x - x); _local3 = (_arg1.y - y); return (((Math.sqrt(((_local2 * _local2) + (_local3 * _local3))) - radius) - _arg1.radius)); } public function polarPush(_arg1:Number, _arg2:Number):void{ XS = (XS + (_arg2 * Math.cos(_arg1))); YS = (YS + (_arg2 * Math.sin(_arg1))); } } }//package
Section 41
//FieldSound (FieldSound) package { import flash.media.*; public class FieldSound { private var channel:SoundChannel; public var active:Boolean; private var sound:Sound; public var source; private var position:Number; private var volMod:Number; private static var field:Field; public function stop():void{ if (channel){ channel.stop(); }; position = 0; } public function run():void{ if (active){ adjustPenning(); }; } public function init():void{ active = true; position = 0; volMod = 1; } public function expire():void{ kill(); } public function kill():void{ stop(); source = null; active = false; if (channel){ channel.removeEventListener("complete", kill); channel = null; }; } public function play():void{ channel = sound.play(position); if (channel == null){ kill(); } else { channel.addEventListener("complete", kill); }; } public function chooseSound(_arg1:String, _arg2:Number=1):void{ volMod = _arg2; play(); } public function pause():void{ position = channel.position; channel.stop(); } public function adjustPenning():void{ var _local1:SoundTransform; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; if (((channel) && (source))){ _local1 = new SoundTransform(); _local4 = (field.player.x - source.x); _local5 = (field.player.y - source.y); _local6 = Math.sqrt(((_local4 * _local4) + (_local5 * _local5))); _local3 = ((500 - _local6) / 500); if (_local3 < 0){ _local3 = 0; }; _local2 = (_local4 / 200); if (_local2 > 1){ _local2 = 1; } else { if (_local2 < -1){ _local2 = -1; }; }; _local1.volume = (_local3 * volMod); _local1.pan = _local2; channel.soundTransform = _local1; }; } public static function globalInit(_arg1:Field):void{ field = _arg1; } public static function create(_arg1, _arg2:String, _arg3:Number=1):void{ var _local4:FieldSound; _local4 = new (FieldSound); field.soundList.push(_local4); _local4.init(); _local4.source = _arg1; _local4.chooseSound(_arg2, _arg3); } } }//package
Section 42
//Flasher (Flasher) package { import flash.display.*; import flash.text.*; import flash.net.*; import flash.filters.*; public class Flasher extends Sprite { private var steady:Boolean; public var finishedAnimating:Function; public var expired:Function; public var cont:Container; private var lighten:Boolean; private var timer:int; private var maxTime:Number; private var phase:uint; public var TF:TextField; private var glow:Boolean; public var time:int; private var _link:String; private var alphaDelta:Number; public static var infoTF:Flasher; public function get link():String{ return (_link); } private function gotoLink(_arg1=null):void{ var _local2:URLRequest; _local2 = new URLRequest(_link); navigateToURL(_local2, "_blank"); } public function get align():int{ var _local1:TextFormat; if (TF){ _local1 = TF.defaultTextFormat; switch (_local1.align){ case TextFormatAlign.CENTER: return (0); case TextFormatAlign.LEFT: return (1); case TextFormatAlign.RIGHT: return (2); }; }; return (Number("potato")); } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } public function addGraphic(_arg1, _arg2:Number=1):void{ var _local3:ButtonGraphic; if ((_arg1 is DisplayObject)){ this.addChild(_arg1); } else { _local3 = new ButtonGraphic(); this.addChild(_local3); _local3.gotoAndStop(String(_arg1).replace(" ", "")); _local3.scaleX = _arg2; _local3.scaleY = _arg2; }; } public function init():void{ visible = false; } public function set align(_arg1:int):void{ var _local2:TextFormat; _local2 = new TextFormat(); switch (_arg1){ case 0: _local2.align = TextFormatAlign.CENTER; break; case 1: _local2.align = TextFormatAlign.LEFT; break; case 2: _local2.align = TextFormatAlign.RIGHT; break; }; TF.defaultTextFormat = _local2; adjustText(); } public function getTextWidth():Number{ return (TF.width); } public function set link(_arg1:String):void{ _link = _arg1; if (_link != ""){ buttonMode = true; useHandCursor = true; TF.mouseEnabled = false; this.addEventListener("mouseUp", gotoLink, false, 0, true); } else { this.removeEventListener("mouseUp", gotoLink); }; } public function setTextWidth(_arg1:Number):void{ TF.x = (-(_arg1) / 2); TF.width = _arg1; } private function adjustText():void{ var _local1:TextFormat; _local1 = TF.defaultTextFormat; TF.width = (TF.textWidth + 10); switch (_local1.align){ case TextFormatAlign.LEFT: TF.x = 0; break; case TextFormatAlign.CENTER: TF.x = (-(TF.width) / 2); break; case TextFormatAlign.RIGHT: TF.x = -(TF.width); break; }; TF.height = (TF.textHeight + 2); TF.y = (-(TF.height) / 2); } public function get font():String{ if (TF){ return (TF.defaultTextFormat.font); }; return (""); } public function addText(_arg1:String, _arg2:Number=60, _arg3:Number=0xFFFFFF):void{ var _local4:TextFormat; if (TF){ removeChild(TF); TF = null; }; TF = new TextField(); _local4 = new TextFormat(); TF.wordWrap = true; TF.selectable = false; TF.autoSize = TextFieldAutoSize.CENTER; TF.embedFonts = true; TF.textColor = _arg3; _local4.align = TextFormatAlign.CENTER; _local4.font = "LilyUPC"; _local4.size = _arg2; TF.width = 1000; TF.defaultTextFormat = _local4; TF.text = _arg1; adjustText(); this.addChild(TF); } public function setFlashProps(_arg1:uint, _arg2:Boolean, _arg3:Boolean, _arg4:Boolean):void{ maxTime = _arg1; lighten = _arg2; steady = _arg3; glow = _arg4; } public function kill():void{ if (TF){ removeChild(TF); TF = null; }; cont = null; finishedAnimating = null; expired = null; } private function addDragListeners():void{ this.addEventListener("mouseDown", beginDragging, false, 0, true); this.addEventListener("mouseUp", stopDragging, false, 0, true); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number=50, _arg4=null):void{ x = _arg1; y = _arg2; scaleX = (_arg3 / 50); scaleY = (_arg3 / 50); if (_arg4){ if ((_arg4 is Number)){ addGraphic((_arg4 as Number)); } else { if ((_arg4 is String)){ if (_arg4.charAt(0) == "#"){ addText(_arg4.slice(1)); } else { addGraphic((_arg4 as String)); }; }; }; }; } public function remove():void{ phase = 3; } public function setFilter(_arg1:Number, _arg2:Number, _arg3:Number=0xFFFFFF):void{ var _local4:GlowFilter; _local4 = new GlowFilter(); _local4.color = _arg3; _local4.blurX = _arg2; _local4.blurY = _arg2; _local4.strength = _arg1; _local4.quality = 3; this.filters = [_local4]; } public function set font(_arg1:String):void{ var _local2:TextFormat; _local2 = new TextFormat(); _local2.font = _arg1; TF.embedFonts = !((_arg1.charAt(0) == "_")); TF.width = 1000; TF.defaultTextFormat = _local2; } private function stopDragging(_arg1):void{ this.stopDrag(); if (infoTF){ infoTF.TF.text = ((x.toFixed(0) + ", ") + y.toFixed(0)); }; } public function run(){ switch (phase){ case 0: if (lighten){ alphaDelta = (1 / maxTime); alpha = 0; }; timer = 0; phase = 1; run(); case 1: if (lighten){ alpha = (alpha + alphaDelta); }; if (steady){ visible = Boolean((Math.random() < 0.5)); } else { visible = Boolean(((Math.random() * maxTime) <= timer)); }; if (timer == maxTime){ timer = 0; visible = true; callEvent("finishedAnimating"); phase = 2; }; timer++; break; case 2: time--; if (time == 0){ remove(); }; break; case 3: if (lighten){ alpha = (alpha - alphaDelta); }; if (steady){ visible = Boolean(aMath.random(1)); } else { visible = Boolean((aMath.random(maxTime) > timer)); }; if (timer == maxTime){ callEvent("expired"); cont.removeElement(this); }; timer++; break; }; } private function beginDragging(_arg1):void{ this.startDrag(); } public static function create(_arg1:Container):Flasher{ var _local2:Flasher; _local2 = new (Flasher); _local2.init(); _local2.cont = _arg1; _local2.setFlashProps(20, true, false, false); _local2.time = -1; _arg1.addElement(_local2); return (_local2); } } }//package
Section 43
//FrameTimer (FrameTimer) package { import flash.display.*; public class FrameTimer extends Shape { public var expired:Function; public var active:Boolean; private var maxTimer:int; private var count:int; private static var timerList:Array = []; public function FrameTimer(_arg1:uint=0, _arg2:Function=null){ count = _arg1; expired = _arg2; active = true; addEventListener("enterFrame", tick, false, 0, true); timerList.push(this); } private function tick(_arg1):void{ if (active){ if (count <= 0){ expire(); } else { count--; }; }; } private function expire(){ if (Boolean(expired)){ expired(); }; kill(); } public function reset(_arg1:uint, _arg2:Function=null){ removeEventListener("enterFrame", tick); count = _arg1; expired = (Boolean(_arg2)) ? _arg2 : expired; active = true; addEventListener("enterFrame", tick, false, 0, true); } public function kill():void{ var _local1:*; active = false; expired = null; removeEventListener("enterFrame", tick); for (_local1 in timerList) { if (timerList[_local1] == this){ timerList[_local1] = null; timerList.splice(_local1, 1); break; }; }; } public static function create(_arg1:uint, _arg2:Function):void{ var _local3:FrameTimer; _local3 = new FrameTimer(_arg1, _arg2); } } }//package
Section 44
//Game (Game) package { import flash.display.*; import flash.net.*; import flash.geom.*; public class Game extends Sprite { private var pauseScreen:PauseScreen; public var demoMode:Boolean; private var pointer:Pointer; public var sizeX:Number; public var sizeY:Number; private var fieldFader:Shape; private var fieldSquare:Shape; private var mother:MotherOfAll; public var field:Field; private var fieldMask:Shape; private var maxFieldSize:Number; private var gameWon:Boolean; private var demoPhase:uint; private var restarting:Boolean; private var phase:uint; public var stepList:ScenarioData; public var currentLevel:int; private var lastScore:uint; private var summary:GameSummary; private var totalScore:uint; private var demoType:String; private var running:Boolean; public var demoEnd:Function; private static const R2D:Number = 57.2957795130823; public static const SUMMERY_PHASE:uint = 4; public static const REVEAL_PHASE:uint = 1; public static const END_LEVEL:int = 75; public static const PLAY_PHASE:uint = 2; public static const HIDE_PHASE:uint = 3; public function doNextStep():void{ var currentStep:*; var commandName:String; var PA:Array; var obj:*; var DX:Number; var DY:Number; var A:Number; var R:Number; var F:Function; var tm:FrameTimer; currentStep = stepList.getStep(); if (currentStep){ commandName = getStepName(currentStep); PA = getStepParams(currentStep); switch (commandName){ case "createArea": obj = createArea(PA[0], PA[1], PA[2], PA[3]); obj.setVar("lifeSpan", PA[4]); obj.ready = function (){ doNextStep(); }; break; case "createBonus": obj = createBonus(PA[0], PA[1], PA[2], PA[3]); obj.ready = function (){ doNextStep(); }; break; case "createEvil": obj = createEvil(PA[0], PA[1], PA[2]); if (PA[3]){ obj.sizeLimit = PA[3]; }; obj.expired = function (){ doNextStep(); }; break; case "moveMouse": moveMouse(PA[0], PA[1], PA[2]); field.mouseArrived = function (){ (this.mouseArrived = null); doNextStep(); }; break; case "movePlayer": DX = (PA[0] - field.player.x); DY = (PA[1] - field.player.y); A = aMath.atan(DY, DX); R = (Math.sqrt(((DX * DX) + (DY * DY))) + 100); moveMouse((field.player.x + (R * aMath.cos(A))), (field.player.y + (R * aMath.sin(A))), 5); field.player.stopped = function (){ (this.stopped = null); doNextStep(); }; break; case "aimPlayer": aimPlayer(PA[0], PA[1]); field.mouseArrived = function (){ (this.mouseArrived = null); doNextStep(); }; break; case "setPlayerDir": aimPlayer((field.player.x + (50 * Math.cos((PA[0] / R2D)))), (field.player.y + (50 * Math.sin((PA[0] / R2D))))); field.mouseArrived = function (){ (this.mouseArrived = null); doNextStep(); }; break; case "timer": obj = new FrameTimer(PA[0]); obj.expired = function (){ doNextStep(); (obj = false); }; break; case "pause": pause(); pauseScreen.ready = function (){ (pauseScreen.ready = null); doNextStep(); }; break; case "unpause": pauseScreen.unpause(); pauseScreen.expired = function (){ (pauseScreen.expired = null); doNextStep(); }; break; case "restart": restart(); var _local2:Boolean; obj = _local2; _local2; break; case "end": _local2 = new FrameTimer(PA[0]); obj = _local2; _local2; (obj.expired = function (){ endDemo(); (obj = false); }); break; case "HALT!": break; default: if (commandName.charAt(0) == "~"){ F = this[commandName.slice(1)]; if (PA.length > 0){ F.apply(this, PA); } else { F.apply(this); }; doNextStep(); } else { throw (new Error((("cannot execute command \"" + commandName) + "\" - no such command."))); }; break; }; addSubsteps(currentStep); } else { tm = new FrameTimer(60); (tm.expired = function (){ (restarting = false); enterFadePhase(); (tm = null); }); }; } private function restart(){ restarting = true; enterFadePhase(); } public function createRandomArea(_arg1:Number=0):void{ var _local2:Number; var _local3:Number; _local2 = ((Math.random() * Math.PI) * 2); _local3 = (125 + (Math.random() * (field.radius - 125))); field.createRandomArea((_local3 * Math.cos(_local2)), (_local3 * Math.sin(_local2))); } public function startNextLevel():void{ removeSummary(); if (field){ enterStartPhase(); enterPlayPhase(); } else { startLevel((currentLevel + 1)); }; } private function createFieldSquare():void{ var _local1:Graphics; if (fieldSquare){ this.removeChild(fieldSquare); fieldSquare = null; }; fieldSquare = new Shape(); this.addChild(fieldSquare); _local1 = fieldSquare.graphics; _local1.beginFill(0); _local1.drawRect((-(sizeX) / 2), (-(sizeY) / 2), sizeX, sizeY); _local1.endFill(); } public function getLevelTotalScore(_arg1:int):int{ var _local2:SharedObject; var _local3:Array; var _local4:int; var _local5:*; _local2 = SharedObject.getLocal("areasData"); if (_local2.data.hasOwnProperty("scores")){ _local3 = _local2.data.scores; _local4 = 0; if (_arg1 > _local3.length){ _arg1 = _local3.length; }; _local5 = 0; while (_local5 < _arg1) { _local4 = (_local4 + _local3[_local5]); _local5++; }; }; return (_local4); } public function fixTimer(_arg1:Number):void{ field.fixTimer((_arg1 * 40)); } public function getSavedScore():int{ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); return (_local1.data.totalScore); } public function startLevel(_arg1:int, _arg2:Boolean=false):void{ var L = _arg1; var softStart = _arg2; createField(); createFieldMask(); maskField(); field.init(); running = true; currentLevel = L; if (currentLevel > END_LEVEL){ currentLevel = END_LEVEL; }; if (L < END_LEVEL){ field.setupLevelTag(("#" + String(currentLevel))); } else { field.setupLevelTag("end_level"); field.finalLevel = true; }; field.rawSetup(LevelData.arr[currentLevel].toArray()); field.gameWon = function (){ endGame(true); }; field.gameLost = function (){ endGame(false); }; updateFieldMaskSize(); if (softStart){ setChildIndex(summary, (numChildren - 1)); } else { enterStartPhase(); }; } private function removeFieldFader():void{ if (fieldFader){ this.removeChild(fieldFader); fieldFader = null; }; } public function createGraphic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:String, _arg5:int, _arg6:Number=0):void{ field.createGraphic(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6); } private function adjustMouse():void{ var _local1:Point; _local1 = new Point(field.xmouse, field.ymouse); _local1 = field.localToGlobal(_local1); pointer.x = _local1.x; pointer.y = _local1.y; } private function enterEndPhase():void{ createFieldSquare(); fieldSquare.alpha = 0; phase = HIDE_PHASE; } private function killDemo(){ pointer.leaveTarget(field); demoPhase = 6; if (this["demoEnd"]){ demoEnd(); }; } public function clear():void{ removeChild(field); field = null; removeFieldMask(); removeFieldSquare(); } private function enterFadePhase(){ if (!restarting){ pointer.homeOnObject(field); }; createFieldFader(); fieldFader.scaleX = (field.radius / 50); fieldFader.scaleY = (field.radius / 50); fieldFader.alpha = 0; demoPhase = 4; } private function updateFieldMask(){ fieldMask.x = field.x; fieldMask.y = field.y; fieldMask.scaleX = (field.radius / 50); fieldMask.scaleY = (field.radius / 50); } public function initAsDemo(_arg1:String, _arg2:Number, _arg3:Number):void{ sizeX = _arg2; sizeY = _arg3; x = 0; y = 0; demoMode = true; stepList = new ScenarioData(); maxFieldSize = 265; demoType = _arg1; lastScore = 0; totalScore = 0; running = true; restarting = false; pointer.switchToMenual(); enterExpentionPhase(); } private function getSubsteps(_arg1:String):Array{ var _local2:Array; _local2 = _arg1.split(";"); _local2.shift(); if (_local2[(_local2.length - 1)] == ""){ _local2.pop(); }; return (_local2); } private function removeSummary():void{ if (summary){ this.removeChild(summary); summary = null; }; } public function createBonus(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Bonus{ return (field.createBonus(_arg1, _arg2, _arg3, _arg4)); } public function aimPlayer(_arg1:Number, _arg2:Number):void{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; _local3 = (_arg1 - field.player.x); _local4 = (_arg2 - field.player.y); _local5 = aMath.atan(_local4, _local3); _local6 = 80; moveMouse((field.player.x + (_local6 * aMath.cos(_local5))), (field.player.y + (_local6 * aMath.sin(_local5))), 5); } public function run():void{ if (running){ switch (phase){ case REVEAL_PHASE: removeSummary(); fieldSquare.alpha = (fieldSquare.alpha - 0.1); if (fieldSquare.alpha <= 0){ enterPlayPhase(); }; break; case PLAY_PHASE: field.run(); updateFieldMask(); break; case HIDE_PHASE: createSummary(); summary.opaque = function (){ clear(); this.opaque = null; }; phase = SUMMERY_PHASE; break; case SUMMERY_PHASE: if (summary){ summary.run(); }; break; }; } else { pauseScreen.run(); }; } private function addSubsteps(_arg1:String):void{ var _local2:Array; var _local3:*; _local2 = getSubsteps(_arg1); for each (var _local6 in _local2) { _local3 = _local6; _local6; addSubstep(_local3); }; } private function enterPlayPhase():void{ removeFieldSquare(); phase = 2; } public function restartLevel():void{ removeSummary(); if (field){ enterStartPhase(); enterPlayPhase(); } else { undoLastScoring(); startLevel(currentLevel); }; } private function createFieldFader():void{ var _local1:Graphics; if (fieldFader){ this.removeChild(fieldFader); fieldFader = null; }; fieldFader = new Shape(); this.addChild(fieldFader); _local1 = fieldFader.graphics; _local1.beginFill(0); _local1.drawCircle(0, 0, 50); _local1.endFill(); } public function createEvil(_arg1:Number, _arg2:Number, _arg3:Number):Evil{ return (field.createEvil(_arg1, _arg2, _arg3)); } public function initScenario(_arg1:String):void{ var type = _arg1; stepList.loaded = function (){ doNextStep(); }; stepList.init(type); field.gameLost = function (){ restart(); }; field.gameWon = function (){ restarting = false; enterFadePhase(); }; } private function getSubstepTime(_arg1:String):Number{ return (Number(_arg1.slice(0, _arg1.indexOf(":")))); } private function removeFieldMask():void{ if (fieldMask){ this.removeChild(fieldMask); fieldMask = null; }; } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } private function getStepName(_arg1:String):String{ return (_arg1.slice(0, ((_arg1.indexOf("("))>-1) ? _arg1.indexOf("(") : _arg1.length)); } private function enterExpentionPhase():void{ createField(); field.initAsDemo(); field.gameWon = function (){ var t:FrameTimer; t = new FrameTimer(60); t.expired = function (){ }; }; field.setRadius(maxFieldSize); field.visible = false; pointer.homeOnObject(field); createFieldFader(); demoPhase = 1; } private function enterShrinkPhase(){ field.setRadius(0); field.visible = false; demoPhase = 5; } public function unpause():void{ pauseScreen.kill(); removeChild(pauseScreen); pauseScreen = null; if (!demoMode){ BGMusic.that.fadeToPlay(); }; if (!field.frozen){ field.playAreasAnim(); }; running = true; } public function init(_arg1:Number, _arg2:Number):void{ sizeX = _arg1; sizeY = _arg2; x = (sizeX / 2); y = (sizeY / 2); createFieldMask(); BGMusic.that.chooseTrack(1); BGMusic.that.loadVol(); BGMusic.that.fadeToPlay(); lastScore = 0; totalScore = 0; running = false; demoMode = false; gameWon = false; } public function prepareNextLevel():void{ startLevel((currentLevel + 1), true); } private function createSummary():void{ summary = new GameSummary(); summary.setMother(mother, this); summary.init(sizeX, sizeY, gameWon); summary.setDataDisplay(lastScore, totalScore, currentLevel); summary.submitScore(); this.addChild(summary); phase = SUMMERY_PHASE; } public function saveGame():Boolean{ var so:SharedObject; var scoreArray:Array; try { so = SharedObject.getLocal("areasData"); scoreArray = []; if (!so.data.hasOwnProperty("scores")){ so.data.scores = scoreArray; }; scoreArray = so.data.scores; scoreArray[(currentLevel - 1)] = lastScore; so.data.scores = scoreArray; so.flush(); } catch(e:Error) { Console.trace(("game save error: " + e.getStackTrace())); return (false); }; return (true); } private function setScores():void{ lastScore = field.score; totalScore = (totalScore + lastScore); } public function startDemoLevel(_arg1:String):void{ initScenario(_arg1); fieldMask.scaleX = (field.radius / 50); fieldMask.scaleY = (field.radius / 50); } private function addSubstep(_arg1:String):void{ var tm:FrameTimer; var command:String; var PA:Array; var obj:*; var F:Function; var substep = _arg1; tm = new FrameTimer(getSubstepTime(substep)); command = getSubstepCommand(substep); PA = getSubstepParams(substep); switch (command){ case "createArea": (tm.expired = function (){ (obj = createArea(PA[0], PA[1], PA[2], PA[3])); obj.setVar("lifeSpan", PA[4]); }); break; case "createBonus": (tm.expired = function (){ (obj = createBonus(PA[0], PA[1], PA[2], PA[3])); }); break; case "createEvil": (tm.expired = function (){ (obj = createEvil(PA[0], PA[1], PA[2])); (obj.sizeLimit = PA[3]); }); break; case "moveMouse": (tm.expired = function (){ moveMouse(PA[0], PA[1], PA[2]); }); break; case "movePlayer": (tm.expired = function (){ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; _local1 = (PA[0] - field.player.x); _local2 = (PA[1] - field.player.y); _local3 = aMath.atan(_local2, _local1); _local3; _local4 = (Math.sqrt(((_local1 * _local1) + (_local2 * _local2))) + 100); _local4; moveMouse((field.player.x + (_local4 * aMath.cos(_local3))), (field.player.y + (_local4 * aMath.sin(_local3))), 2); }); break; case "aimPlayer": (tm.expired = function (){ aimPlayer(PA[0], PA[1]); }); break; default: if (command.charAt(0) == "~"){ F = this[command.slice(1)]; (tm.expired = function (){ F.apply(this, PA); }); } else { throw (new Error((("cannot execute substep \"" + substep) + "\" - no such command."))); }; break; }; } public function restartFromPause():void{ clear(); startLevel(currentLevel); enterStartPhase(); enterPlayPhase(); running = false; } private function enterStartPhase():void{ createFieldSquare(); phase = 1; } public function getSavedLevel():int{ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); return (_local1.data.level); } public function moveMouse(_arg1:Number, _arg2:Number, _arg3:Number):void{ field.beginMouseSlide(_arg1, _arg2, _arg3); } public function endDemo(){ restarting = false; enterFadePhase(); } private function enterDemoPhase(){ removeFieldFader(); pointer.leaveTarget(field); if (restarting){ doNextStep(); restarting = false; } else { startDemoLevel(demoType); }; demoPhase = 3; } private function createFieldMask():void{ var _local1:Graphics; if (fieldMask){ this.removeChild(fieldMask); fieldMask = null; }; fieldMask = new Shape(); _local1 = fieldMask.graphics; this.addChild(fieldMask); _local1.beginFill(0); _local1.drawCircle(0, 0, 50); _local1.endFill(); } public function prepareRestartLevel():void{ undoLastScoring(); startLevel(currentLevel, true); } public function endGame(_arg1:Boolean):void{ if (phase == PLAY_PHASE){ gameWon = _arg1; setScores(); enterEndPhase(); }; } private function getStepParams(_arg1:String):Array{ var _local2:Array; var _local3:String; var _local4:String; _local2 = []; if (_arg1.indexOf("(") > 0){ _local2 = _arg1.slice((_arg1.indexOf("(") + 1), _arg1.indexOf(")")).split(","); _local2; for (var _local7 in _local2) { _local3 = _local7; _local7; _local4 = _local2[_local3]; _local4; if (_local4.indexOf("<") > -1){ (_local2[_local3] = Path.getValue(this, _local4.slice((_local4.indexOf("<") + 1), _local4.lastIndexOf(">")))); }; }; } else { _local2 = null; _local2; }; return (_local2); } public function setVar(_arg1:String, _arg2):void{ this[_arg1] = _arg2; } private function maskField():void{ field.mask = fieldMask; } private function createField():void{ if (field){ this.removeChild(field); field = null; }; field = new Field(); field.game = this; this.addChildAt(field, 0); } public function saveNeeded():Boolean{ var _local1:int; var _local2:int; var _local3:Boolean; _local1 = getLevelTotalScore((currentLevel + 1)); _local2 = (getLevelTotalScore(currentLevel) + lastScore); _local3 = (_local2 >= _local1); return (_local3); } public function kill():void{ if (field){ field.kill(); removeChild(field); field = null; }; if (summary){ summary.kill(); removeChild(summary); summary = null; }; if (pauseScreen){ pauseScreen.kill(); removeChild(pauseScreen); pauseScreen = null; }; if (fieldMask){ removeChild(fieldMask); fieldMask = null; }; if (fieldFader){ removeChild(fieldFader); fieldFader = null; }; if (fieldSquare){ removeChild(fieldSquare); fieldSquare = null; }; pointer = null; stepList = null; demoEnd = null; mother = null; } private function removeFieldSquare():void{ if (fieldSquare){ this.removeChild(fieldSquare); fieldSquare = null; }; } public function runAsDemo():void{ if (running){ switch (demoPhase){ case 1: fieldFader.scaleX = pointer.scaleX; fieldFader.scaleY = pointer.scaleY; if ((fieldFader.scaleX * 50) >= (maxFieldSize - 0.5)){ fieldFader.scaleX = (maxFieldSize / 50); fieldFader.scaleY = (maxFieldSize / 50); enterUnFadePhase(); }; break; case 2: fieldFader.alpha = (fieldFader.alpha - 0.05); if (fieldFader.alpha <= 0){ enterDemoPhase(); }; break; case 3: field.runAsDemo(); updateFieldMask(); adjustMouse(); break; case 4: fieldFader.alpha = (fieldFader.alpha + 0.05); if (fieldFader.alpha >= 1){ if (restarting){ enterUnFadePhase(); } else { enterShrinkPhase(); }; }; break; case 5: fieldFader.scaleX = pointer.scaleX; fieldFader.scaleY = pointer.scaleY; if (fieldFader.scaleX <= 0.01){ killDemo(); }; break; }; } else { pauseScreen.run(); field.runAsPausedDemo(); adjustMouse(); }; } private function getSubstepCommand(_arg1:String):String{ return (_arg1.slice((_arg1.indexOf(":") + 1), _arg1.indexOf("("))); } public function createArea(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:uint):Area{ return (field.createArea(_arg1, _arg2, _arg3, _arg4)); } public function createHint(_arg1:Number, _arg2:Number, _arg3:String, _arg4:Number=150):Hint{ var _local5:Hint; _local5 = field.spawnHint(_arg1, _arg2, _arg3); _local5.setTimer((60 * 5)); _local5.setText(_arg3, 50); _local5.setTextWidth(_arg4); return (_local5); } public function setMother(_arg1:MotherOfAll){ mother = _arg1; pointer = mother.pointer; } private function enterUnFadePhase():void{ if (restarting){ field.clear(); }; createFieldMask(); maskField(); updateFieldMaskSize(); field.visible = true; demoPhase = 2; } private function undoLastScoring():void{ totalScore = (totalScore - lastScore); lastScore = 0; } private function updateFieldMaskSize(){ fieldMask.scaleX = (field.radius / 50); fieldMask.scaleY = (field.radius / 50); } public function getVar(_arg1:String){ return (this[_arg1]); } public function pause():void{ running = false; field.stopAreasAnim(); if (!demoMode){ BGMusic.that.fadeToPause(); }; pauseScreen = new PauseScreen(); addChild(pauseScreen); pauseScreen.demoMode = demoMode; pauseScreen.game = this; pauseScreen.mother = mother; if (demoMode){ pauseScreen.init((sizeX - 40), (sizeY - 40)); } else { pauseScreen.init(sizeX, sizeY); }; } public function loadGame(_arg1:int=0):void{ var _local2:SharedObject; _local2 = SharedObject.getLocal("areasData"); if (_arg1 == 0){ _arg1 = (_local2.data.scores.length + 1); }; totalScore = getLevelTotalScore((_arg1 - 1)); startLevel(_arg1); } private function getSubstepParams(_arg1:String):Array{ return (getStepParams(_arg1)); } } }//package
Section 45
//GameSummary (GameSummary) package { import flash.display.*; import com.kongregate.as3.client.*; import flash.text.*; import flash.net.*; public class GameSummary extends Sprite { private var game:Game; private var nextButton:CircleButton; private var mainMenuButton:CircleButton; public var opaque:Function; private var compIcon:CircleButton; public var fading:Function; private var saveAttemptCount:int; private var lastSaveOK:Boolean; private var creditsButton:CircleButton; private var sizeX:Number; private var sizeY:Number; private var area:Area; private var score:uint; private var mother:MotherOfAll; public var expired:Function; private var saveAnim:Container; private var dataIcon:CircleButton; private var gameWon:Boolean; private var flashers:Container; private var phase:int; private var buttons:Container; private var currentLevel:int; private var creditsScreen:CreditsScreen; private var finalLevel:Boolean; private var totalScore:uint; private var existingDataIcon:CircleButton; private var replayButton:CircleButton; private static const UNFADE_PHASE:int = 1; private static const MAIN_PHASE:int = 2; private static const FADE_PHASE:int = 3; private function startNextLevel():void{ game.prepareNextLevel(); flashers.getFirstElement().expired = function (){ enterFadePhase(); }; this.expired = function (){ game.startNextLevel(); }; clearScreen(); } public function contact(_arg1:Object, _arg2:Object):Boolean{ var _local3:Number; var _local4:Number; var _local5:Number; _local3 = (_arg1.x - _arg2.x); _local4 = (_arg1.y - _arg2.y); _local5 = (_arg1.radius + _arg2.radius); return ((((_local3 * _local3) + (_local4 * _local4)) < (_local5 * _local5))); } private function createMainManuButton(){ mainMenuButton = CircleButton.create(buttons, mother); mainMenuButton.setup(0, 200, 40, "go_to_main_menu", 0.8); mainMenuButton.setBorders((-(sizeX) / 2), (-(sizeY) / 2), (sizeX / 2), (sizeY / 2)); mainMenuButton.softClick = function (){ gotoMainMenu(); this.softClick = null; }; if (((!(gameWon)) && (!(finalLevel)))){ setButtonPushBehavior(); }; } public function GameSummery():void{ } private function setNoSaveBehavior():void{ dataIcon.hittable = true; existingDataIcon.hittable = true; dataIcon.setTrajectory(((compIcon.x + (Math.random() * 20)) - 10), ((compIcon.y + (Math.random() * 20)) - 10), 20); existingDataIcon.setTrajectory(((dataIcon.x + (Math.random() * 20)) - 10), ((dataIcon.y + (Math.random() * 20)) - 10), 30); dataIcon.stopped = function (){ dataIcon.onScreenRemove(); dataIcon.stopped = null; }; existingDataIcon.stopped = function (){ existingDataIcon.beginSlide(compIcon.x, (compIcon.y + 15), 7); existingDataIcon.stopped = null; }; } private function createLevelTF(_arg1:Number):Flasher{ var _local2:Flasher; _local2 = Flasher.create(flashers); _local2.setup(0, -175); if (finalLevel){ if (gameWon){ _local2.addText("wtf? you won the final level? you can't win the final level!", 70, _arg1); } else { _local2.addGraphic("end_level", 2); }; } else { _local2.addText(String(currentLevel), 100, _arg1); }; _local2.setFilter(1, 5, _arg1); return (_local2); } private function setManualSave():void{ dataIcon.stopped = null; dataIcon.impact = null; dataIcon.enabled = true; dataIcon.softClick = function (){ if (lastSaveOK){ dataIcon.hittable = false; dataIcon.enabled = false; dataIcon.beginSlide(compIcon.x, compIcon.y, 6); dataIcon.stopped = function (){ dataIcon.onScreenRemove(); dataIcon.expired = function (){ compIcon.onScreenRemove(); compIcon.expired = null; }; dataIcon.stopped = null; }; } else { compIcon.hittable = true; dataIcon.hittable = true; dataIcon.setTrajectory((compIcon.x + aMath.random(10, -10)), (compIcon.y + aMath.random(10, -10)), 30); }; }; } private function createDataIcon():void{ dataIcon = CircleButton.create(saveAnim, mother); dataIcon.setup(-200, -75, 25, "save", 0.8); dataIcon.setBorders((-(sizeX) / 2), (-(sizeY) / 2), (sizeX / 2), (sizeY / 2)); dataIcon.hittable = false; dataIcon.dontEnable = true; dataIcon.halfBaked = function (){ createCompIcon(); this.halfBaked = null; }; } private function createNextLevelButton():void{ nextButton = CircleButton.create(buttons, mother); nextButton.setup(90, 140, 40, "play"); nextButton.setBorders((-(sizeX) / 2), (-(sizeY) / 2), (sizeX / 2), (sizeY / 2)); nextButton.softClick = function (){ startNextLevel(); this.softClick = null; }; } private function enterFadePhase():void{ callEvent("fading"); phase = FADE_PHASE; } private function drawBG(_arg1:Number):void{ graphics.beginFill(_arg1); graphics.drawRect((-(sizeX) / 2), (-(sizeY) / 2), sizeX, sizeY); graphics.endFill(); } public function run():void{ switch (phase){ case UNFADE_PHASE: alpha = (alpha + 0.04); if (alpha >= 1){ alpha = 1; enterMainPhase(); }; break; case MAIN_PHASE: if (creditsScreen){ creditsScreen.run(); }; saveAnim.run(); flashers.run(); buttons.run(); hitTestButtonsIn(buttons); hitTestButtonsIn(saveAnim); break; case FADE_PHASE: saveAnim.run(); flashers.run(); buttons.run(); if (gameWon){ area.alpha = (area.alpha - 0.2); if (area.alpha <= 0){ callEvent("expired"); kill(); phase = 4; }; } else { alpha = (alpha - 0.05); if (alpha <= 0){ callEvent("expired"); kill(); phase = 4; }; }; break; }; } private function getCreditsReadStatus():Boolean{ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); return (_local1.data.creditsRead); } private function getTotalyTotalScore():int{ var _local1:SharedObject; var _local2:Array; var _local3:int; var _local4:int; var _local5:int; _local1 = SharedObject.getLocal("areasData"); _local2 = _local1.data.scores; _local3 = 0; _local4 = 0; _local5 = _local2.length; _local4 = 0; while (_local4 < _local5) { _local3 = (_local3 + _local2[_local4]); _local4++; }; return (_local3); } private function createCreditsButton():void{ creditsButton = CircleButton.create(buttons, mother); creditsButton.setup(90, 140, 40, "credits"); creditsButton.softClick = function (){ showCreditsScreen(); }; if (!getCreditsReadStatus()){ creditsButton.finishedAnimating = function (){ var _local1:FrameTimer; _local1 = new FrameTimer(5, showCreditsScreen); }; }; } private function createContainer():Container{ var _local1:Container; _local1 = new Container(); this.addChild(_local1); _local1.init(); return (_local1); } private function killCreditsScreen():void{ this.removeChild(creditsScreen); creditsScreen = null; } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } private function createScoreDisplay(_arg1:Number=0xFFFFFF):void{ var f:Flasher; var cl = _arg1; f = createLevelTF(cl); f.finishedAnimating = function (){ var ff:Flasher; ff = createScoreTF(score, cl); ff.finishedAnimating = function (){ createTotalScoreTF(totalScore, cl); }; }; } public function init(_arg1:Number, _arg2:Number, _arg3:Boolean):void{ finalLevel = false; sizeX = _arg1; sizeY = _arg2; gameWon = _arg3; drawBG((0xFFFFFF - (Number(gameWon) * 0xFFFFFF))); drawArea(); flashers = createContainer(); buttons = createContainer(); saveAnim = createContainer(); enterUnfadePhase(); } private function createExistingDataIcon():void{ existingDataIcon = CircleButton.create(saveAnim, mother); existingDataIcon.setup(compIcon.x, compIcon.y, 25, "save", 0.8); existingDataIcon.setBorders((-(sizeX) / 2), (-(sizeY) / 2), (sizeX / 2), (sizeY / 2)); existingDataIcon.hittable = false; existingDataIcon.dontEnable = true; } private function createReplayButton(){ replayButton = CircleButton.create(buttons, mother); replayButton.setup(-90, 140, 40, "back", 0.8); replayButton.setBorders((-(sizeX) / 2), (-(sizeY) / 2), (sizeX / 2), (sizeY / 2)); replayButton.softClick = function (){ replayLevel(); this.softClick = null; }; } private function clearScreen():void{ flashers.orderAllElements("remove"); buttons.orderAllElements("onScreenRemove"); saveAnim.orderAllElements("onScreenRemove"); } private function saveGame():Boolean{ lastSaveOK = game.saveGame(); return (lastSaveOK); } private function setCreditsReadStatus(_arg1:Boolean):void{ var _local2:SharedObject; _local2 = SharedObject.getLocal("areasData"); _local2.data.creditsRead = _arg1; _local2.flush(); } private function submitScoreToKong():Boolean{ try { if ((((currentLevel == (Game.END_LEVEL - 1))) && (gameWon))){ KongregateAPI.getInstance().stats.submit("gameCompleted", 1); }; if (currentLevel == Game.END_LEVEL){ KongregateAPI.getInstance().stats.submit((("level" + currentLevel) + "_score"), score); }; if ((currentLevel % 10) == 0){ KongregateAPI.getInstance().stats.submit((("level" + currentLevel) + "_score"), score); KongregateAPI.getInstance().stats.submit((("level" + currentLevel) + "_totalScore"), totalScore); }; if (gameWon){ KongregateAPI.getInstance().stats.submit("highestLevelFinished", currentLevel); }; KongregateAPI.getInstance().scores.submit(getTotalyTotalScore()); } catch(e) { return (false); }; return (true); } private function gotoMainMenu():void{ buttons.getFirstElement().expired = function (){ enterFadePhase(); }; this.expired = function (){ mother.gotoMainMenu(); game = null; }; clearScreen(); } private function hitTestButtonsIn(_arg1:Container):void{ var _local2:uint; var _local3:uint; var _local4:Array; var _local5:uint; _local4 = _arg1.L; _local5 = _local4.length; _local2 = 0; while (_local2 < _local5) { if (_local4[_local2].hittable){ _local3 = (_local2 + 1); while (_local3 < _local5) { if (_local4[_local3].hittable){ if (contact(_local4[_local2], _local4[_local3])){ _local4[_local2].hit(_local4[_local3]); }; }; _local3++; }; }; _local2++; }; } private function createCompIcon():void{ compIcon = CircleButton.create(saveAnim, mother); compIcon.setup(0, 50, 40, "comp", 0.8); compIcon.setBorders((-(sizeX) / 2), (-(sizeY) / 2), (sizeX / 2), (sizeY / 2)); compIcon.hittable = false; compIcon.pushable = false; compIcon.dontEnable = true; saveAnim.moveElementToButtom(compIcon); if (game.saveNeeded()){ compIcon.finishedAnimating = function (){ setNormalSaveBehavoir(); this.finishedAnimating = null; }; } else { createExistingDataIcon(); compIcon.finishedAnimating = function (){ setNoSaveBehavior(); this.finishedAnimating = null; }; }; } private function enterMainPhase():void{ if (finalLevel){ createCreditsButton(); } else { createNextLevelButton(); }; createReplayButton(); createMainManuButton(); createScoreDisplay((Number(gameWon) * 0xFFFFFF)); if (gameWon){ createDataIcon(); }; phase = MAIN_PHASE; callEvent("opaque"); } public function submitScore():void{ if (Global.kong){ submitScoreToKong(); }; } public function kill():void{ nextButton = null; creditsButton = null; replayButton = null; mainMenuButton = null; dataIcon = null; existingDataIcon = null; compIcon = null; if (area){ removeChild(area); area = null; }; if (flashers){ flashers.kill(); removeChild(flashers); flashers = null; }; if (buttons){ buttons.kill(); removeChild(buttons); buttons = null; }; if (saveAnim){ saveAnim.kill(); removeChild(saveAnim); saveAnim = null; }; mother = null; game = null; opaque = null; fading = null; expired = null; } private function setNormalSaveBehavoir():void{ saveAttemptCount = 3; dataIcon.stopped = function (){ if (lastSaveOK){ dataIcon.hittable = false; dataIcon.enabled = false; dataIcon.beginSlide(compIcon.x, compIcon.y, 6); dataIcon.stopped = function (){ dataIcon.onScreenRemove(); dataIcon.expired = function (){ compIcon.onScreenRemove(); compIcon.expired = null; }; dataIcon.stopped = null; }; } else { compIcon.hittable = true; dataIcon.hittable = true; dataIcon.setTrajectory((compIcon.x + aMath.random(10, -10)), (compIcon.y + aMath.random(10, -10)), 30); saveAttemptCount--; }; }; dataIcon.impact = function (){ if (saveAttemptCount <= 0){ setManualSave(); }; }; dataIcon.stopped(); if (!dataIcon.isMoving()){ setManualSave(); }; } private function showCreditsScreen():void{ setCreditsReadStatus(true); buttons.setElementsProp("enabled", false); creditsScreen = new CreditsScreen(); this.addChild(creditsScreen); creditsScreen.mother = mother; creditsScreen.init(sizeX, sizeY); creditsScreen.expired = function (){ buttons.setElementsProp("enabled", true); killCreditsScreen(); }; } private function createTotalScoreTF(_arg1:uint, _arg2:Number):Flasher{ var _local3:Flasher; var _local4:TextLineMetrics; _local3 = Flasher.create(flashers); _local3.setup(0, -10); _local3.addText(String(_arg1), 30, _arg2); _local4 = _local3.TF.getLineMetrics(0); _local3.graphics.lineStyle(1, _arg2); _local3.graphics.moveTo(((-(_local4.width) / 2) - 10), ((-(_local4.height) / 2) + 2)); _local3.graphics.lineTo(((_local4.width / 2) + 10), ((-(_local4.height) / 2) + 2)); _local3.setFilter(1, 5, _arg2); return (_local3); } public function setMother(_arg1:MotherOfAll, _arg2:Game):void{ mother = _arg1; game = _arg2; } private function replayLevel():void{ game.prepareRestartLevel(); buttons.getFirstElement().expired = function (){ enterFadePhase(); }; this.expired = function (){ game.restartLevel(); }; clearScreen(); } private function setButtonPushBehavior():void{ replayButton.hittable = true; nextButton.hittable = true; mainMenuButton.hittable = true; nextButton.whileMouseOver = function (){ replayButton.pushTo(mouseX, mouseY, 40); }; nextButton.softClick = null; } private function createScoreTF(_arg1:uint, _arg2:Number):Flasher{ var _local3:Flasher; _local3 = Flasher.create(flashers); _local3.setup(0, -65); _local3.addText(("+" + String(_arg1)), 60, _arg2); _local3.setFilter(1, 5, _arg2); return (_local3); } private function drawArea():void{ var _local1:Area; _local1 = new Area(); this.addChild(_local1); _local1.gotoAndStop((aMath.random((_local1.totalFrames - 1)) + 1)); _local1.setRadius(((sizeX / 2) - 20)); if (gameWon){ } else { _local1.blendMode = BlendMode.SUBTRACT; }; area = _local1; } private function enterUnfadePhase():void{ alpha = 0; phase = UNFADE_PHASE; } public function setDataDisplay(_arg1:int, _arg2:int, _arg3:int):void{ score = _arg1; totalScore = _arg2; currentLevel = _arg3; finalLevel = Boolean((currentLevel == Game.END_LEVEL)); if (game.saveNeeded()){ if (((gameWon) || (finalLevel))){ saveGame(); }; }; } } }//package
Section 46
//Ghost (Ghost) package { import flash.display.*; public class Ghost extends FieldObject { private var spin:Number; private var speed:Number; private var father:Ghost; private var spinRadius:Number; private var son:Ghost; private var desiredRadius:Number; private var angle:Number; private function findSpeedsToFather(){ var _local1:Number; var _local2:Number; _local1 = (father.x - x); _local2 = (father.y - y); XS = (XS + (_local1 / speed)); YS = (YS + (_local2 / speed)); } override public function init():void{ super.init(); drawGhost(); setRadius(20); forceRadius(0); angle = ((Math.random() * PI) * 2); active = true; speed = 4; spinRadius = (20 + (Math.random() * 30)); spin = ((2 + (Math.random() * 4)) / R2D); spin = ((Math.random())<0.5) ? spin : -(spin); cacheAsBitmap = true; } private function expire(){ active = false; setRadius(0); } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } override public function kill():void{ father = null; son = null; super.kill(); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number=20, _arg4:Number=1, _arg5:Ghost=null){ var _local6:Ghost; x = _arg1; y = _arg2; setRadius(_arg3); father = _arg5; if (_arg3 > 1){ _local6 = field.createOO("ghost", "overlay"); _local6.setup(_arg1, _arg2, (_arg3 - _arg4), _arg4, this); son = _local6; }; } private function findSpeedsToPlayer():void{ var _local1:Number; var _local2:Number; _local1 = ((field.player.x + (spinRadius * Math.cos(angle))) - x); _local2 = ((field.player.y + (spinRadius * Math.sin(angle))) - y); XS = (XS + (_local1 / (speed / 2))); YS = (YS + (_local2 / (speed / 2))); } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function hitTestEvils():Boolean{ var _local1:Evil; var _local2:Array; var _local3:Function; _local2 = field.evils.L; _local3 = field.contact; for each (_local1 in _local2) { if (((((_local1.active) && (!(_local1.haunted)))) && (_local3(this, _local1)))){ hitEvil(_local1); return (true); }; }; return (false); } public function run(){ forceRadius((radius + ((desiredRadius - radius) / 5))); if (active){ angle = (angle + spin); if (((father) && (father.active))){ slowDown(0.4); findSpeedsToFather(); } else { slowDown(0.8); if (!hitTestEvils()){ findSpeedsToPlayer(); }; if (Math.random() < 0.02){ expire(); }; }; move(); } else { if (radius < 1){ kill(); }; }; } private function drawGhost():void{ var _local1:Graphics; _local1 = this.graphics; _local1.beginFill(0); _local1.drawCircle(0, 0, 50); _local1.endFill(); } private function hitEvil(_arg1:Evil):void{ var _local2:Number; var _local3:Number; _local2 = ((_arg1.x + (spinRadius * Math.cos(angle))) - x); _local3 = ((_arg1.y + (spinRadius * Math.sin(angle))) - y); XS = (XS + (_local2 / speed)); YS = (YS + (_local3 / speed)); _arg1.grow(-1); _arg1.shrink((radius * 0.5)); _arg1.haunted = true; } } }//package
Section 47
//Global (Global) package { public class Global { public static const kong:Boolean = false; } }//package
Section 48
//Goo (Goo) package { class Goo extends FieldObject { private var fadeRate:Number; private var shrinkRate:Number; private var slowdownRate:Number; public function setFade(_arg1:Number=0.01):void{ fadeRate = _arg1; } public function setShrink(_arg1:Number=1):void{ shrinkRate = _arg1; } override public function init():void{ super.init(); } public function draw(_arg1:uint, _arg2:Number, _arg3:uint, _arg4:Number=0xFFFFFF, _arg5:Number=0xFFFFFF, _arg6:Number=1):void{ var _local7:Array; var _local8:Array; var _local9:Number; var _local10:Number; var _local11:uint; _local7 = []; _local8 = []; _local11 = 0; while (_local11 < _arg1) { _local7[_local11] = (((_arg2 * Math.cos((((360 / _arg1) * _local11) / R2D))) + ((Math.random() * 2) * _arg3)) - _arg3); _local8[_local11] = (((_arg2 * Math.sin((((360 / _arg1) * _local11) / R2D))) + ((Math.random() * 2) * _arg3)) - _arg3); _local11++; }; graphics.clear(); graphics.beginFill(_arg4); graphics.lineStyle(_arg6, _arg5); graphics.moveTo(((_local7[0] + _local7[_local11]) / 2), (_local8[0] + _local8[_local11])); _local11 = 1; while (_local11 < _arg1) { _local9 = ((_local7[_local11] + _local7[(_local11 + 1)]) / 2); _local10 = ((_local8[_local11] + _local8[(_local11 + 1)]) / 2); graphics.curveTo(_local7[_local11], _local8[_local11], _local9, _local10); _local11++; }; graphics.curveTo(_local7[0], _local8[0], ((_local7[0] + _local7[_local11]) / 2), (_local8[0] + _local8[_local11])); graphics.endFill(); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number=0, _arg4:Number=10831349.82):void{ x = _arg1; y = _arg2; rotation = (Math.random() * 360); _arg4 = ((_arg4)==10831349.82) ? ((Math.random() * PI) * 2) : _arg4; XS = (_arg3 * Math.cos(_arg4)); YS = (_arg3 * Math.sin(_arg4)); setFade(); setShrink(); setSlowdown(); } public function setSlowdown(_arg1:Number=0.9):void{ slowdownRate = _arg1; } public function run(){ move(); slowDown(slowdownRate); setRadius((radius * shrinkRate)); alpha = (alpha - fadeRate); if ((((alpha <= 0)) || ((radius < 0.5)))){ kill(); }; } } }//package
Section 49
//Graveyard (Graveyard) package { import flash.display.*; public class Graveyard extends Shape { private var cont:Container; public var bonusChance:Number; private var bonusCreated:Boolean; private var field:Field; private var lifeSpan:int; private var creatureList:VolatileList; private function createBonus(_arg1:Number):void{ var _local2:Bonus; bonusCreated = true; _local2 = field.createRandomBonus(x, y, _arg1); } public function link(_arg1:Field, _arg2:Container){ field = _arg1; cont = _arg2; } public function init(){ x = 0; y = 0; bonusCreated = false; lifeSpan = 15; creatureList = new VolatileList(); creatureList.clear(); } public function run(){ if (bonusCreated){ creatureList.forEach(slideCreature); }; alpha = (alpha - 0.01); if (alpha <= 0){ kill(); }; } private function slideCreature(_arg1, _arg2:int, _arg3:Array):void{ _arg1.x = (_arg1.x + ((x - _arg1.x) / 10)); _arg1.y = (_arg1.y + ((y - _arg1.y) / 10)); } public function kill():void{ creatureList.clear(); creatureList = null; field = null; cont.removeElement(this); cont = null; } private function countMass(_arg1:Number):Number{ var _local2:String; var _local3:Creature; var _local4:Number; var _local5:Number; var _local6:Number; _local4 = this.x; _local5 = this.y; _local6 = 0; do { _local3 = findNearestCreature(_local4, _local5); } while (!(_local3)); return (_local6); } private function findNearestCreature(_arg1:Number, _arg2:Number):Creature{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Array; var _local8:Creature; var _local9:String; var _local10:Creature; _local6 = (100 * 100); _local7 = field.creatures.L; _local8 = null; for (_local9 in _local7) { _local10 = _local7[_local9]; if (((!(_local10.active)) && (!(_local10.buried)))){ _local3 = (_local10.x - _arg1); _local4 = (_local10.y - _arg2); _local5 = ((_local3 * _local3) + (_local4 * _local4)); if (_local5 < _local6){ _local8 = _local10; _local6 = _local5; }; }; }; return (_local8); } public function go(){ var _local1:Number; _local1 = countMass((Math.sqrt((bonusChance * 10)) + 1)); if ((Math.random() * bonusChance) < (_local1 * _local1)){ createBonus(((_local1 * _local1) / bonusChance)); }; } private function creatureInRange(_arg1:Creature):Boolean{ var _local2:Number; var _local3:Number; _local2 = (x - _arg1.x); _local3 = (y - _arg1.y); return ((((_local2 * _local2) + (_local3 * _local3)) < (40 * 40))); } } }//package
Section 50
//Guide (Guide) package { import flash.filters.*; public class Guide extends FieldObject { override public function init():void{ alpha = 0; draw(); active = true; } private function draw():void{ var _local1:GlowFilter; graphics.lineStyle(3, 0, 1, false, "none"); graphics.moveTo(-50, 0); graphics.lineTo(50, 0); graphics.moveTo(30, -15); graphics.lineTo(50, 0); graphics.lineTo(30, 15); _local1 = new GlowFilter(0xFFFFFF, 1, 3, 3, 2, 3); filters = [_local1]; } private function aim():Boolean{ var _local1:int; var _local2:Evil; if (field.evils.L.length > 0){ _local1 = field.evils.L.sortOn("radius", ((Array.DESCENDING | Array.NUMERIC) | Array.RETURNINDEXEDARRAY))[0]; _local2 = field.evils.L[_local1]; rotation = (Math.atan2((_local2.y - y), (_local2.x - x)) * R2D); return (true); }; return (false); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number):void{ x = _arg1; y = _arg2; setRadius(_arg3); if (!aim()){ kill(); }; } public function run():void{ if (active){ alpha = (alpha + 0.07); if (alpha >= 1){ active = false; }; } else { alpha = (alpha - 0.04); if (alpha <= 0){ kill(); }; }; } } }//package
Section 51
//HelpScreen (HelpScreen) package { import flash.display.*; import flash.net.*; public class HelpScreen extends Sprite { private var areaTypes:Array; private var buttonKeyList:Array; private var angleList:Array; private var recIndex:int; private var cont:Container; private var pointer:Pointer; private var BG:Shape; private var father; private var demoGame:Game; public var sizeX:Number; private var phase:uint; public var sizeY:Number; public var radius:Number; private var bonusTypes:Array; private var MS:Shape; private var finalRadius:Number; private var finishedCreatingButtons:Boolean; private var mother:MotherOfAll; private var buttonList:Array; private function updateMaskSize():void{ MS.scaleX = BG.scaleX; MS.scaleY = BG.scaleY; } private function createMask():void{ MS = new Shape(); this.addChild(MS); MS.graphics.beginFill(0xFF00FF, 0.2); MS.graphics.drawCircle(0, 0, 50); MS.graphics.endFill(); } public function init(_arg1:Number, _arg2:Number){ sizeX = _arg1; sizeY = _arg2; x = (sizeX / 2); y = (sizeY / 2); drawBG(); BG.alpha = 0; cont = createContainer(); createMask(); cont.mask = MS; finalRadius = ((Math.min(sizeX, sizeY) - 20) / 2); setRadius(0); phase = 1; pointer.homeOnObject(this); buttonKeyList = []; angleList = []; recIndex = 0; buttonList = []; finishedCreatingButtons = true; areaTypes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; bonusTypes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; setHelpRead(); } public function close(){ enableAllButtons(false); slideButtonsToRadius((radius + 40)); pointer.homeOnObject(this); cont.L[0].stopped = function (){ beginBanishing(); }; phase = 7; } private function createBackButton():CircleButton{ var bt:CircleButton; bt = createButton(); bt.drawTriangle(0, 0xFFFFFF, 3, 45, 60); bt.softClick = function (){ slideButtonsAway(); stopButtonCreation(); initButtonCreation("main", false); }; return (bt); } private function beginDemo(_arg1:String):Game{ var type = _arg1; slideButtonsAway(); demoGame = new Game(); this.addChild(demoGame); demoGame.setMother(mother); demoGame.initAsDemo(type, sizeX, sizeY); switch (type.charAt(0)){ case "-": demoGame.demoEnd = function (){ initButtonCreation("main", false); killDemo(); }; break; case "A": demoGame.demoEnd = function (){ initButtonCreation("areas", false); killDemo(); }; break; case "B": demoGame.demoEnd = function (){ initButtonCreation("bonuses", false); killDemo(); }; break; }; phase = 5; return (demoGame); } private function createAreaButton():CircleButton{ var bt:CircleButton; var g:ButtonGraphic; bt = createButton(); g = new ButtonGraphic(); g.gotoAndStop(2); bt.addGraphic(g, 0.8); bt.softClick = function (){ slideButtonsAway(); initButtonCreation("areas", false); }; return (bt); } private function createPlayHelpButton():CircleButton{ var bt:CircleButton; var pl:Player; bt = createButton(); pl = new Player(); bt.addGraphic(pl, 0.65, -60); bt.softClick = function (){ beginDemo("-play"); }; return (bt); } private function createButton():CircleButton{ var _local1:CircleButton; _local1 = new CircleButton(); cont.addElement(_local1); _local1.init(); _local1.setMother(mother); _local1.x = 0; _local1.y = 0; _local1.setBorders(-(radius), -(radius), radius, radius); return (_local1); } public function setParents(_arg1, _arg2:MotherOfAll){ father = _arg1; mother = _arg2; pointer = mother.pointer; } private function createNextButton(_arg1:Boolean=false, _arg2:Boolean=true):Boolean{ var i:uint; var bt:CircleButton; var key:String; var A:Number; var R:Number; var random = _arg1; var recurse = _arg2; if (buttonKeyList.length > 0){ i = (random) ? aMath.random((buttonKeyList.length - 1)) : (buttonKeyList.length - 1); key = buttonKeyList[i]; A = angleList[i]; R = (radius - 45); switch (key){ case "-close": bt = createCloseButton(); break; case "-back": bt = createBackButton(); break; case "-playHelp": bt = createPlayHelpButton(); break; case "-areas": bt = createAreaButton(); break; case "backToAreas": bt = createAreaButton(); case "-bonuses": bt = createBonusButton(); break; case "backToAreas": bt = createBonusButton(); break; case "-potato": bt = createPotatoButton(); break; default: if (key.charAt(0) == "A"){ bt = createAreaHelpButton(Number(key.slice(1))); } else { if (key.charAt(0) == "B"){ bt = createBonusHelpButton(Number(key.slice(1))); } else { throw (new Error((("unable to create button of code " + key) + " - no such code."))); }; }; break; }; bt.setRadius(35); bt.x = (R * aMath.cos(A)); bt.y = (R * aMath.sin(A)); if (recurse){ bt.halfBaked = function (){ createNextButton(random); }; }; buttonKeyList.splice(i, 1); angleList.splice(i, 1); buttonList.push(bt); return (true); } else { finishedCreatingButtons = true; }; return (false); } private function initButtonCreation(_arg1:String, _arg2:Boolean=true){ var _local3:uint; var _local4:uint; buttonList = []; buttonKeyList = []; switch (_arg1){ case "main": buttonKeyList.push("-close"); buttonKeyList.push("-playHelp"); if (areaTypes.length){ buttonKeyList.push("-areas"); //unresolved jump }; if (bonusTypes.length){ buttonKeyList.push("-bonuses"); //unresolved jump }; buttonKeyList.push("-potato"); break; case "areas": buttonKeyList.push("-back"); _local3 = 0; while (_local3 < areaTypes.length) { buttonKeyList.push(("A" + areaTypes[_local3])); _local3++; }; break; case "area": buttonKeyList.push("-backToAreas"); break; case "bonuses": buttonKeyList.push("-back"); _local3 = 0; while (_local3 < bonusTypes.length) { buttonKeyList.push(("B" + bonusTypes[_local3])); _local3++; }; break; case "bonus": buttonKeyList.push("-backToBonuses"); break; case "potato": buttonKeyList.push("-back"); break; }; recIndex = 0; _local4 = buttonKeyList.length; _local3 = 0; while (_local3 < _local4) { angleList.push((((_local3 / _local4) * 360) + 90)); _local3++; }; finishedCreatingButtons = false; phase = (_arg2) ? 4 : 3; createNextButton(true, _arg2); } private function createAreaHelpButton(_arg1:uint):CircleButton{ var bt:CircleButton; var ar:Area; var areaNum = _arg1; bt = createButton(); ar = new Area(); ar.gotoAndStop(areaNum); bt.addGraphic(ar, 0.8); bt.maxShrink = 1; bt.addChildAt(ar, (this.numChildren - 1)); bt.mouseOver = function (){ ar.play(); }; bt.mouseOut = function (){ ar.stop(); }; bt.softClick = function (){ beginDemo(("A" + areaNum)); }; bt.finishedAnimating = function (){ ar.stop(); }; return (bt); } private function createPotatoButton():CircleButton{ var bt:CircleButton; var g:ButtonGraphic; bt = createButton(); g = new ButtonGraphic(); g.gotoAndStop(4); bt.addGraphic(g, 0.8); bt.softClick = function (){ slideButtonsAway(); initButtonCreation("potato", false); }; return (bt); } private function enableAllButtons(_arg1:Boolean=true):void{ var _local2:*; for each (_local2 in cont.L) { _local2.enabled = _arg1; }; } private function drawBG(){ BG = new Shape(); this.addChild(BG); BG.graphics.lineStyle(5, 0xFFFFFF, 1, false, LineScaleMode.NONE); BG.graphics.beginFill(0); BG.graphics.drawCircle(0, 0, 50); BG.graphics.endFill(); } private function slideButtonsToRadius(_arg1:Number, _arg2:Number=10){ var _local3:uint; var _local4:Number; var _local5:Number; var _local6:Array; var _local7:*; var _local8:CircleButton; _local5 = _arg1; _local6 = cont.L; _local7 = _local6.length; for each (_local8 in _local6) { _local4 = aMath.atan(_local8.y, _local8.x); _local8.beginSlide((_local5 * aMath.cos(_local4)), (_local5 * aMath.sin(_local4)), _arg2); }; } private function createBonusButton():CircleButton{ var bt:CircleButton; var g:ButtonGraphic; bt = createButton(); g = new ButtonGraphic(); g.gotoAndStop(3); bt.addGraphic(g, 0.8); bt.softClick = function (){ slideButtonsAway(); initButtonCreation("bonuses", false); }; return (bt); } public function setRadius(_arg1:Number):void{ radius = _arg1; BG.scaleX = (_arg1 / 50); BG.scaleY = (_arg1 / 50); } private function slideButtonsAway(){ var key:*; enableAllButtons(); slideButtonsToRadius((radius + 50), 10); for each (key in cont.L) { key.stopped = function (){ this.remove(); }; }; } private function createCloseButton():CircleButton{ var bt:CircleButton; bt = createButton(); bt.drawCross(0xFFFFFF, 3, 40, 45); bt.softClick = function (){ stopButtonCreation(); father.hideHelpScreen(); }; return (bt); } private function createBonusHelpButton(_arg1:uint):CircleButton{ var bt:CircleButton; var bn:Bonus; var bonusNum = _arg1; bt = createButton(); bn = new Bonus(); bn.gotoAndStop(bonusNum); bt.addGraphic(bn, 0.7); bt.whileMouseOver = function (){ bn.rotation++; }; bt.softClick = function (){ beginDemo(("B" + bonusNum)); }; return (bt); } private function beginBanishing():void{ phase = 8; } public function run(){ switch (phase){ case 1: setRadius((radius + ((finalRadius - radius) / 4))); if ((finalRadius - radius) < 0.5){ updateMaskSize(); setRadius(finalRadius); phase = 2; }; break; case 2: BG.alpha = (BG.alpha + 0.08); if (BG.alpha >= 1){ BG.alpha = 1; pointer.leaveTarget(this); phase = 3; initButtonCreation("main", false); }; break; case 3: createNextButton(true, false); if (finishedCreatingButtons){ phase = 4; }; cont.run(); break; case 4: cont.run(); break; case 5: cont.run(); if (demoGame){ demoGame.runAsDemo(); }; break; case 6: demoGame.alpha = (demoGame.alpha - 0.1); if (demoGame.alpha <= 0){ killDemo(); }; break; case 7: cont.run(); break; case 8: cont.run(); BG.alpha = (BG.alpha - 0.08); if (BG.alpha <= 0){ phase = 9; finalRadius = 0; }; break; case 9: setRadius((radius + ((finalRadius - radius) / 4))); updateMaskSize(); if (radius <= 0.5){ pointer.leaveTarget(this, true); father.killHelpScreen(); }; break; }; } private function stopButtonCreation(){ buttonKeyList = buttonKeyList.slice(recIndex); } private function killDemo(){ this.removeChild(demoGame); demoGame = null; } private function createContainer():Container{ var _local1:Container; _local1 = new Container(); this.addChild(_local1); _local1.init(); return (_local1); } private function setHelpRead(_arg1:Boolean=true):void{ var _local2:SharedObject; _local2 = SharedObject.getLocal("helpRead"); _local2.data.helpRead = _arg1; _local2.flush(); } } }//package
Section 52
//Hint (Hint) package { import flash.display.*; import flash.text.*; import flash.filters.*; import flash.geom.*; class Hint extends Sprite { private var XS:Number; private var YS:Number; public var expired:Function; private var cont:Container; private var timer:uint; private var phase:int; private var fadeRate:Number; private var TF:TextField; private var shrinkRate:Number; private var slowdownRate:Number; private var field:Field; public function link(_arg1:Field, _arg2:Container):void{ field = _arg1; cont = _arg2; } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } public function setShrink(_arg1:Number=1):void{ shrinkRate = _arg1; } public function setFade(_arg1:Number=0):void{ fadeRate = _arg1; } public function init():void{ TF = new TextField(); formatTF(); this.addChild(TF); phase = 1; alpha = 0; } public function setTimer(_arg1:int=0):void{ timer = _arg1; } public function setSpeed(_arg1:Number=0, _arg2:Number=0):void{ XS = (_arg1 * Math.cos(_arg2)); YS = (_arg1 * Math.sin(_arg2)); } public function setTextWidth(_arg1:Number):void{ TF.x = (-(_arg1) / 2); TF.width = _arg1; } private function adjustText():void{ var _local1:Rectangle; _local1 = TF.getBounds(cont); TF.y = (-(_local1.height) / 2); } public function reset():void{ setSpeed(); setFade(); setShrink(); setSlowdown(); setTimer(); } private function isVerySmall():Boolean{ var _local1:Number; var _local2:Number; _local1 = (TF.width * scaleX); _local2 = (TF.height * scaleY); return ((((_local1 * _local1) + (_local2 * _local2)) < 1)); } public function kill():void{ expired = null; field = null; cont.removeElement(this); cont = null; } public function setupFilter(_arg1:Number, _arg2:Number):void{ var _local3:GlowFilter; _local3 = new GlowFilter(); _local3.color = TF.filters[0].color; _local3.blurX = _arg2; _local3.blurY = _arg2; _local3.strength = _arg1; _local3.quality = 3; TF.filters = [_local3]; } public function setup(_arg1:Number, _arg2:Number, _arg3:Boolean=false):void{ x = _arg1; y = _arg2; setTextWidth(150); reset(); if (_arg3){ setColors(0, 0xFFFFFF); } else { setColors(0xFFFFFF, 0); }; } private function applyFilter(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:GlowFilter; _local4 = new GlowFilter(); _local4.color = _arg1; _local4.blurX = _arg3; _local4.blurY = _arg3; _local4.strength = _arg2; _local4.quality = 3; TF.filters = [_local4]; } public function run():void{ move(); switch (phase){ case 1: alpha = (alpha + 0.15); if (alpha >= 1){ phase = 2; }; break; case 2: if (timer > 0){ timer--; } else { if (timer == 0){ phase = 3; }; }; break; case 3: XS = (XS * slowdownRate); YS = (YS * slowdownRate); scaleX = (scaleX * shrinkRate); scaleY = (scaleY * shrinkRate); alpha = (alpha - fadeRate); if ((((alpha <= 0)) || (isVerySmall()))){ cont.removeElement(this); }; break; }; } private function setColors(_arg1:Number, _arg2:Number):void{ TF.textColor = _arg1; applyFilter(_arg2, 15, 3); } public function addBG(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0):void{ var _local4:Shape; var _local5:Graphics; _local4 = new Shape(); _local5 = _local4.graphics; _local5.beginGradientFill("radial", [_arg1, _arg1], [0.5, 0], [0, 175]); _local5.drawCircle(0, 0, 50); _local5.endFill(); this.addChildAt(_local4, 0); if (_arg2 == 0){ _local4.scaleX = ((this.width * 0.6) / 50); _local4.scaleY = ((this.height * 0.6) / 50); } else { _local4.scaleX = (_arg2 / 50); _local4.scaleY = ((_arg3 == 0)) ? _local4.scaleY : (_arg3 / 50); }; } private function formatTF():void{ var _local1:TextFormat; _local1 = new TextFormat(); TF.wordWrap = true; TF.selectable = false; TF.autoSize = TextFieldAutoSize.CENTER; TF.embedFonts = true; _local1.align = TextFormatAlign.CENTER; _local1.font = "LilyUPC"; TF.defaultTextFormat = _local1; } public function setSlowdown(_arg1:Number=1):void{ slowdownRate = _arg1; } public function setText(_arg1:String, _arg2:Number):void{ var _local3:TextFormat; TF.text = _arg1; _local3 = new TextFormat(); _local3.size = _arg2; TF.setTextFormat(_local3); adjustText(); } private function move():void{ x = (x + XS); y = (y + YS); } } }//package
Section 53
//Laser (Laser) package { import flash.display.*; public class Laser extends MovieClip { private var field:Field; public var active:Boolean; private var continuous:Boolean; private var IY:Number; private var cont:Container; private var IX:Number; private var N:Number; public var rotating:Boolean; private var lifeSpan:int; public var damage:Number; private var spin:Number; private var fadeRate:Number; public var LE:MovieClip; public var radius:Number; private var M:Number; public var _hit:Boolean; public static const PI:Number = 3.14159265358979; public static const R2D:Number = 57.2957795130823; public function link(_arg1:Field, _arg2:Container){ field = _arg1; cont = _arg2; } public function init(){ damage = 0; fadeRate = 0.05; active = true; lifeSpan = -1; rotating = false; spin = 0; } private function findMN(){ M = Math.tan((rotation / R2D)); N = ((-(M) * x) + y); } private function hitSomething():Evil{ var _local1:Number; var _local2:Number; var _local3:Evil; _local3 = insideEvilCheck(); if (_local3){ scaleX = 0; } else { findMN(); _local3 = findHitTarget(); if (_local3){ findHitSpot(_local3); } else { findHitWithField(); }; _local1 = (IX - x); _local2 = (IY - y); scaleX = (Math.sqrt(((_local1 * _local1) + (_local2 * _local2))) / 100); }; LE.scaleX = ((1 / this.scaleX) * 3); return (_local3); } public function addTimer(_arg1:int){ continuous = true; lifeSpan = _arg1; } private function insideEvilCheck():Evil{ var _local1:Evil; var _local2:Array; var _local3:Number; var _local4:Number; var _local5:Number; _local2 = field.evils.L; for each (_local1 in _local2) { if (_local1.active){ _local3 = (_local1.x - x); }; _local4 = (_local1.y - y); _local5 = _local1.radius; if (((_local3 * _local3) + (_local4 * _local4)) < (_local5 * _local5)){ return (_local1); }; }; return (null); } private function findHitSpot(_arg1:Evil){ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; _local9 = _arg1.x; _local10 = _arg1.y; _local11 = _arg1.radius; _local2 = (1 + (M * M)); _local3 = (((-2 * _local9) + ((2 * M) * N)) - ((2 * M) * _local10)); _local4 = (((((_local9 * _local9) + (N * N)) + (_local10 * _local10)) - ((2 * N) * _local10)) - (_local11 * _local11)); _local5 = Math.sqrt(((_local3 * _local3) - ((4 * _local2) * _local4))); _local6 = ((-(_local3) + _local5) / (2 * _local2)); _local7 = ((-(_local3) - _local5) / (2 * _local2)); _local12 = Math.abs((_local6 - x)); _local13 = Math.abs((_local7 - x)); if (_local12 < _local13){ _local8 = _local6; } else { if (_local13 < _local12){ _local8 = _local7; } else { _local12 = Math.abs((((M * _local6) + N) - y)); _local13 = Math.abs((((M * _local7) + N) - y)); if (_local12 < _local13){ _local8 = _local6; } else { _local8 = _local7; }; }; }; IX = _local8; IY = ((M * _local8) + N); } public function fire(){ var _local1:Evil; var _local2:Number; var _local3:Number; _local1 = hitSomething(); if (_local1){ _local1.hitLaser(this); _hit = true; } else { _hit = false; }; if (!continuous){ active = false; }; } private function findHitTarget(){ var _local1:String; var _local2:Evil; var _local3:Evil; var _local4:Number; var _local5:Number; var _local6:Array; _local4 = ((field.radius * field.radius) * 4); _local6 = field.evils.L; for (_local1 in _local6) { _local2 = _local6[_local1]; if (_local2.active){ _local5 = (((((-(M) * _local2.x) + _local2.y) - N) * (((-(M) * _local2.x) + _local2.y) - N)) / ((M * M) + 1)); if (_local5 < ((radius + _local2.radius) * (radius + _local2.radius))){ findHitSpot(_local2); if (((rotation)>0) ? (IY > y) : (IY < y)){ _local5 = (((IX - x) * (IX - x)) + ((IY - y) * (IY - y))); if (_local5 < _local4){ _local4 = _local5; _local3 = _local2; }; }; }; }; }; return (_local3); } public function setDamage(_arg1:Number){ damage = _arg1; this.scaleY = (_arg1 / 200); radius = (this.scaleY * 25); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Boolean=false, _arg6:Number=0.1){ x = _arg1; y = _arg2; rotation = (_arg3 * R2D); setDamage(_arg4); continuous = _arg5; fadeRate = _arg6; } public function kill():void{ field = null; if (cont){ cont.removeElement(this); }; cont = null; } public function run(){ if (rotating){ if (spin == 0){ spin = ((Math.random() * 3) - 1.5); }; rotation = (rotation + spin); }; if (active){ fire(); if (lifeSpan > -1){ if (lifeSpan == 0){ active = false; }; lifeSpan--; }; } else { alpha = (alpha - fadeRate); if (alpha < 0){ kill(); }; }; } public function get hit():Boolean{ return (_hit); } private function findHitWithField(){ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; _local11 = field.radius; _local1 = (1 + (M * M)); _local2 = ((2 * M) * N); _local3 = ((N * N) - (_local11 * _local11)); _local4 = Math.sqrt(((_local2 * _local2) - ((4 * _local1) * _local3))); _local5 = ((-(_local2) + _local4) / (2 * _local1)); _local6 = ((-(_local2) - _local4) / (2 * _local1)); if (Math.abs(rotation) < 90){ _local7 = Math.max(_local5, _local6); } else { _local7 = Math.min(_local5, _local6); }; IX = _local7; IY = ((M * _local7) + N); } } }//package
Section 54
//LaserSpinner (LaserSpinner) package { public class LaserSpinner extends FieldObject { private var lasers:Array; private var laserPower:Number; private var spinRate:Number; private var lifeSpan:int; private var desiredRadius:Number; private static var NUM_OF_LASERS:int = 3; override public function init():void{ super.init(); setRadius(0); forceRadius(0); spinRate = (0.5 + (Math.random() * 1)); if (Math.random() < 0.5){ spinRate = (spinRate * -1); }; lifeSpan = (40 * 8); active = true; draw(); } public function expire():void{ var _local1:*; for each (_local1 in lasers) { _local1.active = false; }; lasers = null; active = false; setRadius(0); } private function createLasers(_arg1:int):void{ var _local2:int; var _local3:Laser; var _local4:Number; var _local5:Number; _local5 = radius; lasers = []; _local2 = 0; while (_local2 < _arg1) { _local4 = ((rotation + ((360 / NUM_OF_LASERS) * _local2)) / R2D); _local3 = field.createOO("laser", "ground"); _local3.setup((x + (_local5 * Math.cos((_local4 / R2D)))), (y + (_local5 * Math.sin((_local4 / R2D)))), _local4, laserPower, true, 0.2); lasers.push(_local3); _local2++; }; } private function draw():void{ drawCircle(50, 0, 0xFFFFFF); graphics.lineStyle(1, 0xFFFFFF); graphics.lineTo(50, 0); } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } override public function kill():void{ lasers = null; super.kill(); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number):void{ x = _arg1; y = _arg2; laserPower = _arg3; setRadius((10 + (_arg3 * 0.7))); createLasers(NUM_OF_LASERS); } private function adjustLasers():void{ var _local1:int; var _local2:Laser; var _local3:Number; var _local4:Number; _local4 = radius; _local1 = 0; while (_local1 < NUM_OF_LASERS) { _local2 = lasers[_local1]; _local3 = ((rotation + ((360 / NUM_OF_LASERS) * _local1)) / R2D); _local2.setup((x + (_local4 * Math.cos(_local3))), (y + (_local4 * Math.sin(_local3))), _local3, laserPower, true); _local2.scaleY = (_local2.scaleY * 3); _local1++; }; } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 5))); if (active){ if (lifeSpan < 100){ spinRate = (spinRate * 1.04); }; rotation = (rotation + spinRate); adjustLasers(); lifeSpan--; if (lifeSpan <= 0){ expire(); }; } else { if (radius <= 0.5){ kill(); }; }; } } }//package
Section 55
//LaserTurret (LaserTurret) package { import flash.display.*; public class LaserTurret extends SpriteFieldObject { private var laserDamage:Number; private var shooting:Boolean; private var shootTimer:int; private var spinDeltaD:Number; private var target:Evil; private var lifeSpan:uint; private var attacking:Boolean; private var desiredRadius:Number; private var laser:Laser; private var turret:Shape; private function beginAttackSession():void{ var _local1:Number; target = findNearestEvil(); if (((target) && (target.active))){ _local1 = (((turret.rotation / R2D) - getTargetDir()) % (PI * 2)); if (_local1 > PI){ _local1 = (_local1 - (PI * 2)); } else { if (_local1 < -(PI)){ _local1 = (_local1 + (PI * 2)); }; }; spinDeltaD = ((_local1)>0) ? -1 : 1; attacking = true; }; } override public function init():void{ super.init(); active = true; setRadius(((13 + (Math.random() * 6)) - 3)); forceRadius(1); spinDeltaD = 0; attacking = false; shooting = false; shootTimer = 0; drawCircle(50, 0, 0xFFFFFF); drawTurret(); laser = null; laserDamage = 20; target = null; lifeSpan = (60 * 20); } private function expire():void{ var _local1:Explosion; endAttackSession(); _local1 = field.createOO("explosion", "overlay"); _local1.setup(x, y, (50 + (radius * 3)), 20, 10); active = false; setRadius(0); } private function endAttackSession():void{ attacking = false; if (laser){ laser.active = false; laser = null; }; startSpinning(); shootTimer = 60; } private function aim(){ var _local1:Number; var _local2:Number; var _local3:Number; spin(); if (target){ _local1 = (turret.rotation - (getTargetDir() * R2D)); if ((((-5 < _local1)) && ((_local1 < 5)))){ if (!laser){ laser = field.createOO("laser", "overlay"); shooting = true; spinDeltaD = (spinDeltaD * 0.5); }; _local2 = 40; _local3 = 40; _local2 = (_local2 * scaleX); _local3 = (_local3 * scaleY); _local2 = (_local2 * Math.cos((turret.rotation / R2D))); _local3 = (_local3 * Math.sin((turret.rotation / R2D))); laser.setup((x + _local2), (y + _local3), (turret.rotation / R2D), ((laserDamage + (Math.random() * 6)) - 3), true); laser.scaleY = (laser.scaleY * 1.5); } else { if (shooting){ endAttackSession(); }; }; } else { endAttackSession(); }; } private function spin():void{ turret.rotation = (turret.rotation + spinDeltaD); } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } override public function kill():void{ removeChild(turret); turret = null; laser = null; target = null; super.kill(); } private function drawTurret(_arg1:Number=60):void{ var _local2:Graphics; turret = new Shape(); this.addChild(turret); _local2 = turret.graphics; _local2.moveTo(50, (-(_arg1) / 2)); _local2.beginFill(0); _local2.lineStyle(1, 0xFFFFFF); _local2.curveTo(20, 0, 50, (_arg1 / 2)); _local2.curveTo(40, 0, 50, (-(_arg1) / 2)); _local2.endFill(); } private function startSpinning():void{ spinDeltaD = ((Math.random() * 2) - 1); attacking = false; shooting = false; target = null; } private function findNearestEvil():Evil{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Array; var _local6:Evil; var _local7:String; var _local8:Evil; _local4 = (field.radius * 2); _local5 = field.evils.L; for (_local7 in _local5) { _local8 = _local5[_local7]; if (_local8.active){ _local1 = (_local8.x - this.x); _local2 = (_local8.y - this.y); _local3 = ((Math.sqrt(((_local1 * _local1) + (_local2 * _local2))) - this.radius) - _local8.radius); if (_local3 < _local4){ _local6 = _local8; _local4 = _local3; }; }; }; return (_local6); } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function getTargetDir():Number{ return (Math.atan2((target.y - y), (target.x - x))); } private function hitTestEvils(){ var _local1:Array; var _local2:Function; var _local3:Evil; _local1 = field.evils.L; _local2 = field.contact; for each (_local3 in _local1) { if (_local3.active){ if (_local2(this, _local3)){ expire(); }; }; }; } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 10))); if (active){ hitCheckWithEvils(expire); if (attacking){ aim(); } else { spin(); if (shootTimer <= 0){ beginAttackSession(); }; shootTimer--; }; lifeSpan--; if (lifeSpan <= 0){ expire(); }; } else { if (radius < 1){ kill(); }; }; } public function setup(_arg1:Number, _arg2:Number, _arg3:uint, _arg4:Number):void{ x = _arg1; y = _arg2; lifeSpan = _arg3; laserDamage = _arg4; startSpinning(); } } }//package
Section 56
//LevelData (LevelData) package { public class LevelData { public static var arr:Array; public static function seed():void{ var _local1:int; var _local2:LevelProfile; arr = []; _local1 = 0; while (_local1 <= 75) { _local2 = new LevelProfile(); arr.push(_local2); _local1++; }; _local1 = 1; var _temp1 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp1]; _local2.setupEvils(150, 5, 1); _local2.setupAreas(0, 50, 25, []); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 5, 1, 3); _local2.setupField(400, 25); var _temp2 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp2]; _local2.setupEvils(140, 15, 1); _local2.setupAreas(50, 50, 25, [1, 2]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 5, 1, 3); _local2.setupField(450, 30); var _temp3 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp3]; _local2.setupEvils(130, 20, 1); _local2.setupAreas(30, 50, 25, [3]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 4, 1, 4); _local2.setupField(450, 30); var _temp4 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp4]; _local2.setupEvils(120, 20, 1); _local2.setupAreas(30, 75, 25, [1, 2, 3]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 4, 1, 4); _local2.setupField(450, 35); var _temp5 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp5]; _local2.setupEvils(20, 2, 1); _local2.setupAreas(50, 65, 25, [3]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(2, 3, 1, 4); _local2.setupField(500, 35); var _temp6 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp6]; _local2.setupEvils(90, 20, 1); _local2.setupAreas(35, 65, 25, [4]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 3, 1, 4); _local2.setupField(500, 35); var _temp7 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp7]; _local2.setupEvils(120, 30, 2); _local2.setupAreas(35, 100, 25, [1, 2, 4]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 3, 1, 4); _local2.setupField(550, 40); var _temp8 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp8]; _local2.setupEvils(100, 30, 2); _local2.setupAreas(55, 100, 25, [5]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(2, 3, 1, 4); _local2.setupField(600, 40); var _temp9 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp9]; _local2.setupEvils(120, 30, 2); _local2.setupAreas(45, 100, 25, [3, 5]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(2, 3, 1, 4); _local2.setupField(600, 40); var _temp10 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp10]; _local2.setupEvils(120, 30, 10); _local2.setupAreas(110, 100, 25, [5]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(2, 35, 17, 6); _local2.setupField(600, 60); var _temp11 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp11]; _local2.setupEvils(100, 30, 2); _local2.setupAreas(40, 100, 25, [3, 4]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(2, 3, 1, 4); _local2.setupField(600, 45); var _temp12 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp12]; _local2.setupEvils(120, 30, 3); _local2.setupAreas(85, 100, 25, [1, 2, 3, 4, 5]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(3, 3, 1, 4); _local2.setupField(650, 45); var _temp13 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp13]; _local2.setupEvils(120, 30, 3); _local2.setupAreas(50, 110, 20, [6]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(3, 3, 1, 4); _local2.setupField(650, 45); var _temp14 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp14]; _local2.setupEvils(120, 30, 3); _local2.setupAreas(65, 100, 50, [3, 4, 6]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(3, 3, 1, 4); _local2.setupField(600, 50); var _temp15 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp15]; _local2.setupEvils(35, 1, 3); _local2.setupAreas(35, 100, 50, [6]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 35, 20, 30); _local2.setupField(600, 50); var _temp16 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp16]; _local2.setupEvils(110, 30, 3); _local2.setupAreas(85, 100, 25, [4, 7]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(3, 3, 1, 4); _local2.setupField(650, 50); var _temp17 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp17]; _local2.setupEvils(110, 30, 3); _local2.setupAreas(75, 100, 15, [3, 4, 7]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(3, 3, 1, 4); _local2.setupField(650, 55); var _temp18 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp18]; _local2.setupEvils(90, 30, 4); _local2.setupAreas(50, 100, 25, [8]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(3, 3, 1, 4); _local2.setupField(700, 55); var _temp19 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp19]; _local2.setupEvils(100, 30, 4); _local2.setupAreas(75, 100, 25, [3, 8]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 3, 1, 4); _local2.setupField(700, 55); var _temp20 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp20]; _local2.setupEvils(50, 30, 4); _local2.setupAreas(75, 100, 25, [8]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(20, 10, 1, 0); _local2.setupField(700, 60); var _temp21 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp21]; _local2.setupEvils(100, 30, 4); _local2.setupAreas(50, 75, 15, [9]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 3, 1, 4); _local2.setupField(800, 60); var _temp22 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp22]; _local2.setupEvils(100, 30, 4); _local2.setupAreas(65, 75, 15, [6, 7, 9]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 3, 1, 5); _local2.setupField(800, 60); var _temp23 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp23]; _local2.setupEvils(115, 30, 4); _local2.setupAreas(35, 100, 25, [10]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 3, 1, 5); _local2.setupField(700, 60); var _temp24 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp24]; _local2.setupEvils(100, 30, 4); _local2.setupAreas(55, 100, 25, [3, 10]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 3, 1, 5); _local2.setupField(700, 65); var _temp25 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp25]; _local2.setupEvils(100, 30, 8); _local2.setupAreas(100, 4, 1, [4]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 30, 15, 15); _local2.setupField(700, 60); var _temp26 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp26]; _local2.setupEvils(110, 30, 4); _local2.setupAreas(45, 100, 25, [11]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 3, 1, 5); _local2.setupField(700, 65); var _temp27 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp27]; _local2.setupEvils(90, 30, 5); _local2.setupAreas(50, 100, 15, [6, 11]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 3, 1, 5); _local2.setupField(750, 65); var _temp28 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp28]; _local2.setupEvils(100, 10, 5); _local2.setupAreas(50, 110, 30, [4, 4, 12]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(800, 70); var _temp29 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp29]; _local2.setupEvils(80, 15, 5); _local2.setupAreas(65, 120, 40, [9, 12]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(800, 70); var _temp30 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp30]; _local2.setupEvils(15, 2, 2); _local2.setupAreas(20, 75, 15, [7]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(1, 1, 2, 180, -55); _local2.setupField(700, 60); var _temp31 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp31]; _local2.setupEvils(100, 0, 5); _local2.setupAreas(50, 100, 25, [13]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(700, 70); var _temp32 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp32]; _local2.setupEvils(90, 20, 5); _local2.setupAreas(65, 100, 25, [8, 13]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(750, 70); var _temp33 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp33]; _local2.setupEvils(180, 30, 5); _local2.setupAreas(75, 100, 15, [5, 14]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(900, 75); var _temp34 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp34]; _local2.setupEvils(120, 20, 6); _local2.setupAreas(65, 100, 25, [8, 9, 14]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(900, 75); var _temp35 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp35]; _local2.setupEvils(150, 20, 10); _local2.setupAreas(100, 100, 25, [13]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(6, 80, 40, 15); _local2.setupField(1000, 60); var _temp36 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp36]; _local2.setupEvils(120, 15, 6); _local2.setupAreas(75, 100, 20, [3, 6, 15]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(950, 75); var _temp37 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp37]; _local2.setupEvils(100, 30, 6); _local2.setupAreas(85, 100, 20, [13, 15]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(950, 75); var _temp38 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp38]; _local2.setupEvils(100, 10, 6); _local2.setupAreas(65, 100, 25, [12, 16]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(5, 2, 1, 5); _local2.setupField(900, 60); var _temp39 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp39]; _local2.setupEvils(95, 25, 6); _local2.setupAreas(50, 105, 25, [7, 16]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(6, 2, 1, 5); _local2.setupField(950, 80); var _temp40 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp40]; _local2.setupEvils(70, 25, 6); _local2.setupAreas(100, 105, 25, [11]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(10, 120, 120, 180, -60); _local2.setupField(950, 60); var _temp41 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp41]; _local2.setupEvils(150, 15, 7); _local2.setupAreas(65, 105, 30, [4, 17]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(6, 2, 1, 5); _local2.setupField(950, 80); var _temp42 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp42]; _local2.setupEvils(120, 5, 7); _local2.setupAreas(85, 110, 30, [3, 6, 17]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(6, 2, 1, 5); _local2.setupField(1000, 80); var _temp43 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp43]; _local2.setupEvils(140, 30, 7); _local2.setupAreas(80, 110, 35, [6, 18]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(6, 2, 1, 5); _local2.setupField(900, 80); var _temp44 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp44]; _local2.setupEvils(120, 15, 7); _local2.setupAreas(75, 115, 35, [3, 18]); _local2.setupCreatures(160, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(7, 2, 1, 5); _local2.setupField(950, 85); var _temp45 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp45]; _local2.setupEvils(150, 15, 7); _local2.setupAreas(100, 400, 0, [18]); _local2.setupCreatures(160, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(10, 150, 30, 60); _local2.setupField(950, 60); var _temp46 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp46]; _local2.setupEvils(120, 10, 7); _local2.setupAreas(75, 115, 40, [19]); _local2.setupCreatures(120, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(7, 2, 1, 5); _local2.setupField(1000, 85); var _temp47 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp47]; _local2.setupEvils(100, 25, 8); _local2.setupAreas(70, 120, 40, [9, 19]); _local2.setupCreatures(100, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(7, 2, 1, 6); _local2.setupField(1050, 85); var _temp48 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp48]; _local2.setupEvils(100, 25, 8); _local2.setupAreas(70, 120, 45, [20]); _local2.setupCreatures(80, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(7, 2, 1, 6); _local2.setupField(900, 90); var _temp49 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp49]; _local2.setupEvils(90, 5, 8); _local2.setupAreas(75, 125, 45, [16, 20]); _local2.setupCreatures(60, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(7, 2, 1, 6); _local2.setupField(1050, 90); var _temp50 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp50]; _local2.setupEvils(35, 5, 5); _local2.setupAreas(100, 30, 2, [19]); _local2.setupCreatures(85, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(4, 1, 1, 0, 60); _local2.setupField(1050, 60); var _temp51 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp51]; _local2.setupEvils(100, 30, 8); _local2.setupAreas(50, 95, 15, [12]); _local2.setupCreatures(20, 1, 0); _local2.setupBonuses(15, [1]); _local2.setupPlayer(7, 2, 1, 6); _local2.setupField(900, 90); var _temp52 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp52]; _local2.setupEvils(85, 10, 8); _local2.setupAreas(25, 75, 15, [8, 15]); _local2.setupCreatures(50, 2, 1); _local2.setupBonuses(55, [2]); _local2.setupPlayer(8, 2, 1, 6); _local2.setupField(950, 95); var _temp53 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp53]; _local2.setupEvils(100, 25, 6); _local2.setupAreas(40, 80, 10, [13]); _local2.setupCreatures(40, 2, 1); _local2.setupBonuses(95, [3]); _local2.setupPlayer(8, 2, 1, 6); _local2.setupField(1000, 95); var _temp54 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp54]; _local2.setupEvils(90, 25, 9); _local2.setupAreas(30, 90, 10, [9]); _local2.setupCreatures(60, 3, 0); _local2.setupBonuses(150, [4]); _local2.setupPlayer(8, 2, 1, 6); _local2.setupField(1150, 95); var _temp55 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp55]; _local2.setupEvils(25, 5, 4); _local2.setupAreas(0, 50, 25, []); _local2.setupCreatures(60, 3, 0); _local2.setupBonuses(200, [4]); _local2.setupPlayer(7, 1, 3, 10, -50); _local2.setupField(1050, 60); var _temp56 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp56]; _local2.setupEvils(90, 30, 6); _local2.setupAreas(30, 50, 25, [4, 20]); _local2.setupCreatures(60, 4, 1); _local2.setupBonuses(145, [5]); _local2.setupPlayer(8, 2, 1, 6); _local2.setupField(1000, 100); var _temp57 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp57]; _local2.setupEvils(90, 15, 8); _local2.setupAreas(50, 90, 10, [6, 10, 14]); _local2.setupCreatures(60, 5, 1); _local2.setupBonuses(200, [6]); _local2.setupPlayer(8, 2, 1, 6); _local2.setupField(1100, 75); var _temp58 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp58]; _local2.setupEvils(100, 15, 7); _local2.setupAreas(50, 85, 15, [7, 11]); _local2.setupCreatures(50, 5, 2); _local2.setupBonuses(180, [7]); _local2.setupPlayer(9, 2, 1, 6); _local2.setupField(1100, 100); var _temp59 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp59]; _local2.setupEvils(100, 30, 7); _local2.setupAreas(30, 100, 15, [9, 14, 14]); _local2.setupCreatures(50, 6, 1); _local2.setupBonuses(250, [8]); _local2.setupPlayer(9, 2, 1, 6); _local2.setupField(1150, 100); var _temp60 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp60]; _local2.setupEvils(25, 30, 6); _local2.setupAreas(100, 90, 15, [8]); _local2.setupCreatures(0, 1, 0); _local2.setupBonuses(0, []); _local2.setupPlayer(2, 30, 50, 180, 60); _local2.setupField(900, 60); var _temp61 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp61]; _local2.setupEvils(95, 25, 7); _local2.setupAreas(50, 90, 20, [1, 2, 16]); _local2.setupCreatures(50, 6, 1); _local2.setupBonuses(200, [9]); _local2.setupPlayer(9, 2, 1, 6); _local2.setupField(1100, 105); var _temp62 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp62]; _local2.setupEvils(90, 10, 8); _local2.setupAreas(50, 100, 15, [4, 19]); _local2.setupCreatures(50, 7, 0); _local2.setupBonuses(250, [10]); _local2.setupPlayer(9, 2, 1, 6); _local2.setupField(1150, 105); var _temp63 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp63]; _local2.setupEvils(100, 10, 8); _local2.setupAreas(50, 90, 20, [7, 13]); _local2.setupCreatures(70, 8, 1); _local2.setupBonuses(400, [11]); _local2.setupPlayer(9, 2, 1, 6); _local2.setupField(1150, 105); var _temp64 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp64]; _local2.setupEvils(100, 15, 8); _local2.setupAreas(40, 90, 25, [15, 20]); _local2.setupCreatures(65, 8, 1); _local2.setupBonuses(500, [12]); _local2.setupPlayer(9, 2, 1, 6); _local2.setupField(1200, 110); var _temp65 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp65]; _local2.setupEvils(85, 5, 12); _local2.setupAreas(50, 125, 15, [5, 14]); _local2.setupCreatures(40, 8, 1); _local2.setupBonuses(250, [11]); _local2.setupPlayer(10, 1, 2, 30, -40); _local2.setupField(1250, 80); var _temp66 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp66]; _local2.setupEvils(120, 30, 9); _local2.setupAreas(50, 80, 15, [6, 11]); _local2.setupCreatures(35, 8, 1); _local2.setupBonuses(300, [13]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1150, 60); var _temp67 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp67]; _local2.setupEvils(90, 20, 9); _local2.setupAreas(50, 50, 15, [3, 18]); _local2.setupCreatures(80, 8, 2); _local2.setupBonuses(500, [14]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1200, 110); var _temp68 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp68]; _local2.setupEvils(105, 15, 8); _local2.setupAreas(50, 90, 15, [4, 12]); _local2.setupCreatures(45, 8, 2); _local2.setupBonuses(350, [15]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1250, 110); var _temp69 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp69]; _local2.setupEvils(90, 15, 9); _local2.setupAreas(85, 125, 30, [6]); _local2.setupCreatures(75, 5, 2); _local2.setupBonuses(650, [4]); _local2.setupPlayer(10, 30, 30, 0, 60); _local2.setupField(1250, 80); var _temp70 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp70]; _local2.setupEvils(130, 15, 8); _local2.setupAreas(85, 125, 30, [1, 2, 3, 18]); _local2.setupCreatures(70, 5, 2); _local2.setupBonuses(190, [1, 2, 3]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1300, 120); var _temp71 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp71]; _local2.setupEvils(130, 20, 8); _local2.setupAreas(85, 125, 35, [3, 5, 6, 10, 13, 14, 18]); _local2.setupCreatures(80, 6, 2); _local2.setupBonuses(230, [1, 2, 3, 9, 11]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1300, 140); var _temp72 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp72]; _local2.setupEvils(130, 25, 9); _local2.setupAreas(85, 125, 40, [3, 5, 6, 8, 10, 12, 13, 14, 18, 20]); _local2.setupCreatures(80, 6, 2); _local2.setupBonuses(270, [1, 2, 3, 7, 9, 10, 11]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1350, 150); var _temp73 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp73]; _local2.setupEvils(75, 30, 9); _local2.setupAreas(85, 125, 45, [3, 5, 6, 8, 9, 10, 12, 13, 14, 16, 18, 20]); _local2.setupCreatures(80, 7, 2); _local2.setupBonuses(320, [1, 2, 3, 5, 7, 9, 10, 11, 13, 14]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1300, 150); var _temp74 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp74]; _local2.setupEvils(85, 35, 10); _local2.setupAreas(90, 125, 50, [3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20]); _local2.setupCreatures(80, 8, 2); _local2.setupBonuses(400, [1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1300, 160); var _temp75 = _local1; _local1 = (_local1 + 1); _local2 = arr[_temp75]; _local2.setupEvils(140, 5, 10); _local2.setupAreas(125, 125, 50, [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); _local2.setupCreatures(120, 8, 2); _local2.setupBonuses(400, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]); _local2.setupPlayer(10, 2, 1, 6); _local2.setupField(1350, 160); _local2.setupDynamics(160, -1, 80, -1, 30, 14, 2000); } } }//package
Section 57
//LevelEditor (LevelEditor) package { import flash.events.*; import flash.display.*; import flash.ui.*; public class LevelEditor extends Sprite { public var currentLevel:int; private var iList:Array; private static var ref:LevelEditor; public function init():void{ draw(); createLevelControls(5, 85); currentLevel = 0; visible = false; } public function toggleVis(_arg1:KeyboardEvent):void{ if (_arg1.charCode == Keyboard.SPACE){ visible = !(visible); if (visible){ parent.setChildIndex(this, (parent.numChildren - 1)); Mouse.show(); } else { Mouse.hide(); }; }; } private function draw():void{ graphics.lineStyle(5, 0xFFFFFF); graphics.beginFill(0); graphics.drawRect(0, 0, 550, 220); graphics.endFill(); } private function connectLevelControls(_arg1:int):void{ iList[0][0].connect(LevelData.arr[_arg1].evils, "time"); iList[0][1].connect(LevelData.arr[_arg1].evils, "timeOffset"); iList[0][2].connect(LevelData.arr[_arg1].evils, "level"); iList[1][0].connect(LevelData.arr[_arg1].areas, "chance"); iList[1][1].connect(LevelData.arr[_arg1].areas, "size"); iList[1][2].connect(LevelData.arr[_arg1].areas, "sizeOffset"); iList[1][3].connect(LevelData.arr[_arg1].areas, "types"); iList[2][0].connect(LevelData.arr[_arg1].creatures, "chance"); iList[2][1].connect(LevelData.arr[_arg1].creatures, "level"); iList[2][2].connect(LevelData.arr[_arg1].creatures, "levelOffset"); iList[3][0].connect(LevelData.arr[_arg1].bonuses, "chance"); iList[3][1].connect(LevelData.arr[_arg1].bonuses, "types"); iList[4][0].connect(LevelData.arr[_arg1].player, "power"); iList[4][1].connect(LevelData.arr[_arg1].player, "rate"); iList[4][2].connect(LevelData.arr[_arg1].player, "burst"); iList[4][3].connect(LevelData.arr[_arg1].player, "spread"); iList[4][4].connect(LevelData.arr[_arg1].player, "life"); iList[5].connect(LevelData.arr[_arg1].field, "size"); iList[6].connect(LevelData.arr[_arg1].field, "time"); } private function createLevelControlsColumn(_arg1:Number, _arg2:Number, _arg3:int, _arg4:Number=100, _arg5:Number=20, _arg6:Number=40):Array{ var _local7:Array; var _local8:int; var _local9:NumericInput; _local7 = []; _local8 = 0; while (_local8 < _arg3) { _local9 = NumericInput.create(this); _local9.draw(_arg4, _arg5, _arg6); _local9.x = _arg1; _local9.y = (_arg2 + ((_arg5 + 5) * _local8)); _local7.push(_local9); _local8++; }; return (_local7); } private function createLevelControls(_arg1:Number=10, _arg2:Number=50):void{ var sg:Sign; var levelSelector:NumericInput; var xLoc = _arg1; var yLoc = _arg2; iList = []; sg = new Sign(); this.addChild(sg); sg.setup((xLoc + 50), (yLoc - 15), 30, "#enemies"); iList[0] = createLevelControlsColumn(xLoc, yLoc, 3); iList[0][0].setLabel("time"); iList[0][1].setLabel("timeMod"); iList[0][2].setLabel("level"); sg = new Sign(); this.addChild(sg); sg.setup((xLoc + 160), (yLoc - 15), 30, "#areas"); iList[1] = createLevelControlsColumn((xLoc + 110), yLoc, 4); iList[1][0].setLabel("chance"); iList[1][1].setLabel("size"); iList[1][2].setLabel("sizeMod"); iList[1][3].draw(100, 20, 60); iList[1][3].setLabel("types"); sg = new Sign(); this.addChild(sg); sg.setup((xLoc + 270), (yLoc - 15), 30, "#creatures"); iList[2] = createLevelControlsColumn((xLoc + 220), yLoc, 3); iList[2][0].setLabel("chance"); iList[2][1].setLabel("level"); iList[2][2].setLabel("levelMod"); sg = new Sign(); this.addChild(sg); sg.setup((xLoc + 380), (yLoc - 15), 30, "#bonuses"); iList[3] = createLevelControlsColumn((xLoc + 330), yLoc, 2); iList[3][0].setLabel("chance"); iList[3][1].draw(100, 20, 60); iList[3][1].setLabel("types"); sg = new Sign(); this.addChild(sg); sg.setup((xLoc + 490), (yLoc - 15), 30, "#bullets"); iList[4] = createLevelControlsColumn((xLoc + 440), yLoc, 5); iList[4][0].setLabel("power"); iList[4][1].setLabel("rate"); iList[4][2].setLabel("burst"); iList[4][3].setLabel("spread"); iList[4][4].setLabel("life"); iList[5] = NumericInput.create(this); iList[5].draw(100, 20, 40); iList[5].setLabel("level size"); iList[5].x = (xLoc + 300); iList[5].y = (yLoc - 60); iList[6] = NumericInput.create(this); iList[6].draw(100, 20, 40); iList[6].setLabel("level time"); iList[6].x = (iList[5].x + 110); iList[6].y = (yLoc - 60); levelSelector = NumericInput.create(this); levelSelector.draw(220, 30, 40); levelSelector.connect(this, "currentLevel"); levelSelector.setLabel("Edit Level (1-75):"); levelSelector.x = (xLoc + 20); levelSelector.y = (yLoc - 70); levelSelector.changed = function (){ if ((((1 <= currentLevel)) && ((currentLevel <= 75)))){ connectLevelControls(currentLevel); }; }; } public static function hide():void{ ref.visible = false; } public static function create(_arg1):LevelEditor{ var _local2:LevelEditor; _local2 = new (LevelEditor); _arg1.addChild(_local2); ref = _local2; _local2.init(); _local2.y = 330; return (_local2); } public static function show():void{ ref.visible = true; } } }//package
Section 58
//LevelProfile (LevelProfile) package { public class LevelProfile { public var areas:Object; public var bonuses:Object; public var dynamics:Object; public var creatures:Object; public var xml:XML; public var evils:Object; public var player:Object; public var field:Object; public function LevelProfile():void{ evils = new Object(); areas = new Object(); creatures = new Object(); bonuses = new Object(); player = new Object(); field = new Object(); dynamics = new Object(); evils.time = new int(); evils.timeOffset = new int(); evils.level = new int(); areas.chance = new int(); areas.size = new int(); areas.sizeOffset = new int(); areas.types = new Array(); creatures.chance = new int(); creatures.level = new int(); creatures.levelOffset = new int(); bonuses.chance = new int(); bonuses.types = new Array(); player.power = new int(); player.rate = new int(); player.burst = new int(); player.spread = new int(); player.life = new int(); field.size = new Number(); field.time = new Number(); dynamics.time = new int(); dynamics.evilTimeMod = new int(); dynamics.evilTimeMin = new int(); dynamics.areaChanceMod = new int(); dynamics.areaChanceMin = new int(); dynamics.bonusChanceMod = new int(); dynamics.bonusChanceMax = new int(); setupDynamics(0, 0, 0, 0, 0, 0, 0); } public function setupAreas(_arg1:int, _arg2:int, _arg3:int, _arg4:Array):LevelProfile{ areas.chance = _arg1; areas.size = _arg2; areas.sizeOffset = _arg3; areas.types = _arg4; return (this); } public function setupBonuses(_arg1:int, _arg2:Array):LevelProfile{ bonuses.chance = _arg1; bonuses.types = _arg2; return (this); } public function setupCreatures(_arg1:int, _arg2:int, _arg3:int):LevelProfile{ creatures.chance = _arg1; creatures.level = _arg2; creatures.levelOffset = _arg3; return (this); } public function setupEvils(_arg1:int, _arg2:int, _arg3:int, _arg4:int=0, _arg5=0):LevelProfile{ evils.time = _arg1; evils.timeOffset = _arg2; evils.level = _arg3; evils.timeMod = _arg4; evils.minTime = _arg5; return (this); } public function toArray():Array{ var _local1:Array; _local1 = []; _local1.push([evils.time, evils.offset, evils.level]); _local1.push([areas.chance, areas.size, areas.sizeOffset, areas.types]); _local1.push([creatures.chance, creatures.level, creatures.levelOffset]); _local1.push([bonuses.chance, bonuses.types]); _local1.push([player.power, player.rate, player.burst, player.spread, player.life]); _local1.push(field.size, field.time); _local1.push([dynamics.time, dynamics.evilTimeMod, dynamics.evilTimeMin, dynamics.areaChanceMod, dynamics.areaChanceMin, dynamics.bonusChanceMod, dynamics.bonusChanceMax]); return (_local1); } public function setupDynamics(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):void{ dynamics.time = _arg1; dynamics.evilTimeMod = _arg2; dynamics.evilTimeMin = _arg3; dynamics.areaChanceMod = _arg4; dynamics.areaChanceMin = _arg5; dynamics.bonusChanceMod = _arg6; dynamics.bonusChanceMax = _arg7; } public function setupField(_arg1:int, _arg2:int):LevelProfile{ field.size = _arg1; field.time = _arg2; return (this); } public function setupPlayer(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int=0):LevelProfile{ player.power = _arg1; player.rate = _arg2; player.burst = _arg3; player.spread = _arg4; player.life = _arg5; return (this); } } }//package
Section 59
//LilyUPC (LilyUPC) package { import flash.text.*; public dynamic class LilyUPC extends Font { } }//package
Section 60
//LoadCircle (LoadCircle) package { import flash.display.*; public class LoadCircle extends Sprite { private var growSpeed:Number; private var TX:Number; public var radius:Number; private var TY:Number; private var desiredRadius:Number; private var activated:Boolean; public function init(){ setRadius(1); forceRadius(0); setTarget(0, 0); activated = false; growSpeed = (5 + (Math.random() * 10)); graphics.beginFill(0); graphics.drawCircle(0, 0, 50); graphics.endFill(); } public function loadCircle(){ } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } public function atFullSize():Boolean{ if (activated){ if ((desiredRadius - radius) < 5){ return (true); }; }; return (false); } public function setTarget(_arg1:Number, _arg2:Number){ TX = _arg1; TY = _arg2; } public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } public function run(){ forceRadius((radius + ((desiredRadius - radius) / growSpeed))); } private function moveToTarget(){ x = (x + ((TX - x) / 10)); y = (y + ((TY - y) / 10)); } public function activate():void{ if (!activated){ activated = true; setRadius(aMath.random(40, 45)); }; } } }//package
Section 61
//LoadingScreen (LoadingScreen) package { import flash.display.*; import flash.system.*; import flash.ui.*; public dynamic class LoadingScreen extends Sprite { private var titleList:Array; private var cont:Container; private var loading:Boolean; private var prevPercLoad:int; private var L:Array; public var sizeX:Number; public var sizeY:Number; private var percentLoaded:int; private var loadingFinished:Boolean; private var ldr:LoaderInfo; public function init(_arg1:Number, _arg2:Number):void{ ldr = root.loaderInfo; ldr.addEventListener("complete", _finishedLoading, false, 0, true); cont = Container.create(this); L = []; sizeX = _arg1; sizeY = _arg2; loadingFinished = false; if (versionOK()){ loading = true; populate(); } else { loading = false; seedTitleList(); createNextTitle(); Mouse.show(); }; } private function _finishedLoading(_arg1:Object):void{ ldr.removeEventListener("complete", _finishedLoading); loadingFinished = true; } private function createLoadCircles(_arg1:int, _arg2:int):Array{ var _local3:LoadCircle; var _local4:Array; var _local5:Array; var _local6:int; var _local7:int; var _local8:Number; var _local9:Number; _local4 = []; _local5 = []; _local6 = 0; while (_local6 < _arg1) { _local7 = 0; while (_local7 < _arg2) { _local3 = createLoadCircle(aMath.random(sizeX), aMath.random(sizeY), 0); _local8 = (((_local7 + 0.5) * sizeX) / _arg2); _local9 = (((_local6 + 0.5) * sizeY) / _arg1); _local3.x = (_local8 + aMath.random(4, -4)); _local3.y = (_local9 + aMath.random(4, -4)); _local4.push(_local3); _local7++; }; _local6++; }; return (_local4); } private function updateStats():void{ prevPercLoad = percentLoaded; percentLoaded = int(((ldr.bytesLoaded / ldr.bytesTotal) * 100)); } private function activateAllTill(_arg1:int):void{ var _local2:*; _local2 = 0; while (_local2 < _arg1) { L[_local2].activate(); _local2++; }; } private function createLoadCircle(_arg1:Number, _arg2:Number, _arg3:Number):LoadCircle{ var _local4:LoadCircle; _local4 = new LoadCircle(); cont.addElement(_local4); _local4.init(); _local4.x = _arg1; _local4.y = _arg2; _local4.setRadius(_arg3); return (_local4); } private function createNextTitle():void{ var f:Flasher; var BCLE:ButtonCreationListEntry; if (titleList.length > 0){ f = Flasher.create(cont); BCLE = titleList.shift(); f.setup((BCLE.x + (sizeX / 2)), (BCLE.y + (sizeY / 2)), BCLE.radius, BCLE.str); f.font = "_sans"; f.align = BCLE.num; if (BCLE.str == "#(here)"){ f.link = "http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"; }; f.setFilter(2, 3, 0xFFFFFF); f.finishedAnimating = function (){ createNextTitle(); }; }; } public function run(_arg1:Object):void{ cont.run(); if (loading){ updateStats(); if (prevPercLoad != percentLoaded){ activateAllTill(percentLoaded); }; if (((loadingFinished) && (screenIsBlack()))){ if (this["finishedLoading"]){ var _local2 = this; _local2["finishedLoading"](); }; }; }; } private function seedTitleList():void{ var _local1:Array; var _local2:ButtonCreationListEntry; var _local3:int; _local1 = []; _local3 = 0; while (_local3 < 4) { _local2 = new ButtonCreationListEntry(); _local1.push(_local2); _local3++; }; _local3 = 0; _local1[_local3].str = "#Update"; _local1[_local3].x = 0; _local1[_local3].y = -150; _local1[_local3].radius = 50; _local3++; _local1[_local3].str = "#Your"; _local1[_local3].x = 0; _local1[_local3].y = -75; _local1[_local3].radius = 50; _local3++; _local1[_local3].str = "#Player."; _local1[_local3].x = 0; _local1[_local3].y = 0; _local1[_local3].radius = 50; _local3++; _local1[_local3].str = "#(here)"; _local1[_local3].x = 0; _local1[_local3].y = 80; _local1[_local3].radius = 20; titleList = _local1; } private function versionOK():Boolean{ var _local1:Array; var _local2:Array; var _local3:int; _local1 = [9, 0, 45, 0]; _local2 = Capabilities.version.split(" ")[1].split(","); _local3 = 0; while (_local3 < 4) { if (_local2[_local3] < _local1[_local3]){ return (false); }; _local3++; }; return (true); } private function screenIsBlack():Boolean{ var _local1:*; for (_local1 in L) { if (!L[_local1].atFullSize()){ return (false); }; }; return (true); } private function populate():void{ var _local1:Array; var _local2:int; _local1 = createLoadCircles(10, 10); while (_local1.length > 0) { _local2 = (aMath.random(1, _local1.length) - 1); L.push(_local1[_local2]); _local1.splice(_local2, 1); }; } } }//package
Section 62
//MainMenu (MainMenu) package { import flash.display.*; import flash.net.*; import flash.geom.*; public class MainMenu extends Sprite { private const GENERIC_SLIDE_SPEED:Number = 4; private var helpScreen:HelpScreen; private var loadgameButton:CircleButton; private var settingsButton:CircleButton; private var overlay:Container; private var levelButtons:Container; private var newgameButton:CircleButton; private var buttonCreationList:Array; private var demoGame:Game; public var sizeX:Number; private var creditsButton:CircleButton; public var sizeY:Number; private var helpButtonPushCount:int; private var buttons:Container; private var helpRead:Boolean; private var creditsScreen:CreditsScreen; private var playButton:CircleButton; public var mother:MotherOfAll; private var helpButton:CircleButton; private var levelSelectButton:CircleButton; private function setHelpRead(_arg1:Boolean=true):void{ var _local2:SharedObject; _local2 = SharedObject.getLocal("areasData"); _local2.data.helpRead = _arg1; _local2.flush(); } public function killHelpScreen(){ this.removeChild(helpScreen); helpScreen = null; } public function init(_arg1:Number, _arg2:Number):void{ sizeX = _arg1; sizeY = _arg2; drawBG(); buttons = Container.create(this); levelButtons = Container.create(this); overlay = Container.create(this); overlay.mouseChildren = false; createPlayButton(); helpRead = getHelpReadStatus(); helpButtonPushCount = 5; } private function showHelpScreen(){ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); _local1.data.helpRead = true; _local1.flush(); helpScreen = new HelpScreen(); this.addChild(helpScreen); helpScreen.setParents(this, mother); helpScreen.init(sizeX, sizeY); buttons.setElementsProp("enabled", false); } private function createBackButton():void{ var bt:CircleButton; bt = CircleButton.create(levelButtons, mother); bt.setup((sizeX / 2), (sizeY - 50), 30, "back"); bt.hittable = false; bt.softClick = function (){ endLevelSelection(); }; } private function hitTestButtons(){ var _local1:uint; var _local2:uint; var _local3:Array; var _local4:uint; _local3 = buttons.L; _local4 = _local3.length; _local1 = 0; while (_local1 < _local4) { if (_local3[_local1].hittable){ _local2 = (_local1 + 1); while (_local2 < _local4) { if (_local3[_local2].hittable){ if (contact(_local3[_local1], _local3[_local2])){ _local3[_local1].hit(_local3[_local2]); }; }; _local2++; }; }; _local1++; }; } public function contact(_arg1:Object, _arg2:Object):Boolean{ var _local3:Number; var _local4:Number; var _local5:Number; _local3 = (_arg1.x - _arg2.x); _local4 = (_arg1.y - _arg2.y); _local5 = (_arg1.radius + _arg2.radius); return ((((_local3 * _local3) + (_local4 * _local4)) < (_local5 * _local5))); } private function endLevelSelection():void{ levelButtons.orderAllElements("onScreenRemove"); levelButtons.getLastElement().expired = function (){ toMenu(); }; } private function beginDemo():void{ setHelpRead(true); if (helpButton){ stopHelpButtonPushyness(); }; buttons.setElementsProp("enabled", false); demoGame = new Game(); addChild(demoGame); demoGame.setMother(mother); demoGame.initAsDemo("-play", sizeX, sizeY); demoGame.x = (sizeX / 2); demoGame.y = (sizeY / 2); demoGame.demoEnd = function (){ buttons.setElementsProp("enabled", true); killDemo(); }; } private function showPlayOptionsButtons():void{ playButton.pushable = false; playButton.beginSlide(150, 275, GENERIC_SLIDE_SPEED); playButton.stopped = function (){ playButton.beginSlide(100, 275, GENERIC_SLIDE_SPEED); createNewgameButton(); createLevelSelectButton(); createLoadgameButton(); buttons.moveElementToTop(playButton); playButton.stopped = null; }; } private function getHelpReadStatus():Boolean{ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); return (_local1.data.helpRead); } private function setHelpButtonPushyness():void{ helpButtonPushCount = 5; playButton.hittable = true; playButton.pushable = true; helpButton.hittable = true; helpButton.pushable = true; helpButton.stopped = null; playButton.impact = function (){ helpButtonPushCount--; }; playButton.mouseOver = function (){ if ((((helpButtonPushCount <= 0)) || (getHelpReadStatus()))){ stopHelpButtonPushyness(); } else { helpButton.setTrajectory(((mouseX + (Math.random() * 20)) - 10), ((mouseY + (Math.random() * 20)) - 10), 25); }; }; } private function hidePlayOptionsButtons():void{ playButton.beginSlide(150, 275, GENERIC_SLIDE_SPEED); newgameButton.beginSlide(150, 275, GENERIC_SLIDE_SPEED); levelSelectButton.beginSlide(150, 275, GENERIC_SLIDE_SPEED); loadgameButton.beginSlide(150, 275, GENERIC_SLIDE_SPEED); newgameButton.stopped = function (){ newgameButton = null; this.remove(); }; levelSelectButton.stopped = function (){ levelSelectButton = null; this.remove(); }; loadgameButton.stopped = function (){ loadgameButton = null; this.remove(); }; } private function createAllButtons():void{ createPlayButton(true); createHelpButton(true); createCreditsButton(true); } private function createNextLevelButton():void{ var bt:CircleButton; var BCLE:ButtonCreationListEntry; var tm:FrameTimer; if (buttonCreationList.length > 0){ bt = CircleButton.create(levelButtons, mother); BCLE = buttonCreationList.shift(); if (BCLE.num == Game.END_LEVEL){ bt.setup(BCLE.x, BCLE.y, BCLE.radius, "end_level"); } else { bt.setup(BCLE.x, BCLE.y, BCLE.radius, ("#" + String(BCLE.num)), 0.8); }; tm = new FrameTimer(0, createNextLevelButton); bt.FG.rotation = (-30 + (Math.random() * 60)); bt.softClick = function (){ levelButtons.orderAllElements("onScreenRemove"); levelButtons.getLastElement().expired = function (){ mother.beginLevelNum(BCLE.num); this.expired = null; }; this.softClick = null; }; }; } public function hideHelpScreen(){ helpScreen.close(); buttons.setElementsProp("enabled", true); } private function createButton():CircleButton{ var _local1:CircleButton; _local1 = new CircleButton(); buttons.addElement(_local1); _local1.init(); _local1.setMother(mother); _local1.x = (sizeX / 2); _local1.y = (sizeY / 2); _local1.setBorders(0, 0, sizeX, sizeY); return (_local1); } private function createLevelSelectButton():void{ levelSelectButton = CircleButton.create(buttons, mother); levelSelectButton.setup(playButton.x, playButton.y, 20, "select_level"); levelSelectButton.popup(); levelSelectButton.beginSlide(215, 275, GENERIC_SLIDE_SPEED); levelSelectButton.pushable = false; levelSelectButton.hittable = false; levelSelectButton.softClick = function (){ toLevelSelection(); this.softClick = null; }; } private function killDemo(){ demoGame.kill(); this.removeChild(demoGame); demoGame = null; } public function kill():void{ playButton = null; newgameButton = null; levelSelectButton = null; loadgameButton = null; helpButton = null; settingsButton = null; creditsButton = null; if (demoGame){ demoGame.kill(); removeChild(demoGame); demoGame = null; }; if (buttons){ buttons.kill(); removeChild(buttons); buttons = null; }; if (levelButtons){ levelButtons.kill(); removeChild(levelButtons); levelButtons = null; }; if (overlay){ overlay.kill(); removeChild(overlay); overlay = null; }; buttonCreationList = null; } private function drawBG(){ graphics.beginFill(0); graphics.drawRect(-1, -1, (sizeX + 2), (sizeY + 2)); graphics.endFill(); } private function createLoadgameButton():void{ loadgameButton = CircleButton.create(buttons, mother); loadgameButton.setup(playButton.x, playButton.y, 20, "load_game"); loadgameButton.popup(); loadgameButton.beginSlide(175, 335, GENERIC_SLIDE_SPEED); loadgameButton.pushable = false; loadgameButton.hittable = false; loadgameButton.softClick = function (){ buttons.orderAllElements("onScreenRemove"); buttons.getLastElement().expired = function (){ mother.beginSavedGame(); this.expired = null; }; this.softClick = null; }; } private function hasSavedGame():Boolean{ var _local1:SharedObject; var _local2:Array; _local1 = SharedObject.getLocal("areasData"); return (_local1.data.hasOwnProperty("scores")); } private function clearMenuButtons():void{ buttons.orderAllElements("onScreenRemove"); playButton = null; newgameButton = null; levelSelectButton = null; loadgameButton = null; helpButton = null; settingsButton = null; creditsButton = null; } private function createPlayButton(_arg1:Boolean=false):void{ var dry = _arg1; playButton = CircleButton.create(buttons, mother); if (dry){ playButton.setup(150, 275, 40, "play"); } else { playButton.setup((sizeX / 2), (sizeY / 2), 40, "play"); playButton.beginSlide(150, 275, GENERIC_SLIDE_SPEED); }; playButton.setBorders(0, 0, sizeX, sizeY); playButton.hittable = true; if (!dry){ playButton.stopped = function (){ createHelpButton(); this.stopped = null; }; }; playButton.softClick = function (){ if (hasSavedGame()){ togglePlayOptions(); } else { buttons.getLastElement().expired = function (){ mother.beginNewGame(); this.expired = null; }; buttons.orderAllElements("onScreenRemove"); }; }; } private function showCreditsScreen():void{ buttons.setElementsProp("enabled", false); creditsScreen = new CreditsScreen(); this.addChild(creditsScreen); creditsScreen.mother = mother; creditsScreen.init(sizeX, sizeY); creditsScreen.x = (sizeX / 2); creditsScreen.y = (sizeY / 2); creditsScreen.expired = function (){ buttons.setElementsProp("enabled", true); killCreditsScreen(); }; } private function toMenu():void{ createAllButtons(); } public function setMother(_arg1:MotherOfAll){ mother = _arg1; } private function stopHelpButtonPushyness():void{ playButton.whileMouseOver = null; playButton.mouseOver = null; playButton.impact = null; helpButton.mouseOver = null; } private function toLevelSelection():void{ buttons.setElementsProp("enabled", false); clearMenuButtons(); initLevelSelectionButtonsCreation(); createBackButton(); } private function seedLevelButtonsCreationList():void{ var _local1:SharedObject; var _local2:int; var _local3:Rectangle; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:Array; var _local9:ButtonCreationListEntry; var _local10:Number; _local1 = SharedObject.getLocal("areasData"); _local2 = (_local1.data.scores.length + 1); _local3 = new Rectangle(30, 30, (sizeX - 60), (22 * 13)); _local4 = Math.ceil(((_local2 + 1) / 10)); _local7 = 1; _local8 = []; if (_local2 > Game.END_LEVEL){ _local2 = Game.END_LEVEL; }; _local5 = 0; while (_local5 < (_local4 - 1)) { _local6 = 0; while (_local6 < 10) { _local9 = new ButtonCreationListEntry(); _local9.x = (_local3.left + (((_local6 + 0.5) * _local3.width) / 10)); _local9.y = (_local3.top + (((_local5 + 0.5) * _local3.height) / 6)); _local9.radius = 22; _local9.num = _local7; _local8.push(_local9); _local7++; _local6++; }; _local5++; }; _local6 = 0; while (_local6 < (_local2 % 10)) { _local9 = new ButtonCreationListEntry(); _local9.x = (_local3.left + (((_local6 + 0.5) * _local3.width) / 10)); _local9.y = (_local3.top + (((_local5 + 0.5) * _local3.height) / 6)); _local9.radius = 22; _local9.num = _local7; _local8.push(_local9); _local7++; _local6++; }; _local9.radius = 25; _local6 = _local8.length; buttonCreationList = []; _local5 = 0; while (_local5 < _local6) { _local9 = _local8.splice(int((Math.random() * _local8.length)), 1)[0]; buttonCreationList.push(_local9); _local5++; }; } private function removeNextLevelButton():void{ var _local1:CircleButton; var _local2:FrameTimer; _local1 = levelButtons.getFirstElement(); if (_local1){ _local1.onScreenRemove(); _local2 = new FrameTimer(2, removeNextLevelButton); }; } private function createNewgameButton():void{ newgameButton = CircleButton.create(buttons, mother); newgameButton.setup(playButton.x, playButton.y, 20, "new_game"); newgameButton.popup(); newgameButton.beginSlide(175, 215, GENERIC_SLIDE_SPEED); newgameButton.pushable = false; newgameButton.hittable = false; newgameButton.softClick = function (){ buttons.orderAllElements("onScreenRemove"); buttons.getLastElement().expired = function (){ mother.beginNewGame(); this.expired = null; }; this.softClick = null; }; } private function createCreditsButton(_arg1:Boolean=false):void{ var dry = _arg1; creditsButton = CircleButton.create(buttons, mother); if (dry){ creditsButton.setup(500, 350, 30, "credits"); } else { creditsButton.setup(helpButton.x, helpButton.y, 30, "credits"); creditsButton.beginSlide(500, 350, GENERIC_SLIDE_SPEED); }; creditsButton.setBorders(0, 0, sizeX, sizeY); creditsButton.hittable = false; creditsButton.stopped = function (){ creditsButton.hittable = true; creditsButton.pushable = true; creditsButton.stopped = null; }; creditsButton.softClick = function (){ showCreditsScreen(); }; } public function run():void{ buttons.run(); if (demoGame){ demoGame.runAsDemo(); } else { if (creditsScreen){ creditsScreen.run(); } else { levelButtons.run(); overlay.run(); hitTestButtons(); }; }; } public function MainManu(){ } private function togglePlayOptions():void{ if (!newgameButton){ showPlayOptionsButtons(); } else { hidePlayOptionsButtons(); }; } private function initLevelSelectionButtonsCreation():void{ seedLevelButtonsCreationList(); createNextLevelButton(); } private function killCreditsScreen():void{ this.removeChild(creditsScreen); creditsScreen = null; } private function createHelpButton(_arg1:Boolean=false):void{ var dry = _arg1; helpButton = CircleButton.create(buttons, mother); if (dry){ helpButton.setup(400, 275, 40, "#?"); } else { helpButton.setup(playButton.x, playButton.y, 40, "#?"); helpButton.beginSlide(400, 275, GENERIC_SLIDE_SPEED); }; helpButton.setBorders(0, 0, sizeX, sizeY); helpButton.softClick = function (){ beginDemo(); }; if (!dry){ helpButton.stopped = function (){ createCreditsButton(); this.stopped = null; if (!getHelpReadStatus()){ setHelpButtonPushyness(); }; }; }; } } }//package
Section 63
//MegaBall (MegaBall) package { class MegaBall extends FieldObject { public var damage:Number; private var desiredRadius:Number; function MegaBall():void{ } private function setSpeeds(_arg1:Number):void{ XS = (_arg1 * Math.cos((rotation / R2D))); YS = (_arg1 * Math.sin((rotation / R2D))); } override public function init():void{ super.init(); drawCircle(50, 0, 0xFFFFFF); drawCircle(48, 0, 0xFFFFFF); drawCircle(46, 0, 0xFFFFFF); rotation = (Math.random() * 360); setSpeeds(15); active = true; setRadius((45 + (Math.random() * 10))); forceRadius(0); damage = (25 + (Math.random() * 50)); } private function createHitGoo(_arg1:Evil):void{ var _local2:Goo; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:uint; var _local7:uint; var _local8:uint; _local5 = Math.atan2((_arg1.y - y), (_arg1.x - x)); _local6 = Math.sqrt(((XS * XS) + (YS * YS))); _local7 = Math.min(20, (radius / 2)); _local3 = (x + ((radius * Math.cos(_local5)) * 2)); _local4 = (y + ((radius * Math.sin(_local5)) * 2)); _local8 = 0; while (_local8 < _local7) { _local2 = field.createOO("goo", "underlay"); _local2.setup(_local3, _local4, ((_local6 + (Math.random() * _local6)) / 5), ((_local5 + 90) + (Math.random() * 180))); _local2.setFade(0); _local2.setShrink(0.92); _local2.setSlowdown(0.92); _local2.draw(8, (radius * 0.9), 2, 0xFFFFFF, 0xFFFFFF, 1); _local8++; }; } private function createSpark(){ var _local1:Number; var _local2:Spark; var _local3:Number; var _local4:Number; _local1 = (((rotation + 90) + (Math.random() * 180)) / R2D); _local2 = field.createOO("spark", "underlay"); _local3 = (x + (radius * Math.cos(_local1))); _local4 = (y + (radius * Math.sin(_local1))); _local2.setup(_local3, _local4, (3 + (Math.random() * 5)), 3, _local1, 0.05); } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=75):void{ x = _arg1; y = _arg2; rotation = _arg3; damage = ((_arg4 + (Math.random() * 30)) - 15); setSpeeds(15); } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function hitTestEvils(){ var _local1:Array; var _local2:Function; var _local3:Evil; _local1 = field.evils.L; _local2 = field.contact; for each (_local3 in _local1) { if (_local3.active){ if (_local2(this, _local3)){ hitEvil(_local3); }; }; }; } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 5))); move(); if (!onField()){ bounceOff(field, true); }; if (active){ if (Math.random() < 0.5){ createSpark(); }; hitTestEvils(); if (desiredRadius <= 10){ active = false; setRadius(0); }; } else { if (radius < 1){ kill(); }; }; } public function hitEvil(_arg1:Evil):void{ bounceOff(_arg1); createHitGoo(_arg1); _arg1.hitMegaBall(this); desiredRadius = (desiredRadius - 1.25); } } }//package
Section 64
//Mine (Mine) package { import flash.display.*; class Mine extends SpriteFieldObject { private var power:Number; private var fuse:uint; private var phase:uint; private var flasher:Shape; private var player:Player; private static const MAX_DIST:Number = 100; private static const MIN_DIST:Number = 50; private static const THRESHOLD_DIST:Number = 200; override public function init():void{ super.init(); active = true; draw(); player = field.player; phase = 1; cacheAsBitmap = true; } private function draw():void{ drawCircle(50, 0, 0xFFFFFF); flasher = new Shape(); addChild(flasher); flasher.graphics.beginFill(0xFFFFFF); flasher.graphics.drawCircle(0, 0, 25); flasher.graphics.endFill(); } override public function kill():void{ player = null; super.kill(); } private function distFromPlayer():Number{ var _local1:Number; var _local2:Number; _local1 = (player.x - x); _local2 = (player.y - y); return (((_local1 * _local1) + (_local2 * _local2))); } private function jumpToPlayer():void{ var _local1:Number; var _local2:Number; _local1 = ((Math.random() * PI) * 2); _local2 = (MIN_DIST + (Math.random() * (MAX_DIST - MIN_DIST))); x = (player.x + (_local2 * Math.cos(_local1))); y = (player.y + (_local2 * Math.sin(_local1))); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number):void{ x = _arg1; y = _arg2; polarPush(((Math.random() * PI) * 2), (10 + (Math.random() * 10))); power = _arg3; setRadius((3 + (power / 2))); } public function run():void{ if (active){ switch (phase){ case 1: move(); slowDown(0.8); if (((XS * XS) + (YS * YS)) <= 0.5){ phase = 2; }; break; case 2: if (distFromPlayer() >= (THRESHOLD_DIST * THRESHOLD_DIST)){ jumpToPlayer(); }; hitCheckWithEvils(hitEvil); break; case 3: flasher.visible = (flasher.visible) ? false : true; if (fuse <= 0){ explode(); } else { fuse--; }; break; }; }; } private function hitEvil():void{ cacheAsBitmap = false; explode(); } private function explode():void{ var _local1:Explosion; _local1 = field.createOO("explosion", "overlay"); _local1.setup(x, y, (((50 + (power * 17)) + (Math.random() * 50)) - 25), 30, 5); _local1.expand(1); kill(); } } }//package
Section 65
//Minimap (Minimap) package { import flash.display.*; public class Minimap extends Sprite { private var G:Graphics; private var dots:Shape; private var radius:Number; private var DR:Number; private var ms:Shape; private var field:Field; public function link(_arg1:Field){ field = _arg1; } public function init(){ dots = new Shape(); ms = new Shape(); this.addChild(dots); this.addChild(ms); this.graphics.beginFill(0, 0.5); this.graphics.drawCircle(0, 0, 50); this.graphics.endFill(); ms.graphics.beginFill(0xFF00FF); ms.graphics.drawCircle(0, 0, 50); ms.graphics.endFill(); G = dots.graphics; dots.mask = ms; setRadius(50); } private function drawDotsFor(_arg1:Array, _arg2:Number=1){ var _local3:String; var _local4:Object; G.lineStyle(); for (_local3 in _arg1) { _local4 = _arg1[_local3]; if (_local4.active){ G.beginFill(0xFFFFFF, _arg2); G.drawCircle((_local4.x * DR), (_local4.y * DR), (_local4.radius * DR)); G.endFill(); }; }; } public function kill():void{ removeChild(ms); field = null; } private function drawCirclesFor(_arg1:Array){ var _local2:String; var _local3:Object; for (_local2 in _arg1) { _local3 = _arg1[_local2]; if (_local3.active){ G.lineStyle(0, 0xFFFFFF, _local3.alpha); G.drawCircle((_local3.x * DR), (_local3.y * DR), (_local3.radius * DR)); }; }; } public function run(){ updateDisplay(); } private function updateDisplay(){ var _local1:String; var _local2:Object; var _local3:Array; _local3 = field.evils.L; G.clear(); G.lineStyle(0, 0xFFFFFF); G.drawCircle((field.player.x * DR), (field.player.y * DR), (field.player.radius * DR)); G.lineStyle(); drawDotsFor(field.evils.L, 0.2); drawCirclesFor(field.areas.L); drawCirclesFor(field.bullets.L); } public function setRadius(_arg1:Number){ radius = _arg1; scaleX = (radius / 50); scaleY = (radius / 50); DR = ((1 / field.radius) * this.radius); } } }//package
Section 66
//MotherOfAll (MotherOfAll) package { import flash.events.*; import flash.display.*; import com.kongregate.as3.client.*; import com.kongregate.as3.client.events.*; import flash.system.*; import flash.ui.*; import flash.net.*; public class MotherOfAll extends Sprite { public var Qcontrol:QualityAdjuster; public var pointer:Pointer; private var sizeX:Number; private var phase:uint; private var sizeY:Number; public var mainMenu:MainMenu; public var running:Boolean; public var bgMusic:BGMusic; public var game:Game; public function clearSavedData():void{ var _local1:SharedObject; _local1 = SharedObject.getLocal("areasData"); _local1.clear(); Console.trace("saved data cleared."); } private function phraseNum(_arg1:int, _arg2:uint):String{ var _local3:String; var _local4:int; var _local5:int; _local3 = String(_arg1).slice(0, -(_arg2)); _local5 = _local3.length; _local4 = (_local5 - 4); while (_local4 >= 0) { _local3 = ((_local3.slice(0, (_local4 + 1)) + ",") + _local3.slice((_local4 + 1))); _local4 = (_local4 - 3); }; return (_local3); } private function createGame():void{ game = new Game(); this.addChildAt(game, 0); game.setMother(this); game.init(sizeX, sizeY); } public function init(_arg1:Number, _arg2:Number){ var _local3:KongregateAPI; Console.create(stage); Console.ref.addEventListener("input", handleConsoleInput); LevelEditor.create(this); LevelData.seed(); this.addEventListener(ErrorEvent.ERROR, handleASyncError, false, 0, true); running = true; sizeX = _arg1; sizeY = _arg2; phase = 1; createPointer(); Qcontrol = new QualityAdjuster(); Qcontrol.stage = stage; Qcontrol.quality = 3; bgMusic = new BGMusic(); bgMusic.init(); bgMusic.loadVol(); bgMusic.stop(); createMainMenu(); if (Global.kong){ _local3 = new KongregateAPI(); addChild(_local3); _local3.addEventListener(KongregateEvent.COMPLETE, submitAllScores); }; } private function handleConsoleInput(_arg1:TextEvent):void{ var txt:String; var leftVal:String; var rightVal:String; var path1:Path; var path2:Path; var paramList:Array; var i:int; var e = _arg1; txt = e.text; switch (txt.toLowerCase()){ case "halt": Console.trace("└halting."); halt(); break; case "resume": Console.trace("└resuming."); resume(); break; case "yea?": Console.trace("└yea!"); break; default: var _local3 = txt.indexOf("="); i = _local3; if (_local3 > 0){ leftVal = txt.slice(0, i); rightVal = txt.slice((i + 1)); try { path1 = new Path(this, leftVal); path2 = new Path(this, rightVal); rightVal = path2.value; path1.value = path2.value; } catch(e:ReferenceError) { Console.trace("error resolving path:"); Console.trace(e.getStackTrace()); } catch(e:TypeError) { Console.trace("error assigning value:"); Console.trace(e.getStackTrace()); } catch(e:Error) { Console.trace("some strange kind of error:"); Console.trace(e.getStackTrace()); }; Console.trace(((("└" + leftVal) + ":") + rightVal)); } else { try { path1 = new Path(this, txt); txt = path1.value; } catch(e:ReferenceError) { Console.trace("error resolving path:"); Console.trace(e.getStackTrace()); } catch(e:TypeError) { Console.trace("error retrieving value:"); Console.trace(e.getStackTrace()); } catch(e:Error) { Console.trace("some strange kind of error:"); Console.trace(e.getStackTrace()); }; Console.trace(("└" + txt)); }; break; }; } private function handleASyncError(_arg1:Error):void{ halt(); Console.trace(_arg1.getStackTrace()); Console.trace("YARRRR! To yar stations, man! A-sync Error on broadside! Sneaky little basterd, she is!"); Console.show(); } public function beginLevelNum(_arg1:int):void{ createGame(); game.loadGame(_arg1); phase = 2; } public function resume():void{ Mouse.hide(); Console.ref.visible = false; running = true; Console.trace("YARRR! Raise the anchor, man! We be sailin' on, to the unknown!!"); } public function gotoMainMenu():void{ bgMusic.fadeToStop(); createMainMenu(); phase = 1; } public function halt():void{ running = false; Mouse.show(); } public function objCount(_arg1:DisplayObjectContainer):int{ var _local2:int; var _local3:int; var _local4:int; var _local5:DisplayObject; _local2 = 0; _local4 = _arg1.numChildren; if (_local4 <= 0){ return (0); }; _local3 = 0; while (_local3 < _local4) { _local5 = _arg1.getChildAt(_local3); _local2++; if ((_local5 is DisplayObjectContainer)){ _local2 = (_local2 + objCount((_local5 as DisplayObjectContainer))); }; _local3++; }; return (_local2); } public function removeMainMenu():void{ mainMenu.kill(); this.removeChild(mainMenu); mainMenu = null; } public function seedSavedData(_arg1:int=75):void{ var _local2:SharedObject; var _local3:Array; var _local4:int; _local2 = SharedObject.getLocal("areasData"); _local3 = []; _local4 = 0; while (_local4 < _arg1) { _local3.push((int((Math.random() * 100)) + 1)); _local4++; }; _local2.data.scores = _local3; _local2.flush(); Console.trace("saved data seeded."); } public function run(_arg1){ var p = _arg1; if (running){ try { pointer.run(); bgMusic.run(); Qcontrol.run(); switch (phase){ case 1: if (game){ removeGame(); }; if (!mainMenu){ createMainMenu(); }; mainMenu.run(); break; case 2: if (mainMenu){ removeMainMenu(); }; if (!game){ createGame(); }; game.run(); break; }; } catch(e:Error) { halt(); Console.trace("YARRR! Lower the anchor, man! Error be here! Great, big error!"); Console.trace(e.getStackTrace()); Console.trace("YARRR! Type \"resume()\" and press ENTER to sail on, if ya dare!"); Console.show(); }; }; } public function removeGame():void{ game.kill(); this.removeChild(game); game = null; } private function createPointer(){ pointer = new Pointer(); this.addChildAt(pointer, 0); pointer.setMother(this); pointer.init(); } public function beginSavedGame():void{ createGame(); game.loadGame(); phase = 2; } public function reportStatus(_arg1=null):void{ Console.trace(((((("status - totalMemory:" + phraseNum(System.totalMemory, 3)) + "kb | objCount:") + objCount(this)) + " | avgRate:") + Qcontrol.getAverageRate().toFixed(1))); } public function beginNewGame():void{ createGame(); game.startLevel(1); phase = 2; } private function createMainMenu(){ mainMenu = new MainMenu(); this.addChildAt(mainMenu, 0); mainMenu.setMother(this); mainMenu.init(550, 550); } private function submitAllScores(_arg1:KongregateEvent=null):void{ var so:SharedObject; var scores:Array; var level:int; var score:int; var totalScore:int; var submission:Array; var i:int; var leng:int; var e = _arg1; try { Console.trace("begin main.submitAllScores()..."); Console.trace("get shared object..."); so = SharedObject.getLocal("areasData"); Console.trace("shared object acquired. getting scores array..."); scores = so.data.scores; Console.trace("scores array acquired. initing last few vars..."); totalScore = 0; submission = []; Console.trace(("inig done. scores: " + scores)); if (((scores) && ((scores.length > 0)))){ leng = scores.length; Console.trace("looping over scores..."); i = 0; while (i < leng) { level = (i + 1); score = scores[i]; totalScore = (totalScore + score); if ((level % 10) == 0){ submission.push({name:(("level" + level) + "_score"), value:score}); submission.push({name:(("level" + level) + "_totalScore"), value:totalScore}); }; if (level == Game.END_LEVEL){ submission.push({name:(("level" + level) + "_score"), value:score}); level = (level - 1); }; i = (i + 1); }; Console.trace(("loop finished. total score: " + totalScore)); if (level >= (Game.END_LEVEL - 1)){ submission.push({name:"gameCompleted", value:1}); }; submission.push({name:"highestLevelFinished", value:level}); Console.trace(("submission array ready: " + submission)); Console.trace("submitting stats..."); KongregateAPI.getInstance().stats.submitArray(submission); Console.trace("stats sent. submitting score..."); KongregateAPI.getInstance().scores.submit(totalScore); Console.trace("score sent."); } else { Console.trace("score array is empty, no submission needed."); }; Console.trace("main.submitAllScores finished."); } catch(e:Error) { halt(); Console.trace("YARRR! Lower the anchor, man! Error be here! Scores and stats cannot set sail!"); Console.trace(e.getStackTrace()); Console.trace("YARRR! Type \"resume()\" and press ENTER to sail on, if ya dare!"); Console.show(); }; } } }//package
Section 67
//NumericInput (NumericInput) package { import flash.events.*; import flash.display.*; import flash.text.*; public class NumericInput extends Sprite { private var _enabled:Boolean; public var targetObject; private var BG:Shape; public var varName:String; private var LB:TextField; private var updating:Boolean; private var TF:TextField; public var changed:Function; public function init():void{ _enabled = true; updating = false; } private function focusIn(_arg1:Event):void{ updating = false; } public function get enabled():Boolean{ return (TF.selectable); } public function draw(_arg1:Number, _arg2:Number, _arg3:Number):void{ if (TF){ removeChild(TF); TF = null; }; if (LB){ removeChild(LB); LB = null; }; if (BG){ removeChild(BG); BG = null; }; drawBG(_arg1, _arg2, _arg3); createText(_arg1, _arg2, _arg3); } private function createText(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:TextFormat; LB = new TextField(); _local4 = new TextFormat(); LB.wordWrap = false; LB.autoSize = TextFieldAutoSize.NONE; LB.selectable = false; LB.embedFonts = true; LB.textColor = 0; _local4.align = TextFormatAlign.LEFT; _local4.font = "LilyUPC"; _local4.size = _arg2; LB.width = (_arg1 - _arg3); LB.height = _arg2; LB.defaultTextFormat = _local4; this.addChild(LB); TF = new TextField(); _local4 = new TextFormat(); TF.type = TextFieldType.INPUT; TF.wordWrap = false; TF.autoSize = TextFieldAutoSize.NONE; TF.selectable = true; TF.embedFonts = true; TF.textColor = 0xFFFFFF; _local4.align = TextFormatAlign.LEFT; _local4.font = "LilyUPC"; _local4.size = _arg2; TF.width = _arg3; TF.height = _arg2; TF.defaultTextFormat = _local4; TF.x = (_arg1 - _arg3); this.addChild(TF); } private function focusOut(_arg1:Event):void{ updating = true; } private function _changed(_arg1:Event):void{ if ((targetObject[varName] is Array)){ targetObject[varName] = TF.text.split(","); } else { targetObject[varName] = Number(TF.text); }; if (Boolean(changed)){ changed(); }; } public function set enabled(_arg1:Boolean):void{ TF.selectable = _arg1; } private function drawBG(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Graphics; BG = new Shape(); _local4 = BG.graphics; _local4.lineStyle(3, 0xFFFFFF); _local4.drawRect(0, 0, _arg1, _arg2); _local4.lineStyle(); _local4.beginFill(0xFFFFFF); _local4.drawRect(0, 0, (_arg1 - _arg3), _arg2); _local4.endFill(); this.addChild(BG); } public function kill():void{ TF.removeEventListener("change", _changed); targetObject = null; removeChild(TF); TF = null; removeChild(LB); LB = null; removeChild(BG); BG = null; } public function run(_arg1:Event=null):void{ if (updating){ TF.text = targetObject[varName]; }; } public function disconnect():void{ TF.removeEventListener("change", _changed); TF.removeEventListener("focusIn", focusIn); TF.removeEventListener("focusOut", focusOut); targetObject = null; varName = ""; TF.text = ""; } public function setLabel(_arg1:String):void{ LB.text = _arg1; } public function connect(_arg1, _arg2:String):void{ var obj = _arg1; var vName = _arg2; enabled = true; targetObject = obj; varName = vName; TF.addEventListener("change", _changed, false, 0, true); TF.addEventListener("focusIn", focusIn, false, 0, true); TF.addEventListener("focusOut", focusOut, false, 0, true); try { TF.text = targetObject[varName]; } catch(e) { disconnect(); }; if (LB.text == ""){ LB.text = vName; }; } public static function create(_arg1:DisplayObjectContainer):NumericInput{ var _local2:NumericInput; _local2 = new (NumericInput); _local2.init(); _local2.draw(150, 30, 50); _arg1.addChild(_local2); return (_local2); } } }//package
Section 68
//Path (Path) package { import flash.utils.*; public class Path { private var _type:int; private var _propName:String; private var _target; private var _address:String; private var _base; private static const closeChars:String = ")]}"; public static const PRIMITIVE:int = 9; public static const BOOLEAN:int = 4; public static const NUMBER:int = 5; private static const stringChars:String = ""'"; public static const TOP_FUNC:int = 10; public static const FUNCTION:int = 1; public static const OTHER:int = -1; public static const STRING:int = 6; public static const PATH:int = 8; public static const CLASS:int = 7; private static const openChars:String = "([{"; public static const ARRAY:int = 2; public static const OBJECT:int = 3; public function Path(_arg1=null, _arg2:String=null){ if (_arg1){ resolve(_arg1, _arg2); }; } private function findNextChar(_arg1:String, _arg2:String):int{ var _local3:int; var _local4:String; var _local5:String; var _local6:int; var _local7:int; _local3 = 0; _local7 = _arg1.length; _local6 = 0; while (_local6 < _local7) { _local5 = _arg1.charAt(_local6); if (_local4){ if ((((_local5 == _local4)) && (!((_arg1.charAt((_local6 - 1)) == "\\"))))){ _local4 = null; }; } else { if ((((_local3 == 0)) && ((_local5 == _arg2)))){ if (((!((_local5 == "."))) || (isNaN(Number(_arg1.charAt((_local6 + 1))))))){ return (_local6); }; } else { if (openChars.indexOf(_local5) > -1){ _local3++; } else { if (closeChars.indexOf(_local5) > -1){ _local3--; } else { if (stringChars.indexOf(_local5) > -1){ _local4 = _local5; }; }; }; }; }; _local6++; }; return (-1); } private function resolveParam(_arg1, _arg2:String){ var _local3:int; var _local4:Path; _arg2 = _arg2.replace(" ", ""); if (_arg2 == "this"){ return (_base); }; _local3 = getTagType(_arg2); switch (_local3){ case BOOLEAN: return (Boolean(_arg2)); case NUMBER: return (Number(_arg2)); case FUNCTION: return (resolveFunction(_arg1, _arg2)); case ARRAY: return (resolveArray(_arg1, _arg2)); case OBJECT: return (resolveObject(_arg1, _arg2)); case STRING: return (_arg2.slice(1, -1)); case CLASS: return ((getDefinitionByName(_arg2) as Class)); case PATH: _local4 = new Path(); _local4.resolve(_arg1, _arg2); return (_local4.value); default: return (_arg1[_arg2]); }; } private function resolveObject(_arg1, _arg2:String):Object{ var _local3:Object; var _local4:String; var _local5:String; var _local6:String; var _local7:int; _arg2 = _arg2.slice(1, -1); _local3 = new Object(); _local7 = 0; if (_arg2.length > 0){ while (_local7 > -1) { _local7 = findNextChar(_arg2, ","); if (_local7 == -1){ _local4 = _arg2; _arg2 = ""; } else { _local4 = _arg2.slice(0, _local7); _arg2 = _arg2.slice((_local7 + 1)); }; _local5 = _local4.slice(0, _local4.indexOf(":")); _local6 = _local4.slice((_local4.indexOf(":") + 1)); _local3[_local5] = resolveParam(_arg1, _local6); }; }; return (_local3); } private function resolveArray(_arg1, _arg2:String){ var _local3:String; var _local4:String; if (_arg2.charAt(0) == "["){ return (newArray(_arg1, _arg2)); }; _local3 = _arg2.slice(0, _arg2.indexOf("[")); _local4 = _arg2.slice((_arg2.indexOf("[") + 1), _arg2.lastIndexOf("]")); return (_arg1[_local3][_local4]); } public function get propName():String{ return (_propName); } public function get target(){ return (_target); } private function getPrimitiveType(_arg1:String):int{ var i:int; var strLen:int; var classRef:*; var str = _arg1; strLen = str.length; try { classRef = getDefinitionByName(str); if (getQualifiedClassName(classRef).indexOf("builtin.as") > -1){ return (FUNCTION); }; return (CLASS); } catch(e:ReferenceError) { if (str.charAt(0) == "{"){ return (OBJECT); }; i = 0; while (i < strLen) { switch (str.charAt(i)){ case "(": return (FUNCTION); case "[": return (ARRAY); }; i = (i + 1); }; if ((((str == "true")) || ((str == "false")))){ return (PRIMITIVE); }; if (!isNaN(Number(str))){ return (PRIMITIVE); }; if ((((str.charAt(0) == "\"")) || ((str.charAt(0) == "'")))){ return (PRIMITIVE); }; }; return (OTHER); } public function get base(){ return (_base); } public function set value(_arg1):void{ _target[_propName] = _arg1; } private function resolveFunction(_arg1, _arg2:String){ var funcName:String; var classRef:*; var globFunc:Function; var paramsString:String; var paramsArray:Array; var par:String; var i:int; var obj = _arg1; var str = _arg2; funcName = str.slice(0, str.indexOf("(")); paramsString = str.slice((str.indexOf("(") + 1), str.lastIndexOf(")")); paramsArray = []; i = 0; try { classRef = getDefinitionByName(funcName); if (getQualifiedClassName(classRef).indexOf("builtin.as") > -1){ globFunc = (classRef as Function); }; } catch(e:ReferenceError) { globFunc = null; }; if (paramsString.length > 0){ while (i > -1) { i = findNextChar(paramsString, ","); if (i == -1){ par = paramsString; paramsString = ""; } else { par = paramsString.slice(0, i); paramsString = paramsString.slice((i + 1)); }; paramsArray.push(resolveParam(obj, par)); }; if (Boolean(globFunc)){ return (globFunc.apply(null, paramsArray)); }; return (obj[funcName].apply(obj, paramsArray)); } else { if (Boolean(globFunc)){ return (globFunc()); }; }; return (!NULL!); } private function newArray(_arg1, _arg2:String):Array{ var _local3:Array; var _local4:String; var _local5:int; _arg2 = _arg2.slice(1, -1); _local3 = []; _local5 = 0; if (_arg2.length > 0){ while (_local5 > -1) { _local5 = findNextChar(_arg2, ","); if (_local5 == -1){ _local4 = _arg2.slice(0); _arg2 = ""; } else { _local4 = _arg2.slice(0, _local5); _arg2 = _arg2.slice((_local5 + 1)); }; _local3.push(resolveParam(_arg1, _local4)); }; }; return (_local3); } public function resolve(_arg1, _arg2:String):void{ _base = _arg1; _resolvePath(_arg1, _arg2); } public function get value(){ if (_propName == "this"){ return (_base); }; switch (_type){ case FUNCTION: return (resolveFunction(_target, _propName)); case ARRAY: return (resolveArray(_target, _propName)); case CLASS: return (getDefinitionByName(_propName)); case OBJECT: return (resolveObject(_target, _propName)); case PRIMITIVE: return (_propName); default: return (_target[_propName]); }; } public function get address():String{ return (_address); } private function _resolvePath(_arg1, _arg2:String):void{ var _local3:int; _local3 = findNextChar(_arg2, "."); if (_local3 > -1){ _arg1 = resolveParam(_arg1, _arg2.slice(0, _local3)); _resolvePath(_arg1, _arg2.slice((_local3 + 1))); } else { _target = _arg1; _propName = _arg2; _type = getPrimitiveType(_propName); }; } public function get type():int{ return (_type); } public function execute(){ return (resolveFunction(_target, _propName)); } private function getTagType(_arg1:String):int{ var i:int; var strLen:int; var str = _arg1; strLen = str.length; try { if (getDefinitionByName(str)){ return (CLASS); }; } catch(e:ReferenceError) { if ((((str == "true")) || ((str == "false")))){ return (BOOLEAN); } else { if (!isNaN(Number(str))){ return (NUMBER); } else { if (str.charAt(0) == "\""){ return (STRING); } else { if (str.charAt(0) == "{"){ return (OBJECT); } else { if (findNextChar(str, ".") > -1){ return (PATH); } else { i = 0; while (i < strLen) { switch (str.charAt(i)){ case "(": return (FUNCTION); case "[": return (ARRAY); }; i = (i + 1); }; }; }; }; }; }; }; return (OTHER); } public static function getValue(_arg1, _arg2:String){ var _local3:Path; _local3 = new Path(_arg1, _arg2); return (_local3.value); } } }//package
Section 69
//PauseScreen (PauseScreen) package { import flash.display.*; class PauseScreen extends Sprite { private var mainMenuButton:CircleButton; public var expired:Function; public var demoMode:Boolean; private var restartButton:CircleButton; private var pointer:Pointer; private var BG:Shape; private var areYouSure2:CircleButton; private var areYouSure1:CircleButton; public var sizeX:Number; private var phase:int; public var sizeY:Number; private var restarting:Boolean; private var buttons:Container; public var radius:Number; private var unpauseButton:CircleButton; private var finalRadius:Number; private var area:Area; private var volumeSlider:Slider; public var ready:Function; private var areYouSureNo:CircleButton; public var mother:MotherOfAll; private var pointerAdjusted:Boolean; public var game:Game; private var areYouSureYes:CircleButton; private static const SHRINK_PHASE:int = 3; private static const ARE_YOU_SURE_1_ANGLE:Number = -90; private static const ARE_YOU_SURE_2_ANGLE:Number = -90; private static const ARE_YOU_SURE_SLOWDOWN:Number = 0.7; private static const GROW_PHASE:int = 1; private static const MAIN_PHASE:int = 2; private static const ARE_YOU_SURE_B_ANGLE:Number = -90; private static const ARE_YOU_SURE_PUSH:Number = 23; private static const GROWER_PHASE:int = 4; private function showAreYouSureButtons():void{ createAreYouSure1Button(); } private function createUnpauseButton():void{ unpauseButton = CircleButton.create(buttons, mother); unpauseButton.setup(100, 175, 40, "unpause"); if (demoMode){ unpauseButton.dontEnable = true; } else { unpauseButton.softClick = function (){ unpause(); }; }; } public function init(_arg1:Number, _arg2:Number):void{ sizeX = _arg1; sizeY = _arg2; finalRadius = ((Math.min(sizeX, sizeY) - 20) / 2); pointer = mother.pointer; buttons = Container.create(this); enterGrowPhase(); } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } private function createMainMenuButton():void{ mainMenuButton = CircleButton.create(buttons, mother); mainMenuButton.setup(0, 210, 40, "go_to_main_menu"); if (demoMode){ mainMenuButton.dontEnable = true; } else { mainMenuButton.softClick = function (){ if (areYouSureYes){ hideAreYouSureButtons(); } else { showAreYouSureButtons(); }; }; }; } public function restart():void{ if (!demoMode){ BGMusic.that.saveVol(); }; buttons.orderAllElements("onScreenRemove"); enterGrowerPhase(); restarting = true; } private function enterGrowPhase():void{ drawBG(); setRadius(0); pointer.homeOnObject(this); phase = GROW_PHASE; } private function goToMainMenu():void{ if (!demoMode){ BGMusic.that.saveVol(); }; buttons.orderAllElements("onScreenRemove"); enterGrowerPhase(); restarting = false; } private function createAreYouSure1Button():void{ areYouSure1 = CircleButton.create(buttons, mother); areYouSure1.setup(mainMenuButton.x, mainMenuButton.y, 30, "#!"); buttons.setChildIndex(areYouSure1, buttons.getChildIndex(mainMenuButton)); areYouSure1.dontEnable = true; areYouSure1.popup(); areYouSure1.setSlowdownRate(ARE_YOU_SURE_SLOWDOWN); areYouSure1.polarPush(ARE_YOU_SURE_1_ANGLE, (ARE_YOU_SURE_PUSH - 5)); areYouSure1.stopped = function (){ createAreYouSure2Button(); this.stopped = null; }; } private function enterGrowerPhase():void{ pointerAdjusted = false; pointer.homeOnObject(this); finalRadius = ((Math.sqrt(((sizeX * sizeX) + (sizeY * sizeY))) / 2) + 20); phase = GROWER_PHASE; } private function hideAreYouSureButtons():void{ areYouSureYes.enabled = false; areYouSureNo.enabled = false; areYouSureYes.beginSlide(areYouSure2.x, areYouSure2.y, 4); areYouSureNo.beginSlide(areYouSure2.x, areYouSure2.y, 4); areYouSureYes.stopped = function (){ areYouSure2.beginSlide(areYouSure1.x, areYouSure1.y, 4); areYouSure2.stopped = function (){ areYouSure1.beginSlide(mainMenuButton.x, mainMenuButton.y, 4); areYouSure1.stopped = function (){ areYouSure1 = null; this.remove(); }; areYouSure2 = null; this.remove(); }; areYouSureNo.remove(); areYouSureYes = null; areYouSureNo = null; this.remove(); }; } private function createAreYouSureEndButtons():void{ areYouSureYes = CircleButton.create(buttons, mother); areYouSureNo = CircleButton.create(buttons, mother); areYouSureYes.setup(areYouSure2.x, areYouSure2.y, 20, "yes"); areYouSureNo.setup(areYouSure2.x, areYouSure2.y, 20, "no"); buttons.setChildIndex(areYouSureYes, buttons.getChildIndex(areYouSure2)); buttons.setChildIndex(areYouSureNo, buttons.getChildIndex(areYouSure2)); areYouSureYes.popup(); areYouSureNo.popup(); areYouSureYes.setSlowdownRate(ARE_YOU_SURE_SLOWDOWN); areYouSureNo.setSlowdownRate(ARE_YOU_SURE_SLOWDOWN); areYouSureYes.polarPush((ARE_YOU_SURE_B_ANGLE + 30), (ARE_YOU_SURE_PUSH - 5)); areYouSureNo.polarPush((ARE_YOU_SURE_B_ANGLE - 30), (ARE_YOU_SURE_PUSH - 5)); areYouSureYes.softClick = function (){ goToMainMenu(); }; areYouSureNo.softClick = function (){ hideAreYouSureButtons(); }; } public function unpause():void{ if (!demoMode){ BGMusic.that.saveVol(); BGMusic.that.fadeToPause(); }; buttons.orderAllElements("onScreenRemove"); enterShrinkPhase(); restarting = false; } public function kill():void{ clearAllButtons(); clearArea(); pointer.leaveTarget(this); removeChild(buttons); buttons = null; removeChild(BG); BG = null; mother = null; pointer = null; } private function enterMainPhase():void{ if (demoMode){ pointer.leaveTarget(this, false); } else { pointer.leaveTarget(this, true); }; if (demoMode){ pointer.switchToMenual(); }; setRadius(finalRadius); createVolumeSlider(); createUnpauseButton(); createRestartButton(); createMainMenuButton(); if (demoMode){ buttons.setElementsProp("enabled", false); volumeSlider.enabled = true; }; drawArea(); callEvent("ready"); phase = MAIN_PHASE; } private function createAreYouSure2Button():void{ areYouSure2 = CircleButton.create(buttons, mother); areYouSure2.setup(areYouSure1.x, areYouSure1.y, 30, "#?"); buttons.setChildIndex(areYouSure2, buttons.getChildIndex(areYouSure1)); areYouSure2.dontEnable = true; areYouSure2.popup(); areYouSure2.setSlowdownRate(ARE_YOU_SURE_SLOWDOWN); areYouSure2.polarPush(ARE_YOU_SURE_2_ANGLE, (ARE_YOU_SURE_PUSH - 5)); areYouSure2.stopped = function (){ createAreYouSureEndButtons(); this.stopped = null; }; } private function drawBG():void{ BG = new Shape(); this.addChildAt(BG, 0); BG.graphics.lineStyle(5, 0xFFFFFF, 1, false, "none"); BG.graphics.beginFill(0); BG.graphics.drawCircle(0, 0, 50); BG.graphics.endFill(); } private function createRestartButton():void{ restartButton = CircleButton.create(buttons, mother); restartButton.setup(-100, 175, 40, "back"); if (demoMode){ restartButton.dontEnable = true; } else { restartButton.softClick = function (){ restart(); }; }; } private function adjustVolume(_arg1:Number):void{ if (!demoMode){ BGMusic.that.play(2); BGMusic.that.volume = _arg1; }; } public function setRadius(_arg1:Number):void{ radius = _arg1; BG.scaleX = (_arg1 / 50); BG.scaleY = (_arg1 / 50); } public function run():void{ switch (phase){ case GROW_PHASE: radius = (radius + ((finalRadius - radius) / 4)); softSetRadius(pointer.radius); if ((finalRadius - pointer.radius) < 0.5){ setRadius(finalRadius); enterMainPhase(); }; break; case MAIN_PHASE: if (area.alpha < 1){ area.alpha = (area.alpha + 0.05); }; buttons.run(); break; case SHRINK_PHASE: if (area.alpha > 0){ area.alpha = (area.alpha - 0.07); }; buttons.run(); if (pointerAdjusted){ radius = (radius - (radius / 4)); softSetRadius(pointer.radius); if (pointer.radius < 0.5){ if (demoMode){ pointer.switchToMenual(); callEvent("expired"); }; game.unpause(); }; } else { if (Math.abs((radius - pointer.radius)) < 0.5){ pointerAdjusted = true; }; }; break; case GROWER_PHASE: if (area.alpha > 0){ area.alpha = (area.alpha - 0.07); }; buttons.run(); if (pointerAdjusted){ radius = (radius + ((finalRadius - radius) / 7)); softSetRadius(pointer.radius); if ((finalRadius - pointer.radius) < 0.5){ if (restarting){ phase = SHRINK_PHASE; game.restartFromPause(); } else { mother.gotoMainMenu(); }; }; } else { if (Math.abs((radius - pointer.radius)) < 0.5){ pointerAdjusted = true; }; }; break; }; } public function softSetRadius(_arg1:Number):void{ BG.scaleX = (_arg1 / 50); BG.scaleY = (_arg1 / 50); } private function createVolumeSlider():void{ volumeSlider = Slider.create(buttons, mother); volumeSlider.setup(0, 100, 10, 100, adjustVolume); volumeSlider.setButtonGraphic("music"); volumeSlider.setScale(0, 1); if (!demoMode){ volumeSlider.value = BGMusic.that.volume; }; } public function clearAllButtons():void{ unpauseButton = null; restartButton = null; mainMenuButton = null; areYouSure1 = null; areYouSure2 = null; areYouSureYes = null; areYouSureNo = null; buttons.removeAllElements(); } private function clearArea():void{ removeChild(area); area = null; } private function drawArea():void{ area = new Area(); addChildAt(area, 1); area.setRadius(150); area.x = 0; area.y = -85; area.alpha = 0; area.gotoAndStop(int(((Math.random() * area.totalFrames) + 1))); } private function enterShrinkPhase():void{ pointerAdjusted = false; pointer.homeOnObject(this); phase = SHRINK_PHASE; } } }//package
Section 70
//Pie (Pie) package { import flash.display.*; public class Pie extends Sprite { private var rightCover:Shape; private var maxVal:Number; private var val:Number; private var minVal:Number; private var rightHalf:Sprite; private var leftHalf:Sprite; private var leftCover:Shape; public function setScale(_arg1:Number, _arg2:Number):void{ minVal = _arg1; maxVal = _arg2; value = _arg1; } public function init():void{ drawPie(); } private function drawRect():Shape{ var _local1:Shape; var _local2:Graphics; _local1 = new Shape(); this.addChild(_local1); _local2 = _local1.graphics; _local2.beginFill(0xFFFFFF); _local2.drawRect(0, -50, 50, 100); _local2.endFill(); return (_local1); } private function drawHalfCircle(_arg1:Number=0xFFFFFF, _arg2:Number=0xFF00FF):Sprite{ var _local3:Sprite; var _local4:Shape; var _local5:Shape; var _local6:Graphics; _local3 = new Sprite(); this.addChild(_local3); _local4 = new Shape(); _local5 = drawRect(); _local3.addChild(_local4); _local3.addChild(_local5); _local6 = _local4.graphics; if (_arg2 != 0xFF00FF){ _local6.lineStyle(1, _arg2); }; _local6.beginFill(_arg1); _local6.drawCircle(0, 0, 50); _local6.endFill(); _local4.mask = _local5; return (_local3); } public function get value():Number{ return (val); } private function drawPie(){ leftHalf = drawHalfCircle(); rightHalf = drawHalfCircle(); rightHalf.rotation = 180; leftCover = drawRect(); rightCover = drawRect(); leftHalf.mask = leftCover; rightHalf.mask = rightCover; } public function setRadius(_arg1:Number):void{ scaleX = (_arg1 / 50); scaleY = scaleX; } public function set value(_arg1:Number):void{ var _local2:Number; val = _arg1; _local2 = (((_arg1 - minVal) / (maxVal - minVal)) * 360); leftCover.rotation = ((_local2)<0) ? 0 : (((_local2)>180) ? 180 : _local2 + 180); rightCover.rotation = ((_local2)<180) ? 180 : ((_local2)>360) ? 360 : _local2; rightCover.rotation = (rightCover.rotation + 180); } public static function create(_arg1:DisplayObjectContainer, _arg2:Number=0, _arg3:Number=100):Pie{ var _local4:Pie; _local4 = new (Pie); _arg1.addChild(_local4); _local4.init(); _local4.setScale(_arg2, _arg3); return (_local4); } } }//package
Section 71
//Player (Player) package { import flash.display.*; public class Player extends MovieClip { private var field:Field; private var bulletLifeMod:int; public var active:Boolean; private var YS:Number; private var distFromMouse:Number; public var guideActive:Boolean; public var demoMode:Boolean; private var burstSize:uint; private var bulletSpread:uint; private var speed:Number; private var shootTimer:uint; private var XS:Number; private var thrusting:Boolean; public var radius:Number; private var shootRate:uint; public var pie:Pie; public var bulletMode:Boolean; public var stopped:Function; private var weaponLevel:Number; private var timeStill:int; private var pauseTimer:int; public static const R2D:Number = 57.2957795130823; private static const HINT_TIME:int = 120; private static const MOVE_DIST:Number = 100; private static const PAUSE_DIST:Number = 12; public static const PI:Number = 3.14159265358979; private static const PAUSE_DELAY:uint = 30; override public function stop():void{ XS = 0; YS = 0; } private function safeMove():void{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; _local1 = (x + XS); _local2 = (y + YS); _local3 = (field.radius - this.radius); if (((_local1 * _local1) + (_local2 * _local2)) > (_local3 * _local3)){ _local4 = Math.atan2(YS, XS); _local5 = Math.atan2(_local2, _local1); _local6 = ((_local5 - _local4) % (PI * 2)); if (_local6 > PI){ _local6 = (_local6 - (PI * 2)); } else { if (_local6 < -(PI)){ _local6 = (_local6 + (PI * 2)); }; }; _local6 = (_local6 + (_local5 + PI)); _local7 = Math.sqrt(((XS * XS) + (YS * YS))); _local1 = (_local3 * Math.cos(_local5)); _local2 = (_local3 * Math.sin(_local5)); XS = (_local7 * Math.cos(_local6)); YS = (_local7 * Math.sin(_local6)); }; x = _local1; y = _local2; } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } private function mouseMoved(_arg1):void{ if (!demoMode){ pauseTimer = PAUSE_DELAY; }; } public function init(){ active = true; guideActive = false; x = 0; y = 0; speed = 200; XS = 0; YS = 0; setRadius(10); setupWeapon(1, 1, 1, 0); thrusting = false; bulletMode = false; pauseTimer = PAUSE_DELAY; pie = Pie.create(this, 0, 1); pie.setRadius(30); pie.rotation = 180; pie.x = -10; if (!demoMode){ field.addEventListener("mouseMove", mouseMoved, false, 0, true); }; } private function createHitGoo(_arg1:Evil):void{ var _local2:Goo; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:uint; var _local7:uint; var _local8:uint; _local5 = Math.atan2((_arg1.y - y), (_arg1.x - x)); _local6 = Math.sqrt(((XS * XS) + (YS * YS))); _local7 = Math.min(10, (_local6 / 5)); _local3 = (x + (radius * Math.cos(_local5))); _local4 = (y + (radius * Math.sin(_local5))); _local8 = 0; while (_local8 < _local7) { _local2 = field.createOO("goo", "ground"); _local2.setup(_local3, _local4, ((_local6 + (Math.random() * _local6)) / 5), ((_local5 + PI) + (((Math.random() * 120) - 60) / R2D))); _local2.setFade(0); _local2.setShrink(0.92); _local2.setSlowdown(0.95); _local2.draw(8, 5, 2, 0xFFFFFF, 0xFFFFFF, 1); _local2 = field.createOO("goo", "overlay"); _local2.setup(_local3, _local4, ((_local6 + (Math.random() * _local6)) / 5), (_local5 + (((Math.random() * 120) - 60) / R2D))); _local2.setFade(0); _local2.setShrink(0.92); _local2.setSlowdown(0.95); _local2.draw(8, 5, 2, 0, 0, 1); _local8++; }; } public function push(_arg1:Number, _arg2:Number):void{ XS = (XS + _arg1); YS = (YS + _arg2); } private function shoot():void{ var _local1:Bullet; var _local2:*; if (shootTimer == 0){ _local2 = 0; while (_local2 < burstSize) { _local1 = field.createBullet((x + (radius * Math.cos((rotation / R2D)))), (y + (radius * Math.sin((rotation / R2D)))), (((rotation + ((Math.random() * bulletSpread) * 2)) - bulletSpread) / R2D), weaponLevel); _local1.increaseLifeSpan(bulletLifeMod); _local2++; }; shootTimer = shootRate; }; } private function safeRelocate(_arg1:Number, _arg2:Number):void{ var _local3:Number; var _local4:Number; _local3 = (field.radius - this.radius); if (((_arg1 * _arg1) + (_arg2 * _arg2)) > (_local3 * _local3)){ _local4 = Math.atan2(_arg2, _arg1); _arg1 = (_local3 * Math.cos(_local4)); _arg2 = (_local3 * Math.sin(_local4)); }; x = _arg1; y = _arg2; } private function slowDown():void{ if (bulletMode){ XS = (XS * 0.88); YS = (YS * 0.88); } else { XS = (XS * 0.91); YS = (YS * 0.91); }; if (((XS * XS) + (YS * YS)) < 0.1){ XS = 0; YS = 0; bulletMode = false; }; } public function get moving():Boolean{ return ((((XS * XS) + (YS * YS)) > 0.5)); } private function shrinkEvil(_arg1):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local2 = (_arg1.x - this.x); _local3 = (_arg1.y - this.y); _local4 = Math.sqrt(((_local2 * _local2) + (_local3 * _local3))); _local5 = ((_local4 - this.radius) - 100); _arg1.shrink((_arg1.radius - _local5)); } public function setFather(_arg1:Field):void{ field = _arg1; } public function kill():void{ field.removeEventListener("mouseMove", mouseMoved); } public function setVar(_arg1:String, _arg2):void{ this[_arg1] = _arg2; } public function nextLoc():Object{ var _local1:Object; _local1 = {x:(x + XS), y:(y + YS)}; return (_local1); } private function turnToMouse(_arg1:Boolean):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; _local4 = Math.max(0, (distFromMouse - 75)); if (demoMode){ _local2 = ((field.xmouse - this.x) * field.scaleX); _local3 = ((field.ymouse - this.y) * field.scaleY); } else { _local2 = ((field.mouseX - this.x) * field.scaleX); _local3 = ((field.mouseY - this.y) * field.scaleY); }; _local5 = Math.atan2(_local3, _local2); if (_arg1){ XS = (XS + ((_local4 * Math.cos(_local5)) / speed)); YS = (YS + ((_local4 * Math.sin(_local5)) / speed)); thrusting = true; } else { if (thrusting){ callEvent("stopped"); thrusting = false; }; }; _local6 = ((rotation - (Math.atan2(_local3, _local2) * R2D)) % 360); if (_local6 > 180){ _local6 = (_local6 - 360); } else { if (_local6 < -180){ _local6 = (_local6 + 360); }; }; rotation = (rotation - (_local6 / 10)); } public function setRadius(_arg1:Number){ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } public function hitEvil(_arg1:Evil):void{ if (bulletMode){ shrinkEvil(_arg1); } else { createHitGoo(_arg1); bounceOff(_arg1); }; } public function run():void{ if (active){ updateDistFromMouse(); if (shootTimer > 0){ shootTimer--; }; if (distFromMouse > MOVE_DIST){ if (bulletMode){ turnToMouse(false); } else { turnToMouse(true); }; } else { turnToMouse(false); shoot(); if (((guideActive) && ((timeStill > HINT_TIME)))){ showGuide(); timeStill = 0; }; timeStill++; if (distFromMouse <= PAUSE_DIST){ pauseTimer--; if (pauseTimer <= 0){ field.pause(); pauseTimer = PAUSE_DELAY; }; } else { pauseTimer = PAUSE_DELAY; }; }; safeMove(); slowDown(); }; } private function updateDistFromMouse():void{ var _local1:Number; var _local2:Number; if (demoMode){ _local1 = (field.xmouse - this.x); _local2 = (field.ymouse - this.y); } else { _local1 = (field.mouseX - this.x); _local2 = (field.mouseY - this.y); }; distFromMouse = Math.sqrt(((_local1 * _local1) + (_local2 * _local2))); } public function bounceOff(_arg1):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; _local2 = Math.atan2(YS, XS); _local3 = Math.atan2((this.y - _arg1.y), (this.x - _arg1.x)); _local4 = ((_local3 - _local2) % (PI * 2)); if (_local4 > PI){ _local4 = (_local4 - (PI * 2)); } else { if (_local4 < -(PI)){ _local4 = (_local4 + (PI * 2)); }; }; _local4 = (_local4 + (_local3 + PI)); _local5 = Math.sqrt(((XS * XS) + (YS * YS))); _local6 = (this.radius + _arg1.nextRad); safeRelocate((_arg1.x + (_local6 * Math.cos(_local3))), (_arg1.y + (_local6 * Math.sin(_local3)))); XS = (_local5 * Math.cos(_local4)); YS = (_local5 * Math.sin(_local4)); } public function getVar(_arg1:String){ return (this[_arg1]); } public function setupWeapon(_arg1:Number, _arg2:uint=0, _arg3:uint=0, _arg4:uint=0, _arg5:int=0){ if (_arg1 > 0){ weaponLevel = _arg1; }; if (_arg2 > 0){ shootRate = _arg2; shootTimer = shootRate; }; if (_arg3 > 0){ burstSize = _arg3; }; if (_arg4 >= 0){ bulletSpread = _arg4; }; bulletLifeMod = _arg5; } private function showGuide():void{ var _local1:Guide; _local1 = field.createOO("guide", "overlay"); _local1.setup(x, y, radius); } } }//package
Section 72
//Plug (Plug) package { import flash.display.*; public class Plug extends SpriteFieldObject { private var moving:Boolean; private var speed:Number; private var target:Evil; private function acquireTarget(_arg1:Evil):void{ target = _arg1; stop(); moving = false; } override public function init():void{ super.init(); setRadius(8); moving = true; active = true; speed = 5; draw(); } public function expire():void{ active = false; } private function draw(){ var _local1:Shape; var _local2:Shape; _local1 = new Shape(); _local2 = new Shape(); addChild(_local1); addChild(_local2); _local1.graphics.lineStyle(1, 0xFFFFFF); _local1.graphics.beginFill(0); _local1.graphics.drawCircle(0, 0, 50); _local1.graphics.endFill(); _local1.graphics.moveTo(0, -50); _local1.graphics.lineTo(0, 50); _local2.graphics.beginFill(0); _local2.graphics.drawRect(-52, -52, 52, 104); _local2.graphics.endFill(); _local1.scaleX = 1.7; _local2.scaleX = 1.7; _local1.scaleY = _local1.scaleX; _local2.scaleY = _local2.scaleX; _local1.x = 60; _local2.x = 60; _local1.mask = _local2; graphics.lineStyle(1, 0xFFFFFF); drawLine(10, 30, 100, 0); drawLine(10, -30, 100, 0); } override public function kill():void{ target = null; super.kill(); } public function drawPower(_arg1:Number):Number{ if (((target) && (target.active))){ target.shrink(_arg1); return (_arg1); }; return (0); } private function distFrom(_arg1:Evil):Number{ var _local2:Number; var _local3:Number; _local2 = (_arg1.x - x); _local3 = (_arg1.y - y); return (((Math.sqrt(((_local2 * _local2) + (_local3 * _local3))) - radius) - _arg1.radius)); } private function bounceOffField(_arg1:Boolean=false):void{ var _local2:Number; _local2 = rotation; bounceOff(field, true); if (_arg1){ rotation = _local2; }; } override public function setRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 70); scaleY = (_arg1 / 70); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ x = _arg1; y = _arg2; rotation = (_arg3 * R2D); speed = _arg4; polarPush(_arg3, speed); } public function run():void{ if (active){ if (moving){ move(); if (!onField()){ bounceOffField(false); }; }; hitTestWithEvils(hitEvil); if (((target) && (target.active))){ stickToTarget(); } else { if (!moving){ polarPush((((rotation / R2D) + ((Math.random() * PI) / 30)) - (PI / 15)), speed); moving = true; }; }; } else { setRadius((radius * 0.9)); if (radius <= 0.1){ kill(); }; }; } private function stickToTarget():void{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local1 = (target.x - x); _local2 = (target.y - y); _local3 = Math.atan2(_local2, _local1); _local4 = (target.radius + this.radius); x = (target.x + (_local4 * Math.cos((_local3 - PI)))); y = (target.y + (_local4 * Math.sin((_local3 - PI)))); _local5 = ((rotation - (_local3 * R2D)) % 360); if (_local5 > 180){ _local5 = (_local5 - 360); } else { if (_local5 < -180){ _local5 = (_local5 + 360); }; }; rotation = (rotation - (_local5 / 10)); } private function hitEvil(_arg1:Evil):void{ if (((target) && (target.active))){ if (distFrom(_arg1) < distFrom(target)){ target = _arg1; }; } else { acquireTarget(_arg1); }; } } }//package
Section 73
//Pointer (Pointer) package { import flash.display.*; import flash.ui.*; import flash.geom.*; public class Pointer extends Sprite { private var phase:Number; private var target; public var radius:Number; private var mother:MotherOfAll; private var desiredRadius:Number; public function homeOnObject(_arg1):void{ target = _arg1; phase = 2; } public function init():void{ drawPointer(); Mouse.hide(); setRadius(5); forceRadius(0); phase = 1; this.mouseEnabled = false; } private function slideTo(_arg1:Number, _arg2:Number, _arg3:Number):void{ x = (x + ((_arg1 - x) / _arg3)); y = (y + ((_arg2 - y) / _arg3)); } private function distFromMouse():Number{ var _local1:Number; var _local2:Number; _local1 = (parent.mouseX - x); _local2 = (parent.mouseY - y); return (Math.sqrt(((_local1 * _local1) + (_local2 * _local2)))); } public function switchToAuto():void{ phase = 1; target = null; setRadius(5); } public function leaveTarget(_arg1, _arg2:Boolean=false):void{ if (((target) && ((target == _arg1)))){ if (_arg2){ setRadius((target.radius + 20)); phase = 3; } else { phase = 1; setRadius(5); if (alpha <= 1){ alpha = 1; }; }; }; } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } private function drawPointer(){ graphics.lineStyle(3, 0, 1, false, LineScaleMode.NONE); graphics.drawCircle(0, 0, 50); graphics.lineStyle(1, 0xFFFFFF, 1, false, LineScaleMode.NONE); graphics.drawCircle(0, 0, 50); } private function hideMouse(){ Mouse.hide(); } public function run(){ resize(4, 20); switch (phase){ case 1: slideTo(parent.mouseX, parent.mouseY, 2); break; case 2: slideToTarget(4); setRadius(target.radius); break; case 3: alpha = (alpha - 0.04); if (alpha <= 0.5){ phase = 4; setRadius(5); }; break; case 4: alpha = (alpha + 0.04); if (alpha >= 1){ phase = 1; }; slideTo(parent.mouseX, parent.mouseY, 4); break; case 5: break; }; } public function switchToMenual():void{ phase = 5; } public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function resize(_arg1:Number, _arg2:Number=15){ var _local3:Number; _local3 = ((desiredRadius - radius) / _arg1); if (_local3 > _arg2){ _local3 = _arg2; } else { if (_local3 < -(_arg2)){ _local3 = -(_arg2); }; }; forceRadius((radius + _local3)); } private function slideToTarget(_arg1:Number):void{ var _local2:Point; _local2 = new Point(target.x, target.y); _local2 = target.parent.localToGlobal(_local2); x = (x + ((_local2.x - x) / _arg1)); y = (y + ((_local2.y - y) / _arg1)); } public function setMother(_arg1:MotherOfAll):void{ mother = _arg1; } } }//package
Section 74
//QualityAdjuster (QualityAdjuster) package { import flash.display.*; import flash.utils.*; class QualityAdjuster { private var frameCount:int; private var timer:Timer; private var totalFrameCount:int; private var secs:int; public var stage:Stage; private static const HIGH_Q_THRESHOLD:int = 30; private static const MED_TO_LOW:int = 18; private static const HIGH_TO_MED:int = 29; private static const CHANGE_Q_DELAY:int = 10; private static const Qs:Array = ["LOW", "MEDIUM", "HIGH"]; private static const MED_Q_THRESHOLD:int = 20; private static const MED_TO_HIGH:int = 32; private static const LOW_TO_MED:int = 22; function QualityAdjuster(){ timer = new Timer(1000, 0); timer.addEventListener("timer", tick); timer.start(); frameCount = 0; totalFrameCount = 0; secs = 0; } public function set quality(_arg1:int):void{ stage.quality = Qs[(_arg1 - 1)]; } public function getAverageRate():Number{ return ((totalFrameCount / secs)); } public function run():void{ frameCount++; } private function tick(_arg1=null):void{ switch (quality){ case 1: if (frameCount >= LOW_TO_MED){ quality = 2; }; break; case 2: if (frameCount >= MED_TO_HIGH){ quality = 3; } else { if (frameCount <= MED_TO_LOW){ quality = 1; }; }; break; case 3: if (frameCount <= HIGH_TO_MED){ quality = 2; }; break; }; secs++; totalFrameCount = (totalFrameCount + frameCount); frameCount = 0; } public function get quality():int{ return ((Qs.indexOf(stage.quality) + 1)); } } }//package
Section 75
//ScenarioData (ScenarioData) package { import flash.events.*; import flash.net.*; public class ScenarioData { public var loaded:Function; private var type:String; private var _list:Array; public function ScenarioData(_arg1:String="", _arg2:Boolean=false):void{ _list = []; if (type != ""){ type = _arg1; init(type, _arg2); }; } private function getData():void{ var _local1:Array; var _local2:String; _local1 = []; switch (type){ case "-play": _local1.push("~fixTimer(25)"); _local1.push("timer(2)"); _local1.push("~createGraphic(<field.player.x>, <field.player.y>, 100, circle, 90)"); _local1.push("setPlayerDir(-60)"); _local1.push("setPlayerDir(150)"); _local1.push("aimPlayer(200, 100)"); _local1.push("timer(10)"); _local1.push("moveMouse(140, 70, 5)"); _local1.push("movePlayer(200, 100)"); _local1.push("timer(10)"); _local1.push("~createGraphic(<field.player.x>, <field.player.y>, 100, circle, 90)"); _local1.push("setPlayerDir(-90)"); _local1.push("setPlayerDir(-140)"); _local1.push("setPlayerDir(-180)"); _local1.push("timer(5)"); _local1.push("moveMouse(80, 100, 5)"); _local1.push("timer(10)"); _local1.push("movePlayer(-150, -80)"); _local1.push("movePlayer(-100, -50)"); _local1.push("timer(15)"); _local1.push("~createGraphic(<field.player.x>, <field.player.y>, 30, arrow_circle, 20)"); _local1.push("timer(15)"); _local1.push("moveMouse(<field.player.x>, <field.player.y>, 5)"); _local1.push("timer(18)"); _local1.push("moveMouse(0, 0, 3)"); _local1.push("timer(30)"); _local1.push("moveMouse(-30, 100, 5)"); _local1.push("moveMouse(25, 100, 5)"); _local1.push("timer(5)"); _local1.push("moveMouse(-100, 175, 5)"); _local1.push("moveMouse(0, 210, 5)"); _local1.push("moveMouse(100, 175, 5)"); _local1.push("timer(15)"); _local1.push("unpause();1:moveMouse(0, 0, 3)"); _local1.push("timer(5)"); _local1.push("createEvil(100, -50, 2);35:aimPlayer(100, -50)"); _local1.push("movePlayer(-20, 20);10:createEvil(<field.player.x>, <field.player.y>, 2);15:createEvil(-25, 70, 2)"); _local1.push("moveMouse(-150, 15, 5);10:createEvil(70, 0, 2)"); _local1.push("HALT!"); _local1.push("~fixTimer(11)"); _local1.push("movePlayer(100, 50)"); _local1.push("createEvil(50, -150, 1);10:aimPlayer(50, -150)"); _local1.push("createEvil(-150, 20, 1);10:aimPlayer(-150, 20)"); _local1.push("timer(20)"); _local2 = "3"; _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push((("timer(" + _local2) + ")")); _local1.push("~createRandomArea()"); _local1.push("timer(60)"); _local1.push("~createGraphic(<field.player.x>, <field.player.y>, 40, clock, 80)"); _local1.push("HALT!"); break; }; _list = _local1; if (Boolean(loaded)){ loaded(); }; } public function getStep():String{ if (_list.length > 0){ return (_list.shift()); }; return (null); } private function _handler(_arg1:Event):void{ var _local2:String; var _local3:Array; _local2 = _arg1.target.data; _local3 = _local2.split(/[\n\r]+/); _list = _local3; _arg1.target.removeEventListener("complete", _handler); _arg1.target.removeEventListener(IOErrorEvent.IO_ERROR, handleError); if (Boolean(loaded)){ loaded(); }; } public function init(_arg1:String, _arg2:Boolean=false):void{ if (type == ""){ type = _arg1; }; if (_arg2){ loadData(); } else { getData(); }; } private function setErrorIndication(_arg1:String):void{ _list = [(("~createHint(0, 0, " + _arg1) + ")"), "moveMouse(150, -50, 5)", "moveMouse(-150, -50, 3)", "moveMouse(150, -50, 3)", "moveMouse(-150, -50, 3)"]; } private function loadData(){ var _local1:URLRequest; var _local2:URLLoader; _local1 = new URLRequest((type + ".txt")); _local2 = new URLLoader(); _local2.addEventListener("complete", _handler); _local2.addEventListener(IOErrorEvent.IO_ERROR, handleError); _local2.load(_local1); } private function handleError(_arg1:IOErrorEvent):void{ setErrorIndication((("cannot load data file " + type) + ".txt")); if (Boolean(loaded)){ loaded(); }; _arg1.target.removeEventListener("complete", _handler); _arg1.target.removeEventListener(IOErrorEvent.IO_ERROR, handleError); } } }//package
Section 76
//ScoreDisplay (ScoreDisplay) package { import flash.display.*; public class ScoreDisplay extends Sprite { private var prevScore:int; private var flashers:Container; public function ScoreDisplay(){ flashers = Container.create(this); updateScore(0); } public function updateScore(_arg1:int):void{ if (_arg1 != prevScore){ writeScore(_arg1); prevScore = _arg1; }; } public function kill():void{ flashers.kill(); removeChild(flashers); flashers = null; } public function run():void{ flashers.run(); } private function writeScore(_arg1:int):void{ var _local2:Flasher; if (flashers.hasElements()){ flashers.getLastElement().remove(); }; _local2 = Flasher.create(flashers); _local2.setup(0, 0, 50, ("#" + _arg1)); } } }//package
Section 77
//Sign (Sign) package { import flash.display.*; import flash.text.*; import flash.filters.*; public class Sign extends Sprite { private function addGraphic(_arg1):void{ var _local2:ButtonGraphic; _local2 = new ButtonGraphic(); this.addChild(_local2); _local2.gotoAndStop(_arg1); } private function addText(_arg1:String):void{ var _local2:TextField; var _local3:TextFormat; _local2 = new TextField(); _local3 = new TextFormat(); _local2.selectable = false; _local2.embedFonts = true; _local2.textColor = 0xFFFFFF; _local3.align = TextFormatAlign.CENTER; _local3.font = "LilyUPC"; _local3.size = 60; _local2.defaultTextFormat = _local3; this.addChild(_local2); _local2.text = _arg1; _local2.width = (_local2.textWidth + 5); _local2.height = (_local2.textHeight + 2); _local2.x = (-(_local2.getBounds(this).width) / 2); _local2.y = (-(_local2.getBounds(this).height) / 2); } public function kill():void{ while (numChildren > 0) { removeChildAt(0); }; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4):void{ x = _arg1; y = _arg2; scaleX = (_arg3 / 50); scaleY = (_arg3 / 50); if ((_arg4 is Number)){ addGraphic((_arg4 as Number)); } else { if ((_arg4 is String)){ if (_arg4.charAt(0) == "#"){ addText(_arg4.slice(1)); } else { addGraphic((_arg4 as String)); }; }; }; } public function applyFilter(_arg1:Number=15, _arg2:Number=3):void{ var _local3:GlowFilter; _local3 = new GlowFilter(); _local3.color = 0xFFFFFF; _local3.blurX = _arg2; _local3.blurY = _arg2; _local3.strength = _arg1; _local3.quality = 3; this.filters = [_local3]; } } }//package
Section 78
//Slider (Slider) package { import flash.display.*; import flash.geom.*; public class Slider extends Sprite { private var finalLength:Number; public var finishedAnimating:Function; public var expired:Function; private var maxVal:Number; private var cont:Container; public var enabled:Boolean; private var pointer:Pointer; private var rightLeg:Sprite; private var button:Sprite; private var minVal:Number; private var phase:int; private var leftLeg:Sprite; private var _value:Number; private var radius:Number; private var finalRadius:Number; public var changed:Function; private var buttonPos:Number; private var mother:MotherOfAll; private var length:Number; private static const EXPAND_BUTTON_PHASE:int = 1; private static const SHRINK_BUTTON_PHASE:int = 5; private static const MAIN_PHASE:int = 3; private static const EXPAND_LEGS_PHASE:int = 2; private static const SHRINK_LEGS_PHASE:int = 4; private function drawButtonToPosition(_arg1:Number, _arg2:Number, _arg3:Boolean=true):void{ var _local4:Number; _local4 = ((_arg1 - button.x) / _arg2); button.x = (button.x + _local4); if (((_arg3) && ((((_local4 < -0.1)) || ((0.1 < _local4)))))){ if (Boolean(changed)){ changed(value); }; }; } private function enterExpandLegsPhase():void{ setButtonRadius(finalRadius); drawLegs(); setLegsLength(0); phase = EXPAND_LEGS_PHASE; } public function setScale(_arg1:Number, _arg2:Number):void{ minVal = _arg1; maxVal = _arg2; } private function callEvent(_arg1:String):void{ if (this[_arg1]){ var _local2 = this; _local2[_arg1](); }; } public function init():void{ pointer = mother.pointer; enabled = true; } private function clearLegs():void{ if (leftLeg){ removeChild(leftLeg); leftLeg = null; }; if (rightLeg){ removeChild(rightLeg); rightLeg = null; }; graphics.clear(); } public function setButtonGraphic(_arg1, _arg2:Number=1):void{ if ((_arg1 is Number)){ addGraphic(button, (_arg1 as Number), _arg2); } else { if ((_arg1 is String)){ addGraphic(button, (_arg1 as String), _arg2); }; }; } private function addGraphic(_arg1:DisplayObjectContainer, _arg2, _arg3:Number=1):void{ var _local4:ButtonGraphic; if ((_arg2 is DisplayObject)){ _arg1.addChild(_arg2); } else { _local4 = new ButtonGraphic(); _arg1.addChild(_local4); _local4.gotoAndStop(String(_arg2).replace(" ", "")); _local4.scaleX = _arg3; _local4.scaleY = _arg3; }; } public function get value():Number{ return (((((button.x + finalLength) / (finalLength * 2)) * (maxVal - minVal)) + minVal)); } private function setLegsLength(_arg1:Number):void{ leftLeg.x = -(_arg1); rightLeg.x = _arg1; length = _arg1; graphics.clear(); graphics.lineStyle(1, 0xFFFFFF); graphics.moveTo((-(length) - (50 * leftLeg.scaleX)), 0); graphics.lineTo((length + (50 * rightLeg.scaleX)), 0); } public function kill():void{ clearFunctions(); clearLegs(); clearButton(); pointer = null; mother = null; cont.removeElement(this); cont = null; } private function enterMainPhase():void{ setLegsLength(finalLength); setButtonPosition(buttonPos); drawButtonToPosition(buttonPos, 1, false); phase = MAIN_PHASE; } private function drawLegs():void{ var _local1:Shape; var _local2:Shape; leftLeg = new Sprite(); rightLeg = new Sprite(); addChild(leftLeg); addChild(rightLeg); injectLegGraphics(leftLeg); injectLegGraphics(rightLeg); rightLeg.rotation = 180; } private function drawButton():void{ var _local1:Graphics; button = new Sprite(); addChild(button); _local1 = button.graphics; _local1.lineStyle(1, 0xFFFFFF); _local1.beginFill(0); _local1.drawCircle(0, 0, 50); _local1.endFill(); } private function buttonInteraction():void{ var _local1:Point; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local1 = new Point(pointer.x, pointer.y); _local1 = this.globalToLocal(_local1); _local2 = (_local1.x - button.x); _local3 = (_local1.y - button.y); _local4 = (radius + pointer.radius); if (((_local2 * _local2) + (_local3 * _local3)) < (_local4 * _local4)){ _local5 = Math.sqrt((-4 * ((_local1.y * _local1.y) - (_local4 * _local4)))); if (_local2 > 0){ setButtonPosition((((2 * _local1.x) - _local5) / 2)); } else { setButtonPosition((((2 * _local1.x) + _local5) / 2)); }; }; } public function run():void{ switch (phase){ case EXPAND_BUTTON_PHASE: drawButtonToRadius(finalRadius, 5); if (radius >= (finalRadius - 0.5)){ enterExpandLegsPhase(); }; break; case EXPAND_LEGS_PHASE: drawLegsToLength(finalLength, 5); drawButtonToPosition(buttonPos, 5, false); if (rightLeg.x >= (finalLength - 0.5)){ enterMainPhase(); }; break; case MAIN_PHASE: if (enabled){ buttonInteraction(); drawButtonToPosition(buttonPos, 2); }; break; case SHRINK_LEGS_PHASE: drawLegsToLength(0, 5); drawButtonToPosition(0, 5, false); if (rightLeg.x <= 1){ enterShrinkButtonPhase(); }; break; case SHRINK_BUTTON_PHASE: drawButtonToRadius(0, 5); if (radius <= 0.5){ callEvent("expired"); kill(); }; break; }; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number=15, _arg4:Number=50, _arg5:Function=null):void{ x = _arg1; y = _arg2; finalRadius = _arg3; finalLength = _arg4; changed = _arg5; enterExpandButtonPhase(); } private function injectLegGraphics(_arg1:Sprite):void{ var _local2:Graphics; var _local3:Shape; var _local4:Shape; _local3 = new Shape(); _arg1.addChild(_local3); _local2 = _local3.graphics; _local2.lineStyle(2, 0xFFFFFF, 1, false, "none"); _local2.drawCircle(0, 0, 50); _local4 = new Shape(); _arg1.addChild(_local4); _local2 = _local4.graphics; _local2.beginFill(0xFFFFFF); _local2.drawRect(-50, -50, 50, 100); _local2.endFill(); _local3.mask = _local4; _arg1.scaleX = button.scaleX; _arg1.scaleY = button.scaleY; } private function enterShrinkLegsPhase():void{ phase = SHRINK_LEGS_PHASE; } private function enterShrinkButtonPhase():void{ setLegsLength(0); clearLegs(); setButtonPosition(0); phase = SHRINK_BUTTON_PHASE; } private function enterExpandButtonPhase():void{ drawButton(); setButtonRadius(0); phase = EXPAND_BUTTON_PHASE; } public function onScreenRemove(){ enterShrinkLegsPhase(); } private function drawButtonToRadius(_arg1:Number, _arg2:Number):void{ setButtonRadius((radius + ((_arg1 - radius) / _arg2))); } private function clearFunctions():void{ finishedAnimating = null; changed = null; expired = null; } private function setButtonPosition(_arg1:Number):void{ if (_arg1 < -(length)){ _arg1 = -(length); } else { if (_arg1 > length){ _arg1 = length; }; }; buttonPos = _arg1; } public function set value(_arg1:Number):void{ buttonPos = ((((_arg1 - minVal) / (maxVal - minVal)) * (finalLength * 2)) - finalLength); } private function setButtonRadius(_arg1:Number):void{ button.scaleX = (_arg1 / 50); button.scaleY = (_arg1 / 50); radius = _arg1; } private function clearButton():void{ if (button){ removeChild(button); button = null; }; } private function drawLegsToLength(_arg1:Number, _arg2:Number):void{ setLegsLength((length + ((_arg1 - length) / _arg2))); } public function link(_arg1:Container, _arg2:MotherOfAll):void{ cont = _arg1; mother = _arg2; } public static function create(_arg1:Container, _arg2:MotherOfAll):Slider{ var _local3:Slider; _local3 = new (Slider); _arg1.addElement(_local3); _local3.link(_arg1, _arg2); _local3.init(); _local3.setup(0, 0); _local3.setScale(0, 100); return (_local3); } } }//package
Section 79
//Spark (Spark) package { import flash.display.*; public class Spark extends FieldObject { private var fadeRate:Number; override public function init():void{ super.init(); drawLines(); } private function drawLines():void{ var _local1:Graphics; _local1 = this.graphics; _local1.lineStyle(1); _local1.lineGradientStyle("radial", [0xFFFFFF, 0xFFFFFF], [100, 0], [0, 0xFF]); _local1.moveTo(-50, 0); _local1.lineTo(50, 0); _local1.moveTo(0, -50); _local1.lineTo(0, 50); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=0, _arg5:Number=10831349.82, _arg6:Number=0.01):void{ x = _arg1; y = _arg2; rotation = (Math.random() * 360); setRadius(_arg3); _arg5 = ((_arg5)==10831349.82) ? ((Math.random() * PI) * 2) : _arg5; XS = (_arg4 * Math.cos(_arg5)); YS = (_arg4 * Math.sin(_arg5)); fadeRate = _arg6; } public function run(){ move(); alpha = (alpha - fadeRate); if (alpha <= 0){ kill(); }; } } }//package
Section 80
//Spike (Spike) package { import flash.display.*; public class Spike extends FieldObject { private var targetDir:Number; private var lifeSpan:int; private var target:Evil; private var desiredRadius:Number; private function setSpeeds(_arg1:Number){ XS = (_arg1 * Math.cos((rotation / R2D))); YS = (_arg1 * Math.sin((rotation / R2D))); } override public function init():void{ super.init(); active = true; drawSpike(); setRadius((2 + (Math.random() * 2))); forceRadius(0); } private function expire(){ target = null; active = false; stop(); polarPush((rotation / R2D), 3); setRadius(0); } private function drawSpike(){ var _local1:Graphics; _local1 = this.graphics; _local1.lineStyle(1, 0xFFFFFF); _local1.beginFill(0); _local1.moveTo(300, 0); _local1.curveTo(0, 100, -300, 0); _local1.curveTo(0, -100, 300, 0); _local1.endFill(); } private function forceRadius(_arg1):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } private function aimToTarget(){ var _local1:Number; x = (target.x + (target.radius * Math.cos(targetDir))); y = (target.y + (target.radius * Math.sin(targetDir))); _local1 = (((targetDir * R2D) - rotation) % 360); if ((((_local1 < -5)) || ((5 < _local1)))){ _local1 = ((rotation - ((targetDir * R2D) - 180)) % 360); if (_local1 > 180){ _local1 = (_local1 - 360); } else { if (_local1 < -180){ _local1 = (_local1 + 360); }; }; rotation = (rotation - (_local1 / 10)); }; } override public function kill():void{ target = null; super.kill(); } public function setup(_arg1:Number, _arg2:Number, _arg3:Number){ x = _arg1; y = _arg2; rotation = (_arg3 * R2D); setSpeeds(7); lifeSpan = int((180 + (Math.random() * 60))); } private function setTarget(_arg1:Evil){ target = _arg1; targetDir = Math.atan2((y - _arg1.y), (x - _arg1.x)); } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } public function run(){ forceRadius((radius + ((desiredRadius - radius) / 10))); if (active){ if (target){ if (target.active){ aimToTarget(); target.shrink(2); } else { expire(); }; } else { move(); findTarget(); }; lifeSpan--; if ((((lifeSpan <= 0)) || (!(onField())))){ expire(); }; } else { move(); if (radius <= 1){ kill(); }; }; } private function findTarget(){ var _local1:*; var _local2:Array; var _local3:Function; _local2 = field.evils.L; _local3 = field.contact; for each (_local1 in _local2) { if (_local1.active){ if (_local3(this, _local1)){ setTarget(_local1); break; }; }; }; } } }//package
Section 81
//Spirit (Spirit) package { import flash.display.*; public class Spirit extends MovieClip { private var field:Field; public var active:Boolean; private var YS:Number; private var cont:Container; private var contact:Boolean; public var damage:Number; private var XS:Number; private var level:Number; private var target:Evil; public var radius:Number; public static const PI:Number = 3.14159265358979; public static const R2D:Number = 57.2957795130823; public function link(_arg1:Field, _arg2:Container){ field = _arg1; cont = _arg2; } public function init(){ XS = 0; YS = 0; active = true; contact = false; } private function findSpeeds(){ var _local1:Number; var _local2:Number; if (((target) && (target.active))){ _local1 = (target.x - x); _local2 = (target.y - y); XS = (XS + (_local1 / 150)); YS = (YS + (_local2 / 150)); } else { target = null; _local1 = (field.mouseX - x); _local2 = (field.mouseY - y); XS = (XS + (_local1 / 50)); YS = (YS + (_local2 / 50)); }; rotation = (Math.atan2(YS, XS) * R2D); } private function fireLaser(){ var _local1:Laser; _local1 = field.createOO("laser", "overlay"); _local1.setup(x, y, rotation, (damage * 20)); _local1.fire(); _local1 = null; } private function slowDown(_arg1:Number){ XS = (XS * _arg1); YS = (YS * _arg1); } private function goingReallyFast(_arg1:Number):Boolean{ return ((((XS * XS) + (YS * YS)) > (_arg1 * _arg1))); } public function onField():Boolean{ var _local1:Number; _local1 = (field.radius - this.radius); return ((((x * x) + (y * y)) < (_local1 * _local1))); } public function setup(_arg1:Number, _arg2:Number){ setRadius(_arg1); damage = (_arg2 / 50); } public function kill():void{ target = null; field = null; cont.removeElement(this); cont = null; } private function hitTestEvils():Boolean{ var _local1:String; var _local2:Evil; var _local3:Array; _local3 = field.evils.L; for (_local1 in _local3) { _local2 = _local3[_local1]; if (_local2.active){ if (hitTestEvil(_local2)){ _local2.hitSpirit(this); contact = true; target = _local2; return (true); }; }; }; return (false); } public function setRadius(_arg1:Number){ radius = _arg1; scaleX = (radius / 50); scaleY = scaleX; } public function run(){ if (active){ findSpeeds(); if (Math.random() < (1 / 10)){ randomize(8); }; move(); if (hitTestEvils()){ slowDown(0.89); } else { slowDown(0.95); }; if (!onField()){ bounceOffField(); }; if (Math.random() < (1 / 180)){ active = false; }; } else { move(); alpha = (alpha - 0.05); if (alpha <= 0){ kill(); }; }; } private function randomize(_arg1:Number){ XS = (XS + (((Math.random() * _arg1) * 2) - _arg1)); YS = (YS + (((Math.random() * _arg1) * 2) - _arg1)); } public function bounceOffField(){ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local1 = Math.atan2(YS, XS); _local2 = Math.atan2(y, x); _local3 = ((_local2 - _local1) % (PI * 2)); if (_local3 > PI){ _local3 = (_local3 - (PI * 2)); } else { if (_local3 < -(PI)){ _local3 = (_local3 + (PI * 2)); }; }; _local3 = (_local3 + (_local2 + PI)); _local4 = Math.sqrt(((XS * XS) + (YS * YS))); _local5 = (field.radius - radius); x = (_local5 * Math.cos(_local2)); y = (_local5 * Math.sin(_local2)); XS = (_local4 * Math.cos(_local3)); YS = (_local4 * Math.sin(_local3)); rotation = (_local3 * R2D); } private function hitTestWithTarget():void{ if (hitTestEvil(target)){ target.hitSpirit(this); }; } public function inherit(_arg1:Bullet){ setRadius(_arg1.radius); damage = (_arg1.damage / 40); x = _arg1.x; y = _arg1.y; rotation = _arg1.rotation; XS = (30 * Math.cos((rotation / R2D))); YS = (30 * Math.sin((rotation / R2D))); } private function hitEvil(_arg1:Evil){ bounceOff(_arg1); } private function move(){ x = (x + XS); y = (y + YS); } public function bounceOff(_arg1:Object){ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; _local2 = Math.atan2(YS, XS); _local3 = Math.atan2((y - _arg1.y), (x - _arg1.x)); _local4 = ((_local3 - _local2) % (PI * 2)); if (_local4 > PI){ _local4 = (_local4 - (PI * 2)); } else { if (_local4 < -(PI)){ _local4 = (_local4 + (PI * 2)); }; }; _local4 = (_local4 + (_local3 + PI)); _local5 = Math.sqrt(((XS * XS) + (YS * YS))); _local6 = (this.radius + _arg1.radius); x = (_arg1.x + (_local6 * Math.cos(_local3))); y = (_arg1.y + (_local6 * Math.sin(_local3))); XS = (_local5 * Math.cos(_local4)); YS = (_local5 * Math.sin(_local4)); rotation = (_local4 * R2D); } private function hitTestEvil(_arg1:Evil):Boolean{ var _local2:Number; var _local3:Number; var _local4:Number; _local2 = (_arg1.x - x); _local3 = (_arg1.y - y); _local4 = (_arg1.radius + radius); return ((((_local2 * _local2) + (_local3 * _local3)) < (_local4 * _local4))); } } }//package
Section 82
//SpriteFieldObject (SpriteFieldObject) package { import flash.display.*; public class SpriteFieldObject extends Sprite { public var active:Boolean; protected var YS:Number; protected var cont:Container; protected var XS:Number; public var radius:Number; protected var field:Field; public static const PI:Number = 3.14159265358979; public static const R2D:Number = 57.2957795130823; public function link(_arg1:Field, _arg2:Container):void{ field = _arg1; cont = _arg2; } public function stop():void{ XS = 0; YS = 0; } public function init():void{ active = false; setRadius(50); XS = 0; YS = 0; } protected function nearestEvil(_arg1:Boolean=false, _arg2:Number=3000):Evil{ var _local3:Evil; var _local4:Number; var _local5:Evil; var _local6:Number; var _local7:Number; var _local8:Number; _local4 = (_arg1) ? (_arg2 * _arg2) : _arg2; if (_arg1){ for each (_local5 in field.evils.L) { if (_local5.active){ _local6 = (_local5.x - x); _local7 = (_local5.y - y); _local8 = ((_local6 * _local6) + (_local7 * _local7)); if (_local8 <= _local4){ _local4 = _local8; _local3 = _local5; }; }; }; } else { for each (_local5 in field.evils.L) { if (_local5.active){ _local6 = (_local5.x - x); _local7 = (_local5.y - y); _local8 = ((Math.sqrt(((_local6 * _local6) + (_local7 * _local7))) - radius) - _local5.radius); if (_local8 <= _local4){ _local4 = _local8; _local3 = _local5; }; }; }; }; return (_local3); } protected function drawGradCircle(_arg1:Number, _arg2:Array, _arg3:Array, _arg4:Array, _arg5:uint=0xFF00FF):void{ var _local6:Graphics; _local6 = this.graphics; _local6.clear(); if (_arg5 != 0xFF00FF){ _local6.lineStyle(1, _arg5); }; _local6.beginGradientFill("radial", _arg2, _arg3, _arg4); _local6.drawCircle(0, 0, _arg1); _local6.endFill(); } public function push(_arg1:Number, _arg2:Number):void{ XS = (XS + _arg1); YS = (YS + _arg2); } protected function drawLimb(_arg1:Number, _arg2:Number, _arg3:Number){ drawLine((_arg1 * Math.cos((_arg3 / R2D))), (_arg1 * Math.sin((_arg3 / R2D))), _arg2, _arg3); } protected function drawCircle(_arg1:Number, _arg2:uint, _arg3:uint=0xFF00FF):void{ var _local4:Graphics; _local4 = this.graphics; if (_arg3 != 0xFF00FF){ _local4.lineStyle(1, _arg3); }; _local4.beginFill(_arg2); _local4.drawCircle(0, 0, _arg1); _local4.endFill(); } protected function hitTestWithEvils(_arg1:Function):void{ var _local2:Array; var _local3:Function; var _local4:Evil; _local2 = field.evils.L; _local3 = field.contact; for each (_local4 in _local2) { if (_local4.active){ if (touchingEvil(_local4)){ _arg1(_local4); }; }; }; } protected function slowDown(_arg1:Number):void{ XS = (XS * _arg1); YS = (YS * _arg1); } protected function onField():Boolean{ var _local1:Number; _local1 = (field.radius - this.radius); return ((((x * x) + (y * y)) < (_local1 * _local1))); } protected function drawLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number){ var _local5:Graphics; _local5 = this.graphics; _local5.moveTo(_arg1, _arg2); _local5.lineTo((_arg1 + (_arg3 * Math.cos((_arg4 / R2D)))), (_arg2 + (_arg3 * Math.sin((_arg4 / R2D))))); } public function kill():void{ field = null; active = false; cont.removeElement(this); cont = null; } protected function touchingEvil(_arg1:Evil):Boolean{ var _local2:Number; var _local3:Number; var _local4:Number; _local2 = (_arg1.x - x); _local3 = (_arg1.y - y); _local4 = (_arg1.radius + radius); return ((((_local2 * _local2) + (_local3 * _local3)) < (_local4 * _local4))); } public function polarPush(_arg1:Number, _arg2:Number):void{ XS = (XS + (_arg2 * Math.cos(_arg1))); YS = (YS + (_arg2 * Math.sin(_arg1))); } protected function hitCheckWithEvils(_arg1:Function=null):Boolean{ var _local2:Array; var _local3:Function; var _local4:Evil; _local2 = field.evils.L; _local3 = field.contact; for each (_local4 in _local2) { if (_local4.active){ if (touchingEvil(_local4)){ if (Boolean(_arg1)){ _arg1(); return (true); }; }; }; }; return (false); } protected function largestEvil():Evil{ var _local1:Number; var _local2:Evil; var _local3:*; _local1 = 0; for each (_local3 in field.evils.L) { if (_local3.radius > _local1){ _local1 = _local3.radius; _local2 = _local3; }; }; return (_local2); } public function setRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } public function bounceOff(_arg1:Object, _arg2:Boolean=false):void{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; _local7 = Math.sqrt(((XS * XS) + (YS * YS))); if (_arg2){ _local6 = (_arg1.radius - this.radius); } else { _local6 = (_arg1.radius + this.radius); }; if ((_arg1 is Field)){ _local3 = Math.atan2(YS, XS); _local4 = Math.atan2(y, x); _local5 = ((_local4 - _local3) % (PI * 2)); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_local6 * Math.cos(_local4)); y = (_local6 * Math.sin(_local4)); } else { _local3 = Math.atan2(YS, XS); _local4 = Math.atan2((y - _arg1.y), (x - _arg1.x)); _local5 = ((_local4 - _local3) % (PI * 2)); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_arg1.x + (_local6 * Math.cos(_local4))); y = (_arg1.y + (_local6 * Math.sin(_local4))); }; XS = (_local7 * Math.cos(_local5)); YS = (_local7 * Math.sin(_local5)); rotation = (_local5 * R2D); } protected function move():void{ x = (x + XS); y = (y + YS); } protected function offField():Boolean{ var _local1:Number; _local1 = (field.radius + this.radius); return ((((x * x) + (y * y)) > (_local1 * _local1))); } public function bounceAsPoint(_arg1:Object, _arg2:Boolean=false):void{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; _local7 = Math.sqrt(((XS * XS) + (YS * YS))); if (_arg2){ _local6 = (_arg1.radius - 1); } else { _local6 = (_arg1.radius + 1); }; if ((_arg1 is Field)){ _local3 = Math.atan2(YS, XS); _local4 = Math.atan2(y, x); _local5 = ((_local4 - _local3) % (PI * 2)); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_local6 * Math.cos(_local4)); y = (_local6 * Math.sin(_local4)); } else { _local3 = Math.atan2(YS, XS); _local4 = Math.atan2((y - _arg1.y), (x - _arg1.x)); _local5 = (((_local4 - _local3) % PI) * 2); if (_local5 > PI){ _local5 = (_local5 - (PI * 2)); } else { if (_local5 < -(PI)){ _local5 = (_local5 + (PI * 2)); }; }; _local5 = (_local5 + (_local4 + PI)); x = (_arg1.x + (_local6 * Math.cos(_local4))); y = (_arg1.y + (_local6 * Math.sin(_local4))); }; XS = (_local7 * Math.cos(_local5)); YS = (_local7 * Math.sin(_local5)); rotation = (_local5 * R2D); } } }//package
Section 83
//SweeperTurret (SweeperTurret) package { class SweeperTurret extends SpriteFieldObject { private var power:Number; private var targetDir:Number; private var timer:int; private var lifeSpan:uint; private var phase:uint; private var startAngle:Number; private var angleDelta:Number; private var plugs:VolatileList; private var desiredRadius:Number; private var endAngle:Number; private var laser:Laser; private var cables:VolatileList; private var base:SweeperTurretBase; private var drain:Number; private static const SWEEP_TIME:uint = 120; private static const POWER_USAGE:Number = 0.07; override public function init():void{ super.init(); active = true; power = 0; setRadius(0); forceRadius(0); plugs = new VolatileList(); cables = new VolatileList(); rotation = (Math.random() * 360); draw(); } public function expire():void{ plugs.orderAllElements("expire"); plugs.clear(); cables.clear(); base.expire(); if (laser){ laser.addTimer(1); }; phase = 6; } private function prepareToFire():void{ targetDir = bestTargetDir(); phase = 4; } private function draw():void{ drawCircle(50, 0, 0xFFFFFF); graphics.beginFill(0); graphics.lineStyle(1, 0xFFFFFF); graphics.moveTo(55, -30); graphics.curveTo(30, 0, 55, 30); graphics.curveTo(45, 0, 55, -30); graphics.endFill(); } private function spin(){ rotation = (rotation + angleDelta); if (timer <= 0){ angleDelta = (angleDelta * -1); timer = SWEEP_TIME; }; timer--; } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } override public function kill():void{ laser = null; cables.clear(); plugs.clear(); cables = null; plugs = null; base = null; super.kill(); } private function getPower(_arg1:Number):void{ var _local2:Plug; var _local3:Number; _local3 = plugs.length; for each (_local2 in plugs) { power = (power + (_local2.drawPower((_arg1 / _local3)) * 4)); }; } public function start():void{ plugs.clear(); cables.clear(); timer = 0; setRadius(10); phase = 2; } private function adjustLaser():void{ var _local1:Number; var _local2:Number; _local1 = 50; _local2 = 50; _local1 = (_local1 * scaleX); _local2 = (_local2 * scaleY); _local1 = (_local1 * Math.cos((rotation / R2D))); _local2 = (_local2 * Math.sin((rotation / R2D))); laser.setup((x + _local1), (y + _local2), (rotation / R2D), (((power * POWER_USAGE) + (Math.random() * 4)) - 2), true); power = (power - (power * POWER_USAGE)); laser.scaleY = (laser.scaleY * 2); } private function waitForPower():void{ getPower((drain / 5)); if (power > drain){ if (timer <= 0){ if (field.evils.hasActiveElements()){ prepareToFire(); } else { timer = 30; }; }; }; timer--; } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number):void{ x = _arg1; y = _arg2; if (!onField()){ bounceOff(field, true); }; drain = _arg3; lifeSpan = ((60 * 9) + int((Math.random() * 120))); base = field.createOO("sweeperTurretBase", "ground"); base.setup(x, y, 20, this); cont.setChildIndex(base, cont.getChildIndex(this)); } private function openFire():void{ laser = field.createOO("laser", "overlay"); adjustLaser(); angleDelta = (30 / SWEEP_TIME); timer = (SWEEP_TIME / 2); phase = 5; } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 15))); if (active){ switch (phase){ case 1: break; case 2: if (timer <= 0){ if (field.evils.hasActiveElements()){ launchPlugs(4, bestTargetDir(), (PI / 3)); phase = 3; timer = 0; } else { timer = 60; }; }; timer--; break; case 3: waitForPower(); break; case 4: aimToTarget(); break; case 5: spin(); getPower(drain); adjustLaser(); break; case 6: if (base.radius <= 1){ setRadius(0); active = false; }; break; }; if (phase != 6){ if (lifeSpan <= 0){ expire(); }; lifeSpan--; }; } else { if (radius <= 0.1){ kill(); }; }; } private function launchPlugs(_arg1:uint, _arg2:Number, _arg3:Number=1.0471975511966):void{ var _local4:uint; if (_arg1 == 1){ launchPlug(((_arg2 + ((Math.random() * _arg3) * 2)) - _arg3)); } else { _local4 = 0; while (_local4 < _arg1) { launchPlug((_arg2 - ((((_local4 * 2) / (_arg1 - 1)) - 1) * _arg3))); _local4++; }; }; } private function aimToTarget():void{ var _local1:Number; _local1 = ((rotation - (targetDir * R2D)) % 360); if (_local1 > 180){ _local1 = (_local1 - 360); } else { if (_local1 < -180){ _local1 = (_local1 + 360); }; }; _local1 = (_local1 / 10); rotation = (rotation - _local1); if ((((-0.5 < _local1)) && ((_local1 < 0.5)))){ openFire(); }; } private function launchPlug(_arg1:Number):void{ var _local2:Plug; var _local3:Cable; _local2 = field.createOO("plug", "ground"); _local2.setup(x, y, _arg1, 8); cont.setChildIndex(_local2, cont.getChildIndex(this)); _local3 = field.createOO("cable", "ground"); _local3.setup(this, _local2, PI, 200, PI, 50); _local3.graphicSetup([3, 5], [0, 0xFFFFFF]); cont.setChildIndex(_local3, cont.getChildIndex(_local2)); plugs.push(_local2); cables.push(_local3); } private function bestTargetDir():Number{ var _local1:Evil; _local1 = largestEvil(); if (_local1){ return (Math.atan2((_local1.y - y), (_local1.x - x))); }; return ((Math.random() * 360)); } } }//package
Section 84
//SweeperTurretBase (SweeperTurretBase) package { import flash.display.*; class SweeperTurretBase extends SpriteFieldObject { private var legs:Array; private var phase:uint; private var feet:Array; private var turret:SweeperTurret; private static const LEG_LENGTH:Number = 55; override public function init():void{ super.init(); active = true; legs = []; feet = []; phase = 1; } private function drawFeet():void{ var _local1:Number; var _local2:Shape; var _local3:Graphics; var _local4:*; for each (_local4 in legs) { _local2 = new Shape(); this.addChildAt(_local2, 0); _local1 = (_local4.rotation / R2D); _local2.x = (LEG_LENGTH * Math.cos(_local1)); _local2.y = (LEG_LENGTH * Math.sin(_local1)); _local3 = _local2.graphics; _local3.lineStyle(1, 0xFFFFFF); _local3.beginFill(0); _local3.drawCircle(0, 0, 13); _local3.endFill(); _local2.scaleX = 0; _local2.scaleY = 0; feet.push(_local2); }; } public function expire():void{ active = false; } private function deployFeet(_arg1:Number):void{ var _local2:*; for each (_local2 in feet) { _local2.scaleX = (_local2.scaleX + _arg1); _local2.scaleY = (_local2.scaleY + _arg1); }; } override public function kill():void{ turret = null; super.kill(); } private function get legsAtFullSize():Boolean{ return ((legs[0].scaleX >= 1)); } private function drawLegs():void{ var _local1:Shape; var _local2:Graphics; var _local3:Number; var _local4:Number; var _local5:uint; _local5 = 0; while (_local5 < 4) { _local1 = new Shape(); addChild(_local1); _local1.rotation = ((((360 * _local5) / 4) + (Math.random() * 60)) - 30); _local2 = _local1.graphics; _local2.lineStyle(4, 0xFFFFFF, 1, false, "none"); _local2.lineTo(LEG_LENGTH, 0); _local2.lineStyle(2, 0, 1, false, "none"); _local2.lineTo(0, 0); _local1.scaleX = 0; legs.push(_local1); _local5++; }; } public function setup(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:SweeperTurret):void{ x = _arg1; y = _arg2; setRadius(_arg3); rotation = (Math.random() * 360); turret = _arg4; drawLegs(); } private function deployLegs(_arg1:Number):void{ var _local2:*; for each (_local2 in legs) { _local2.scaleX = (_local2.scaleX + _arg1); _local2.scaleY = (_local2.scaleY + _arg1); }; } public function run():void{ if (active){ switch (phase){ case 1: deployLegs((1 / 30)); if (legsAtFullSize){ drawFeet(); phase = 2; }; break; case 2: deployFeet((1 / 30)); if (feetAtFullSize){ turret.start(); phase = 3; }; break; case 3: break; }; } else { setRadius((radius * 0.9)); if (radius <= 0.1){ kill(); }; }; } private function get feetAtFullSize():Boolean{ return ((feet[0].scaleX >= 1)); } } }//package
Section 85
//TheOperaOfTheFrogs (TheOperaOfTheFrogs) package { import flash.media.*; public dynamic class TheOperaOfTheFrogs extends Sound { } }//package
Section 86
//TrackerTurret (TrackerTurret) package { import flash.display.*; public class TrackerTurret extends SpriteFieldObject { private var laserDamage:Number; private var timer:int; private var shooting:Boolean; private var lifeSpan:int; private var angleOffset:Number; private var desiredRadius:Number; private var laser:Laser; private var base:Shape; private var turret:Shape; private static const TURN_SPEED_D:uint = 2; private static const WAIT_TIME:uint = 60; private static const SHOOT_TIME:uint = 30; override public function init():void{ super.init(); active = true; forceRadius(1); shooting = false; timer = 0; lifeSpan = (60 * 20); angleOffset = ((Math.random() * PI) / 15); draw(30, 55, 15, 60); turret.rotation = (Math.random() * 360); } public function expire():void{ var _local1:Explosion; if (active){ if (shooting){ stopShooting(); }; _local1 = field.createOO("explosion", "overlay"); _local1.setup(x, y, (50 + (radius * 3)), 20, 10); setRadius(0); active = false; }; } private function draw(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ var _local5:Graphics; base = new Shape(); addChild(base); _local5 = base.graphics; _local5.lineStyle(1, 0xFFFFFF); _local5.beginFill(0); _local5.drawCircle(0, 0, 50); _local5.endFill(); _local5.moveTo(-15, 0); _local5.lineTo(15, 0); _local5.moveTo(0, -15); _local5.lineTo(0, 15); base.rotation = (Math.random() * 360); turret = new Shape(); addChild(turret); _local5 = turret.graphics; _local5.lineStyle(1, 0xFFFFFF); _local5.moveTo(_arg2, (-(_arg4) / 2)); _local5.beginFill(0); _local5.curveTo(_arg1, 0, _arg2, (_arg4 / 2)); _local5.curveTo((_arg1 + _arg3), 0, _arg2, (-(_arg4) / 2)); _local5.endFill(); } private function forceRadius(_arg1:Number):void{ radius = _arg1; scaleX = (_arg1 / 50); scaleY = (_arg1 / 50); } override public function kill():void{ if (base){ removeChild(base); base = null; }; if (turret){ removeChild(turret); turret = null; }; laser = null; super.kill(); } override public function setRadius(_arg1:Number):void{ desiredRadius = _arg1; } private function stopShooting():void{ laser.active = false; laser = null; shooting = false; timer = WAIT_TIME; } public function setup(_arg1:Number, _arg2:Number, _arg3:uint, _arg4:Number):void{ x = _arg1; y = _arg2; lifeSpan = _arg3; laserDamage = _arg4; setRadius((((5 + (_arg4 / 3)) + (Math.random() * 2)) - 1)); } private function aimLaser():void{ var _local1:Number; var _local2:Number; _local1 = ((50 * scaleX) * Math.cos((turret.rotation / R2D))); _local2 = ((50 * scaleY) * Math.sin((turret.rotation / R2D))); laser.setup((x + _local1), (y + _local2), (turret.rotation / R2D), laserDamage, true); } private function aimTurret():void{ var _local1:Number; var _local2:Number; _local1 = (Math.atan2((field.mouseY - y), (field.mouseX - x)) + angleOffset); _local2 = (((_local1 * R2D) - turret.rotation) % 360); if (_local2 > 180){ _local2 = (_local2 - 360); } else { if (_local2 < -180){ _local2 = (_local2 + 360); }; }; if (_local2 > 0){ turret.rotation = (turret.rotation + ((_local2 < TURN_SPEED_D)) ? _local2 : TURN_SPEED_D); } else { if (_local2 < 0){ turret.rotation = (turret.rotation + ((_local2 > -(TURN_SPEED_D))) ? _local2 : -(TURN_SPEED_D)); }; }; } private function startShooting():void{ laser = field.createOO("laser", "overlay"); aimLaser(); timer = SHOOT_TIME; shooting = true; } public function run():void{ forceRadius((radius + ((desiredRadius - radius) / 10))); if (active){ aimTurret(); if (shooting){ aimLaser(); if (timer <= 0){ stopShooting(); }; } else { if (timer <= 0){ startShooting(); }; }; hitCheckWithEvils(expire); timer--; if (lifeSpan <= 0){ expire(); }; lifeSpan--; } else { if (radius <= 0.5){ kill(); }; }; } } }//package
Section 87
//VolatileList (VolatileList) package { public dynamic class VolatileList extends Array { public function VolatileList(... _args):void{ if (_args.length > 0){ seed(_args); } else { clear(); }; } public function seed(_arg1:Array):void{ var _local2:*; clear(); for (_local2 in _arg1) { this[_local2] = _arg1[_local2]; }; } public function get firstGoodIndex():int{ var _local1:uint; var _local2:uint; _local2 = this.length; _local1 = 0; while (_local1 < _local2) { if (this[_local1] != null){ return (_local1); }; _local1++; }; return (-1); } public function orderAllElements(_arg1:String){ var _local2:*; for each (_local2 in this) { if (_local2){ if (Boolean(_local2[_arg1])){ var _local5 = _local2; _local5[_arg1](); }; }; }; } public function clear():void{ var _local1:*; for (_local1 in this) { this[_local1] = null; }; } public function setProps(_arg1:String, _arg2):void{ var _local3:*; for each (_local3 in this) { _local3[_arg1] = _arg2; }; } public function closeGaps():void{ var _local1:uint; var _local2:uint; _local2 = this.length; _local1 = 0; while (_local1 < _local2) { if (this[_local1] == null){ this.splice(_local1, 1); _local1--; _local2 = this.length; }; _local1++; }; } public function verify(_arg1=null):void{ var _local2:uint; var _local3:uint; _local3 = this.length; _local2 = 0; while (_local2 < _local3) { if (this[_local2] != null){ if (_arg1 === null){ if (this[_local2].parent == null){ this[_local2] = null; }; } else { if ((_arg1 is Function)){ if (!_arg1(this[_local2], _local2, (this as Array))){ this[_local2] = null; }; } else { if ((_arg1 is String)){ if ((this[firstGoodIndex][_arg1] is Function)){ if (!this[_local2][_arg1]()){ this[_local2] = null; }; } else { if ((this[firstGoodIndex][_arg1] is Boolean)){ if (!this[_local2][_arg1]){ this[_local2] = null; }; }; }; }; }; }; }; _local2++; }; } } }//package

Library Items

Symbol 1 GraphicUsed by:20
Symbol 2 GraphicUsed by:20
Symbol 3 GraphicUsed by:20
Symbol 4 GraphicUsed by:20
Symbol 5 GraphicUsed by:20
Symbol 6 GraphicUsed by:20
Symbol 7 GraphicUsed by:20
Symbol 8 GraphicUsed by:20
Symbol 9 GraphicUsed by:20
Symbol 10 GraphicUsed by:20
Symbol 11 GraphicUsed by:20
Symbol 12 GraphicUsed by:20
Symbol 13 GraphicUsed by:20
Symbol 14 GraphicUsed by:20
Symbol 15 GraphicUsed by:20
Symbol 16 GraphicUsed by:20
Symbol 17 GraphicUsed by:20
Symbol 18 GraphicUsed by:20
Symbol 19 GraphicUsed by:20
Symbol 20 MovieClip {ButtonGraphic}Uses:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Symbol 21 GraphicUsed by:30 40 58
Symbol 22 GraphicUsed by:23
Symbol 23 MovieClipUses:22Used by:58
Symbol 24 GraphicUsed by:25
Symbol 25 MovieClipUses:24Used by:58
Symbol 26 GraphicUsed by:27
Symbol 27 MovieClipUses:26Used by:58
Symbol 28 GraphicUsed by:30
Symbol 29 GraphicUsed by:30 96 133
Symbol 30 MovieClipUses:21 28 29Used by:58
Symbol 31 GraphicUsed by:32
Symbol 32 MovieClipUses:31Used by:58
Symbol 33 GraphicUsed by:34
Symbol 34 MovieClipUses:33Used by:58
Symbol 35 GraphicUsed by:36
Symbol 36 MovieClipUses:35Used by:58
Symbol 37 GraphicUsed by:40
Symbol 38 GraphicUsed by:40
Symbol 39 GraphicUsed by:40
Symbol 40 MovieClipUses:37 21 38 39Used by:58
Symbol 41 GraphicUsed by:42
Symbol 42 MovieClipUses:41Used by:58
Symbol 43 GraphicUsed by:44
Symbol 44 MovieClipUses:43Used by:58
Symbol 45 GraphicUsed by:46
Symbol 46 MovieClipUses:45Used by:58
Symbol 47 GraphicUsed by:48
Symbol 48 MovieClipUses:47Used by:58
Symbol 49 GraphicUsed by:50
Symbol 50 MovieClipUses:49Used by:58
Symbol 51 GraphicUsed by:55
Symbol 52 GraphicUsed by:55
Symbol 53 GraphicUsed by:55
Symbol 54 GraphicUsed by:55
Symbol 55 MovieClipUses:51 52 53 54Used by:58
Symbol 56 GraphicUsed by:57
Symbol 57 MovieClipUses:56Used by:58
Symbol 58 MovieClip {Bonus}Uses:21 23 25 27 30 32 34 36 40 42 44 46 48 50 55 57Used by:Timeline
Symbol 59 MovieClip {com.kongregate.as3.client.KongregateAPI}
Symbol 60 GraphicUsed by:Timeline
Symbol 61 GraphicUsed by:62
Symbol 62 MovieClipUses:61Used by:63 64
Symbol 63 MovieClipUses:62Used by:139
Symbol 64 MovieClipUses:62Used by:139
Symbol 65 GraphicUsed by:66
Symbol 66 MovieClipUses:65Used by:67
Symbol 67 MovieClipUses:66Used by:139
Symbol 68 GraphicUsed by:69
Symbol 69 MovieClipUses:68Used by:70
Symbol 70 MovieClipUses:69Used by:139
Symbol 71 GraphicUsed by:72 100
Symbol 72 MovieClipUses:71Used by:75
Symbol 73 GraphicUsed by:74
Symbol 74 MovieClipUses:73Used by:75
Symbol 75 MovieClipUses:72 74Used by:139
Symbol 76 GraphicUsed by:77
Symbol 77 MovieClipUses:76Used by:78 79
Symbol 78 MovieClipUses:77Used by:80
Symbol 79 MovieClipUses:77Used by:80
Symbol 80 MovieClipUses:78 79Used by:139
Symbol 81 GraphicUsed by:82
Symbol 82 MovieClipUses:81Used by:83
Symbol 83 MovieClipUses:82Used by:139
Symbol 84 GraphicUsed by:85
Symbol 85 MovieClipUses:84Used by:86
Symbol 86 MovieClipUses:85Used by:87
Symbol 87 MovieClipUses:86Used by:139
Symbol 88 GraphicUsed by:89
Symbol 89 MovieClipUses:88Used by:91
Symbol 90 GraphicUsed by:91
Symbol 91 MovieClipUses:89 90Used by:139
Symbol 92 GraphicUsed by:93
Symbol 93 MovieClipUses:92Used by:94 95
Symbol 94 MovieClipUses:93Used by:96
Symbol 95 MovieClipUses:93Used by:96
Symbol 96 MovieClipUses:94 95 29Used by:139
Symbol 97 GraphicUsed by:98
Symbol 98 MovieClipUses:97Used by:99
Symbol 99 MovieClipUses:98Used by:101
Symbol 100 MovieClipUses:71Used by:101
Symbol 101 MovieClipUses:99 100Used by:139
Symbol 102 GraphicUsed by:103
Symbol 103 MovieClipUses:102Used by:104
Symbol 104 MovieClipUses:103Used by:105
Symbol 105 MovieClipUses:104Used by:139
Symbol 106 GraphicUsed by:107
Symbol 107 MovieClipUses:106Used by:110
Symbol 108 GraphicUsed by:109
Symbol 109 MovieClipUses:108Used by:110
Symbol 110 MovieClipUses:107 109Used by:139
Symbol 111 GraphicUsed by:112
Symbol 112 MovieClipUses:111Used by:114
Symbol 113 GraphicUsed by:114
Symbol 114 MovieClipUses:112 113Used by:139
Symbol 115 GraphicUsed by:116
Symbol 116 MovieClipUses:115Used by:118
Symbol 117 GraphicUsed by:118
Symbol 118 MovieClipUses:116 117Used by:139
Symbol 119 GraphicUsed by:120
Symbol 120 MovieClipUses:119Used by:121 122
Symbol 121 MovieClipUses:120Used by:123
Symbol 122 MovieClipUses:120Used by:123
Symbol 123 MovieClipUses:121 122Used by:139
Symbol 124 GraphicUsed by:125
Symbol 125 MovieClipUses:124Used by:126
Symbol 126 MovieClipUses:125Used by:128
Symbol 127 GraphicUsed by:128
Symbol 128 MovieClipUses:126 127Used by:139
Symbol 129 GraphicUsed by:130
Symbol 130 MovieClipUses:129Used by:132
Symbol 131 GraphicUsed by:132
Symbol 132 MovieClipUses:130 131Used by:139
Symbol 133 MovieClipUses:29Used by:134
Symbol 134 MovieClipUses:133Used by:139
Symbol 135 GraphicUsed by:136
Symbol 136 MovieClipUses:135Used by:137
Symbol 137 MovieClipUses:136Used by:138
Symbol 138 MovieClipUses:137Used by:139
Symbol 139 MovieClip {Area}Uses:63 64 67 70 75 80 83 87 91 96 101 105 110 114 118 123 128 132 134 138Used by:Timeline
Symbol 140 GraphicUsed by:141
Symbol 141 MovieClip {Driller}Uses:140Used by:Timeline
Symbol 142 GraphicUsed by:145
Symbol 143 GraphicUsed by:144
Symbol 144 MovieClipUses:143Used by:145
Symbol 145 MovieClip {Laser}Uses:142 144Used by:Timeline
Symbol 146 GraphicUsed by:147
Symbol 147 MovieClip {Player}Uses:146Used by:Timeline
Symbol 148 GraphicUsed by:149
Symbol 149 MovieClip {Spirit}Uses:148Used by:Timeline
Symbol 150 Font {LilyUPC}Used by:151
Symbol 151 EditableTextUses:150Used by:Timeline
Symbol 152 GraphicUsed by:Timeline
Symbol 153 Sound {TheOperaOfTheFrogs}Used by:Timeline

Instance Names

"LE"Symbol 145 MovieClip {Laser} Frame 1Symbol 144 MovieClip

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata not present, AS3.

Labels

"generic_area"Symbol 20 MovieClip {ButtonGraphic} Frame 2
"generic_bonus"Symbol 20 MovieClip {ButtonGraphic} Frame 3
"potato"Symbol 20 MovieClip {ButtonGraphic} Frame 4
"settings"Symbol 20 MovieClip {ButtonGraphic} Frame 5
"credits"Symbol 20 MovieClip {ButtonGraphic} Frame 6
"back"Symbol 20 MovieClip {ButtonGraphic} Frame 7
"save"Symbol 20 MovieClip {ButtonGraphic} Frame 8
"comp"Symbol 20 MovieClip {ButtonGraphic} Frame 9
"save_cd"Symbol 20 MovieClip {ButtonGraphic} Frame 10
"new_game"Symbol 20 MovieClip {ButtonGraphic} Frame 11
"load_game"Symbol 20 MovieClip {ButtonGraphic} Frame 12
"go_to_main_menu"Symbol 20 MovieClip {ButtonGraphic} Frame 13
"unpause"Symbol 20 MovieClip {ButtonGraphic} Frame 14
"yes"Symbol 20 MovieClip {ButtonGraphic} Frame 15
"no"Symbol 20 MovieClip {ButtonGraphic} Frame 16
"low_Q"Symbol 20 MovieClip {ButtonGraphic} Frame 17
"med_Q"Symbol 20 MovieClip {ButtonGraphic} Frame 18
"high_Q"Symbol 20 MovieClip {ButtonGraphic} Frame 19
"auto_Q"Symbol 20 MovieClip {ButtonGraphic} Frame 20
"play"Symbol 20 MovieClip {ButtonGraphic} Frame 21
"end_level"Symbol 20 MovieClip {ButtonGraphic} Frame 22
"select_level"Symbol 20 MovieClip {ButtonGraphic} Frame 23
"circle"Symbol 20 MovieClip {ButtonGraphic} Frame 24
"arrow_circle"Symbol 20 MovieClip {ButtonGraphic} Frame 25
"player_shoot"Symbol 20 MovieClip {ButtonGraphic} Frame 26
"player_move"Symbol 20 MovieClip {ButtonGraphic} Frame 27
"clock"Symbol 20 MovieClip {ButtonGraphic} Frame 28
"music"Symbol 20 MovieClip {ButtonGraphic} Frame 29




https://swfchan.com/53/263240/info.shtml
Created: 21/3 -2026 13:59:33 Last modified: 21/3 -2026 13:59:33 Server time: 09/04 -2026 03:22:32