Section 1
//AnimatedBitmap (fai.AnimatedBitmap)
package fai {
import flash.display.*;
import flash.geom.*;
public class AnimatedBitmap extends Bitmap {
private var point:Point;// = null
private var rect:Rectangle;// = null
public var curbuffer:BitmapData;// = null
public var nframes:uint;// = 0
public var framen:uint;// = 0
public function AnimatedBitmap(_arg1:BitmapData, _arg2:int, _arg3:int):void{
nframes = 0;
curbuffer = null;
framen = 0;
point = null;
rect = null;
super(new BitmapData(_arg2, _arg3, true, 0), "auto", true);
point = new Point(0, 0);
setBuffer(_arg1);
}
public function setBuffer(_arg1:BitmapData):void{
if (((_arg1) && (!((curbuffer == _arg1))))){
curbuffer = _arg1;
nframes = (curbuffer.width / width);
framen = 0;
draw();
};
}
public function setFrame(_arg1:uint):void{
if (_arg1 == framen){
return;
};
framen = _arg1;
draw();
}
private function draw():void{
var _local1:BitmapData;
_local1 = bitmapData;
rect = new Rectangle((framen * width), 0, width, height);
_local1.copyPixels(curbuffer, rect, point);
bitmapData = _local1;
smoothing = true;
}
}
}//package fai
Section 2
//Astar (fai.Astar)
package fai {
public class Astar {
private var maxf:uint;// = 0
public var ns:Array;
public var checkxy:Function;// = null
public var destination:Position;
private var tempg:uint;// = 0
private var temph:uint;// = 0
public var tid:uint;// = 0
private var node:AstarNode;// = null
public var map:MapMatrix;// = null
private var nextbestpos:Position;// = null
private var startnode:AstarNode;// = null
private var cnode:AstarNode;// = null
private var opened:AstarMap;// = null
private var closed:AstarMap;// = null
private var onode:AstarNode;// = null
private var openedMap:AstarMap;// = null
private var curf:int;// = 0
public static var npasses:int = 0;
public function Astar(_arg1:MapMatrix, _arg2:int):void{
checkxy = null;
map = null;
ns = new Array();
opened = null;
closed = null;
openedMap = null;
nextbestpos = null;
tid = 0;
tempg = 0;
temph = 0;
maxf = 0;
curf = 0;
onode = null;
cnode = null;
startnode = null;
node = null;
destination = new Position();
super();
checkxy = checkwallid;
map = _arg1;
tid = _arg2;
}
public function allgood(_arg1:uint, _arg2:uint):Boolean{
return (true);
}
public function findNearPlace(_arg1:Position, _arg2:int=0):void{
var _local3:int;
var _local4:int;
var _local5:int;
_local3 = _arg2;
while (true) {
_local4 = (_arg1.x - _local3);
while (_local4 <= (_arg1.x + _local3)) {
_local5 = (_arg1.y - _local3);
while (_local5 <= (_arg1.y + _local3)) {
if ((((((((_local4 >= 0)) && ((_local5 >= 0)))) && ((_local4 < map.h)))) && ((_local5 < map.v)))){
if (checkxy(_local4, _local5)){
destination.set(_local4, _local5);
return;
};
};
_local5++;
};
_local4++;
};
_local3++;
if (((((((((_arg1.x - _local3) < 0)) && (((_arg1.x + _local3) >= map.h)))) && (((_arg1.y - _local3) < 0)))) && (((_arg1.y + _local3) >= map.v)))){
destination = null;
return;
};
};
}
public function hestimate(_arg1:Position, _arg2:Position):uint{
return ((Math.abs((_arg1.x - _arg2.x)) + Math.abs((_arg1.y - _arg2.y))));
}
public function checknotempty(_arg1:uint, _arg2:uint):Boolean{
return (!(map.getxy(_arg1, _arg2)));
}
public function checkwall(_arg1:uint, _arg2:uint):Boolean{
return (!((Consts.Wall == map.getxy(_arg1, _arg2))));
}
private function addToOpened(_arg1:AstarNode):void{
opened.add(_arg1.key(), _arg1);
openedMap.add(_arg1.h, _arg1);
}
public function startSearch(_arg1:Position, _arg2:Position):Boolean{
nextbestpos = null;
ns.length = 0;
opened = new AstarMap();
openedMap = new AstarMap();
closed = new AstarMap();
tempg = 0;
temph = 0;
maxf = 0;
curf = 0;
onode = null;
cnode = null;
findNearPlace(_arg2);
if (!destination){
return (false);
};
startnode = new AstarNode();
node = null;
startnode.pos = _arg1;
startnode.f = (startnode.h = hestimate(_arg1, destination));
addToOpened(startnode);
return (true);
}
public function isPathExists():Boolean{
var _local1:Position;
var _local2:AstarNode;
while (!(opened.empty())) {
node = getBestNode();
if (node.pos.isequal(destination)){
return (true);
};
neighbours(node.pos);
for each (_local1 in ns) {
tempg = (node.g + hestimate(node.pos, _local1));
temph = hestimate(_local1, destination);
curf = (tempg + temph);
onode = opened.get(((_local1.x * 1000) + _local1.y));
if (onode){
} else {
cnode = closed.get(((_local1.x * 1000) + _local1.y));
if (cnode){
} else {
if (onode){
opened.remove(onode.key());
openedMap.removeNode(onode.h, onode);
};
if (cnode){
closed.remove(cnode.key());
};
_local2 = new AstarNode();
_local2.pos = _local1;
_local2.g = tempg;
_local2.h = temph;
_local2.f = curf;
_local2.parent = node;
addToOpened(_local2);
};
};
};
closed.add(node.key(), node);
};
return (false);
}
public function search(_arg1:Array):Boolean{
var _local2:Position;
var _local3:AstarNode;
var _local4:AstarNode;
while (!(opened.empty())) {
npasses--;
if (npasses <= 0){
return (true);
};
node = getBestNode();
if (node.pos.isequal(destination)){
_local3 = node;
while (_local3 != startnode) {
_arg1.unshift(_local3.pos);
_local3 = _local3.parent;
};
return (true);
};
neighbours(node.pos);
for each (_local2 in ns) {
tempg = (node.g + hestimate(node.pos, _local2));
temph = hestimate(_local2, destination);
curf = (tempg + temph);
onode = opened.get(((_local2.x * 1000) + _local2.y));
if (((onode) && ((onode.f <= curf)))){
} else {
cnode = closed.get(((_local2.x * 1000) + _local2.y));
if (((cnode) && ((cnode.f <= curf)))){
} else {
if (onode){
opened.remove(onode.key());
openedMap.removeNode(onode.h, onode);
};
if (cnode){
closed.remove(cnode.key());
};
_local4 = new AstarNode();
_local4.pos = _local2;
_local4.g = tempg;
_local4.h = temph;
_local4.f = curf;
_local4.parent = node;
addToOpened(_local4);
};
};
};
closed.add(node.key(), node);
};
return (false);
}
public function checkwallid(_arg1:uint, _arg2:uint):Boolean{
var _local3:uint;
_local3 = map.getxy(_arg1, _arg2);
return (((!((_local3 == Consts.Wall))) && (!((_local3 == tid)))));
}
public function neighbours(_arg1:Position):void{
ns.length = 0;
if (_arg1.x > 0){
if (checkxy((_arg1.x - 1), _arg1.y)){
ns.push(new Position((_arg1.x - 1), _arg1.y));
};
if ((((_arg1.y < (map.v - 1))) && (checkxy((_arg1.x - 1), (_arg1.y + 1))))){
ns.push(new Position((_arg1.x - 1), (_arg1.y + 1)));
};
if ((((_arg1.y > 0)) && (checkxy((_arg1.x - 1), (_arg1.y - 1))))){
ns.push(new Position((_arg1.x - 1), (_arg1.y - 1)));
};
};
if ((((_arg1.y > 0)) && (checkxy(_arg1.x, (_arg1.y - 1))))){
ns.push(new Position(_arg1.x, (_arg1.y - 1)));
};
if (_arg1.x < (map.h - 1)){
if (checkxy((_arg1.x + 1), _arg1.y)){
ns.push(new Position((_arg1.x + 1), _arg1.y));
};
if ((((_arg1.y < (map.v - 1))) && (checkxy((_arg1.x + 1), (_arg1.y + 1))))){
ns.push(new Position((_arg1.x + 1), (_arg1.y + 1)));
};
if ((((_arg1.y > 0)) && (checkxy((_arg1.x + 1), (_arg1.y - 1))))){
ns.push(new Position((_arg1.x + 1), (_arg1.y - 1)));
};
};
if ((((_arg1.y < (map.v - 1))) && (checkxy(_arg1.x, (_arg1.y + 1))))){
ns.push(new Position(_arg1.x, (_arg1.y + 1)));
};
}
private function getBestNode():AstarNode{
var _local1:AstarNode;
_local1 = openedMap.shift();
opened.remove(_local1.key());
return (_local1);
}
}
}//package fai
class AstarNode {
public var f:uint;// = 0
public var g:uint;// = 0
public var h:uint;// = 0
public var parent:AstarNode;// = null
public var pos:Position;// = null
private function AstarNode(){
f = 0;
g = 0;
h = 0;
parent = null;
pos = null;
super();
}
public function key():uint{
return (((pos.x * 1000) + pos.y));
}
}
class AstarMap extends Map {
private function AstarMap(){
}
public function removeNode(_arg1:int, _arg2:AstarNode):void{
var _local3:int;
if (find(_arg1)){
if (!values[index_].pos.isequal(_arg2.pos)){
_local3 = (index_ - 1);
while ((((_local3 >= 0)) && ((keys[_local3] == _arg1)))) {
if (values[_local3].pos.isequal(_arg2.pos)){
keys.splice(_local3, 1);
values.splice(_local3, 1);
return;
};
_local3--;
};
_local3 = (index_ + 1);
while ((((_local3 < keys.length)) && ((keys[_local3] == _arg1)))) {
if (values[_local3].pos.isequal(_arg2.pos)){
keys.splice(_local3, 1);
values.splice(_local3, 1);
return;
};
_local3++;
};
trace("ERROR ___ 1");
} else {
keys.splice(index_, 1);
values.splice(index_, 1);
};
};
}
}
Section 3
//AttackGoal (fai.AttackGoal)
package fai {
public class AttackGoal extends Goal {
public var preciseTarget:Unit;// = null
public var attacktarget:Unit;// = null
private var onlyFlying:Boolean;// = false
private var recharging:int;// = 0
public var paused:Boolean;// = false
private var onlyLand:Boolean;// = false
private var precisePos:Position;// = null
public var hostilecamp:Camp;// = null
public function AttackGoal(_arg1:Unit, _arg2:Camp):void{
hostilecamp = null;
attacktarget = null;
onlyFlying = false;
onlyLand = false;
recharging = 0;
paused = false;
preciseTarget = null;
precisePos = null;
super();
owner = _arg1;
hostilecamp = _arg2;
if (!owner.flag(UnitFlags.Antiaircraft)){
onlyLand = true;
};
if (!owner.flag(UnitFlags.Antilandforces)){
onlyFlying = true;
};
}
public function advance():void{
var _local1:Unit;
_local1 = null;
if (Consts.ATTACK == owner.cstate){
if (recharging > 0){
recharging--;
if (((((!(recharging)) && (!(paused)))) && (!(preciseAttack())))){
_local1 = hostilecamp.getNearestUnit(owner.pos, owner.eyerange, onlyFlying, onlyLand);
if (_local1 != null){
owner.startattack(_local1);
} else {
owner.reset();
owner.sprite.setMoveSprite();
return;
};
};
} else {
owner.attack();
};
if ((((Consts.IDLE == owner.cstate)) && (!(paused)))){
if (preciseAttack()){
recharging = owner.rechargetime;
} else {
_local1 = hostilecamp.getNearestUnit(owner.pos, owner.eyerange, onlyFlying, onlyLand);
if (_local1 != null){
recharging = owner.rechargetime;
owner.startattack(_local1);
} else {
owner.sprite.setMoveSprite();
};
};
};
} else {
if ((((((Consts.IDLE == owner.cstate)) && (!(paused)))) && (!(preciseAttack())))){
_local1 = hostilecamp.getNearestUnit(owner.pos, owner.eyerange, onlyFlying, onlyLand);
if (_local1 != null){
owner.startattack(_local1);
};
};
};
}
public function preciseAttack():Boolean{
var _local1:int;
var _local2:int;
var _local3:Boolean;
if (!preciseTarget){
return (false);
};
if (!preciseTarget.isLive()){
clearPreciseTarget();
return (false);
};
if (((((preciseTarget.flag(UnitFlags.Flying)) && (!(owner.flag(UnitFlags.Antiaircraft))))) || (((!(preciseTarget.flag(UnitFlags.Flying))) && (!(owner.flag(UnitFlags.Antilandforces))))))){
clearPreciseTarget();
return (false);
};
_local1 = (owner.pos.x - preciseTarget.pos.x);
_local2 = (owner.pos.y - preciseTarget.pos.y);
_local3 = (Math.sqrt(((_local1 * _local1) + (_local2 * _local2))) <= owner.eyerange);
if (!_local3){
if (owner.flag(UnitFlags.Building)){
clearPreciseTarget();
return (false);
};
if (((!(precisePos)) || (!(precisePos.isequal(preciseTarget.pos))))){
owner.life.move(preciseTarget.pos);
precisePos = preciseTarget.pos;
};
return (true);
};
owner.startattack(preciseTarget);
return (true);
}
public function clearPreciseTarget():void{
precisePos = null;
preciseTarget = null;
}
}
}//package fai
Section 4
//BulletGoal (fai.BulletGoal)
package fai {
import flash.display.*;
public class BulletGoal extends Goal {
private var engine:Engine;// = null
private var sprite:AnimatedBitmap;// = null
private var gip:int;// = 0
public var bullet:Sprite;
private var hitpos:Position;// = null
private var framen:int;// = 0
private var assaulter:Unit;// = null
private var subject:Unit;// = null
private var expl:AnimatedBitmap;// = null
public function BulletGoal(_arg1:Unit, _arg2:Unit, _arg3:Position, _arg4:Engine):void{
var _local5:int;
var _local6:int;
assaulter = null;
subject = null;
sprite = null;
expl = null;
engine = null;
gip = 0;
hitpos = null;
bullet = new Sprite();
framen = 0;
super();
engine = _arg4;
assaulter = _arg1;
subject = _arg2;
sprite = new AnimatedBitmap(assaulter.sprite.bullet, assaulter.sprite.bullet.width, assaulter.sprite.bullet.height);
expl = new AnimatedBitmap(assaulter.sprite.bulletexp, assaulter.sprite.bulletexp.height, assaulter.sprite.bulletexp.height);
bullet.addChild(sprite);
expl.visible = false;
bullet.addChild(expl);
sprite.x = (sprite.x - (sprite.width / 2));
sprite.y = (sprite.y - (sprite.height / 2));
expl.y = (expl.y + (sprite.height - (expl.height / 2)));
hitpos = subject.pos;
bullet.x = _arg1.sprite.x;
bullet.y = _arg1.sprite.y;
bullet.rotation = (((Math.atan2((_arg3.y - _arg1.sprite.y), (_arg3.x - _arg1.sprite.x)) / Math.PI) * 180) - 90);
_local5 = (subject.pos.x - assaulter.pos.x);
_local6 = (subject.pos.y - assaulter.pos.y);
gip = (Math.sqrt(((_local5 * _local5) + (_local6 * _local6))) * Consts.cellsize);
}
public function advance():void{
if (gip <= 0){
if (framen < expl.nframes){
expl.setFrame(framen);
framen++;
return;
};
deactivate();
} else {
gip = (gip - assaulter.bulletspeed);
if (gip <= 0){
sprite.y = (sprite.y + (assaulter.bulletspeed + gip));
sprite.visible = false;
expl.x = sprite.x;
expl.y = sprite.y;
expl.visible = true;
engine.hitUnit(assaulter.damage, subject);
if (assaulter.flag(UnitFlags.Frozenable)){
engine.froze(subject);
};
if (!subject.isLive()){
assaulter.killed++;
if (engine.isSelectedUnit(assaulter)){
engine.updateMenu();
};
};
} else {
sprite.y = (sprite.y + assaulter.bulletspeed);
};
};
}
override public function deactivate():void{
super.deactivate();
if (bullet){
bullet.removeChild(sprite);
bullet.removeChild(expl);
engine.bulletlayer.removeChild(bullet);
sprite = null;
assaulter = (subject = null);
bullet = null;
};
}
}
}//package fai
Section 5
//Camp (fai.Camp)
package fai {
public class Camp {
public var units:Array;
public function Camp(){
units = new Array();
super();
}
public function getUnder(_arg1:Position):Unit{
var _local2:Unit;
var _local3:int;
_local2 = null;
_local3 = 0;
while (_local3 < units.length) {
_local2 = units[_local3];
if (((((((((_local2.sprite.x - (_local2.spritewidth / 2)) <= _arg1.x)) && ((_arg1.x < (_local2.sprite.x + (_local2.spritewidth / 2)))))) && (((_local2.sprite.y - (_local2.sprite.height / 2)) <= _arg1.y)))) && ((_arg1.y < (_local2.sprite.y + (_local2.sprite.height / 2)))))){
return (_local2);
};
_local3++;
};
return (null);
}
public function remove(_arg1:Unit):void{
var _local2:uint;
_local2 = 0;
while (_local2 < units.length) {
if (units[_local2] == _arg1){
delete units[_local2];
units.splice(_local2, 1);
break;
};
_local2++;
};
}
public function add(_arg1:Unit):void{
units[units.length] = _arg1;
}
public function getUnderSelection(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:Array):void{
var _local6:Unit;
var _local7:int;
_arg5.length = 0;
_local6 = null;
_local7 = 0;
while (_local7 < units.length) {
_local6 = units[_local7];
if ((((((((((_local6.pos.x >= _arg1)) && ((_local6.pos.x <= (_arg1 + _arg3))))) && ((_local6.pos.y >= _arg2)))) && ((_local6.pos.y <= (_arg2 + _arg4))))) && (!(((_local6.flag(UnitFlags.Building)) && (_local6.flag(UnitFlags.Peaceful))))))){
_arg5.push(_local6);
};
_local7++;
};
}
public function getNearestUnit(_arg1:Position, _arg2:int, _arg3:Boolean, _arg4:Boolean):Unit{
var _local5:Unit;
var _local6:int;
var _local7:Unit;
var _local8:int;
var _local9:int;
_local5 = null;
_local6 = 9999999;
_local7 = null;
_local8 = 0;
while (_local8 < units.length) {
_local7 = units[_local8];
if (((((_arg3) && (!(_local7.flag(UnitFlags.Flying))))) || (((_arg4) && (_local7.flag(UnitFlags.Flying)))))){
} else {
_local9 = distanceFrom(_arg1, _local7);
if (_local9 <= _arg2){
if (_local9 < _local6){
_local6 = _local9;
_local5 = _local7;
};
};
};
_local8++;
};
return (_local5);
}
public function size():uint{
return (units.length);
}
public function getNearUnits(_arg1:Position, _arg2:int):Array{
var _local3:Array;
var _local4:Unit;
var _local5:int;
var _local6:int;
_local3 = new Array();
_local4 = null;
_local5 = 0;
while (_local5 < units.length) {
_local4 = units[_local5];
_local6 = distanceFrom(_arg1, _local4);
if (_local6 <= _arg2){
_local3.push(_local4);
};
_local5++;
};
return (_local3);
}
public function getNearUnitById(_arg1:Position, _arg2:int, _arg3:int):Unit{
var _local4:Unit;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local4 = null;
_local5 = 0;
while (_local5 < units.length) {
_local4 = units[_local5];
if (_local4.mapid != _arg3){
} else {
_local6 = (_local4.pos.x - _arg1.x);
_local7 = (_local4.pos.y - _arg1.y);
_local8 = Math.sqrt(((_local6 * _local6) + (_local7 * _local7)));
if (_local8 <= _arg2){
return (_local4);
};
};
_local5++;
};
return (null);
}
public function isUnitNear(_arg1:Position, _arg2:int):Boolean{
var _local3:Unit;
var _local4:int;
var _local5:int;
_local3 = null;
_local4 = 0;
while (_local4 < units.length) {
_local3 = units[_local4];
_local5 = distanceFrom(_arg1, _local3);
if (_local5 <= _arg2){
return (true);
};
_local4++;
};
return (false);
}
public function getInMapUnder(_arg1:Position):Unit{
var _local2:Unit;
var _local3:int;
_local2 = null;
_local3 = 0;
while (_local3 < units.length) {
_local2 = units[_local3];
if ((((_local2.pos.x == _arg1.x)) && ((_local2.pos.y == _arg1.y)))){
return (_local2);
};
_local3++;
};
return (null);
}
public function getNearestByType(_arg1:String, _arg2:Position):Unit{
var _local3:Unit;
var _local4:Unit;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local3 = null;
_local4 = null;
_local5 = 9999999;
_local6 = 0;
while (_local6 < units.length) {
_local3 = units[_local6];
if (_local3.type == _arg1){
_local7 = (_local3.pos.x - _arg2.x);
_local8 = (_local3.pos.y - _arg2.y);
_local9 = Math.sqrt(((_local7 * _local7) + (_local8 * _local8)));
if (_local9 < _local5){
_local4 = _local3;
_local5 = _local9;
};
};
_local6++;
};
return (_local4);
}
public function getNearestById(_arg1:int, _arg2:Position):Unit{
var _local3:Unit;
var _local4:Unit;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local3 = null;
_local4 = null;
_local5 = 9999999;
_local6 = 0;
while (_local6 < units.length) {
_local3 = units[_local6];
if (_local3.mapid == _arg1){
_local7 = (_local3.pos.x - _arg2.x);
_local8 = (_local3.pos.y - _arg2.y);
_local9 = Math.sqrt(((_local7 * _local7) + (_local8 * _local8)));
if (_local9 < _local5){
_local4 = _local3;
_local5 = _local9;
};
};
_local6++;
};
return (_local4);
}
public static function distanceFrom(_arg1:Position, _arg2:Unit):int{
var _local3:int;
var _local4:int;
_local3 = (_arg2.pos.x - _arg1.x);
_local4 = (_arg2.pos.y - _arg1.y);
return (Math.sqrt(((_local3 * _local3) + (_local4 * _local4))));
}
}
}//package fai
Section 6
//Consts (fai.Consts)
package fai {
public class Consts {
public static const maxLogMsgs:int = 10;
public static const upgradeHExtra:Number = 1;
public static const Normal:int = 2;
public static const ATTACK:uint = 1;
public static const UNIT_LEAVE_COUNT:int = 100;
public static const UnitWaveCount:int = 30;
public static const Extreme:int = 4;
public static const MOVING:uint = 2;
public static const upgradeDExtra:Number = 1;
public static const IDLE:uint = 0;
public static const cellsize:uint = 9;
public static const softId:uint = 5;
public static const myId:uint = 3;
public static const Easy:int = 1;
public static const Wall:uint = 1;
public static const cornerWindow:int = 150;
public static const GOALSCLEANPAUSE:uint = 10;
public static const FrozenTime:int = 100;
public static const hostileId:uint = 4;
public static const DEATH:uint = 3;
public static const Hard:int = 3;
public static const defaultScrollSpeed:int = 50;
public static const SoftShotDamage:int = 25;
public static const FrozenMoveSteps:int = 10;
}
}//package fai
Section 7
//DieGoal (fai.DieGoal)
package fai {
import flash.display.*;
public class DieGoal extends Goal {
public var engine:Engine;// = null
private var spriteScale:Number;// = 1
public var unit:Unit;// = null
private var lifegoal:LifeGoal;// = null
private var framen:int;// = 0
private var esprite:Sprite;// = null
private var expl:AnimatedBitmap;// = null
private var pause:int;// = 0
private var leave:int;// = 100
private var debris:AnimatedBitmap;// = null
public function DieGoal(_arg1:Unit, _arg2:Engine, _arg3:LifeGoal):void{
unit = null;
engine = null;
leave = Consts.UNIT_LEAVE_COUNT;
lifegoal = null;
expl = null;
debris = null;
pause = 0;
spriteScale = 1;
esprite = null;
framen = 0;
super();
unit = _arg1;
engine = _arg2;
lifegoal = _arg3;
unit.destroy();
expl = new AnimatedBitmap(engine.sloader.specials[UnitTypes.spdeath1], 32, 32);
debris = new AnimatedBitmap(engine.sloader.specials[UnitTypes.spdebris], 32, 32);
esprite = new Sprite();
expl.x = (expl.x - (unit.spritewidth / 2));
expl.y = (expl.y - (unit.sprite.sprite.height / 2));
expl.x = (expl.x + ((unit.spritewidth - expl.width) / 2));
expl.y = (expl.y + ((unit.sprite.sprite.height - expl.height) / 2));
esprite.scaleX = (esprite.scaleY = (_arg1.spritewidth / 32));
debris.x = expl.x;
debris.y = expl.y;
debris.visible = false;
esprite.addChild(expl);
esprite.addChild(debris);
unit.sprite.body.addChild(esprite);
engine.playSound(engine.sloader.sounds[UnitTypes.sounddeath], unit.pos);
}
public function advance():void{
if (pause > 0){
pause--;
return;
};
if (expl.framen < expl.nframes){
spriteScale = (spriteScale - 0.2);
unit.sprite.sprite.alpha = spriteScale;
framen++;
expl.setFrame(framen);
return;
};
if (leave > 0){
if (leave == Consts.UNIT_LEAVE_COUNT){
expl.visible = false;
if (!unit.flag(UnitFlags.Flying)){
debris.visible = true;
};
unit.sprite.sprite.visible = false;
};
leave--;
return;
};
deactivate();
}
override public function deactivate():void{
super.deactivate();
lifegoal.destroy(true);
}
}
}//package fai
Section 8
//DifficultyParams (fai.DifficultyParams)
package fai {
public class DifficultyParams {
public var nwaves:int;// = 0
public var divquotient:Number;// = 0
public function DifficultyParams(_arg1:int):void{
nwaves = 0;
divquotient = 0;
super();
switch (_arg1){
case Consts.Easy:
nwaves = 50;
divquotient = 2.5;
break;
case Consts.Normal:
nwaves = 100;
divquotient = 1.3;
break;
case Consts.Hard:
nwaves = 150;
divquotient = 1;
break;
case Consts.Extreme:
nwaves = 200;
divquotient = 0.7;
break;
};
}
}
}//package fai
Section 9
//EffectGoal (fai.EffectGoal)
package fai {
public class EffectGoal extends Goal {
public var engine:Engine;// = null
public var sprite:AnimatedBitmap;// = null
private var pause:int;// = 0
private var frame:int;// = 0
public function EffectGoal(_arg1:AnimatedBitmap, _arg2:Engine):void{
sprite = null;
engine = null;
pause = 0;
frame = 0;
super();
engine = _arg2;
sprite = _arg1;
}
public function advance():void{
if (pause > 0){
pause--;
return;
};
if (frame >= sprite.nframes){
deactivate();
} else {
sprite.setFrame(frame);
frame++;
pause = 1;
return;
};
}
override public function deactivate():void{
super.deactivate();
if (sprite){
engine.bulletlayer.removeChild(sprite);
sprite = null;
};
}
}
}//package fai
Section 10
//Engine (fai.Engine)
package fai {
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.text.*;
public class Engine {
public var resourcelayer:Sprite;// = null
public var camps:Array;
public var gamewidth:int;// = 0
public var comp:Player;// = null
public var events:GameEvents;// = null
public var currentMap:LevelMap;// = null
public var utypes:UnitTypes;// = null
public var userid:int;// = 0
public var soft:Camp;
public var paused:Boolean;// = false
public var groundlayer:Sprite;// = null
public var globalstage:MovieClip;// = null
public var sloader:SmartLoader;// = null
public var airlayer:Sprite;// = null
public var unitlayer:Sprite;// = null
private var backbitmaps:Array;
public var menu:GameMenu;// = null
public var maplayer:Sprite;// = null
public var ccursor:MouseCursor;// = null
public var mapheight:int;// = 0
public var airworld:MapMatrix;// = null
public var bulletlayer:Sprite;// = null
public var scenario:Scenario;// = null
public var nechelons:int;// = 0
public var world:MapMatrix;// = null
public var selectedUnits:Array;
public var selshape:Shape;// = null
public var score:int;// = 0
public var gamesid:String;// = ""
public var gameheight:int;// = 0
public var scrollspeed:int;
public var my:Player;// = null
private var frozenUnits:Map;// = null
public var wtxt:TextField;// = null
public var difficulty:int;// = 0
public var logmsg:Array;
public var goals:Array;
public var money:int;// = 0
public var buildGrid:Shape;// = null
public var backimage:AnimatedBitmap;// = null
public var mapwidth:int;// = 0
private var counter:int;// = 0
public var actions:GameActions;// = null
public static var stageRadius = 0;
public function Engine(_arg1:MovieClip, _arg2:SmartLoader):void{
goals = new Array();
world = null;
airworld = null;
camps = new Array();
counter = 0;
globalstage = null;
maplayer = null;
resourcelayer = null;
unitlayer = null;
groundlayer = null;
airlayer = null;
bulletlayer = null;
selshape = null;
backimage = null;
ccursor = null;
sloader = null;
my = null;
comp = null;
soft = new Camp();
menu = null;
utypes = null;
money = 0;
score = 0;
paused = false;
scenario = null;
scrollspeed = Consts.defaultScrollSpeed;
mapwidth = 0;
mapheight = 0;
gamewidth = 0;
gameheight = 0;
wtxt = null;
actions = null;
events = null;
logmsg = new Array();
backbitmaps = new Array();
nechelons = 0;
gamesid = "";
userid = 0;
selectedUnits = new Array();
currentMap = null;
frozenUnits = null;
difficulty = 0;
buildGrid = null;
super();
gamewidth = 800;
gameheight = 600;
sloader = _arg2;
sloader.engine = this;
globalstage = _arg1;
utypes = new UnitTypes(sloader);
utypes.engine = this;
KeyboardKeys.init(globalstage);
actions = new GameActions(this);
events = new GameEvents(this);
}
public function endSelection():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:Array;
events.selecting = false;
selshape.graphics.clear();
_local1 = (events.downPoint.x - unitlayer.mouseX);
_local2 = (events.downPoint.y - unitlayer.mouseY);
if ((((_local1 == 0)) || ((_local2 == 0)))){
return;
};
_local3 = events.downPoint.x;
_local4 = events.downPoint.y;
if (_local2 > 0){
_local4 = unitlayer.mouseY;
};
if (_local1 > 0){
_local3 = unitlayer.mouseX;
};
_local5 = new Array();
my.camp.getUnderSelection(Math.floor(((_local3 / Consts.cellsize) + 0.5)), Math.floor(((_local4 / Consts.cellsize) + 0.5)), Math.floor(((Math.abs(_local1) / Consts.cellsize) + 0.5)), Math.floor(((Math.abs(_local2) / Consts.cellsize) + 0.5)), _local5);
if (_local5.length > 0){
deselectUnits();
selectedUnits = _local5;
updateMenu();
};
}
public function isSelectedUnit(_arg1:Unit):Boolean{
if ((((selectedUnits.length == 1)) && ((selectedUnits[0] == _arg1)))){
return (true);
};
return (false);
}
public function buildUnit(_arg1:String, _arg2:int, _arg3:int, _arg4:Boolean):Unit{
var _local5:Unit;
var _local6:Camp;
_local5 = utypes.createUnit(_arg1);
_local5.pos.set(_arg2, _arg3);
addUnit(_local5);
if (((_arg4) && (!(_local5.flag(UnitFlags.Peaceful))))){
_local6 = ((_local5.mapid == Consts.myId)) ? comp.camp : my.camp;
_local5.life.attack(_local6);
};
return (_local5);
}
public function restart(_arg1:int):void{
difficulty = _arg1;
events.register();
menu.reset();
menu.resources.update();
scenario.start();
actions.clear(true);
updateMenu();
}
private function fillWalls(_arg1:int, _arg2:int, _arg3:int, _arg4:int):void{
var _local5:int;
var _local6:int;
_local5 = _arg1;
while (_local5 < _arg3) {
_local6 = _arg2;
while (_local6 < _arg4) {
world.setxy(_local5, _local6, Consts.Wall);
airworld.setxy(_local5, _local6, Consts.Wall);
_local6++;
};
_local5++;
};
}
private function removeUnit(_arg1:Unit):void{
var _local2:Camp;
_local2 = null;
if (_arg1.mapid == Consts.myId){
_local2 = my.camp;
} else {
if (_arg1.mapid == Consts.hostileId){
_local2 = comp.camp;
} else {
if (_arg1.mapid == Consts.softId){
_local2 = soft;
};
};
};
if (_local2){
_local2.remove(_arg1);
};
if (_arg1.flag(UnitFlags.Flying)){
airworld.setpos(_arg1.pos, 0);
} else {
if (((_arg1.flag(UnitFlags.Building)) && ((_arg1.spritewidth > Consts.cellsize)))){
setUnitPos(_arg1, 0);
} else {
world.setpos(_arg1.pos, 0);
};
};
}
public function moveEntireMap(_arg1:int, _arg2:int):void{
var _local3:int;
var _local4:int;
_local3 = (maplayer.x + _arg1);
_local4 = (maplayer.y + _arg2);
if (_arg1 != 0){
if (_local3 > 0){
maplayer.x = 0;
} else {
if ((Math.abs(_local3) + gamewidth) > (mapwidth * Consts.cellsize)){
maplayer.x = ((-(mapwidth) * Consts.cellsize) + gamewidth);
} else {
maplayer.x = _local3;
};
};
};
if (_arg2 != 0){
if (_local4 > 0){
maplayer.y = 0;
} else {
if ((Math.abs(_local4) + gameheight) > (mapheight * Consts.cellsize)){
maplayer.y = ((-(mapheight) * Consts.cellsize) + gameheight);
backimage.y = (Math.abs(((-(mapheight) * Consts.cellsize) + gameheight)) - (Consts.cellsize / 2));
} else {
maplayer.y = _local4;
backimage.y = (Math.abs(_local4) - (Consts.cellsize / 2));
};
};
};
}
public function loadLevel(_arg1:LevelMap):void{
var _local2:Unit;
var _local3:XMLList;
var _local4:XML;
mapwidth = _arg1.data.size.@width;
mapheight = _arg1.data.size.@height;
stageRadius = (Math.sqrt(((gamewidth * gamewidth) + (gameheight * gameheight))) / 3);
world = new MapMatrix(mapwidth, mapheight);
airworld = new MapMatrix(mapwidth, mapheight);
createLayers();
fillWalls(0, 13, 23, 16);
fillWalls(45, 13, 69, 16);
my = new Player(this);
comp = new Player(this);
camps.length = 0;
camps.push(my.camp);
camps.push(comp.camp);
_local2 = null;
_local3 = _arg1.data.unit;
for each (_local4 in _local3) {
buildUnit(_local4.@type, _local4.@x, _local4.@y, true);
};
nechelons = _arg1.data.scenario.nechelons.@value;
wtxt = Utils.createTextField(0xFFFFFF, 12);
wtxt.y = 30;
globalstage.addChildAt(wtxt, 1);
money = _arg1.data.scenario.smoney.@value;
moveEntireMap(0, (-(mapheight) * Consts.cellsize));
}
public function removeBuildCursor():void{
if (ccursor){
ccursor.remove();
unitlayer.removeChild(ccursor);
ccursor = null;
buildGrid.visible = false;
};
}
public function log(_arg1:String):void{
logmsg.push(_arg1);
updateLog();
if (events.logTimer){
events.logTimer.start();
};
}
public function playSound(_arg1:Sound, _arg2:Position):void{
var _local3:SoundTransform;
var _local4:int;
var _local5:int;
var _local6:int;
if (!menu.volume){
return;
};
_local3 = new SoundTransform();
_local4 = ((Math.abs(unitlayer.x) + (gamewidth / 2)) - (_arg2.x * Consts.cellsize));
_local5 = ((Math.abs(unitlayer.y) + (gameheight / 2)) - (_arg2.y * Consts.cellsize));
_local6 = Math.sqrt(((_local4 * _local4) + (_local5 * _local5)));
_local3.volume = (menu.volume / (1 + (_local6 / stageRadius)));
_local3.pan = -((1 - (Math.abs(((Math.atan2(_local5, _local4) / Math.PI) * 180)) / 90)));
_arg1.play(0, 0, _local3);
}
public function isUnitInSelection(_arg1:Unit):Boolean{
var _local2:Unit;
for each (_local2 in selectedUnits) {
if (_local2 == _arg1){
return (true);
};
};
return (false);
}
private function createLayers():void{
var _local1:BitmapData;
var _local2:int;
var _local3:int;
var _local4:int;
_local1 = sloader.grounds["background.png"];
backimage = new AnimatedBitmap(_local1, _local1.width, _local1.height);
maplayer = new Sprite();
globalstage.addChildAt(maplayer, 0);
unitlayer = new Sprite();
unitlayer.x = (unitlayer.x + (Consts.cellsize / 2));
unitlayer.y = (unitlayer.y + (Consts.cellsize / 2));
maplayer.addChildAt(unitlayer, 0);
backimage.x = (backimage.x - (Consts.cellsize / 2));
backimage.y = (backimage.y - (Consts.cellsize / 2));
unitlayer.addChildAt(backimage, 0);
resourcelayer = new Sprite();
unitlayer.addChildAt(resourcelayer, 1);
groundlayer = new Sprite();
unitlayer.addChildAt(groundlayer, 2);
airlayer = new Sprite();
unitlayer.addChildAt(airlayer, 3);
bulletlayer = new Sprite();
unitlayer.addChildAt(bulletlayer, 4);
selshape = new Shape();
selshape.alpha = 0.3;
unitlayer.addChildAt(selshape, 5);
buildGrid = new Shape();
buildGrid.graphics.lineStyle(2, 0xFFFFFF);
_local2 = 65;
_local3 = 0;
while (_local3 <= mapwidth) {
if ((_local3 % 2) == 0){
buildGrid.graphics.moveTo(((_local3 * Consts.cellsize) - 4), _local2);
buildGrid.graphics.lineTo(((_local3 * Consts.cellsize) - 4), (gameheight - 140));
};
_local3++;
};
_local4 = 0;
while (_local4 < (mapheight - 29)) {
if ((_local4 % 2) == 0){
buildGrid.graphics.moveTo(0, ((_local4 * Consts.cellsize) + _local2));
buildGrid.graphics.lineTo((gamewidth - 192), ((_local4 * Consts.cellsize) + _local2));
};
_local4++;
};
buildGrid.alpha = 0.15;
globalstage.addChild(buildGrid);
buildGrid.visible = false;
}
public function stopall():void{
var _local1:Unit;
var _local2:int;
if (scenario){
paused = true;
scenario.stop();
scenario = null;
events.unregister();
actions.clear(true);
_local1 = null;
_local2 = 0;
_local2 = 0;
while (_local2 < my.camp.units.length) {
_local1 = my.camp.units[_local2];
_local1.life.destroy(true);
_local2++;
};
_local2 = 0;
while (_local2 < comp.camp.units.length) {
_local1 = comp.camp.units[_local2];
_local1.life.destroy(true);
_local2++;
};
_local2 = 0;
while (_local2 < soft.units.length) {
_local1 = soft.units[_local2];
_local1.life.destroy(true);
_local2++;
};
_local2 = 0;
while (_local2 < goals.length) {
if ((goals[_local2] is LifeGoal)){
goals[_local2].destroy(true);
} else {
if (goals[_local2].active){
goals[_local2].deactivate();
};
};
_local2++;
};
goals.length = 0;
world = null;
airworld = null;
camps.length = 0;
counter = 0;
frozenUnits = null;
selshape.graphics.clear();
if (ccursor){
removeBuildCursor();
};
selectedUnits.length = 0;
my.camp.units.length = 0;
comp.camp.units.length = 0;
soft.units.length = 0;
utypes = null;
money = 0;
score = 0;
menu.stat.reset();
mapwidth = 0;
mapheight = 0;
globalstage.removeChild(wtxt);
wtxt = null;
logmsg.length = 0;
globalstage.removeChild(maplayer);
unitlayer.removeChild(backimage);
backimage = null;
unitlayer.removeChild(groundlayer);
groundlayer = null;
unitlayer.removeChild(airlayer);
airlayer = null;
unitlayer.removeChild(bulletlayer);
bulletlayer = null;
unitlayer.removeChild(selshape);
selshape = null;
maplayer.removeChild(unitlayer);
unitlayer = null;
maplayer = null;
if (buildGrid){
buildGrid.graphics.clear();
globalstage.removeChild(buildGrid);
buildGrid = null;
};
paused = false;
};
}
public function createBuildingCursor(_arg1:String):void{
var _local2:Unit;
var _local3:AnimatedBitmap;
if (ccursor){
removeBuildCursor();
};
_local2 = utypes.params(_arg1);
_local3 = new AnimatedBitmap(sloader.getBody(_arg1), _local2.spritewidth, sloader.getBody(_arg1).height);
ccursor = new MouseCursor(this, _arg1, _local3, _local2.eyerange, _local2.cost, _local2.spritewidth);
ccursor.visible = events.mouseWithinMap;
unitlayer.addChild(ccursor);
buildGrid.visible = true;
}
public function runBullet(_arg1:Unit, _arg2:Unit, _arg3:Position):void{
var _local4:FirewallCircle;
var _local5:BulletGoal;
if (_arg1.flag(UnitFlags.Firewall)){
_local4 = new FirewallCircle(this, _arg1, _arg2);
_local4.x = _arg1.sprite.x;
_local4.y = _arg1.sprite.y;
bulletlayer.addChild(_local4);
} else {
_local5 = new BulletGoal(_arg1, _arg2, _arg3, this);
bulletlayer.addChild(_local5.bullet);
goals[goals.length] = _local5;
};
}
private function setUnitPos(_arg1:Unit, _arg2:int):void{
var _local3:MapMatrix;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
_local3 = (_arg1.flag(UnitFlags.Flying)) ? airworld : world;
_local4 = Math.floor(((_arg1.spritewidth / Consts.cellsize) + 0.5));
_local5 = Math.floor(((_arg1.sprite.height / Consts.cellsize) + 0.5));
_local6 = ((_arg1.pos.x - (_local4 / 2)) + 1);
while (_local6 < ((_arg1.pos.x + (_local4 / 2)) + 1)) {
_local7 = ((_arg1.pos.y - (_local5 / 2)) + 1);
while (_local7 < ((_arg1.pos.y + (_local5 / 2)) + 1)) {
if ((((((((_local6 < _local3.h)) && ((_local6 >= 0)))) && ((_local7 >= 0)))) && ((_local7 < _local3.v)))){
_local3.setxy(_local6, _local7, _arg2);
};
_local7++;
};
_local6++;
};
}
public function checkCursor():void{
var _local1:uint;
var _local2:uint;
var _local3:Boolean;
var _local4:Boolean;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
if (ccursor != null){
_local1 = Math.floor(((unitlayer.mouseX / Consts.cellsize) + 0.5));
_local2 = Math.floor(((unitlayer.mouseY / Consts.cellsize) + 0.5));
_local3 = true;
if ((_local1 % 2) == 0){
_local1--;
};
if ((_local2 % 2) == 0){
_local2--;
};
if (((!((ccursor.x == (_local1 * Consts.cellsize)))) || (!((ccursor.y == (_local2 * Consts.cellsize)))))){
ccursor.x = (_local1 * Consts.cellsize);
ccursor.y = (_local2 * Consts.cellsize);
if ((((((((_local2 < 17)) || ((_local2 > 58)))) || ((_local1 < 1)))) || ((_local1 > 65)))){
ccursor.setGood(false);
ccursor.visible = true;
return;
};
ccursor.visible = true;
if (ccursor.spritewidth > Consts.cellsize){
_local4 = false;
_local5 = Math.floor(((ccursor.spritewidth / Consts.cellsize) + 0.5));
_local6 = Math.floor(((ccursor.bitmap.height / Consts.cellsize) + 0.5));
_local7 = ((_local1 - (_local5 / 2)) + 1);
while (_local7 < ((_local1 + (_local5 / 2)) + 1)) {
_local8 = ((_local2 - (_local6 / 2)) + 1);
while (_local8 < ((_local2 + (_local6 / 2)) + 1)) {
if ((((((((_local7 < world.h)) && ((_local7 >= 0)))) && ((_local8 >= 0)))) && ((_local8 < world.v)))){
if (world.getxy(_local7, _local8) != 0){
_local3 = false;
_local4 = true;
break;
};
};
_local8++;
};
if (_local4){
break;
};
_local7++;
};
} else {
if (world.getxy(_local1, _local2) != 0){
_local3 = false;
};
};
ccursor.setGood(_local3);
};
};
}
public function isBlocking(_arg1:String, _arg2:int, _arg3:int):Boolean{
var _local4:Astar;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:MapMatrix;
var _local11:Boolean;
_local4 = new Astar(world, Consts.myId);
_local4.startSearch(new Position(0, 0), new Position(38, 61));
_local5 = utypes.params(_arg1).spritewidth;
_local6 = Math.floor(((_local5 / Consts.cellsize) + 0.5));
_local7 = Math.floor(((_local5 / Consts.cellsize) + 0.5));
_local8 = 0;
_local9 = 0;
_local10 = new MapMatrix(_local6, _local7);
_local8 = ((_arg2 - (_local6 / 2)) + 1);
while (_local8 < ((_arg2 + (_local6 / 2)) + 1)) {
_local9 = ((_arg3 - (_local7 / 2)) + 1);
while (_local9 < ((_arg3 + (_local7 / 2)) + 1)) {
if ((((((((_local8 < world.h)) && ((_local8 >= 0)))) && ((_local9 >= 0)))) && ((_local9 < world.v)))){
_local10.setxy((_local8 - int(((_arg2 - (_local6 / 2)) + 1))), (_local9 - int(((_arg3 - (_local7 / 2)) + 1))), world.getxy(_local8, _local9));
world.setxy(_local8, _local9, Consts.myId);
};
_local9++;
};
_local8++;
};
_local11 = _local4.isPathExists();
_local8 = ((_arg2 - (_local6 / 2)) + 1);
while (_local8 < ((_arg2 + (_local6 / 2)) + 1)) {
_local9 = ((_arg3 - (_local7 / 2)) + 1);
while (_local9 < ((_arg3 + (_local7 / 2)) + 1)) {
if ((((((((_local8 < world.h)) && ((_local8 >= 0)))) && ((_local9 >= 0)))) && ((_local9 < world.v)))){
world.setxy(_local8, _local9, _local10.getxy((_local8 - int(((_arg2 - (_local6 / 2)) + 1))), (_local9 - int(((_arg3 - (_local7 / 2)) + 1)))));
};
_local9++;
};
_local8++;
};
return (!(_local11));
}
public function addResources(_arg1:int):void{
money = (money + _arg1);
menu.resources.update();
}
private function checkFrozenUnits():void{
var _local1:int;
var _local2:int;
var _local3:Unit;
_local1 = 0;
_local2 = 0;
while (_local1 < frozenUnits.keys.length) {
_local2 = frozenUnits.values[_local1];
_local2--;
if (_local2 <= 0){
_local3 = frozenUnits.keys[_local1];
_local3.movesteps = utypes.params(_local3.type).movesteps;
frozenUnits.keys.splice(_local1, 1);
frozenUnits.values.splice(_local1, 1);
} else {
frozenUnits.values[_local1] = _local2;
_local1++;
};
};
}
public function effect(_arg1:int, _arg2:int, _arg3:String):void{
var _local4:BitmapData;
var _local5:AnimatedBitmap;
var _local6:EffectGoal;
_local4 = sloader.specials[_arg3];
_local5 = new AnimatedBitmap(_local4, _local4.height, _local4.height);
_local5.x = _arg1;
_local5.y = _arg2;
bulletlayer.addChild(_local5);
_local6 = new EffectGoal(_local5, this);
goals[goals.length] = _local6;
}
public function froze(_arg1:Unit):void{
if (Consts.FrozenMoveSteps == _arg1.movesteps){
return;
};
_arg1.movesteps = Consts.FrozenMoveSteps;
frozenUnits.add(_arg1, Consts.FrozenTime);
}
public function destroyUnit(_arg1:Unit):void{
var _local2:uint;
removeUnit(_arg1);
if ((((_arg1.mapid == Consts.myId)) || ((_arg1.mapid == Consts.softId)))){
menu.stat.ilost++;
} else {
if (_arg1.mapid == Consts.hostileId){
menu.stat.ikilled++;
score = (score + _arg1.cost);
addResources(_arg1.deathcost);
menu.resources.update();
};
};
if (isUnitInSelection(_arg1)){
deselectUnit(_arg1);
};
if (ccursor){
checkCursor();
};
_local2 = 0;
while (_local2 < goals.length) {
if (goals[_local2].owner == _arg1){
goals[_local2].deactivate();
};
_local2++;
};
_arg1.health = 0;
_arg1.sprite.update();
}
public function tick(_arg1:Event):void{
var _local2:uint;
Astar.npasses = 300;
_local2 = 0;
while (_local2 < goals.length) {
if (goals[_local2].active){
goals[_local2].advance();
};
_local2++;
};
checkFrozenUnits();
if (!counter){
cleanGoals();
counter = Consts.GOALSCLEANPAUSE;
} else {
counter--;
};
}
public function loadMap(_arg1:LevelMap):void{
stopall();
utypes = new UnitTypes(sloader);
utypes.engine = this;
scenario = new Scenario(this);
frozenUnits = new Map();
loadLevel(_arg1);
currentMap = _arg1;
}
public function deselectUnits():void{
var _local1:Unit;
if (selectedUnits.length > 0){
for each (_local1 in selectedUnits) {
_local1.sprite.select(false);
};
selectedUnits.length = 0;
actions.clear(true);
};
}
public function playClick():void{
playSound(sloader.sounds[UnitTypes.soundclick], new Position(80, 50));
}
public function hitUnit(_arg1:int, _arg2:Unit):void{
if (!_arg2.isLive()){
return;
};
if (_arg2.mapid == Consts.hostileId){
score = (score + 1);
};
_arg2.health = (_arg2.health - (_arg1 - _arg2.armor));
if (((_arg2.sprite.selection) && (_arg2.sprite.selection.visible))){
_arg2.updateHealth();
};
if (!_arg2.isLive()){
destroyUnit(_arg2);
};
if (isUnitInSelection(_arg2)){
updateMenu();
};
menu.resources.update();
}
public function updateLog():void{
var _local1:String;
var _local2:String;
while (logmsg.length > Consts.maxLogMsgs) {
logmsg.shift();
};
_local1 = "";
for each (_local2 in logmsg) {
_local1 = (_local1 + (_local2 + "\n"));
};
wtxt.text = _local1;
}
public function addUnit(_arg1:Unit):void{
if (_arg1.flag(UnitFlags.Flying)){
airworld.setpos(_arg1.pos, _arg1.mapid);
} else {
if (((_arg1.flag(UnitFlags.Building)) && ((_arg1.spritewidth > Consts.cellsize)))){
setUnitPos(_arg1, _arg1.mapid);
} else {
world.setpos(_arg1.pos, _arg1.mapid);
};
};
_arg1.activate(this);
_arg1.sprite.x = (_arg1.pos.x * Consts.cellsize);
_arg1.sprite.y = (_arg1.pos.y * Consts.cellsize);
_arg1.sprite.visible = true;
if (_arg1.mapid == Consts.myId){
my.camp.add(_arg1);
} else {
if (_arg1.mapid == Consts.hostileId){
comp.camp.add(_arg1);
} else {
if (_arg1.mapid == Consts.softId){
soft.add(_arg1);
};
};
};
}
public function isMoneyEnough(_arg1:String):Boolean{
return ((utypes.params(_arg1).cost <= money));
}
public function updateMenu():void{
var _local1:Unit;
for each (_local1 in selectedUnits) {
if (_local1.isLive()){
_local1.updateHealth();
};
};
if (selectedUnits.length > 0){
if (actions.unitAction != ""){
menu.buttons.action();
} else {
if (((ccursor) || (!((actions.currentAction == ""))))){
menu.buttons.action();
} else {
if (selectedUnits[0].mapid != Consts.hostileId){
menu.buttons.showButtons(selectedUnits[0].type);
} else {
menu.buttons.hideButtons();
};
};
};
} else {
if (((ccursor) || (!((actions.currentAction == ""))))){
menu.buttons.action();
} else {
menu.buttons.hideButtons();
};
};
menu.updateInfo();
}
public function upgradeUnit(_arg1:Unit):void{
var _local2:Unit;
_local2 = utypes.params(_arg1.type);
_arg1.upgradeLevel++;
_arg1.health = (_arg1.health + (_local2.health * Consts.upgradeHExtra));
if (_arg1.mapid != Consts.hostileId){
_arg1.damage = (_arg1.damage + (_local2.damage * Consts.upgradeDExtra));
} else {
if (_arg1.type == UnitTypes.hijacker){
_arg1.damage = (_arg1.damage + 1);
};
};
if (_arg1.mapid != Consts.hostileId){
_arg1.sprite.update();
};
if (_arg1.mapid == Consts.softId){
_arg1.sprite.sprite.setFrame((_arg1.sprite.sprite.framen + 1));
};
if (isUnitInSelection(_arg1)){
updateMenu();
};
menu.resources.update();
}
public function deselectUnit(_arg1:Unit):void{
var _local2:int;
if (selectedUnits.length > 0){
if (isSelectedUnit(_arg1)){
_arg1.sprite.select(false);
selectedUnits.length = 0;
actions.clear(true);
} else {
_local2 = 0;
while (_local2 < selectedUnits.length) {
if (selectedUnits[_local2] == _arg1){
_arg1.sprite.select(false);
selectedUnits.splice(_local2, 1);
break;
} else {
_local2++;
};
};
};
updateMenu();
};
}
public function upgradeUnitToLevel(_arg1:Unit, _arg2:int):void{
var _local3:int;
_local3 = 0;
while (_local3 < _arg2) {
upgradeUnit(_arg1);
_local3++;
};
}
public function pause():void{
if (!paused){
log("Paused...");
events.unregister();
if (scenario){
scenario.thinktimer.stop();
};
} else {
logmsg.pop();
updateLog();
events.register();
if (scenario){
scenario.thinktimer.start();
};
};
paused = !(paused);
}
private function cleanGoals():void{
var _local1:int;
_local1 = 0;
while (_local1 < goals.length) {
if (!goals[_local1].active){
delete goals[_local1];
goals.splice(_local1, 1);
} else {
_local1++;
};
};
}
public function getUnitUnder(_arg1:Position):Unit{
var _local2:Unit;
_local2 = comp.camp.getInMapUnder(_arg1);
if (!_local2){
_local2 = my.camp.getInMapUnder(_arg1);
};
return (_local2);
}
}
}//package fai
Section 11
//GameActions (fai.GameActions)
package fai {
public class GameActions {
private var engine:Engine;// = null
public var currentAction:String;// = ""
public var unitAction:String;// = ""
public function GameActions(_arg1:Engine):void{
engine = null;
currentAction = "";
unitAction = "";
super();
engine = _arg1;
}
public function doUnitAction():void{
clear(true);
engine.updateMenu();
}
private function buildConstruction(_arg1:String, _arg2:String):void{
engine.deselectUnits();
if (!engine.isMoneyEnough(_arg2)){
engine.log("Not enough money");
return;
};
engine.menu.buttons.action();
engine.createBuildingCursor(_arg2);
currentAction = _arg1;
}
public function doCurrentAction():void{
clear(true);
engine.updateMenu();
engine.menu.resources.update();
}
public function clear(_arg1:Boolean=false):void{
currentAction = "";
if (_arg1){
unitAction = "";
};
}
private function effectAction(_arg1:int, _arg2:String):void{
if (engine.money < _arg1){
engine.log("Not enough money");
return;
};
engine.menu.buttons.action();
currentAction = _arg2;
}
public function endAction():void{
switch (currentAction){
case UnitTypes.bantispyware:
case UnitTypes.bantiadware:
case UnitTypes.bantivirus:
case UnitTypes.bgarbagecleaner:
case UnitTypes.bfirewall:
cancelBuildingConstruction();
break;
default:
clear(true);
break;
};
engine.updateMenu();
}
public function buttonCommand(_arg1:String):void{
if (((engine.paused) || (!(engine.scenario.isRunning())))){
return;
};
switch (_arg1){
case UnitTypes.bantispyware:
buildConstruction(_arg1, UnitTypes.antispyware);
break;
case UnitTypes.bantiadware:
buildConstruction(_arg1, UnitTypes.antiadware);
break;
case UnitTypes.bantivirus:
buildConstruction(_arg1, UnitTypes.antivirus);
break;
case UnitTypes.bgarbagecleaner:
buildConstruction(_arg1, UnitTypes.garbagecleaner);
break;
case UnitTypes.bfirewall:
buildConstruction(_arg1, UnitTypes.firewall);
break;
case UnitTypes.bcancel:
endAction();
break;
};
}
private function cancelBuildingConstruction():void{
var _local2 = engine;
with (_local2) {
if (ccursor){
removeBuildCursor();
};
};
clear();
}
}
}//package fai
Section 12
//GameButtons (fai.GameButtons)
package fai {
import flash.display.*;
import flash.events.*;
public class GameButtons extends Sprite {
public var engine:Engine;// = null
public var buttons:Map;// = null
private var container:Sprite;// = null
public var selectedUnit:Unit;// = null
public function GameButtons(_arg1:Engine):void{
engine = null;
buttons = null;
container = null;
selectedUnit = null;
super();
engine = _arg1;
buttons = new Map();
}
public function onoutbutton(_arg1:MouseEvent):void{
if ((_arg1.currentTarget is ButtonSprite)){
_arg1.currentTarget.select(false);
selectedUnit = null;
engine.menu.updateInfo();
};
}
public function create():void{
var _local1:int;
var _local2:ButtonSprite;
var _local3:int;
container = new Sprite();
addChild(container);
container.y = 2;
_local1 = 45;
_local2 = null;
_local2 = createButton(UnitTypes.bantiadware, false, "1");
_local2 = createButton(UnitTypes.bantispyware, false, "2");
_local2.x = (_local1 + 1);
_local2 = createButton(UnitTypes.bgarbagecleaner, false, "3");
_local2.x = ((_local1 + 1) * 2);
_local2 = createButton(UnitTypes.bantivirus, false, "4");
_local2.x = ((_local1 + 1) * 3);
_local2 = createButton(UnitTypes.bfirewall, false, "5");
_local2.y = (_local1 + 1);
_local3 = 447;
_local2 = createButton(UnitTypes.bcancel, true, "Esc");
_local2.x = ((_local1 + 1) * 3);
_local2.y = (_local1 + 1);
}
public function onclick(_arg1:MouseEvent):void{
if (engine.paused){
return;
};
engine.playClick();
if ((_arg1.currentTarget is ButtonSprite)){
engine.actions.buttonCommand(_arg1.currentTarget.type);
};
}
public function onoverbutton(_arg1:MouseEvent):void{
if ((_arg1.currentTarget is ButtonSprite)){
_arg1.currentTarget.select(true);
showTooltip(_arg1.target.type);
selectedUnit = engine.utypes.units[engine.utypes.buttonToUnit[_arg1.currentTarget.type]];
if (selectedUnit){
engine.menu.updateInfo();
};
};
}
public function action():void{
hideButtons();
buttons.get(UnitTypes.bcancel).visible = true;
}
private function createButton(_arg1:String, _arg2:Boolean=false, _arg3:String=""):ButtonSprite{
var _local4:AnimatedBitmap;
var _local5:ButtonSprite;
_local4 = engine.sloader.getButton(_arg1);
_local5 = new ButtonSprite(_arg1, _local4);
_local5.addEventListener(MouseEvent.MOUSE_DOWN, onclick);
_local5.addEventListener(MouseEvent.MOUSE_OVER, onoverbutton);
_local5.addEventListener(MouseEvent.MOUSE_OUT, onoutbutton);
container.addChild(_local5);
if (_arg3 != ""){
_local5.makeHotKey(_arg3);
};
if (_arg2){
_local5.visible = false;
buttons.add(_arg1, _local5);
};
return (_local5);
}
public function showTooltip(_arg1:String):void{
switch (_arg1){
};
}
public function showButtons(_arg1:String):void{
hideButtons();
switch (_arg1){
default:
break;
};
}
public function hideButtons():void{
var _local1:ButtonSprite;
for each (_local1 in buttons.values) {
_local1.visible = false;
};
}
}
}//package fai
import flash.display.*;
import flash.text.*;
class ButtonSprite extends Sprite {
private var shaped:Shape;
public var type:String;// = null
private var shapes:Shape;
private function ButtonSprite(_arg1:String, _arg2:AnimatedBitmap):void{
type = null;
shaped = new Shape();
shapes = new Shape();
super();
Utils.drawRect(shaped, 2, 532555, 8954319, _arg2.width, _arg2.height, true);
shaped.alpha = 0.5;
addChild(shaped);
shapes.visible = false;
Utils.drawRect(shapes, 2, 532555, 14998899, _arg2.width, _arg2.height, true);
shapes.alpha = 0.5;
addChild(shapes);
type = _arg1;
addChild(_arg2);
}
public function select(_arg1:Boolean):void{
shaped.visible = !(_arg1);
shapes.visible = _arg1;
}
public function makeHotKey(_arg1:String):void{
var _local2:TextField;
_local2 = Utils.createTextField(0xFFFFFF, 10);
_local2.text = _arg1;
addChild(_local2);
}
}
Section 13
//GameEvents (fai.GameEvents)
package fai {
import flash.events.*;
import flash.utils.*;
import flash.ui.*;
public class GameEvents {
private var engine:Engine;// = null
public var downPoint:Position;
public var dragging:Boolean;// = false
public var mouseWithinMap:Boolean;// = false
public var logTimer:Timer;// = null
public var selecting:Boolean;// = false
public var cursorpos:Position;
public function GameEvents(_arg1:Engine):void{
engine = null;
mouseWithinMap = false;
dragging = false;
selecting = false;
downPoint = new Position();
cursorpos = new Position();
logTimer = null;
super();
engine = _arg1;
}
public function unregister():void{
engine.globalstage.stage.removeEventListener(Event.ENTER_FRAME, engine.tick);
engine.globalstage.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
engine.globalstage.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onmoving);
engine.unitlayer.removeEventListener(MouseEvent.MOUSE_DOWN, onmousedown);
engine.unitlayer.removeEventListener(MouseEvent.MOUSE_UP, onmouseup);
if (logTimer){
logTimer.removeEventListener(TimerEvent.TIMER, logHandler);
logTimer.stop();
logTimer = null;
};
}
private function onmouseup(_arg1:MouseEvent):void{
dragging = false;
if (selecting){
engine.endSelection();
};
}
private function onKeyDown(_arg1:KeyboardEvent):void{
if ((((32 == _arg1.charCode)) || ((Keyboard.ESCAPE == _arg1.keyCode)))){
engine.removeBuildCursor();
engine.actions.clear(true);
engine.updateMenu();
} else {
switch (_arg1.charCode){
case 49:
buildInCC(UnitTypes.bantiadware);
break;
case 50:
buildInCC(UnitTypes.bantispyware);
break;
case 51:
buildInCC(UnitTypes.bgarbagecleaner);
break;
case 52:
buildInCC(UnitTypes.bantivirus);
break;
case 53:
buildInCC(UnitTypes.bfirewall);
break;
default:
engine.menu.onMenuKeyDown(_arg1.charCode);
break;
};
};
}
public function onmousedown(_arg1:MouseEvent):void{
var mapx:*;
var mapy:*;
var building:*;
var selunit:Unit;
var event = _arg1;
downPoint.x = engine.unitlayer.mouseX;
downPoint.y = engine.unitlayer.mouseY;
if (engine.ccursor != null){
var _local3 = engine;
with (_local3) {
if (paused){
return;
};
if (ccursor.isGood()){
if (!isMoneyEnough(ccursor.type)){
log("Not enough money");
removeBuildCursor();
actions.clear(true);
updateMenu();
return;
};
mapx = Math.floor(((unitlayer.mouseX / Consts.cellsize) + 0.5));
mapy = Math.floor(((unitlayer.mouseY / Consts.cellsize) + 0.5));
if ((mapx % 2) == 0){
mapx--;
};
if ((mapy % 2) == 0){
mapy--;
};
if (isBlocking(ccursor.type, mapx, mapy)){
menu.blockingwnd.visible = true;
menu.blockingwnd.gotoAndPlay("start");
return;
};
money = (money - ccursor.cost);
menu.stat.ispent = (menu.stat.ispent + ccursor.cost);
menu.stat.ibuilt++;
building = buildUnit(ccursor.type, mapx, mapy, true);
updateMenu();
menu.resources.update();
ccursor.setGood(false);
};
};
return;
};
if (engine.actions.unitAction != ""){
engine.actions.doUnitAction();
} else {
if (event.shiftKey){
dragging = true;
} else {
selunit = engine.my.camp.getUnder(downPoint);
if (!selunit){
selunit = engine.comp.camp.getUnder(downPoint);
if (!selunit){
selunit = engine.soft.getUnder(downPoint);
};
};
if (selunit){
if (((((!(event.shiftKey)) || ((selunit.mapid == Consts.hostileId)))) || ((((engine.selectedUnits.length > 0)) && ((engine.selectedUnits[0].mapid == Consts.hostileId)))))){
engine.deselectUnits();
} else {
if (((event.shiftKey) && (engine.isUnitInSelection(selunit)))){
engine.deselectUnit(selunit);
return;
};
};
engine.selectedUnits.push(selunit);
engine.updateMenu();
} else {
selecting = true;
};
};
};
}
public function buildInCC(_arg1:String):void{
engine.actions.buttonCommand(_arg1);
engine.checkCursor();
}
public function register():void{
engine.globalstage.stage.addEventListener(Event.ENTER_FRAME, engine.tick);
engine.globalstage.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
engine.globalstage.stage.addEventListener(MouseEvent.MOUSE_MOVE, onmoving);
engine.unitlayer.addEventListener(MouseEvent.MOUSE_DOWN, onmousedown);
engine.unitlayer.addEventListener(MouseEvent.MOUSE_UP, onmouseup);
logTimer = new Timer(3000, 0);
logTimer.addEventListener(TimerEvent.TIMER, logHandler);
if (engine.logmsg.length > 0){
logTimer.start();
};
}
private function logHandler(_arg1:TimerEvent):void{
if (engine.logmsg.length > 0){
engine.logmsg.shift();
engine.updateLog();
if (!engine.logmsg.length){
logTimer.stop();
};
};
}
private function onmoving(_arg1:MouseEvent):void{
var evt = _arg1;
cursorpos.x = evt.stageX;
cursorpos.y = evt.stageY;
engine.checkCursor();
if (selecting){
if (!evt.buttonDown){
engine.endSelection();
return;
};
var _local3 = engine.selshape.graphics;
with (_local3) {
clear();
lineStyle(1, 1804218);
beginFill(6077415);
drawRect(downPoint.x, downPoint.y, -((downPoint.x - engine.unitlayer.mouseX)), -((downPoint.y - engine.unitlayer.mouseY)));
endFill();
};
};
}
public function isSelectedType(_arg1:String):Boolean{
if (engine.selectedUnits.length != 1){
return (false);
};
return ((engine.selectedUnits[0].type == _arg1));
}
}
}//package fai
Section 14
//GameMenu (fai.GameMenu)
package fai {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
public class GameMenu extends Sprite {
private var acceptCodes:Boolean;// = false
public var remaining:TextField;// = null
private var startbutton:StartMenuButton;// = null
public var resources:Resources;// = null
public var volume:Number;// = 1
public var riskinfo:RiskInfo;// = null
public var blockingwnd:Blocking;// = null
private var engine:Engine;// = null
public var stat:Statistics;// = null
private var buttonsparent:Sprite;// = null
private var sendnext:WebButton;// = null
public var buttons:GameButtons;// = null
private var howtoplay:HowToPlay;// = null
public var pausebutton:WebButton;// = null
private var about:About;// = null
public var uinfo:UnitInfoPanel;// = null
public var startmenu:StartMenu;// = null
private var volbutton:WebButton;// = null
private var menuparent:Sprite;// = null
public var softinfo:SoftInfoPanel;// = null
private var aboutbutton:WebButton;// = null
public static const fillColor:int = 8954319;
public static const borderColor:int = 532555;
public function GameMenu(_arg1:Engine):void{
engine = null;
menuparent = null;
buttonsparent = null;
pausebutton = null;
aboutbutton = null;
volbutton = null;
about = null;
startmenu = null;
stat = null;
volume = 1;
resources = null;
buttons = null;
uinfo = null;
softinfo = null;
acceptCodes = false;
sendnext = null;
remaining = null;
startbutton = null;
blockingwnd = null;
riskinfo = null;
howtoplay = null;
super();
engine = _arg1;
engine.menu = this;
engine.globalstage.addChild(this);
}
public function onMenuKeyDown(_arg1:int):void{
if (acceptCodes){
switch (_arg1){
case 82:
case 114:
onButtonRepair(null);
break;
case 85:
case 117:
onButtonUpgrade(null);
break;
};
};
}
public function victory():void{
stat.caption.text = "Victory!";
stat.subtitle.text = "Think about career in information security!";
stat.iscore = engine.score;
stat.update();
engine.pause();
stat.visible = true;
}
public function updateInfo():void{
var _local1:Array;
var _local2:Unit;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Boolean;
uinfo.visible = false;
softinfo.visible = false;
unregisterButtons();
if (!buttons.selectedUnit){
_local1 = engine.selectedUnits;
if (_local1.length > 0){
if (_local1[0].mapid == Consts.softId){
softinfo.visible = true;
softinfo.showAbout(_local1[0]);
registerButtons();
softinfo.upgradeButton.visible = (_local1[0].upgradeLevel < 2);
_local2 = null;
_local3 = 0;
_local4 = 0;
_local5 = 0;
while (_local5 < _local1.length) {
_local2 = engine.utypes.params(_local1[_local5].type);
_local3 = (_local3 + RepairGoal.rcost(engine, _local1[_local5]));
_local4 = (_local4 + ((_local2.cost * 0.8) * (_local1[_local5].upgradeLevel + 1)));
_local5++;
};
if (_local3 > 0){
softinfo.repairButton.visible = true;
softinfo.repairButton.txt.text = (("Repair (R) - " + _local3.toString()) + "$");
} else {
softinfo.repairButton.visible = false;
};
if (softinfo.upgradeButton.visible){
softinfo.upgradeButton.txt.text = (("Update Soft (U) - " + _local4.toString()) + "$");
};
if (_local1.length > 1){
softinfo.title.text = (("Selected: " + _local1.length) + " software");
};
} else {
uinfo.visible = true;
uinfo.showAbout(_local1[0], (_local1[0].mapid == Consts.hostileId));
if (_local1[0].mapid != Consts.hostileId){
registerButtons();
_local2 = null;
_local3 = 0;
_local6 = 0;
_local4 = 0;
_local7 = false;
_local5 = 0;
while (_local5 < _local1.length) {
_local2 = engine.utypes.params(_local1[_local5].type);
if (_local1[_local5].upgradeLevel < 5){
_local7 = true;
};
_local3 = (_local3 + RepairGoal.rcost(engine, _local1[_local5]));
_local6 = (_local6 + (_local1[_local5].cost / 2));
_local4 = (_local4 + ((_local2.cost * 0.8) * (_local1[_local5].upgradeLevel + 1)));
_local5++;
};
if (_local7){
uinfo.upgradeButton.txt.text = (("Upgrade (U) - " + _local4.toString()) + "$");
} else {
uinfo.upgradeButton.visible = false;
};
if (_local3 > 0){
uinfo.repairButton.txt.text = (("Repair (R) - " + _local3.toString()) + "$");
} else {
uinfo.repairButton.visible = false;
};
uinfo.destroyButton.txt.text = (("Sell for " + _local6.toString()) + "$");
if (_local1.length > 1){
uinfo.title.text = (("Selected: " + _local1.length) + " defenders");
};
};
};
};
} else {
uinfo.visible = true;
uinfo.showAbout(buttons.selectedUnit, (buttons.selectedUnit.mapid == Consts.hostileId));
};
}
public function create():void{
var _local1:BitmapData;
var _local2:AnimatedBitmap;
var _local3:WebButton;
createParents();
buttons = new GameButtons(engine);
buttonsparent.addChild(buttons);
buttons.create();
uinfo = new UnitInfoPanel(engine);
menuparent.addChild(uinfo);
uinfo.y = 172;
uinfo.x = 15;
softinfo = new SoftInfoPanel(engine);
menuparent.addChild(softinfo);
softinfo.y = 172;
softinfo.x = 15;
_local1 = engine.sloader.grounds["windowheader.png"];
_local2 = new AnimatedBitmap(_local1, _local1.width, _local1.height);
engine.globalstage.addChild(_local2);
resources = new Resources(engine);
engine.globalstage.addChild(resources);
createButtons();
createMenus();
sendnext = new WebButton("Send Next Wave", 150, 20, 20, 0xFFFFFF, 10, 25, true);
sendnext.y = 550;
sendnext.x = 630;
sendnext.addEventListener(MouseEvent.MOUSE_DOWN, sendNext);
engine.globalstage.addChild(sendnext);
remaining = Utils.createTextField(7456766, 11);
remaining.text = "Remaining:";
remaining.x = 630;
remaining.y = 575;
engine.globalstage.addChild(remaining);
remaining = Utils.createTextField(7456766, 11);
remaining.text = "30 seconds";
remaining.x = 705;
remaining.y = 575;
engine.globalstage.addChild(remaining);
blockingwnd = new Blocking();
engine.globalstage.addChild(blockingwnd);
blockingwnd.visible = false;
blockingwnd.stop();
blockingwnd.x = (blockingwnd.y = 212);
riskinfo = new RiskInfo();
riskinfo.visible = false;
engine.globalstage.addChild(riskinfo);
howtoplay = new HowToPlay();
howtoplay.visible = false;
_local3 = new WebButton("Close", 180, 27, 20, 0xFFFFFF, 15, 25, true);
addChild(_local3);
_local3.y = 555;
_local3.x = 315;
_local3.addEventListener(MouseEvent.MOUSE_DOWN, closeTutorial);
howtoplay.addChild(_local3);
engine.globalstage.addChild(howtoplay);
}
public function onabout(_arg1:MouseEvent):void{
if (((startmenu.visible) || (stat.visible))){
return;
};
engine.playClick();
engine.pause();
about.visible = !(about.visible);
}
public function show():void{
visible = true;
resources.visible = true;
}
private function onrestart(_arg1:MouseEvent):void{
var dif:*;
var evt = _arg1;
if (about.visible){
return;
};
var _local3 = engine;
with (_local3) {
playClick();
dif = difficulty;
loadMap(currentMap);
restart(dif);
};
}
public function createMenus():void{
about = new About();
engine.globalstage.addChildAt(about, 2);
about.x = 170;
about.y = 100;
about.closebutton.addEventListener(MouseEvent.CLICK, onabout);
stat = new Statistics();
stat.mainmenu.addEventListener(MouseEvent.MOUSE_DOWN, onmenu);
stat.closebutton.addEventListener(MouseEvent.MOUSE_DOWN, onmenu);
stat.restart.addEventListener(MouseEvent.CLICK, onrestart);
stat.savescore.addEventListener(MouseEvent.CLICK, onsavescore);
stat.kongbutton.addEventListener(MouseEvent.MOUSE_DOWN, onplaymoregames);
engine.globalstage.addChild(stat);
stat.visible = false;
stat.x = 180;
stat.y = 80;
startmenu = new StartMenu(engine);
startmenu.y = 63;
startmenu.gregbutton.addEventListener(MouseEvent.MOUSE_DOWN, onplaymoregames);
engine.globalstage.addChild(startmenu);
startbutton = new StartMenuButton(engine);
startbutton.x = 10;
startbutton.y = 552;
engine.globalstage.addChild(startbutton);
reset();
}
public function onsavescore(_arg1:MouseEvent):void{
engine.sloader.saveScore();
}
public function reset():void{
stat.reset();
}
public function hide():void{
visible = false;
resources.visible = false;
}
public function onplaymoregames(_arg1:MouseEvent):void{
var _local2:String;
var _local3:URLRequest;
_local2 = "http://www.kongregate.com/?gamereferral=masterofsecurity";
_local3 = new URLRequest(_local2);
navigateToURL(_local3, "_blank");
}
public function createParents():void{
var menuback:Shape;
var menuwidth:int;
var buttonswidth:int;
var bshape:Shape;
menuparent = new Sprite();
menuback = new Shape();
addChild(menuparent);
menuparent.addChild(menuback);
menuwidth = 186;
menuback.alpha = 0.3;
Utils.drawRect(menuback, 1, 0x666666, 0xEAEAEA, menuwidth, engine.gameheight);
menuparent.x = ((engine.gamewidth - menuwidth) - 1);
menuback.alpha = 0.01;
buttonsparent = new Sprite();
buttonswidth = 141;
bshape = new Shape();
var _local2 = bshape;
with (_local2) {
graphics.lineStyle(1, 3957386);
graphics.beginFill(10993365);
graphics.drawRoundRect(1, 0, (menuwidth - 2), 93, 20, 20);
graphics.endFill();
};
bshape.alpha = 0.2;
buttonsparent.addChild(bshape);
buttonsparent.y = 40;
menuparent.addChild(buttonsparent);
}
private function closeTutorial(_arg1:MouseEvent):void{
if (engine.scenario){
engine.scenario.show();
};
howtoplay.visible = false;
}
public function showTutorial():void{
if (engine.scenario){
engine.scenario.hide();
};
howtoplay.visible = true;
}
public function resumegame(_arg1:MouseEvent):void{
startmenu.visible = false;
show();
if (engine.paused){
engine.pause();
};
}
public function newgame(_arg1:MouseEvent):void{
startmenu.visible = false;
}
public function registerButtons():void{
uinfo.destroyButton.visible = true;
uinfo.repairButton.visible = true;
uinfo.upgradeButton.visible = true;
uinfo.destroyButton.addEventListener(MouseEvent.CLICK, onButtonDestroy);
uinfo.repairButton.addEventListener(MouseEvent.CLICK, onButtonRepair);
uinfo.upgradeButton.addEventListener(MouseEvent.CLICK, onButtonUpgrade);
softinfo.repairButton.addEventListener(MouseEvent.CLICK, onButtonRepair);
softinfo.upgradeButton.addEventListener(MouseEvent.CLICK, onButtonUpgrade);
acceptCodes = true;
}
public function unregisterButtons():void{
uinfo.destroyButton.visible = false;
uinfo.repairButton.visible = false;
uinfo.upgradeButton.visible = false;
uinfo.destroyButton.removeEventListener(MouseEvent.CLICK, onButtonDestroy);
uinfo.repairButton.removeEventListener(MouseEvent.CLICK, onButtonRepair);
uinfo.upgradeButton.addEventListener(MouseEvent.CLICK, onButtonUpgrade);
softinfo.repairButton.removeEventListener(MouseEvent.CLICK, onButtonRepair);
softinfo.upgradeButton.addEventListener(MouseEvent.CLICK, onButtonUpgrade);
acceptCodes = false;
}
private function sendNext(_arg1:MouseEvent):void{
engine.playClick();
engine.scenario.sendNext();
}
public function onvolume(_arg1:MouseEvent):void{
if (volume >= 1){
volume = 0;
} else {
volume = (volume + 0.25);
};
volbutton.txt.text = (("volume: " + (volume * 100)) + "%");
engine.playClick();
}
public function onmenu(_arg1:MouseEvent):void{
startMenu();
}
public function gameover():void{
stat.iscore = engine.score;
stat.caption.text = "Game Over";
stat.subtitle.text = "Information security is a tough science...";
stat.update();
engine.pause();
stat.visible = true;
}
private function onButtonDestroy(_arg1:MouseEvent):void{
while (engine.selectedUnits.length > 0) {
engine.addResources((engine.selectedUnits[0].cost / 2));
engine.destroyUnit(engine.selectedUnits[0]);
};
}
private function onButtonRepair(_arg1:MouseEvent):void{
var _local2:int;
_local2 = 0;
_local2 = 0;
while (_local2 < engine.selectedUnits.length) {
engine.selectedUnits[_local2].life.repair();
_local2++;
};
}
public function startMenu():void{
if (about.visible){
return;
};
engine.playSound(engine.sloader.sounds[UnitTypes.soundstartmenu], new Position(50, 50));
if (startmenu.visible){
startbutton.enable(false);
startmenu.visible = false;
startmenu.stop();
if (((engine.scenario.isRunning()) && (engine.paused))){
engine.pause();
};
} else {
startbutton.enable(true);
startmenu.visible = true;
startmenu.play();
if (((engine.scenario.isRunning()) && (!(stat.visible)))){
startmenu.buttonsVisible(false);
engine.pause();
} else {
if (stat.visible){
startmenu.buttonsVisible(true);
stat.visible = false;
};
};
};
}
private function createButtons():void{
var _local1:int;
_local1 = 0xFFFFFF;
volbutton = new WebButton("volume: 100%", 90, 20, 20, _local1, 10, 25, false);
volbutton.y = 2;
volbutton.x = 1;
volbutton.addEventListener(MouseEvent.MOUSE_DOWN, onvolume);
menuparent.addChild(volbutton);
aboutbutton = new WebButton("About", 85, 20, 20, _local1, 10, 25, false);
aboutbutton.y = 2;
aboutbutton.x = 100;
aboutbutton.addEventListener(MouseEvent.MOUSE_DOWN, onabout);
menuparent.addChild(aboutbutton);
}
private function onButtonUpgrade(_arg1:MouseEvent):void{
var _local2:int;
var _local3:Unit;
var _local4:Unit;
var _local5:int;
_local2 = 0;
_local2 = 0;
while (_local2 < engine.selectedUnits.length) {
_local3 = engine.selectedUnits[_local2];
if ((((((Consts.myId == _local3.mapid)) && ((_local3.upgradeLevel >= 5)))) || ((((Consts.softId == _local3.mapid)) && ((_local3.upgradeLevel >= 2)))))){
} else {
_local4 = engine.utypes.params(_local3.type);
_local5 = ((_local4.cost * 0.8) * (_local3.upgradeLevel + 1));
if (engine.money < _local5){
engine.log("Not enough money");
} else {
engine.money = (engine.money - _local5);
engine.upgradeUnit(_local3);
};
};
_local2++;
};
}
}
}//package fai
import flash.display.*;
import flash.text.*;
class About extends Sprite {
public var closebutton:Sprite;// = null
private var mentart:TextField;// = null
private var author:TextField;// = null
private var caption:TextField;// = null
private var back:Shape;// = null
private var version:TextField;// = null
private static const xoffset:int = 10;
private function About():void{
var cbsize:int;
var tf:TextFormat;
back = null;
caption = null;
version = null;
author = null;
mentart = null;
closebutton = null;
super();
visible = false;
back = new Shape();
var _local2 = back;
with (_local2) {
graphics.beginFill(0);
graphics.drawRoundRect(0, 0, 280, 220, 15, 15);
graphics.endFill();
alpha = 0.7;
};
addChild(back);
closebutton = new Sprite();
cbsize = 20;
_local2 = closebutton;
with (_local2) {
graphics.beginFill(0);
graphics.drawRoundRect(0, 0, cbsize, cbsize, 5, 5);
graphics.endFill();
alpha = 0.5;
graphics.lineStyle(1, 0xFFFFFF);
graphics.moveTo(2, 2);
graphics.lineTo((cbsize - 2), (cbsize - 2));
graphics.moveTo((cbsize - 2), 2);
graphics.lineTo(2, (cbsize - 2));
};
closebutton.x = ((280 - cbsize) - 1);
closebutton.y = 1;
addChild(closebutton);
caption = Utils.createTextField(0xFFFFFF, 16);
caption.x = 55;
tf = caption.defaultTextFormat;
tf.underline = true;
caption.defaultTextFormat = tf;
caption.text = "Master of Security";
addChild(caption);
version = Utils.createTextField(0xFFFFFF, 12);
tf = version.defaultTextFormat;
tf.bold = false;
tf.italic = true;
version.defaultTextFormat = tf;
version.text = "version 1.1";
version.x = (xoffset + 90);
version.y = (caption.height + 10);
addChild(version);
author = createStatElement(15825434, 12);
author.y = 80;
author.x = 70;
author.text = "Author Anton Fedoruk\nCopyright (c) 2008.\nAll Rights Reserved.";
mentart = createStatElement(15943950, 12);
mentart.y = 160;
mentart.x = 80;
tf = mentart.defaultTextFormat;
tf.url = "mailto:gmentat@gmail.com";
tf.underline = true;
tf.italic = true;
mentart.defaultTextFormat = tf;
mentart.text = "Contact Author";
}
private function createStatElement(_arg1:int, _arg2:int):TextField{
var _local3:TextField;
_local3 = Utils.createTextField(_arg1, _arg2);
_local3.x = xoffset;
addChild(_local3);
return (_local3);
}
}
class ButtonSprite extends Sprite {
private var shaped:Shape;
public var bitmap:AnimatedBitmap;// = null
private var shapes:Shape;
public var suite:String;// = null
private function ButtonSprite(_arg1:String, _arg2:AnimatedBitmap):void{
suite = null;
bitmap = null;
shaped = new Shape();
shapes = new Shape();
super();
shaped.graphics.lineStyle(2, 532555);
shaped.graphics.beginFill(8954319);
shaped.graphics.drawRoundRect(0, 0, _arg2.width, _arg2.height, (_arg2.width / 5), (_arg2.height / 5));
shaped.graphics.endFill();
shaped.alpha = 0.5;
addChild(shaped);
shapes.visible = false;
shapes.graphics.lineStyle(2, 532555);
shapes.graphics.beginFill(14998899);
shapes.graphics.drawRoundRect(0, 0, _arg2.width, _arg2.height, (_arg2.width / 5), (_arg2.height / 5));
shapes.graphics.endFill();
shapes.alpha = 0.5;
addChild(shapes);
suite = _arg1;
bitmap = _arg2;
addChild(_arg2);
}
public function select(_arg1:Boolean):void{
shaped.visible = !(_arg1);
shapes.visible = _arg1;
}
}
Section 15
//Goal (fai.Goal)
package fai {
public class Goal {
public var owner:Unit;// = null
public var active:Boolean;// = true
public function Goal(){
active = true;
owner = null;
super();
}
public function deactivate():void{
active = false;
}
}
}//package fai
Section 16
//KeyboardKeys (fai.KeyboardKeys)
package fai {
import flash.events.*;
public class KeyboardKeys {
private static var initialized:Boolean = false;
private static var keys:Object = new Object();
public static function init(_arg1):void{
_arg1.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
_arg1.stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
initialized = true;
}
private static function keyPressed(_arg1:KeyboardEvent):void{
keys[_arg1.keyCode] = true;
}
public static function isDown(_arg1:uint):Boolean{
if (!initialized){
return (false);
};
if (Boolean((_arg1 in keys))){
return (keys[_arg1]);
};
return (false);
}
private static function keyReleased(_arg1:KeyboardEvent):void{
keys[_arg1.keyCode] = false;
}
}
}//package fai
Section 17
//LevelMap (fai.LevelMap)
package fai {
public class LevelMap {
public var desc:String;// = null
public var diff:String;// = null
public var data:XML;// = null
public var nechelons:int;// = 0
public var title:String;// = null
public function LevelMap(_arg1:XML):void{
data = null;
title = null;
desc = null;
nechelons = 0;
diff = null;
super();
data = _arg1;
title = data.title.toString();
desc = data.desc.toString();
nechelons = int(data.scenario.nechelons.@value);
diff = data.difficulty.toString();
if (!diff.length){
diff = "Normal";
};
}
public function diffColor():int{
switch (diff){
case "Easy":
return (5098747);
case "Hard":
return (0xFF0000);
};
return (10925256);
}
}
}//package fai
Section 18
//LifeGoal (fai.LifeGoal)
package fai {
public class LifeGoal extends Goal {
private var engine:Engine;// = null
public var goals:Array;// = null
private var attackgoal:AttackGoal;// = null
public var repairgoal:RepairGoal;// = null
private var counter:int;// = 0
public var waitingMove:MoveGoal;// = null
public function LifeGoal(_arg1:Engine, _arg2:Unit):void{
attackgoal = null;
repairgoal = null;
goals = null;
waitingMove = null;
engine = null;
counter = 0;
super();
owner = _arg2;
engine = _arg1;
goals = new Array();
}
public function attack(_arg1:Camp):void{
if (attackgoal){
attackgoal.deactivate();
attackgoal = null;
};
attackgoal = new AttackGoal(owner, _arg1);
}
public function advance():void{
var _local1:uint;
var _local2:Boolean;
if (repairgoal){
if (repairgoal.active){
repairgoal.advance();
} else {
repairgoal = null;
};
};
if (attackgoal){
attackgoal.advance();
};
_local1 = 0;
_local2 = false;
while (_local1 < goals.length) {
if (goals[_local1].active){
if ((goals[_local1] is MoveGoal)){
_local2 = true;
};
goals[_local1].advance();
_local1++;
} else {
delete goals[_local1];
goals.splice(_local1, 1);
};
};
if (!_local2){
if (attackgoal){
attackgoal.paused = false;
};
};
}
public function repair():void{
if (repairgoal){
repairgoal.deactivate();
repairgoal = null;
engine.updateMenu();
return;
};
repairgoal = new RepairGoal(owner, engine);
}
public function move(_arg1:Position, _arg2:Boolean=false):void{
var _local3:*;
var _local4:MoveGoal;
for each (_local3 in goals) {
if ((_local3 is MoveGoal)){
_local3.deactivate();
};
};
_local4 = new MoveGoal(owner, engine);
_local4.setMoveTarget(_arg1, _arg2);
goals[goals.length] = _local4;
if (_arg2){
if (attackgoal){
attackgoal.clearPreciseTarget();
attackgoal.paused = true;
};
} else {
if (attackgoal){
attackgoal.paused = false;
};
};
}
public function destroy(_arg1:Boolean=false):void{
var _local2:int;
_local2 = 0;
while (_local2 < goals.length) {
if (goals[_local2].active){
goals[_local2].deactivate();
};
_local2++;
};
goals.length = 0;
if (repairgoal){
repairgoal.deactivate();
repairgoal = null;
};
if (attackgoal){
attackgoal.deactivate();
attackgoal = null;
};
if (((_arg1) && (owner))){
if (owner.flag(UnitFlags.Flying)){
engine.airlayer.removeChild(owner.sprite);
} else {
engine.groundlayer.removeChild(owner.sprite);
};
owner.destroy();
owner = null;
active = false;
};
}
public function stop():void{
var _local1:*;
for each (_local1 in goals) {
if ((_local1 is MoveGoal)){
_local1.deactivate();
};
};
if (attackgoal){
attackgoal.clearPreciseTarget();
};
}
override public function deactivate():void{
if (owner){
destroy();
goals.push(new DieGoal(owner, engine, this));
};
}
public function setAttackTarget(_arg1:Unit):void{
if (_arg1 == owner){
engine.log("I can't attack myself.");
return;
};
if (attackgoal){
attackgoal.clearPreciseTarget();
attackgoal.preciseTarget = _arg1;
};
}
}
}//package fai
Section 19
//Map (fai.Map)
package fai {
public class Map {
public var values:Array;
protected var index_:int;// = 0
public var keys:Array;
public function Map(){
keys = new Array();
values = new Array();
index_ = 0;
super();
}
public function add(_arg1:Object, _arg2):void{
index_ = 0;
find(_arg1);
keys.splice(index_, 0, _arg1);
values.splice(index_, 0, _arg2);
}
public function empty():Boolean{
return ((keys.length == 0));
}
public function shift(){
var _local1:*;
_local1 = values.shift();
keys.shift();
return (_local1);
}
public function remove(_arg1:Object):void{
if (find(_arg1)){
keys.splice(index_, 1);
values.splice(index_, 1);
};
}
public function size():int{
return (keys.length);
}
public function pop(){
var _local1:*;
_local1 = values.pop();
keys.pop();
return (_local1);
}
public function get(_arg1:Object){
if (!find(_arg1)){
return (null);
};
return (values[index_]);
}
public function getout(_arg1:Object){
var _local2:*;
if (!find(_arg1)){
return (null);
};
_local2 = values[index_];
values.splice(index_, 1);
keys.splice(index_, 1);
return (_local2);
}
public function find(_arg1:Object):Boolean{
var _local2:int;
var _local3:int;
_local2 = 0;
_local3 = (keys.length - 1);
while (_local2 <= _local3) {
index_ = ((_local2 + _local3) >> 1);
if (_arg1 < keys[index_]){
_local3 = (index_ - 1);
} else {
if (_arg1 > keys[index_]){
_local2 = (index_ + 1);
} else {
return (true);
};
};
};
index_ = _local2;
return (false);
}
public function clear():void{
keys.length = 0;
values.length = 0;
index_ = 0;
}
}
}//package fai
Section 20
//MapMatrix (fai.MapMatrix)
package fai {
public class MapMatrix {
public var matrix:Array;
public var v:uint;
public var h:uint;
public function MapMatrix(_arg1:uint, _arg2:uint):void{
var _local3:int;
var _local4:int;
matrix = new Array();
super();
h = _arg1;
v = _arg2;
_local3 = 0;
while (_local3 < (v + 5)) {
matrix.push(new Array((h + 5)));
_local4 = 0;
while (_local4 < (h + 5)) {
matrix[(matrix.length - 1)][_local4] = 0;
_local4++;
};
_local3++;
};
}
public function setxy(_arg1:uint, _arg2:uint, _arg3:uint):void{
matrix[_arg2][_arg1] = _arg3;
}
public function getxy(_arg1:uint, _arg2:uint):uint{
return (matrix[_arg2][_arg1]);
}
public function clear():void{
var _local1:int;
var _local2:int;
_local1 = 0;
while (_local1 < v) {
_local2 = 0;
while (_local2 < h) {
matrix[_local1][_local2] = 0;
_local2++;
};
_local1++;
};
}
public function setpos(_arg1:Position, _arg2:uint):void{
matrix[_arg1.y][_arg1.x] = _arg2;
}
public function getpos(_arg1:Position):uint{
return (matrix[_arg1.y][_arg1.x]);
}
}
}//package fai
Section 21
//Maps (fai.Maps)
package fai {
public class Maps {
public static const maps:XML = <maps>
<level number='0'>
<size width='68' height='75'/>
<unit type='Control Panel' x='3' y='64'/>
<unit type='Mail Client' x='10' y='64'/>
<unit type='Browser' x='17' y='64'/>
<unit type='Documents Folder' x='24' y='64'/>
<unit type='Games Folder' x='31' y='64'/>
<unit type='Internet Messenger' x='38' y='64'/>
<unit type='Music Player' x='45' y='64'/>
<unit type='System Registry' x='52' y='64'/>
<unit type='Recycle Bin' x='62' y='64'/>
<scenario>
<smoney value='150'/>
<nechelons value='2'/>
</scenario>
</level>
</maps>
;
}
}//package fai
Section 22
//MouseCursor (fai.MouseCursor)
package fai {
import flash.display.*;
import flash.text.*;
public class MouseCursor extends Sprite {
private var goodshape:Shape;// = null
public var isBuilding:Boolean;// = false
public var bitmap:AnimatedBitmap;// = null
public var type:String;// = null
public var spritewidth:int;// = 0
private var engine:Engine;// = null
private var msg:TextField;// = null
private var badshape:Shape;// = null
public var cost:uint;// = 0
public function MouseCursor(_arg1:Engine, _arg2:String, _arg3:AnimatedBitmap, _arg4:uint, _arg5:uint, _arg6:int):void{
engine = null;
bitmap = null;
type = null;
badshape = null;
goodshape = null;
cost = 0;
msg = null;
spritewidth = 0;
isBuilding = false;
super();
engine = _arg1;
type = _arg2;
isBuilding = engine.utypes.params(type).flag(UnitFlags.Building);
cost = _arg5;
bitmap = new AnimatedBitmap(_arg3.curbuffer, _arg3.width, _arg3.height);
spritewidth = _arg6;
addChild(bitmap);
bitmap.x = (bitmap.x - (_arg3.width / 2));
bitmap.y = (bitmap.y - (_arg3.height / 2));
if (!_arg4){
_arg4 = 1;
};
goodshape = new Shape();
drawEyeRange(0xEAEAEA, goodshape, _arg4);
addChild(goodshape);
badshape = new Shape();
badshape.visible = false;
drawEyeRange(0xFF0000, badshape, _arg4);
addChild(badshape);
msg = Utils.createTextField(0xD8D8D8, 10);
msg.text = "Select place for the shield";
msg.y = (msg.height * 2);
msg.x = (msg.x - (msg.width / 2));
addChild(msg);
}
public function isGood():Boolean{
return (goodshape.visible);
}
public function setGood(_arg1:Boolean):void{
goodshape.visible = _arg1;
badshape.visible = !(_arg1);
}
public function remove():void{
removeChild(bitmap);
removeChild(goodshape);
removeChild(badshape);
}
public function drawEyeRange(_arg1:uint, _arg2:Shape, _arg3:uint):void{
var _local4:uint;
var _local5:uint;
_local4 = 0x666666;
_local5 = 0;
_arg2.graphics.lineStyle(_local5, _local4);
_arg2.graphics.beginFill(_arg1);
_arg2.graphics.drawCircle(0, 0, (_arg3 * Consts.cellsize));
_arg2.graphics.endFill();
_arg2.alpha = 0.1;
}
}
}//package fai
Section 23
//MoveGoal (fai.MoveGoal)
package fai {
public class MoveGoal extends Goal {
private var engine:Engine;// = null
public var pathindex:uint;// = 0
public var target:Position;
public var world:MapMatrix;// = null
private var nchecks:int;// = 0
public var path:Array;
private var ntries:int;// = 0
private var searchRange:uint;// = 0
private var pause:uint;// = 0
public var astar:Astar;// = null
private var forcemove:Boolean;// = false
public static const FindNearPlaceTries:uint = 8;
public static const PAUSE:uint = 3;
public static const MaxSearchTries:uint = 300;
public static const MaxChecks:uint = 2;
public function MoveGoal(_arg1:Unit, _arg2:Engine):void{
target = new Position();
path = new Array();
pathindex = 0;
world = null;
pause = 0;
ntries = 0;
nchecks = 0;
astar = null;
forcemove = false;
searchRange = 0;
engine = null;
super();
engine = _arg2;
owner = _arg1;
if (owner.flag(UnitFlags.Flying)){
world = engine.airworld;
} else {
world = engine.world;
};
astar = new Astar(world, Consts.myId);
if (owner.type == UnitTypes.hijacker){
astar.checkxy = astar.checknotempty;
} else {
astar.checkxy = astar.checkwallid;
};
}
public function advance():void{
var _local1:int;
var _local2:int;
var _local3:Unit;
var _local4:uint;
if (Consts.MOVING == owner.cstate){
owner.move();
} else {
if (Consts.IDLE == owner.cstate){
if (target.isequal(owner.pos)){
if (owner.mapid == Consts.hostileId){
if (engine.scenario.hitSoft(owner)){
owner.sprite.visible = false;
engine.destroyUnit(owner);
};
};
deactivate();
} else {
if (pause > 0){
pause--;
if (!pause){
if (path.length){
_local1 = world.getpos(path[pathindex]);
_local2 = MaxChecks;
if (_local1){
if (Consts.hostileId == _local1){
_local3 = engine.comp.camp.getInMapUnder(path[pathindex]);
if (((!((_local3 == null))) && ((_local3.type == UnitTypes.hijacker)))){
_local2 = 1;
} else {
_local2 = 80;
};
};
nchecks++;
if (nchecks >= _local2){
astar.checkxy = astar.checknotempty;
setMoveTarget(target, false);
nchecks = 0;
};
} else {
nchecks = 0;
};
} else {
nchecks = 0;
};
};
} else {
if (path.length > 0){
_local4 = world.getpos(path[pathindex]);
if (((!(owner.pos.isequal(path[pathindex]))) && (!((_local4 == 0))))){
if (Consts.Wall == _local4){
setMoveTarget(target, false);
} else {
pause = PAUSE;
return;
};
} else {
owner.startmove(path[pathindex]);
world.setpos(path[pathindex], owner.mapid);
pathindex++;
owner.move();
};
} else {
keepSearching();
};
};
};
};
};
}
public function setMoveTarget(_arg1:Position, _arg2:Boolean):void{
path.length = 0;
pathindex = 0;
target.copy(_arg1);
if (((forcemove) || (_arg2))){
forcemove = _arg2;
};
if (!astar.startSearch(owner.pos, target)){
deactivate();
} else {
target.copy(astar.destination);
};
}
private function keepSearching():void{
var _local1:int;
var _local2:int;
var _local3:Number;
var _local4:Number;
if (!astar.search(path)){
ntries++;
if (ntries >= MaxSearchTries){
deactivate();
} else {
if (ntries >= FindNearPlaceTries){
searchRange++;
astar.destination = new Position();
astar.findNearPlace(target, searchRange);
if (astar.destination){
target.copy(astar.destination);
};
};
setMoveTarget(target, false);
pause = PAUSE;
};
} else {
if (path.length > 0){
nchecks = (ntries = 0);
_local1 = Math.floor(((owner.sprite.x / Consts.cellsize) + 0.5));
_local2 = Math.floor(((owner.sprite.y / Consts.cellsize) + 0.5));
if (((!((_local1 == owner.pos.x))) || (!((_local2 == owner.pos.y))))){
_local3 = Math.sqrt((((target.x - _local1) * (target.x - _local1)) + ((target.y - _local2) * (target.y - _local2))));
_local4 = Math.sqrt((((target.x - owner.pos.x) * (target.x - owner.pos.x)) + ((target.y - owner.pos.y) * (target.y - owner.pos.y))));
if (_local4 < _local3){
path.unshift(new Position(owner.pos.x, owner.pos.y));
};
};
};
};
}
private function cleanup():void{
if (owner){
astar = null;
if ((((((pathindex > 0)) && (path.length))) && (!(owner.pos.isequal(path[(pathindex - 1)]))))){
world.setpos(path[(pathindex - 1)], 0);
};
if (owner.cstate == Consts.MOVING){
owner.cstate = Consts.IDLE;
};
owner = null;
path.length = 0;
};
}
override public function deactivate():void{
super.deactivate();
cleanup();
}
}
}//package fai
Section 24
//Player (fai.Player)
package fai {
public class Player {
public var camp:Camp;
private var engine:Engine;// = null
public function Player(_arg1:Engine):void{
engine = null;
camp = new Camp();
super();
engine = _arg1;
}
public function attackTarget(_arg1:Position):void{
var _local2:Unit;
var _local3:Unit;
moveUnits(_arg1, false);
_local2 = engine.getUnitUnder(_arg1);
if (_local2){
for each (_local3 in engine.selectedUnits) {
if (!_local3.flag(UnitFlags.Peaceful)){
_local3.life.setAttackTarget(_local2);
};
};
};
}
public function stopUnits():void{
var _local1:Unit;
for each (_local1 in engine.selectedUnits) {
_local1.life.stop();
};
}
public function moveUnits(_arg1:Position, _arg2:Boolean):void{
var _local3:Unit;
for each (_local3 in engine.selectedUnits) {
if (!_local3.flag(UnitFlags.Building)){
_local3.life.move(_arg1, _arg2);
};
};
}
}
}//package fai
Section 25
//Position (fai.Position)
package fai {
public class Position {
public var x:int;// = 0
public var y:int;// = 0
public function Position(_arg1:int=0, _arg2:int=0):void{
x = 0;
y = 0;
super();
set(_arg1, _arg2);
}
public function copy(_arg1:Position):void{
x = _arg1.x;
y = _arg1.y;
}
public function set(_arg1:int, _arg2:int):void{
x = _arg1;
y = _arg2;
}
public function isequal(_arg1:Position):Boolean{
return ((((x == _arg1.x)) && ((y == _arg1.y))));
}
}
}//package fai
Section 26
//RepairGoal (fai.RepairGoal)
package fai {
public class RepairGoal extends Goal {
private var engine:Engine;// = null
private var unitcost:int;// = 0
private var life:int;// = 0
public function RepairGoal(_arg1:Unit, _arg2:Engine):void{
unitcost = 0;
life = 0;
engine = null;
super();
owner = _arg1;
engine = _arg2;
life = engine.utypes.params(owner.type).health;
life = (life + ((life * _arg1.upgradeLevel) * Consts.upgradeHExtra));
if (life == owner.health){
deactivate();
return;
};
unitcost = (owner.cost - ((owner.cost * owner.health) / life));
if (((!(unitcost)) && (owner.cost))){
unitcost = 1;
};
if (engine.money < unitcost){
engine.log("Not enough resources for repair");
} else {
engine.money = (engine.money - unitcost);
engine.menu.resources.update();
owner.health = life;
if (engine.isUnitInSelection(owner)){
engine.updateMenu();
};
};
deactivate();
}
public function advance():void{
}
public static function rcost(_arg1, _arg2:Unit):int{
var _local3:int;
var _local4:int;
_local3 = _arg1.utypes.params(_arg2.type).health;
_local3 = (_local3 + ((_local3 * _arg2.upgradeLevel) * Consts.upgradeHExtra));
if (_arg2.health == _local3){
return (0);
};
_local4 = (_arg2.cost - ((_arg2.cost * _arg2.health) / _local3));
if (((!(_local4)) && (_arg2.cost))){
_local4 = 1;
};
return (_local4);
}
}
}//package fai
Section 27
//Scenario (fai.Scenario)
package fai {
import flash.events.*;
import flash.text.*;
import flash.utils.*;
public class Scenario {
public var engine:Engine;// = null
private var enemy:int;// = 0
private var difparams:DifficultyParams;// = null
public var thinktimer:Timer;// = null
private var threats:Threats;// = null
private var sm:SecurityMon;// = null
private var tpos:Position;// = null
private var targetSoft:Unit;// = null
public var pause:int;// = 0
private static const PAUSE:int = 30;
private static const EnemyCount:int = 10;
private static const MaxCountForSendNext:int = 50;
public function Scenario(_arg1:Engine):void{
engine = null;
thinktimer = null;
pause = 0;
threats = null;
enemy = 0;
sm = null;
targetSoft = null;
tpos = null;
difparams = null;
super();
engine = _arg1;
engine.scenario = this;
}
private function liveCount():int{
var _local1:int;
var _local2:int;
var _local3:Unit;
_local1 = 0;
_local2 = 0;
while (_local2 < engine.comp.camp.units.length) {
_local3 = engine.comp.camp.units[_local2];
if ((((_local3.mapid == Consts.hostileId)) && (_local3.isLive()))){
_local1++;
};
_local2++;
};
return (_local1);
}
public function stop():void{
if (thinktimer){
thinktimer.stop();
thinktimer.removeEventListener(TimerEvent.TIMER, thinkHandler);
thinktimer = null;
};
if (threats){
threats.clear();
engine.globalstage.removeChild(threats);
};
if (sm){
engine.globalstage.removeChild(sm);
};
}
private function retarget():Position{
var _local1:Position;
if (!tpos){
targetSoft = engine.soft.getNearestById(Consts.softId, new Position(35, 61));
} else {
targetSoft = engine.soft.getNearestById(Consts.softId, tpos);
};
if (!targetSoft){
return (null);
};
_local1 = new Position(targetSoft.pos.x, targetSoft.pos.y);
while (engine.world.getpos(_local1)) {
_local1.y--;
if (_local1.y <= 0){
return (null);
};
};
return (_local1);
}
public function show():void{
if (sm){
sm.visible = true;
};
if (threats){
threats.visible = true;
};
}
public function hide():void{
if (sm){
sm.visible = false;
};
if (threats){
threats.visible = false;
};
}
private function makeEnemies():void{
var _local1:Number;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:Boolean;
var _local6:MapMatrix;
var _local7:String;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:Unit;
_local1 = difparams.divquotient;
if (threats.curlevel < 6){
_local1 = (difparams.divquotient * 1.5);
} else {
if (threats.curlevel < 10){
_local1 = (difparams.divquotient * 1.3);
};
};
_local2 = int((threats.curlevel / _local1));
_local3 = 0;
_local4 = EnemyCount;
_local5 = false;
if (enemy >= Threats.enemies.length){
enemy = 0;
_local5 = true;
_local4 = 1;
};
_local6 = null;
tpos = retarget();
if (!tpos){
return;
};
engine.playSound(engine.sloader.sounds[UnitTypes.soundenemiesappearing], new Position(50, 10));
_local7 = Threats.enemies[enemy];
if (_local5){
_local9 = ((Math.floor((threats.curlevel / Threats.enemies.length)) - 1) % Threats.enemies.length);
if (_local9 >= Threats.enemies.length){
_local9 = (Threats.enemies.length - 1);
} else {
if (_local9 < 0){
_local9 = 0;
};
};
_local7 = Threats.enemies[_local9];
};
if ((((UnitTypes.spam == _local7)) && (!(_local5)))){
_local4 = (_local4 * 2);
} else {
if ((((UnitTypes.virus == _local7)) && (!(_local5)))){
_local4 = 5;
};
};
_local8 = 0;
while (_local8 < engine.mapheight) {
_local10 = 3;
while (_local10 < engine.mapwidth) {
_local6 = (engine.utypes.params(_local7).flag(UnitFlags.Flying)) ? engine.airworld : engine.world;
if (!_local6.getxy(_local10, _local8)){
_local11 = engine.buildUnit(_local7, _local10, _local8, true);
if (_local5){
if (UnitTypes.virus == _local11.type){
engine.upgradeUnitToLevel(_local11, (_local2 * 5));
} else {
engine.upgradeUnitToLevel(_local11, (_local2 * 10));
};
_local11.deathcost = 100;
if (_local11.type == UnitTypes.hijacker){
_local11.damage = 15;
} else {
_local11.damage = 200;
};
} else {
engine.upgradeUnitToLevel(_local11, _local2);
};
if (_local7 == UnitTypes.hijacker){
_local11.life.move(tpos, false);
} else {
_local11.life.move(tpos, true);
};
_local3++;
if (_local3 >= _local4){
if (!_local5){
enemy++;
};
return;
};
};
_local10 = (_local10 + 3);
};
_local8 = (_local8 + 3);
};
enemy++;
}
public function sendNext():void{
if (((!(thinktimer)) || (engine.paused))){
return;
};
if (liveCount() > MaxCountForSendNext){
engine.log("Too many invaders");
return;
};
if ((((threats.curlevel < threats.nlevels)) && (threats.isNextWaveAcceptable()))){
pause = 1;
thinkHandler(null);
};
}
public function hitSoft(_arg1:Unit):Boolean{
var _local2:int;
var _local3:int;
if (((!(targetSoft)) || (!(targetSoft.isLive())))){
tpos = retarget();
if (!tpos){
return (false);
};
_local2 = engine.comp.camp.units.length;
_local3 = 0;
while (_local3 < _local2) {
if (engine.comp.camp.units[_local3].type != UnitTypes.hijacker){
engine.comp.camp.units[_local3].life.move(tpos, true);
};
_local3++;
};
return (false);
} else {
if (!_arg1.pos.isequal(tpos)){
_arg1.life.move(tpos, true);
return (false);
};
};
engine.playSound(engine.sloader.sounds[UnitTypes.soundshothijack], new Position(50, 100));
engine.hitUnit(_arg1.damage, targetSoft);
engine.effect(((targetSoft.pos.x * Consts.cellsize) - (targetSoft.sprite.width / 2)), ((targetSoft.pos.y * Consts.cellsize) - (targetSoft.sprite.height / 2)), UnitTypes.spsofthit);
engine.menu.resources.update();
return (true);
}
public function start():void{
difparams = new DifficultyParams(engine.difficulty);
threats = new Threats(engine, difparams.nwaves, engine.menu.riskinfo);
engine.globalstage.addChild(threats);
threats.x = 133;
threats.y = 541;
sm = new SecurityMon();
sm.x = 95;
sm.y = 560;
engine.globalstage.addChild(sm);
thinktimer = new Timer(1000, 0);
thinktimer.addEventListener(TimerEvent.TIMER, thinkHandler);
thinktimer.start();
}
public function isRunning():Boolean{
return (!((thinktimer == null)));
}
private function thinkHandler(_arg1:TimerEvent):void{
var _local2:int;
if (!engine.soft.units.length){
engine.menu.gameover();
return;
};
_local2 = liveCount();
if (!_local2){
if (threats.curlevel > 0){
threats.fadeOut();
};
if (threats.curlevel >= threats.nlevels){
engine.menu.victory();
return;
};
};
if (threats.curlevel < threats.nlevels){
if (pause > 0){
pause--;
engine.menu.remaining.text = (pause.toString() + " seconds");
engine.menu.resources.htime.text = pause.toString();
if (pause <= 0){
makeEnemies();
threats.nextWave();
} else {
return;
};
};
pause = PAUSE;
};
}
}
}//package fai
Section 28
//SmartLoader (fai.SmartLoader)
package fai {
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.utils.*;
import mochi.*;
public class SmartLoader {
public var buttons:Dictionary;
public var sounds:Dictionary;
public var loaded:Boolean;// = false
public var engine:Engine;// = null
public var grounds:Dictionary;
private var loadendHandler:Function;// = null
public var maps:Map;
private var loadprocessHandler:Function;// = null
public var specials:Dictionary;
public var utypes:UnitTypes;// = null
public var mimages:Dictionary;
private var loadcount:int;// = 0
private var startcount:int;// = 0
public var suites:Dictionary;
public static const host:String = "http://www.warspark.com/mostemp/";
public function SmartLoader(){
suites = new Dictionary();
buttons = new Dictionary();
sounds = new Dictionary();
grounds = new Dictionary();
mimages = new Dictionary();
specials = new Dictionary();
maps = new Map();
engine = null;
loaded = false;
loadcount = 0;
startcount = 0;
utypes = null;
loadendHandler = null;
loadprocessHandler = null;
super();
}
public function getLibSound(_arg1:String):Sound{
return (sounds[_arg1]);
}
public function getSpecial(_arg1:String):AnimatedBitmap{
var _local2:BitmapData;
_local2 = specials[_arg1];
return (new AnimatedBitmap(_local2, _local2.width, _local2.height));
}
public function dressUnit(_arg1:Unit, _arg2:String, _arg3:Engine):void{
var _local4:Array;
_local4 = suites[_arg2];
_arg1.sprite.setAppearence(_local4[0], _local4[1], null, _local4[2], _local4[3], _arg1.spritewidth);
if (!_arg1.attacksound){
if (_arg1.mapid == Consts.myId){
if (_arg1.type == UnitTypes.firewall){
_arg1.attacksound = Sound(getLibSound(UnitTypes.soundshotfirewall));
} else {
_arg1.attacksound = Sound(getLibSound(UnitTypes.soundshotanti));
};
} else {
if ((((_arg1.mapid == Consts.hostileId)) && ((_arg1.type == UnitTypes.hijacker)))){
_arg1.attacksound = Sound(getLibSound(UnitTypes.soundshothijack));
};
};
};
if (_arg1.flag(UnitFlags.Flying)){
_arg3.airlayer.addChildAt(_arg1.sprite, 0);
} else {
_arg3.groundlayer.addChildAt(_arg1.sprite, 0);
};
}
public function saveScore():void{
if (!engine.score){
return;
};
MochiScores.showLeaderboard({boardID:"e47deaaa48a749ec", score:engine.score});
engine.score = 0;
}
public function getBody(_arg1:String):BitmapData{
return (suites[_arg1][0]);
}
public function dressPeacefulUnit(_arg1:Unit, _arg2:String, _arg3:Engine):void{
var _local4:Array;
_local4 = suites[_arg2];
_arg1.sprite.setAppearence(_local4[0], null, null, null, null, _arg1.spritewidth);
if (_arg1.flag(UnitFlags.Flying)){
_arg3.airlayer.addChildAt(_arg1.sprite, 0);
} else {
_arg3.groundlayer.addChildAt(_arg1.sprite, 0);
};
}
private function loadCompleteHandler(_arg1:Event):void{
loadcount--;
if (!loadcount){
loadprocessHandler(100);
loaded = true;
loadendHandler();
} else {
loadprocessHandler((100 - ((loadcount * 100) / startcount)));
};
}
public function load():void{
suites[UnitTypes.virus] = new Array(5);
suites[UnitTypes.virus][0] = new Virusbody(0, 0);
suites[UnitTypes.backdoor] = new Array(5);
suites[UnitTypes.backdoor][0] = new Backdoorbody(0, 0);
suites[UnitTypes.trojan] = new Array(5);
suites[UnitTypes.trojan][0] = new Trojanbody(0, 0);
suites[UnitTypes.adware] = new Array(5);
suites[UnitTypes.adware][0] = new Adwarebody(0, 0);
suites[UnitTypes.hijacker] = new Array(5);
suites[UnitTypes.hijacker][0] = new Hijackerbody(0, 0);
suites[UnitTypes.hijacker][1] = new Hijackerattack(0, 0);
suites[UnitTypes.hijacker][2] = new Hijackerbullet(0, 0);
suites[UnitTypes.hijacker][3] = new Hijackerbe(0, 0);
suites[UnitTypes.keylogger] = new Array(5);
suites[UnitTypes.keylogger][0] = new Keyloggerbody(0, 0);
suites[UnitTypes.spyware] = new Array(5);
suites[UnitTypes.spyware][0] = new Spywarebody(0, 0);
suites[UnitTypes.spam] = new Array(5);
suites[UnitTypes.spam][0] = new Spambody(0, 0);
suites[UnitTypes.antispyware] = new Array(5);
suites[UnitTypes.antispyware][0] = new Antispywarebody(0, 0);
suites[UnitTypes.antispyware][1] = new Antispywareattack(0, 0);
suites[UnitTypes.antispyware][2] = new Antispywarebullet(0, 0);
suites[UnitTypes.antispyware][3] = new Antispywarebe(0, 0);
suites[UnitTypes.antivirus] = new Array(5);
suites[UnitTypes.antivirus][0] = new Antivirusbody(0, 0);
suites[UnitTypes.antivirus][1] = new Antivirusattack(0, 0);
suites[UnitTypes.antivirus][2] = new Antivirusbullet(0, 0);
suites[UnitTypes.antivirus][3] = new Antivirusbe(0, 0);
suites[UnitTypes.antiadware] = new Array(5);
suites[UnitTypes.antiadware][0] = new Antiadwarebody(0, 0);
suites[UnitTypes.antiadware][1] = new Antiadwareattack(0, 0);
suites[UnitTypes.antiadware][2] = new Antiadwarebullet(0, 0);
suites[UnitTypes.antiadware][3] = new Antiadwarebe(0, 0);
suites[UnitTypes.garbagecleaner] = new Array(5);
suites[UnitTypes.garbagecleaner][0] = new GarbageCleanerbody(0, 0);
suites[UnitTypes.garbagecleaner][1] = new GarbageCleanerattack(0, 0);
suites[UnitTypes.garbagecleaner][2] = new GarbageCleanerbullet(0, 0);
suites[UnitTypes.garbagecleaner][3] = new GarbageCleanerbe(0, 0);
suites[UnitTypes.firewall] = new Array(5);
suites[UnitTypes.firewall][0] = new Firewallbody(0, 0);
suites[UnitTypes.firewall][1] = new Firewallattack(0, 0);
suites[UnitTypes.firewall][2] = new Virusbody(0, 0);
suites[UnitTypes.firewall][3] = new Virusbody(0, 0);
suites[UnitTypes.browser] = new Array(1);
suites[UnitTypes.browser][0] = new Browserbody(0, 0);
suites[UnitTypes.cpanel] = new Array(1);
suites[UnitTypes.cpanel][0] = new Controlpanelbody(0, 0);
suites[UnitTypes.docs] = new Array(1);
suites[UnitTypes.docs][0] = new Docsbody(0, 0);
suites[UnitTypes.games] = new Array(1);
suites[UnitTypes.games][0] = new Gamesbody(0, 0);
suites[UnitTypes.mail] = new Array(1);
suites[UnitTypes.mail][0] = new Mailbody(0, 0);
suites[UnitTypes.messenger] = new Array(1);
suites[UnitTypes.messenger][0] = new Messengerbody(0, 0);
suites[UnitTypes.musicplayer] = new Array(1);
suites[UnitTypes.musicplayer][0] = new MusicPlayerbody(0, 0);
suites[UnitTypes.rbin] = new Array(1);
suites[UnitTypes.rbin][0] = new RBinbody(0, 0);
suites[UnitTypes.registry] = new Array(1);
suites[UnitTypes.registry][0] = new Registrybody(0, 0);
buttons[UnitTypes.bcancel] = new Buttonbcancel(0, 0);
buttons[UnitTypes.bantivirus] = new Buttonbantivirus(0, 0);
buttons[UnitTypes.bantispyware] = new Buttonbantispyware(0, 0);
buttons[UnitTypes.bantiadware] = new Buttonbantiadware(0, 0);
buttons[UnitTypes.bgarbagecleaner] = new Buttonbgarbagecleaner(0, 0);
buttons[UnitTypes.bfirewall] = new Buttonbfirewall(0, 0);
mimages[UnitTypes.mimoney] = new Menumoney(0, 0);
mimages[UnitTypes.miattack] = new Menuattack(0, 0);
mimages[UnitTypes.mirange] = new Menurange(0, 0);
mimages[UnitTypes.miarmor] = new Menushield(0, 0);
mimages[UnitTypes.miheart] = new Menuheart(0, 0);
specials[UnitTypes.spdeath1] = new Specialsdeath1(0, 0);
specials[UnitTypes.spsofthit] = new Specialssofthit(0, 0);
specials[UnitTypes.spdebris] = new Specialsdebris(0, 0);
grounds["background.png"] = new Groundbackground(0, 0);
grounds["windowheader.png"] = new Groundwindowheader(0, 0);
sounds[UnitTypes.soundclick] = new Soundclickerx();
sounds[UnitTypes.sounddeath] = new Sounddeath();
sounds[UnitTypes.soundenemiesappearing] = new Soundenemiesappearing();
sounds[UnitTypes.soundshotanti] = new Soundshot_anti();
sounds[UnitTypes.soundshothijack] = new Soundshot_hijack();
sounds[UnitTypes.soundshotfirewall] = new Soundshot_firewall();
sounds[UnitTypes.soundstartmenu] = new SoundStartMenu();
loadendHandler();
loaded = true;
}
public function getButton(_arg1:String):AnimatedBitmap{
var _local2:BitmapData;
_local2 = buttons[_arg1];
return (new AnimatedBitmap(_local2, _local2.width, _local2.height));
}
public function navigateToLeaderboard(_arg1:String=""):void{
MochiScores.showLeaderboard({boardID:"e47deaaa48a749ec"});
}
public function getMenuItem(_arg1:String):AnimatedBitmap{
var _local2:BitmapData;
_local2 = mimages[_arg1];
return (new AnimatedBitmap(_local2, _local2.width, _local2.height));
}
public function startLoading(_arg1:Function, _arg2:Function):void{
var _local3:XML;
var _local4:XMLList;
var _local5:XML;
loadendHandler = _arg2;
loadprocessHandler = _arg1;
_local3 = new XML(Maps.maps);
_local4 = _local3.level;
for each (_local5 in _local4) {
maps.add(int(_local5.@number), new LevelMap(new XML(_local5.toString())));
};
load();
}
public function getGround(_arg1:String):AnimatedBitmap{
var _local2:BitmapData;
_local2 = grounds[_arg1];
return (new AnimatedBitmap(_local2, _local2.width, _local2.height));
}
}
}//package fai
Section 29
//Threats (fai.Threats)
package fai {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.utils.*;
import flash.geom.*;
public class Threats extends Sprite {
private var riskimage:AnimatedBitmap;// = null
private var lparent:Sprite;// = null
private var fadeElem;// = null
public var curlevel:int;// = 0
private var engine:Engine;// = null
public var nlevels:int;// = 0
private var ftm:Timer;// = null
private var levels:Array;
private var tm:Timer;// = null
private var offs:Number;// = 0
private var riskinfo:RiskInfo;// = null
public static const colors:Array = [320260, 16555287, 63231, 16744150, 16758904, 13489151, 0xFF0048, 0xFF0000];
public static const enemies:Array = [UnitTypes.adware, UnitTypes.spam, UnitTypes.backdoor, UnitTypes.trojan, UnitTypes.spyware, UnitTypes.keylogger, UnitTypes.hijacker, UnitTypes.virus];
private static var twidth:Number = 0;
public function Threats(_arg1:Engine, _arg2:int, _arg3:RiskInfo):void{
var _local4:int;
var _local5:TextFormat;
var _local6:Boolean;
var _local7:int;
var _local8:Threat;
var _local9:int;
nlevels = 0;
lparent = null;
levels = new Array();
riskinfo = null;
tm = null;
ftm = null;
offs = 0;
fadeElem = null;
curlevel = 0;
engine = null;
riskimage = null;
super();
engine = _arg1;
nlevels = _arg2;
lparent = new Sprite();
lparent.x = 2;
addChild(lparent);
riskinfo = _arg3;
scrollRect = new Rectangle(0, 0, 477, 60);
_local4 = 0;
_local5 = null;
_local6 = false;
_local7 = 0;
while (_local7 < nlevels) {
if (_local4 >= enemies.length){
_local4 = 0;
_local6 = true;
} else {
_local6 = false;
};
_local8 = new Threat();
lparent.addChild(_local8);
twidth = _local8.width;
_local8.x = (((_local8.width + 3) * levels.length) + _local8.width);
levels.push(_local8);
_local9 = 14;
if (_local7 >= 99){
_local9 = 10;
_local8.level.y = (_local8.level.y + 8);
};
if (_local6){
_local5 = _local8.level.defaultTextFormat;
_local5.size = _local9;
_local5.bold = true;
_local5.color = 0xFFFFFF;
_local8.level.defaultTextFormat = _local5;
_local8.level.text = (_local7 + 1).toString();
_local5 = _local8.title.defaultTextFormat;
_local5.size = 12;
_local5.bold = true;
_local5.color = 0xFFFFFF;
_local8.title.defaultTextFormat = _local5;
_local8.title.text = "Boss";
} else {
_local5 = _local8.level.defaultTextFormat;
_local5.size = _local9;
_local5.bold = true;
_local5.color = colors[_local4];
_local8.level.defaultTextFormat = _local5;
_local8.level.text = (_local7 + 1).toString();
_local5 = _local8.title.defaultTextFormat;
if ((((_local4 == 5)) || ((_local4 == 2)))){
_local5.size = 10;
} else {
_local5.size = 11;
};
_local5.bold = true;
_local5.color = colors[_local4];
_local8.title.defaultTextFormat = _local5;
_local8.title.text = enemies[_local4];
};
_local8.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
_local8.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
_local8.cacheAsBitmap = true;
if (!_local6){
_local4++;
};
_local7++;
};
lparent.cacheAsBitmap = true;
}
private function onMouseOver(_arg1:MouseEvent):void{
var _local2:String;
var _local3:Boolean;
var _local4:int;
var _local5:*;
var _local6:int;
riskinfo.visible = true;
riskinfo.title.text = _arg1.currentTarget.title.text;
riskinfo.x = 250;
riskinfo.y = 350;
_local2 = riskinfo.title.text;
_local3 = false;
_local4 = 0;
if ("Boss" == _local2){
_local6 = ((Math.floor((curlevel / enemies.length)) - 1) % enemies.length);
if (_local6 >= enemies.length){
_local6 = (enemies.length - 1);
} else {
if (_local6 < 0){
_local6 = 0;
};
};
_local2 = enemies[_local6];
_local3 = true;
};
if (_local3){
_local4 = 1;
} else {
if (UnitTypes.spam == _local2){
_local4 = 20;
} else {
_local4 = 10;
};
};
riskinfo.quantity.text = _local4.toString();
switch (_local2){
case UnitTypes.adware:
riskinfo.desc.text = "Most simple and safe threat, doesn't hurt much";
riskinfo.risklevel.text = "Lowest";
break;
case UnitTypes.spam:
riskinfo.desc.text = "Weak threat but has large quantity";
riskinfo.risklevel.text = "Low";
break;
case UnitTypes.backdoor:
riskinfo.desc.text = "Weak threat but has increased life rate";
riskinfo.risklevel.text = "Average";
break;
case UnitTypes.trojan:
riskinfo.desc.text = "Average risk threat, dangerous on higher levels";
riskinfo.risklevel.text = "Average";
break;
case UnitTypes.spyware:
riskinfo.desc.text = "Above average threat, very dangerous on higher levels";
riskinfo.risklevel.text = "High";
break;
case UnitTypes.keylogger:
riskinfo.desc.text = "Above average threat, most fast moving invader";
riskinfo.risklevel.text = "High";
break;
case UnitTypes.hijacker:
riskinfo.desc.text = "Strong invader, can destroy security tools";
riskinfo.risklevel.text = "Very High";
break;
case UnitTypes.virus:
riskinfo.desc.text = "Most dangerous invader, moves above security tools";
riskinfo.risklevel.text = "Highest";
break;
};
if (_local3){
riskinfo.desc.text = "Very dangerous invader, very high damage rate";
riskinfo.risklevel.text = "Highest";
};
_local5 = engine.sloader.getBody(_local2);
if (riskimage){
riskinfo.removeChild(riskimage);
riskimage = null;
};
riskimage = new AnimatedBitmap(_local5, engine.utypes.params(_local2).spritewidth, _local5.height);
riskinfo.addChild(riskimage);
riskimage.x = 30;
riskimage.y = ((riskinfo.title.y + (riskinfo.title.height / 2)) - (_local5.height / 2));
}
public function isNextWaveAcceptable():Boolean{
return ((tm == null));
}
private function fadeHandler(_arg1:TimerEvent):void{
if (fadeElem.alpha > 0){
fadeElem.alpha = (fadeElem.alpha - 0.025);
} else {
ftm.stop();
ftm.removeEventListener(TimerEvent.TIMER, fadeHandler);
ftm = null;
};
}
public function fadeOut():void{
if (((ftm) || ((curlevel > levels.length)))){
return;
};
fadeElem = levels[(curlevel - 1)];
if (fadeElem.alpha <= 0){
fadeElem = null;
return;
};
ftm = new Timer(10, 0);
ftm.addEventListener(TimerEvent.TIMER, fadeHandler);
ftm.start();
}
private function onMouseOut(_arg1:MouseEvent):void{
riskinfo.visible = false;
}
private function tmHandler(_arg1:TimerEvent):void{
if (offs > 0){
lparent.x = (lparent.x - 3);
offs = (offs - 3);
} else {
if (offs < 0){
lparent.x = (lparent.x + Math.abs(offs));
};
curlevel++;
tm.stop();
tm.removeEventListener(TimerEvent.TIMER, tmHandler);
tm = null;
};
}
public function clear():void{
var _local1:Threat;
if (riskimage){
riskinfo.removeChild(riskimage);
riskimage = null;
};
for each (_local1 in levels) {
_local1.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
_local1.removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
lparent.removeChild(_local1);
};
removeChild(lparent);
}
public function nextWave():void{
if (tm){
return;
};
tm = new Timer(10, 0);
tm.addEventListener(TimerEvent.TIMER, tmHandler);
tm.start();
offs = (twidth + 3);
}
}
}//package fai
Section 30
//Unit (fai.Unit)
package fai {
import flash.events.*;
import flash.media.*;
public class Unit {
public var bulletspeed:uint;// = 15
private var attackpos:Position;// = null
public var cstate:uint;// = 0
public var flags:uint;// = 0
public var desc:String;// = "Unit Desc."
public var spritewidth:int;// = 24
public var rotstep:int;// = 15
private var destangel:int;// = 0
private var movetarget:Position;// = null
public var eyerange:uint;// = 8
public var deathsteps:uint;// = 12
public var type:String;// = null
public var deathcost:uint;// = 3
public var sprite:UnitSprite;// = null
public var attacksound:Sound;// = null
public var upgradeLevel:int;// = 0
public var engine:Engine;// = null
private var xstep:Number;// = 0
private var ystep:Number;// = 0
public var cost:uint;// = 100
public var armor:uint;// = 1
private var step:uint;// = 0
public var pos:Position;
private var attacktarget:Unit;// = null
public var health:int;// = 50
public var rotating:Boolean;// = false
public var attackssteps:uint;// = 3
public var damage:uint;// = 0
public var movesteps:int;// = 5
public var mapid:uint;// = 0
public var rechargetime:uint;// = 35
public var life:LifeGoal;// = null
public var killed:int;// = 0
public function Unit(_arg1:Engine, _arg2:uint, _arg3:String):void{
rotstep = 15;
movesteps = 5;
attackssteps = 3;
deathsteps = 12;
type = null;
spritewidth = 24;
pos = new Position();
sprite = null;
cstate = 0;
eyerange = 8;
damage = 0;
armor = 1;
health = 50;
bulletspeed = 15;
rechargetime = 35;
deathcost = 3;
killed = 0;
upgradeLevel = 0;
cost = 100;
flags = 0;
attacksound = null;
desc = "Unit Desc.";
movetarget = null;
attacktarget = null;
attackpos = null;
engine = null;
mapid = 0;
xstep = 0;
ystep = 0;
step = 0;
rotating = false;
destangel = 0;
life = null;
super();
engine = _arg1;
mapid = _arg2;
type = _arg3;
sprite = new UnitSprite(this);
if (engine){
sprite.addEventListener(MouseEvent.MOUSE_OVER, onmouseover);
sprite.addEventListener(MouseEvent.MOUSE_OUT, onmouseout);
};
}
private function onmouseout(_arg1:MouseEvent):void{
if (((!(isLive())) || (!(engine.isUnitInSelection(this))))){
sprite.select(false);
};
}
public function destroy():void{
reset();
if (cstate != Consts.DEATH){
cstate = Consts.DEATH;
sprite.removeEventListener(MouseEvent.MOUSE_OVER, onmouseover);
sprite.removeEventListener(MouseEvent.MOUSE_OUT, onmouseout);
};
sprite.select(false);
}
private function onmouseover(_arg1:MouseEvent):void{
updateHealth();
}
public function updateHealth():void{
sprite.select(true);
}
public function copyProperties(_arg1:Unit):void{
eyerange = _arg1.eyerange;
damage = _arg1.damage;
armor = _arg1.armor;
health = _arg1.health;
bulletspeed = _arg1.bulletspeed;
rechargetime = _arg1.rechargetime;
}
public function flag(_arg1:uint):Boolean{
return ((flags & _arg1));
}
public function startattack(_arg1:Unit):void{
reset();
attacktarget = _arg1;
cstate = Consts.ATTACK;
attackpos = new Position();
attackpos.set(attacktarget.sprite.x, attacktarget.sprite.y);
if (rotstep){
startrotate((((Math.atan2((attacktarget.sprite.y - sprite.y), (attacktarget.sprite.x - sprite.x)) / Math.PI) * 180) - 90));
};
}
public function isLive():Boolean{
return ((health > 0));
}
public function startrotate(_arg1:int):void{
destangel = (_arg1 - sprite.body.rotation);
if (destangel > 180){
destangel = (destangel - 360);
} else {
if (destangel < -180){
destangel = (destangel + 360);
};
};
if (!destangel){
return;
};
rotating = true;
}
public function attack():void{
if (rotating){
rotate();
return;
};
if (!step){
sprite.setAttackSprite();
engine.playSound(attacksound, pos);
};
if (step >= attackssteps){
engine.runBullet(this, attacktarget, attackpos);
reset();
sprite.setMoveSprite();
} else {
step++;
sprite.setFrame(((step * sprite.nframes()) / attackssteps));
};
}
public function move():void{
if (rotating){
rotate();
return;
};
if (!step){
sprite.setMoveSprite();
};
sprite.x = (sprite.x + xstep);
sprite.y = (sprite.y + ystep);
step++;
sprite.setFrame(((step * sprite.nframes()) / movesteps));
if (step >= movesteps){
if ((flags & UnitFlags.Flying)){
engine.airworld.setpos(pos, 0);
} else {
engine.world.setpos(pos, 0);
};
pos = movetarget;
reset();
};
}
public function reset():void{
cstate = Consts.IDLE;
step = (ystep = (xstep = 0));
attacktarget = null;
rotating = false;
}
public function rotate():void{
var _local1:int;
if (Math.abs(destangel) < rotstep){
sprite.body.rotation = (sprite.body.rotation + destangel);
destangel = 0;
rotating = false;
} else {
_local1 = ((Math.abs(destangel) > rotstep)) ? ((destangel > 0)) ? rotstep : -(rotstep) : destangel;
sprite.body.rotation = (sprite.body.rotation + _local1);
destangel = (destangel - _local1);
};
}
public function startmove(_arg1:Position):void{
reset();
movetarget = _arg1;
cstate = Consts.MOVING;
xstep = (((movetarget.x * Consts.cellsize) - sprite.x) / movesteps);
ystep = (((movetarget.y * Consts.cellsize) - sprite.y) / movesteps);
if (rotstep){
startrotate((((Math.atan2(ystep, xstep) / Math.PI) * 180) - 90));
};
}
public function activate(_arg1:Engine):void{
life = new LifeGoal(_arg1, this);
_arg1.goals.push(life);
}
}
}//package fai
Section 31
//UnitFlags (fai.UnitFlags)
package fai {
public class UnitFlags {
public static const Firewall:uint = 32;
public static const Peaceful:uint = 1;
public static const Building:uint = 2;
public static const Antilandforces:uint = 16;
public static const Flying:uint = 4;
public static const Antiaircraft:uint = 8;
public static const Frozenable:uint = 64;
}
}//package fai
Section 32
//UnitSprite (fai.UnitSprite)
package fai {
import flash.display.*;
public class UnitSprite extends Sprite {
public var bullet:BitmapData;// = null
private var upgrade:Shape;// = null
private var lastulevel:int;// = 0
public var selection:Shape;// = null
public var body:Sprite;
private var owner:Unit;// = null
public var bmind:AnimatedBitmap;// = null
public var sprite:AnimatedBitmap;// = null
private var lastfrontier:int;// = -1
public var dbuffer:BitmapData;// = null
public var bulletexp:BitmapData;// = null
public var abuffer:BitmapData;// = null
public var mbuffer:BitmapData;// = null
public function UnitSprite(_arg1:Unit){
body = new Sprite();
selection = null;
sprite = null;
bmind = null;
owner = null;
upgrade = null;
mbuffer = null;
abuffer = null;
dbuffer = null;
bullet = null;
bulletexp = null;
lastfrontier = -1;
lastulevel = 0;
super();
owner = _arg1;
visible = false;
}
public function select(_arg1:Boolean):void{
var sqcount:*;
var fullHealth:*;
var hpercent:*;
var frontier:*;
var diameter:*;
var isenemy:*;
var rsize:*;
var startx:*;
var i:*;
var enable = _arg1;
if (!selection){
selection = new Shape();
addChildAt(selection, 1);
selection.x = (selection.x - (sprite.width / 2));
selection.y = (selection.y - (sprite.height / 2));
selection.alpha = 0.5;
};
if (enable){
var _local3 = selection;
with (_local3) {
visible = true;
sqcount = 7;
fullHealth = owner.engine.utypes.params(owner.type).health;
fullHealth = (fullHealth + ((fullHealth * owner.upgradeLevel) * Consts.upgradeHExtra));
hpercent = ((owner.health * 100) / fullHealth);
frontier = ((hpercent * sqcount) / 100);
if (((!((frontier == lastfrontier))) || (!((owner.upgradeLevel == lastulevel))))){
lastfrontier = frontier;
lastulevel = owner.upgradeLevel;
diameter = Math.max(sprite.width, sprite.height);
graphics.clear();
isenemy = (owner.mapid == Consts.hostileId);
if (isenemy){
graphics.lineStyle(1, 0xFF0000);
} else {
graphics.lineStyle(1, 253443);
};
graphics.drawCircle((sprite.width / 2), (sprite.height / 2), (diameter / 2));
rsize = 5;
startx = (((-(rsize) * sqcount) / 2) + (sprite.width / 2));
graphics.lineStyle(1, 0);
i = 0;
i = 0;
while (i < sqcount) {
if (i < frontier){
if (isenemy){
graphics.beginFill(0xFF0000);
} else {
graphics.beginFill(0xFF00);
};
};
graphics.drawRect(startx, (diameter - rsize), rsize, rsize);
if (i < frontier){
graphics.endFill();
};
startx = (startx + rsize);
i++;
};
};
};
} else {
selection.visible = false;
};
}
public function setFrame(_arg1:uint):void{
sprite.setFrame(_arg1);
}
public function rotate(_arg1:uint):void{
body.rotation = _arg1;
}
public function setDeathSprite():void{
sprite.setBuffer(dbuffer);
}
public function nframes():uint{
return (sprite.nframes);
}
public function setAttackSprite():void{
sprite.setBuffer(abuffer);
}
public function update():void{
var rsize:int;
var startx:int;
if (!owner.isLive()){
if (upgrade){
upgrade.graphics.clear();
removeChild(upgrade);
};
return;
};
if (((!(upgrade)) && ((owner.upgradeLevel > 0)))){
upgrade = new Shape();
addChild(upgrade);
upgrade.x = (upgrade.x - (sprite.width / 2));
upgrade.y = (upgrade.y - ((sprite.height / 2) + 3));
};
if (upgrade){
rsize = 6;
startx = 0;
var _local2 = upgrade.graphics;
with (_local2) {
clear();
lineStyle(1, 0);
i = 0;
while (i < owner.upgradeLevel) {
beginFill(0xF600FF);
drawRect(startx, 4, rsize, 4);
endFill();
startx = (startx + (rsize + 1));
i++;
};
};
};
}
public function setAppearence(_arg1:BitmapData, _arg2:BitmapData, _arg3:BitmapData, _arg4:BitmapData, _arg5:BitmapData, _arg6:int):void{
mbuffer = _arg1;
abuffer = _arg2;
dbuffer = _arg3;
bullet = _arg4;
bulletexp = _arg5;
sprite = new AnimatedBitmap(mbuffer, _arg6, mbuffer.height);
body.addChild(sprite);
sprite.x = (sprite.x - (sprite.width / 2));
sprite.y = (sprite.y - (sprite.height / 2));
addChild(body);
}
public function setMoveSprite():void{
sprite.setBuffer(mbuffer);
}
}
}//package fai
Section 33
//UnitTypes (fai.UnitTypes)
package fai {
import flash.utils.*;
public class UnitTypes {
private var sloader:SmartLoader;// = null
private var initiated:Boolean;// = false
public var buttonToUnit:Dictionary;
public var units:Dictionary;
private var unitToButton:Dictionary;
public var engine:Engine;// = null
public static const firewall:String = "Firewall";
public static const cpanel:String = "Control Panel";
public static const antiadware:String = "AntiAdware";
public static const soundshotanti:String = "shot_anti.mp3";
public static const types:Array = [virus, backdoor, trojan, adware, hijacker, keylogger, spyware, spam, antispyware, antivirus, antiadware, garbagecleaner, firewall, mail, browser, rbin, cpanel, docs, games, messenger, musicplayer, registry];
public static const hijacker:String = "Hijacker";
public static const soundshotfirewall:String = "shot_firewall.mp3";
public static const messenger:String = "Internet Messenger";
public static const backdoor:String = "Backdoor";
public static const antispyware:String = "AntiSpyware";
public static const spdebris:String = "debris.png";
public static const menuimages:Array = [mimoney, miattack, mirange, miarmor, miheart];
public static const adware:String = "Adware";
public static const mirange:String = "range.png";
public static const miarmor:String = "shield.png";
public static const mimoney:String = "money.png";
public static const browser:String = "Browser";
public static const soundshothijack:String = "shot_hijack.mp3";
public static const keylogger:String = "Keylogger";
public static const spsofthit:String = "softhit.png";
public static const soundstartmenu:String = "StartMenu.mp3";
public static const mail:String = "Mail Client";
public static const bantivirus:String = "bantivirus.png";
public static const docs:String = "Documents Folder";
public static const registry:String = "System Registry";
public static const games:String = "Games Folder";
public static const bgarbagecleaner:String = "bgarbagecleaner.png";
public static const sounddeath:String = "death.mp3";
public static const trojan:String = "Trojan";
public static const spyware:String = "Spyware";
public static const spam:String = "Spam";
public static const miheart:String = "heart.png";
public static const musicplayer:String = "Music Player";
public static const rbin:String = "Recycle Bin";
public static const soundenemiesappearing:String = "enemies appearing.mp3";
public static const soundclick:String = "clickerx.mp3";
public static const spdeath1:String = "death1.png";
public static const antivirus:String = "AntiVirus";
public static const bcancel:String = "bcancel.png";
public static const garbagecleaner:String = "Garbage Cleaner";
public static const bfirewall:String = "bfirewall.png";
public static const bantiadware:String = "bantiadware.png";
public static const miattack:String = "attack.png";
public static const bantispyware:String = "bantispyware.png";
public static const virus:String = "Virus";
public function UnitTypes(_arg1:SmartLoader):void{
var _local2:String;
units = new Dictionary();
unitToButton = new Dictionary();
buttonToUnit = new Dictionary();
sloader = null;
engine = null;
initiated = false;
super();
sloader = _arg1;
sloader.utypes = this;
for each (_local2 in types) {
units[_local2] = createUnit(_local2);
};
initUnitToButton();
initButtonToUnit();
initiated = true;
}
public function createUnit(_arg1:String):Unit{
var _local2:Unit;
_local2 = null;
switch (_arg1){
case antispyware:
_local2 = new Unit(engine, Consts.myId, _arg1);
_local2.health = 300;
_local2.damage = 18;
_local2.spritewidth = 36;
_local2.rotstep = 0;
_local2.rechargetime = 15;
_local2.eyerange = 9;
_local2.cost = 25;
_local2.desc = "Antispyware software is designed to detect and destroy majority of the computer spyware and adware.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Antilandforces | UnitFlags.Building));
break;
case antivirus:
_local2 = new Unit(engine, Consts.myId, _arg1);
_local2.health = 500;
_local2.damage = 35;
_local2.spritewidth = 36;
_local2.rotstep = 0;
_local2.rechargetime = 5;
_local2.eyerange = 12;
_local2.cost = 60;
_local2.desc = "Antivirus software program helps protect your computer against being infected by a virus.";
_local2.armor = 3;
_local2.flags = (_local2.flags | (UnitFlags.Antiaircraft | UnitFlags.Building));
break;
case antiadware:
_local2 = new Unit(engine, Consts.myId, _arg1);
_local2.health = 120;
_local2.damage = 10;
_local2.spritewidth = 36;
_local2.rotstep = 0;
_local2.cost = 10;
_local2.desc = "Antiadware software detects and destroys unwanted and mailicious ads and programs.";
_local2.armor = 1;
_local2.flags = (_local2.flags | ((UnitFlags.Antiaircraft | UnitFlags.Antilandforces) | UnitFlags.Building));
break;
case garbagecleaner:
_local2 = new Unit(engine, Consts.myId, _arg1);
_local2.health = 250;
_local2.damage = 10;
_local2.spritewidth = 36;
_local2.rotstep = 0;
_local2.cost = 50;
_local2.desc = "Garbage Cleaner software searches your hard drive and other disks for any known or potential garbage.";
_local2.armor = 2;
_local2.flags = (_local2.flags | (((UnitFlags.Antiaircraft | UnitFlags.Antilandforces) | UnitFlags.Building) | UnitFlags.Frozenable));
break;
case firewall:
_local2 = new Unit(engine, Consts.myId, _arg1);
_local2.health = 1000;
_local2.damage = 25;
_local2.spritewidth = 36;
_local2.rotstep = 0;
_local2.eyerange = 8;
_local2.rechargetime = 45;
_local2.cost = 100;
_local2.desc = "Firewall is a system that secures a network, shielding it from access by unauthorized users.";
_local2.armor = 3;
_local2.flags = (_local2.flags | ((UnitFlags.Antilandforces | UnitFlags.Building) | UnitFlags.Firewall));
break;
case virus:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 30;
_local2.damage = Consts.SoftShotDamage;
_local2.bulletspeed = 100;
_local2.spritewidth = 34;
_local2.deathcost = 10;
_local2.eyerange = 3;
_local2.movesteps = 8;
_local2.desc = "Virus is a piece of code that is secretly introduced into a system in order to corrupt or destroy it.";
_local2.armor = 0;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Flying));
break;
case backdoor:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 30;
_local2.damage = Consts.SoftShotDamage;
_local2.bulletspeed = 100;
_local2.spritewidth = 27;
_local2.deathcost = 3;
_local2.eyerange = 3;
_local2.desc = "Backdoor is remote admin utility that open infected machines to external control via the Internet.";
_local2.armor = 0;
_local2.flags = (_local2.flags | UnitFlags.Peaceful);
break;
case trojan:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 30;
_local2.damage = Consts.SoftShotDamage;
_local2.bulletspeed = 100;
_local2.spritewidth = 30;
_local2.deathcost = 4;
_local2.eyerange = 3;
_local2.desc = "Trojan is a program that is hidden in a useful software and actually used to gain access to your PC.";
_local2.armor = 1;
_local2.flags = (_local2.flags | UnitFlags.Peaceful);
break;
case adware:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 20;
_local2.damage = Consts.SoftShotDamage;
_local2.bulletspeed = 100;
_local2.spritewidth = 29;
_local2.deathcost = 1;
_local2.eyerange = 3;
_local2.desc = "Adware delivers advertising content in a manner that may be unwanted by users.";
_local2.armor = 0;
_local2.flags = (_local2.flags | UnitFlags.Peaceful);
break;
case hijacker:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 30;
_local2.damage = 5;
_local2.spritewidth = 22;
_local2.eyerange = 5;
_local2.rotstep = 0;
_local2.bulletspeed = 10;
_local2.deathcost = 7;
_local2.desc = "Hijacker is software designed to infiltrate or damage a computer system without your consent.";
_local2.armor = 1;
_local2.flags = UnitFlags.Antilandforces;
break;
case keylogger:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 36;
_local2.damage = Consts.SoftShotDamage;
_local2.bulletspeed = 100;
_local2.spritewidth = 19;
_local2.movesteps = 3;
_local2.deathcost = 5;
_local2.eyerange = 3;
_local2.desc = "Keylogger is a computer program which monitors and records your keyboard and other activity.";
_local2.armor = 1;
_local2.flags = (_local2.flags | UnitFlags.Peaceful);
break;
case spyware:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 36;
_local2.damage = Consts.SoftShotDamage;
_local2.bulletspeed = 100;
_local2.spritewidth = 29;
_local2.deathcost = 5;
_local2.eyerange = 1;
_local2.desc = "This is software that secretly gathers information about a user while he/she navigates the Web.";
_local2.armor = 1;
_local2.flags = (_local2.flags | UnitFlags.Peaceful);
break;
case spam:
_local2 = new Unit(engine, Consts.hostileId, _arg1);
_local2.health = 20;
_local2.damage = 10;
_local2.bulletspeed = 100;
_local2.spritewidth = 37;
_local2.deathcost = 1;
_local2.eyerange = 3;
_local2.desc = "Spam is an inappropriate attempt to use email by sending the same message to numerous people.";
_local2.armor = 0;
_local2.flags = (_local2.flags | UnitFlags.Peaceful);
break;
case mail:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "Mail Client is an application with which a person reads and sends email.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case browser:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "Browser is an application used to view and navigate the World Wide Web and other resources.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case rbin:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "Recycle bin is a temporary storage for files that have been deleted in a file manager.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case musicplayer:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "Music Player is the software that decompresses the streaming audio using a codec and plays it.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case messenger:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "Internet Messenger is a software which allows users to send and receive short messages.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case docs:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "The folder where you keep your important documents.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case games:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "The folder where you have installed your games.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case cpanel:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 200;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "Control Panel has a set of utilities that change various aspects of the systems behaviour.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
case registry:
_local2 = new Unit(engine, Consts.softId, _arg1);
_local2.health = 100;
_local2.damage = 12;
_local2.bulletspeed = 100;
_local2.spritewidth = 48;
_local2.desc = "System Registry is a database which stores settings and options for the operating system.";
_local2.armor = 1;
_local2.flags = (_local2.flags | (UnitFlags.Peaceful | UnitFlags.Building));
break;
};
if (initiated){
_local2.copyProperties(units[_arg1]);
if (_local2.flag(UnitFlags.Peaceful)){
sloader.dressPeacefulUnit(_local2, _arg1, engine);
} else {
sloader.dressUnit(_local2, _arg1, engine);
};
};
return (_local2);
}
private function initUnitToButton():void{
unitToButton[bantispyware] = antispyware;
unitToButton[bantivirus] = antivirus;
unitToButton[bantiadware] = antiadware;
unitToButton[bgarbagecleaner] = garbagecleaner;
unitToButton[bfirewall] = firewall;
}
public function buttonByUnit(_arg1:String):String{
return (unitToButton[_arg1]);
}
private function initButtonToUnit():void{
buttonToUnit[bantispyware] = antispyware;
buttonToUnit[bantivirus] = antivirus;
buttonToUnit[bantiadware] = antiadware;
buttonToUnit[bgarbagecleaner] = garbagecleaner;
buttonToUnit[bfirewall] = firewall;
}
public function params(_arg1:String):Unit{
return (units[_arg1]);
}
}
}//package fai
Section 34
//Utils (fai.Utils)
package fai {
import flash.text.*;
public class Utils {
public static function drawRect(_arg1, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:Boolean=false, _arg8:int=0, _arg9:int=0):void{
_arg1.graphics.lineStyle(_arg2, _arg3);
_arg1.graphics.beginFill(_arg4);
if (_arg7){
_arg1.graphics.drawRoundRect(_arg8, _arg9, _arg5, _arg6, (_arg5 / 5), (_arg6 / 5));
} else {
_arg1.graphics.drawRect(_arg8, _arg9, _arg5, _arg6);
};
_arg1.graphics.endFill();
}
public static function createTextField(_arg1:uint, _arg2:uint=10):TextField{
var _local3:TextField;
var _local4:TextFormat;
_local3 = new TextField();
_local3.autoSize = TextFieldAutoSize.LEFT;
_local3.background = false;
_local3.border = false;
_local3.selectable = false;
_local4 = new TextFormat();
_local4.font = "Verdana";
_local4.color = _arg1;
_local4.size = _arg2;
_local4.bold = true;
_local3.defaultTextFormat = _local4;
return (_local3);
}
public static function unitStatus(_arg1:Number):String{
if (_arg1 >= 100){
return ("Very Good");
};
if (_arg1 >= 70){
return ("Well enough");
};
if (_arg1 >= 50){
return ("Could be better");
};
if (_arg1 >= 25){
return ("In bad condition");
};
return ("Poor");
}
public static function textrange(_arg1:int):String{
if (_arg1 <= 5){
return ("Small");
};
if (_arg1 <= 7){
return ("Medium");
};
if (_arg1 <= 10){
return ("Good");
};
return ("Big");
}
}
}//package fai
Section 35
//WebButton (fai.WebButton)
package fai {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.geom.*;
import flash.filters.*;
public class WebButton extends Sprite {
private var normalshape:Shape;// = null
public var txt:TextField;// = null
private var selshape:Shape;// = null
public function WebButton(_arg1:String, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int=16, _arg7:int=40, _arg8:Boolean=true, _arg9:int=8158075, _arg10:int=0, _arg11:int=0x757575, _arg12:int=0x373737):void{
var radius:int;
var btnW:int;
var btnH:int;
var web20Glow:GlowFilter;
var web20Filters:Array;
var myRssButton:Sprite;
var shineRadius:int;
var shineW:int;
var shineH:int;
var shineColors:Array;
var shineAlphas:Array;
var shineRatios:Array;
var shineMatrix:Matrix;
var shine:Shape;
var s = _arg1;
var w = _arg2;
var h = _arg3;
var r = _arg4;
var tcolor = _arg5;
var tsize = _arg6;
var rr = _arg7;
var doShine = _arg8;
var ncf = _arg9;
var nct = _arg10;
var sncf = _arg11;
var snct = _arg12;
txt = null;
selshape = null;
normalshape = null;
super();
radius = r;
btnW = w;
btnH = h;
web20Glow = new GlowFilter(8303359, 0.8);
web20Filters = [web20Glow];
myRssButton = new Sprite();
addChild(myRssButton);
myRssButton.x = 20;
myRssButton.y = 10;
normalshape = createBack(w, h, r, rr, ncf, nct);
addChild(normalshape);
selshape = createBack(w, h, r, rr, sncf, snct);
selshape.visible = false;
addChild(selshape);
txt = Utils.createTextField(tcolor, tsize);
txt.text = s;
txt.x = ((width - txt.width) / 2);
txt.y = ((height - txt.height) / 2);
addChild(txt);
if (doShine){
shineRadius = 16;
shineW = (w - shineRadius);
shineH = (h / 2);
shineColors = [0xFFFFFF, 0xFFFFFF];
shineAlphas = [70, 0];
shineRatios = [0, 0xFF];
shineMatrix = new Matrix();
shineMatrix.createGradientBox(shineW, shineH, ((90 / 180) * Math.PI));
shine = new Shape();
addChild(shine);
shine.alpha = 0.5;
shine.x = 8;
shine.y = 3;
var _local14 = shine.graphics;
with (_local14) {
lineStyle(0, 0xFFFFFF, 0);
beginGradientFill(GradientType.LINEAR, shineColors, shineAlphas, shineRatios, shineMatrix);
drawRoundRect(0, 0, shineW, shineH, 20, 20);
endFill();
};
};
normalshape.filters = web20Filters;
selshape.filters = web20Filters;
addEventListener(MouseEvent.MOUSE_OVER, onover);
addEventListener(MouseEvent.MOUSE_OUT, onout);
}
private function createBack(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):Shape{
var bkg:Shape;
var colors:Array;
var alphas:Array;
var ratios:Array;
var matr:Matrix;
var w = _arg1;
var h = _arg2;
var radius = _arg3;
var rr = _arg4;
var gfrom = _arg5;
var gto = _arg6;
bkg = new Shape();
colors = [gfrom, gto];
alphas = [100, 100];
ratios = [0, 245];
matr = new Matrix();
matr.createGradientBox(w, h, ((90 / 180) * Math.PI));
var _local8 = bkg.graphics;
with (_local8) {
lineStyle(0, gto, 100, true, "none", "square", "round");
beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matr, SpreadMethod.PAD);
drawRoundRect(0, 0, w, h, rr, rr);
endFill();
};
return (bkg);
}
private function onout(_arg1:MouseEvent):void{
selshape.visible = false;
normalshape.visible = true;
}
private function onover(_arg1:MouseEvent):void{
selshape.visible = true;
normalshape.visible = false;
}
}
}//package fai
Section 36
//MochiScores (mochi.MochiScores)
package mochi {
import flash.display.*;
import flash.text.*;
public class MochiScores {
private static var boardID:String;
public static var onErrorHandler:Object;
public static var onCloseHandler:Object;
public static function showLeaderboard(_arg1:Object=null):void{
var options = _arg1;
if (options != null){
if (options.clip != null){
if ((options.clip is Sprite)){
MochiServices.setContainer(options.clip);
};
delete options.clip;
} else {
MochiServices.setContainer();
};
MochiServices.stayOnTop();
if (options.name != null){
if ((options.name is TextField)){
if (options.name.text.length > 0){
options.name = options.name.text;
};
};
};
if (options.score != null){
if ((options.score is TextField)){
if (options.score.text.length > 0){
options.score = options.score.text;
};
};
};
if (options.onDisplay != null){
options.onDisplay();
} else {
if (MochiServices.clip != null){
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
};
} else {
options = {};
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
if (options.onClose != null){
onCloseHandler = options.onClose;
} else {
onCloseHandler = function ():void{
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.play();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onClose.");
};
};
};
if (options.onError != null){
onErrorHandler = options.onError;
} else {
onErrorHandler = null;
};
if (options.boardID == null){
if (MochiScores.boardID != null){
options.boardID = MochiScores.boardID;
};
};
MochiServices.send("scores_showLeaderboard", {options:options}, null, onClose);
}
public static function closeLeaderboard():void{
MochiServices.send("scores_closeLeaderboard");
}
public static function getPlayerInfo(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_getPlayerInfo", null, _arg1, _arg2);
}
public static function requestList(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_requestList", null, _arg1, _arg2);
}
public static function scoresArrayToObjects(_arg1:Object):Object{
var _local2:Object;
var _local3:Number;
var _local4:Number;
var _local5:Object;
var _local6:Object;
var _local7:String;
var _local8:String;
_local2 = {};
for (_local7 in _arg1) {
if (typeof(_arg1[_local7]) == "object"){
if (((!((_arg1[_local7].cols == null))) && (!((_arg1[_local7].rows == null))))){
_local2[_local7] = [];
_local5 = _arg1[_local7];
_local4 = 0;
while (_local4 < _local5.rows.length) {
_local6 = {};
_local3 = 0;
while (_local3 < _local5.cols.length) {
_local6[_local5.cols[_local3]] = _local5.rows[_local4][_local3];
_local3++;
};
_local2[_local7].push(_local6);
_local4++;
};
} else {
_local2[_local7] = {};
for (_local8 in _arg1[_local7]) {
_local2[_local7][_local8] = _arg1[_local7][_local8];
};
};
} else {
_local2[_local7] = _arg1[_local7];
};
};
return (_local2);
}
public static function submit(_arg1:Number, _arg2:String, _arg3:Object=null, _arg4:Object=null):void{
MochiServices.send("scores_submit", {score:_arg1, name:_arg2}, _arg3, _arg4);
}
public static function onClose(_arg1:Object=null):void{
if (_arg1 != null){
if (_arg1.error != null){
if (_arg1.error == true){
if (onErrorHandler != null){
if (_arg1.errorCode == null){
_arg1.errorCode = "IOError";
};
onErrorHandler(_arg1.errorCode);
MochiServices.doClose();
return;
};
};
};
};
onCloseHandler();
MochiServices.doClose();
}
public static function setBoardID(_arg1:String):void{
MochiScores.boardID = _arg1;
MochiServices.send("scores_setBoardID", {boardID:_arg1});
}
}
}//package mochi
Section 37
//MochiServices (mochi.MochiServices)
package mochi {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public class MochiServices {
private static var _container:Object;
private static var _connected:Boolean = false;
private static var _swfVersion:String;
private static var _sendChannel:LocalConnection;
private static var _rcvChannelName:String;
private static var _gatewayURL:String = "http://www.mochiads.com/static/lib/services/services.swf";
private static var _clip:MovieClip;
private static var _loader:Loader;
private static var _id:String;
private static var _listenChannel:LocalConnection;
private static var _timer:Timer;
private static var _sendChannelName:String;
private static var _startTime:Number;
private static var _connecting:Boolean = false;
public static var onError:Object;
private static var _listenChannelName:String = "__mochiservices";
private static var _rcvChannel:LocalConnection;
public static function isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function send(_arg1:String, _arg2:Object=null, _arg3:Object=null, _arg4:Object=null):void{
if (_connected){
_sendChannel.send(_sendChannelName, "onReceive", {methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID});
} else {
if ((((_clip == null)) || (!(_connecting)))){
onError("NotConnected");
handleError(_arg2, _arg3, _arg4);
flush(true);
return;
};
_clip._queue.push({methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID});
};
if (_clip != null){
if (((!((_clip._callbacks == null))) && (!((_clip._nextcallbackID == null))))){
_clip._callbacks[_clip._nextcallbackID] = {callbackObject:_arg3, callbackMethod:_arg4};
_clip._nextcallbackID++;
};
};
}
public static function get connected():Boolean{
return (_connected);
}
private static function flush(_arg1:Boolean):void{
var _local2:Object;
var _local3:Object;
if (_clip != null){
if (_clip._queue != null){
while (_clip._queue.length > 0) {
_local2 = _clip._queue.shift();
_local3 = null;
if (_local2 != null){
if (_local2.callbackID != null){
_local3 = _clip._callbacks[_local2.callbackID];
};
delete _clip._callbacks[_local2.callbackID];
if (((_arg1) && (!((_local3 == null))))){
handleError(_local2.args, _local3.callbackObject, _local3.callbackMethod);
};
};
};
};
};
}
private static function init(_arg1:String, _arg2:Object):void{
_id = _arg1;
if (_arg2 != null){
_container = _arg2;
loadCommunicator(_arg1, _container);
};
}
public static function get childClip():Object{
return (_clip);
}
public static function get id():String{
return (_id);
}
public static function stayOnTop():void{
_container.addEventListener(Event.ENTER_FRAME, MochiServices.bringToTop, false, 0, true);
if (_clip != null){
_clip.visible = true;
};
}
public static function getVersion():String{
return ("1.31");
}
public static function disconnect():void{
if (((_connected) || (_connecting))){
if (_clip != null){
if (_clip.parent != null){
if ((_clip.parent is Sprite)){
Sprite(_clip.parent).removeChild(_clip);
_clip = null;
};
};
};
_connecting = (_connected = false);
flush(true);
try {
_listenChannel.close();
_rcvChannel.close();
} catch(error:Error) {
};
};
if (_timer != null){
try {
_timer.stop();
} catch(error:Error) {
};
};
}
public static function allowDomains(_arg1:String):String{
var _local2:String;
Security.allowDomain("*");
Security.allowInsecureDomain("*");
if (_arg1.indexOf("http://") != -1){
_local2 = _arg1.split("/")[2].split(":")[0];
Security.allowDomain(_local2);
Security.allowInsecureDomain(_local2);
};
return (_local2);
}
public static function doClose():void{
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
if (_clip.parent != null){
Sprite(_clip.parent).removeChild(_clip);
};
}
public static function setContainer(_arg1:Object=null, _arg2:Boolean=true):void{
if (_arg1 != null){
if ((_arg1 is Sprite)){
_container = _arg1;
};
};
if (_arg2){
if ((_container is Sprite)){
Sprite(_container).addChild(_clip);
};
};
}
private static function onStatus(_arg1:StatusEvent):void{
switch (_arg1.level){
case "error":
_connected = false;
_listenChannel.connect(_listenChannelName);
break;
};
}
private static function initComChannels():void{
if (!_connected){
_sendChannel.addEventListener(StatusEvent.STATUS, MochiServices.onStatus);
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"handshakeDone"});
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"registerGame", id:_id, clip:_container, version:getVersion()});
_rcvChannel.addEventListener(StatusEvent.STATUS, MochiServices.onStatus);
_clip.onReceive = function (_arg1:Object):void{
var cb:String;
var cblst:Object;
var method:*;
var methodName:String;
var obj:Object;
var pkg = _arg1;
cb = pkg.callbackID;
cblst = this.client._callbacks[cb];
if (!cblst){
return;
};
method = cblst.callbackMethod;
methodName = "";
obj = cblst.callbackObject;
if (((obj) && ((typeof(method) == "string")))){
methodName = method;
if (obj[method] != null){
method = obj[method];
} else {
trace((("Error: Method " + method) + " does not exist."));
};
};
if (method != undefined){
try {
method.apply(obj, pkg.args);
} catch(error:Error) {
trace(((("Error invoking callback method '" + methodName) + "': ") + error.toString()));
};
} else {
if (obj != null){
try {
obj(pkg.args);
} catch(error:Error) {
trace(("Error invoking method on object: " + error.toString()));
};
};
};
delete this.client._callbacks[cb];
};
_clip.onError = function ():void{
MochiServices.onError("IOError");
};
_rcvChannel.connect(_rcvChannelName);
trace("connected!");
_connecting = false;
_connected = true;
_listenChannel.close();
while (_clip._queue.length > 0) {
_sendChannel.send(_sendChannelName, "onReceive", _clip._queue.shift());
};
};
}
private static function listen():void{
_listenChannel = new LocalConnection();
_listenChannel.client = _clip;
_clip.handshake = function (_arg1:Object):void{
MochiServices.comChannelName = _arg1.newChannel;
};
_listenChannel.allowDomain("*", "localhost");
_listenChannel.allowInsecureDomain("*", "localhost");
_listenChannel.connect(_listenChannelName);
trace("Waiting for MochiAds services to connect...");
}
private static function handleError(_arg1:Object, _arg2:Object, _arg3:Object):void{
var args = _arg1;
var callbackObject = _arg2;
var callbackMethod = _arg3;
if (args != null){
if (args.onError != null){
args.onError.apply(null, ["NotConnected"]);
};
};
if (callbackMethod != null){
args = {};
args.error = true;
args.errorCode = "NotConnected";
if (((!((callbackObject == null))) && ((callbackMethod is String)))){
try {
var _local5 = callbackObject;
_local5[callbackMethod](args);
} catch(error:Error) {
};
} else {
if (callbackMethod != null){
try {
callbackMethod.apply(args);
} catch(error:Error) {
};
};
};
};
}
public static function get clip():Object{
return (_container);
}
public static function set comChannelName(_arg1:String):void{
if (_arg1 != null){
if (_arg1.length > 3){
_sendChannelName = (_arg1 + "_fromgame");
_rcvChannelName = _arg1;
initComChannels();
};
};
}
private static function loadCommunicator(_arg1:String, _arg2:Object):MovieClip{
var clipname:String;
var f:Function;
var req:URLRequest;
var id = _arg1;
var clip = _arg2;
clipname = ("_mochiservices_com_" + id);
if (_clip != null){
return (_clip);
};
if (!MochiServices.isNetworkAvailable()){
return (null);
};
MochiServices.allowDomains(_gatewayURL);
_clip = createEmptyMovieClip(clip, clipname, 10336, false);
_loader = new Loader();
_timer = new Timer(1000, 0);
_startTime = getTimer();
_timer.addEventListener(TimerEvent.TIMER, connectWait);
_timer.start();
f = function (_arg1:Object):void{
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
MochiServices.disconnect();
MochiServices.onError("IOError");
};
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
req = new URLRequest(_gatewayURL);
_loader.load(req);
_clip.addChild(_loader);
_clip._mochiservices_com = _loader;
_sendChannel = new LocalConnection();
_clip._queue = [];
_rcvChannel = new LocalConnection();
_rcvChannel.allowDomain("*", "localhost");
_rcvChannel.allowInsecureDomain("*", "localhost");
_rcvChannel.client = _clip;
_clip._nextcallbackID = 0;
_clip._callbacks = {};
listen();
return (_clip);
}
public static function bringToTop(_arg1:Event):void{
var e = _arg1;
if (MochiServices.clip != null){
if (MochiServices.childClip != null){
try {
if (MochiServices.clip.numChildren > 1){
MochiServices.clip.setChildIndex(MochiServices.childClip, (MochiServices.clip.numChildren - 1));
};
} catch(errorObject:Error) {
trace("Warning: Depth sort error.");
_container.removeEventListener(Event.ENTER_FRAME, MochiServices.bringToTop);
};
};
};
}
public static function connect(_arg1:String, _arg2:Object, _arg3:Object=null):void{
var id = _arg1;
var clip = _arg2;
var onError = _arg3;
if ((clip is DisplayObject)){
if (((!(_connected)) && ((_clip == null)))){
trace("MochiServices Connecting...");
_connecting = true;
init(id, clip);
};
} else {
trace("Error, MochiServices requires a Sprite, Movieclip or instance of the stage.");
};
if (onError != null){
MochiServices.onError = onError;
} else {
if (MochiServices.onError == null){
MochiServices.onError = function (_arg1:String):void{
trace(_arg1);
};
};
};
}
public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number, _arg4:Boolean=true):MovieClip{
var mc:MovieClip;
var parent = _arg1;
var name = _arg2;
var depth = _arg3;
var doAdd = _arg4;
mc = new MovieClip();
if (doAdd){
if (((false) && (depth))){
parent.addChildAt(mc, depth);
} else {
parent.addChild(mc);
};
};
try {
parent[name] = mc;
} catch(e:Error) {
throw (new Error("MochiServices requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
};
mc["_name"] = name;
return (mc);
}
public static function connectWait(_arg1:TimerEvent):void{
if ((getTimer() - _startTime) > 10000){
if (!_connected){
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
MochiServices.disconnect();
MochiServices.onError("IOError");
};
_timer.stop();
};
}
}
}//package mochi
Section 38
//Adwarebody (Adwarebody)
package {
import flash.display.*;
public dynamic class Adwarebody extends BitmapData {
public function Adwarebody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 39
//Antiadwareattack (Antiadwareattack)
package {
import flash.display.*;
public dynamic class Antiadwareattack extends BitmapData {
public function Antiadwareattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 40
//Antiadwarebe (Antiadwarebe)
package {
import flash.display.*;
public dynamic class Antiadwarebe extends BitmapData {
public function Antiadwarebe(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 41
//Antiadwarebody (Antiadwarebody)
package {
import flash.display.*;
public dynamic class Antiadwarebody extends BitmapData {
public function Antiadwarebody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 42
//Antiadwarebullet (Antiadwarebullet)
package {
import flash.display.*;
public dynamic class Antiadwarebullet extends BitmapData {
public function Antiadwarebullet(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 43
//Antispywareattack (Antispywareattack)
package {
import flash.display.*;
public dynamic class Antispywareattack extends BitmapData {
public function Antispywareattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 44
//Antispywarebe (Antispywarebe)
package {
import flash.display.*;
public dynamic class Antispywarebe extends BitmapData {
public function Antispywarebe(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 45
//Antispywarebody (Antispywarebody)
package {
import flash.display.*;
public dynamic class Antispywarebody extends BitmapData {
public function Antispywarebody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 46
//Antispywarebullet (Antispywarebullet)
package {
import flash.display.*;
public dynamic class Antispywarebullet extends BitmapData {
public function Antispywarebullet(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 47
//Antivirusattack (Antivirusattack)
package {
import flash.display.*;
public dynamic class Antivirusattack extends BitmapData {
public function Antivirusattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 48
//Antivirusbe (Antivirusbe)
package {
import flash.display.*;
public dynamic class Antivirusbe extends BitmapData {
public function Antivirusbe(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 49
//Antivirusbody (Antivirusbody)
package {
import flash.display.*;
public dynamic class Antivirusbody extends BitmapData {
public function Antivirusbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 50
//Antivirusbullet (Antivirusbullet)
package {
import flash.display.*;
public dynamic class Antivirusbullet extends BitmapData {
public function Antivirusbullet(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 51
//Backdoorbody (Backdoorbody)
package {
import flash.display.*;
public dynamic class Backdoorbody extends BitmapData {
public function Backdoorbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 52
//Blocking (Blocking)
package {
import flash.display.*;
public dynamic class Blocking extends MovieClip {
public function Blocking(){
addFrameScript(19, frame20);
}
function frame20(){
stop();
visible = false;
}
}
}//package
Section 53
//Browserbody (Browserbody)
package {
import flash.display.*;
public dynamic class Browserbody extends BitmapData {
public function Browserbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 54
//Buttonbantiadware (Buttonbantiadware)
package {
import flash.display.*;
public dynamic class Buttonbantiadware extends BitmapData {
public function Buttonbantiadware(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 55
//Buttonbantispyware (Buttonbantispyware)
package {
import flash.display.*;
public dynamic class Buttonbantispyware extends BitmapData {
public function Buttonbantispyware(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 56
//Buttonbantivirus (Buttonbantivirus)
package {
import flash.display.*;
public dynamic class Buttonbantivirus extends BitmapData {
public function Buttonbantivirus(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 57
//Buttonbattack (Buttonbattack)
package {
import flash.display.*;
public dynamic class Buttonbattack extends BitmapData {
public function Buttonbattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 58
//Buttonbcancel (Buttonbcancel)
package {
import flash.display.*;
public dynamic class Buttonbcancel extends BitmapData {
public function Buttonbcancel(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 59
//Buttonbfirewall (Buttonbfirewall)
package {
import flash.display.*;
public dynamic class Buttonbfirewall extends BitmapData {
public function Buttonbfirewall(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 60
//Buttonbgarbagecleaner (Buttonbgarbagecleaner)
package {
import flash.display.*;
public dynamic class Buttonbgarbagecleaner extends BitmapData {
public function Buttonbgarbagecleaner(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 61
//Buttonbstop (Buttonbstop)
package {
import flash.display.*;
public dynamic class Buttonbstop extends BitmapData {
public function Buttonbstop(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 62
//Controlpanelbody (Controlpanelbody)
package {
import flash.display.*;
public dynamic class Controlpanelbody extends BitmapData {
public function Controlpanelbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 63
//Docsbody (Docsbody)
package {
import flash.display.*;
public dynamic class Docsbody extends BitmapData {
public function Docsbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 64
//Firewallattack (Firewallattack)
package {
import flash.display.*;
public dynamic class Firewallattack extends BitmapData {
public function Firewallattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 65
//Firewallbody (Firewallbody)
package {
import flash.display.*;
public dynamic class Firewallbody extends BitmapData {
public function Firewallbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 66
//FirewallCircle (FirewallCircle)
package {
import flash.display.*;
import fai.*;
public class FirewallCircle extends MovieClip {
private var subject:Unit;// = null
private var assaulter:Unit;// = null
private var engine:Engine;// = null
public function FirewallCircle(_arg1:Engine, _arg2:Unit, _arg3:Unit):void{
engine = null;
assaulter = null;
subject = null;
super();
addFrameScript(12, frame13);
engine = _arg1;
assaulter = _arg2;
subject = _arg3;
}
private function finalize():void{
var _local1:Array;
var _local2:Boolean;
var _local3:Unit;
_local1 = engine.comp.camp.getNearUnits(assaulter.pos, assaulter.eyerange);
_local2 = false;
for each (_local3 in _local1) {
if (_local3 == subject){
_local2 = true;
};
if (!_local3.flag(UnitFlags.Flying)){
engine.hitUnit(assaulter.damage, _local3);
};
};
if (!_local2){
engine.hitUnit(assaulter.damage, subject);
};
engine.bulletlayer.removeChild(this);
}
function frame13(){
stop();
finalize();
}
}
}//package
Section 67
//Gamesbody (Gamesbody)
package {
import flash.display.*;
public dynamic class Gamesbody extends BitmapData {
public function Gamesbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 68
//GameStage (GameStage)
package {
import flash.display.*;
import fai.*;
import flash.events.*;
import flash.text.*;
import flash.utils.*;
import mochi.*;
import flash.system.*;
import flash.ui.*;
public dynamic class GameStage extends MovieClip {
private var kongSplash:Kongintro12fps;// = null
private var mochifinished:Boolean;// = false
private var loading:Sprite;// = null
private var checktimer:Timer;// = null
private var menu:GameMenu;// = null
private var engine:Engine;// = null
private var sloader:SmartLoader;// = null
private var loadingText:TextField;// = null
private var mochistarted:Boolean;// = false
private var kongregate;// = null
public function GameStage():void{
var _local1:ContextMenu;
sloader = null;
engine = null;
menu = null;
mochifinished = false;
mochistarted = false;
loading = null;
loadingText = null;
checktimer = null;
kongSplash = null;
kongregate = null;
super();
stage.scaleMode = StageScaleMode.EXACT_FIT;
stage.align = StageAlign.TOP_LEFT;
_local1 = new ContextMenu();
_local1.hideBuiltInItems();
contextMenu = _local1;
Security.allowDomain("*");
sloader = new SmartLoader();
engine = new Engine(this, sloader);
menu = new GameMenu(engine);
mochifinished = false;
loading = new Sprite();
loadingText = Utils.createTextField(0, 20);
addChildAt(loading, 0);
addChildAt(loadingText, 1);
loadingText.x = 340;
loadingText.y = 240;
sloader.startLoading(loadprocess, loadcomplete);
checktimer = new Timer(300, 0);
checktimer.addEventListener("timer", tmfunc);
checktimer.start();
}
private function mochifin():void{
mochifinished = true;
}
private function kongLoadComplete(_arg1:Event):void{
kongregate = _arg1.target.content;
kongregate.services.connect();
}
private function loadcomplete():void{
}
private function loadprocess(_arg1:Number):void{
var cbsize:*;
var i:*;
var percent = _arg1;
var _local3 = loading;
with (_local3) {
cbsize = 8;
graphics.clear();
graphics.beginFill((percent * 2.5));
i = 0;
while (i <= percent) {
graphics.drawRect((i * cbsize), 0, cbsize, engine.gameheight);
i++;
};
graphics.endFill();
};
loadingText.text = (("loading: " + int(percent).toString()) + "%");
if (100 == percent){
removeChild(loading);
removeChild(loadingText);
loading = null;
loadingText = null;
};
}
private function tmfunc(_arg1:TimerEvent):void{
if (!kongSplash){
kongSplash = new Kongintro12fps();
kongSplash.x = 400;
kongSplash.y = 300;
kongSplash.scaleX = (800 / 550);
kongSplash.scaleY = (600 / 398);
addChild(kongSplash);
kongSplash.addEventListener(MouseEvent.MOUSE_DOWN, menu.onplaymoregames);
kongSplash.play();
return;
};
if (((sloader.loaded) && (kongSplash.finished))){
MochiServices.connect("2a454e21dc1776f1", this);
if (!mochifinished){
if (!mochistarted){
mochistarted = true;
MochiServices.connect("2a454e21dc1776f1", this);
MochiAd.showPreGameAd({clip:this, id:"2a454e21dc1776f1", res:"800x600", ad_finished:mochifin});
};
return;
};
kongSplash.removeEventListener(MouseEvent.MOUSE_DOWN, menu.onplaymoregames);
removeChild(kongSplash);
kongSplash = null;
checktimer.stop();
checktimer.removeEventListener("timer", tmfunc);
checktimer = null;
menu.create();
menu.hide();
engine.loadMap(engine.sloader.maps.get(0));
menu.show();
};
}
}
}//package
Section 69
//GarbageCleanerattack (GarbageCleanerattack)
package {
import flash.display.*;
public dynamic class GarbageCleanerattack extends BitmapData {
public function GarbageCleanerattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 70
//GarbageCleanerbe (GarbageCleanerbe)
package {
import flash.display.*;
public dynamic class GarbageCleanerbe extends BitmapData {
public function GarbageCleanerbe(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 71
//GarbageCleanerbody (GarbageCleanerbody)
package {
import flash.display.*;
public dynamic class GarbageCleanerbody extends BitmapData {
public function GarbageCleanerbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 72
//GarbageCleanerbullet (GarbageCleanerbullet)
package {
import flash.display.*;
public dynamic class GarbageCleanerbullet extends BitmapData {
public function GarbageCleanerbullet(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 73
//Groundbackground (Groundbackground)
package {
import flash.display.*;
public dynamic class Groundbackground extends BitmapData {
public function Groundbackground(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 74
//Groundwindowheader (Groundwindowheader)
package {
import flash.display.*;
public dynamic class Groundwindowheader extends BitmapData {
public function Groundwindowheader(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 75
//Hijackerattack (Hijackerattack)
package {
import flash.display.*;
public dynamic class Hijackerattack extends BitmapData {
public function Hijackerattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 76
//Hijackerbe (Hijackerbe)
package {
import flash.display.*;
public dynamic class Hijackerbe extends BitmapData {
public function Hijackerbe(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 77
//Hijackerbody (Hijackerbody)
package {
import flash.display.*;
public dynamic class Hijackerbody extends BitmapData {
public function Hijackerbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 78
//Hijackerbullet (Hijackerbullet)
package {
import flash.display.*;
public dynamic class Hijackerbullet extends BitmapData {
public function Hijackerbullet(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 79
//HowToPlay (HowToPlay)
package {
import flash.display.*;
public dynamic class HowToPlay extends MovieClip {
}
}//package
Section 80
//Keyloggerbody (Keyloggerbody)
package {
import flash.display.*;
public dynamic class Keyloggerbody extends BitmapData {
public function Keyloggerbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 81
//Kongintro12fps (Kongintro12fps)
package {
import flash.display.*;
public dynamic class Kongintro12fps extends MovieClip {
public var finished:Boolean;
public function Kongintro12fps(){
addFrameScript(0, frame1, 88, frame89);
}
function frame89(){
finished = true;
stop();
}
function frame1(){
finished = false;
}
}
}//package
Section 82
//Mailbody (Mailbody)
package {
import flash.display.*;
public dynamic class Mailbody extends BitmapData {
public function Mailbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 83
//Menuattack (Menuattack)
package {
import flash.display.*;
public dynamic class Menuattack extends BitmapData {
public function Menuattack(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 84
//Menuheart (Menuheart)
package {
import flash.display.*;
public dynamic class Menuheart extends BitmapData {
public function Menuheart(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 85
//Menumoney (Menumoney)
package {
import flash.display.*;
public dynamic class Menumoney extends BitmapData {
public function Menumoney(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 86
//Menurange (Menurange)
package {
import flash.display.*;
public dynamic class Menurange extends BitmapData {
public function Menurange(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 87
//Menushield (Menushield)
package {
import flash.display.*;
public dynamic class Menushield extends BitmapData {
public function Menushield(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 88
//Messengerbody (Messengerbody)
package {
import flash.display.*;
public dynamic class Messengerbody extends BitmapData {
public function Messengerbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 89
//MochiAd (MochiAd)
package {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public class MochiAd {
public static function getVersion():String{
return ("2.2");
}
public static function showTimedAd(_arg1:Object):void{
MochiAd.showInterLevelAd(_arg1);
}
public static function _allowDomains(_arg1:String):String{
var _local2:String;
_local2 = _arg1.split("/")[2].split(":")[0];
Security.allowDomain("*");
Security.allowDomain(_local2);
Security.allowInsecureDomain("*");
Security.allowInsecureDomain(_local2);
return (_local2);
}
public static function load(_arg1:Object):MovieClip{
var DEFAULTS:Object;
var clip:Object;
var depth:Number;
var mc:MovieClip;
var wh:Array;
var lv:URLVariables;
var k:String;
var server:String;
var hostname:String;
var lc:LocalConnection;
var name:String;
var loader:Loader;
var f:Function;
var g:Function;
var req:URLRequest;
var v:Object;
var options = _arg1;
DEFAULTS = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"};
options = MochiAd._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = MochiAd.getVersion();
clip = options.clip;
if (!MochiAd._isNetworkAvailable()){
return (null);
};
try {
if (clip._mochiad_loaded){
return (null);
};
} catch(e:Error) {
throw (new Error("MochiAd requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
};
depth = options.depth;
delete options.depth;
mc = createEmptyMovieClip(clip, "_mochiad", depth);
wh = MochiAd._getRes(options, clip);
options.res = ((wh[0] + "x") + wh[1]);
options.server = (options.server + options.id);
delete options.id;
clip._mochiad_loaded = true;
if (clip.loaderInfo.loaderURL.indexOf("http") == 0){
options.as3_swf = clip.loaderInfo.loaderURL;
};
lv = new URLVariables();
for (k in options) {
v = options[k];
if (!(v is Function)){
lv[k] = v;
};
};
server = lv.server;
delete lv.server;
hostname = _allowDomains(server);
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.lc = lc;
lv.lc = name;
lv.st = getTimer();
loader = new Loader();
f = function (_arg1:Object):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
mc._mochiad_ctr_failed = true;
};
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
g = function (_arg1:Object):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
MochiAd.unload(clip);
};
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g);
req = new URLRequest((server + ".swf"));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader.load(req);
mc.addChild(loader);
mc._mochiad_ctr = loader;
return (mc);
}
public static function sendHighScore(_arg1:Object, _arg2:Object, _arg3:Object=null):Boolean{
var _local4:MovieClip;
_local4 = MochiAd._loadCommunicator({clip:_arg1.clip, id:_arg1.id});
if (!_local4){
return (false);
};
_local4.doSend(["sendHighScore", _arg1], _arg2, _arg3);
return (true);
}
public static function _parseOptions(_arg1:Object, _arg2:Object):Object{
var _local3:Object;
var _local4:String;
var _local5:Array;
var _local6:Number;
var _local7:Array;
_local3 = {};
for (_local4 in _arg2) {
_local3[_local4] = _arg2[_local4];
};
if (_arg1){
for (_local4 in _arg1) {
_local3[_local4] = _arg1[_local4];
};
};
if (_local3.clip == undefined){
throw (new Error("MochiAd is missing the 'clip' parameter. This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite."));
};
_arg1 = _local3.clip.loaderInfo.parameters.mochiad_options;
if (_arg1){
_local5 = _arg1.split("&");
_local6 = 0;
while (_local6 < _local5.length) {
_local7 = _local5[_local6].split("=");
_local3[unescape(_local7[0])] = unescape(_local7[1]);
_local6++;
};
};
if (_local3.id == "test"){
trace("[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!");
};
return (_local3);
}
public static function _isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function _cleanup(_arg1:Object):void{
var idx:Number;
var k:String;
var lc:LocalConnection;
var f:Function;
var mc = _arg1;
if (("lc" in mc)){
lc = mc.lc;
f = function ():void{
try {
lc.client = null;
lc.close();
} catch(e:Error) {
};
};
setTimeout(f, 0);
};
idx = DisplayObjectContainer(mc).numChildren;
while (idx > 0) {
idx = (idx - 1);
DisplayObjectContainer(mc).removeChildAt(idx);
};
for (k in mc) {
delete mc[k];
};
}
public static function unload(_arg1:Object):Boolean{
if (((_arg1.clip) && (_arg1.clip._mochiad))){
_arg1 = _arg1.clip;
};
if (!_arg1._mochiad){
return (false);
};
if (_arg1._mochiad.onUnload){
_arg1._mochiad.onUnload();
};
delete _arg1._mochiad_loaded;
delete _arg1._mochiad;
return (true);
}
public static function showInterLevelAd(_arg1:Object):void{
var DEFAULTS:Object;
var clip:Object;
var ad_msec:Number;
var ad_timeout:Number;
var fadeout_time:Number;
var mc:MovieClip;
var wh:Array;
var w:Number;
var h:Number;
var chk:MovieClip;
var options = _arg1;
DEFAULTS = {ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
ad_msec = 11000;
ad_timeout = options.ad_timeout;
delete options.ad_timeout;
fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
MochiAd._cleanup(mc);
options.ad_finished();
};
wh = MochiAd._getRes(options, clip);
w = wh[0];
h = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
var _local1:Number;
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
_local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (_local1 > 0){
this.parent.alpha = (_local1 * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
mc.unloadAd = function ():void{
MochiAd.unload(clip);
};
mc.adjustProgress = function (_arg1:Number):void{
var _local2:Object;
_local2 = mc._mochiad_wait;
_local2.server_control = true;
_local2.showing = true;
_local2.started = getTimer();
_local2.ad_msec = (_arg1 - 250);
};
chk["onEnterFrame"] = function ():void{
var _local1:Object;
var _local2:Number;
var _local3:Boolean;
var _local4:Number;
if (!this.parent){
delete this.onEnterFrame;
delete this.fadeFunction;
return;
};
_local1 = this.parent._mochiad_ctr;
_local2 = (getTimer() - this.started);
_local3 = false;
if (!chk.showing){
_local4 = _local1.loaderInfo.bytesTotal;
if ((((_local4 > 0)) || (("number" == "undefined")))){
chk.showing = true;
chk.started = getTimer();
} else {
if (_local2 > chk.ad_timeout){
_local3 = true;
};
};
};
if ((((_local2 > chk.ad_msec)) || (this.parent._mochiad_ctr_failed))){
_local3 = true;
};
if (_local3){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = this.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function _getRes(_arg1:Object, _arg2:Object):Array{
var _local3:Object;
var _local4:Number;
var _local5:Number;
var _local6:Array;
_local3 = _arg2.getBounds(_arg2.root);
_local4 = 0;
_local5 = 0;
if (typeof(_arg1.res) != "undefined"){
_local6 = _arg1.res.split("x");
_local4 = parseFloat(_local6[0]);
_local5 = parseFloat(_local6[1]);
} else {
_local4 = (_local3.xMax - _local3.xMin);
_local5 = (_local3.yMax - _local3.yMin);
};
if ((((_local4 == 0)) || ((_local5 == 0)))){
_local4 = _arg2.stage.stageWidth;
_local5 = _arg2.stage.stageHeight;
};
return ([_local4, _local5]);
}
public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number):MovieClip{
var _local4:MovieClip;
_local4 = new MovieClip();
if (((false) && (_arg3))){
_arg1.addChildAt(_local4, _arg3);
} else {
_arg1.addChild(_local4);
};
_arg1[_arg2] = _local4;
_local4["_name"] = _arg2;
return (_local4);
}
public static function _loadCommunicator(_arg1:Object):MovieClip{
var DEFAULTS:Object;
var clip:Object;
var clipname:String;
var server:String;
var depth:Number;
var mc:MovieClip;
var lv:URLVariables;
var k:String;
var lc:LocalConnection;
var name:String;
var req:URLRequest;
var loader:Loader;
var options = _arg1;
DEFAULTS = {com_server:"http://x.mochiads.com/com/1/", method:"loadCommunicator", depth:10337, id:"_UNKNOWN_"};
options = MochiAd._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = MochiAd.getVersion();
clip = options.clip;
clipname = ("_mochiad_com_" + options.id);
if (!MochiAd._isNetworkAvailable()){
return (null);
};
if (clip[clipname]){
return (clip[clipname]);
};
server = (options.com_server + options.id);
MochiAd._allowDomains(server);
delete options.id;
delete options.com_server;
depth = options.depth;
delete options.depth;
mc = createEmptyMovieClip(clip, clipname, depth);
lv = new URLVariables();
for (k in options) {
lv[k] = options[k];
};
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.name = name;
mc.lc = lc;
lv.lc = name;
mc._id = 0;
mc._queue = [];
mc.rpcResult = function (_arg1:Object):void{
var _local3:Array;
var _local4:Array;
var _local5:Number;
var _local6:Object;
var _local7:Object;
_arg1 = parseInt(_arg1.toString());
_local3 = mc._callbacks[_arg1];
if (typeof(_local3) == "undefined"){
return;
};
delete mc._callbacks[_arg1];
_local4 = [];
_local5 = 2;
while (_local5 < _local3.length) {
_local4.push(_local3[_local5]);
_local5++;
};
_local5 = 1;
while (_local5 < arguments.length) {
_local4.push(arguments[_local5]);
_local5++;
};
_local6 = _local3[1];
_local7 = _local3[0];
if (((_local7) && ((typeof(_local6) == "string")))){
_local6 = _local7[_local6];
};
if (typeof(_local6) == "function"){
_local6.apply(_local7, _local4);
};
};
mc._didConnect = function (_arg1:String):void{
var _local2:Array;
var _local3:Function;
var _local4:Number;
var _local5:Array;
mc._endpoint = _arg1;
_local2 = mc._queue;
delete mc._queue;
_local3 = mc.doSend;
_local4 = 0;
while (_local4 < _local2.length) {
_local5 = _local2[_local4];
_local3.apply(this, _local5);
_local4++;
};
};
mc.doSend = function (_arg1:Array, _arg2:Object, _arg3:Object):void{
var _local5:Number;
var _local6:LocalConnection;
var _local7:Array;
var _local8:Number;
if (mc._endpoint == null){
_local7 = [];
_local8 = 0;
while (_local8 < arguments.length) {
_local7.push(arguments[_local8]);
_local8++;
};
mc._queue.push(_local7);
return;
};
mc._id = (mc._id + 1);
_local5 = mc._id;
mc._callbacks[_local5] = [_arg2, ((_arg3) || (_arg2))];
_local6 = new LocalConnection();
_local6.send(mc._endpoint, "rpc", _local5, _arg1);
};
mc._callbacks = {};
mc._callbacks[0] = [mc, "_didConnect"];
lv.st = getTimer();
req = new URLRequest((server + ".swf"));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader = new Loader();
loader.load(req);
mc.addChild(loader);
mc._mochiad_com = loader;
return (mc);
}
public static function showPreGameAd(_arg1:Object):void{
var DEFAULTS:Object;
var clip:Object;
var ad_msec:Number;
var ad_timeout:Number;
var fadeout_time:Number;
var mc:MovieClip;
var wh:Array;
var w:Number;
var h:Number;
var chk:MovieClip;
var bar:MovieClip;
var bar_color:Number;
var bar_background:Number;
var bar_outline:Number;
var backing_mc:MovieClip;
var backing:Object;
var inside_mc:MovieClip;
var inside:Object;
var outline_mc:MovieClip;
var outline:Object;
var complete:Boolean;
var unloaded:Boolean;
var f:Function;
var r:MovieClip;
var options = _arg1;
DEFAULTS = {ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, ad_started:function ():void{
if ((this.clip is MovieClip)){
this.clip.stop();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}, ad_finished:function ():void{
if ((this.clip is MovieClip)){
this.clip.play();
} else {
throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers."));
};
}};
options = MochiAd._parseOptions(options, DEFAULTS);
clip = options.clip;
ad_msec = 11000;
ad_timeout = options.ad_timeout;
delete options.ad_timeout;
fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!MochiAd.load(options)){
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
var fn:Function;
MochiAd._cleanup(mc);
fn = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
};
wh = MochiAd._getRes(options, clip);
w = wh[0];
h = wh[1];
mc.x = (w * 0.5);
mc.y = (h * 0.5);
chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);
chk.x = (w * -0.5);
chk.y = (h * -0.5);
bar = createEmptyMovieClip(chk, "_mochiad_bar", 4);
bar.x = 10;
bar.y = (h - 20);
bar_color = options.color;
delete options.color;
bar_background = options.background;
delete options.background;
bar_outline = options.outline;
delete options.outline;
backing_mc = createEmptyMovieClip(bar, "_outline", 1);
backing = backing_mc.graphics;
backing.beginFill(bar_background);
backing.moveTo(0, 0);
backing.lineTo((w - 20), 0);
backing.lineTo((w - 20), 10);
backing.lineTo(0, 10);
backing.lineTo(0, 0);
backing.endFill();
inside_mc = createEmptyMovieClip(bar, "_inside", 2);
inside = inside_mc.graphics;
inside.beginFill(bar_color);
inside.moveTo(0, 0);
inside.lineTo((w - 20), 0);
inside.lineTo((w - 20), 10);
inside.lineTo(0, 10);
inside.lineTo(0, 0);
inside.endFill();
inside_mc.scaleX = 0;
outline_mc = createEmptyMovieClip(bar, "_outline", 3);
outline = outline_mc.graphics;
outline.lineStyle(0, bar_outline, 100);
outline.moveTo(0, 0);
outline.lineTo((w - 20), 0);
outline.lineTo((w - 20), 10);
outline.lineTo(0, 10);
outline.lineTo(0, 0);
chk.ad_msec = ad_msec;
chk.ad_timeout = ad_timeout;
chk.started = getTimer();
chk.showing = false;
chk.last_pcnt = 0;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function ():void{
var _local1:Number;
_local1 = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time)));
if (_local1 > 0){
this.parent.alpha = (_local1 * 0.01);
} else {
MochiAd.unload(clip);
delete this["onEnterFrame"];
};
};
complete = false;
unloaded = false;
f = function (_arg1:Event):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
complete = true;
if (unloaded){
MochiAd.unload(clip);
};
};
clip.loaderInfo.addEventListener(Event.COMPLETE, f);
if ((clip.root is MovieClip)){
r = (clip.root as MovieClip);
if (r.framesLoaded >= r.totalFrames){
complete = true;
};
};
mc.unloadAd = function ():void{
unloaded = true;
if (complete){
MochiAd.unload(clip);
};
};
mc.adjustProgress = function (_arg1:Number):void{
var _local2:Object;
_local2 = mc._mochiad_wait;
_local2.server_control = true;
_local2.showing = true;
_local2.started = getTimer();
_local2.ad_msec = _arg1;
};
chk["onEnterFrame"] = function ():void{
var _local1:Object;
var _local2:Object;
var _local3:Number;
var _local4:Boolean;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Object;
var _local10:Number;
var _local11:Number;
if (!this.parent.parent){
delete this["onEnterFrame"];
return;
};
_local1 = this.parent.parent.root;
_local2 = this.parent._mochiad_ctr;
_local3 = (getTimer() - this.started);
_local4 = false;
_local5 = _local1.loaderInfo.bytesTotal;
_local6 = _local1.loaderInfo.bytesLoaded;
if (complete){
_local6 = Math.max(1, _local6);
_local5 = _local6;
};
_local7 = ((100 * _local6) / _local5);
_local8 = ((100 * _local3) / chk.ad_msec);
_local9 = this._mochiad_bar._inside;
_local10 = Math.min(100, Math.min(((_local7) || (0)), _local8));
_local10 = Math.max(this.last_pcnt, _local10);
this.last_pcnt = _local10;
_local9.scaleX = (_local10 * 0.01);
if (!chk.showing){
_local11 = _local2.loaderInfo.bytesTotal;
if ((((_local11 > 0)) || (("number" == "undefined")))){
chk.showing = true;
chk.started = getTimer();
} else {
if (_local3 > chk.ad_timeout){
_local4 = true;
};
};
};
if ((((_local3 > chk.ad_msec)) || (this.parent._mochiad_ctr_failed))){
_local4 = true;
};
if (((complete) && (_local4))){
if (this.server_control){
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = chk.fadeFunction;
};
};
};
doOnEnterFrame(chk);
}
public static function showPreloaderAd(_arg1:Object):void{
MochiAd.showPreGameAd(_arg1);
}
public static function fetchHighScores(_arg1:Object, _arg2:Object, _arg3:Object=null):Boolean{
var _local4:MovieClip;
_local4 = MochiAd._loadCommunicator({clip:_arg1.clip, id:_arg1.id});
if (!_local4){
return (false);
};
_local4.doSend(["fetchHighScores", _arg1], _arg2, _arg3);
return (true);
}
public static function doOnEnterFrame(_arg1:MovieClip):void{
var f:Function;
var mc = _arg1;
f = function (_arg1:Object):void{
if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){
mc.onEnterFrame();
} else {
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
};
};
mc.addEventListener(Event.ENTER_FRAME, f);
}
}
}//package
Section 90
//MochiBot (MochiBot)
package {
import flash.display.*;
import flash.net.*;
import flash.system.*;
public dynamic class MochiBot extends Sprite {
public static function track(_arg1:Sprite, _arg2:String):MochiBot{
var _local3:MochiBot;
var _local4:String;
var _local5:URLVariables;
var _local6:String;
var _local7:URLRequest;
var _local8:Loader;
if (Security.sandboxType == "localWithFile"){
return (null);
};
_local3 = new (MochiBot);
_arg1.addChild(_local3);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
_local4 = "http://core.mochibot.com/my/core.swf";
_local5 = new URLVariables();
_local5["sb"] = Security.sandboxType;
_local5["v"] = Capabilities.version;
_local5["swfid"] = _arg2;
_local5["mv"] = "8";
_local5["fv"] = "9";
_local6 = _arg1.loaderInfo.url;
if (_local6.indexOf("http") == 0){
_local5["url"] = _local6;
} else {
_local5["url"] = "local";
};
_local7 = new URLRequest(_local4);
_local7.contentType = "application/x-www-form-urlencoded";
_local7.method = URLRequestMethod.POST;
_local7.data = _local5;
_local8 = new Loader();
_local3.addChild(_local8);
_local8.load(_local7);
return (_local3);
}
}
}//package
Section 91
//MusicPlayerbody (MusicPlayerbody)
package {
import flash.display.*;
public dynamic class MusicPlayerbody extends BitmapData {
public function MusicPlayerbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 92
//RBinbody (RBinbody)
package {
import flash.display.*;
public dynamic class RBinbody extends BitmapData {
public function RBinbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 93
//Registrybody (Registrybody)
package {
import flash.display.*;
public dynamic class Registrybody extends BitmapData {
public function Registrybody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 94
//Resources (Resources)
package {
import flash.display.*;
import fai.*;
import flash.text.*;
public final class Resources extends MovieClip {
public var htime:TextField;
public var health:TextField;
private var engine:Engine;// = null
public var score:TextField;
public var money:TextField;
public function Resources(_arg1:Engine):void{
engine = null;
super();
engine = _arg1;
}
public function update():void{
var _local1:int;
var _local2:int;
money.text = engine.money.toString();
score.text = engine.score.toString();
_local1 = 0;
_local2 = 0;
while (_local2 < engine.soft.units.length) {
_local1 = (_local1 + engine.soft.units[_local2].health);
_local2++;
};
health.text = _local1.toString();
}
}
}//package
Section 95
//RiskInfo (RiskInfo)
package {
import flash.display.*;
import flash.text.*;
public dynamic class RiskInfo extends MovieClip {
public var risklevel:TextField;
public var title:TextField;
public var desc:TextField;
public var quantity:TextField;
}
}//package
Section 96
//SecurityMon (SecurityMon)
package {
import flash.display.*;
public dynamic class SecurityMon extends MovieClip {
}
}//package
Section 97
//SoftInfoPanel (SoftInfoPanel)
package {
import flash.display.*;
import fai.*;
import flash.text.*;
public class SoftInfoPanel extends MovieClip {
public var extra:TextField;
public var repairButton:WebButton;// = null
public var armor:TextField;
public var title:TextField;
public var health:TextField;
public var upgradeButton:WebButton;// = null
private var engine:Engine;// = null
public var desc:TextField;
public var slevel:TextField;
public function SoftInfoPanel(_arg1:Engine):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
repairButton = null;
upgradeButton = null;
engine = null;
super();
engine = _arg1;
_local2 = -8;
_local3 = 0;
_local4 = 0x535353;
_local5 = 143212;
_local6 = 23253;
repairButton = new WebButton("Repair (R) - 100$", 170, 23, 20, 11001343, 10, 30, true, _local3, _local4, _local5, _local6);
repairButton.y = 275;
repairButton.x = _local2;
addChild(repairButton);
upgradeButton = new WebButton("Update Soft - 1000$", 170, 23, 20, 0xFFFFFF, 10, 30, true, _local3, _local4, _local5, _local6);
upgradeButton.y = 310;
upgradeButton.x = _local2;
addChild(upgradeButton);
visible = false;
}
public function showAbout(_arg1:Unit):void{
var _local2:String;
var _local3:int;
visible = !((_arg1 == null));
if (_arg1){
_local2 = "Update is available for this software.";
if (_arg1.upgradeLevel >= 2){
_local2 = "Software is up to date.";
};
_local3 = engine.utypes.params(_arg1.type).health;
_local3 = (_local3 + ((_local3 * _arg1.upgradeLevel) * Consts.upgradeHExtra));
title.text = _arg1.type;
health.text = ((_arg1.health.toString() + "/") + _local3.toString());
armor.text = _arg1.armor.toString();
desc.text = _arg1.desc;
slevel.text = (_arg1.upgradeLevel.toString() + "/2");
extra.text = _local2;
};
}
}
}//package
Section 98
//Soundclickerx (Soundclickerx)
package {
import flash.media.*;
public dynamic class Soundclickerx extends Sound {
}
}//package
Section 99
//Sounddeath (Sounddeath)
package {
import flash.media.*;
public dynamic class Sounddeath extends Sound {
}
}//package
Section 100
//Soundenemiesappearing (Soundenemiesappearing)
package {
import flash.media.*;
public dynamic class Soundenemiesappearing extends Sound {
}
}//package
Section 101
//Soundshot_anti (Soundshot_anti)
package {
import flash.media.*;
public dynamic class Soundshot_anti extends Sound {
}
}//package
Section 102
//Soundshot_firewall (Soundshot_firewall)
package {
import flash.media.*;
public dynamic class Soundshot_firewall extends Sound {
}
}//package
Section 103
//Soundshot_hijack (Soundshot_hijack)
package {
import flash.media.*;
public dynamic class Soundshot_hijack extends Sound {
}
}//package
Section 104
//SoundStartMenu (SoundStartMenu)
package {
import flash.media.*;
public dynamic class SoundStartMenu extends Sound {
}
}//package
Section 105
//Spambody (Spambody)
package {
import flash.display.*;
public dynamic class Spambody extends BitmapData {
public function Spambody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 106
//Specialsdeath1 (Specialsdeath1)
package {
import flash.display.*;
public dynamic class Specialsdeath1 extends BitmapData {
public function Specialsdeath1(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 107
//Specialsdebris (Specialsdebris)
package {
import flash.display.*;
public dynamic class Specialsdebris extends BitmapData {
public function Specialsdebris(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 108
//Specialssofthit (Specialssofthit)
package {
import flash.display.*;
public dynamic class Specialssofthit extends BitmapData {
public function Specialssofthit(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 109
//Spywarebody (Spywarebody)
package {
import flash.display.*;
public dynamic class Spywarebody extends BitmapData {
public function Spywarebody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 110
//StartMenu (StartMenu)
package {
import flash.display.*;
import fai.*;
import flash.events.*;
public class StartMenu extends MovieClip {
public var easy:WebButton;// = null
public var hs:WebButton;// = null
public var hard:WebButton;// = null
public var tut:WebButton;// = null
public var gregbutton:SimpleButton;
private var engine:Engine;// = null
public var newgame:WebButton;// = null
public var resumegame:WebButton;// = null
public var extreme:WebButton;// = null
public var normal:WebButton;// = null
private static const xoffset:int = 49;
public function StartMenu(_arg1:Engine):void{
resumegame = null;
newgame = null;
easy = null;
normal = null;
hard = null;
extreme = null;
hs = null;
tut = null;
engine = null;
super();
engine = _arg1;
resumegame = new WebButton("Resume Game", 180, 27, 20, 13490687, 14, 25, true);
resumegame.visible = false;
addChild(resumegame);
resumegame.y = 100;
resumegame.x = xoffset;
newgame = new WebButton("New Game", 180, 27, 20, 0xFFFFFF, 14, 25, true);
newgame.visible = false;
addChild(newgame);
newgame.y = 140;
newgame.x = xoffset;
easy = new WebButton("Easy", 180, 27, 20, 13490687, 14, 25, true);
addChild(easy);
easy.y = 80;
easy.x = xoffset;
normal = new WebButton("Normal", 180, 27, 20, 0xFFFFFF, 14, 25, true);
addChild(normal);
normal.y = 115;
normal.x = xoffset;
hard = new WebButton("Hard", 180, 27, 20, 16772518, 14, 25, true);
addChild(hard);
hard.y = 150;
hard.x = xoffset;
extreme = new WebButton("Extreme", 180, 27, 20, 16754342, 14, 25, true);
addChild(extreme);
extreme.y = 185;
extreme.x = xoffset;
tut = new WebButton("How to Play", 180, 27, 20, 16768342, 14, 25, true);
addChild(tut);
tut.y = 237;
tut.x = xoffset;
hs = new WebButton("Highscores", 180, 27, 20, 16768342, 14, 25, true);
addChild(hs);
hs.y = 285;
hs.x = xoffset;
resumegame.addEventListener(MouseEvent.MOUSE_DOWN, onResumeGame);
newgame.addEventListener(MouseEvent.MOUSE_DOWN, onNewGame);
easy.addEventListener(MouseEvent.MOUSE_DOWN, onEasy);
normal.addEventListener(MouseEvent.MOUSE_DOWN, onNormal);
hard.addEventListener(MouseEvent.MOUSE_DOWN, onHard);
extreme.addEventListener(MouseEvent.MOUSE_DOWN, onExtreme);
tut.addEventListener(MouseEvent.MOUSE_DOWN, onTut);
hs.addEventListener(MouseEvent.MOUSE_DOWN, onHS);
}
private function onResumeGame(_arg1:MouseEvent){
engine.playClick();
engine.menu.startMenu();
}
private function onHS(_arg1:MouseEvent){
engine.playClick();
engine.sloader.navigateToLeaderboard();
}
private function onHard(_arg1:MouseEvent){
engine.playClick();
buttonsVisible(false);
engine.loadMap(engine.sloader.maps.get(0));
engine.restart(Consts.Hard);
engine.menu.startMenu();
}
private function onEasy(_arg1:MouseEvent){
engine.playClick();
buttonsVisible(false);
engine.loadMap(engine.sloader.maps.get(0));
engine.restart(Consts.Easy);
engine.menu.startMenu();
}
private function onNormal(_arg1:MouseEvent){
engine.playClick();
buttonsVisible(false);
engine.loadMap(engine.sloader.maps.get(0));
engine.restart(Consts.Normal);
engine.menu.startMenu();
}
public function buttonsVisible(_arg1:Boolean):void{
easy.visible = _arg1;
normal.visible = _arg1;
hard.visible = _arg1;
extreme.visible = _arg1;
resumegame.visible = !(_arg1);
newgame.visible = !(_arg1);
}
private function onTut(_arg1:MouseEvent){
engine.menu.showTutorial();
}
private function onExtreme(_arg1:MouseEvent){
engine.playClick();
buttonsVisible(false);
engine.loadMap(engine.sloader.maps.get(0));
engine.restart(Consts.Extreme);
engine.menu.startMenu();
}
private function onNewGame(_arg1:MouseEvent){
engine.playClick();
buttonsVisible(true);
}
}
}//package
Section 111
//StartMenuButton (StartMenuButton)
package {
import flash.display.*;
import fai.*;
import flash.events.*;
public class StartMenuButton extends MovieClip {
private var clicked:Boolean;// = false
private var engine:Engine;// = null
public function StartMenuButton(_arg1:Engine):void{
clicked = false;
engine = null;
super();
addFrameScript(6, frame7, 14, frame15);
engine = _arg1;
addEventListener(MouseEvent.MOUSE_OVER, onOver);
addEventListener(MouseEvent.MOUSE_OUT, onOut);
addEventListener(MouseEvent.MOUSE_DOWN, onDown);
enable(true);
}
private function onDown(_arg1:MouseEvent):void{
if (!engine.scenario.isRunning()){
return;
};
engine.playClick();
engine.menu.startMenu();
}
function frame15(){
stop();
}
function frame7(){
stop();
}
private function onOver(_arg1:MouseEvent):void{
if (!clicked){
gotoAndPlay("start");
};
}
public function enable(_arg1:Boolean):void{
clicked = _arg1;
if (_arg1){
gotoAndPlay("start");
} else {
gotoAndPlay("middle");
};
}
private function onOut(_arg1:MouseEvent):void{
if (!clicked){
gotoAndPlay("middle");
};
}
}
}//package
Section 112
//Statistics (Statistics)
package {
import flash.display.*;
import fai.*;
import flash.text.*;
public class Statistics extends MovieClip {
public var ilost:int;// = 0
public var ikilled:int;// = 0
public var playnext:WebButton;// = null
public var subtitle:TextField;
public var closebutton:SimpleButton;
public var lost:TextField;
public var savescore:WebButton;// = null
public var restart:WebButton;// = null
public var spent:TextField;
public var killed:TextField;
public var mainmenu:WebButton;// = null
public var score:TextField;
public var kongbutton:SimpleButton;
public var ispent:int;// = 0
public var ibuilt:int;// = 0
public var built:TextField;
public var iscore:int;// = 0
public var caption:TextField;
public function Statistics():void{
iscore = 0;
ikilled = 0;
ilost = 0;
ispent = 0;
ibuilt = 0;
restart = null;
savescore = null;
mainmenu = null;
playnext = null;
super();
addFrameScript(0, frame1);
restart = new WebButton("Restart", 75, 20, 20, 11657215, 10, 20, false);
restart.x = 6;
restart.y = 280;
addChild(restart);
mainmenu = new WebButton("Main Menu", 77, 20, 20, 0xFFFFFF, 10, 20, false);
mainmenu.x = 90;
mainmenu.y = 280;
addChild(mainmenu);
savescore = new WebButton("Save Score", 80, 20, 20, 0xFFFFFF, 10, 20, false);
savescore.x = 175;
savescore.y = 280;
addChild(savescore);
update();
}
function frame1(){
MochiBot.track(this, "8fe4271f");
}
public function reset():void{
visible = false;
iscore = (ikilled = (ilost = (ispent = (ibuilt = 0))));
update();
}
public function update():void{
score.text = iscore.toString();
killed.text = ikilled.toString();
lost.text = ilost.toString();
spent.text = ispent.toString();
built.text = ibuilt.toString();
}
}
}//package
Section 113
//SubmitHighscores (SubmitHighscores)
package {
import flash.display.*;
import flash.text.*;
public dynamic class SubmitHighscores extends MovieClip {
public var msg:TextField;
public var username:TextField;
}
}//package
Section 114
//Threat (Threat)
package {
import flash.display.*;
import flash.text.*;
public dynamic class Threat extends MovieClip {
public var title:TextField;
public var level:TextField;
}
}//package
Section 115
//Trojanbody (Trojanbody)
package {
import flash.display.*;
public dynamic class Trojanbody extends BitmapData {
public function Trojanbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package
Section 116
//UnitInfoPanel (UnitInfoPanel)
package {
import flash.display.*;
import fai.*;
import flash.text.*;
public class UnitInfoPanel extends MovieClip {
public var extra:TextField;
public var repairButton:WebButton;// = null
public var costbitmap:MovieClip;
public var armor:TextField;
public var range:TextField;
public var attack:TextField;
public var title:TextField;
public var health:TextField;
public var upgradeButton:WebButton;// = null
private var engine:Engine;// = null
public var desc:TextField;
public var destroyButton:WebButton;// = null
public var cost:TextField;
public function UnitInfoPanel(_arg1:Engine):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
destroyButton = null;
repairButton = null;
upgradeButton = null;
engine = null;
super();
engine = _arg1;
_local2 = -8;
_local3 = 0;
_local4 = 0x535353;
_local5 = 143212;
_local6 = 23253;
destroyButton = new WebButton("Sell for 100$", 170, 20, 20, 0xFFFFFF, 10, 20, false, 16128559, 16613516, 16671601, 16701146);
destroyButton.x = _local2;
destroyButton.y = 338;
addChild(destroyButton);
repairButton = new WebButton("Repair (R) - 100$", 170, 23, 20, 11001343, 10, 30, true, _local3, _local4, _local5, _local6);
repairButton.y = 275;
repairButton.x = _local2;
addChild(repairButton);
upgradeButton = new WebButton("Upgrade (U) - 1000$", 170, 23, 20, 0xFFFFFF, 10, 30, true, _local3, _local4, _local5, _local6);
upgradeButton.y = 303;
upgradeButton.x = _local2;
addChild(upgradeButton);
visible = false;
}
public function showAbout(_arg1:Unit, _arg2:Boolean):void{
var _local3:int;
var _local4:TextFormat;
var _local5:int;
visible = !((_arg1 == null));
if (_arg1){
if (engine.menu.buttons.selectedUnit != _arg1){
destroyButton.visible = !(_arg2);
repairButton.visible = !(_arg2);
cost.visible = !(_arg2);
costbitmap.visible = !(_arg2);
} else {
destroyButton.visible = false;
repairButton.visible = false;
costbitmap.visible = true;
cost.visible = true;
};
_local3 = 0xFFFFFF;
if (_arg2){
_local3 = 0xFF0000;
switch (_arg1.type){
case UnitTypes.adware:
extra.text = "Most simple and safe threat, doesn't hurt much";
break;
case UnitTypes.spam:
extra.text = "Weak threat but has large quantity";
break;
case UnitTypes.backdoor:
extra.text = "Weak threat but has increased life rate";
break;
case UnitTypes.trojan:
extra.text = "Average risk threat, dangerous on higher levels";
break;
case UnitTypes.spyware:
extra.text = "Above average threat, very dangerous on higher levels";
break;
case UnitTypes.keylogger:
extra.text = "Above average threat, most fast moving invader";
break;
case UnitTypes.hijacker:
extra.text = "Strong invader, can destroy security tools";
break;
case UnitTypes.virus:
extra.text = "Most dangerous invader, moves above security tools";
break;
};
} else {
switch (_arg1.type){
case UnitTypes.antiadware:
extra.text = "Damages all types of malware.";
break;
case UnitTypes.antispyware:
extra.text = "Damages all except viruses.";
break;
case UnitTypes.antivirus:
extra.text = "Against viruses only. Very good fire speed.";
break;
case UnitTypes.garbagecleaner:
extra.text = "Damages all types of malware. Slows down invaders + chance to stan.";
break;
case UnitTypes.firewall:
extra.text = "Damages all malware within fire range. Does not affect viruses";
break;
};
};
_local4 = title.defaultTextFormat;
_local4.color = _local3;
title.defaultTextFormat = _local4;
_local5 = engine.utypes.params(_arg1.type).health;
_local5 = (engine.utypes.params(_arg1.type).health + ((_local5 * _arg1.upgradeLevel) * Consts.upgradeHExtra));
title.text = _arg1.type;
health.text = ((_arg1.health.toString() + "/") + _local5.toString());
armor.text = _arg1.armor.toString();
range.text = Utils.textrange(_arg1.eyerange);
desc.text = _arg1.desc;
attack.text = _arg1.damage.toString();
cost.text = _arg1.cost.toString();
};
}
}
}//package
Section 117
//UpgradeStar (UpgradeStar)
package {
import flash.display.*;
public dynamic class UpgradeStar extends MovieClip {
}
}//package
Section 118
//Virusbody (Virusbody)
package {
import flash.display.*;
public dynamic class Virusbody extends BitmapData {
public function Virusbody(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package