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