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

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/24349056?noj=FRM24349056-14DC" width="1" height="1"></div>

Storm TD game.swf

This is the info page for
Flash #28289

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


ActionScript [AS3]
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 (curbuffer != _arg1){ curbuffer = _arg1; nframes = (curbuffer.width / width); framen = 1; draw(); }; } public function nextFrame():void{ framen++; if (framen > nframes){ framen = 1; }; draw(); } public function setFrame(_arg1:uint):void{ if (_arg1 == framen){ return; }; framen = _arg1; draw(); } private function draw():void{ rect = new Rectangle(((framen - 1) * width), 0, width, height); bitmapData.copyPixels(curbuffer, rect, point); } } }//package fai
Section 2
//Astar (fai.Astar) package fai { public class Astar { private var ns:Array;// = null private var opened:AstarMap;// = null private var closed:AstarMap;// = null public var checkxy:Function;// = null public var tid:uint;// = 0 public var map:MapMatrix;// = null private var nextbestpos:Position;// = null public function Astar(_arg1:MapMatrix):void{ checkxy = null; map = null; ns = null; opened = null; closed = null; nextbestpos = null; tid = 0; super(); checkxy = checkwall; map = _arg1; } public function search(_arg1:Position, _arg2:Position, _arg3:Array):Boolean{ var _local4:uint; var _local5:uint; var _local6:uint; var _local7:int; var _local8:AstarNode; var _local9:AstarNode; var _local10:AstarNode; var _local11:AstarNode; var _local12:uint; var _local13:Position; var _local14:AstarNode; var _local15:*; nextbestpos = null; ns = new Array(); _arg3.length = 0; opened = new AstarMap(); closed = new AstarMap(); _local4 = 0; _local5 = 0; _local6 = 0; _local7 = 0; _local8 = null; _local9 = null; _local10 = new AstarNode(); _local11 = null; _local10.pos = _arg1; _local10.f = (_local10.h = hestimate(_arg1, _arg2)); _local12 = map.getpos(_arg2); map.setpos(_arg2, 0); opened.add(_local10.key(), _local10); while (!(opened.empty())) { if (nextbestpos){ _local11 = opened.getout(((nextbestpos.x * 1000) + nextbestpos.y)); } else { _local11 = opened.pop(); }; if (_local11.pos.isequal(_arg2)){ _local14 = _local11; while (_local14 != _local10) { _arg3.unshift(_local14.pos); _local14 = _local14.parent; }; map.setpos(_arg2, _local12); return (true); }; neighbours(_local11.pos); _local6 = ~(0); nextbestpos = null; for each (_local13 in ns) { _local4 = (_local11.g + hestimate(_local11.pos, _local13)); _local5 = hestimate(_local13, _arg2); _local7 = (_local4 + _local5); _local8 = opened.get(((_local13.x * 1000) + _local13.y)); if (((_local8) && ((_local8.f <= _local7)))){ } else { _local9 = closed.get(((_local13.x * 1000) + _local13.y)); if (((_local9) && ((_local9.f <= _local7)))){ } else { if (_local8){ opened.remove(_local8.key()); }; if (_local9){ closed.remove(_local9.key()); }; if (_local5 < _local6){ nextbestpos = _local13; _local6 = _local5; }; _local15 = new AstarNode(); _local15.pos = _local13; _local15.g = _local4; _local15.h = _local5; _local15.f = _local7; _local15.parent = _local11; opened.add(_local15.key(), _local15); }; }; }; closed.add(_local11.key(), _local11); }; map.setpos(_arg2, _local12); 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)) && (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))) && (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))); }; } public function checkwall(_arg1:uint, _arg2:uint):Boolean{ return (!((Consts.Wall == map.getxy(_arg1, _arg2)))); } public function hestimate(_arg1:Position, _arg2:Position):uint{ return ((Math.abs((_arg1.x - _arg2.x)) + Math.abs((_arg1.y - _arg2.y)))); } } }//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)) && ((values[_local3].f == _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)) && ((values[_local3].f == _arg1)))) { if (values[_local3].pos.isequal(_arg2.pos)){ keys.splice(_local3, 1); values.splice(_local3, 1); return; }; _local3++; }; } else { keys.splice(index_, 1); values.splice(index_, 1); }; }; } }
Section 3
//AttackGoal (fai.AttackGoal) package fai { public class AttackGoal extends Goal { private var recharging:int;// = 0 public var world:MapMatrix;// = null public var hostilecamp:Camp;// = null public function AttackGoal(_arg1:Unit, _arg2:Camp, _arg3:MapMatrix):void{ hostilecamp = null; world = null; recharging = 0; super(); owner = _arg1; hostilecamp = _arg2; world = _arg3; } public function advance():void{ var _local1:Unit; _local1 = null; if (Unit.ATTACK == owner.cstate){ if (recharging > 0){ recharging--; if (!recharging){ _local1 = hostilecamp.getNearUnit(owner); if (_local1 != null){ owner.startattack(_local1); } else { owner.reset(); owner.sprite.setMoveSprite(); return; }; }; } else { owner.attack(); }; if (Unit.IDLE == owner.cstate){ _local1 = hostilecamp.getNearUnit(owner); if (_local1 != null){ recharging = owner.rechargetime; owner.startattack(_local1); } else { owner.sprite.setMoveSprite(); }; }; } else { if (Unit.IDLE == owner.cstate){ _local1 = hostilecamp.getNearUnit(owner); if (_local1 != null){ owner.startattack(_local1); }; }; }; } } }//package fai
Section 4
//BulletGoal (fai.BulletGoal) package fai { import flash.display.*; public class BulletGoal extends Goal { public var engine:Engine;// = null public var subject:Unit;// = null public var sprite:AnimatedBitmap;// = null private var hitpos:Position;// = null public var assaulter:Unit;// = null private var gip:int;// = 0 public var bullet:Sprite; public function BulletGoal(_arg1:Unit, _arg2:Unit, _arg3:Position, _arg4:Engine):void{ var _local5:int; var _local6:int; assaulter = null; subject = null; sprite = null; engine = null; gip = 0; hitpos = null; bullet = new Sprite(); super(); engine = _arg4; assaulter = _arg1; subject = _arg2; sprite = new AnimatedBitmap(assaulter.sprite.bullet, 24, 24); bullet.addChild(sprite); sprite.y = (sprite.y - (Math.min(_arg1.sprite.height, _arg2.sprite.width) / 2)); sprite.x = (sprite.x - (_arg1.sprite.sprite.width / 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); } override public function deactivate():void{ super.deactivate(); if (bullet){ bullet.removeChild(sprite); engine.mainstage.removeChild(bullet); sprite = null; assaulter = (subject = null); bullet = null; }; } public function advance():void{ if (gip <= 0){ if (sprite.framen < sprite.nframes){ sprite.nextFrame(); return; }; deactivate(); } else { gip = (gip - assaulter.bulletspeed); if (gip <= 0){ sprite.y = (sprite.y + (assaulter.bulletspeed + gip)); sprite.setBuffer(assaulter.sprite.bulletexp); engine.playSound(assaulter.attacksound, hitpos); if (subject.pos.isequal(hitpos)){ engine.hitUnit(assaulter, subject); }; } else { sprite.y = (sprite.y + assaulter.bulletspeed); }; }; } } }//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 size():uint{ return (units.length); } public function getNearUnit(_arg1:Unit):Unit{ var _local2:Unit; var _local3:*; for each (_local2 in units) { _local3 = (Math.abs((_local2.pos.x - _arg1.pos.x)) + Math.abs((_local2.pos.y - _arg1.pos.y))); if (_local3 <= _arg1.eyerange){ return (_local2); }; }; return (null); } public function add(_arg1:Unit):void{ units[units.length] = _arg1; } public function getUnder(_arg1:Position):Unit{ var _local2:Unit; for each (_local2 in units) { if (_local2.pos.isequal(_arg1)){ return (_local2); }; }; return (null); } } }//package fai
Section 6
//Consts (fai.Consts) package fai { public class Consts { public static const xstart:int = 0; public static const gmapheight:uint = 490; public static const ystart:int = -5; public static const mapheight:int = 14; public static const UNIT_LEAVE_COUNT:int = 100; public static const moneystart_easy:int = 100; public static const gmapwidth:uint = 540; public static const UnitWaveCount:int = 30; public static const cellsize:uint = 35; public static const NORMAL:int = 2; public static const moneystart_hard:int = 0; public static const Wall:uint = 1; public static const moneystart_normal:int = 25; public static const MINE_PERIOD:int = 5000; public static const EASY:int = 1; public static const WAVE_COUNT:int = 25; public static const unitsId:uint = 2; public static const HARD:int = 3; public static const MINE_PORTION:int = 5; public static const GOALSCLEANPAUSE:uint = 10; public static const mapwidth:int = 15; public static const turretsId:uint = 3; } }//package fai
Section 7
//DieGoal (fai.DieGoal) package fai { public class DieGoal extends Goal { public var engine:Engine;// = null public var unit:Unit;// = null private var leave:int;// = 100 public function DieGoal(_arg1:Unit, _arg2:Engine):void{ unit = null; engine = null; leave = Consts.UNIT_LEAVE_COUNT; super(); unit = _arg1; engine = _arg2; unit.startdie(); } public function advance():void{ if (Unit.DEATH == unit.cstate){ unit.die(); return; }; if (leave > 0){ if (Consts.UNIT_LEAVE_COUNT == leave){ if (!engine.scenario.gametarget.isLive()){ engine.scenario.wavetimer.stop(); engine.menu.gameover(); }; }; leave--; return; }; deactivate(); } override public function deactivate():void{ super.deactivate(); if (unit){ engine.mainstage.removeChild(unit.sprite); unit = null; }; } } }//package fai
Section 8
//Engine (fai.Engine) package fai { import flash.display.*; import flash.events.*; import flash.media.*; import flash.utils.*; public class Engine { public var turrets:Camp; private var normalcwalls:Array; public var scenario:Scenario;// = null private var hardcwalls:Array; public var world:MapMatrix;// = null public var camps:Array; public var backgr:Sprite;// = null public var utypes:UnitTypes;// = null private var easywalls:Array; private var tickTimer:Timer;// = null public var score:int;// = 0 public var paused:Boolean;// = false public var difficulty:int;// = 0 public var goals:Array; public var sloader:SmartLoader;// = null private var wallsprites:Array; private var defaultwalls:Array; public var menu:GameMenu;// = null public var gold:uint;// = 0 private var normalwalls:Array; public var mainstage:MovieClip;// = null private var easycwalls:Array; public var skipclick:Boolean;// = false private var hardwalls:Array; public var units:Camp; public var ccursor:MouseCursor;// = null private var counter:int;// = 0 public static var stageRadius = Math.pow(((Consts.mapwidth + Consts.mapheight) / 4), 2); public function Engine(_arg1:MovieClip, _arg2:SmartLoader, _arg3:UnitTypes):void{ goals = new Array(); world = null; camps = new Array(); counter = 0; tickTimer = null; mainstage = null; ccursor = null; backgr = null; sloader = null; units = new Camp(); turrets = new Camp(); menu = null; utypes = null; gold = 0; score = 0; skipclick = false; paused = false; scenario = null; difficulty = 0; easywalls = new Array(new Array(245, 0), new Array(245, 35), new Array(245, 69), new Array(245, 105), new Array(245, 140), new Array(245, 175), new Array(270, 200), new Array(292, 229), new Array(301, 268), new Array(317, 308), new Array(310, 340), new Array(45, 305), new Array(350, 0), new Array(350, 35), new Array(350, 69), new Array(350, 105), new Array(350, 140), new Array(397, 239), new Array(420, 277), new Array(420, 307), new Array(420, 370), new Array(408, 400), new Array(382, 205), new Array(420, 340), new Array(80, 305), new Array(118, 305), new Array(132, 277), new Array(153, 0x0100), new Array(180, 235), new Array(350, 175), new Array(60, 105), new Array(93, 105), new Array(128, 105), new Array(161, 105)); easycwalls = new Array(new Array(2, 3), new Array(3, 3), new Array(4, 3), new Array(5, 3), new Array(7, 0), new Array(7, 1), new Array(7, 2), new Array(7, 3), new Array(7, 4), new Array(7, 5), new Array(10, 0), new Array(10, 1), new Array(10, 2), new Array(10, 3), new Array(10, 4), new Array(10, 5), new Array(11, 6), new Array(11, 7), new Array(12, 7), new Array(12, 8), new Array(12, 9), new Array(12, 10), new Array(12, 11), new Array(12, 12), new Array(8, 6), new Array(8, 7), new Array(9, 7), new Array(7, 6), new Array(9, 8), new Array(9, 9), new Array(9, 10), new Array(11, 5), new Array(2, 9), new Array(3, 9), new Array(4, 9), new Array(4, 8), new Array(5, 8), new Array(5, 7)); normalwalls = new Array(new Array(245, 0), new Array(245, 35), new Array(245, 69), new Array(245, 105), new Array(245, 140), new Array(245, 175), new Array(270, 200), new Array(292, 229), new Array(301, 268), new Array(317, 308), new Array(310, 340), new Array(280, 348), new Array(350, 0), new Array(350, 35), new Array(350, 69), new Array(350, 105), new Array(350, 140), new Array(397, 239), new Array(420, 277), new Array(420, 307), new Array(420, 370), new Array(408, 400), new Array(382, 205), new Array(420, 340), new Array(105, 390), new Array(105, 363), new Array(105, 330), new Array(118, 305), new Array(132, 277), new Array(153, 0x0100), new Array(350, 175)); normalcwalls = new Array(new Array(7, 0), new Array(7, 1), new Array(7, 2), new Array(7, 3), new Array(7, 4), new Array(7, 5), new Array(10, 0), new Array(10, 1), new Array(10, 2), new Array(10, 3), new Array(10, 4), new Array(10, 5), new Array(11, 6), new Array(11, 7), new Array(12, 7), new Array(12, 8), new Array(12, 9), new Array(12, 10), new Array(12, 11), new Array(12, 12), new Array(8, 6), new Array(8, 7), new Array(9, 7), new Array(7, 6), new Array(9, 8), new Array(9, 9), new Array(9, 10), new Array(8, 10), new Array(11, 5), new Array(3, 11), new Array(3, 10), new Array(3, 9), new Array(4, 9), new Array(4, 8), new Array(5, 8)); hardwalls = new Array(new Array(245, 0), new Array(245, 35), new Array(245, 69), new Array(245, 105), new Array(245, 140), new Array(245, 175), new Array(317, 308), new Array(310, 340), new Array(280, 348), new Array(248, 357), new Array(210, 365), new Array(350, 0), new Array(350, 35), new Array(350, 69), new Array(350, 105), new Array(350, 140), new Array(397, 239), new Array(420, 277), new Array(420, 307), new Array(420, 370), new Array(408, 400), new Array(382, 205), new Array(420, 340), new Array(105, 420), new Array(105, 390), new Array(105, 363), new Array(105, 330), new Array(118, 305), new Array(132, 277), new Array(382, 419), new Array(347, 420), new Array(140, 419), new Array(242, 389), new Array(280, 387)); hardcwalls = new Array(new Array(7, 0), new Array(7, 1), new Array(7, 2), new Array(7, 3), new Array(7, 4), new Array(7, 5), new Array(10, 0), new Array(10, 1), new Array(10, 2), new Array(10, 3), new Array(10, 4), new Array(11, 6), new Array(11, 7), new Array(12, 7), new Array(12, 8), new Array(12, 9), new Array(12, 10), new Array(12, 11), new Array(12, 12), new Array(4, 12), new Array(7, 11), new Array(8, 11), new Array(9, 9), new Array(9, 10), new Array(8, 10), new Array(7, 10), new Array(6, 10), new Array(6, 11), new Array(3, 12), new Array(3, 11), new Array(3, 10), new Array(3, 9), new Array(4, 9), new Array(4, 8), new Array(10, 12), new Array(11, 12)); defaultwalls = new Array(new Array(14, 0), new Array(14, 4), new Array(14, 5), new Array(13, 5), new Array(14, 6), new Array(0, 7), new Array(0, 8), new Array(0, 9), new Array(1, 9), new Array(0, 10), new Array(0, 12), new Array(0, 13)); wallsprites = new Array(); super(); utypes = _arg3; utypes.engine = this; sloader = _arg2; mainstage = _arg1; world = new MapMatrix((Consts.mapwidth + Math.abs(Consts.xstart)), (Consts.mapheight + Math.abs(Consts.ystart))); createBackground(); camps.push(units); camps.push(turrets); } private function onmoving(_arg1:MouseEvent):void{ checkCursor(_arg1.stageX, _arg1.stageY); } private function onclick(_arg1:MouseEvent):void{ if (ccursor != null){ if (paused){ return; }; if ((((_arg1.stageX < Consts.gmapwidth)) && ((_arg1.stageY < Consts.gmapheight)))){ if (ccursor.isGood()){ buildTurret(ccursor.suite, (uint((_arg1.stageX / Consts.cellsize)) + Math.abs(Consts.xstart)), (uint((_arg1.stageY / Consts.cellsize)) + Math.abs(Consts.ystart))); ccursor.setGood(false); gold = (gold - ccursor.cost); menu.stat.ispent = (menu.stat.ispent + ccursor.cost); menu.stat.ibuilt++; score = (score + (ccursor.cost / 3)); menu.updateResources(); removeBuildCursor(); }; }; } else { if ((((((_arg1.stageX < Consts.gmapwidth)) && ((_arg1.stageY < Consts.gmapheight)))) && (!(skipclick)))){ menu.showInfo(null, false); }; skipclick = false; }; } public function create():void{ var _local1:AnimatedBitmap; _local1 = sloader.getBackground(); backgr.addChildAt(_local1, 0); } public function removeBuildCursor():void{ if (ccursor){ menu.deselectBuildButton(ccursor.suite); ccursor.remove(); mainstage.removeChild(ccursor); ccursor = null; }; } public function restart():void{ var _local1:Array; var _local2:Array; var _local3:Array; var _local4:Array; var _local5:AnimatedBitmap; menu.startmenu.visible = false; score = 0; _local1 = null; _local2 = null; switch (difficulty){ case Consts.EASY: _local1 = easywalls; _local2 = easycwalls; gold = Consts.moneystart_easy; break; case Consts.NORMAL: _local1 = normalwalls; _local2 = normalcwalls; gold = Consts.moneystart_normal; break; case Consts.HARD: _local1 = hardwalls; _local2 = hardcwalls; gold = Consts.moneystart_hard; break; }; world.clear(); for each (_local3 in defaultwalls) { world.setxy(_local3[0], (_local3[1] + Math.abs(Consts.ystart)), Consts.Wall); }; for each (_local3 in _local1) { _local5 = sloader.getWall(); mainstage.addChildAt(_local5, 1); wallsprites.push(_local5); _local5.x = (_local3[0] - (Consts.cellsize / 2)); _local5.y = (_local3[1] - (Consts.cellsize / 2)); }; for each (_local4 in _local2) { world.setxy(_local4[0], (_local4[1] + Math.abs(Consts.ystart)), Consts.Wall); }; buildTurret(UnitTypes.mine, 6, (13 + Math.abs(Consts.ystart))); buildTurret(UnitTypes.mine, 8, (13 + Math.abs(Consts.ystart))); buildTurret(UnitTypes.lightcannon, 6, (12 + Math.abs(Consts.ystart))); buildTurret(UnitTypes.lightcannon, 7, (12 + Math.abs(Consts.ystart))); buildTurret(UnitTypes.lightcannon, 8, (12 + Math.abs(Consts.ystart))); mainstage.addEventListener(Event.ENTER_FRAME, tick); mainstage.addEventListener(MouseEvent.MOUSE_MOVE, onmoving); mainstage.addEventListener(MouseEvent.CLICK, onclick); mainstage.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); scenario = new Scenario(this); scenario.start(); } private function tick(_arg1:Event):void{ var _local2:uint; _local2 = 0; while (_local2 < goals.length) { if (goals[_local2].active){ goals[_local2].advance(); }; _local2++; }; if (!counter){ cleanGoals(); counter = Consts.GOALSCLEANPAUSE; } else { counter--; }; } public function destroyUnit(_arg1:Unit):void{ var _local2:uint; removeUnit(_arg1); mainstage.setChildIndex(_arg1.sprite, 1); gold = (gold + utypes.params(_arg1.type).deathcost); score = (score + (utypes.params(_arg1.type).deathcost * 2)); menu.stat.ikilled = (menu.stat.ikilled + ((_arg1.mapid == Consts.unitsId)) ? 1 : 0); menu.stat.ilost = (menu.stat.ilost + ((_arg1.mapid == Consts.unitsId)) ? 0 : 1); menu.updateResources(); menu.announce.subtract(_arg1.type); if (ccursor){ checkCursor(ccursor.x, ccursor.y); }; _local2 = 0; while (_local2 < goals.length) { if (goals[_local2].owner == _arg1){ goals[_local2].deactivate(); }; _local2++; }; goals[goals.length] = new DieGoal(_arg1, this); _arg1.die(); } private function removeUnit(_arg1:Unit):void{ var _local2:Camp; var _local3:uint; world.setpos(_arg1.pos, 0); for each (_local2 in camps) { _local3 = 0; while (_local3 < _local2.units.length) { if (_local2.units[_local3] == _arg1){ delete _local2.units[_local3]; _local2.units.splice(_local3, 1); break; }; _local3++; }; }; } public function hitUnit(_arg1:Unit, _arg2:Unit):void{ if (!_arg2.isLive()){ return; }; _arg2.health = (_arg2.health - ((_arg1.damage / (_arg2.armor + 0.1)) + 1)); if (menu.cunit == _arg2){ menu.updateInfo(); }; if (!_arg2.isLive()){ destroyUnit(_arg2); }; } private function onKeyDown(_arg1:KeyboardEvent):void{ if (32 == _arg1.charCode){ removeBuildCursor(); }; } public function addUnit(_arg1:Unit):void{ world.setpos(_arg1.pos, _arg1.mapid); _arg1.engine = this; _arg1.sprite.x = ((_arg1.pos.x + Consts.xstart) * Consts.cellsize); _arg1.sprite.y = ((_arg1.pos.y + Consts.ystart) * Consts.cellsize); _arg1.sprite.visible = true; } public function playSound(_arg1:Sound, _arg2:Position):void{ var _local3:SoundTransform; var _local4:int; var _local5:int; _local3 = new SoundTransform(); if (!menu.volume){ return; }; _local4 = _arg2.x; _local5 = _arg2.y; _local3.volume = (menu.volume / (1 + (((_local4 * _local4) + (_local5 * _local5)) / stageRadius))); _local3.pan = (1 - (Math.abs(((Math.atan2(_arg2.y, _arg2.x) / Math.PI) * 180)) / 90)); _arg1.play(0, 0, _local3); } public function move(_arg1:Unit, _arg2:Position):void{ var _local3:MoveGoal; _local3 = new MoveGoal(_arg1, world); _local3.setTarget(_arg2); _local3.engine = this; goals[goals.length] = _local3; } private function createBackground():void{ backgr = new Sprite(); mainstage.addChild(backgr); } public function buildTurret(_arg1:String, _arg2:int, _arg3:int):void{ var _local4:Unit; _local4 = utypes.createUnit(_arg1); _local4.pos.set(_arg2, _arg3); addUnit(_local4); if (!_local4.peaceful){ attack(_local4, units); }; if (_local4.type == UnitTypes.mine){ goals.push(new MineGoal(this, _local4)); }; } public function stopall():void{ var _local1:int; var _local2:*; var _local3:Unit; if (scenario){ mainstage.removeEventListener(Event.ENTER_FRAME, tick); mainstage.removeEventListener(MouseEvent.MOUSE_MOVE, onmoving); mainstage.removeEventListener(MouseEvent.CLICK, onclick); mainstage.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); scenario.stop(); _local1 = 0; _local1 = 0; while (_local1 < wallsprites.length) { mainstage.removeChild(wallsprites[_local1]); delete wallsprites[_local1]; _local1++; }; wallsprites.length = 0; removeBuildCursor(); for each (_local2 in goals) { _local2.deactivate(); }; cleanGoals(); _local3 = null; _local1 = 0; while (_local1 < turrets.size()) { _local3 = turrets.units[_local1]; world.setpos(_local3.pos, 0); mainstage.removeChild(_local3.sprite); delete turrets.units[_local1]; _local1++; }; turrets.units.length = 0; _local1 = 0; while (_local1 < units.size()) { _local3 = units.units[_local1]; world.setpos(_local3.pos, 0); mainstage.removeChild(_local3.sprite); delete units.units[_local1]; _local1++; }; units.units.length = 0; menu.reset(); paused = false; skipclick = false; menu.pausebutton.txt.text = "Pause"; }; } public function setCursor(_arg1:MouseCursor):void{ ccursor = _arg1; ccursor.visible = false; mainstage.addChild(ccursor); } public function attack(_arg1:Unit, _arg2:Camp):void{ var _local3:AttackGoal; _local3 = new AttackGoal(_arg1, _arg2, world); goals.unshift(_local3); } public function runBullet(_arg1:Unit, _arg2:Unit, _arg3:Position):void{ var _local4:BulletGoal; _local4 = new BulletGoal(_arg1, _arg2, _arg3, this); mainstage.addChild(_local4.bullet); goals[goals.length] = _local4; } 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 pause(_arg1:Boolean):void{ if (_arg1){ mainstage.removeEventListener(Event.ENTER_FRAME, tick); if (scenario){ scenario.wavetimer.stop(); }; } else { mainstage.addEventListener(Event.ENTER_FRAME, tick); if (scenario){ scenario.wavetimer.start(); }; }; paused = _arg1; } public function checkCursor(_arg1:int, _arg2:int):void{ var _local3:uint; var _local4:uint; if (ccursor != null){ if ((((_arg1 < Consts.gmapwidth)) && ((_arg2 < Consts.gmapheight)))){ ccursor.visible = true; _local3 = ((_arg1 / Consts.cellsize) + Math.abs(Consts.xstart)); _local4 = ((_arg2 / Consts.cellsize) + Math.abs(Consts.ystart)); ccursor.x = ((_local3 + Consts.xstart) * Consts.cellsize); ccursor.y = ((_local4 + Consts.ystart) * Consts.cellsize); if (world.getxy(_local3, _local4) != 0){ ccursor.setGood(false); } else { ccursor.setGood((gold >= ccursor.cost)); }; } else { ccursor.visible = false; }; }; } } }//package fai
Section 9
//GameMenu (fai.GameMenu) package fai { import flash.display.*; import flash.events.*; import flash.text.*; public class GameMenu extends Sprite { private var restartbutton:TextButton;// = null public var backgr:Sprite;// = null private var tinfo:TurretInfoPanel;// = null public var volume:Number;// = 1 public var engine:Engine;// = null public var stat:Statistics;// = null private var buildbuttons:Map; public var cunit:Unit;// = null public var announce:Announce;// = null public var buttons:Sprite;// = null public var score:TextField;// = null public var pausebutton:TextButton;// = null private var isenemy:Boolean;// = false private var about:About;// = null private var info:TurretInfoPanel;// = null public var startmenu:StartMenu;// = null private var volbutton:TextButton;// = null public var money:TextField;// = null private var aboutbutton:TextButton;// = null public static const fillColor:int = 8954319; public static const borderColor:int = 532555; public function GameMenu(_arg1:Engine):void{ engine = null; buttons = null; backgr = null; info = null; money = null; score = null; cunit = null; isenemy = false; pausebutton = null; restartbutton = null; aboutbutton = null; volbutton = null; tinfo = null; announce = null; about = null; startmenu = null; buildbuttons = new Map(); stat = null; volume = 1; super(); engine = _arg1; engine.menu = this; engine.mainstage.addChild(this); } public function onoutbutton(_arg1:MouseEvent):void{ deselectBuildButton(_arg1.target.suite); if (engine.ccursor){ selectBuildButton(engine.ccursor.suite); }; } public function create():void{ backgr = createBack(); buttons = createButtons(); createResources(); createInfoPanel(); createMainMenu(); createMenus(); createStatistics(); } public function onabout(_arg1:MouseEvent):void{ if (startmenu.visible){ return; }; about.visible = !(about.visible); } public function onclick(_arg1:MouseEvent):void{ var _local2:String; var _local3:Unit; var _local4:AnimatedBitmap; _local2 = _arg1.target.suite; if (engine.ccursor){ if (engine.ccursor.suite == _local2){ deselectBuildButton(_local2); engine.removeBuildCursor(); return; }; engine.removeBuildCursor(); }; if (engine.utypes.params(_local2).cost <= engine.gold){ _local3 = engine.utypes.params(_local2); _local4 = new AnimatedBitmap(engine.sloader.getBody(_local2), _local3.spritewidth, engine.sloader.getBody(_local2).height); engine.setCursor(new MouseCursor(_local2, _local4, _local3.eyerange, _local3.cost)); selectBuildButton(_local2); }; } public function updateInfo():void{ if (!cunit){ return; }; if (cunit.health <= 0){ info.visible = false; cunit.sprite.showSelection(0, false); cunit = null; } else { info.showAbout(cunit, isenemy); cunit.sprite.showSelection(((cunit.health * 100) / engine.utypes.params(cunit.type).health), true); }; } public function victory():void{ stat.caption.text = "Victory!!!"; stat.iscore = engine.score; stat.update(); engine.pause(true); stat.visible = true; } public function createBack():Sprite{ var _local1:Sprite; var _local2:Shape; var _local3:uint; var _local4:uint; var _local5:uint; var _local6:uint; var _local7:uint; _local1 = new Sprite(); _local2 = new Shape(); _local2.alpha = 0.3; addChild(_local1); _local1.addChild(_local2); _local3 = 700; _local4 = 500; _local5 = ((uint((Consts.gmapwidth / Consts.cellsize)) * Consts.cellsize) + 15); _local6 = (_local3 - _local5); _local7 = _local4; _local1.x = _local5; _local1.y = 0; _local2.graphics.lineStyle(1, 0x666666); _local2.graphics.beginFill(0xEAEAEA); _local2.graphics.drawRect(0, 0, _local6, _local7); _local2.graphics.endFill(); return (_local1); } public function onoverbutton(_arg1:MouseEvent):void{ selectBuildButton(_arg1.target.suite); } public function createStatistics():void{ stat = new Statistics(); stat.restart.addEventListener(MouseEvent.CLICK, onrestart); engine.mainstage.addChild(stat); stat.visible = false; stat.x = 180; stat.y = 100; } public function deselectBuildButton(_arg1:String):void{ var _local2:ButtonSprite; _local2 = buildbuttons.get(_arg1); if (_local2){ _local2.select(false); tinfo.showAbout(null, false); }; } public function showInfo(_arg1:Unit, _arg2:Boolean):void{ if (((cunit) && (!((cunit == _arg1))))){ cunit.sprite.showSelection(0, false); }; cunit = _arg1; isenemy = _arg2; updateInfo(); if (_arg1){ info.visible = true; info.destroyButton.visible = !(isenemy); info.destroyButton.removeEventListener(MouseEvent.CLICK, ondestroyunit); info.destroyButton.addEventListener(MouseEvent.CLICK, ondestroyunit); } else { info.visible = false; }; } public function onrestart(_arg1:MouseEvent):void{ engine.stopall(); startmenu.visible = true; about.visible = false; showInfo(null, false); } public function createMenus():void{ announce = new Announce(engine); engine.mainstage.addChildAt(announce, 2); about = new About(); engine.mainstage.addChildAt(about, 2); about.x = 180; about.y = 70; about.closebutton.addEventListener(MouseEvent.CLICK, onabout); startmenu = new StartMenu(engine); engine.mainstage.addChild(startmenu); startmenu.x = 180; startmenu.y = 70; startmenu.easy.addEventListener(MouseEvent.CLICK, oneasy); startmenu.normal.addEventListener(MouseEvent.CLICK, onnormal); startmenu.hard.addEventListener(MouseEvent.CLICK, onhard); } public function updateResources():void{ money.text = engine.gold.toString(); score.text = ("Score: " + engine.score); engine.checkCursor(engine.mainstage.mouseX, engine.mainstage.mouseY); updateBuildButtons(); } private function oneasy(_arg1:MouseEvent):void{ engine.difficulty = Consts.EASY; engine.restart(); } public function reset():void{ stat.reset(); if (announce){ engine.mainstage.removeChild(announce); }; announce = new Announce(engine); engine.mainstage.addChildAt(announce, 2); } public function onpause(_arg1:MouseEvent):void{ if (startmenu.visible){ return; }; if (pausebutton.txt.text == "Pause"){ engine.skipclick = true; engine.pause(true); pausebutton.txt.text = "Resume"; } else { engine.skipclick = true; engine.pause(false); pausebutton.txt.text = "Pause"; }; } public function createInfoPanel():void{ info = new TurretInfoPanel(engine, true); info.visible = false; info.y = (76 + buttons.height); backgr.addChild(info); } private function onhard(_arg1:MouseEvent):void{ engine.difficulty = Consts.HARD; engine.restart(); } private function onnormal(_arg1:MouseEvent):void{ engine.difficulty = Consts.NORMAL; engine.restart(); } public function createResources():void{ var _local1:Shape; var _local2:AnimatedBitmap; var _local3:int; _local1 = new Shape(); _local1.graphics.lineStyle(1, borderColor); _local1.graphics.beginFill(0); _local1.graphics.drawRect(0, 0, backgr.width, 35); _local1.graphics.endFill(); _local1.alpha = 0.7; _local2 = engine.sloader.getMenuItem(UnitTypes.mimoney); _local3 = 10; money = createTextField(15943950, 11); money.y = _local3; money.x = (_local2.width + 5); backgr.addChild(_local1); backgr.addChild(money); _local2.y = _local3; _local2.x = 5; backgr.addChild(_local2); score = createTextField(15943950, 11); score.x = 70; score.y = _local3; backgr.addChild(score); updateResources(); } public function selectBuildButton(_arg1:String):void{ var _local2:ButtonSprite; _local2 = buildbuttons.get(_arg1); if (_local2){ _local2.select(true); tinfo.showAbout(engine.utypes.params(_local2.suite), false); }; } private function createBuildButton(_arg1:String, _arg2:Sprite):ButtonSprite{ var _local3:BitmapData; var _local4:AnimatedBitmap; var _local5:ButtonSprite; _local3 = engine.sloader.buttons[_arg1].content.bitmapData; _local4 = new AnimatedBitmap(_local3, _local3.width, _local3.height); _local5 = new ButtonSprite(_arg1, _local4); _local5.addEventListener(MouseEvent.CLICK, onclick); _local5.addEventListener(MouseEvent.MOUSE_OVER, onoverbutton); _local5.addEventListener(MouseEvent.MOUSE_OUT, onoutbutton); _arg2.addChild(_local5); buildbuttons.add(_arg1, _local5); return (_local5); } public function onvolume(_arg1:MouseEvent):void{ if (volume >= 1){ volume = 0; } else { volume = (volume + 0.25); }; volbutton.txt.text = (("vol: " + (volume * 100)) + "%"); } public function updateBuildButtons():void{ var _local1:ButtonSprite; for each (_local1 in buildbuttons.values) { if (engine.utypes.params(_local1.suite).cost > engine.gold){ _local1.alpha = 0.3; } else { _local1.alpha = 1; }; }; } public function ondestroyunit(_arg1:MouseEvent):void{ cunit.health = 0; engine.destroyUnit(cunit); showInfo(null, false); } public function gameover():void{ stat.iscore = engine.score; stat.update(); engine.pause(true); stat.visible = true; } public function createMainMenu():void{ pausebutton = new TextButton("Pause", 50, 20, 252); pausebutton.y = 40; pausebutton.x = 3; pausebutton.addEventListener(MouseEvent.CLICK, onpause); backgr.addChild(pausebutton); restartbutton = new TextButton("Restart", 50, 20, 252); restartbutton.y = 40; restartbutton.x = 57; restartbutton.addEventListener(MouseEvent.CLICK, onrestart); backgr.addChild(restartbutton); aboutbutton = new TextButton("About", 45, 20, 252); aboutbutton.y = 40; aboutbutton.x = 111; aboutbutton.addEventListener(MouseEvent.CLICK, onabout); backgr.addChild(aboutbutton); volbutton = new TextButton("vol: 100%", 65, 20, 252); volbutton.y = 40; volbutton.x = (Consts.gmapwidth - 65); volbutton.addEventListener(MouseEvent.CLICK, onvolume); engine.mainstage.addChild(volbutton); } public function createButtons():Sprite{ var buttons:Sprite; var buttonsback:Shape; var button:Sprite; var offset:uint; var boffset:uint; buttons = new Sprite(); buttonsback = new Shape(); var _local2 = buttonsback; with (_local2) { graphics.lineStyle(1, 3957386); graphics.beginFill(10993365); graphics.drawRoundRect(1, 0, (backgr.width - 2), 250, 20, 20); graphics.endFill(); }; buttons.addChild(buttonsback); buttonsback.alpha = 0.3; buttons.y = 65; button = null; offset = 2; boffset = 10; button = createBuildButton(UnitTypes.lightcannon, buttons); button.y = (button.y + boffset); button.x = (button.x + boffset); button = createBuildButton(UnitTypes.heavycannon, buttons); button.x = ((button.width + offset) + boffset); button.y = (button.y + boffset); button = createBuildButton(UnitTypes.tankdestroyer, buttons); button.x = (((button.width + offset) * 2) + boffset); button.y = (button.y + boffset); button = createBuildButton(UnitTypes.missileturret, buttons); button.x = boffset; button.y = ((button.height + offset) + boffset); button = createBuildButton(UnitTypes.bdg, buttons); button.x = ((button.width + offset) + boffset); button.y = ((button.height + offset) + boffset); button = createBuildButton(UnitTypes.mine, buttons); button.x = (((button.width + offset) * 2) + boffset); button.y = ((button.height + offset) + boffset); tinfo = new TurretInfoPanel(engine, false); buttons.addChild(tinfo); tinfo.y = ((((button.height * 2) + offset) + boffset) + 5); backgr.addChild(buttons); return (buttons); } 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 textrange(_arg1:int):String{ if (_arg1 < 3){ return ("Very Small"); }; if (_arg1 < 6){ return ("Small"); }; if (_arg1 < 8){ return ("Average"); }; return ("Big"); } } }//package fai import flash.display.*; import flash.events.*; import flash.text.*; class Statistics extends Sprite { public var ilost:int;// = 0 public var restart:TextButton;// = null public var ikilled:int;// = 0 public var lost:TextField;// = null public var spent:TextField;// = null public var killed:TextField;// = null public var built:TextField;// = null public var score:TextField;// = null public var ispent:int;// = 0 public var ibuilt:int;// = 0 public var iscore:int;// = 0 public var caption:TextField;// = null private var back:Shape;// = null private static const xoffset:int = 10; private function Statistics():void{ var tf:TextFormat; var statstat:TextField; back = null; caption = null; score = null; killed = null; lost = null; spent = null; built = null; iscore = 0; ikilled = 0; ilost = 0; ispent = 0; ibuilt = 0; restart = null; super(); back = new Shape(); var _local2 = back; with (_local2) { graphics.beginFill(0); graphics.drawRoundRect(0, 0, 220, 300, 15, 15); graphics.endFill(); alpha = 0.7; }; addChild(back); caption = GameMenu.createTextField(15943950, 20); caption.x = 40; tf = caption.defaultTextFormat; tf.underline = true; caption.defaultTextFormat = tf; caption.text = "Game Over!"; addChild(caption); statstat = null; statstat = GameMenu.createTextField(0xFFFFFF, 12); tf = statstat.defaultTextFormat; tf.bold = false; tf.italic = true; statstat.defaultTextFormat = tf; statstat.text = "Game statistics:"; statstat.x = xoffset; statstat.y = (caption.height + 10); addChild(statstat); score = createStatElement(15825434, 15); score.y = 70; killed = createStatElement(15825434, 13); killed.y = 100; lost = createStatElement(15825434, 13); lost.y = 130; spent = createStatElement(15825434, 13); spent.y = 160; built = createStatElement(15825434, 13); built.y = 190; restart = new TextButton("Restart Game", 100, 20, 0xFFFFFF, 12); restart.x = xoffset; restart.y = 230; addChild(restart); update(); } public function reset():void{ visible = false; iscore = (ikilled = (ilost = (ispent = (ibuilt = 0)))); update(); } private function createStatElement(_arg1:int, _arg2:int):TextField{ var _local3:TextField; _local3 = GameMenu.createTextField(_arg1, _arg2); _local3.x = xoffset; addChild(_local3); return (_local3); } public function update():void{ score.text = ("Score: " + iscore.toString()); killed.text = ("Enemies Killed: " + ikilled.toString()); lost.text = ("Units Lost: " + ilost.toString()); spent.text = ("Money Spent: " + ispent.toString()); built.text = ("Turrets Built: " + ibuilt.toString()); } } class About extends Sprite { public var closebutton:Sprite;// = null public var mentart:TextField;// = null public 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, 220, 200, 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 = ((220 - cbsize) - 1); closebutton.y = 1; addChild(closebutton); caption = GameMenu.createTextField(15943950, 20); caption.x = 70; tf = caption.defaultTextFormat; tf.underline = true; caption.defaultTextFormat = tf; caption.text = "Storm"; addChild(caption); version = GameMenu.createTextField(0xFFFFFF, 12); tf = version.defaultTextFormat; tf.bold = false; tf.italic = true; version.defaultTextFormat = tf; version.text = "version 1.0"; version.x = (xoffset + 60); version.y = (caption.height + 10); addChild(version); author = createStatElement(15825434, 12); author.y = 70; author.text = "Author Anton Fedoruk\nCopyright (c) 2007.\nAll Rights Reserved."; mentart = createStatElement(15943950, 12); mentart.y = 130; tf = mentart.defaultTextFormat; tf.url = "http://www.warspark.com"; tf.underline = true; tf.italic = true; mentart.defaultTextFormat = tf; mentart.text = "www.WarSpark.com"; } private function createStatElement(_arg1:int, _arg2:int):TextField{ var _local3:TextField; _local3 = GameMenu.createTextField(_arg1, _arg2); _local3.x = xoffset; addChild(_local3); return (_local3); } } class Announce extends Sprite { public var nextattack:TextField;// = null public var engine:Engine;// = null public var sprites:Map; private var sendnextbutton:TextButton;// = null public var wavetxt:TextField;// = null private function Announce(_arg1:Engine):void{ var _local2:Shape; var _local3:int; var _local4:int; wavetxt = null; nextattack = null; sprites = new Map(); sendnextbutton = null; engine = null; super(); engine = _arg1; _local2 = new Shape(); _local2.graphics.lineStyle(0, 0); _local2.graphics.beginFill(0); _local2.graphics.drawRect(0, 0, Consts.gmapwidth, 35); _local2.graphics.endFill(); _local2.alpha = 0.6; addChild(_local2); _local3 = 0; _local4 = 0; wavetxt = GameMenu.createTextField(0xC3C3C3, 12); wavetxt.text = "Echelon:"; wavetxt.y = 1; _local3 = wavetxt.width; addChild(wavetxt); wavetxt = GameMenu.createTextField(15943950, 12); wavetxt.y = 1; wavetxt.x = (_local3 + 3); wavetxt.text = "1/25"; _local3 = wavetxt.height; addChild(wavetxt); nextattack = GameMenu.createTextField(0xC3C3C3, 10); nextattack.text = "next attack:"; nextattack.y = _local3; _local4 = nextattack.width; addChild(nextattack); nextattack = GameMenu.createTextField(0xFF0000, 10); nextattack.text = "00 secs"; nextattack.y = _local3; nextattack.x = _local4; addChild(nextattack); sendnextbutton = new TextButton("Send Next", 63, 19, 0xC3C3C3); sendnextbutton.x = ((Consts.gmapwidth - sendnextbutton.width) - 3); sendnextbutton.y = 7; addChild(sendnextbutton); sendnextbutton.addEventListener(MouseEvent.CLICK, sendnext); } public function subtract(_arg1:String):void{ var _local2:AnnounceSprite; _local2 = sprites.get(_arg1); if (_local2){ _local2.dec(); }; } public function sendnext(_arg1:MouseEvent):void{ if (engine.menu.startmenu.visible){ return; }; engine.scenario.pause = 0; setNextTime(0); } public function setWave(_arg1:int):void{ wavetxt.text = (_arg1.toString() + "/25"); } public function add(_arg1:String, _arg2:AnimatedBitmap, _arg3:int):void{ var _local4:AnnounceSprite; _local4 = sprites.get(_arg1); if (_local4){ _local4.alpha = 1; _local4.setCount((_arg3 + _local4.icount)); } else { _local4 = new AnnounceSprite(_arg1, _arg2, _arg3); _local4.x = ((sprites.size() * 45) + 130); addChild(_local4); sprites.add(_arg1, _local4); }; } public function setNextTime(_arg1:int):void{ nextattack.text = (_arg1 + " secs"); } } class AnnounceSprite extends Sprite { public var tcount:TextField;// = null private var bitmap:AnimatedBitmap;// = null public var icount:int;// = 0 public var suite:String;// = null private function AnnounceSprite(_arg1:String, _arg2:AnimatedBitmap, _arg3:int):void{ suite = null; bitmap = null; tcount = null; icount = 0; super(); tcount = GameMenu.createTextField(0xC3C3C3, 10); tcount.text = "X"; tcount.y = 20; tcount.x = _arg2.width; suite = _arg1; bitmap = _arg2; addChild(_arg2); setCount(_arg3); addChild(tcount); } public function dec():void{ icount--; setCount(icount); if (!icount){ alpha = 0.3; }; } public function setCount(_arg1:int):void{ icount = _arg1; tcount.text = ("x" + _arg1.toString()); if (icount == 0){ alpha = 0.3; }; } } 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; } } class StartMenu extends Sprite { public var easy:TextButton;// = null public var cdl:TextField;// = null private var engine:Engine;// = null private var caption:TextField;// = null public var hard:TextButton;// = null private var back:Shape;// = null private var version:TextField;// = null public var normal:TextButton;// = null private static const xoffset:int = 10; private function StartMenu(_arg1:Engine):void{ var tf:TextFormat; var e = _arg1; back = null; caption = null; version = null; cdl = null; easy = null; normal = null; hard = null; engine = null; super(); engine = e; back = new Shape(); var _local3 = back; with (_local3) { graphics.beginFill(0); graphics.drawRoundRect(0, 0, 220, 200, 15, 15); graphics.endFill(); alpha = 0.7; }; addChild(back); caption = GameMenu.createTextField(15943950, 20); caption.x = 70; tf = caption.defaultTextFormat; tf.underline = true; caption.defaultTextFormat = tf; caption.text = "Storm"; addChild(caption); version = GameMenu.createTextField(0xFFFFFF, 12); tf = version.defaultTextFormat; tf.bold = false; tf.italic = true; version.defaultTextFormat = tf; version.text = "Version 1.0"; version.x = (xoffset + 60); version.y = caption.height; addChild(version); cdl = createStatElement(0xFFFFFF, 10); cdl.y = 65; cdl.x = 35; cdl.text = "Choose difficulty level:"; easy = new TextButton("Easy", 70, 20, 0xFFFFFF, 12); addChild(easy); easy.x = (xoffset * 7); easy.txt.x = 17; easy.y = 100; normal = new TextButton("Normal", 70, 20, 0xFFFFFF, 12); addChild(normal); normal.x = (xoffset * 7); normal.txt.x = 7; normal.y = 130; hard = new TextButton("Hard", 70, 20, 0xFFFFFF, 12); addChild(hard); hard.x = (xoffset * 7); hard.txt.x = 15; hard.y = 160; } private function createStatElement(_arg1:int, _arg2:int):TextField{ var _local3:TextField; _local3 = GameMenu.createTextField(_arg1, _arg2); _local3.x = xoffset; addChild(_local3); return (_local3); } } class TurretInfoPanel extends Sprite { public var armor:TextField;// = null public var range:TextField;// = null public var title:TextField;// = null public var health:TextField;// = null public var damage:TextField;// = null public var desc:TextField;// = null public var destroyButton:TextButton;// = null public var cost:TextField;// = null private function TurretInfoPanel(_arg1:Engine, _arg2:Boolean):void{ var bitmap:AnimatedBitmap; var xrow1:int; var xrow2:int; var descback:Shape; var e = _arg1; var destroy = _arg2; title = null; health = null; armor = null; range = null; damage = null; cost = null; desc = null; destroyButton = null; super(); title = GameMenu.createTextField(3627027, 12); health = GameMenu.createTextField(0); armor = GameMenu.createTextField(0); range = GameMenu.createTextField(0); desc = GameMenu.createTextField(0, 9); damage = GameMenu.createTextField(0); cost = GameMenu.createTextField(0); bitmap = null; bitmap = e.sloader.getMenuItem(UnitTypes.mimoney); addChild(bitmap); xrow1 = 25; xrow2 = 90; title.x = xrow1; cost.y = 30; cost.x = (xrow1 + bitmap.width); bitmap.y = 30; bitmap.x = xrow1; bitmap = e.sloader.getMenuItem(UnitTypes.miheart); addChild(bitmap); bitmap.x = xrow2; bitmap.y = 30; health.y = 30; health.x = (xrow2 + bitmap.width); bitmap = e.sloader.getMenuItem(UnitTypes.miattack); addChild(bitmap); bitmap.x = xrow1; bitmap.y = 50; damage.x = (xrow1 + bitmap.width); damage.y = 50; bitmap = e.sloader.getMenuItem(UnitTypes.miarmor); addChild(bitmap); bitmap.x = xrow2; bitmap.y = 50; armor.y = 50; armor.x = (xrow2 + bitmap.width); bitmap = e.sloader.getMenuItem(UnitTypes.mirange); addChild(bitmap); bitmap.x = xrow1; bitmap.y = 70; range.y = 70; range.x = (xrow1 + bitmap.width); desc.y = 95; desc.x = xrow1; descback = new Shape(); var _local4 = descback; with (_local4) { graphics.beginFill(GameMenu.fillColor); graphics.drawRect(0, 0, 130, 40); graphics.endFill(); alpha = 0.5; x = xrow1; y = 95; }; addChild(descback); if (destroy){ destroyButton = new TextButton("Destroy Unit", 80, 20, 0xFFFFFF); destroyButton.y = 140; destroyButton.x = xrow1; addChild(destroyButton); }; addChild(title); addChild(health); addChild(armor); addChild(range); addChild(damage); addChild(cost); addChild(desc); visible = false; } public function showAbout(_arg1:Unit, _arg2:Boolean):void{ var _local3:int; var _local4:TextFormat; visible = !((_arg1 == null)); if (_arg1){ _local3 = 3627027; if (_arg2){ _local3 = 0xFF0000; }; _local4 = title.defaultTextFormat; _local4.color = _local3; title.defaultTextFormat = _local4; title.text = _arg1.type; health.text = _arg1.health.toString(); armor.text = _arg1.armor.toString(); range.text = GameMenu.textrange(_arg1.eyerange); desc.text = _arg1.desc; damage.text = _arg1.damage.toString(); cost.text = _arg1.cost.toString(); }; } } class TextButton extends Sprite { public var txt:TextField;// = null public var back:Shape;// = null private function TextButton(_arg1:String, _arg2:int, _arg3:int, _arg4:int, _arg5:int=10):void{ txt = null; back = null; super(); back = new Shape(); back.graphics.lineStyle(2, GameMenu.borderColor); back.graphics.beginFill(GameMenu.fillColor); back.graphics.drawRoundRect(0, 0, _arg2, _arg3, 5, 5); back.graphics.endFill(); back.alpha = 0.5; addChild(back); txt = GameMenu.createTextField(_arg4, _arg5); txt.text = _arg1; txt.y = 1; addChild(txt); } }
Section 10
//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 11
//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 12
//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 < _arg2) { matrix.push(new Array(_arg1)); _local4 = 0; while (_local4 < _arg1) { 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 13
//MineGoal (fai.MineGoal) package fai { import flash.events.*; import flash.utils.*; public class MineGoal extends Goal { private var engine:Engine;// = null private var skipnext:Boolean;// = false private var mtimer:Timer;// = null public function MineGoal(_arg1:Engine, _arg2:Unit):void{ engine = null; mtimer = null; skipnext = false; super(); engine = _arg1; owner = _arg2; mtimer = new Timer(Consts.MINE_PERIOD, 0); mtimer.addEventListener("timer", timerHandler); mtimer.start(); } private function timerHandler(_arg1:TimerEvent):void{ if (!engine.paused){ if (skipnext){ skipnext = false; } else { engine.gold = (engine.gold + Consts.MINE_PORTION); engine.menu.updateResources(); }; } else { skipnext = true; }; } public function advance():void{ } override public function deactivate():void{ super.deactivate(); if (mtimer){ mtimer.stop(); mtimer.removeEventListener("timer", timerHandler); mtimer = null; }; } } }//package fai
Section 14
//MouseCursor (fai.MouseCursor) package fai { import flash.display.*; import flash.text.*; public class MouseCursor extends Sprite { private var goodshape:Shape;// = null public var bitmap:AnimatedBitmap;// = null private var msg:TextField;// = null private var badshape:Shape;// = null public var cost:uint;// = 0 public var suite:String;// = null public function MouseCursor(_arg1:String, _arg2:AnimatedBitmap, _arg3:uint, _arg4:uint):void{ bitmap = null; suite = null; badshape = null; goodshape = null; cost = 0; msg = null; super(); suite = _arg1; cost = _arg4; bitmap = new AnimatedBitmap(_arg2.curbuffer, _arg2.width, _arg2.height); addChild(bitmap); bitmap.x = (bitmap.x - (_arg2.width / 2)); bitmap.y = (bitmap.y - (_arg2.height / 2)); if (!_arg3){ _arg3 = 1; }; goodshape = new Shape(); drawEyeRange(0xEAEAEA, goodshape, _arg3); addChild(goodshape); badshape = new Shape(); badshape.visible = false; drawEyeRange(0xFF0000, badshape, _arg3); addChild(badshape); msg = GameMenu.createTextField(0xD8D8D8, 10); msg.text = "Select place for turret\npress <Space> to cancel building"; msg.y = (msg.height * 2); msg.x = (msg.x - (msg.width / 2)); addChild(msg); } public function isGood():Boolean{ return (goodshape.visible); } 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; } public function setGood(_arg1:Boolean):void{ goodshape.visible = _arg1; badshape.visible = !(_arg1); } public function remove():void{ removeChild(bitmap); removeChild(goodshape); removeChild(badshape); } } }//package fai
Section 15
//MoveGoal (fai.MoveGoal) package fai { public class MoveGoal extends Goal { public var engine:Engine;// = null public var pathindex:uint;// = 0 public var target:Position;// = null public var world:MapMatrix;// = null public var path:Array; private var pause:uint;// = 0 private var astar:Astar;// = null public static const PAUSE:uint = 25; public function MoveGoal(_arg1:Unit, _arg2:MapMatrix):void{ target = null; path = new Array(); pathindex = 0; world = null; pause = 0; astar = null; engine = null; super(); owner = _arg1; world = _arg2; astar = new Astar(_arg2); astar.tid = owner.mapid; } public function advance():void{ var _local1:uint; if (Unit.MOVING == owner.cstate){ owner.move(); } else { if (Unit.IDLE == owner.cstate){ if (target.isequal(owner.pos)){ deactivate(); path.length = 0; owner = null; } else { if (pause > 0){ pause--; if (!pause){ if (((!(path.length)) || (world.getpos(path[pathindex])))){ path.length = 0; astar.checkxy = astar.checkwallid; astar.search(owner.pos, target, path); astar.checkxy = astar.checkwall; pathindex = 0; if (!path.length){ pause = PAUSE; }; }; }; } else { if (path.length > 0){ _local1 = world.getpos(path[pathindex]); if (_local1 != 0){ if (Consts.Wall == _local1){ setTarget(target); } else { pause = PAUSE; return; }; } else { owner.startmove(path[pathindex]); world.setpos(path[pathindex], owner.mapid); pathindex++; owner.move(); }; } else { pause = PAUSE; }; }; }; }; }; } public function setTarget(_arg1:Position):void{ target = _arg1; path.length = 0; astar.search(owner.pos, target, path); pathindex = 0; if (!path.length){ pause = PAUSE; }; } override public function deactivate():void{ super.deactivate(); if ((((pathindex > 0)) && (!(owner.pos.isequal(path[(pathindex - 1)]))))){ world.setpos(path[(pathindex - 1)], 0); }; } } }//package fai
Section 16
//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 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 17
//Scenario (fai.Scenario) package fai { import flash.events.*; import flash.utils.*; public class Scenario { public var engine:Engine;// = null public var gametarget:Unit;// = null public var started:Boolean;// = false private var uq:Array; public var wavetimer:Timer;// = null private var units:Array; public var pause:int;// = 0 public var wave:int;// = 0 private var victorytimer:Timer;// = null private var wavepauses:Array; public static const TIMER_PERIOD:int = 1000; public function Scenario(_arg1:Engine):void{ engine = null; wave = 0; started = false; uq = new Array(); wavetimer = null; victorytimer = null; pause = 0; wavepauses = [30, 30, 45, 60, 60, 60, 60, 60, 60, 60, 90, 90, 90, 90, 90, 90, 90, 120, 120, 120, 120, 120, 120, 120]; gametarget = null; units = new Array(); super(); engine = _arg1; engine.scenario = this; } public function createunit(_arg1:String, _arg2:int, _arg3:int):void{ var _local4:Unit; _local4 = engine.utypes.createUnit(_arg1); _local4.pos.set(_arg2, _arg3); engine.addUnit(_local4); engine.move(_local4, gametarget.pos); engine.attack(_local4, engine.turrets); } private function timerHandler(_arg1:TimerEvent):void{ var _local2:int; var _local3:String; var _local4:int; var _local5:int; if (pause > 0){ pause--; engine.menu.announce.setNextTime(pause); return; }; engine.menu.announce.nextattack.text = "Now"; if (!units.length){ nextWave(); }; if (engine.units.size() < Consts.UnitWaveCount){ _local2 = (Consts.UnitWaveCount - engine.units.size()); _local3 = null; _local4 = 0; while (_local4 < Math.abs(Consts.ystart)) { _local5 = 0; while (_local5 < Consts.mapwidth) { if (engine.world.getxy(_local5, _local4) == 0){ _local3 = units.shift(); createunit(_local3, _local5, _local4); _local2--; if (!units.length){ if (wave < Consts.WAVE_COUNT){ pause = wavepauses[(wave - 1)]; } else { wavetimer.stop(); wavetimer.removeEventListener("timer", timerHandler); victorytimer = new Timer(1000, 0); victorytimer.addEventListener("timer", vicHandler); victorytimer.start(); }; return; }; if (!_local2){ return; }; }; _local5++; }; _local4++; }; }; } public function nextWave():void{ var _local1:UnitQuotient; var _local2:int; var _local3:AnimatedBitmap; var _local4:int; wave++; units.length = 0; engine.menu.announce.setWave(wave); engine.menu.updateResources(); for each (_local1 in uq) { _local2 = 0; switch (_local1.utype){ case UnitTypes.missiletank: _local2 = ((_local1.q * wave) * (wave / 10)); break; case UnitTypes.amphibiantank: _local2 = ((_local1.q * wave) * (wave / 10)); break; case UnitTypes.leopard: _local2 = ((_local1.q * wave) * (wave / 5)); break; case UnitTypes.tiger: _local2 = ((_local1.q * wave) * (wave / 5)); break; default: _local2 = (_local1.q * wave); break; }; _local3 = new AnimatedBitmap(engine.sloader.getBody(_local1.utype), engine.utypes.params(_local1.utype).spritewidth, engine.sloader.getBody(_local1.utype).height); engine.menu.announce.add(_local1.utype, _local3, _local2); _local4 = 0; while (_local4 < _local2) { units.push(_local1.utype); _local4++; }; }; } public function stop():void{ if (wavetimer){ wavetimer.stop(); wavetimer.removeEventListener("timer", timerHandler); }; if (victorytimer){ victorytimer.stop(); victorytimer.removeEventListener("timer", vicHandler); }; gametarget = null; uq.length = 0; units.length = 0; } private function vicHandler(_arg1:TimerEvent):void{ if (engine.units.size() == 0){ engine.menu.victory(); }; } public function filluq():void{ uq.push(new UnitQuotient(UnitTypes.coyote, 3)); uq.push(new UnitQuotient(UnitTypes.m13tank, 1)); uq.push(new UnitQuotient(UnitTypes.battleship, 1)); uq.push(new UnitQuotient(UnitTypes.missiletank, 0.3)); uq.push(new UnitQuotient(UnitTypes.amphibiantank, 0.2)); uq.push(new UnitQuotient(UnitTypes.leopard, 0.1)); uq.push(new UnitQuotient(UnitTypes.tiger, 0.08)); } public function start():void{ gametarget = engine.utypes.createUnit(UnitTypes.cc); gametarget.pos.set((Consts.mapwidth / 2), ((Consts.mapheight + Math.abs(Consts.ystart)) - 1)); engine.addUnit(gametarget); engine.goals.push(new MineGoal(engine, gametarget)); started = true; filluq(); wavetimer = new Timer(TIMER_PERIOD, 0); wavetimer.addEventListener("timer", timerHandler); wavetimer.start(); timerHandler(null); } } }//package fai class UnitQuotient { public var q:Number; public var utype:String; private function UnitQuotient(_arg1:String, _arg2:Number):void{ utype = _arg1; q = _arg2; } }
Section 18
//SmartLoader (fai.SmartLoader) package fai { import flash.display.*; import flash.events.*; import flash.media.*; import flash.utils.*; import flash.system.*; import flash.net.*; public class SmartLoader { public var buttons:Dictionary; public var sounds:Dictionary; public var loaded:Boolean;// = false public var imagenames:Array; private var loadendHandler:Function;// = null public var backgrnd:Array; public var peacefulnames:Array; public var wall:Array; private var loadprocessHandler:Function;// = null 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/"; public function SmartLoader(){ suites = new Dictionary(); buttons = new Dictionary(); sounds = new Dictionary(); mimages = new Dictionary(); loaded = false; backgrnd = new Array(); wall = new Array(); imagenames = ["body.png", "attack.png", "death.png", "bullet.png", "be.png"]; peacefulnames = ["body.png", "death.png"]; loadcount = 0; startcount = 0; utypes = null; loadendHandler = null; loadprocessHandler = null; super(); } public function getWall():AnimatedBitmap{ return (new AnimatedBitmap(wall[0].content.bitmapData, wall[0].content.bitmapData.width, wall[0].content.bitmapData.height)); } private function loadCompleteHandler(_arg1:Event):void{ loadcount--; if (!loadcount){ loadprocessHandler(100); loaded = true; loadendHandler(); } else { loadprocessHandler((100 - ((loadcount * 100) / startcount))); }; } public function getBody(_arg1:String):BitmapData{ var _local2:Array; _local2 = suites[_arg1]; return (_local2[0].content.bitmapData); } public function addMenuImage(_arg1:String):void{ mimages[_arg1] = new Loader(); } public function addSuite(_arg1:String):void{ suites[_arg1] = new Array(); } public function load(_arg1:Function, _arg2:Function):void{ var _local3:LoaderContext; var _local4:String; var _local5:String; var _local6:String; var _local7:String; var _local8:String; var _local9:Loader; var _local10:String; var _local11:Loader; var _local12:Loader; var _local13:Loader; var _local14:Sound; loadendHandler = _arg2; loadprocessHandler = _arg1; _local3 = null; for (_local4 in suites) { if (utypes.params(_local4).peaceful){ for each (_local8 in peacefulnames) { _local3 = new LoaderContext(); _local3.checkPolicyFile = true; _local9 = new Loader(); _local9.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler); _local9.load(new URLRequest(((((host + "sprites/") + _local4) + "/") + _local8)), _local3); suites[_local4].push(_local9); loadcount++; }; } else { for each (_local10 in imagenames) { _local3 = new LoaderContext(); _local3.checkPolicyFile = true; _local11 = new Loader(); _local11.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler); _local11.load(new URLRequest(((((host + "sprites/") + _local4) + "/") + _local10)), _local3); suites[_local4].push(_local11); loadcount++; }; }; }; for (_local5 in buttons) { _local3 = new LoaderContext(); _local3.checkPolicyFile = true; _local12 = buttons[_local5]; _local12.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler); _local12.load(new URLRequest((((host + "sprites/") + _local5) + "/button.png")), _local3); loadcount++; }; for (_local6 in mimages) { _local3 = new LoaderContext(); _local3.checkPolicyFile = true; _local13 = mimages[_local6]; _local13.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler); _local13.load(new URLRequest(((host + "menu/") + _local6)), _local3); loadcount++; }; for (_local7 in sounds) { _local14 = sounds[_local7]; _local14.addEventListener(Event.COMPLETE, loadCompleteHandler); _local14.load(new URLRequest(((host + "sounds/") + _local7))); loadcount++; }; _local3 = new LoaderContext(); _local3.checkPolicyFile = true; backgrnd.push(new Loader()); backgrnd[0].contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler); backgrnd[0].load(new URLRequest((host + "map.jpg")), _local3); loadcount++; _local3 = new LoaderContext(); _local3.checkPolicyFile = true; wall.push(new Loader()); wall[0].contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler); wall[0].load(new URLRequest((host + "sprites/Wall/body.png")), _local3); loadcount++; startcount = loadcount; } public function getSound(_arg1:String):Sound{ return (sounds[_arg1]); } public function getBackground():AnimatedBitmap{ return (new AnimatedBitmap(backgrnd[0].content.bitmapData, 700, 500)); } public function dressPeacefulUnit(_arg1:Unit, _arg2:String, _arg3:Engine):void{ var _local4:Array; _local4 = suites[_arg2]; _arg1.sprite.setAppearence(_local4[0].content.bitmapData, null, _local4[1].content.bitmapData, null, null, _arg1.spritewidth); _arg3.mainstage.addChildAt(_arg1.sprite, 2); _arg1.attacksound = Sound(getSound(UnitTypes.shotsound)); } public function addSound(_arg1:String):void{ sounds[_arg1] = new Sound(); } public function addButton(_arg1:String):void{ buttons[_arg1] = new Loader(); } public function getMenuItem(_arg1:String):AnimatedBitmap{ return (new AnimatedBitmap(mimages[_arg1].content.bitmapData, 16, 16)); } public function dressUnit(_arg1:Unit, _arg2:String, _arg3:Engine):void{ var _local4:Array; _local4 = suites[_arg2]; _arg1.sprite.setAppearence(_local4[0].content.bitmapData, _local4[1].content.bitmapData, _local4[2].content.bitmapData, _local4[3].content.bitmapData, _local4[4].content.bitmapData, _arg1.spritewidth); _arg1.attacksound = Sound(getSound(UnitTypes.shotsound)); _arg3.mainstage.addChildAt(_arg1.sprite, 2); } } }//package fai
Section 19
//Unit (fai.Unit) package fai { import flash.events.*; import flash.media.*; public class Unit { public var bulletspeed:uint;// = 25 private var attackpos:Position;// = null public var cstate:uint;// = 0 public var desc:String;// = "Assaulter. Defend Command Center against this unit." public var spritewidth:int;// = 24 private var rotstep:int;// = 10 private var destangel:int;// = 0 private var movetarget:Position;// = null public var eyerange:uint;// = 1 public var deathsteps:uint;// = 15 public var type:String;// = null public var deathcost:uint;// = 0 public var sprite:UnitSprite; public var attacksound:Sound;// = null public var engine:Engine;// = null private var xstep:int;// = 0 private var ystep:int;// = 0 public var cost:uint;// = 20 public var armor:uint;// = 1 public var peaceful:Boolean;// = false private var step:uint;// = 0 public var pos:Position; private var attacktarget:Unit;// = null public var attackssteps:uint;// = 3 private var rotating:Boolean;// = false public var health:int;// = 50 public var damage:uint;// = 5 public var movesteps:uint;// = 15 public var mapid:uint;// = 0 public var rechargetime:uint;// = 10 public static const IDLE:uint = 0; public static const DEATH:uint = 3; public static const MOVING:uint = 2; public static const ATTACK:uint = 1; public function Unit(_arg1:Engine, _arg2:uint, _arg3:String):void{ rotstep = 10; movesteps = 15; attackssteps = 3; deathsteps = 15; type = null; spritewidth = 24; pos = new Position(); sprite = new UnitSprite(); eyerange = 1; damage = 5; armor = 1; health = 50; cstate = 0; bulletspeed = 25; rechargetime = 10; cost = 20; deathcost = 0; peaceful = false; attacksound = null; desc = "Assaulter. Defend\nCommand Center\nagainst this unit."; movetarget = null; attacktarget = null; attackpos = null; engine = null; mapid = 0; xstep = 0; ystep = 0; step = 0; rotating = false; destangel = 0; super(); engine = _arg1; mapid = _arg2; type = _arg3; sprite.addEventListener(MouseEvent.CLICK, onspriteclick); } public function die():void{ if (!step){ sprite.setDeathSprite(); engine.playSound(attacksound, pos); }; step++; sprite.setFrame(((step * sprite.nframes()) / deathsteps)); if (step >= deathsteps){ reset(); }; } public function onspriteclick(_arg1:MouseEvent):void{ if (((!(engine.ccursor)) && ((health > 0)))){ engine.menu.showInfo(this, (mapid == Consts.unitsId)); engine.skipclick = true; }; } public function startattack(_arg1:Unit):void{ reset(); attacktarget = _arg1; cstate = ATTACK; attackpos = new Position(); attackpos.set(attacktarget.sprite.x, attacktarget.sprite.y); 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){ engine.world.setpos(pos, 0); pos = movetarget; reset(); }; } public function reset():void{ cstate = IDLE; step = (ystep = (xstep = 0)); attacktarget = null; rotating = false; } public function rotate():void{ var _local1:int; if (Math.abs(destangel) < 10){ sprite.body.rotation = (sprite.body.rotation + destangel); destangel = 0; rotating = false; } else { _local1 = ((Math.abs(destangel) > 10)) ? ((destangel > 0)) ? 10 : -10 : destangel; sprite.body.rotation = (sprite.body.rotation + _local1); destangel = (destangel - _local1); }; } public function startmove(_arg1:Position):void{ reset(); movetarget = _arg1; cstate = MOVING; xstep = ((((movetarget.x + Consts.xstart) * Consts.cellsize) - sprite.x) / movesteps); ystep = ((((movetarget.y + Consts.ystart) * Consts.cellsize) - sprite.y) / movesteps); startrotate((((Math.atan2(ystep, xstep) / Math.PI) * 180) - 90)); } public function startdie():void{ reset(); cstate = DEATH; } } }//package fai
Section 20
//UnitSprite (fai.UnitSprite) package fai { import flash.display.*; public class UnitSprite extends Sprite { public var bullet:BitmapData;// = null public var selection:Shape;// = null public var body:Sprite; public var dbuffer:BitmapData;// = null public var sprite:AnimatedBitmap;// = null public var bulletexp:BitmapData;// = null public var abuffer:BitmapData;// = null public var mbuffer:BitmapData;// = null public function UnitSprite(){ body = new Sprite(); selection = null; sprite = null; mbuffer = null; abuffer = null; dbuffer = null; bullet = null; bulletexp = null; super(); visible = false; } public function showSelection(_arg1:uint, _arg2:Boolean):void{ var diameter:*; var rsize:*; var startx:*; var occup:*; var i:*; var hpercent = _arg1; var enable = _arg2; 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 _local4 = selection; with (_local4) { visible = true; diameter = (Math.max(sprite.width, sprite.height) + 5); graphics.clear(); graphics.lineStyle(1, 2244111); graphics.beginFill(4025627); graphics.drawCircle((sprite.width / 2), (sprite.height / 2), (diameter / 2)); graphics.endFill(); rsize = 5; startx = (((-(rsize) * 10) / 2) + (sprite.width / 2)); occup = false; i = 0; while (i < 10) { occup = ((hpercent / (i * 10)) > 1); if (occup){ graphics.beginFill(4025627); }; graphics.drawRect(startx, diameter, rsize, rsize); if (occup){ 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 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 21
//UnitTypes (fai.UnitTypes) package fai { import flash.utils.*; public class UnitTypes { public var engine:Engine;// = null public var sloader:SmartLoader;// = null private var initiated:Boolean;// = false public var units:Dictionary; public static const heavycannon:String = "Heavy Cannon"; public static const sounds:Array = [shotsound]; public static const types:Array = [cc, mine, lightcannon, heavycannon, tankdestroyer, missileturret, bdg, m13tank, coyote, battleship, missiletank, tiger, amphibiantank, leopard]; public static const missiletank:String = "Missile Tank"; public static const wall:String = "Wall"; public static const mine:String = "Mine"; public static const missileturret:String = "Missile Turret"; public static const buttons:Array = [lightcannon, heavycannon, tankdestroyer, missileturret, bdg, mine]; public static const lightcannon:String = "Light Cannon"; public static const leopard:String = "Leopard"; public static const shotsound:String = "shot.mp3"; public static const menuimages:Array = [mimoney, miattack, mirange, miarmor, miheart]; public static const cc:String = "Command Center"; public static const mirange:String = "range.png"; public static const amphibiantank:String = "Amphibian Tank"; public static const mimoney:String = "money.png"; public static const bdg:String = "Big Defensive Gun"; public static const miarmor:String = "shield.png"; public static const miattack:String = "attack.png"; public static const miheart:String = "heart.png"; public static const coyote:String = "Coyote"; public static const battleship:String = "Battleship"; public static const m13tank:String = "M13 Tank"; public static const tankdestroyer:String = "Tank Destroyer"; public static const tiger:String = "Tiger"; public function UnitTypes(_arg1:SmartLoader):void{ var _local2:String; units = new Dictionary(); sloader = null; engine = null; initiated = false; super(); sloader = _arg1; sloader.utypes = this; for each (_local2 in types) { units[_local2] = createUnit(_local2); }; initiated = true; } public function createUnit(_arg1:String):Unit{ var _local2:int; var _local3:Unit; _local2 = 0; if (engine){ switch (engine.difficulty){ case Consts.EASY: _local2 = -1; break; case Consts.NORMAL: _local2 = 0; break; case Consts.HARD: _local2 = 0; break; }; }; _local3 = null; switch (_arg1){ case lightcannon: _local3 = new Unit(engine, Consts.turretsId, _arg1); _local3.health = 80; _local3.damage = 10; _local3.eyerange = 5; _local3.cost = 25; _local3.spritewidth = 24; _local3.desc = "Game pawn. Small \nrange, fire and cost."; _local3.armor = 2; if (initiated){ engine.turrets.add(_local3); }; break; case heavycannon: _local3 = new Unit(engine, Consts.turretsId, _arg1); _local3.health = 100; _local3.damage = 15; _local3.eyerange = 7; _local3.cost = 50; _local3.spritewidth = 24; _local3.armor = 5; _local3.desc = "Good health, range and\narmor. Best for all-round\ndefense."; if (initiated){ engine.turrets.add(_local3); }; break; case tankdestroyer: _local3 = new Unit(engine, Consts.turretsId, _arg1); _local3.health = 150; _local3.damage = 7; _local3.eyerange = 6; _local3.rechargetime = 0; _local3.cost = 100; _local3.armor = 3; _local3.desc = "Best fire speed. Range \nand armor average."; if (initiated){ engine.turrets.add(_local3); }; break; case missileturret: _local3 = new Unit(engine, Consts.turretsId, _arg1); _local3.health = 120; _local3.damage = 25; _local3.eyerange = 9; _local3.cost = 150; _local3.armor = 2; _local3.desc = "Good range and damage,\nbad armor."; if (initiated){ engine.turrets.add(_local3); }; break; case bdg: _local3 = new Unit(engine, Consts.turretsId, _arg1); _local3.health = 250; _local3.damage = 35; _local3.eyerange = 10; _local3.rechargetime = 15; _local3.cost = 250; _local3.armor = 10; _local3.desc = "Best defender. Good\nrange, damage\nand armor."; if (initiated){ engine.turrets.add(_local3); }; break; case mine: _local3 = new Unit(engine, Consts.turretsId, _arg1); _local3.peaceful = true; _local3.spritewidth = 32; _local3.cost = 150; _local3.health = 100; _local3.eyerange = 1; _local3.damage = 0; _local3.armor = 3; _local3.desc = (("Produces money.\n" + Consts.MINE_PORTION) + "$ each 5 seconds."); if (initiated){ engine.turrets.add(_local3); }; break; case cc: _local3 = new Unit(engine, Consts.turretsId, _arg1); _local3.peaceful = true; _local3.spritewidth = 32; _local3.cost = 10000; _local3.health = 400; _local3.eyerange = 0; _local3.damage = 0; _local3.armor = 5; _local3.desc = "Headquarters. This\nbuilding must not be\ndestroyed."; if (initiated){ engine.turrets.add(_local3); }; break; case coyote: _local3 = new Unit(engine, Consts.unitsId, _arg1); _local3.health = 80; _local3.damage = 5; _local3.eyerange = 3; _local3.deathcost = 1; _local3.armor = (1 + _local2); if (initiated){ engine.units.add(_local3); }; break; case m13tank: _local3 = new Unit(engine, Consts.unitsId, _arg1); _local3.health = 100; _local3.damage = 7; _local3.eyerange = 2; _local3.deathcost = 1; _local3.armor = (4 + _local2); if (initiated){ engine.units.add(_local3); }; break; case battleship: _local3 = new Unit(engine, Consts.unitsId, _arg1); _local3.health = 80; _local3.damage = 7; _local3.eyerange = 3; _local3.deathcost = 2; _local3.movesteps = 10; _local3.armor = (2 + _local2); if (initiated){ engine.units.add(_local3); }; break; case missiletank: _local3 = new Unit(engine, Consts.unitsId, _arg1); _local3.health = 120; _local3.damage = 8; _local3.eyerange = 6; _local3.deathcost = 2; _local3.armor = (3 + _local2); if (initiated){ engine.units.add(_local3); }; break; case amphibiantank: _local3 = new Unit(engine, Consts.unitsId, _arg1); _local3.health = 150; _local3.damage = 25; _local3.eyerange = 3; _local3.deathcost = 3; _local3.armor = (6 + _local2); if (initiated){ engine.units.add(_local3); }; break; case leopard: _local3 = new Unit(engine, Consts.unitsId, _arg1); _local3.health = 170; _local3.damage = 30; _local3.eyerange = 4; _local3.deathcost = 4; _local3.armor = (9 + (_local2 * 2)); if (initiated){ engine.units.add(_local3); }; break; case tiger: _local3 = new Unit(engine, Consts.unitsId, _arg1); _local3.health = 220; _local3.damage = 50; _local3.eyerange = 5; _local3.deathcost = 5; _local3.movesteps = 10; _local3.rechargetime = 7; _local3.armor = (12 + (_local2 * 3)); if (initiated){ engine.units.add(_local3); }; break; }; if (initiated){ if (_local3.peaceful){ sloader.dressPeacefulUnit(_local3, _arg1, engine); } else { sloader.dressUnit(_local3, _arg1, engine); }; }; return (_local3); } public function params(_arg1:String):Unit{ return (units[_arg1]); } } }//package fai
Section 22
//MainTimeline (storm_fla.MainTimeline) package storm_fla { import flash.display.*; import fai.*; import flash.events.*; import flash.media.*; import flash.text.*; import flash.utils.*; import flash.geom.*; import flash.system.*; import flash.net.*; import adobe.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.external.*; import flash.filters.*; import flash.printing.*; import flash.ui.*; import flash.xml.*; public dynamic class MainTimeline extends MovieClip { public var utypes:UnitTypes; public var mochifinished:Boolean; public var loading:Sprite; public var checktimer:Timer; public var menu:GameMenu; public var b:String; public var m:String; public var snd:String; public var engine:Engine; public var sloader:SmartLoader; public var loadingText:TextField; public var type:String; public function MainTimeline(){ addFrameScript(0, frame1); } public function mochifin():void{ if (((loading) && (loadingText))){ loading.visible = true; loadingText.visible = true; }; mochifinished = true; } public function loadcomplete():void{ } function frame1(){ sloader = new SmartLoader(); utypes = new UnitTypes(sloader); engine = new Engine(this, sloader, utypes); menu = new GameMenu(engine); mochifinished = false; loading = new Sprite(); loadingText = GameMenu.createTextField(0, 20); addChild(loading); addChild(loadingText); loadingText.x = 340; loadingText.y = 240; for each (type in UnitTypes.types) { sloader.addSuite(type); }; for each (b in UnitTypes.buttons) { sloader.addButton(b); }; for each (m in UnitTypes.menuimages) { sloader.addMenuImage(m); }; for each (snd in UnitTypes.sounds) { sloader.addSound(snd); }; sloader.load(loadprocess, loadcomplete); checktimer = new Timer(300, 0); checktimer.addEventListener("timer", tmfunc); checktimer.start(); MochiAd.showPreGameAd({clip:root, id:"0bfa2fc974ddac4d", res:"700x500", ad_started:mochistart, ad_finished:mochifin}); } public function tmfunc(_arg1:TimerEvent):void{ if (((mochifinished) && (sloader.loaded))){ menu.create(); engine.create(); checktimer.stop(); checktimer.removeEventListener("timer", tmfunc); checktimer = null; }; } public function loadprocess(_arg1:Number):void{ var cbsize:*; var i:*; var percent = _arg1; var _local3 = loading; with (_local3) { cbsize = 7; graphics.clear(); graphics.beginFill((percent * 2.5)); i = 0; while (i <= percent) { graphics.drawRect((i * cbsize), 0, cbsize, 500); i++; }; graphics.endFill(); }; loadingText.text = (("loading: " + int(percent).toString()) + "%"); if (100 == percent){ removeChild(loading); removeChild(loadingText); loading = null; loadingText = null; }; } public function mochistart():void{ if (((loading) && (loadingText))){ loading.visible = false; loadingText.visible = false; }; } } }//package storm_fla
Section 23
//MochiAd (MochiAd) package { import flash.display.*; import flash.events.*; import flash.utils.*; import flash.system.*; import flash.net.*; public class MochiAd { public static function getVersion():String{ return ("2.1"); } 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); }; if (clip._mochiad_loaded){ return (null); }; 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{ mc._mochiad_ctr_failed = true; }; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f); g = function (_arg1:Object):void{ 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]; }; }; _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++; }; }; return (_local3); } public static function _isNetworkAvailable():Boolean{ return (!((Security.sandboxType == "localWithFile"))); } 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(); }; _arg1.removeChild(_arg1._mochiad); 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{ this.clip.stop(); }, ad_finished:function ():void{ this.clip.play(); }}; 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{ 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; _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.started = getTimer(); _local2.ad_msec = (_arg1 - 250); }; chk["onEnterFrame"] = function ():void{ var _local1:Object; var _local2:Number; var _local3:Boolean; var _local4:Number; _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{ this.clip.stop(); }, ad_finished:function ():void{ this.clip.play(); }}; 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; 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{ 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.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; _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 { mc.removeEventListener(Event.ENTER_FRAME, f); }; }; mc.addEventListener(Event.ENTER_FRAME, f); } } }//package

Special Tags

FileAttributes (69)Timeline Frame 1Access network only, Metadata not present, AS3.
Protect (24)Timeline Frame 131 bytes "..$1$d7$Be/uOxJ/Jn1k/yT5ERZxU0."




http://swfchan.com/6/28289/info.shtml
Created: 20/5 -2019 11:50:38 Last modified: 20/5 -2019 11:50:38 Server time: 14/05 -2024 01:45:20