Section 1
//AddFeature (action.AddFeature)
package action {
import feature.*;
import flash.*;
public class AddFeature implements Interface {
protected var feature:Root;
protected var mapPos:Point;
public function AddFeature(_arg1:Point=null, _arg2:Root=null):void{
if (!Boot.skip_constructor){
this.mapPos = _arg1;
this.feature = _arg2;
};
}
public function run():void{
Game.map.getCell(this.mapPos.x, this.mapPos.y).feature = this.feature;
}
}
}//package action
Section 2
//CloseTower (action.CloseTower)
package action {
import flash.*;
public class CloseTower implements Interface {
protected var x:int;
protected var y:int;
public function CloseTower(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.x = _arg1;
this.y = _arg2;
};
}
public function run():void{
Game.map.getCell(this.x, this.y).closeTower();
}
}
}//package action
Section 3
//DestroyBridge (action.DestroyBridge)
package action {
import logic.*;
import ui.*;
import flash.*;
public class DestroyBridge implements Interface {
protected var bridge:Bridge;
public function DestroyBridge(_arg1:Bridge=null):void{
if (!Boot.skip_constructor){
this.bridge = _arg1;
};
}
public function run():void{
var _local1:Explosion;
_local1 = new Explosion(this.bridge);
}
}
}//package action
Section 4
//Interface (action.Interface)
package action {
public interface Interface {
function run():void;
}
}//package action
Section 5
//KillTruck (action.KillTruck)
package action {
import flash.*;
public class KillTruck implements Interface {
protected var deadTruck:Truck;
public function KillTruck(_arg1:Truck=null):void{
if (!Boot.skip_constructor){
this.deadTruck = _arg1;
};
}
public function run():void{
this.deadTruck.dropLoad();
this.deadTruck.spawnZombie();
}
}
}//package action
Section 6
//RemoveFeature (action.RemoveFeature)
package action {
import flash.*;
public class RemoveFeature implements Interface {
protected var mapPos:Point;
public function RemoveFeature(_arg1:Point=null):void{
if (!Boot.skip_constructor){
this.mapPos = _arg1;
};
}
public function run():void{
var _local1:MapCell;
_local1 = Game.map.getCell(this.mapPos.x, this.mapPos.y);
if (_local1.feature != null){
_local1.feature.cleanup();
_local1.feature = null;
};
}
}
}//package action
Section 7
//UpdateBlocked (action.UpdateBlocked)
package action {
import flash.*;
public class UpdateBlocked implements Interface {
protected var mapPos:Point;
public function UpdateBlocked(_arg1:Point=null):void{
if (!Boot.skip_constructor){
this.mapPos = _arg1.clone();
};
}
protected function updateBlocked(_arg1:int, _arg2:int):void{
var _local3:Tower;
_local3 = Game.map.getCell(_arg1, _arg2).getTower();
if (_local3 != null){
_local3.updateBlocked();
};
}
public function run():void{
var _local1:int;
var _local2:Array;
var _local3:Point;
var _local4:int;
var _local5:int;
_local1 = 0;
_local2 = Lib.delta;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local4 = (this.mapPos.x + _local3.x);
_local5 = (this.mapPos.y + _local3.y);
this.updateBlocked(_local4, _local5);
};
this.updateBlocked(this.mapPos.x, this.mapPos.y);
}
}
}//package action
Section 8
//png (background.png)
package background {
import flash.display.*;
public dynamic class png extends BitmapData {
public function png(_arg1:Number, _arg2:Number){
super(_arg1, _arg2);
}
}
}//package background
Section 9
//Dynamite (feature.Dynamite)
package feature {
import logic.*;
import ui.*;
import action.*;
import flash.*;
public class Dynamite extends Root {
protected var bridge:Bridge;
public function Dynamite(_arg1:Point=null, _arg2:int=0, _arg3:Bridge=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
this.type = Root.DYNAMITE;
this.bridge = _arg3;
};
}
override public function getBuildTip():String{
return (Text.backgroundBuildDynamiteTip);
}
override public function getWorkshopTip():String{
return (Text.workshopDynamiteTip);
}
override public function load(_arg1):void{
super.load(_arg1.parent);
this.bridge = Bridge.load(_arg1.bridge);
Game.progress.addBridge(this.bridge, false);
}
override protected function getAction():Interface{
return (new DestroyBridge(this.bridge));
}
override public function getHoverTip():String{
return (Text.hoverDynamiteTip);
}
override public function save(){
return ({parent:super.save(), bridge:this.bridge.save()});
}
}
}//package feature
Section 10
//Root (feature.Root)
package feature {
import ui.*;
import action.*;
import flash.*;
public class Root {
protected var display:Sprite;
protected var counter:int;
protected var max:int;
protected var type:int;
protected var mapPos:Point;
protected static var DYNAMITE:int = 0;
public function Root(_arg1:Point=null, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.type = 0;
this.mapPos = _arg1;
this.counter = _arg2;
this.max = _arg2;
this.display = new Sprite(_arg1.toPixel(), 0, 0, Animation.feature);
this.display.update();
Game.actions.push(new AddFeature(this.mapPos, this));
};
}
public function getBuildTip():String{
return (Text.backgroundBuildFeatureTip);
}
public function cleanup():void{
this.display.cleanup();
}
public function load(_arg1):void{
this.max = _arg1.max;
this.display = Sprite.load(_arg1.display);
}
protected function getAction():Interface{
return (null);
}
public function getHoverTip():String{
return (Text.hoverFeatureTip);
}
public function maxWork():int{
return (this.max);
}
public function workLeft():int{
return (this.counter);
}
public function doWork():void{
var _local1:Interface;
if (this.counter > 0){
this.counter--;
};
if (this.counter == 0){
_local1 = this.getAction();
if (_local1 != null){
Game.actions.push(new RemoveFeature(this.mapPos));
Game.actions.push(_local1);
};
};
}
public function save(){
return ({type:this.type, mapPos:this.mapPos.save(), counter:this.counter, max:this.max, display:this.display.save()});
}
public function getWorkshopTip():String{
return (Text.workshopFeatureTip);
}
public static function loadS(_arg1):Root{
var _local2:Root;
_local2 = null;
if (_arg1.parent.type == DYNAMITE){
_local2 = new Dynamite(Point.load(_arg1.parent.mapPos), _arg1.parent.max, null);
_local2.load(_arg1);
};
return (_local2);
}
public static function saveS(_arg1:Root){
return (_arg1.save());
}
}
}//package feature
Section 11
//BaseScrollPane (fl.containers.BaseScrollPane)
package fl.containers {
import fl.core.*;
import fl.controls.*;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import fl.events.*;
public class BaseScrollPane extends UIComponent {
protected var defaultLineScrollSize:Number;// = 4
protected var _maxHorizontalScrollPosition:Number;// = 0
protected var vScrollBar:Boolean;
protected var disabledOverlay:Shape;
protected var hScrollBar:Boolean;
protected var availableWidth:Number;
protected var _verticalPageScrollSize:Number;// = 0
protected var vOffset:Number;// = 0
protected var _verticalScrollBar:ScrollBar;
protected var useFixedHorizontalScrolling:Boolean;// = false
protected var contentWidth:Number;// = 0
protected var contentHeight:Number;// = 0
protected var _horizontalPageScrollSize:Number;// = 0
protected var background:DisplayObject;
protected var _useBitmpScrolling:Boolean;// = false
protected var contentPadding:Number;// = 0
protected var availableHeight:Number;
protected var _horizontalScrollBar:ScrollBar;
protected var contentScrollRect:Rectangle;
protected var _horizontalScrollPolicy:String;
protected var _verticalScrollPolicy:String;
protected static const SCROLL_BAR_STYLES:Object = {upArrowDisabledSkin:"upArrowDisabledSkin", upArrowDownSkin:"upArrowDownSkin", upArrowOverSkin:"upArrowOverSkin", upArrowUpSkin:"upArrowUpSkin", downArrowDisabledSkin:"downArrowDisabledSkin", downArrowDownSkin:"downArrowDownSkin", downArrowOverSkin:"downArrowOverSkin", downArrowUpSkin:"downArrowUpSkin", thumbDisabledSkin:"thumbDisabledSkin", thumbDownSkin:"thumbDownSkin", thumbOverSkin:"thumbOverSkin", thumbUpSkin:"thumbUpSkin", thumbIcon:"thumbIcon", trackDisabledSkin:"trackDisabledSkin", trackDownSkin:"trackDownSkin", trackOverSkin:"trackOverSkin", trackUpSkin:"trackUpSkin", repeatDelay:"repeatDelay", repeatInterval:"repeatInterval"};
private static var defaultStyles:Object = {repeatDelay:500, repeatInterval:35, skin:"ScrollPane_upSkin", contentPadding:0, disabledAlpha:0.5};
public function BaseScrollPane(){
contentWidth = 0;
contentHeight = 0;
contentPadding = 0;
vOffset = 0;
_maxHorizontalScrollPosition = 0;
_horizontalPageScrollSize = 0;
_verticalPageScrollSize = 0;
defaultLineScrollSize = 4;
useFixedHorizontalScrolling = false;
_useBitmpScrolling = false;
super();
}
protected function handleWheel(_arg1:MouseEvent):void{
if (((((!(enabled)) || (!(_verticalScrollBar.visible)))) || ((contentHeight <= availableHeight)))){
return;
};
_verticalScrollBar.scrollPosition = (_verticalScrollBar.scrollPosition - (_arg1.delta * verticalLineScrollSize));
setVerticalScrollPosition(_verticalScrollBar.scrollPosition);
dispatchEvent(new ScrollEvent(ScrollBarDirection.VERTICAL, _arg1.delta, horizontalScrollPosition));
}
public function get verticalScrollPosition():Number{
return (_verticalScrollBar.scrollPosition);
}
protected function drawDisabledOverlay():void{
if (enabled){
if (contains(disabledOverlay)){
removeChild(disabledOverlay);
};
} else {
disabledOverlay.x = (disabledOverlay.y = contentPadding);
disabledOverlay.width = availableWidth;
disabledOverlay.height = availableHeight;
disabledOverlay.alpha = (getStyleValue("disabledAlpha") as Number);
addChild(disabledOverlay);
};
}
public function set verticalScrollPosition(_arg1:Number):void{
drawNow();
_verticalScrollBar.scrollPosition = _arg1;
setVerticalScrollPosition(_verticalScrollBar.scrollPosition, false);
}
protected function setContentSize(_arg1:Number, _arg2:Number):void{
if ((((((contentWidth == _arg1)) || (useFixedHorizontalScrolling))) && ((contentHeight == _arg2)))){
return;
};
contentWidth = _arg1;
contentHeight = _arg2;
invalidate(InvalidationType.SIZE);
}
public function get horizontalScrollPosition():Number{
return (_horizontalScrollBar.scrollPosition);
}
public function get horizontalScrollBar():ScrollBar{
return (_horizontalScrollBar);
}
override public function set enabled(_arg1:Boolean):void{
if (enabled == _arg1){
return;
};
_verticalScrollBar.enabled = _arg1;
_horizontalScrollBar.enabled = _arg1;
super.enabled = _arg1;
}
public function get verticalLineScrollSize():Number{
return (_verticalScrollBar.lineScrollSize);
}
public function get horizontalScrollPolicy():String{
return (_horizontalScrollPolicy);
}
protected function calculateAvailableSize():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
_local1 = ScrollBar.WIDTH;
_local2 = (contentPadding = Number(getStyleValue("contentPadding")));
_local3 = ((height - (2 * _local2)) - vOffset);
vScrollBar = (((_verticalScrollPolicy == ScrollPolicy.ON)) || ((((_verticalScrollPolicy == ScrollPolicy.AUTO)) && ((contentHeight > _local3)))));
_local4 = ((width - (vScrollBar) ? _local1 : 0) - (2 * _local2));
_local5 = (useFixedHorizontalScrolling) ? _maxHorizontalScrollPosition : (contentWidth - _local4);
hScrollBar = (((_horizontalScrollPolicy == ScrollPolicy.ON)) || ((((_horizontalScrollPolicy == ScrollPolicy.AUTO)) && ((_local5 > 0)))));
if (hScrollBar){
_local3 = (_local3 - _local1);
};
if (((((((hScrollBar) && (!(vScrollBar)))) && ((_verticalScrollPolicy == ScrollPolicy.AUTO)))) && ((contentHeight > _local3)))){
vScrollBar = true;
_local4 = (_local4 - _local1);
};
availableHeight = (_local3 + vOffset);
availableWidth = _local4;
}
public function get maxVerticalScrollPosition():Number{
drawNow();
return (Math.max(0, (contentHeight - availableHeight)));
}
public function set horizontalScrollPosition(_arg1:Number):void{
drawNow();
_horizontalScrollBar.scrollPosition = _arg1;
setHorizontalScrollPosition(_horizontalScrollBar.scrollPosition, false);
}
public function get horizontalLineScrollSize():Number{
return (_horizontalScrollBar.lineScrollSize);
}
public function set verticalPageScrollSize(_arg1:Number):void{
_verticalPageScrollSize = _arg1;
invalidate(InvalidationType.SIZE);
}
public function get verticalScrollPolicy():String{
return (_verticalScrollPolicy);
}
protected function setHorizontalScrollPosition(_arg1:Number, _arg2:Boolean=false):void{
}
public function get useBitmapScrolling():Boolean{
return (_useBitmpScrolling);
}
protected function handleScroll(_arg1:ScrollEvent):void{
if (_arg1.target == _verticalScrollBar){
setVerticalScrollPosition(_arg1.position);
} else {
setHorizontalScrollPosition(_arg1.position);
};
}
public function set verticalLineScrollSize(_arg1:Number):void{
_verticalScrollBar.lineScrollSize = _arg1;
}
public function get verticalScrollBar():ScrollBar{
return (_verticalScrollBar);
}
protected function setVerticalScrollPosition(_arg1:Number, _arg2:Boolean=false):void{
}
public function set horizontalPageScrollSize(_arg1:Number):void{
_horizontalPageScrollSize = _arg1;
invalidate(InvalidationType.SIZE);
}
override protected function draw():void{
if (isInvalid(InvalidationType.STYLES)){
setStyles();
drawBackground();
if (contentPadding != getStyleValue("contentPadding")){
invalidate(InvalidationType.SIZE, false);
};
};
if (isInvalid(InvalidationType.SIZE, InvalidationType.STATE)){
drawLayout();
};
updateChildren();
super.draw();
}
public function set horizontalScrollPolicy(_arg1:String):void{
_horizontalScrollPolicy = _arg1;
invalidate(InvalidationType.SIZE);
}
override protected function configUI():void{
var _local1:Graphics;
super.configUI();
contentScrollRect = new Rectangle(0, 0, 85, 85);
_verticalScrollBar = new ScrollBar();
_verticalScrollBar.addEventListener(ScrollEvent.SCROLL, handleScroll, false, 0, true);
_verticalScrollBar.visible = false;
_verticalScrollBar.lineScrollSize = defaultLineScrollSize;
addChild(_verticalScrollBar);
copyStylesToChild(_verticalScrollBar, SCROLL_BAR_STYLES);
_horizontalScrollBar = new ScrollBar();
_horizontalScrollBar.direction = ScrollBarDirection.HORIZONTAL;
_horizontalScrollBar.addEventListener(ScrollEvent.SCROLL, handleScroll, false, 0, true);
_horizontalScrollBar.visible = false;
_horizontalScrollBar.lineScrollSize = defaultLineScrollSize;
addChild(_horizontalScrollBar);
copyStylesToChild(_horizontalScrollBar, SCROLL_BAR_STYLES);
disabledOverlay = new Shape();
_local1 = disabledOverlay.graphics;
_local1.beginFill(0xFFFFFF);
_local1.drawRect(0, 0, width, height);
_local1.endFill();
addEventListener(MouseEvent.MOUSE_WHEEL, handleWheel, false, 0, true);
}
protected function calculateContentWidth():void{
}
public function get verticalPageScrollSize():Number{
if (isNaN(availableHeight)){
drawNow();
};
return (((((_verticalPageScrollSize == 0)) && (!(isNaN(availableHeight))))) ? availableHeight : _verticalPageScrollSize);
}
protected function drawLayout():void{
calculateAvailableSize();
calculateContentWidth();
background.width = width;
background.height = height;
if (vScrollBar){
_verticalScrollBar.visible = true;
_verticalScrollBar.x = ((width - ScrollBar.WIDTH) - contentPadding);
_verticalScrollBar.y = contentPadding;
_verticalScrollBar.height = availableHeight;
} else {
_verticalScrollBar.visible = false;
};
_verticalScrollBar.setScrollProperties(availableHeight, 0, (contentHeight - availableHeight), verticalPageScrollSize);
setVerticalScrollPosition(_verticalScrollBar.scrollPosition, false);
if (hScrollBar){
_horizontalScrollBar.visible = true;
_horizontalScrollBar.x = contentPadding;
_horizontalScrollBar.y = ((height - ScrollBar.WIDTH) - contentPadding);
_horizontalScrollBar.width = availableWidth;
} else {
_horizontalScrollBar.visible = false;
};
_horizontalScrollBar.setScrollProperties(availableWidth, 0, (useFixedHorizontalScrolling) ? _maxHorizontalScrollPosition : (contentWidth - availableWidth), horizontalPageScrollSize);
setHorizontalScrollPosition(_horizontalScrollBar.scrollPosition, false);
drawDisabledOverlay();
}
protected function drawBackground():void{
var _local1:DisplayObject;
_local1 = background;
background = getDisplayObjectInstance(getStyleValue("skin"));
background.width = width;
background.height = height;
addChildAt(background, 0);
if (((!((_local1 == null))) && (!((_local1 == background))))){
removeChild(_local1);
};
}
public function set horizontalLineScrollSize(_arg1:Number):void{
_horizontalScrollBar.lineScrollSize = _arg1;
}
public function get horizontalPageScrollSize():Number{
if (isNaN(availableWidth)){
drawNow();
};
return (((((_horizontalPageScrollSize == 0)) && (!(isNaN(availableWidth))))) ? availableWidth : _horizontalPageScrollSize);
}
public function get maxHorizontalScrollPosition():Number{
drawNow();
return (Math.max(0, (contentWidth - availableWidth)));
}
protected function setStyles():void{
copyStylesToChild(_verticalScrollBar, SCROLL_BAR_STYLES);
copyStylesToChild(_horizontalScrollBar, SCROLL_BAR_STYLES);
}
protected function updateChildren():void{
_verticalScrollBar.enabled = (_horizontalScrollBar.enabled = enabled);
_verticalScrollBar.drawNow();
_horizontalScrollBar.drawNow();
}
public function set verticalScrollPolicy(_arg1:String):void{
_verticalScrollPolicy = _arg1;
invalidate(InvalidationType.SIZE);
}
public function set useBitmapScrolling(_arg1:Boolean):void{
_useBitmpScrolling = _arg1;
invalidate(InvalidationType.STATE);
}
public static function getStyleDefinition():Object{
return (mergeStyles(defaultStyles, ScrollBar.getStyleDefinition()));
}
}
}//package fl.containers
Section 12
//CellRenderer (fl.controls.listClasses.CellRenderer)
package fl.controls.listClasses {
import fl.controls.*;
import flash.events.*;
public class CellRenderer extends LabelButton implements ICellRenderer {
protected var _data:Object;
protected var _listData:ListData;
private static var defaultStyles:Object = {upSkin:"CellRenderer_upSkin", downSkin:"CellRenderer_downSkin", overSkin:"CellRenderer_overSkin", disabledSkin:"CellRenderer_disabledSkin", selectedDisabledSkin:"CellRenderer_selectedDisabledSkin", selectedUpSkin:"CellRenderer_selectedUpSkin", selectedDownSkin:"CellRenderer_selectedDownSkin", selectedOverSkin:"CellRenderer_selectedOverSkin", textFormat:null, disabledTextFormat:null, embedFonts:null, textPadding:5};
public function CellRenderer():void{
toggle = true;
focusEnabled = false;
}
override protected function toggleSelected(_arg1:MouseEvent):void{
}
override public function get selected():Boolean{
return (super.selected);
}
public function set listData(_arg1:ListData):void{
_listData = _arg1;
label = _listData.label;
setStyle("icon", _listData.icon);
}
override public function set selected(_arg1:Boolean):void{
super.selected = _arg1;
}
public function set data(_arg1:Object):void{
_data = _arg1;
}
public function get listData():ListData{
return (_listData);
}
override public function setSize(_arg1:Number, _arg2:Number):void{
super.setSize(_arg1, _arg2);
}
override protected function drawLayout():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
_local1 = Number(getStyleValue("textPadding"));
_local2 = 0;
if (icon != null){
icon.x = _local1;
icon.y = Math.round(((height - icon.height) >> 1));
_local2 = (icon.width + _local1);
};
if (label.length > 0){
textField.visible = true;
_local3 = Math.max(0, ((width - _local2) - (_local1 * 2)));
textField.width = _local3;
textField.height = (textField.textHeight + 4);
textField.x = (_local2 + _local1);
textField.y = Math.round(((height - textField.height) >> 1));
} else {
textField.visible = false;
};
background.width = width;
background.height = height;
}
public function get data():Object{
return (_data);
}
public static function getStyleDefinition():Object{
return (defaultStyles);
}
}
}//package fl.controls.listClasses
Section 13
//ICellRenderer (fl.controls.listClasses.ICellRenderer)
package fl.controls.listClasses {
public interface ICellRenderer {
function setSize(_arg1:Number, _arg2:Number):void;
function get listData():ListData;
function get data():Object;
function setMouseState(_arg1:String):void;
function set x(_arg1:Number):void;
function set y(_arg1:Number):void;
function set data(_arg1:Object):void;
function set selected(_arg1:Boolean):void;
function set listData(_arg1:ListData):void;
function get selected():Boolean;
}
}//package fl.controls.listClasses
Section 14
//ListData (fl.controls.listClasses.ListData)
package fl.controls.listClasses {
import fl.core.*;
public class ListData {
protected var _index:uint;
protected var _owner:UIComponent;
protected var _label:String;
protected var _icon:Object;// = null
protected var _row:uint;
protected var _column:uint;
public function ListData(_arg1:String, _arg2:Object, _arg3:UIComponent, _arg4:uint, _arg5:uint, _arg6:uint=0){
_icon = null;
super();
_label = _arg1;
_icon = _arg2;
_owner = _arg3;
_index = _arg4;
_row = _arg5;
_column = _arg6;
}
public function get owner():UIComponent{
return (_owner);
}
public function get label():String{
return (_label);
}
public function get row():uint{
return (_row);
}
public function get index():uint{
return (_index);
}
public function get icon():Object{
return (_icon);
}
public function get column():uint{
return (_column);
}
}
}//package fl.controls.listClasses
Section 15
//BaseButton (fl.controls.BaseButton)
package fl.controls {
import fl.core.*;
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import fl.events.*;
public class BaseButton extends UIComponent {
protected var _selected:Boolean;// = false
private var unlockedMouseState:String;
protected var pressTimer:Timer;
protected var mouseState:String;
protected var background:DisplayObject;
private var _mouseStateLocked:Boolean;// = false
protected var _autoRepeat:Boolean;// = false
private static var defaultStyles:Object = {upSkin:"Button_upSkin", downSkin:"Button_downSkin", overSkin:"Button_overSkin", disabledSkin:"Button_disabledSkin", selectedDisabledSkin:"Button_selectedDisabledSkin", selectedUpSkin:"Button_selectedUpSkin", selectedDownSkin:"Button_selectedDownSkin", selectedOverSkin:"Button_selectedOverSkin", focusRectSkin:null, focusRectPadding:null, repeatDelay:500, repeatInterval:35};
public function BaseButton(){
_selected = false;
_autoRepeat = false;
_mouseStateLocked = false;
super();
buttonMode = true;
mouseChildren = false;
useHandCursor = false;
setupMouseEvents();
setMouseState("up");
pressTimer = new Timer(1, 0);
pressTimer.addEventListener(TimerEvent.TIMER, buttonDown, false, 0, true);
}
protected function endPress():void{
pressTimer.reset();
}
public function set mouseStateLocked(_arg1:Boolean):void{
_mouseStateLocked = _arg1;
if (_arg1 == false){
setMouseState(unlockedMouseState);
} else {
unlockedMouseState = mouseState;
};
}
public function get autoRepeat():Boolean{
return (_autoRepeat);
}
public function set autoRepeat(_arg1:Boolean):void{
_autoRepeat = _arg1;
}
override public function set enabled(_arg1:Boolean):void{
super.enabled = _arg1;
mouseEnabled = _arg1;
}
public function get selected():Boolean{
return (_selected);
}
protected function mouseEventHandler(_arg1:MouseEvent):void{
if (_arg1.type == MouseEvent.MOUSE_DOWN){
setMouseState("down");
startPress();
} else {
if ((((_arg1.type == MouseEvent.ROLL_OVER)) || ((_arg1.type == MouseEvent.MOUSE_UP)))){
setMouseState("over");
endPress();
} else {
if (_arg1.type == MouseEvent.ROLL_OUT){
setMouseState("up");
endPress();
};
};
};
}
public function setMouseState(_arg1:String):void{
if (_mouseStateLocked){
unlockedMouseState = _arg1;
return;
};
if (mouseState == _arg1){
return;
};
mouseState = _arg1;
invalidate(InvalidationType.STATE);
}
protected function startPress():void{
if (_autoRepeat){
pressTimer.delay = Number(getStyleValue("repeatDelay"));
pressTimer.start();
};
dispatchEvent(new ComponentEvent(ComponentEvent.BUTTON_DOWN, true));
}
protected function buttonDown(_arg1:TimerEvent):void{
if (!_autoRepeat){
endPress();
return;
};
if (pressTimer.currentCount == 1){
pressTimer.delay = Number(getStyleValue("repeatInterval"));
};
dispatchEvent(new ComponentEvent(ComponentEvent.BUTTON_DOWN, true));
}
public function set selected(_arg1:Boolean):void{
if (_selected == _arg1){
return;
};
_selected = _arg1;
invalidate(InvalidationType.STATE);
}
override public function get enabled():Boolean{
return (super.enabled);
}
override protected function draw():void{
if (isInvalid(InvalidationType.STYLES, InvalidationType.STATE)){
drawBackground();
invalidate(InvalidationType.SIZE, false);
};
if (isInvalid(InvalidationType.SIZE)){
drawLayout();
};
super.draw();
}
protected function setupMouseEvents():void{
addEventListener(MouseEvent.ROLL_OVER, mouseEventHandler, false, 0, true);
addEventListener(MouseEvent.MOUSE_DOWN, mouseEventHandler, false, 0, true);
addEventListener(MouseEvent.MOUSE_UP, mouseEventHandler, false, 0, true);
addEventListener(MouseEvent.ROLL_OUT, mouseEventHandler, false, 0, true);
}
protected function drawLayout():void{
background.width = width;
background.height = height;
}
protected function drawBackground():void{
var _local1:String;
var _local2:DisplayObject;
_local1 = (enabled) ? mouseState : "disabled";
if (selected){
_local1 = (("selected" + _local1.substr(0, 1).toUpperCase()) + _local1.substr(1));
};
_local1 = (_local1 + "Skin");
_local2 = background;
background = getDisplayObjectInstance(getStyleValue(_local1));
addChildAt(background, 0);
if (((!((_local2 == null))) && (!((_local2 == background))))){
removeChild(_local2);
};
}
public static function getStyleDefinition():Object{
return (defaultStyles);
}
}
}//package fl.controls
Section 16
//Button (fl.controls.Button)
package fl.controls {
import fl.core.*;
import flash.display.*;
import fl.managers.*;
public class Button extends LabelButton implements IFocusManagerComponent {
protected var emphasizedBorder:DisplayObject;
protected var _emphasized:Boolean;// = false
private static var defaultStyles:Object = {emphasizedSkin:"Button_emphasizedSkin", emphasizedPadding:2};
public static var createAccessibilityImplementation:Function;
public function Button(){
_emphasized = false;
super();
}
override public function drawFocus(_arg1:Boolean):void{
var _local2:Number;
var _local3:*;
super.drawFocus(_arg1);
if (_arg1){
_local2 = Number(getStyleValue("emphasizedPadding"));
if ((((_local2 < 0)) || (!(_emphasized)))){
_local2 = 0;
};
_local3 = getStyleValue("focusRectPadding");
_local3 = ((_local3)==null) ? 2 : _local3;
_local3 = (_local3 + _local2);
uiFocusRect.x = -(_local3);
uiFocusRect.y = -(_local3);
uiFocusRect.width = (width + (_local3 * 2));
uiFocusRect.height = (height + (_local3 * 2));
};
}
public function set emphasized(_arg1:Boolean):void{
_emphasized = _arg1;
invalidate(InvalidationType.STYLES);
}
override protected function draw():void{
if (((isInvalid(InvalidationType.STYLES)) || (isInvalid(InvalidationType.SIZE)))){
drawEmphasized();
};
super.draw();
if (emphasizedBorder != null){
setChildIndex(emphasizedBorder, (numChildren - 1));
};
}
public function get emphasized():Boolean{
return (_emphasized);
}
override protected function initializeAccessibility():void{
if (Button.createAccessibilityImplementation != null){
Button.createAccessibilityImplementation(this);
};
}
protected function drawEmphasized():void{
var _local1:Object;
var _local2:Number;
if (emphasizedBorder != null){
removeChild(emphasizedBorder);
};
emphasizedBorder = null;
if (!_emphasized){
return;
};
_local1 = getStyleValue("emphasizedSkin");
if (_local1 != null){
emphasizedBorder = getDisplayObjectInstance(_local1);
};
if (emphasizedBorder != null){
addChildAt(emphasizedBorder, 0);
_local2 = Number(getStyleValue("emphasizedPadding"));
emphasizedBorder.x = (emphasizedBorder.y = -(_local2));
emphasizedBorder.width = (width + (_local2 * 2));
emphasizedBorder.height = (height + (_local2 * 2));
};
}
public static function getStyleDefinition():Object{
return (UIComponent.mergeStyles(LabelButton.getStyleDefinition(), defaultStyles));
}
}
}//package fl.controls
Section 17
//ButtonLabelPlacement (fl.controls.ButtonLabelPlacement)
package fl.controls {
public class ButtonLabelPlacement {
public static const TOP:String = "top";
public static const LEFT:String = "left";
public static const BOTTOM:String = "bottom";
public static const RIGHT:String = "right";
}
}//package fl.controls
Section 18
//ComboBox (fl.controls.ComboBox)
package fl.controls {
import fl.controls.listClasses.*;
import fl.core.*;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import fl.data.*;
import fl.managers.*;
import fl.events.*;
import flash.ui.*;
public class ComboBox extends UIComponent implements IFocusManagerComponent {
protected var _dropdownWidth:Number;
protected var highlightedCell:int;// = -1
protected var _prompt:String;
protected var isOpen:Boolean;// = false
protected var list:List;
protected var _rowCount:uint;// = 5
protected var currentIndex:int;
protected var isKeyDown:Boolean;// = false
protected var _labels:Array;
protected var background:BaseButton;
protected var inputField:TextInput;
protected var listOverIndex:uint;
protected var editableValue:String;
protected var _editable:Boolean;// = false
private var collectionItemImport:SimpleCollectionItem;
protected static const BACKGROUND_STYLES:Object = {overSkin:"overSkin", downSkin:"downSkin", upSkin:"upSkin", disabledSkin:"disabledSkin", repeatInterval:"repeatInterval"};
protected static const LIST_STYLES:Object = {upSkin:"comboListUpSkin", overSkin:"comboListOverSkin", downSkin:"comobListDownSkin", disabledSkin:"comboListDisabledSkin", downArrowDisabledSkin:"downArrowDisabledSkin", downArrowDownSkin:"downArrowDownSkin", downArrowOverSkin:"downArrowOverSkin", downArrowUpSkin:"downArrowUpSkin", upArrowDisabledSkin:"upArrowDisabledSkin", upArrowDownSkin:"upArrowDownSkin", upArrowOverSkin:"upArrowOverSkin", upArrowUpSkin:"upArrowUpSkin", thumbDisabledSkin:"thumbDisabledSkin", thumbDownSkin:"thumbDownSkin", thumbOverSkin:"thumbOverSkin", thumbUpSkin:"thumbUpSkin", thumbIcon:"thumbIcon", trackDisabledSkin:"trackDisabledSkin", trackDownSkin:"trackDownSkin", trackOverSkin:"trackOverSkin", trackUpSkin:"trackUpSkin", repeatDelay:"repeatDelay", repeatInterval:"repeatInterval", textFormat:"textFormat", disabledAlpha:"disabledAlpha", skin:"listSkin"};
private static var defaultStyles:Object = {upSkin:"ComboBox_upSkin", downSkin:"ComboBox_downSkin", overSkin:"ComboBox_overSkin", disabledSkin:"ComboBox_disabledSkin", focusRectSkin:null, focusRectPadding:null, textFormat:null, disabledTextFormat:null, textPadding:3, buttonWidth:24, disabledAlpha:null, listSkin:null};
public static var createAccessibilityImplementation:Function;
public function ComboBox(){
_rowCount = 5;
_editable = false;
isOpen = false;
highlightedCell = -1;
isKeyDown = false;
super();
}
protected function drawList():void{
list.rowCount = Math.max(0, Math.min(_rowCount, list.dataProvider.length));
}
public function set imeMode(_arg1:String):void{
inputField.imeMode = _arg1;
}
public function get dropdown():List{
return (list);
}
public function get dropdownWidth():Number{
return (list.width);
}
public function sortItemsOn(_arg1:String, _arg2:Object=null){
return (list.sortItemsOn(_arg1, _arg2));
}
protected function onEnter(_arg1:ComponentEvent):void{
_arg1.stopPropagation();
}
public function removeItemAt(_arg1:uint):void{
list.removeItemAt(_arg1);
invalidate(InvalidationType.DATA);
}
public function open():void{
currentIndex = selectedIndex;
if (((isOpen) || ((length == 0)))){
return;
};
dispatchEvent(new Event(Event.OPEN));
isOpen = true;
addEventListener(Event.ENTER_FRAME, addCloseListener, false, 0, true);
positionList();
list.scrollToSelected();
stage.addChild(list);
}
public function get selectedItem():Object{
return (list.selectedItem);
}
public function set text(_arg1:String):void{
if (!editable){
return;
};
inputField.text = _arg1;
}
public function get labelField():String{
return (list.labelField);
}
override protected function keyDownHandler(_arg1:KeyboardEvent):void{
var _local2:int;
var _local3:uint;
var _local4:Number;
var _local5:int;
isKeyDown = true;
if (_arg1.ctrlKey){
switch (_arg1.keyCode){
case Keyboard.UP:
if (highlightedCell > -1){
selectedIndex = highlightedCell;
dispatchEvent(new Event(Event.CHANGE));
};
close();
break;
case Keyboard.DOWN:
open();
break;
};
return;
};
_arg1.stopPropagation();
_local2 = Math.max(((calculateAvailableHeight() / list.rowHeight) << 0), 1);
_local3 = selectedIndex;
_local4 = ((highlightedCell)==-1) ? selectedIndex : highlightedCell;
_local5 = -1;
switch (_arg1.keyCode){
case Keyboard.SPACE:
if (isOpen){
close();
} else {
open();
};
return;
case Keyboard.ESCAPE:
if (isOpen){
if (highlightedCell > -1){
selectedIndex = selectedIndex;
};
close();
};
return;
case Keyboard.UP:
_local5 = Math.max(0, (_local4 - 1));
break;
case Keyboard.DOWN:
_local5 = Math.min((length - 1), (_local4 + 1));
break;
case Keyboard.PAGE_UP:
_local5 = Math.max((_local4 - _local2), 0);
break;
case Keyboard.PAGE_DOWN:
_local5 = Math.min((_local4 + _local2), (length - 1));
break;
case Keyboard.HOME:
_local5 = 0;
break;
case Keyboard.END:
_local5 = (length - 1);
break;
case Keyboard.ENTER:
if (((_editable) && ((highlightedCell == -1)))){
editableValue = inputField.text;
selectedIndex = -1;
} else {
if (((isOpen) && ((highlightedCell > -1)))){
editableValue = null;
selectedIndex = highlightedCell;
dispatchEvent(new Event(Event.CHANGE));
};
};
dispatchEvent(new ComponentEvent(ComponentEvent.ENTER));
close();
return;
default:
if (editable){
break;
};
_local5 = list.getNextIndexAtLetter(String.fromCharCode(_arg1.keyCode), _local4);
break;
};
if (_local5 > -1){
if (isOpen){
highlightCell(_local5);
inputField.text = list.itemToLabel(getItemAt(_local5));
} else {
highlightCell();
selectedIndex = _local5;
dispatchEvent(new Event(Event.CHANGE));
};
};
}
public function set dropdownWidth(_arg1:Number):void{
_dropdownWidth = _arg1;
invalidate(InvalidationType.SIZE);
}
public function get editable():Boolean{
return (_editable);
}
override protected function focusInHandler(_arg1:FocusEvent):void{
super.focusInHandler(_arg1);
if (editable){
stage.focus = inputField.textField;
};
}
protected function onStageClick(_arg1:MouseEvent):void{
if (!isOpen){
return;
};
if (((!(contains((_arg1.target as DisplayObject)))) && (!(list.contains((_arg1.target as DisplayObject)))))){
if (highlightedCell != -1){
selectedIndex = highlightedCell;
dispatchEvent(new Event(Event.CHANGE));
};
close();
};
}
protected function handleDataChange(_arg1:DataChangeEvent):void{
invalidate(InvalidationType.DATA);
}
override protected function keyUpHandler(_arg1:KeyboardEvent):void{
isKeyDown = false;
}
protected function onListItemUp(_arg1:MouseEvent):void{
var _local2:*;
stage.removeEventListener(MouseEvent.MOUSE_UP, onListItemUp);
if (((!((_arg1.target is ICellRenderer))) || (!(list.contains((_arg1.target as DisplayObject)))))){
return;
};
editableValue = null;
_local2 = selectedIndex;
selectedIndex = _arg1.target.listData.index;
if (_local2 != selectedIndex){
dispatchEvent(new Event(Event.CHANGE));
};
close();
}
public function removeAll():void{
list.removeAll();
inputField.text = "";
invalidate(InvalidationType.DATA);
}
public function set selectedItem(_arg1:Object):void{
list.selectedItem = _arg1;
invalidate(InvalidationType.SELECTED);
}
protected function highlightCell(_arg1:int=-1):void{
var _local2:ICellRenderer;
if (highlightedCell > -1){
_local2 = list.itemToCellRenderer(getItemAt(highlightedCell));
if (_local2 != null){
_local2.setMouseState("up");
};
};
if (_arg1 == -1){
return;
};
list.scrollToIndex(_arg1);
list.drawNow();
_local2 = list.itemToCellRenderer(getItemAt(_arg1));
if (_local2 != null){
_local2.setMouseState("over");
highlightedCell = _arg1;
};
}
public function itemToLabel(_arg1:Object):String{
if (_arg1 == null){
return ("");
};
return (list.itemToLabel(_arg1));
}
public function addItemAt(_arg1:Object, _arg2:uint):void{
list.addItemAt(_arg1, _arg2);
invalidate(InvalidationType.DATA);
}
public function replaceItemAt(_arg1:Object, _arg2:uint):Object{
return (list.replaceItemAt(_arg1, _arg2));
}
protected function showPrompt():void{
inputField.text = _prompt;
}
public function set rowCount(_arg1:uint):void{
_rowCount = _arg1;
invalidate(InvalidationType.SIZE);
}
public function get restrict():String{
return (inputField.restrict);
}
protected function setEmbedFonts():void{
var _local1:Object;
_local1 = getStyleValue("embedFonts");
if (_local1 != null){
inputField.textField.embedFonts = _local1;
};
}
public function sortItems(... _args){
return (list.sortItems.apply(list, _args));
}
public function set labelField(_arg1:String):void{
list.labelField = _arg1;
invalidate(InvalidationType.DATA);
}
public function set editable(_arg1:Boolean):void{
_editable = _arg1;
drawTextField();
}
public function set prompt(_arg1:String):void{
if (_arg1 == ""){
_prompt = null;
} else {
_prompt = _arg1;
};
invalidate(InvalidationType.STATE);
}
public function get length():int{
return (list.length);
}
protected function drawTextField():void{
inputField.setStyle("upSkin", "");
inputField.setStyle("disabledSkin", "");
inputField.enabled = enabled;
inputField.editable = _editable;
inputField.textField.selectable = ((enabled) && (_editable));
inputField.mouseEnabled = (inputField.mouseChildren = ((enabled) && (_editable)));
inputField.focusEnabled = false;
if (_editable){
inputField.addEventListener(FocusEvent.FOCUS_IN, onInputFieldFocus, false, 0, true);
inputField.addEventListener(FocusEvent.FOCUS_OUT, onInputFieldFocusOut, false, 0, true);
} else {
inputField.removeEventListener(FocusEvent.FOCUS_IN, onInputFieldFocus);
inputField.removeEventListener(FocusEvent.FOCUS_OUT, onInputFieldFocusOut);
};
}
protected function onInputFieldFocusOut(_arg1:FocusEvent):void{
inputField.removeEventListener(ComponentEvent.ENTER, onEnter);
selectedIndex = selectedIndex;
}
protected function passEvent(_arg1:Event):void{
dispatchEvent(_arg1);
}
public function get imeMode():String{
return (inputField.imeMode);
}
public function get labelFunction():Function{
return (list.labelFunction);
}
protected function calculateAvailableHeight():Number{
var _local1:Number;
_local1 = Number(getStyleValue("contentPadding"));
return ((list.height - (_local1 * 2)));
}
public function get selectedIndex():int{
return (list.selectedIndex);
}
override protected function focusOutHandler(_arg1:FocusEvent):void{
isKeyDown = false;
if (isOpen){
if (((!(_arg1.relatedObject)) || (!(list.contains(_arg1.relatedObject))))){
if (((!((highlightedCell == -1))) && (!((highlightedCell == selectedIndex))))){
selectedIndex = highlightedCell;
dispatchEvent(new Event(Event.CHANGE));
};
close();
};
};
super.focusOutHandler(_arg1);
}
public function get selectedLabel():String{
if (editableValue != null){
return (editableValue);
};
if (selectedIndex == -1){
return (null);
};
return (itemToLabel(selectedItem));
}
public function get text():String{
return (inputField.text);
}
protected function onListChange(_arg1:Event):void{
editableValue = null;
dispatchEvent(_arg1);
invalidate(InvalidationType.SELECTED);
if (isKeyDown){
return;
};
close();
}
protected function onToggleListVisibility(_arg1:MouseEvent):void{
_arg1.stopPropagation();
dispatchEvent(_arg1);
if (isOpen){
close();
} else {
open();
stage.addEventListener(MouseEvent.MOUSE_UP, onListItemUp, false, 0, true);
};
}
override protected function draw():void{
var _local1:*;
_local1 = selectedIndex;
if ((((_local1 == -1)) && (((((!((prompt == null))) || (editable))) || ((length == 0)))))){
_local1 = Math.max(-1, Math.min(_local1, (length - 1)));
} else {
editableValue = null;
_local1 = Math.max(0, Math.min(_local1, (length - 1)));
};
if (list.selectedIndex != _local1){
list.selectedIndex = _local1;
invalidate(InvalidationType.SELECTED, false);
};
if (isInvalid(InvalidationType.STYLES)){
setStyles();
setEmbedFonts();
invalidate(InvalidationType.SIZE, false);
};
if (isInvalid(InvalidationType.SIZE, InvalidationType.DATA, InvalidationType.STATE)){
drawTextFormat();
drawLayout();
invalidate(InvalidationType.DATA);
};
if (isInvalid(InvalidationType.DATA)){
drawList();
invalidate(InvalidationType.SELECTED, true);
};
if (isInvalid(InvalidationType.SELECTED)){
if ((((_local1 == -1)) && (!((editableValue == null))))){
inputField.text = editableValue;
} else {
if (_local1 > -1){
if (length > 0){
inputField.horizontalScrollPosition = 0;
inputField.text = itemToLabel(list.selectedItem);
};
} else {
if ((((_local1 == -1)) && (!((_prompt == null))))){
showPrompt();
} else {
inputField.text = "";
};
};
};
if (((((editable) && ((selectedIndex > -1)))) && ((stage.focus == inputField.textField)))){
inputField.setSelection(0, inputField.length);
};
};
drawTextField();
super.draw();
}
public function addItem(_arg1:Object):void{
list.addItem(_arg1);
invalidate(InvalidationType.DATA);
}
public function get rowCount():uint{
return (_rowCount);
}
override protected function configUI():void{
super.configUI();
background = new BaseButton();
background.focusEnabled = false;
copyStylesToChild(background, BACKGROUND_STYLES);
background.addEventListener(MouseEvent.MOUSE_DOWN, onToggleListVisibility, false, 0, true);
addChild(background);
inputField = new TextInput();
inputField.focusTarget = (this as IFocusManagerComponent);
inputField.focusEnabled = false;
inputField.addEventListener(Event.CHANGE, onTextInput, false, 0, true);
addChild(inputField);
list = new List();
list.focusEnabled = false;
copyStylesToChild(list, LIST_STYLES);
list.addEventListener(Event.CHANGE, onListChange, false, 0, true);
list.addEventListener(ListEvent.ITEM_CLICK, onListChange, false, 0, true);
list.addEventListener(ListEvent.ITEM_ROLL_OUT, passEvent, false, 0, true);
list.addEventListener(ListEvent.ITEM_ROLL_OVER, passEvent, false, 0, true);
list.verticalScrollBar.addEventListener(Event.SCROLL, passEvent, false, 0, true);
}
protected function positionList():void{
var _local1:Point;
_local1 = localToGlobal(new Point(0, 0));
list.x = _local1.x;
if (((_local1.y + height) + list.height) > stage.stageHeight){
list.y = (_local1.y - list.height);
} else {
list.y = (_local1.y + height);
};
}
public function get value():String{
var _local1:Object;
if (editableValue != null){
return (editableValue);
};
_local1 = selectedItem;
if (((!(_editable)) && (!((_local1.data == null))))){
return (_local1.data);
};
return (itemToLabel(_local1));
}
public function get prompt():String{
return (_prompt);
}
public function set dataProvider(_arg1:DataProvider):void{
_arg1.addEventListener(DataChangeEvent.DATA_CHANGE, handleDataChange, false, 0, true);
list.dataProvider = _arg1;
invalidate(InvalidationType.DATA);
}
public function set restrict(_arg1:String):void{
if (((componentInspectorSetting) && ((_arg1 == "")))){
_arg1 = null;
};
if (!_editable){
return;
};
inputField.restrict = _arg1;
}
protected function onTextInput(_arg1:Event):void{
_arg1.stopPropagation();
if (!_editable){
return;
};
editableValue = inputField.text;
selectedIndex = -1;
dispatchEvent(new Event(Event.CHANGE));
}
protected function onInputFieldFocus(_arg1:FocusEvent):void{
inputField.addEventListener(ComponentEvent.ENTER, onEnter, false, 0, true);
close();
}
public function getItemAt(_arg1:uint):Object{
return (list.getItemAt(_arg1));
}
override protected function initializeAccessibility():void{
if (ComboBox.createAccessibilityImplementation != null){
ComboBox.createAccessibilityImplementation(this);
};
}
protected function drawLayout():void{
var _local1:Number;
var _local2:Number;
_local1 = (getStyleValue("buttonWidth") as Number);
_local2 = (getStyleValue("textPadding") as Number);
background.setSize(width, height);
inputField.x = (inputField.y = _local2);
inputField.setSize(((width - _local1) - _local2), (height - _local2));
list.width = (isNaN(_dropdownWidth)) ? width : _dropdownWidth;
background.enabled = enabled;
background.drawNow();
}
public function removeItem(_arg1:Object):Object{
return (list.removeItem(_arg1));
}
private function addCloseListener(_arg1:Event){
removeEventListener(Event.ENTER_FRAME, addCloseListener);
if (!isOpen){
return;
};
stage.addEventListener(MouseEvent.MOUSE_DOWN, onStageClick, false, 0, true);
}
public function get dataProvider():DataProvider{
return (list.dataProvider);
}
public function get textField():TextInput{
return (inputField);
}
protected function setStyles():void{
copyStylesToChild(background, BACKGROUND_STYLES);
copyStylesToChild(list, LIST_STYLES);
}
public function set labelFunction(_arg1:Function):void{
list.labelFunction = _arg1;
invalidate(InvalidationType.DATA);
}
protected function drawTextFormat():void{
var _local1:TextFormat;
_local1 = (getStyleValue((_enabled) ? "textFormat" : "disabledTextFormat") as TextFormat);
if (_local1 == null){
_local1 = new TextFormat();
};
inputField.textField.defaultTextFormat = _local1;
inputField.textField.setTextFormat(_local1);
setEmbedFonts();
}
public function set selectedIndex(_arg1:int):void{
list.selectedIndex = _arg1;
highlightCell();
invalidate(InvalidationType.SELECTED);
}
public function close():void{
highlightCell();
highlightedCell = -1;
if (!isOpen){
return;
};
dispatchEvent(new Event(Event.CLOSE));
stage.removeEventListener(MouseEvent.MOUSE_DOWN, onStageClick);
isOpen = false;
stage.removeChild(list);
}
public static function getStyleDefinition():Object{
return (mergeStyles(defaultStyles, List.getStyleDefinition()));
}
}
}//package fl.controls
Section 19
//LabelButton (fl.controls.LabelButton)
package fl.controls {
import fl.core.*;
import flash.display.*;
import flash.events.*;
import flash.text.*;
import fl.managers.*;
import fl.events.*;
import flash.ui.*;
public class LabelButton extends BaseButton implements IFocusManagerComponent {
protected var _labelPlacement:String;// = "right"
protected var _toggle:Boolean;// = false
protected var icon:DisplayObject;
protected var oldMouseState:String;
protected var mode:String;// = "center"
public var textField:TextField;
protected var _label:String;// = "Label"
private static var defaultStyles:Object = {icon:null, upIcon:null, downIcon:null, overIcon:null, disabledIcon:null, selectedDisabledIcon:null, selectedUpIcon:null, selectedDownIcon:null, selectedOverIcon:null, textFormat:null, disabledTextFormat:null, textPadding:5, embedFonts:false};
public static var createAccessibilityImplementation:Function;
public function LabelButton(){
_labelPlacement = ButtonLabelPlacement.RIGHT;
_toggle = false;
_label = "Label";
mode = "center";
super();
}
protected function toggleSelected(_arg1:MouseEvent):void{
selected = !(selected);
dispatchEvent(new Event(Event.CHANGE, true));
}
public function get labelPlacement():String{
return (_labelPlacement);
}
override protected function keyDownHandler(_arg1:KeyboardEvent):void{
if (!enabled){
return;
};
if (_arg1.keyCode == Keyboard.SPACE){
if (oldMouseState == null){
oldMouseState = mouseState;
};
setMouseState("down");
startPress();
};
}
protected function setEmbedFont(){
var _local1:Object;
_local1 = getStyleValue("embedFonts");
if (_local1 != null){
textField.embedFonts = _local1;
};
}
override protected function keyUpHandler(_arg1:KeyboardEvent):void{
if (!enabled){
return;
};
if (_arg1.keyCode == Keyboard.SPACE){
setMouseState(oldMouseState);
oldMouseState = null;
endPress();
dispatchEvent(new MouseEvent(MouseEvent.CLICK));
};
}
override public function get selected():Boolean{
return ((_toggle) ? _selected : false);
}
public function set labelPlacement(_arg1:String):void{
_labelPlacement = _arg1;
invalidate(InvalidationType.SIZE);
}
public function set toggle(_arg1:Boolean):void{
if (((!(_arg1)) && (super.selected))){
selected = false;
};
_toggle = _arg1;
if (_toggle){
addEventListener(MouseEvent.CLICK, toggleSelected, false, 0, true);
} else {
removeEventListener(MouseEvent.CLICK, toggleSelected);
};
invalidate(InvalidationType.STATE);
}
public function get label():String{
return (_label);
}
override public function set selected(_arg1:Boolean):void{
_selected = _arg1;
if (_toggle){
invalidate(InvalidationType.STATE);
};
}
override protected function draw():void{
if (textField.text != _label){
label = _label;
};
if (isInvalid(InvalidationType.STYLES, InvalidationType.STATE)){
drawBackground();
drawIcon();
drawTextFormat();
invalidate(InvalidationType.SIZE, false);
};
if (isInvalid(InvalidationType.SIZE)){
drawLayout();
};
if (isInvalid(InvalidationType.SIZE, InvalidationType.STYLES)){
if (((isFocused) && (focusManager.showFocusIndicator))){
drawFocus(true);
};
};
validate();
}
public function get toggle():Boolean{
return (_toggle);
}
override protected function configUI():void{
super.configUI();
textField = new TextField();
textField.type = TextFieldType.DYNAMIC;
textField.selectable = false;
addChild(textField);
}
override protected function drawLayout():void{
var _local1:Number;
var _local2:String;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
_local1 = Number(getStyleValue("textPadding"));
_local2 = ((((icon == null)) && ((mode == "center")))) ? ButtonLabelPlacement.TOP : _labelPlacement;
textField.height = (textField.textHeight + 4);
_local3 = (textField.textWidth + 4);
_local4 = (textField.textHeight + 4);
_local5 = ((icon)==null) ? 0 : (icon.width + _local1);
_local6 = ((icon)==null) ? 0 : (icon.height + _local1);
textField.visible = (label.length > 0);
if (icon != null){
icon.x = Math.round(((width - icon.width) / 2));
icon.y = Math.round(((height - icon.height) / 2));
};
if (textField.visible == false){
textField.width = 0;
textField.height = 0;
} else {
if ((((_local2 == ButtonLabelPlacement.BOTTOM)) || ((_local2 == ButtonLabelPlacement.TOP)))){
_local7 = Math.max(0, Math.min(_local3, (width - (2 * _local1))));
if ((height - 2) > _local4){
_local8 = _local4;
} else {
_local8 = (height - 2);
};
_local3 = _local7;
textField.width = _local3;
_local4 = _local8;
textField.height = _local4;
textField.x = Math.round(((width - _local3) / 2));
textField.y = Math.round(((((height - textField.height) - _local6) / 2) + ((_local2)==ButtonLabelPlacement.BOTTOM) ? _local6 : 0));
if (icon != null){
icon.y = Math.round(((_local2)==ButtonLabelPlacement.BOTTOM) ? (textField.y - _local6) : ((textField.y + textField.height) + _local1));
};
} else {
_local7 = Math.max(0, Math.min(_local3, ((width - _local5) - (2 * _local1))));
_local3 = _local7;
textField.width = _local3;
textField.x = Math.round(((((width - _local3) - _local5) / 2) + ((_local2)!=ButtonLabelPlacement.LEFT) ? _local5 : 0));
textField.y = Math.round(((height - textField.height) / 2));
if (icon != null){
icon.x = Math.round(((_local2)!=ButtonLabelPlacement.LEFT) ? (textField.x - _local5) : ((textField.x + _local3) + _local1));
};
};
};
super.drawLayout();
}
override protected function initializeAccessibility():void{
if (LabelButton.createAccessibilityImplementation != null){
LabelButton.createAccessibilityImplementation(this);
};
}
protected function drawIcon():void{
var _local1:DisplayObject;
var _local2:String;
var _local3:Object;
_local1 = icon;
_local2 = (enabled) ? mouseState : "disabled";
if (selected){
_local2 = (("selected" + _local2.substr(0, 1).toUpperCase()) + _local2.substr(1));
};
_local2 = (_local2 + "Icon");
_local3 = getStyleValue(_local2);
if (_local3 == null){
_local3 = getStyleValue("icon");
};
if (_local3 != null){
icon = getDisplayObjectInstance(_local3);
};
if (icon != null){
addChildAt(icon, 1);
};
if (((!((_local1 == null))) && (!((_local1 == icon))))){
removeChild(_local1);
};
}
public function set label(_arg1:String):void{
_label = _arg1;
if (textField.text != _label){
textField.text = _label;
dispatchEvent(new ComponentEvent(ComponentEvent.LABEL_CHANGE));
};
invalidate(InvalidationType.SIZE);
invalidate(InvalidationType.STYLES);
}
protected function drawTextFormat():void{
var _local1:Object;
var _local2:TextFormat;
var _local3:TextFormat;
_local1 = UIComponent.getStyleDefinition();
_local2 = (enabled) ? (_local1.defaultTextFormat as TextFormat) : (_local1.defaultDisabledTextFormat as TextFormat);
textField.setTextFormat(_local2);
_local3 = (getStyleValue((enabled) ? "textFormat" : "disabledTextFormat") as TextFormat);
if (_local3 != null){
textField.setTextFormat(_local3);
} else {
_local3 = _local2;
};
textField.defaultTextFormat = _local3;
setEmbedFont();
}
public static function getStyleDefinition():Object{
return (mergeStyles(defaultStyles, BaseButton.getStyleDefinition()));
}
}
}//package fl.controls
Section 20
//List (fl.controls.List)
package fl.controls {
import fl.controls.listClasses.*;
import fl.core.*;
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.geom.*;
import fl.managers.*;
import flash.ui.*;
public class List extends SelectableList implements IFocusManagerComponent {
protected var _labelField:String;// = "label"
protected var _rowHeight:Number;// = 20
protected var _cellRenderer:Object;
protected var _iconField:String;// = "icon"
protected var _labelFunction:Function;
protected var _iconFunction:Function;
private static var defaultStyles:Object = {focusRectSkin:null, focusRectPadding:null};
public static var createAccessibilityImplementation:Function;
public function List(){
_rowHeight = 20;
_labelField = "label";
_iconField = "icon";
super();
}
public function get iconField():String{
return (_iconField);
}
protected function doKeySelection(_arg1:int, _arg2:Boolean, _arg3:Boolean):void{
var _local4:Boolean;
var _local5:int;
var _local6:Array;
var _local7:int;
var _local8:int;
_local4 = false;
if (_arg2){
_local6 = [];
_local7 = lastCaretIndex;
_local8 = _arg1;
if (_local7 == -1){
_local7 = ((caretIndex)!=-1) ? caretIndex : _arg1;
};
if (_local7 > _local8){
_local8 = _local7;
_local7 = _arg1;
};
_local5 = _local7;
while (_local5 <= _local8) {
_local6.push(_local5);
_local5++;
};
selectedIndices = _local6;
caretIndex = _arg1;
_local4 = true;
} else {
selectedIndex = _arg1;
caretIndex = (lastCaretIndex = _arg1);
_local4 = true;
};
if (_local4){
dispatchEvent(new Event(Event.CHANGE));
};
invalidate(InvalidationType.DATA);
}
override protected function drawList():void{
var _local1:Rectangle;
var _local2:uint;
var _local3:uint;
var _local4:uint;
var _local5:Object;
var _local6:ICellRenderer;
var _local7:Dictionary;
var _local8:Dictionary;
var _local9:Boolean;
var _local10:String;
var _local11:Object;
var _local12:Sprite;
var _local13:String;
listHolder.x = (listHolder.y = contentPadding);
_local1 = listHolder.scrollRect;
_local1.x = _horizontalScrollPosition;
_local1.y = (Math.floor(_verticalScrollPosition) % rowHeight);
listHolder.scrollRect = _local1;
listHolder.cacheAsBitmap = useBitmapScrolling;
_local2 = Math.floor((_verticalScrollPosition / rowHeight));
_local3 = Math.min(length, ((_local2 + rowCount) + 1));
_local7 = (renderedItems = new Dictionary(true));
_local4 = _local2;
while (_local4 < _local3) {
_local7[_dataProvider.getItemAt(_local4)] = true;
_local4++;
};
_local8 = new Dictionary(true);
while (activeCellRenderers.length > 0) {
_local6 = (activeCellRenderers.pop() as ICellRenderer);
_local5 = _local6.data;
if ((((_local7[_local5] == null)) || ((invalidItems[_local5] == true)))){
availableCellRenderers.push(_local6);
} else {
_local8[_local5] = _local6;
invalidItems[_local5] = true;
};
list.removeChild((_local6 as DisplayObject));
};
invalidItems = new Dictionary(true);
_local4 = _local2;
while (_local4 < _local3) {
_local9 = false;
_local5 = _dataProvider.getItemAt(_local4);
if (_local8[_local5] != null){
_local9 = true;
_local6 = _local8[_local5];
delete _local8[_local5];
} else {
if (availableCellRenderers.length > 0){
_local6 = (availableCellRenderers.pop() as ICellRenderer);
} else {
_local6 = (getDisplayObjectInstance(getStyleValue("cellRenderer")) as ICellRenderer);
_local12 = (_local6 as Sprite);
if (_local12 != null){
_local12.addEventListener(MouseEvent.CLICK, handleCellRendererClick, false, 0, true);
_local12.addEventListener(MouseEvent.ROLL_OVER, handleCellRendererMouseEvent, false, 0, true);
_local12.addEventListener(MouseEvent.ROLL_OUT, handleCellRendererMouseEvent, false, 0, true);
_local12.addEventListener(Event.CHANGE, handleCellRendererChange, false, 0, true);
_local12.doubleClickEnabled = true;
_local12.addEventListener(MouseEvent.DOUBLE_CLICK, handleCellRendererDoubleClick, false, 0, true);
if (_local12["setStyle"] != null){
for (_local13 in rendererStyles) {
var _local16 = _local12;
_local16["setStyle"](_local13, rendererStyles[_local13]);
};
};
};
};
};
list.addChild((_local6 as Sprite));
activeCellRenderers.push(_local6);
_local6.y = (rowHeight * (_local4 - _local2));
_local6.setSize((availableWidth + _maxHorizontalScrollPosition), rowHeight);
_local10 = itemToLabel(_local5);
_local11 = null;
if (_iconFunction != null){
_local11 = _iconFunction(_local5);
} else {
if (_iconField != null){
_local11 = _local5[_iconField];
};
};
if (!_local9){
_local6.data = _local5;
};
_local6.listData = new ListData(_local10, _local11, this, _local4, _local4, 0);
_local6.selected = !((_selectedIndices.indexOf(_local4) == -1));
if ((_local6 is UIComponent)){
(_local6 as UIComponent).drawNow();
};
_local4++;
};
}
public function get iconFunction():Function{
return (_iconFunction);
}
public function set iconField(_arg1:String):void{
if (_arg1 == _iconField){
return;
};
_iconField = _arg1;
invalidate(InvalidationType.DATA);
}
override protected function keyDownHandler(_arg1:KeyboardEvent):void{
var _local2:int;
if (!selectable){
return;
};
switch (_arg1.keyCode){
case Keyboard.UP:
case Keyboard.DOWN:
case Keyboard.END:
case Keyboard.HOME:
case Keyboard.PAGE_UP:
case Keyboard.PAGE_DOWN:
moveSelectionVertically(_arg1.keyCode, ((_arg1.shiftKey) && (_allowMultipleSelection)), ((_arg1.ctrlKey) && (_allowMultipleSelection)));
break;
case Keyboard.LEFT:
case Keyboard.RIGHT:
moveSelectionHorizontally(_arg1.keyCode, ((_arg1.shiftKey) && (_allowMultipleSelection)), ((_arg1.ctrlKey) && (_allowMultipleSelection)));
break;
case Keyboard.SPACE:
if (caretIndex == -1){
caretIndex = 0;
};
doKeySelection(caretIndex, _arg1.shiftKey, _arg1.ctrlKey);
scrollToSelected();
break;
default:
_local2 = getNextIndexAtLetter(String.fromCharCode(_arg1.keyCode), selectedIndex);
if (_local2 > -1){
selectedIndex = _local2;
scrollToSelected();
};
break;
};
_arg1.stopPropagation();
}
override public function itemToLabel(_arg1:Object):String{
if (_labelFunction != null){
return (String(_labelFunction(_arg1)));
};
return (((_arg1[_labelField])!=null) ? String(_arg1[_labelField]) : "");
}
public function get labelField():String{
return (_labelField);
}
override protected function moveSelectionVertically(_arg1:uint, _arg2:Boolean, _arg3:Boolean):void{
var _local4:int;
var _local5:int;
var _local6:int;
_local4 = Math.max(Math.floor((calculateAvailableHeight() / rowHeight)), 1);
_local5 = -1;
_local6 = 0;
switch (_arg1){
case Keyboard.UP:
if (caretIndex > 0){
_local5 = (caretIndex - 1);
};
break;
case Keyboard.DOWN:
if (caretIndex < (length - 1)){
_local5 = (caretIndex + 1);
};
break;
case Keyboard.PAGE_UP:
if (caretIndex > 0){
_local5 = Math.max((caretIndex - _local4), 0);
};
break;
case Keyboard.PAGE_DOWN:
if (caretIndex < (length - 1)){
_local5 = Math.min((caretIndex + _local4), (length - 1));
};
break;
case Keyboard.HOME:
if (caretIndex > 0){
_local5 = 0;
};
break;
case Keyboard.END:
if (caretIndex < (length - 1)){
_local5 = (length - 1);
};
break;
};
if (_local5 >= 0){
doKeySelection(_local5, _arg2, _arg3);
scrollToSelected();
};
}
public function set labelField(_arg1:String):void{
if (_arg1 == _labelField){
return;
};
_labelField = _arg1;
invalidate(InvalidationType.DATA);
}
public function set rowCount(_arg1:uint):void{
var _local2:Number;
var _local3:Number;
_local2 = Number(getStyleValue("contentPadding"));
_local3 = ((((_horizontalScrollPolicy == ScrollPolicy.ON)) || ((((_horizontalScrollPolicy == ScrollPolicy.AUTO)) && ((_maxHorizontalScrollPosition > 0)))))) ? 15 : 0;
height = (((rowHeight * _arg1) + (2 * _local2)) + _local3);
}
override protected function setHorizontalScrollPosition(_arg1:Number, _arg2:Boolean=false):void{
list.x = -(_arg1);
super.setHorizontalScrollPosition(_arg1, true);
}
public function set iconFunction(_arg1:Function):void{
if (_iconFunction == _arg1){
return;
};
_iconFunction = _arg1;
invalidate(InvalidationType.DATA);
}
public function get labelFunction():Function{
return (_labelFunction);
}
override protected function moveSelectionHorizontally(_arg1:uint, _arg2:Boolean, _arg3:Boolean):void{
}
override protected function setVerticalScrollPosition(_arg1:Number, _arg2:Boolean=false):void{
invalidate(InvalidationType.SCROLL);
super.setVerticalScrollPosition(_arg1, true);
}
protected function calculateAvailableHeight():Number{
var _local1:Number;
_local1 = Number(getStyleValue("contentPadding"));
return (((height - (_local1 * 2)) - ((((_horizontalScrollPolicy == ScrollPolicy.ON)) || ((((_horizontalScrollPolicy == ScrollPolicy.AUTO)) && ((_maxHorizontalScrollPosition > 0)))))) ? 15 : 0));
}
override protected function draw():void{
var _local1:Boolean;
_local1 = !((contentHeight == (rowHeight * length)));
contentHeight = (rowHeight * length);
if (isInvalid(InvalidationType.STYLES)){
setStyles();
drawBackground();
if (contentPadding != getStyleValue("contentPadding")){
invalidate(InvalidationType.SIZE, false);
};
if (_cellRenderer != getStyleValue("cellRenderer")){
_invalidateList();
_cellRenderer = getStyleValue("cellRenderer");
};
};
if (((isInvalid(InvalidationType.SIZE, InvalidationType.STATE)) || (_local1))){
drawLayout();
};
if (isInvalid(InvalidationType.RENDERER_STYLES)){
updateRendererStyles();
};
if (isInvalid(InvalidationType.STYLES, InvalidationType.SIZE, InvalidationType.DATA, InvalidationType.SCROLL, InvalidationType.SELECTED)){
drawList();
};
updateChildren();
validate();
}
override protected function configUI():void{
useFixedHorizontalScrolling = true;
_horizontalScrollPolicy = ScrollPolicy.AUTO;
_verticalScrollPolicy = ScrollPolicy.AUTO;
super.configUI();
}
override public function get rowCount():uint{
return (Math.ceil((calculateAvailableHeight() / rowHeight)));
}
override protected function initializeAccessibility():void{
if (List.createAccessibilityImplementation != null){
List.createAccessibilityImplementation(this);
};
}
override public function scrollToIndex(_arg1:int):void{
var _local2:uint;
var _local3:uint;
drawNow();
_local2 = (Math.floor(((_verticalScrollPosition + availableHeight) / rowHeight)) - 1);
_local3 = Math.ceil((_verticalScrollPosition / rowHeight));
if (_arg1 < _local3){
verticalScrollPosition = (_arg1 * rowHeight);
} else {
if (_arg1 > _local2){
verticalScrollPosition = (((_arg1 + 1) * rowHeight) - availableHeight);
};
};
}
public function get rowHeight():Number{
return (_rowHeight);
}
public function set labelFunction(_arg1:Function):void{
if (_labelFunction == _arg1){
return;
};
_labelFunction = _arg1;
invalidate(InvalidationType.DATA);
}
public function set rowHeight(_arg1:Number):void{
_rowHeight = _arg1;
invalidate(InvalidationType.SIZE);
}
public static function getStyleDefinition():Object{
return (mergeStyles(defaultStyles, SelectableList.getStyleDefinition()));
}
}
}//package fl.controls
Section 21
//ScrollBar (fl.controls.ScrollBar)
package fl.controls {
import fl.core.*;
import flash.events.*;
import fl.events.*;
public class ScrollBar extends UIComponent {
private var _direction:String;// = "vertical"
protected var inDrag:Boolean;// = false
protected var upArrow:BaseButton;
private var _pageScrollSize:Number;// = 0
protected var downArrow:BaseButton;
private var _pageSize:Number;// = 10
private var thumbScrollOffset:Number;
private var _maxScrollPosition:Number;// = 0
private var _scrollPosition:Number;// = 0
protected var track:BaseButton;
private var _minScrollPosition:Number;// = 0
private var _lineScrollSize:Number;// = 1
protected var thumb:LabelButton;
protected static const THUMB_STYLES:Object = {disabledSkin:"thumbDisabledSkin", downSkin:"thumbDownSkin", overSkin:"thumbOverSkin", upSkin:"thumbUpSkin", icon:"thumbIcon", textPadding:0};
public static const WIDTH:Number = 15;
protected static const DOWN_ARROW_STYLES:Object = {disabledSkin:"downArrowDisabledSkin", downSkin:"downArrowDownSkin", overSkin:"downArrowOverSkin", upSkin:"downArrowUpSkin", repeatDelay:"repeatDelay", repeatInterval:"repeatInterval"};
protected static const UP_ARROW_STYLES:Object = {disabledSkin:"upArrowDisabledSkin", downSkin:"upArrowDownSkin", overSkin:"upArrowOverSkin", upSkin:"upArrowUpSkin", repeatDelay:"repeatDelay", repeatInterval:"repeatInterval"};
protected static const TRACK_STYLES:Object = {disabledSkin:"trackDisabledSkin", downSkin:"trackDownSkin", overSkin:"trackOverSkin", upSkin:"trackUpSkin", repeatDelay:"repeatDelay", repeatInterval:"repeatInterval"};
private static var defaultStyles:Object = {downArrowDisabledSkin:"ScrollArrowDown_disabledSkin", downArrowDownSkin:"ScrollArrowDown_downSkin", downArrowOverSkin:"ScrollArrowDown_overSkin", downArrowUpSkin:"ScrollArrowDown_upSkin", thumbDisabledSkin:"ScrollThumb_upSkin", thumbDownSkin:"ScrollThumb_downSkin", thumbOverSkin:"ScrollThumb_overSkin", thumbUpSkin:"ScrollThumb_upSkin", trackDisabledSkin:"ScrollTrack_skin", trackDownSkin:"ScrollTrack_skin", trackOverSkin:"ScrollTrack_skin", trackUpSkin:"ScrollTrack_skin", upArrowDisabledSkin:"ScrollArrowUp_disabledSkin", upArrowDownSkin:"ScrollArrowUp_downSkin", upArrowOverSkin:"ScrollArrowUp_overSkin", upArrowUpSkin:"ScrollArrowUp_upSkin", thumbIcon:"ScrollBar_thumbIcon", repeatDelay:500, repeatInterval:35};
public function ScrollBar(){
_pageSize = 10;
_pageScrollSize = 0;
_lineScrollSize = 1;
_minScrollPosition = 0;
_maxScrollPosition = 0;
_scrollPosition = 0;
_direction = ScrollBarDirection.VERTICAL;
inDrag = false;
super();
setStyles();
focusEnabled = false;
}
public function get minScrollPosition():Number{
return (_minScrollPosition);
}
public function set minScrollPosition(_arg1:Number):void{
setScrollProperties(_pageSize, _arg1, _maxScrollPosition);
}
public function setScrollPosition(_arg1:Number, _arg2:Boolean=true):void{
var _local3:Number;
_local3 = scrollPosition;
_scrollPosition = Math.max(_minScrollPosition, Math.min(_maxScrollPosition, _arg1));
if (_local3 == _scrollPosition){
return;
};
if (_arg2){
dispatchEvent(new ScrollEvent(_direction, (scrollPosition - _local3), scrollPosition));
};
updateThumb();
}
public function set scrollPosition(_arg1:Number):void{
setScrollPosition(_arg1, true);
}
public function get pageScrollSize():Number{
return (((_pageScrollSize)==0) ? _pageSize : _pageScrollSize);
}
public function set pageSize(_arg1:Number):void{
if (_arg1 > 0){
_pageSize = _arg1;
};
}
public function setScrollProperties(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=0):void{
this.pageSize = _arg1;
_minScrollPosition = _arg2;
_maxScrollPosition = _arg3;
if (_arg4 >= 0){
_pageScrollSize = _arg4;
};
enabled = (_maxScrollPosition > _minScrollPosition);
setScrollPosition(_scrollPosition, false);
updateThumb();
}
override public function set enabled(_arg1:Boolean):void{
super.enabled = _arg1;
downArrow.enabled = (track.enabled = (thumb.enabled = (upArrow.enabled = ((enabled) && ((_maxScrollPosition > _minScrollPosition))))));
updateThumb();
}
protected function updateThumb():void{
var _local1:Number;
_local1 = ((_maxScrollPosition - _minScrollPosition) + _pageSize);
if ((((((track.height <= 12)) || ((_maxScrollPosition <= _minScrollPosition)))) || ((((_local1 == 0)) || (isNaN(_local1)))))){
thumb.height = 12;
thumb.visible = false;
} else {
thumb.height = Math.max(13, ((_pageSize / _local1) * track.height));
thumb.y = (track.y + ((track.height - thumb.height) * ((_scrollPosition - _minScrollPosition) / (_maxScrollPosition - _minScrollPosition))));
thumb.visible = enabled;
};
}
protected function thumbPressHandler(_arg1:MouseEvent):void{
inDrag = true;
thumbScrollOffset = (mouseY - thumb.y);
thumb.mouseStateLocked = true;
mouseChildren = false;
stage.addEventListener(MouseEvent.MOUSE_MOVE, handleThumbDrag, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_UP, thumbReleaseHandler, false, 0, true);
}
protected function thumbReleaseHandler(_arg1:MouseEvent):void{
inDrag = false;
mouseChildren = true;
thumb.mouseStateLocked = false;
stage.removeEventListener(MouseEvent.MOUSE_MOVE, handleThumbDrag);
stage.removeEventListener(MouseEvent.MOUSE_UP, thumbReleaseHandler);
}
public function set pageScrollSize(_arg1:Number):void{
if (_arg1 >= 0){
_pageScrollSize = _arg1;
};
}
protected function handleThumbDrag(_arg1:MouseEvent):void{
var _local2:Number;
_local2 = Math.max(0, Math.min((track.height - thumb.height), ((mouseY - track.y) - thumbScrollOffset)));
setScrollPosition((((_local2 / (track.height - thumb.height)) * (_maxScrollPosition - _minScrollPosition)) + _minScrollPosition));
}
public function set direction(_arg1:String):void{
var _local2:Boolean;
if (_direction == _arg1){
return;
};
_direction = _arg1;
if (isLivePreview){
return;
};
setScaleY(1);
_local2 = (_direction == ScrollBarDirection.HORIZONTAL);
if (((_local2) && (componentInspectorSetting))){
if (rotation == 90){
return;
};
setScaleX(-1);
rotation = -90;
};
if (!componentInspectorSetting){
if (((_local2) && ((rotation == 0)))){
rotation = -90;
setScaleX(-1);
} else {
if (((!(_local2)) && ((rotation == -90)))){
rotation = 0;
setScaleX(1);
};
};
};
invalidate(InvalidationType.SIZE);
}
public function set lineScrollSize(_arg1:Number):void{
if (_arg1 > 0){
_lineScrollSize = _arg1;
};
}
override public function get height():Number{
return (((_direction)==ScrollBarDirection.HORIZONTAL) ? super.width : super.height);
}
protected function scrollPressHandler(_arg1:ComponentEvent):void{
var _local2:Number;
var _local3:Number;
_arg1.stopImmediatePropagation();
if (_arg1.currentTarget == upArrow){
setScrollPosition((_scrollPosition - _lineScrollSize));
} else {
if (_arg1.currentTarget == downArrow){
setScrollPosition((_scrollPosition + _lineScrollSize));
} else {
_local2 = (((track.mouseY / track.height) * (_maxScrollPosition - _minScrollPosition)) + _minScrollPosition);
_local3 = ((pageScrollSize)==0) ? pageSize : pageScrollSize;
if (_scrollPosition < _local2){
setScrollPosition(Math.min(_local2, (_scrollPosition + _local3)));
} else {
if (_scrollPosition > _local2){
setScrollPosition(Math.max(_local2, (_scrollPosition - _local3)));
};
};
};
};
}
public function get pageSize():Number{
return (_pageSize);
}
public function set maxScrollPosition(_arg1:Number):void{
setScrollProperties(_pageSize, _minScrollPosition, _arg1);
}
public function get scrollPosition():Number{
return (_scrollPosition);
}
override public function get enabled():Boolean{
return (super.enabled);
}
override protected function draw():void{
var _local1:Number;
if (isInvalid(InvalidationType.SIZE)){
_local1 = super.height;
downArrow.move(0, Math.max(upArrow.height, (_local1 - downArrow.height)));
track.setSize(WIDTH, Math.max(0, (_local1 - (downArrow.height + upArrow.height))));
updateThumb();
};
if (isInvalid(InvalidationType.STYLES, InvalidationType.STATE)){
setStyles();
};
downArrow.drawNow();
upArrow.drawNow();
track.drawNow();
thumb.drawNow();
validate();
}
override protected function configUI():void{
super.configUI();
track = new BaseButton();
track.move(0, 14);
track.useHandCursor = false;
track.autoRepeat = true;
track.focusEnabled = false;
addChild(track);
thumb = new LabelButton();
thumb.label = "";
thumb.setSize(WIDTH, 15);
thumb.move(0, 15);
thumb.focusEnabled = false;
addChild(thumb);
downArrow = new BaseButton();
downArrow.setSize(WIDTH, 14);
downArrow.autoRepeat = true;
downArrow.focusEnabled = false;
addChild(downArrow);
upArrow = new BaseButton();
upArrow.setSize(WIDTH, 14);
upArrow.move(0, 0);
upArrow.autoRepeat = true;
upArrow.focusEnabled = false;
addChild(upArrow);
upArrow.addEventListener(ComponentEvent.BUTTON_DOWN, scrollPressHandler, false, 0, true);
downArrow.addEventListener(ComponentEvent.BUTTON_DOWN, scrollPressHandler, false, 0, true);
track.addEventListener(ComponentEvent.BUTTON_DOWN, scrollPressHandler, false, 0, true);
thumb.addEventListener(MouseEvent.MOUSE_DOWN, thumbPressHandler, false, 0, true);
enabled = false;
}
public function get direction():String{
return (_direction);
}
public function get lineScrollSize():Number{
return (_lineScrollSize);
}
override public function setSize(_arg1:Number, _arg2:Number):void{
if (_direction == ScrollBarDirection.HORIZONTAL){
super.setSize(_arg2, _arg1);
} else {
super.setSize(_arg1, _arg2);
};
}
public function get maxScrollPosition():Number{
return (_maxScrollPosition);
}
override public function get width():Number{
return (((_direction)==ScrollBarDirection.HORIZONTAL) ? super.height : super.width);
}
protected function setStyles():void{
copyStylesToChild(downArrow, DOWN_ARROW_STYLES);
copyStylesToChild(thumb, THUMB_STYLES);
copyStylesToChild(track, TRACK_STYLES);
copyStylesToChild(upArrow, UP_ARROW_STYLES);
}
public static function getStyleDefinition():Object{
return (defaultStyles);
}
}
}//package fl.controls
Section 22
//ScrollBarDirection (fl.controls.ScrollBarDirection)
package fl.controls {
public class ScrollBarDirection {
public static const HORIZONTAL:String = "horizontal";
public static const VERTICAL:String = "vertical";
}
}//package fl.controls
Section 23
//ScrollPolicy (fl.controls.ScrollPolicy)
package fl.controls {
public class ScrollPolicy {
public static const OFF:String = "off";
public static const ON:String = "on";
public static const AUTO:String = "auto";
}
}//package fl.controls
Section 24
//SelectableList (fl.controls.SelectableList)
package fl.controls {
import fl.controls.listClasses.*;
import fl.core.*;
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import fl.data.*;
import fl.managers.*;
import fl.events.*;
import fl.containers.*;
import flash.ui.*;
public class SelectableList extends BaseScrollPane implements IFocusManagerComponent {
protected var invalidItems:Dictionary;
protected var renderedItems:Dictionary;
protected var listHolder:Sprite;
protected var _allowMultipleSelection:Boolean;// = false
protected var lastCaretIndex:int;// = -1
protected var _selectedIndices:Array;
protected var availableCellRenderers:Array;
protected var list:Sprite;
protected var caretIndex:int;// = -1
protected var updatedRendererStyles:Object;
protected var preChangeItems:Array;
protected var activeCellRenderers:Array;
protected var rendererStyles:Object;
protected var _verticalScrollPosition:Number;
protected var _dataProvider:DataProvider;
protected var _horizontalScrollPosition:Number;
private var collectionItemImport:SimpleCollectionItem;
protected var _selectable:Boolean;// = true
private static var defaultStyles:Object = {skin:"List_skin", cellRenderer:CellRenderer, contentPadding:null, disabledAlpha:null};
public static var createAccessibilityImplementation:Function;
public function SelectableList(){
_allowMultipleSelection = false;
_selectable = true;
caretIndex = -1;
lastCaretIndex = -1;
super();
activeCellRenderers = [];
availableCellRenderers = [];
invalidItems = new Dictionary(true);
renderedItems = new Dictionary(true);
_selectedIndices = [];
if (dataProvider == null){
dataProvider = new DataProvider();
};
verticalScrollPolicy = ScrollPolicy.AUTO;
rendererStyles = {};
updatedRendererStyles = {};
}
protected function drawList():void{
}
public function set allowMultipleSelection(_arg1:Boolean):void{
if (_arg1 == _allowMultipleSelection){
return;
};
_allowMultipleSelection = _arg1;
if (((!(_arg1)) && ((_selectedIndices.length > 1)))){
_selectedIndices = [_selectedIndices.pop()];
invalidate(InvalidationType.DATA);
};
}
public function sortItemsOn(_arg1:String, _arg2:Object=null){
return (_dataProvider.sortOn(_arg1, _arg2));
}
public function removeItemAt(_arg1:uint):Object{
return (_dataProvider.removeItemAt(_arg1));
}
public function get selectedItem():Object{
return (((_selectedIndices.length)==0) ? null : _dataProvider.getItemAt(selectedIndex));
}
override protected function keyDownHandler(_arg1:KeyboardEvent):void{
if (!selectable){
return;
};
switch (_arg1.keyCode){
case Keyboard.UP:
case Keyboard.DOWN:
case Keyboard.END:
case Keyboard.HOME:
case Keyboard.PAGE_UP:
case Keyboard.PAGE_DOWN:
moveSelectionVertically(_arg1.keyCode, ((_arg1.shiftKey) && (_allowMultipleSelection)), ((_arg1.ctrlKey) && (_allowMultipleSelection)));
_arg1.stopPropagation();
break;
case Keyboard.LEFT:
case Keyboard.RIGHT:
moveSelectionHorizontally(_arg1.keyCode, ((_arg1.shiftKey) && (_allowMultipleSelection)), ((_arg1.ctrlKey) && (_allowMultipleSelection)));
_arg1.stopPropagation();
break;
};
}
public function get selectable():Boolean{
return (_selectable);
}
public function itemToCellRenderer(_arg1:Object):ICellRenderer{
var _local2:*;
var _local3:ICellRenderer;
if (_arg1 != null){
for (_local2 in activeCellRenderers) {
_local3 = (activeCellRenderers[_local2] as ICellRenderer);
if (_local3.data == _arg1){
return (_local3);
};
};
};
return (null);
}
public function getNextIndexAtLetter(_arg1:String, _arg2:int=-1):int{
var _local3:int;
var _local4:Number;
var _local5:Number;
var _local6:Object;
var _local7:String;
if (length == 0){
return (-1);
};
_arg1 = _arg1.toUpperCase();
_local3 = (length - 1);
_local4 = 0;
while (_local4 < _local3) {
_local5 = ((_arg2 + 1) + _local4);
if (_local5 > (length - 1)){
_local5 = (_local5 - length);
};
_local6 = getItemAt(_local5);
if (_local6 == null){
break;
};
_local7 = itemToLabel(_local6);
if (_local7 == null){
} else {
if (_local7.charAt(0).toUpperCase() == _arg1){
return (_local5);
};
};
_local4++;
};
return (-1);
}
public function invalidateList():void{
_invalidateList();
invalidate(InvalidationType.DATA);
}
override public function set enabled(_arg1:Boolean):void{
super.enabled = _arg1;
list.mouseChildren = _enabled;
}
public function get selectedIndices():Array{
return (_selectedIndices.concat());
}
public function set selectable(_arg1:Boolean):void{
if (_arg1 == _selectable){
return;
};
if (!_arg1){
selectedIndices = [];
};
_selectable = _arg1;
}
public function itemToLabel(_arg1:Object):String{
return (_arg1["label"]);
}
public function addItemAt(_arg1:Object, _arg2:uint):void{
_dataProvider.addItemAt(_arg1, _arg2);
invalidateList();
}
public function replaceItemAt(_arg1:Object, _arg2:uint):Object{
return (_dataProvider.replaceItemAt(_arg1, _arg2));
}
protected function handleDataChange(_arg1:DataChangeEvent):void{
var _local2:int;
var _local3:int;
var _local4:String;
var _local5:uint;
_local2 = _arg1.startIndex;
_local3 = _arg1.endIndex;
_local4 = _arg1.changeType;
if (_local4 == DataChangeType.INVALIDATE_ALL){
clearSelection();
invalidateList();
} else {
if (_local4 == DataChangeType.INVALIDATE){
_local5 = 0;
while (_local5 < _arg1.items.length) {
invalidateItem(_arg1.items[_local5]);
_local5++;
};
} else {
if (_local4 == DataChangeType.ADD){
_local5 = 0;
while (_local5 < _selectedIndices.length) {
if (_selectedIndices[_local5] >= _local2){
_selectedIndices[_local5] = (_selectedIndices[_local5] + (_local2 - _local3));
};
_local5++;
};
} else {
if (_local4 == DataChangeType.REMOVE){
_local5 = 0;
while (_local5 < _selectedIndices.length) {
if (_selectedIndices[_local5] >= _local2){
if (_selectedIndices[_local5] <= _local3){
delete _selectedIndices[_local5];
} else {
_selectedIndices[_local5] = (_selectedIndices[_local5] - ((_local2 - _local3) + 1));
};
};
_local5++;
};
} else {
if (_local4 == DataChangeType.REMOVE_ALL){
clearSelection();
} else {
if (_local4 == DataChangeType.REPLACE){
} else {
selectedItems = preChangeItems;
preChangeItems = null;
};
};
};
};
};
};
invalidate(InvalidationType.DATA);
}
protected function _invalidateList():void{
availableCellRenderers = [];
while (activeCellRenderers.length > 0) {
list.removeChild((activeCellRenderers.pop() as DisplayObject));
};
}
protected function updateRendererStyles():void{
var _local1:Array;
var _local2:uint;
var _local3:uint;
var _local4:String;
_local1 = availableCellRenderers.concat(activeCellRenderers);
_local2 = _local1.length;
_local3 = 0;
while (_local3 < _local2) {
if (_local1[_local3].setStyle == null){
} else {
for (_local4 in updatedRendererStyles) {
_local1[_local3].setStyle(_local4, updatedRendererStyles[_local4]);
};
_local1[_local3].drawNow();
};
_local3++;
};
updatedRendererStyles = {};
}
public function set selectedItem(_arg1:Object):void{
var _local2:int;
_local2 = _dataProvider.getItemIndex(_arg1);
selectedIndex = _local2;
}
public function sortItems(... _args){
return (_dataProvider.sort.apply(_dataProvider, _args));
}
public function removeAll():void{
_dataProvider.removeAll();
}
protected function handleCellRendererChange(_arg1:Event):void{
var _local2:ICellRenderer;
var _local3:uint;
_local2 = (_arg1.currentTarget as ICellRenderer);
_local3 = _local2.listData.index;
_dataProvider.invalidateItemAt(_local3);
}
protected function moveSelectionVertically(_arg1:uint, _arg2:Boolean, _arg3:Boolean):void{
}
override protected function setHorizontalScrollPosition(_arg1:Number, _arg2:Boolean=false):void{
var _local3:Number;
if (_arg1 == _horizontalScrollPosition){
return;
};
_local3 = (_arg1 - _horizontalScrollPosition);
_horizontalScrollPosition = _arg1;
if (_arg2){
dispatchEvent(new ScrollEvent(ScrollBarDirection.HORIZONTAL, _local3, _arg1));
};
}
public function scrollToSelected():void{
scrollToIndex(selectedIndex);
}
public function invalidateItem(_arg1:Object):void{
if (renderedItems[_arg1] == null){
return;
};
invalidItems[_arg1] = true;
invalidate(InvalidationType.DATA);
}
protected function handleCellRendererClick(_arg1:MouseEvent):void{
var _local2:ICellRenderer;
var _local3:uint;
var _local4:int;
var _local5:int;
var _local6:uint;
if (!_enabled){
return;
};
_local2 = (_arg1.currentTarget as ICellRenderer);
_local3 = _local2.listData.index;
if (((!(dispatchEvent(new ListEvent(ListEvent.ITEM_CLICK, false, true, _local2.listData.column, _local2.listData.row, _local3, _local2.data)))) || (!(_selectable)))){
return;
};
_local4 = selectedIndices.indexOf(_local3);
if (!_allowMultipleSelection){
if (_local4 != -1){
return;
};
_local2.selected = true;
_selectedIndices = [_local3];
lastCaretIndex = (caretIndex = _local3);
} else {
if (_arg1.shiftKey){
_local6 = ((_selectedIndices.length)>0) ? _selectedIndices[0] : _local3;
_selectedIndices = [];
if (_local6 > _local3){
_local5 = _local6;
while (_local5 >= _local3) {
_selectedIndices.push(_local5);
_local5--;
};
} else {
_local5 = _local6;
while (_local5 <= _local3) {
_selectedIndices.push(_local5);
_local5++;
};
};
caretIndex = _local3;
} else {
if (_arg1.ctrlKey){
if (_local4 != -1){
_local2.selected = false;
_selectedIndices.splice(_local4, 1);
} else {
_local2.selected = true;
_selectedIndices.push(_local3);
};
caretIndex = _local3;
} else {
_selectedIndices = [_local3];
lastCaretIndex = (caretIndex = _local3);
};
};
};
dispatchEvent(new Event(Event.CHANGE));
invalidate(InvalidationType.DATA);
}
public function get length():uint{
return (_dataProvider.length);
}
public function get allowMultipleSelection():Boolean{
return (_allowMultipleSelection);
}
protected function onPreChange(_arg1:DataChangeEvent):void{
switch (_arg1.changeType){
case DataChangeType.REMOVE:
case DataChangeType.ADD:
case DataChangeType.INVALIDATE:
case DataChangeType.REMOVE_ALL:
case DataChangeType.REPLACE:
case DataChangeType.INVALIDATE_ALL:
break;
default:
preChangeItems = selectedItems;
break;
};
}
public function getRendererStyle(_arg1:String, _arg2:int=-1):Object{
return (rendererStyles[_arg1]);
}
override protected function setVerticalScrollPosition(_arg1:Number, _arg2:Boolean=false):void{
var _local3:Number;
if (_arg1 == _verticalScrollPosition){
return;
};
_local3 = (_arg1 - _verticalScrollPosition);
_verticalScrollPosition = _arg1;
if (_arg2){
dispatchEvent(new ScrollEvent(ScrollBarDirection.VERTICAL, _local3, _arg1));
};
}
protected function moveSelectionHorizontally(_arg1:uint, _arg2:Boolean, _arg3:Boolean):void{
}
public function set selectedIndices(_arg1:Array):void{
if (!_selectable){
return;
};
_selectedIndices = ((_arg1)==null) ? [] : _arg1.concat();
invalidate(InvalidationType.SELECTED);
}
public function get selectedIndex():int{
return (((_selectedIndices.length)==0) ? -1 : _selectedIndices[(_selectedIndices.length - 1)]);
}
override protected function draw():void{
super.draw();
}
override protected function configUI():void{
super.configUI();
listHolder = new Sprite();
addChild(listHolder);
listHolder.scrollRect = contentScrollRect;
list = new Sprite();
listHolder.addChild(list);
}
public function addItem(_arg1:Object):void{
_dataProvider.addItem(_arg1);
invalidateList();
}
protected function handleCellRendererMouseEvent(_arg1:MouseEvent):void{
var _local2:ICellRenderer;
var _local3:String;
_local2 = (_arg1.target as ICellRenderer);
_local3 = ((_arg1.type)==MouseEvent.ROLL_OVER) ? ListEvent.ITEM_ROLL_OVER : ListEvent.ITEM_ROLL_OUT;
dispatchEvent(new ListEvent(_local3, false, false, _local2.listData.column, _local2.listData.row, _local2.listData.index, _local2.data));
}
public function clearRendererStyle(_arg1:String, _arg2:int=-1):void{
delete rendererStyles[_arg1];
updatedRendererStyles[_arg1] = null;
invalidate(InvalidationType.RENDERER_STYLES);
}
protected function handleCellRendererDoubleClick(_arg1:MouseEvent):void{
var _local2:ICellRenderer;
var _local3:uint;
if (!_enabled){
return;
};
_local2 = (_arg1.currentTarget as ICellRenderer);
_local3 = _local2.listData.index;
dispatchEvent(new ListEvent(ListEvent.ITEM_DOUBLE_CLICK, false, true, _local2.listData.column, _local2.listData.row, _local3, _local2.data));
}
public function get rowCount():uint{
return (0);
}
public function isItemSelected(_arg1:Object):Boolean{
return ((selectedItems.indexOf(_arg1) > -1));
}
public function set dataProvider(_arg1:DataProvider):void{
if (_dataProvider != null){
_dataProvider.removeEventListener(DataChangeEvent.DATA_CHANGE, handleDataChange);
_dataProvider.removeEventListener(DataChangeEvent.PRE_DATA_CHANGE, onPreChange);
};
_dataProvider = _arg1;
_dataProvider.addEventListener(DataChangeEvent.DATA_CHANGE, handleDataChange, false, 0, true);
_dataProvider.addEventListener(DataChangeEvent.PRE_DATA_CHANGE, onPreChange, false, 0, true);
clearSelection();
invalidateList();
}
override protected function drawLayout():void{
super.drawLayout();
contentScrollRect = listHolder.scrollRect;
contentScrollRect.width = availableWidth;
contentScrollRect.height = availableHeight;
listHolder.scrollRect = contentScrollRect;
}
public function getItemAt(_arg1:uint):Object{
return (_dataProvider.getItemAt(_arg1));
}
override protected function initializeAccessibility():void{
if (SelectableList.createAccessibilityImplementation != null){
SelectableList.createAccessibilityImplementation(this);
};
}
public function scrollToIndex(_arg1:int):void{
}
public function removeItem(_arg1:Object):Object{
return (_dataProvider.removeItem(_arg1));
}
public function get dataProvider():DataProvider{
return (_dataProvider);
}
public function set maxHorizontalScrollPosition(_arg1:Number):void{
_maxHorizontalScrollPosition = _arg1;
invalidate(InvalidationType.SIZE);
}
public function setRendererStyle(_arg1:String, _arg2:Object, _arg3:uint=0):void{
if (rendererStyles[_arg1] == _arg2){
return;
};
updatedRendererStyles[_arg1] = _arg2;
rendererStyles[_arg1] = _arg2;
invalidate(InvalidationType.RENDERER_STYLES);
}
public function invalidateItemAt(_arg1:uint):void{
var _local2:Object;
_local2 = _dataProvider.getItemAt(_arg1);
if (_local2 != null){
invalidateItem(_local2);
};
}
public function set selectedItems(_arg1:Array):void{
var _local2:Array;
var _local3:uint;
var _local4:int;
if (_arg1 == null){
selectedIndices = null;
return;
};
_local2 = [];
_local3 = 0;
while (_local3 < _arg1.length) {
_local4 = _dataProvider.getItemIndex(_arg1[_local3]);
if (_local4 != -1){
_local2.push(_local4);
};
_local3++;
};
selectedIndices = _local2;
}
public function clearSelection():void{
selectedIndex = -1;
}
override public function get maxHorizontalScrollPosition():Number{
return (_maxHorizontalScrollPosition);
}
public function get selectedItems():Array{
var _local1:Array;
var _local2:uint;
_local1 = [];
_local2 = 0;
while (_local2 < _selectedIndices.length) {
_local1.push(_dataProvider.getItemAt(_selectedIndices[_local2]));
_local2++;
};
return (_local1);
}
public function set selectedIndex(_arg1:int):void{
selectedIndices = ((_arg1)==-1) ? null : [_arg1];
}
public static function getStyleDefinition():Object{
return (mergeStyles(defaultStyles, BaseScrollPane.getStyleDefinition()));
}
}
}//package fl.controls
Section 25
//TextInput (fl.controls.TextInput)
package fl.controls {
import fl.core.*;
import flash.display.*;
import flash.events.*;
import flash.text.*;
import fl.managers.*;
import fl.events.*;
import flash.ui.*;
public class TextInput extends UIComponent implements IFocusManagerComponent {
protected var _html:Boolean;// = false
protected var _savedHTML:String;
protected var background:DisplayObject;
protected var _editable:Boolean;// = true
public var textField:TextField;
private static var defaultStyles:Object = {upSkin:"TextInput_upSkin", disabledSkin:"TextInput_disabledSkin", focusRectSkin:null, focusRectPadding:null, textFormat:null, disabledTextFormat:null, textPadding:0, embedFonts:false};
public static var createAccessibilityImplementation:Function;
public function TextInput(){
_editable = true;
_html = false;
super();
}
override public function drawFocus(_arg1:Boolean):void{
if (focusTarget != null){
focusTarget.drawFocus(_arg1);
return;
};
super.drawFocus(_arg1);
}
public function set imeMode(_arg1:String):void{
_imeMode = _arg1;
}
override protected function isOurFocus(_arg1:DisplayObject):Boolean{
return ((((_arg1 == textField)) || (super.isOurFocus(_arg1))));
}
protected function handleKeyDown(_arg1:KeyboardEvent):void{
if (_arg1.keyCode == Keyboard.ENTER){
dispatchEvent(new ComponentEvent(ComponentEvent.ENTER, true));
};
}
public function set text(_arg1:String):void{
textField.text = _arg1;
_html = false;
invalidate(InvalidationType.DATA);
invalidate(InvalidationType.STYLES);
}
protected function updateTextFieldType():void{
textField.type = (((enabled) && (editable))) ? TextFieldType.INPUT : TextFieldType.DYNAMIC;
textField.selectable = enabled;
}
public function get selectionEndIndex():int{
return (textField.selectionEndIndex);
}
public function get editable():Boolean{
return (_editable);
}
override protected function focusInHandler(_arg1:FocusEvent):void{
var _local2:IFocusManager;
if (_arg1.target == this){
stage.focus = textField;
};
_local2 = focusManager;
if (((editable) && (_local2))){
_local2.showFocusIndicator = true;
if (((textField.selectable) && ((textField.selectionBeginIndex == textField.selectionBeginIndex)))){
setSelection(0, textField.length);
};
};
super.focusInHandler(_arg1);
if (editable){
setIMEMode(true);
};
}
public function get selectionBeginIndex():int{
return (textField.selectionBeginIndex);
}
public function set alwaysShowSelection(_arg1:Boolean):void{
textField.alwaysShowSelection = _arg1;
}
override public function set enabled(_arg1:Boolean):void{
super.enabled = _arg1;
updateTextFieldType();
}
protected function setEmbedFont(){
var _local1:Object;
_local1 = getStyleValue("embedFonts");
if (_local1 != null){
textField.embedFonts = _local1;
};
}
public function get horizontalScrollPosition():int{
return (textField.scrollH);
}
public function set condenseWhite(_arg1:Boolean):void{
textField.condenseWhite = _arg1;
}
public function set displayAsPassword(_arg1:Boolean):void{
textField.displayAsPassword = _arg1;
}
public function set horizontalScrollPosition(_arg1:int):void{
textField.scrollH = _arg1;
}
public function get restrict():String{
return (textField.restrict);
}
public function get textWidth():Number{
return (textField.textWidth);
}
public function get textHeight():Number{
return (textField.textHeight);
}
public function set editable(_arg1:Boolean):void{
_editable = _arg1;
updateTextFieldType();
}
public function get maxChars():int{
return (textField.maxChars);
}
public function get length():int{
return (textField.length);
}
public function getLineMetrics(_arg1:int):TextLineMetrics{
return (textField.getLineMetrics(_arg1));
}
public function get imeMode():String{
return (_imeMode);
}
override protected function focusOutHandler(_arg1:FocusEvent):void{
super.focusOutHandler(_arg1);
if (editable){
setIMEMode(false);
};
}
public function set htmlText(_arg1:String):void{
if (_arg1 == ""){
text = "";
return;
};
_html = true;
_savedHTML = _arg1;
textField.htmlText = _arg1;
invalidate(InvalidationType.DATA);
invalidate(InvalidationType.STYLES);
}
public function get text():String{
return (textField.text);
}
override public function get enabled():Boolean{
return (super.enabled);
}
public function get condenseWhite():Boolean{
return (textField.condenseWhite);
}
public function get alwaysShowSelection():Boolean{
return (textField.alwaysShowSelection);
}
override protected function draw():void{
var _local1:Object;
if (isInvalid(InvalidationType.STYLES, InvalidationType.STATE)){
drawTextFormat();
drawBackground();
_local1 = getStyleValue("embedFonts");
if (_local1 != null){
textField.embedFonts = _local1;
};
invalidate(InvalidationType.SIZE, false);
};
if (isInvalid(InvalidationType.SIZE)){
drawLayout();
};
super.draw();
}
protected function handleTextInput(_arg1:TextEvent):void{
_arg1.stopPropagation();
dispatchEvent(new TextEvent(TextEvent.TEXT_INPUT, true, false, _arg1.text));
}
override protected function configUI():void{
super.configUI();
tabChildren = true;
textField = new TextField();
addChild(textField);
updateTextFieldType();
textField.addEventListener(TextEvent.TEXT_INPUT, handleTextInput, false, 0, true);
textField.addEventListener(Event.CHANGE, handleChange, false, 0, true);
textField.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown, false, 0, true);
}
public function setSelection(_arg1:int, _arg2:int):void{
textField.setSelection(_arg1, _arg2);
}
public function get displayAsPassword():Boolean{
return (textField.displayAsPassword);
}
public function appendText(_arg1:String):void{
textField.appendText(_arg1);
}
public function set restrict(_arg1:String):void{
if (((componentInspectorSetting) && ((_arg1 == "")))){
_arg1 = null;
};
textField.restrict = _arg1;
}
public function get htmlText():String{
return (textField.htmlText);
}
protected function drawBackground():void{
var _local1:DisplayObject;
var _local2:String;
_local1 = background;
_local2 = (enabled) ? "upSkin" : "disabledSkin";
background = getDisplayObjectInstance(getStyleValue(_local2));
if (background == null){
return;
};
addChildAt(background, 0);
if (((((!((_local1 == null))) && (!((_local1 == background))))) && (contains(_local1)))){
removeChild(_local1);
};
}
override public function setFocus():void{
stage.focus = textField;
}
protected function drawLayout():void{
var _local1:Number;
_local1 = Number(getStyleValue("textPadding"));
if (background != null){
background.width = width;
background.height = height;
};
textField.width = (width - (2 * _local1));
textField.height = (height - (2 * _local1));
textField.x = (textField.y = _local1);
}
public function set maxChars(_arg1:int):void{
textField.maxChars = _arg1;
}
public function get maxHorizontalScrollPosition():int{
return (textField.maxScrollH);
}
protected function drawTextFormat():void{
var _local1:Object;
var _local2:TextFormat;
var _local3:TextFormat;
_local1 = UIComponent.getStyleDefinition();
_local2 = (enabled) ? (_local1.defaultTextFormat as TextFormat) : (_local1.defaultDisabledTextFormat as TextFormat);
textField.setTextFormat(_local2);
_local3 = (getStyleValue((enabled) ? "textFormat" : "disabledTextFormat") as TextFormat);
if (_local3 != null){
textField.setTextFormat(_local3);
} else {
_local3 = _local2;
};
textField.defaultTextFormat = _local3;
setEmbedFont();
if (_html){
textField.htmlText = _savedHTML;
};
}
protected function handleChange(_arg1:Event):void{
_arg1.stopPropagation();
dispatchEvent(new Event(Event.CHANGE, true));
}
public static function getStyleDefinition():Object{
return (defaultStyles);
}
}
}//package fl.controls
Section 26
//UIScrollBar (fl.controls.UIScrollBar)
package fl.controls {
import fl.core.*;
import flash.events.*;
import flash.text.*;
import fl.events.*;
public class UIScrollBar extends ScrollBar {
protected var inScroll:Boolean;// = false
protected var _scrollTarget:TextField;
protected var inEdit:Boolean;// = false
private static var defaultStyles:Object = {};
public function UIScrollBar(){
inEdit = false;
inScroll = false;
super();
}
protected function handleTargetScroll(_arg1:Event):void{
if (inDrag){
return;
};
if (!enabled){
return;
};
inEdit = true;
updateScrollTargetProperties();
scrollPosition = ((direction)==ScrollBarDirection.HORIZONTAL) ? _scrollTarget.scrollH : _scrollTarget.scrollV;
inEdit = false;
}
override public function set minScrollPosition(_arg1:Number):void{
super.minScrollPosition = ((_arg1)<0) ? 0 : _arg1;
}
override public function setScrollPosition(_arg1:Number, _arg2:Boolean=true):void{
super.setScrollPosition(_arg1, _arg2);
if (!_scrollTarget){
inScroll = false;
return;
};
updateTargetScroll();
}
override public function setScrollProperties(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=0):void{
var _local5:Number;
var _local6:Number;
_local5 = _arg3;
_local6 = ((_arg2)<0) ? 0 : _arg2;
if (_scrollTarget != null){
if (direction == ScrollBarDirection.HORIZONTAL){
_local5 = ((_arg3)>_scrollTarget.maxScrollH) ? _scrollTarget.maxScrollH : _local5;
} else {
_local5 = ((_arg3)>_scrollTarget.maxScrollV) ? _scrollTarget.maxScrollV : _local5;
};
};
super.setScrollProperties(_arg1, _local6, _local5, _arg4);
}
public function get scrollTargetName():String{
return (_scrollTarget.name);
}
public function get scrollTarget():TextField{
return (_scrollTarget);
}
protected function updateScrollTargetProperties():void{
var _local1:Boolean;
var _local2:Number;
if (_scrollTarget == null){
setScrollProperties(pageSize, minScrollPosition, maxScrollPosition, pageScrollSize);
scrollPosition = 0;
} else {
_local1 = (direction == ScrollBarDirection.HORIZONTAL);
_local2 = (_local1) ? _scrollTarget.width : 10;
setScrollProperties(_local2, (_local1) ? 0 : 1, (_local1) ? _scrollTarget.maxScrollH : _scrollTarget.maxScrollV, pageScrollSize);
scrollPosition = (_local1) ? _scrollTarget.scrollH : _scrollTarget.scrollV;
};
}
public function update():void{
inEdit = true;
updateScrollTargetProperties();
inEdit = false;
}
public function set scrollTargetName(_arg1:String):void{
var target = _arg1;
try {
scrollTarget = (parent.getChildByName(target) as TextField);
} catch(error:Error) {
throw (new Error("ScrollTarget not found, or is not a TextField"));
};
}
override public function set direction(_arg1:String):void{
if (isLivePreview){
return;
};
super.direction = _arg1;
updateScrollTargetProperties();
}
protected function handleTargetChange(_arg1:Event):void{
inEdit = true;
setScrollPosition(((direction)==ScrollBarDirection.HORIZONTAL) ? _scrollTarget.scrollH : _scrollTarget.scrollV, true);
updateScrollTargetProperties();
inEdit = false;
}
override public function set maxScrollPosition(_arg1:Number):void{
var _local2:Number;
_local2 = _arg1;
if (_scrollTarget != null){
if (direction == ScrollBarDirection.HORIZONTAL){
_local2 = ((_local2)>_scrollTarget.maxScrollH) ? _scrollTarget.maxScrollH : _local2;
} else {
_local2 = ((_local2)>_scrollTarget.maxScrollV) ? _scrollTarget.maxScrollV : _local2;
};
};
super.maxScrollPosition = _local2;
}
protected function updateTargetScroll(_arg1:ScrollEvent=null):void{
if (inEdit){
return;
};
if (direction == ScrollBarDirection.HORIZONTAL){
_scrollTarget.scrollH = scrollPosition;
} else {
_scrollTarget.scrollV = scrollPosition;
};
}
override protected function draw():void{
if (isInvalid(InvalidationType.DATA)){
updateScrollTargetProperties();
};
super.draw();
}
public function set scrollTarget(_arg1:TextField):void{
if (_scrollTarget != null){
_scrollTarget.removeEventListener(Event.CHANGE, handleTargetChange, false);
_scrollTarget.removeEventListener(TextEvent.TEXT_INPUT, handleTargetChange, false);
_scrollTarget.removeEventListener(Event.SCROLL, handleTargetScroll, false);
removeEventListener(ScrollEvent.SCROLL, updateTargetScroll, false);
};
_scrollTarget = _arg1;
if (_scrollTarget != null){
_scrollTarget.addEventListener(Event.CHANGE, handleTargetChange, false, 0, true);
_scrollTarget.addEventListener(TextEvent.TEXT_INPUT, handleTargetChange, false, 0, true);
_scrollTarget.addEventListener(Event.SCROLL, handleTargetScroll, false, 0, true);
addEventListener(ScrollEvent.SCROLL, updateTargetScroll, false, 0, true);
};
invalidate(InvalidationType.DATA);
}
override public function get direction():String{
return (super.direction);
}
public static function getStyleDefinition():Object{
return (UIComponent.mergeStyles(defaultStyles, ScrollBar.getStyleDefinition()));
}
}
}//package fl.controls
Section 27
//ComponentShim (fl.core.ComponentShim)
package fl.core {
import flash.display.*;
public dynamic class ComponentShim extends MovieClip {
}
}//package fl.core
Section 28
//InvalidationType (fl.core.InvalidationType)
package fl.core {
public class InvalidationType {
public static const SIZE:String = "size";
public static const ALL:String = "all";
public static const DATA:String = "data";
public static const SCROLL:String = "scroll";
public static const STATE:String = "state";
public static const STYLES:String = "styles";
public static const SELECTED:String = "selected";
public static const RENDERER_STYLES:String = "rendererStyles";
}
}//package fl.core
Section 29
//UIComponent (fl.core.UIComponent)
package fl.core {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.text.*;
import fl.managers.*;
import fl.events.*;
import flash.system.*;
public class UIComponent extends Sprite {
protected var _enabled:Boolean;// = true
private var _mouseFocusEnabled:Boolean;// = true
protected var startHeight:Number;
protected var _height:Number;
protected var _oldIMEMode:String;// = null
protected var startWidth:Number;
public var focusTarget:IFocusManagerComponent;
protected var errorCaught:Boolean;// = false
protected var uiFocusRect:DisplayObject;
protected var _width:Number;
public var version:String;// = "3.0.0.15"
protected var isFocused:Boolean;// = false
protected var callLaterMethods:Dictionary;
private var _focusEnabled:Boolean;// = true
private var tempText:TextField;
protected var invalidateFlag:Boolean;// = false
protected var _inspector:Boolean;// = false
protected var sharedStyles:Object;
protected var invalidHash:Object;
protected var isLivePreview:Boolean;// = false
protected var _imeMode:String;// = null
protected var instanceStyles:Object;
protected var _x:Number;
protected var _y:Number;
public static var inCallLaterPhase:Boolean = false;
private static var defaultStyles:Object = {focusRectSkin:"focusRectSkin", focusRectPadding:2, textFormat:new TextFormat("_sans", 11, 0, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0), disabledTextFormat:new TextFormat("_sans", 11, 0x999999, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0), defaultTextFormat:new TextFormat("_sans", 11, 0, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0), defaultDisabledTextFormat:new TextFormat("_sans", 11, 0x999999, false, false, false, "", "", TextFormatAlign.LEFT, 0, 0, 0, 0)};
public static var createAccessibilityImplementation:Function;
private static var focusManagers:Dictionary = new Dictionary(false);
public function UIComponent(){
version = "3.0.0.15";
isLivePreview = false;
invalidateFlag = false;
_enabled = true;
isFocused = false;
_focusEnabled = true;
_mouseFocusEnabled = true;
_imeMode = null;
_oldIMEMode = null;
errorCaught = false;
_inspector = false;
super();
instanceStyles = {};
sharedStyles = {};
invalidHash = {};
callLaterMethods = new Dictionary();
StyleManager.registerInstance(this);
configUI();
invalidate(InvalidationType.ALL);
tabEnabled = (this is IFocusManagerComponent);
focusRect = false;
if (tabEnabled){
addEventListener(FocusEvent.FOCUS_IN, focusInHandler);
addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler);
addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
};
initializeFocusManager();
addEventListener(Event.ENTER_FRAME, hookAccessibility, false, 0, true);
}
public function drawFocus(_arg1:Boolean):void{
var _local2:Number;
isFocused = _arg1;
if (((!((uiFocusRect == null))) && (contains(uiFocusRect)))){
removeChild(uiFocusRect);
uiFocusRect = null;
};
if (_arg1){
uiFocusRect = (getDisplayObjectInstance(getStyleValue("focusRectSkin")) as Sprite);
if (uiFocusRect == null){
return;
};
_local2 = Number(getStyleValue("focusRectPadding"));
uiFocusRect.x = -(_local2);
uiFocusRect.y = -(_local2);
uiFocusRect.width = (width + (_local2 * 2));
uiFocusRect.height = (height + (_local2 * 2));
addChildAt(uiFocusRect, 0);
};
}
private function callLaterDispatcher(_arg1:Event):void{
var _local2:Dictionary;
var _local3:Object;
if (_arg1.type == Event.ADDED_TO_STAGE){
removeEventListener(Event.ADDED_TO_STAGE, callLaterDispatcher);
stage.addEventListener(Event.RENDER, callLaterDispatcher, false, 0, true);
stage.invalidate();
return;
};
_arg1.target.removeEventListener(Event.RENDER, callLaterDispatcher);
if (stage == null){
addEventListener(Event.ADDED_TO_STAGE, callLaterDispatcher, false, 0, true);
return;
};
inCallLaterPhase = true;
_local2 = callLaterMethods;
for (_local3 in _local2) {
_local3();
delete _local2[_local3];
};
inCallLaterPhase = false;
}
private function addedHandler(_arg1:Event):void{
removeEventListener("addedToStage", addedHandler);
initializeFocusManager();
}
protected function getStyleValue(_arg1:String):Object{
return (((instanceStyles[_arg1])==null) ? sharedStyles[_arg1] : instanceStyles[_arg1]);
}
protected function isOurFocus(_arg1:DisplayObject):Boolean{
return ((_arg1 == this));
}
override public function get scaleX():Number{
return ((width / startWidth));
}
override public function get scaleY():Number{
return ((height / startHeight));
}
override public function set height(_arg1:Number):void{
if (_height == _arg1){
return;
};
setSize(width, _arg1);
}
protected function keyDownHandler(_arg1:KeyboardEvent):void{
}
protected function focusInHandler(_arg1:FocusEvent):void{
var _local2:IFocusManager;
if (isOurFocus((_arg1.target as DisplayObject))){
_local2 = focusManager;
if (((_local2) && (_local2.showFocusIndicator))){
drawFocus(true);
isFocused = true;
};
};
}
public function setStyle(_arg1:String, _arg2:Object):void{
if ((((instanceStyles[_arg1] === _arg2)) && (!((_arg2 is TextFormat))))){
return;
};
instanceStyles[_arg1] = _arg2;
invalidate(InvalidationType.STYLES);
}
override public function get visible():Boolean{
return (super.visible);
}
public function get componentInspectorSetting():Boolean{
return (_inspector);
}
override public function get x():Number{
return ((isNaN(_x)) ? super.x : _x);
}
override public function get y():Number{
return ((isNaN(_y)) ? super.y : _y);
}
protected function setIMEMode(_arg1:Boolean){
var enabled = _arg1;
if (_imeMode != null){
if (enabled){
IME.enabled = true;
_oldIMEMode = IME.conversionMode;
try {
if (((!(errorCaught)) && (!((IME.conversionMode == IMEConversionMode.UNKNOWN))))){
IME.conversionMode = _imeMode;
};
errorCaught = false;
} catch(e:Error) {
errorCaught = true;
throw (new Error(("IME mode not supported: " + _imeMode)));
};
} else {
if (((!((IME.conversionMode == IMEConversionMode.UNKNOWN))) && (!((_oldIMEMode == IMEConversionMode.UNKNOWN))))){
IME.conversionMode = _oldIMEMode;
};
IME.enabled = false;
};
};
}
public function set enabled(_arg1:Boolean):void{
if (_arg1 == _enabled){
return;
};
_enabled = _arg1;
invalidate(InvalidationType.STATE);
}
public function setSharedStyle(_arg1:String, _arg2:Object):void{
if ((((sharedStyles[_arg1] === _arg2)) && (!((_arg2 is TextFormat))))){
return;
};
sharedStyles[_arg1] = _arg2;
if (instanceStyles[_arg1] == null){
invalidate(InvalidationType.STYLES);
};
}
protected function keyUpHandler(_arg1:KeyboardEvent):void{
}
public function set focusEnabled(_arg1:Boolean):void{
_focusEnabled = _arg1;
}
override public function set scaleX(_arg1:Number):void{
setSize((startWidth * _arg1), height);
}
public function get mouseFocusEnabled():Boolean{
return (_mouseFocusEnabled);
}
override public function set scaleY(_arg1:Number):void{
setSize(width, (startHeight * _arg1));
}
protected function getDisplayObjectInstance(_arg1:Object):DisplayObject{
var classDef:Object;
var skin = _arg1;
classDef = null;
if ((skin is Class)){
return ((new (skin) as DisplayObject));
};
if ((skin is DisplayObject)){
(skin as DisplayObject).x = 0;
(skin as DisplayObject).y = 0;
return ((skin as DisplayObject));
};
try {
classDef = getDefinitionByName(skin.toString());
} catch(e:Error) {
try {
classDef = (loaderInfo.applicationDomain.getDefinition(skin.toString()) as Object);
} catch(e:Error) {
};
};
if (classDef == null){
return (null);
};
return ((new (classDef) as DisplayObject));
}
protected function copyStylesToChild(_arg1:UIComponent, _arg2:Object):void{
var _local3:String;
for (_local3 in _arg2) {
_arg1.setStyle(_local3, getStyleValue(_arg2[_local3]));
};
}
protected function beforeComponentParameters():void{
}
protected function callLater(_arg1:Function):void{
if (inCallLaterPhase){
return;
};
callLaterMethods[_arg1] = true;
if (stage != null){
stage.addEventListener(Event.RENDER, callLaterDispatcher, false, 0, true);
stage.invalidate();
} else {
addEventListener(Event.ADDED_TO_STAGE, callLaterDispatcher, false, 0, true);
};
}
protected function createFocusManager():void{
if (focusManagers[stage] == null){
focusManagers[stage] = new FocusManager(stage);
};
}
override public function set visible(_arg1:Boolean):void{
var _local2:String;
if (super.visible == _arg1){
return;
};
super.visible = _arg1;
_local2 = (_arg1) ? ComponentEvent.SHOW : ComponentEvent.HIDE;
dispatchEvent(new ComponentEvent(_local2, true));
}
protected function hookAccessibility(_arg1:Event):void{
removeEventListener(Event.ENTER_FRAME, hookAccessibility);
initializeAccessibility();
}
public function set componentInspectorSetting(_arg1:Boolean):void{
_inspector = _arg1;
if (_inspector){
beforeComponentParameters();
} else {
afterComponentParameters();
};
}
override public function set x(_arg1:Number):void{
move(_arg1, _y);
}
public function drawNow():void{
draw();
}
override public function set y(_arg1:Number):void{
move(_x, _arg1);
}
protected function checkLivePreview():Boolean{
var className:String;
if (parent == null){
return (false);
};
try {
className = getQualifiedClassName(parent);
} catch(e:Error) {
};
return ((className == "fl.livepreview::LivePreviewParent"));
}
protected function focusOutHandler(_arg1:FocusEvent):void{
if (isOurFocus((_arg1.target as DisplayObject))){
drawFocus(false);
isFocused = false;
};
}
public function set mouseFocusEnabled(_arg1:Boolean):void{
_mouseFocusEnabled = _arg1;
}
public function getFocus():InteractiveObject{
if (stage){
return (stage.focus);
};
return (null);
}
protected function validate():void{
invalidHash = {};
}
override public function get height():Number{
return (_height);
}
public function invalidate(_arg1:String="all", _arg2:Boolean=true):void{
invalidHash[_arg1] = true;
if (_arg2){
this.callLater(draw);
};
}
public function get enabled():Boolean{
return (_enabled);
}
protected function getScaleX():Number{
return (super.scaleX);
}
protected function getScaleY():Number{
return (super.scaleY);
}
public function get focusEnabled():Boolean{
return (_focusEnabled);
}
protected function afterComponentParameters():void{
}
protected function draw():void{
if (isInvalid(InvalidationType.SIZE, InvalidationType.STYLES)){
if (((isFocused) && (focusManager.showFocusIndicator))){
drawFocus(true);
};
};
validate();
}
protected function configUI():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
isLivePreview = checkLivePreview();
_local1 = rotation;
rotation = 0;
_local2 = super.width;
_local3 = super.height;
var _local4 = 1;
super.scaleY = _local4;
super.scaleX = _local4;
setSize(_local2, _local3);
move(super.x, super.y);
rotation = _local1;
startWidth = _local2;
startHeight = _local3;
if (numChildren > 0){
removeChildAt(0);
};
}
protected function setScaleX(_arg1:Number):void{
super.scaleX = _arg1;
}
protected function setScaleY(_arg1:Number):void{
super.scaleY = _arg1;
}
private function initializeFocusManager():void{
if (stage == null){
addEventListener(Event.ADDED_TO_STAGE, addedHandler, false, 0, true);
} else {
createFocusManager();
};
}
public function set focusManager(_arg1:IFocusManager):void{
UIComponent.focusManagers[this] = _arg1;
}
public function clearStyle(_arg1:String):void{
setStyle(_arg1, null);
}
protected function isInvalid(_arg1:String, ... _args):Boolean{
if (((invalidHash[_arg1]) || (invalidHash[InvalidationType.ALL]))){
return (true);
};
while (_args.length > 0) {
if (invalidHash[_args.pop()]){
return (true);
};
};
return (false);
}
public function setSize(_arg1:Number, _arg2:Number):void{
_width = _arg1;
_height = _arg2;
invalidate(InvalidationType.SIZE);
dispatchEvent(new ComponentEvent(ComponentEvent.RESIZE, false));
}
override public function set width(_arg1:Number):void{
if (_width == _arg1){
return;
};
setSize(_arg1, height);
}
public function setFocus():void{
if (stage){
stage.focus = this;
};
}
protected function initializeAccessibility():void{
if (UIComponent.createAccessibilityImplementation != null){
UIComponent.createAccessibilityImplementation(this);
};
}
public function get focusManager():IFocusManager{
var _local1:DisplayObject;
_local1 = this;
while (_local1) {
if (UIComponent.focusManagers[_local1] != null){
return (IFocusManager(UIComponent.focusManagers[_local1]));
};
_local1 = _local1.parent;
};
return (null);
}
override public function get width():Number{
return (_width);
}
public function move(_arg1:Number, _arg2:Number):void{
_x = _arg1;
_y = _arg2;
super.x = Math.round(_arg1);
super.y = Math.round(_arg2);
dispatchEvent(new ComponentEvent(ComponentEvent.MOVE));
}
public function validateNow():void{
invalidate(InvalidationType.ALL, false);
draw();
}
public function getStyle(_arg1:String):Object{
return (instanceStyles[_arg1]);
}
public static function getStyleDefinition():Object{
return (defaultStyles);
}
public static function mergeStyles(... _args):Object{
var _local2:Object;
var _local3:uint;
var _local4:uint;
var _local5:Object;
var _local6:String;
_local2 = {};
_local3 = _args.length;
_local4 = 0;
while (_local4 < _local3) {
_local5 = _args[_local4];
for (_local6 in _local5) {
if (_local2[_local6] != null){
} else {
_local2[_local6] = _args[_local4][_local6];
};
};
_local4++;
};
return (_local2);
}
}
}//package fl.core
Section 30
//DataProvider (fl.data.DataProvider)
package fl.data {
import flash.events.*;
import fl.events.*;
public class DataProvider extends EventDispatcher {
protected var data:Array;
public function DataProvider(_arg1:Object=null){
if (_arg1 == null){
data = [];
} else {
data = getDataFromObject(_arg1);
};
}
protected function dispatchPreChangeEvent(_arg1:String, _arg2:Array, _arg3:int, _arg4:int):void{
dispatchEvent(new DataChangeEvent(DataChangeEvent.PRE_DATA_CHANGE, _arg1, _arg2, _arg3, _arg4));
}
public function invalidateItemAt(_arg1:int):void{
checkIndex(_arg1, (data.length - 1));
dispatchChangeEvent(DataChangeType.INVALIDATE, [data[_arg1]], _arg1, _arg1);
}
public function getItemIndex(_arg1:Object):int{
return (data.indexOf(_arg1));
}
protected function getDataFromObject(_arg1:Object):Array{
var _local2:Array;
var _local3:Array;
var _local4:uint;
var _local5:Object;
var _local6:XML;
var _local7:XMLList;
var _local8:XML;
var _local9:XMLList;
var _local10:XML;
var _local11:XMLList;
var _local12:XML;
if ((_arg1 is Array)){
_local3 = (_arg1 as Array);
if (_local3.length > 0){
if ((((_local3[0] is String)) || ((_local3[0] is Number)))){
_local2 = [];
_local4 = 0;
while (_local4 < _local3.length) {
_local5 = {label:String(_local3[_local4]), data:_local3[_local4]};
_local2.push(_local5);
_local4++;
};
return (_local2);
};
};
return (_arg1.concat());
//unresolved jump
};
if ((_arg1 is DataProvider)){
return (_arg1.toArray());
};
if ((_arg1 is XML)){
_local6 = (_arg1 as XML);
_local2 = [];
_local7 = _local6.*;
for each (_local8 in _local7) {
_arg1 = {};
_local9 = _local8.attributes();
for each (_local10 in _local9) {
_arg1[_local10.localName()] = _local10.toString();
};
_local11 = _local8.*;
for each (_local12 in _local11) {
if (_local12.hasSimpleContent()){
_arg1[_local12.localName()] = _local12.toString();
};
};
_local2.push(_arg1);
};
return (_local2);
//unresolved jump
};
throw (new TypeError((("Error: Type Coercion failed: cannot convert " + _arg1) + " to Array or DataProvider.")));
}
public function removeItemAt(_arg1:uint):Object{
var _local2:Array;
checkIndex(_arg1, (data.length - 1));
dispatchPreChangeEvent(DataChangeType.REMOVE, data.slice(_arg1, (_arg1 + 1)), _arg1, _arg1);
_local2 = data.splice(_arg1, 1);
dispatchChangeEvent(DataChangeType.REMOVE, _local2, _arg1, _arg1);
return (_local2[0]);
}
public function addItem(_arg1:Object):void{
dispatchPreChangeEvent(DataChangeType.ADD, [_arg1], (data.length - 1), (data.length - 1));
data.push(_arg1);
dispatchChangeEvent(DataChangeType.ADD, [_arg1], (data.length - 1), (data.length - 1));
}
public function sortOn(_arg1:Object, _arg2:Object=null){
var _local3:Array;
dispatchPreChangeEvent(DataChangeType.SORT, data.concat(), 0, (data.length - 1));
_local3 = data.sortOn(_arg1, _arg2);
dispatchChangeEvent(DataChangeType.SORT, data.concat(), 0, (data.length - 1));
return (_local3);
}
public function sort(... _args){
var _local2:Array;
dispatchPreChangeEvent(DataChangeType.SORT, data.concat(), 0, (data.length - 1));
_local2 = data.sort.apply(data, _args);
dispatchChangeEvent(DataChangeType.SORT, data.concat(), 0, (data.length - 1));
return (_local2);
}
public function addItems(_arg1:Object):void{
addItemsAt(_arg1, data.length);
}
public function concat(_arg1:Object):void{
addItems(_arg1);
}
public function clone():DataProvider{
return (new DataProvider(data));
}
public function toArray():Array{
return (data.concat());
}
public function get length():uint{
return (data.length);
}
public function addItemAt(_arg1:Object, _arg2:uint):void{
checkIndex(_arg2, data.length);
dispatchPreChangeEvent(DataChangeType.ADD, [_arg1], _arg2, _arg2);
data.splice(_arg2, 0, _arg1);
dispatchChangeEvent(DataChangeType.ADD, [_arg1], _arg2, _arg2);
}
public function getItemAt(_arg1:uint):Object{
checkIndex(_arg1, (data.length - 1));
return (data[_arg1]);
}
override public function toString():String{
return ((("DataProvider [" + data.join(" , ")) + "]"));
}
public function invalidateItem(_arg1:Object):void{
var _local2:uint;
_local2 = getItemIndex(_arg1);
if (_local2 == -1){
return;
};
invalidateItemAt(_local2);
}
protected function dispatchChangeEvent(_arg1:String, _arg2:Array, _arg3:int, _arg4:int):void{
dispatchEvent(new DataChangeEvent(DataChangeEvent.DATA_CHANGE, _arg1, _arg2, _arg3, _arg4));
}
protected function checkIndex(_arg1:int, _arg2:int):void{
if ((((_arg1 > _arg2)) || ((_arg1 < 0)))){
throw (new RangeError((((("DataProvider index (" + _arg1) + ") is not in acceptable range (0 - ") + _arg2) + ")")));
};
}
public function addItemsAt(_arg1:Object, _arg2:uint):void{
var _local3:Array;
checkIndex(_arg2, data.length);
_local3 = getDataFromObject(_arg1);
dispatchPreChangeEvent(DataChangeType.ADD, _local3, _arg2, ((_arg2 + _local3.length) - 1));
data.splice.apply(data, [_arg2, 0].concat(_local3));
dispatchChangeEvent(DataChangeType.ADD, _local3, _arg2, ((_arg2 + _local3.length) - 1));
}
public function replaceItem(_arg1:Object, _arg2:Object):Object{
var _local3:int;
_local3 = getItemIndex(_arg2);
if (_local3 != -1){
return (replaceItemAt(_arg1, _local3));
};
return (null);
}
public function removeItem(_arg1:Object):Object{
var _local2:int;
_local2 = getItemIndex(_arg1);
if (_local2 != -1){
return (removeItemAt(_local2));
};
return (null);
}
public function merge(_arg1:Object):void{
var _local2:Array;
var _local3:uint;
var _local4:uint;
var _local5:uint;
var _local6:Object;
_local2 = getDataFromObject(_arg1);
_local3 = _local2.length;
_local4 = data.length;
dispatchPreChangeEvent(DataChangeType.ADD, data.slice(_local4, data.length), _local4, (this.data.length - 1));
_local5 = 0;
while (_local5 < _local3) {
_local6 = _local2[_local5];
if (getItemIndex(_local6) == -1){
data.push(_local6);
};
_local5++;
};
if (data.length > _local4){
dispatchChangeEvent(DataChangeType.ADD, data.slice(_local4, data.length), _local4, (this.data.length - 1));
} else {
dispatchChangeEvent(DataChangeType.ADD, [], -1, -1);
};
}
public function replaceItemAt(_arg1:Object, _arg2:uint):Object{
var _local3:Array;
checkIndex(_arg2, (data.length - 1));
_local3 = [data[_arg2]];
dispatchPreChangeEvent(DataChangeType.REPLACE, _local3, _arg2, _arg2);
data[_arg2] = _arg1;
dispatchChangeEvent(DataChangeType.REPLACE, _local3, _arg2, _arg2);
return (_local3[0]);
}
public function invalidate():void{
dispatchEvent(new DataChangeEvent(DataChangeEvent.DATA_CHANGE, DataChangeType.INVALIDATE_ALL, data.concat(), 0, data.length));
}
public function removeAll():void{
var _local1:Array;
_local1 = data.concat();
dispatchPreChangeEvent(DataChangeType.REMOVE_ALL, _local1, 0, _local1.length);
data = [];
dispatchChangeEvent(DataChangeType.REMOVE_ALL, _local1, 0, _local1.length);
}
}
}//package fl.data
Section 31
//SimpleCollectionItem (fl.data.SimpleCollectionItem)
package fl.data {
public dynamic class SimpleCollectionItem {
public var label:String;
public var data:String;
public function toString():String{
return ((((("[SimpleCollectionItem: " + label) + ",") + data) + "]"));
}
}
}//package fl.data
Section 32
//ComponentEvent (fl.events.ComponentEvent)
package fl.events {
import flash.events.*;
public class ComponentEvent extends Event {
public static const HIDE:String = "hide";
public static const BUTTON_DOWN:String = "buttonDown";
public static const MOVE:String = "move";
public static const RESIZE:String = "resize";
public static const ENTER:String = "enter";
public static const LABEL_CHANGE:String = "labelChange";
public static const SHOW:String = "show";
public function ComponentEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){
super(_arg1, _arg2, _arg3);
}
override public function toString():String{
return (formatToString("ComponentEvent", "type", "bubbles", "cancelable"));
}
override public function clone():Event{
return (new ComponentEvent(type, bubbles, cancelable));
}
}
}//package fl.events
Section 33
//DataChangeEvent (fl.events.DataChangeEvent)
package fl.events {
import flash.events.*;
public class DataChangeEvent extends Event {
protected var _items:Array;
protected var _endIndex:uint;
protected var _changeType:String;
protected var _startIndex:uint;
public static const PRE_DATA_CHANGE:String = "preDataChange";
public static const DATA_CHANGE:String = "dataChange";
public function DataChangeEvent(_arg1:String, _arg2:String, _arg3:Array, _arg4:int=-1, _arg5:int=-1):void{
super(_arg1);
_changeType = _arg2;
_startIndex = _arg4;
_items = _arg3;
_endIndex = ((_arg5)==-1) ? _startIndex : _arg5;
}
public function get changeType():String{
return (_changeType);
}
public function get startIndex():uint{
return (_startIndex);
}
public function get items():Array{
return (_items);
}
override public function clone():Event{
return (new DataChangeEvent(type, _changeType, _items, _startIndex, _endIndex));
}
override public function toString():String{
return (formatToString("DataChangeEvent", "type", "changeType", "startIndex", "endIndex", "bubbles", "cancelable"));
}
public function get endIndex():uint{
return (_endIndex);
}
}
}//package fl.events
Section 34
//DataChangeType (fl.events.DataChangeType)
package fl.events {
public class DataChangeType {
public static const ADD:String = "add";
public static const REMOVE:String = "remove";
public static const REMOVE_ALL:String = "removeAll";
public static const CHANGE:String = "change";
public static const REPLACE:String = "replace";
public static const INVALIDATE:String = "invalidate";
public static const INVALIDATE_ALL:String = "invalidateAll";
public static const SORT:String = "sort";
}
}//package fl.events
Section 35
//ListEvent (fl.events.ListEvent)
package fl.events {
import flash.events.*;
public class ListEvent extends Event {
protected var _index:int;
protected var _item:Object;
protected var _columnIndex:int;
protected var _rowIndex:int;
public static const ITEM_DOUBLE_CLICK:String = "itemDoubleClick";
public static const ITEM_ROLL_OUT:String = "itemRollOut";
public static const ITEM_ROLL_OVER:String = "itemRollOver";
public static const ITEM_CLICK:String = "itemClick";
public function ListEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false, _arg4:int=-1, _arg5:int=-1, _arg6:int=-1, _arg7:Object=null){
super(_arg1, _arg2, _arg3);
_rowIndex = _arg5;
_columnIndex = _arg4;
_index = _arg6;
_item = _arg7;
}
public function get rowIndex():Object{
return (_rowIndex);
}
public function get index():int{
return (_index);
}
public function get item():Object{
return (_item);
}
public function get columnIndex():int{
return (_columnIndex);
}
override public function clone():Event{
return (new ListEvent(type, bubbles, cancelable, _columnIndex, _rowIndex));
}
override public function toString():String{
return (formatToString("ListEvent", "type", "bubbles", "cancelable", "columnIndex", "rowIndex", "index", "item"));
}
}
}//package fl.events
Section 36
//ScrollEvent (fl.events.ScrollEvent)
package fl.events {
import flash.events.*;
public class ScrollEvent extends Event {
private var _position:Number;
private var _direction:String;
private var _delta:Number;
public static const SCROLL:String = "scroll";
public function ScrollEvent(_arg1:String, _arg2:Number, _arg3:Number){
super(ScrollEvent.SCROLL, false, false);
_direction = _arg1;
_delta = _arg2;
_position = _arg3;
}
override public function clone():Event{
return (new ScrollEvent(_direction, _delta, _position));
}
public function get position():Number{
return (_position);
}
override public function toString():String{
return (formatToString("ScrollEvent", "type", "bubbles", "cancelable", "direction", "delta", "position"));
}
public function get delta():Number{
return (_delta);
}
public function get direction():String{
return (_direction);
}
}
}//package fl.events
Section 37
//FocusManager (fl.managers.FocusManager)
package fl.managers {
import fl.core.*;
import fl.controls.*;
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.text.*;
import flash.ui.*;
public class FocusManager implements IFocusManager {
private var focusableObjects:Dictionary;
private var _showFocusIndicator:Boolean;// = true
private var defButton:Button;
private var focusableCandidates:Array;
private var _form:DisplayObjectContainer;
private var _defaultButtonEnabled:Boolean;// = true
private var activated:Boolean;// = false
private var _defaultButton:Button;
private var calculateCandidates:Boolean;// = true
private var lastFocus:InteractiveObject;
private var lastAction:String;
public function FocusManager(_arg1:DisplayObjectContainer){
activated = false;
calculateCandidates = true;
_showFocusIndicator = true;
_defaultButtonEnabled = true;
super();
focusableObjects = new Dictionary(true);
if (_arg1 != null){
_form = _arg1;
addFocusables(DisplayObject(_arg1));
_arg1.addEventListener(Event.ADDED, addedHandler);
_arg1.addEventListener(Event.REMOVED, removedHandler);
activate();
};
}
public function get showFocusIndicator():Boolean{
return (_showFocusIndicator);
}
private function getIndexOfNextObject(_arg1:int, _arg2:Boolean, _arg3:Boolean, _arg4:String):int{
var _local5:int;
var _local6:int;
var _local7:DisplayObject;
var _local8:IFocusManagerGroup;
var _local9:int;
var _local10:DisplayObject;
var _local11:IFocusManagerGroup;
_local5 = focusableCandidates.length;
_local6 = _arg1;
while (true) {
if (_arg2){
_arg1--;
} else {
_arg1++;
};
if (_arg3){
if (((_arg2) && ((_arg1 < 0)))){
break;
};
if (((!(_arg2)) && ((_arg1 == _local5)))){
break;
};
} else {
_arg1 = ((_arg1 + _local5) % _local5);
if (_local6 == _arg1){
break;
};
};
if (isValidFocusCandidate(focusableCandidates[_arg1], _arg4)){
_local7 = DisplayObject(findFocusManagerComponent(focusableCandidates[_arg1]));
if ((_local7 is IFocusManagerGroup)){
_local8 = IFocusManagerGroup(_local7);
_local9 = 0;
while (_local9 < focusableCandidates.length) {
_local10 = focusableCandidates[_local9];
if ((_local10 is IFocusManagerGroup)){
_local11 = IFocusManagerGroup(_local10);
if ((((_local11.groupName == _local8.groupName)) && (_local11.selected))){
_arg1 = _local9;
break;
};
};
_local9++;
};
};
return (_arg1);
};
};
return (_arg1);
}
public function set form(_arg1:DisplayObjectContainer):void{
_form = _arg1;
}
private function addFocusables(_arg1:DisplayObject, _arg2:Boolean=false):void{
var focusable:IFocusManagerComponent;
var io:InteractiveObject;
var doc:DisplayObjectContainer;
var i:int;
var child:DisplayObject;
var o = _arg1;
var skipTopLevel = _arg2;
if (!skipTopLevel){
if ((o is IFocusManagerComponent)){
focusable = IFocusManagerComponent(o);
if (focusable.focusEnabled){
if (((focusable.tabEnabled) && (isTabVisible(o)))){
focusableObjects[o] = true;
calculateCandidates = true;
};
o.addEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
o.addEventListener(Event.TAB_INDEX_CHANGE, tabIndexChangeHandler);
};
} else {
if ((o is InteractiveObject)){
io = (o as InteractiveObject);
if (((((io) && (io.tabEnabled))) && ((findFocusManagerComponent(io) == io)))){
focusableObjects[io] = true;
calculateCandidates = true;
};
io.addEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
io.addEventListener(Event.TAB_INDEX_CHANGE, tabIndexChangeHandler);
};
};
};
if ((o is DisplayObjectContainer)){
doc = DisplayObjectContainer(o);
o.addEventListener(Event.TAB_CHILDREN_CHANGE, tabChildrenChangeHandler);
if ((((((doc is Stage)) || ((doc.parent is Stage)))) || (doc.tabChildren))){
i = 0;
while (i < doc.numChildren) {
try {
child = doc.getChildAt(i);
if (child != null){
addFocusables(doc.getChildAt(i));
};
} catch(error:SecurityError) {
};
i = (i + 1);
};
};
};
}
private function getChildIndex(_arg1:DisplayObjectContainer, _arg2:DisplayObject):int{
return (_arg1.getChildIndex(_arg2));
}
private function mouseFocusChangeHandler(_arg1:FocusEvent):void{
if ((_arg1.relatedObject is TextField)){
return;
};
_arg1.preventDefault();
}
private function focusOutHandler(_arg1:FocusEvent):void{
var _local2:InteractiveObject;
_local2 = (_arg1.target as InteractiveObject);
}
private function isValidFocusCandidate(_arg1:DisplayObject, _arg2:String):Boolean{
var _local3:IFocusManagerGroup;
if (!isEnabledAndVisible(_arg1)){
return (false);
};
if ((_arg1 is IFocusManagerGroup)){
_local3 = IFocusManagerGroup(_arg1);
if (_arg2 == _local3.groupName){
return (false);
};
};
return (true);
}
public function findFocusManagerComponent(_arg1:InteractiveObject):InteractiveObject{
var _local2:InteractiveObject;
_local2 = _arg1;
while (_arg1) {
if ((((_arg1 is IFocusManagerComponent)) && (IFocusManagerComponent(_arg1).focusEnabled))){
return (_arg1);
};
_arg1 = _arg1.parent;
};
return (_local2);
}
private function sortFocusableObjectsTabIndex():void{
var _local1:Object;
var _local2:InteractiveObject;
focusableCandidates = [];
for (_local1 in focusableObjects) {
_local2 = InteractiveObject(_local1);
if (((_local2.tabIndex) && (!(isNaN(Number(_local2.tabIndex)))))){
focusableCandidates.push(_local2);
};
};
focusableCandidates.sort(sortByTabIndex);
}
private function removeFocusables(_arg1:DisplayObject):void{
var _local2:Object;
var _local3:DisplayObject;
if ((_arg1 is DisplayObjectContainer)){
_arg1.removeEventListener(Event.TAB_CHILDREN_CHANGE, tabChildrenChangeHandler);
_arg1.removeEventListener(Event.TAB_INDEX_CHANGE, tabIndexChangeHandler);
for (_local2 in focusableObjects) {
_local3 = DisplayObject(_local2);
if (DisplayObjectContainer(_arg1).contains(_local3)){
if (_local3 == lastFocus){
lastFocus = null;
};
_local3.removeEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
delete focusableObjects[_local2];
calculateCandidates = true;
};
};
};
}
private function addedHandler(_arg1:Event):void{
var _local2:DisplayObject;
_local2 = DisplayObject(_arg1.target);
if (_local2.stage){
addFocusables(DisplayObject(_arg1.target));
};
}
private function getTopLevelFocusTarget(_arg1:InteractiveObject):InteractiveObject{
while (_arg1 != InteractiveObject(form)) {
if ((((((((_arg1 is IFocusManagerComponent)) && (IFocusManagerComponent(_arg1).focusEnabled))) && (IFocusManagerComponent(_arg1).mouseFocusEnabled))) && (UIComponent(_arg1).enabled))){
return (_arg1);
};
_arg1 = _arg1.parent;
if (_arg1 == null){
break;
};
};
return (null);
}
private function tabChildrenChangeHandler(_arg1:Event):void{
var _local2:DisplayObjectContainer;
if (_arg1.target != _arg1.currentTarget){
return;
};
calculateCandidates = true;
_local2 = DisplayObjectContainer(_arg1.target);
if (_local2.tabChildren){
addFocusables(_local2, true);
} else {
removeFocusables(_local2);
};
}
public function sendDefaultButtonEvent():void{
defButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
public function getFocus():InteractiveObject{
var _local1:InteractiveObject;
_local1 = form.stage.focus;
return (findFocusManagerComponent(_local1));
}
private function isEnabledAndVisible(_arg1:DisplayObject):Boolean{
var _local2:DisplayObjectContainer;
var _local3:TextField;
var _local4:SimpleButton;
_local2 = DisplayObject(form).parent;
while (_arg1 != _local2) {
if ((_arg1 is UIComponent)){
if (!UIComponent(_arg1).enabled){
return (false);
};
} else {
if ((_arg1 is TextField)){
_local3 = TextField(_arg1);
if ((((_local3.type == TextFieldType.DYNAMIC)) || (!(_local3.selectable)))){
return (false);
};
} else {
if ((_arg1 is SimpleButton)){
_local4 = SimpleButton(_arg1);
if (!_local4.enabled){
return (false);
};
};
};
};
if (!_arg1.visible){
return (false);
};
_arg1 = _arg1.parent;
};
return (true);
}
public function set defaultButton(_arg1:Button):void{
var _local2:Button;
_local2 = (_arg1) ? Button(_arg1) : null;
if (_local2 != _defaultButton){
if (_defaultButton){
_defaultButton.emphasized = false;
};
if (defButton){
defButton.emphasized = false;
};
_defaultButton = _local2;
defButton = _local2;
if (_local2){
_local2.emphasized = true;
};
};
}
private function deactivateHandler(_arg1:Event):void{
var _local2:InteractiveObject;
_local2 = InteractiveObject(_arg1.target);
}
public function setFocus(_arg1:InteractiveObject):void{
if ((_arg1 is IFocusManagerComponent)){
IFocusManagerComponent(_arg1).setFocus();
} else {
form.stage.focus = _arg1;
};
}
private function setFocusToNextObject(_arg1:FocusEvent):void{
var _local2:InteractiveObject;
if (!hasFocusableObjects()){
return;
};
_local2 = getNextFocusManagerComponent(_arg1.shiftKey);
if (_local2){
setFocus(_local2);
};
}
private function hasFocusableObjects():Boolean{
var _local1:Object;
for (_local1 in focusableObjects) {
return (true);
};
return (false);
}
private function tabIndexChangeHandler(_arg1:Event):void{
calculateCandidates = true;
}
private function sortFocusableObjects():void{
var _local1:Object;
var _local2:InteractiveObject;
focusableCandidates = [];
for (_local1 in focusableObjects) {
_local2 = InteractiveObject(_local1);
if (((((_local2.tabIndex) && (!(isNaN(Number(_local2.tabIndex)))))) && ((_local2.tabIndex > 0)))){
sortFocusableObjectsTabIndex();
return;
};
focusableCandidates.push(_local2);
};
focusableCandidates.sort(sortByDepth);
}
private function keyFocusChangeHandler(_arg1:FocusEvent):void{
showFocusIndicator = true;
if ((((((_arg1.keyCode == Keyboard.TAB)) || ((_arg1.keyCode == 0)))) && (!(_arg1.isDefaultPrevented())))){
setFocusToNextObject(_arg1);
_arg1.preventDefault();
};
}
private function getIndexOfFocusedObject(_arg1:DisplayObject):int{
var _local2:int;
var _local3:int;
_local2 = focusableCandidates.length;
_local3 = 0;
_local3 = 0;
while (_local3 < _local2) {
if (focusableCandidates[_local3] == _arg1){
return (_local3);
};
_local3++;
};
return (-1);
}
public function hideFocus():void{
}
private function removedHandler(_arg1:Event):void{
var _local2:int;
var _local3:DisplayObject;
var _local4:InteractiveObject;
_local3 = DisplayObject(_arg1.target);
if ((((_local3 is IFocusManagerComponent)) && ((focusableObjects[_local3] == true)))){
if (_local3 == lastFocus){
IFocusManagerComponent(lastFocus).drawFocus(false);
lastFocus = null;
};
_local3.removeEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
delete focusableObjects[_local3];
calculateCandidates = true;
} else {
if ((((_local3 is InteractiveObject)) && ((focusableObjects[_local3] == true)))){
_local4 = (_local3 as InteractiveObject);
if (_local4){
if (_local4 == lastFocus){
lastFocus = null;
};
delete focusableObjects[_local4];
calculateCandidates = true;
};
_local3.addEventListener(Event.TAB_ENABLED_CHANGE, tabEnabledChangeHandler);
};
};
removeFocusables(_local3);
}
private function sortByDepth(_arg1:InteractiveObject, _arg2:InteractiveObject):Number{
var _local3:String;
var _local4:String;
var _local5:int;
var _local6:String;
var _local7:String;
var _local8:String;
var _local9:DisplayObject;
var _local10:DisplayObject;
_local3 = "";
_local4 = "";
_local8 = "0000";
_local9 = DisplayObject(_arg1);
_local10 = DisplayObject(_arg2);
while (((!((_local9 == DisplayObject(form)))) && (_local9.parent))) {
_local5 = getChildIndex(_local9.parent, _local9);
_local6 = _local5.toString(16);
if (_local6.length < 4){
_local7 = (_local8.substring(0, (4 - _local6.length)) + _local6);
};
_local3 = (_local7 + _local3);
_local9 = _local9.parent;
};
while (((!((_local10 == DisplayObject(form)))) && (_local10.parent))) {
_local5 = getChildIndex(_local10.parent, _local10);
_local6 = _local5.toString(16);
if (_local6.length < 4){
_local7 = (_local8.substring(0, (4 - _local6.length)) + _local6);
};
_local4 = (_local7 + _local4);
_local10 = _local10.parent;
};
return (((_local3 > _local4)) ? 1 : ((_local3 < _local4)) ? -1 : 0);
}
public function get defaultButton():Button{
return (_defaultButton);
}
private function activateHandler(_arg1:Event):void{
var _local2:InteractiveObject;
_local2 = InteractiveObject(_arg1.target);
if (lastFocus){
if ((lastFocus is IFocusManagerComponent)){
IFocusManagerComponent(lastFocus).setFocus();
} else {
form.stage.focus = lastFocus;
};
};
lastAction = "ACTIVATE";
}
public function showFocus():void{
}
public function set defaultButtonEnabled(_arg1:Boolean):void{
_defaultButtonEnabled = _arg1;
}
public function getNextFocusManagerComponent(_arg1:Boolean=false):InteractiveObject{
var _local2:DisplayObject;
var _local3:String;
var _local4:int;
var _local5:Boolean;
var _local6:int;
var _local7:int;
var _local8:IFocusManagerGroup;
if (!hasFocusableObjects()){
return (null);
};
if (calculateCandidates){
sortFocusableObjects();
calculateCandidates = false;
};
_local2 = form.stage.focus;
_local2 = DisplayObject(findFocusManagerComponent(InteractiveObject(_local2)));
_local3 = "";
if ((_local2 is IFocusManagerGroup)){
_local8 = IFocusManagerGroup(_local2);
_local3 = _local8.groupName;
};
_local4 = getIndexOfFocusedObject(_local2);
_local5 = false;
_local6 = _local4;
if (_local4 == -1){
if (_arg1){
_local4 = focusableCandidates.length;
};
_local5 = true;
};
_local7 = getIndexOfNextObject(_local4, _arg1, _local5, _local3);
return (findFocusManagerComponent(focusableCandidates[_local7]));
}
private function mouseDownHandler(_arg1:MouseEvent):void{
var _local2:InteractiveObject;
if (_arg1.isDefaultPrevented()){
return;
};
_local2 = getTopLevelFocusTarget(InteractiveObject(_arg1.target));
if (!_local2){
return;
};
showFocusIndicator = false;
if (((((!((_local2 == lastFocus))) || ((lastAction == "ACTIVATE")))) && (!((_local2 is TextField))))){
setFocus(_local2);
};
lastAction = "MOUSEDOWN";
}
private function isTabVisible(_arg1:DisplayObject):Boolean{
var _local2:DisplayObjectContainer;
_local2 = _arg1.parent;
while (((((_local2) && (!((_local2 is Stage))))) && (!(((_local2.parent) && ((_local2.parent is Stage))))))) {
if (!_local2.tabChildren){
return (false);
};
_local2 = _local2.parent;
};
return (true);
}
public function get nextTabIndex():int{
return (0);
}
private function keyDownHandler(_arg1:KeyboardEvent):void{
if (_arg1.keyCode == Keyboard.TAB){
lastAction = "KEY";
if (calculateCandidates){
sortFocusableObjects();
calculateCandidates = false;
};
};
if (((((((defaultButtonEnabled) && ((_arg1.keyCode == Keyboard.ENTER)))) && (defaultButton))) && (defButton.enabled))){
sendDefaultButtonEvent();
};
}
private function focusInHandler(_arg1:FocusEvent):void{
var _local2:InteractiveObject;
var _local3:Button;
_local2 = InteractiveObject(_arg1.target);
if (form.contains(_local2)){
lastFocus = findFocusManagerComponent(InteractiveObject(_local2));
if ((lastFocus is Button)){
_local3 = Button(lastFocus);
if (defButton){
defButton.emphasized = false;
defButton = _local3;
_local3.emphasized = true;
};
} else {
if (((defButton) && (!((defButton == _defaultButton))))){
defButton.emphasized = false;
defButton = _defaultButton;
_defaultButton.emphasized = true;
};
};
};
}
private function tabEnabledChangeHandler(_arg1:Event):void{
var _local2:InteractiveObject;
var _local3:Boolean;
calculateCandidates = true;
_local2 = InteractiveObject(_arg1.target);
_local3 = (focusableObjects[_local2] == true);
if (_local2.tabEnabled){
if (((!(_local3)) && (isTabVisible(_local2)))){
if (!(_local2 is IFocusManagerComponent)){
_local2.focusRect = false;
};
focusableObjects[_local2] = true;
};
} else {
if (_local3){
delete focusableObjects[_local2];
};
};
}
public function set showFocusIndicator(_arg1:Boolean):void{
_showFocusIndicator = _arg1;
}
public function get form():DisplayObjectContainer{
return (_form);
}
private function sortByTabIndex(_arg1:InteractiveObject, _arg2:InteractiveObject):int{
return (((_arg1.tabIndex > _arg2.tabIndex)) ? 1 : ((_arg1.tabIndex < _arg2.tabIndex)) ? -1 : sortByDepth(_arg1, _arg2));
}
public function activate():void{
if (activated){
return;
};
form.stage.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, mouseFocusChangeHandler, false, 0, true);
form.stage.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, keyFocusChangeHandler, false, 0, true);
form.addEventListener(FocusEvent.FOCUS_IN, focusInHandler, true);
form.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler, true);
form.stage.addEventListener(Event.ACTIVATE, activateHandler, false, 0, true);
form.stage.addEventListener(Event.DEACTIVATE, deactivateHandler, false, 0, true);
form.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
form.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler, true);
activated = true;
if (lastFocus){
setFocus(lastFocus);
};
}
public function deactivate():void{
form.stage.removeEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, mouseFocusChangeHandler);
form.stage.removeEventListener(FocusEvent.KEY_FOCUS_CHANGE, keyFocusChangeHandler);
form.removeEventListener(FocusEvent.FOCUS_IN, focusInHandler, true);
form.removeEventListener(FocusEvent.FOCUS_OUT, focusOutHandler, true);
form.stage.removeEventListener(Event.ACTIVATE, activateHandler);
form.stage.removeEventListener(Event.DEACTIVATE, deactivateHandler);
form.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
form.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler, true);
activated = false;
}
public function get defaultButtonEnabled():Boolean{
return (_defaultButtonEnabled);
}
}
}//package fl.managers
Section 38
//IFocusManager (fl.managers.IFocusManager)
package fl.managers {
import fl.controls.*;
import flash.display.*;
public interface IFocusManager {
function getFocus():InteractiveObject;
function deactivate():void;
function set defaultButton(_arg1:Button):void;
function set showFocusIndicator(_arg1:Boolean):void;
function get defaultButtonEnabled():Boolean;
function get nextTabIndex():int;
function get defaultButton():Button;
function get showFocusIndicator():Boolean;
function setFocus(_arg1:InteractiveObject):void;
function activate():void;
function showFocus():void;
function set defaultButtonEnabled(_arg1:Boolean):void;
function hideFocus():void;
function findFocusManagerComponent(_arg1:InteractiveObject):InteractiveObject;
function getNextFocusManagerComponent(_arg1:Boolean=false):InteractiveObject;
}
}//package fl.managers
Section 39
//IFocusManagerComponent (fl.managers.IFocusManagerComponent)
package fl.managers {
public interface IFocusManagerComponent {
function set focusEnabled(_arg1:Boolean):void;
function drawFocus(_arg1:Boolean):void;
function setFocus():void;
function get focusEnabled():Boolean;
function get tabEnabled():Boolean;
function get tabIndex():int;
function get mouseFocusEnabled():Boolean;
}
}//package fl.managers
Section 40
//IFocusManagerGroup (fl.managers.IFocusManagerGroup)
package fl.managers {
public interface IFocusManagerGroup {
function set groupName(_arg1:String):void;
function set selected(_arg1:Boolean):void;
function get groupName():String;
function get selected():Boolean;
}
}//package fl.managers
Section 41
//StyleManager (fl.managers.StyleManager)
package fl.managers {
import fl.core.*;
import flash.utils.*;
import flash.text.*;
public class StyleManager {
private var globalStyles:Object;
private var classToDefaultStylesDict:Dictionary;
private var styleToClassesHash:Object;
private var classToStylesDict:Dictionary;
private var classToInstancesDict:Dictionary;
private static var _instance:StyleManager;
public function StyleManager(){
styleToClassesHash = {};
classToInstancesDict = new Dictionary(true);
classToStylesDict = new Dictionary(true);
classToDefaultStylesDict = new Dictionary(true);
globalStyles = UIComponent.getStyleDefinition();
}
public static function clearComponentStyle(_arg1:Object, _arg2:String):void{
var _local3:Class;
var _local4:Object;
_local3 = getClassDef(_arg1);
_local4 = getInstance().classToStylesDict[_local3];
if (((!((_local4 == null))) && (!((_local4[_arg2] == null))))){
delete _local4[_arg2];
invalidateComponentStyle(_local3, _arg2);
};
}
private static function getClassDef(_arg1:Object):Class{
var component = _arg1;
if ((component is Class)){
return ((component as Class));
};
try {
return ((getDefinitionByName(getQualifiedClassName(component)) as Class));
} catch(e:Error) {
if ((component is UIComponent)){
try {
return ((component.loaderInfo.applicationDomain.getDefinition(getQualifiedClassName(component)) as Class));
} catch(e:Error) {
};
};
};
return (null);
}
public static function clearStyle(_arg1:String):void{
setStyle(_arg1, null);
}
public static function setComponentStyle(_arg1:Object, _arg2:String, _arg3:Object):void{
var _local4:Class;
var _local5:Object;
_local4 = getClassDef(_arg1);
_local5 = getInstance().classToStylesDict[_local4];
if (_local5 == null){
_local5 = (getInstance().classToStylesDict[_local4] = {});
};
if (_local5 == _arg3){
return;
};
_local5[_arg2] = _arg3;
invalidateComponentStyle(_local4, _arg2);
}
private static function setSharedStyles(_arg1:UIComponent):void{
var _local2:StyleManager;
var _local3:Class;
var _local4:Object;
var _local5:String;
_local2 = getInstance();
_local3 = getClassDef(_arg1);
_local4 = _local2.classToDefaultStylesDict[_local3];
for (_local5 in _local4) {
_arg1.setSharedStyle(_local5, getSharedStyle(_arg1, _local5));
};
}
public static function getComponentStyle(_arg1:Object, _arg2:String):Object{
var _local3:Class;
var _local4:Object;
_local3 = getClassDef(_arg1);
_local4 = getInstance().classToStylesDict[_local3];
return (((_local4)==null) ? null : _local4[_arg2]);
}
private static function getInstance(){
if (_instance == null){
_instance = new (StyleManager);
};
return (_instance);
}
private static function invalidateComponentStyle(_arg1:Class, _arg2:String):void{
var _local3:Dictionary;
var _local4:Object;
var _local5:UIComponent;
_local3 = getInstance().classToInstancesDict[_arg1];
if (_local3 == null){
return;
};
for (_local4 in _local3) {
_local5 = (_local4 as UIComponent);
if (_local5 == null){
} else {
_local5.setSharedStyle(_arg2, getSharedStyle(_local5, _arg2));
};
};
}
private static function invalidateStyle(_arg1:String):void{
var _local2:Dictionary;
var _local3:Object;
_local2 = getInstance().styleToClassesHash[_arg1];
if (_local2 == null){
return;
};
for (_local3 in _local2) {
invalidateComponentStyle(Class(_local3), _arg1);
};
}
public static function registerInstance(_arg1:UIComponent):void{
var inst:StyleManager;
var classDef:Class;
var target:Class;
var defaultStyles:Object;
var styleToClasses:Object;
var n:String;
var instance = _arg1;
inst = getInstance();
classDef = getClassDef(instance);
if (classDef == null){
return;
};
if (inst.classToInstancesDict[classDef] == null){
inst.classToInstancesDict[classDef] = new Dictionary(true);
target = classDef;
while (defaultStyles == null) {
if (target["getStyleDefinition"] != null){
defaultStyles = target["getStyleDefinition"]();
break;
};
try {
target = (instance.loaderInfo.applicationDomain.getDefinition(getQualifiedSuperclassName(target)) as Class);
} catch(err:Error) {
try {
target = (getDefinitionByName(getQualifiedSuperclassName(target)) as Class);
} catch(e:Error) {
defaultStyles = UIComponent.getStyleDefinition();
break;
};
};
};
styleToClasses = inst.styleToClassesHash;
for (n in defaultStyles) {
if (styleToClasses[n] == null){
styleToClasses[n] = new Dictionary(true);
};
styleToClasses[n][classDef] = true;
};
inst.classToDefaultStylesDict[classDef] = defaultStyles;
inst.classToStylesDict[classDef] = {};
};
inst.classToInstancesDict[classDef][instance] = true;
setSharedStyles(instance);
}
public static function getStyle(_arg1:String):Object{
return (getInstance().globalStyles[_arg1]);
}
private static function getSharedStyle(_arg1:UIComponent, _arg2:String):Object{
var _local3:Class;
var _local4:StyleManager;
var _local5:Object;
_local3 = getClassDef(_arg1);
_local4 = getInstance();
_local5 = _local4.classToStylesDict[_local3][_arg2];
if (_local5 != null){
return (_local5);
};
_local5 = _local4.globalStyles[_arg2];
if (_local5 != null){
return (_local5);
};
return (_local4.classToDefaultStylesDict[_local3][_arg2]);
}
public static function setStyle(_arg1:String, _arg2:Object):void{
var _local3:Object;
_local3 = getInstance().globalStyles;
if ((((_local3[_arg1] === _arg2)) && (!((_arg2 is TextFormat))))){
return;
};
_local3[_arg1] = _arg2;
invalidateStyle(_arg1);
}
}
}//package fl.managers
Section 42
//Boot (flash.Boot)
package flash {
import flash.display.*;
import flash.utils.*;
import flash.text.*;
public dynamic class Boot extends MovieClip {
protected static var lastError:Error;
protected static var tf:TextField;
public static var skip_constructor:Boolean = false;
protected static var lines:Array;
public function Boot(_arg1:MovieClip=null):void{
var aproto:*;
var cca:*;
var c:MovieClip;
var mc = _arg1;
if (!Boot.skip_constructor){
super();
aproto = Array.prototype;
aproto.copy = function (){
return (this.slice());
};
aproto.insert = function (_arg1, _arg2):void{
this.splice(_arg1, 0, _arg2);
};
aproto.remove = function (_arg1):Boolean{
var _local2:int;
_local2 = this.indexOf(_arg1);
if (_local2 == -1){
return (false);
};
this.splice(_local2, 1);
return (true);
};
aproto.iterator = function (){
var cur:int;
var arr:Array;
cur = 0;
arr = this;
return ({hasNext:function ():Boolean{
return ((cur < arr.length));
}, next:function (){
return (arr[cur++]);
}});
};
aproto.setPropertyIsEnumerable("copy", false);
aproto.setPropertyIsEnumerable("insert", false);
aproto.setPropertyIsEnumerable("remove", false);
aproto.setPropertyIsEnumerable("iterator", false);
cca = String.prototype.charCodeAt;
String.prototype.charCodeAt = function (_arg1){
var _local2:*;
_local2 = cca.call(this, _arg1);
if (isNaN(_local2)){
return (null);
};
return (_local2);
};
Boot.lines = new Array();
c = ((mc == null)) ? this : mc;
Lib.current = c;
try {
if (((!((c.stage == null))) && ((c.stage.align == "")))){
c.stage.align = "TOP_LEFT";
//unresolved jump
};
} catch(e) {
};
if (Boot.init != null){
init();
};
};
}
public static function __trace(_arg1, _arg2):void{
var _local3:TextField;
var _local4:String;
var _local5:Stage;
_local3 = getTrace();
_local4 = ((_arg2 == null)) ? "(null)" : ((_arg2.fileName + ":") + _arg2.lineNumber);
Boot.lines = lines.concat(((_local4 + ": ") + __string_rec(_arg1, "")).split("\n"));
_local3.text = lines.join("\n");
_local5 = Lib.current.stage;
if (_local5 == null){
return;
};
while ((((lines.length > 1)) && ((_local3.height > _local5.stageHeight)))) {
lines.shift();
_local3.text = lines.join("\n");
};
}
public static function __string_rec(_arg1, _arg2:String):String{
var cname:String;
var k:Array;
var s:String;
var first:Boolean;
var _g1:int;
var _g:int;
var i:int;
var key:String;
var s2:String;
var i2:*;
var first2:Boolean;
var a:Array;
var _g12:int;
var _g2:int;
var i1:int;
var v = _arg1;
var str = _arg2;
cname = getQualifiedClassName(v);
switch (cname){
case "Object":
k = function ():Array{
var _local1:*;
var _local2:*;
_local1 = new Array();
for (_local2 in v) {
_local1.push(_local2);
};
return (_local1);
}();
s = "{";
first = true;
_g1 = 0;
_g = k.length;
while (_g1 < _g) {
_g1 = (_g1 + 1);
i = _g1;
key = k[i];
if (first){
first = false;
} else {
s = (s + ",");
};
s = (s + (((" " + key) + " : ") + __string_rec(v[key], str)));
};
if (!first){
s = (s + " ");
};
s = (s + "}");
return (s);
case "Array":
s2 = "[";
first2 = true;
a = v;
_g12 = 0;
_g2 = a.length;
while (_g12 < _g2) {
_g12 = (_g12 + 1);
i1 = _g12;
if (first2){
first2 = false;
} else {
s2 = (s2 + ",");
};
s2 = (s2 + __string_rec(a[i1], str));
};
return ((s2 + "]"));
default:
switch (typeof(v)){
case "function":
return ("<function>");
};
break;
};
return (new String(v));
}
public static function __instanceof(_arg1, _arg2):Boolean{
var v = _arg1;
var t = _arg2;
try {
if (t == Object){
return (true);
};
return ((v is t));
} catch(e) {
};
return (false);
}
public static function getTrace():TextField{
var _local1:MovieClip;
var _local2:TextFormat;
_local1 = Lib.current;
if (Boot.tf == null){
Boot.tf = new TextField();
_local2 = tf.getTextFormat();
_local2.font = "_sans";
tf.defaultTextFormat = _local2;
tf.selectable = false;
tf.width = ((_local1.stage == null)) ? 800 : _local1.stage.stageWidth;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.mouseEnabled = false;
};
_local1.addChild(tf);
return (tf);
}
private static function init():void{
Math["NaN"] = Number.NaN;
Math["NEGATIVE_INFINITY"] = Number.NEGATIVE_INFINITY;
Math["POSITIVE_INFINITY"] = Number.POSITIVE_INFINITY;
Math["isFinite"] = function (_arg1:Number):Boolean{
return (isFinite(_arg1));
};
Math["isNaN"] = function (_arg1:Number):Boolean{
return (isNaN(_arg1));
};
Date["now"] = function ():Date{
return (new Date());
};
Date["fromTime"] = function (_arg1:Number):Date{
var _local2:Date;
_local2 = new Date();
_local2.setTime(_arg1);
return (_local2);
};
Date["fromString"] = function (_arg1:String):Date{
var _local2:Array;
var _local3:Date;
var _local4:Array;
var _local5:Array;
var _local6:Array;
var _local7:Array;
switch (_arg1.length){
case 8:
_local2 = _arg1.split(":");
_local3 = new Date();
_local3.setTime(0);
_local3.setUTCHours(_local2[0]);
_local3.setUTCMinutes(_local2[1]);
_local3.setUTCSeconds(_local2[2]);
return (_local3);
case 10:
_local4 = _arg1.split("-");
return (new Date(_local4[0], (_local4[1] - 1), _local4[2], 0, 0, 0));
case 19:
_local5 = _arg1.split(" ");
_local6 = _local5[0].split("-");
_local7 = _local5[1].split(":");
return (new Date(_local6[0], (_local6[1] - 1), _local6[2], _local7[0], _local7[1], _local7[2]));
default:
throw (("Invalid date format : " + _arg1));
};
};
Date.prototype["toString"] = function ():String{
var _local1:Date;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = this;
_local2 = (_local1.getMonth() + 1);
_local3 = _local1.getDate();
_local4 = _local1.getHours();
_local5 = _local1.getMinutes();
_local6 = _local1.getSeconds();
return (((((((((((_local1.getFullYear() + "-") + ((_local2 < 10)) ? ("0" + _local2) : ("" + _local2)) + "-") + ((_local3 < 10)) ? ("0" + _local3) : ("" + _local3)) + " ") + ((_local4 < 10)) ? ("0" + _local4) : ("" + _local4)) + ":") + ((_local5 < 10)) ? ("0" + _local5) : ("" + _local5)) + ":") + ((_local6 < 10)) ? ("0" + _local6) : ("" + _local6)));
};
}
public static function __clear_trace():void{
if (Boot.tf == null){
return;
};
Lib.current.removeChild(tf);
Boot.tf = null;
Boot.lines = new Array();
}
protected static function __unprotect__(_arg1:String):String{
return (_arg1);
}
public static function enum_to_string(_arg1):String{
if (_arg1.params == null){
return (_arg1.tag);
};
return ((((_arg1.tag + "(") + _arg1.params.join(",")) + ")"));
}
public static function __set_trace_color(_arg1:uint):void{
getTrace().textColor = _arg1;
}
}
}//package flash
Section 43
//Lib (flash.Lib)
package flash {
import flash.display.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public class Lib {
public static var current:MovieClip;
public static function trace(_arg1):void{
trace(_arg1);
}
public static function fscommand(_arg1:String, _arg2:String=null):void{
fscommand(_arg1, ((_arg2 == null)) ? "" : _arg2);
}
public static function _as(_arg1, _arg2:Class){
return ((_arg1 as _arg2));
}
public static function getURL(_arg1:URLRequest, _arg2:String=null):void{
var _local3:Function;
_local3 = navigateToURL;
if (_arg2 == null){
_local3(_arg1);
} else {
_local3(_arg1, _arg2);
};
}
public static function eval(_arg1:String){
var p:Array;
var fields:Array;
var o:*;
var _g:int;
var f:String;
var path = _arg1;
p = path.split(".");
fields = new Array();
o = null;
while (p.length > 0) {
try {
o = getDefinitionByName(p.join("."));
} catch(e) {
fields.unshift(p.pop());
};
if (o != null){
break;
};
};
_g = 0;
while (_g < fields.length) {
f = fields[_g];
_g = (_g + 1);
if (o == null){
return (null);
};
o = o[f];
};
return (o);
}
public static function attach(_arg1:String):MovieClip{
var _local2:*;
_local2 = (getDefinitionByName(_arg1) as Class);
return (new (_local2));
}
public static function _getTimer():int{
return (getTimer());
}
}
}//package flash
Section 44
//_Error (haxe.io._Error)
package haxe.io {
public class _Error extends enum {
public static const __isenum:Boolean = true;
public static var Overflow:_Error = new _Error("Overflow", 1);
;
public static var OutsideBounds:_Error = new _Error("OutsideBounds", 2);
;
public static var Blocked:_Error = new _Error("Blocked", 0);
;
public static var __constructs__:Array = ["Blocked", "Overflow", "OutsideBounds", "Custom"];
public function _Error(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
public static function Custom(_arg1):_Error{
return (new _Error("Custom", 3, [_arg1]));
}
}
}//package haxe.io
Section 45
//Bytes (haxe.io.Bytes)
package haxe.io {
import flash.utils.*;
import flash.*;
public class Bytes {
protected var b:ByteArray;
public var length:int;
public function Bytes(_arg1:int=0, _arg2:ByteArray=null):void{
if (!Boot.skip_constructor){
this.length = _arg1;
this.b = _arg2;
};
}
public function sub(_arg1:int, _arg2:int):Bytes{
var _local3:ByteArray;
if ((((((_arg1 < 0)) || ((_arg2 < 0)))) || (((_arg1 + _arg2) > this.length)))){
throw (_Error.OutsideBounds);
};
this.b.position = _arg1;
_local3 = new ByteArray();
this.b.readBytes(_local3, 0, _arg2);
return (new Bytes(_arg2, _local3));
}
public function compare(_arg1:Bytes):int{
var _local2:int;
var _local3:ByteArray;
var _local4:ByteArray;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
_local2 = ((this.length)<_arg1.length) ? this.length : _arg1.length;
_local3 = this.b;
_local4 = _arg1.b;
_local3.position = 0;
_local4.position = 0;
_local5 = 0;
_local6 = (_local2 >> 2);
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local9 = _temp1;
if (_local3.readUnsignedInt() != _local4.readUnsignedInt()){
_local3.position = (_local3.position - 4);
_local4.position = (_local4.position - 4);
return ((_local3.readUnsignedInt() - _local4.readUnsignedInt()));
};
};
_local7 = 0;
_local8 = (_local2 & 3);
while (_local7 < _local8) {
var _temp2 = _local7;
_local7 = (_local7 + 1);
_local10 = _temp2;
if (_local3.readUnsignedByte() != _local4.readUnsignedByte()){
return ((_local3[(_local3.position - 1)] - _local4[(_local4.position - 1)]));
};
};
return ((this.length - _arg1.length));
}
public function set(_arg1:int, _arg2:int):void{
this.b[_arg1] = _arg2;
}
public function readString(_arg1:int, _arg2:int):String{
if ((((((_arg1 < 0)) || ((_arg2 < 0)))) || (((_arg1 + _arg2) > this.length)))){
throw (_Error.OutsideBounds);
};
this.b.position = _arg1;
return (this.b.readUTFBytes(_arg2));
}
public function blit(_arg1:int, _arg2:Bytes, _arg3:int, _arg4:int):void{
if ((((((((((_arg1 < 0)) || ((_arg3 < 0)))) || ((_arg4 < 0)))) || (((_arg1 + _arg4) > this.length)))) || (((_arg3 + _arg4) > _arg2.length)))){
throw (_Error.OutsideBounds);
};
this.b.position = _arg1;
this.b.writeBytes(_arg2.b, _arg3, _arg4);
}
public function get(_arg1:int):int{
return (this.b[_arg1]);
}
public function getData():ByteArray{
return (this.b);
}
public function toString():String{
this.b.position = 0;
return (this.b.readUTFBytes(this.length));
}
public static function ofString(_arg1:String):Bytes{
var _local2:ByteArray;
_local2 = new ByteArray();
_local2.writeUTFBytes(_arg1);
return (new Bytes(_local2.length, _local2));
}
public static function ofData(_arg1:ByteArray):Bytes{
return (new Bytes(_arg1.length, _arg1));
}
public static function alloc(_arg1:int):Bytes{
var _local2:ByteArray;
_local2 = new ByteArray();
_local2.length = _arg1;
return (new Bytes(_arg1, _local2));
}
}
}//package haxe.io
Section 46
//BaseCode (haxe.BaseCode)
package haxe {
import haxe.io.*;
import flash.*;
public class BaseCode {
protected var tbl:Array;
protected var base:Bytes;
protected var nbits:int;
public function BaseCode(_arg1:Bytes=null):void{
var _local2:int;
var _local3:int;
super();
if (!Boot.skip_constructor){
_local2 = _arg1.length;
_local3 = 1;
while (_local2 > (1 << _local3)) {
_local3++;
};
if ((((_local3 > 8)) || (!((_local2 == (1 << _local3)))))){
throw ("BaseCode : base length must be a power of two.");
};
this.base = _arg1;
this.nbits = _local3;
};
}
public function encodeString(_arg1:String):String{
return (this.encodeBytes(Bytes.ofString(_arg1)).toString());
}
public function encodeBytes(_arg1:Bytes):Bytes{
var _local2:int;
var _local3:Bytes;
var _local4:int;
var _local5:Bytes;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
_local2 = this.nbits;
_local3 = this.base;
_local4 = Std._int(((_arg1.length * 8) / _local2));
_local5 = Bytes.alloc((_local4 + ((((_arg1.length * 8) % _local2))==0) ? 0 : 1));
_local6 = 0;
_local7 = 0;
_local8 = ((1 << _local2) - 1);
_local9 = 0;
_local10 = 0;
while (_local10 < _local4) {
while (_local7 < _local2) {
_local7 = (_local7 + 8);
_local6 = (_local6 << 8);
var _temp1 = _local9;
_local9 = (_local9 + 1);
_local6 = (_local6 | _arg1.get(_temp1));
};
_local7 = (_local7 - _local2);
var _temp2 = _local10;
_local10 = (_local10 + 1);
_local5.set(_temp2, _local3.get(((_local6 >> _local7) & _local8)));
};
if (_local7 > 0){
var _temp3 = _local10;
_local10 = (_local10 + 1);
_local5.set(_temp3, _local3.get(((_local6 << (_local2 - _local7)) & _local8)));
};
return (_local5);
}
public function decodeBytes(_arg1:Bytes):Bytes{
var _local2:int;
var _local3:Bytes;
var _local4:Array;
var _local5:int;
var _local6:Bytes;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
_local2 = this.nbits;
_local3 = this.base;
if (this.tbl == null){
this.initTable();
};
_local4 = this.tbl;
_local5 = ((_arg1.length * _local2) >> 3);
_local6 = Bytes.alloc(_local5);
_local7 = 0;
_local8 = 0;
_local9 = 0;
_local10 = 0;
while (_local10 < _local5) {
while (_local8 < 8) {
_local8 = (_local8 + _local2);
_local7 = (_local7 << _local2);
var _temp1 = _local9;
_local9 = (_local9 + 1);
_local11 = _local4[_arg1.get(_temp1)];
if (_local11 == -1){
throw ("BaseCode : invalid encoded char");
};
_local7 = (_local7 | _local11);
};
_local8 = (_local8 - 8);
var _temp2 = _local10;
_local10 = (_local10 + 1);
_local6.set(_temp2, ((_local7 >> _local8) & 0xFF));
};
return (_local6);
}
protected function initTable():void{
var _local1:Array;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = new Array();
_local2 = 0;
while (_local2 < 0x0100) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local5 = _temp1;
_local1[_local5] = -1;
};
_local3 = 0;
_local4 = this.base.length;
while (_local3 < _local4) {
var _temp2 = _local3;
_local3 = (_local3 + 1);
_local6 = _temp2;
_local1[this.base.get(_local6)] = _local6;
};
this.tbl = _local1;
}
public function decodeString(_arg1:String):String{
return (this.decodeBytes(Bytes.ofString(_arg1)).toString());
}
public static function decode(_arg1:String, _arg2:String):String{
var _local3:BaseCode;
_local3 = new BaseCode(Bytes.ofString(_arg2));
return (_local3.decodeString(_arg1));
}
public static function encode(_arg1:String, _arg2:String):String{
var _local3:BaseCode;
_local3 = new BaseCode(Bytes.ofString(_arg2));
return (_local3.encodeString(_arg1));
}
}
}//package haxe
Section 47
//Log (haxe.Log)
package haxe {
import flash.*;
public class Log {
public static var setColor:Function = function (_arg1:int):void{
Boot.__set_trace_color(_arg1);
};
public static var trace:Function = function (_arg1, _arg2=null):void{
Boot.__trace(_arg1, _arg2);
};
public static var clear:Function = function ():void{
Boot.__clear_trace();
};
}
}//package haxe
Section 48
//Md5 (haxe.Md5)
package haxe {
public class Md5 {
protected static var inst:Md5 = new (Md5);
;
public function Md5():void{
}
protected function ff(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
return (this.cmn(this.bitOR(this.bitAND(_arg2, _arg3), this.bitAND(~(_arg2), _arg4)), _arg1, _arg2, _arg5, _arg6, _arg7));
}
protected function hh(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
return (this.cmn(this.bitXOR(this.bitXOR(_arg2, _arg3), _arg4), _arg1, _arg2, _arg5, _arg6, _arg7));
}
protected function cmn(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):int{
return (this.addme(this.rol(this.addme(this.addme(_arg2, _arg1), this.addme(_arg4, _arg6)), _arg5), _arg3));
}
protected function doEncode(_arg1:String):String{
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
_local2 = this.str2blks(_arg1);
_local3 = 1732584193;
_local4 = -271733879;
_local5 = -1732584194;
_local6 = 271733878;
_local8 = 0;
while (_local8 < _local2.length) {
_local9 = _local3;
_local10 = _local4;
_local11 = _local5;
_local12 = _local6;
_local7 = 0;
_local3 = this.ff(_local3, _local4, _local5, _local6, _local2[_local8], 7, -680876936);
_local6 = this.ff(_local6, _local3, _local4, _local5, _local2[(_local8 + 1)], 12, -389564586);
_local5 = this.ff(_local5, _local6, _local3, _local4, _local2[(_local8 + 2)], 17, 606105819);
_local4 = this.ff(_local4, _local5, _local6, _local3, _local2[(_local8 + 3)], 22, -1044525330);
_local3 = this.ff(_local3, _local4, _local5, _local6, _local2[(_local8 + 4)], 7, -176418897);
_local6 = this.ff(_local6, _local3, _local4, _local5, _local2[(_local8 + 5)], 12, 1200080426);
_local5 = this.ff(_local5, _local6, _local3, _local4, _local2[(_local8 + 6)], 17, -1473231341);
_local4 = this.ff(_local4, _local5, _local6, _local3, _local2[(_local8 + 7)], 22, -45705983);
_local3 = this.ff(_local3, _local4, _local5, _local6, _local2[(_local8 + 8)], 7, 1770035416);
_local6 = this.ff(_local6, _local3, _local4, _local5, _local2[(_local8 + 9)], 12, -1958414417);
_local5 = this.ff(_local5, _local6, _local3, _local4, _local2[(_local8 + 10)], 17, -42063);
_local4 = this.ff(_local4, _local5, _local6, _local3, _local2[(_local8 + 11)], 22, -1990404162);
_local3 = this.ff(_local3, _local4, _local5, _local6, _local2[(_local8 + 12)], 7, 1804603682);
_local6 = this.ff(_local6, _local3, _local4, _local5, _local2[(_local8 + 13)], 12, -40341101);
_local5 = this.ff(_local5, _local6, _local3, _local4, _local2[(_local8 + 14)], 17, -1502002290);
_local4 = this.ff(_local4, _local5, _local6, _local3, _local2[(_local8 + 15)], 22, 1236535329);
_local3 = this.gg(_local3, _local4, _local5, _local6, _local2[(_local8 + 1)], 5, -165796510);
_local6 = this.gg(_local6, _local3, _local4, _local5, _local2[(_local8 + 6)], 9, -1069501632);
_local5 = this.gg(_local5, _local6, _local3, _local4, _local2[(_local8 + 11)], 14, 643717713);
_local4 = this.gg(_local4, _local5, _local6, _local3, _local2[_local8], 20, -373897302);
_local3 = this.gg(_local3, _local4, _local5, _local6, _local2[(_local8 + 5)], 5, -701558691);
_local6 = this.gg(_local6, _local3, _local4, _local5, _local2[(_local8 + 10)], 9, 38016083);
_local5 = this.gg(_local5, _local6, _local3, _local4, _local2[(_local8 + 15)], 14, -660478335);
_local4 = this.gg(_local4, _local5, _local6, _local3, _local2[(_local8 + 4)], 20, -405537848);
_local3 = this.gg(_local3, _local4, _local5, _local6, _local2[(_local8 + 9)], 5, 568446438);
_local6 = this.gg(_local6, _local3, _local4, _local5, _local2[(_local8 + 14)], 9, -1019803690);
_local5 = this.gg(_local5, _local6, _local3, _local4, _local2[(_local8 + 3)], 14, -187363961);
_local4 = this.gg(_local4, _local5, _local6, _local3, _local2[(_local8 + 8)], 20, 1163531501);
_local3 = this.gg(_local3, _local4, _local5, _local6, _local2[(_local8 + 13)], 5, -1444681467);
_local6 = this.gg(_local6, _local3, _local4, _local5, _local2[(_local8 + 2)], 9, -51403784);
_local5 = this.gg(_local5, _local6, _local3, _local4, _local2[(_local8 + 7)], 14, 1735328473);
_local4 = this.gg(_local4, _local5, _local6, _local3, _local2[(_local8 + 12)], 20, -1926607734);
_local3 = this.hh(_local3, _local4, _local5, _local6, _local2[(_local8 + 5)], 4, -378558);
_local6 = this.hh(_local6, _local3, _local4, _local5, _local2[(_local8 + 8)], 11, -2022574463);
_local5 = this.hh(_local5, _local6, _local3, _local4, _local2[(_local8 + 11)], 16, 1839030562);
_local4 = this.hh(_local4, _local5, _local6, _local3, _local2[(_local8 + 14)], 23, -35309556);
_local3 = this.hh(_local3, _local4, _local5, _local6, _local2[(_local8 + 1)], 4, -1530992060);
_local6 = this.hh(_local6, _local3, _local4, _local5, _local2[(_local8 + 4)], 11, 1272893353);
_local5 = this.hh(_local5, _local6, _local3, _local4, _local2[(_local8 + 7)], 16, -155497632);
_local4 = this.hh(_local4, _local5, _local6, _local3, _local2[(_local8 + 10)], 23, -1094730640);
_local3 = this.hh(_local3, _local4, _local5, _local6, _local2[(_local8 + 13)], 4, 681279174);
_local6 = this.hh(_local6, _local3, _local4, _local5, _local2[_local8], 11, -358537222);
_local5 = this.hh(_local5, _local6, _local3, _local4, _local2[(_local8 + 3)], 16, -722521979);
_local4 = this.hh(_local4, _local5, _local6, _local3, _local2[(_local8 + 6)], 23, 76029189);
_local3 = this.hh(_local3, _local4, _local5, _local6, _local2[(_local8 + 9)], 4, -640364487);
_local6 = this.hh(_local6, _local3, _local4, _local5, _local2[(_local8 + 12)], 11, -421815835);
_local5 = this.hh(_local5, _local6, _local3, _local4, _local2[(_local8 + 15)], 16, 530742520);
_local4 = this.hh(_local4, _local5, _local6, _local3, _local2[(_local8 + 2)], 23, -995338651);
_local3 = this.ii(_local3, _local4, _local5, _local6, _local2[_local8], 6, -198630844);
_local6 = this.ii(_local6, _local3, _local4, _local5, _local2[(_local8 + 7)], 10, 1126891415);
_local5 = this.ii(_local5, _local6, _local3, _local4, _local2[(_local8 + 14)], 15, -1416354905);
_local4 = this.ii(_local4, _local5, _local6, _local3, _local2[(_local8 + 5)], 21, -57434055);
_local3 = this.ii(_local3, _local4, _local5, _local6, _local2[(_local8 + 12)], 6, 1700485571);
_local6 = this.ii(_local6, _local3, _local4, _local5, _local2[(_local8 + 3)], 10, -1894986606);
_local5 = this.ii(_local5, _local6, _local3, _local4, _local2[(_local8 + 10)], 15, -1051523);
_local4 = this.ii(_local4, _local5, _local6, _local3, _local2[(_local8 + 1)], 21, -2054922799);
_local3 = this.ii(_local3, _local4, _local5, _local6, _local2[(_local8 + 8)], 6, 1873313359);
_local6 = this.ii(_local6, _local3, _local4, _local5, _local2[(_local8 + 15)], 10, -30611744);
_local5 = this.ii(_local5, _local6, _local3, _local4, _local2[(_local8 + 6)], 15, -1560198380);
_local4 = this.ii(_local4, _local5, _local6, _local3, _local2[(_local8 + 13)], 21, 1309151649);
_local3 = this.ii(_local3, _local4, _local5, _local6, _local2[(_local8 + 4)], 6, -145523070);
_local6 = this.ii(_local6, _local3, _local4, _local5, _local2[(_local8 + 11)], 10, -1120210379);
_local5 = this.ii(_local5, _local6, _local3, _local4, _local2[(_local8 + 2)], 15, 718787259);
_local4 = this.ii(_local4, _local5, _local6, _local3, _local2[(_local8 + 9)], 21, -343485551);
_local3 = this.addme(_local3, _local9);
_local4 = this.addme(_local4, _local10);
_local5 = this.addme(_local5, _local11);
_local6 = this.addme(_local6, _local12);
_local8 = (_local8 + 16);
};
return ((((this.rhex(_local3) + this.rhex(_local4)) + this.rhex(_local5)) + this.rhex(_local6)));
}
protected function rhex(_arg1:int):String{
var _local2:String;
var _local3:String;
var _local4:int;
var _local5:int;
_local2 = "";
_local3 = "0123456789abcdef";
_local4 = 0;
while (_local4 < 4) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local5 = _temp1;
_local2 = (_local2 + (_local3.charAt(((_arg1 >> ((_local5 * 8) + 4)) & 15)) + _local3.charAt(((_arg1 >> (_local5 * 8)) & 15))));
};
return (_local2);
}
protected function bitAND(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = ((_arg1 & 1) & (_arg2 & 1));
_local4 = ((_arg1 >>> 1) & (_arg2 >>> 1));
return (((_local4 << 1) | _local3));
}
protected function ii(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
return (this.cmn(this.bitXOR(_arg3, this.bitOR(_arg2, ~(_arg4))), _arg1, _arg2, _arg5, _arg6, _arg7));
}
protected function bitXOR(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = ((_arg1 & 1) ^ (_arg2 & 1));
_local4 = ((_arg1 >>> 1) ^ (_arg2 >>> 1));
return (((_local4 << 1) | _local3));
}
protected function rol(_arg1:int, _arg2:int):int{
return (((_arg1 << _arg2) | (_arg1 >>> (32 - _arg2))));
}
protected function bitOR(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = ((_arg1 & 1) | (_arg2 & 1));
_local4 = ((_arg1 >>> 1) | (_arg2 >>> 1));
return (((_local4 << 1) | _local3));
}
protected function str2blks(_arg1:String):Array{
var _local2:int;
var _local3:Array;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local2 = (((_arg1.length + 8) >> 6) + 1);
_local3 = new Array();
_local4 = 0;
_local5 = (_local2 * 16);
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local9 = _temp1;
_local3[_local9] = 0;
};
_local6 = 0;
while (_local6 < _arg1.length) {
_local3[(_local6 >> 2)] = (_local3[(_local6 >> 2)] | (_arg1["charCodeAt"](_local6) << ((((_arg1.length * 8) + _local6) % 4) * 8)));
_local6++;
};
_local3[(_local6 >> 2)] = (_local3[(_local6 >> 2)] | (128 << ((((_arg1.length * 8) + _local6) % 4) * 8)));
_local7 = (_arg1.length * 8);
_local8 = ((_local2 * 16) - 2);
_local3[_local8] = (_local7 & 0xFF);
_local3[_local8] = (_local3[_local8] | (((_local7 >>> 8) & 0xFF) << 8));
_local3[_local8] = (_local3[_local8] | (((_local7 >>> 16) & 0xFF) << 16));
_local3[_local8] = (_local3[_local8] | (((_local7 >>> 24) & 0xFF) << 24));
return (_local3);
}
protected function gg(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
return (this.cmn(this.bitOR(this.bitAND(_arg2, _arg4), this.bitAND(_arg3, ~(_arg4))), _arg1, _arg2, _arg5, _arg6, _arg7));
}
protected function addme(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = ((_arg1 & 0xFFFF) + (_arg2 & 0xFFFF));
_local4 = (((_arg1 >> 16) + (_arg2 >> 16)) + (_local3 >> 16));
return (((_local4 << 16) | (_local3 & 0xFFFF)));
}
public static function encode(_arg1:String):String{
return (inst.doEncode(_arg1));
}
}
}//package haxe
Section 49
//BuildMission (logic.mission.BuildMission)
package logic.mission {
import ui.*;
import flash.*;
public class BuildMission extends Mission {
protected var buildType:int;
protected var shadow:TowerSprite;
public function BuildMission(_arg1:Point=null, _arg2:Point=null, _arg3:Resource=null, _arg4:int=0):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2, _arg3);
this.buildType = _arg4;
this.shadow = null;
if (_arg1 != null){
this.takePayload();
this.shadow = Game.map.getCell(this.dest.x, this.dest.y).setShadow(this.buildType);
if (this.buildType == Tower.BARRICADE){
this.sourceTower.addIncomingSurvivor(this.survivorType);
};
};
this.type = Mission.BUILD;
};
}
override public function canSucceed():Boolean{
return ((Game.map.getCell(this.dest.x, this.dest.y).getShadow() == this.shadow));
}
override public function fail():Mission{
var _local1:int;
this.cleanup();
_local1 = Option.truckLoad;
if (this.payload == Resource.SURVIVORS){
_local1 = 1;
};
return (ReturnMission.create(this.dest, this.source, this.payload, _local1, this.survivorType));
}
override public function cleanup():void{
if (this.shadow == Game.map.getCell(this.dest.x, this.dest.y).getShadow()){
Game.map.getCell(this.dest.x, this.dest.y).clearShadow();
};
if (this.buildType == Tower.BARRICADE){
this.sourceTower.removeIncomingSurvivor(this.survivorType);
};
}
override public function complete():Mission{
var _local1:Mission;
var _local2:MapCell;
_local1 = null;
_local2 = Game.map.getCell(this.dest.x, this.dest.y);
if (((((!(_local2.hasZombies())) && (!(_local2.hasTower())))) && (_local2.hasShadow()))){
this.cleanup();
_local2.createTower(this.buildType);
this.destTower = _local2.getTower();
if (this.sourceExists()){
this.sourceTower.addTradeLink(this.dest);
};
Game.map.noise(this.dest.x, this.dest.y, Option.buildNoise, this.destTower.getZombieGuide());
Main.sound.play(SoundPlayer.TOWER_BUILD);
if (this.buildType == Tower.BARRICADE){
this.destTower.giveResource(new ResourceCount(this.payload, Lib.truckLoad(this.payload)));
_local1 = ReturnMission.create(this.dest, this.source, Resource.SURVIVORS, Lib.truckLoad(Resource.SURVIVORS), this.survivorType);
} else {
this.destTower.giveSurvivor(this.survivorType);
};
} else {
_local1 = this.fail();
};
return (_local1);
}
override public function save(){
return ({parent:super.save(), buildType:this.buildType});
}
public static function create(_arg1:Point, _arg2:Point, _arg3:Resource, _arg4:int):Mission{
var _local5:Mission;
_local5 = null;
if (((Mission.sourceHasPayload(_arg1, _arg3)) && (!(Game.map.getCell(_arg2.x, _arg2.y).hasTower())))){
_local5 = new BuildMission(_arg1, _arg2, _arg3, _arg4);
};
return (_local5);
}
public static function load(_arg1):BuildMission{
var _local2:BuildMission;
_local2 = new BuildMission(null, null, null, 0);
_local2.buildType = _arg1.buildType;
_local2.shadow = Game.map.getCell(_arg1.parent.dest.x, _arg1.parent.dest.y).getShadow();
return (_local2);
}
}
}//package logic.mission
Section 50
//Mission (logic.mission.Mission)
package logic.mission {
import flash.*;
public class Mission {
protected var destTower:Tower;
protected var survivorType:int;
protected var source:Point;
protected var payload:Resource;
protected var dest:Point;
protected var sourceTower:Tower;
protected var type:int;
public static var RETURN:int = 1;
public static var SUPPLY:int = 2;
public static var UPGRADE:int = 3;
public static var BUILD:int = 0;
public function Mission(_arg1:Point=null, _arg2:Point=null, _arg3:Resource=null):void{
if (!Boot.skip_constructor){
this.source = null;
this.sourceTower = null;
this.dest = null;
this.destTower = null;
this.payload = null;
if (_arg1 != null){
this.source = new Point(_arg1.x, _arg1.y);
this.sourceTower = Game.map.getCell(this.source.x, this.source.y).getTower();
this.dest = new Point(_arg2.x, _arg2.y);
this.destTower = Game.map.getCell(this.dest.x, this.dest.y).getTower();
this.payload = _arg3;
};
this.type = 0;
};
}
public function takeFood():int{
var _local1:int;
var _local2:ResourceCount;
_local1 = 0;
if (this.sourceTower != null){
_local1 = this.sourceTower.getTruckSpeed();
if (this.sourceTower.shouldUseFood()){
_local2 = new ResourceCount(Resource.FOOD, this.sourceTower.getFoodCost());
if (this.sourceTower.hasResource(_local2)){
this.sourceTower.takeResource(_local2);
_local1 = (Option.foodTruckSpeedMin + Lib.rand(Option.foodTruckSpeedRange));
};
};
};
return (_local1);
}
public function getSurvivorType():int{
return (this.survivorType);
}
public function getSource():Point{
return (this.source);
}
public function canSucceed():Boolean{
return (this.destExists());
}
protected function takePayload():void{
if (this.payload != Resource.SURVIVORS){
this.sourceTower.takeResource(new ResourceCount(this.payload, Lib.truckLoad(this.payload)));
};
this.survivorType = this.sourceTower.takeSurvivor();
}
protected function sourceExists():Boolean{
return ((Game.map.getCell(this.source.x, this.source.y).getTower() == this.sourceTower));
}
public function getDest():Point{
return (this.dest);
}
protected function destExists():Boolean{
return ((Game.map.getCell(this.dest.x, this.dest.y).getTower() == this.destTower));
}
public function getPayload():Resource{
return (this.payload);
}
public function cleanup():void{
}
public function fail():Mission{
return (null);
}
public function dropLoad(_arg1:int, _arg2:int):void{
if (this.payload != Resource.SURVIVORS){
Game.map.getCell(_arg1, _arg2).addRubble(this.payload, Option.truckLoad);
};
}
public function complete():Mission{
return (null);
}
public function save(){
return ({source:this.source.save(), dest:this.dest.save(), payload:Lib.resourceToIndex(this.payload), type:this.type, survivorType:this.survivorType});
}
public static function loadMission(_arg1):Mission{
var _local2:Mission;
_local2 = null;
if (_arg1.parent.type == BUILD){
_local2 = BuildMission.load(_arg1);
} else {
if (_arg1.parent.type == RETURN){
_local2 = ReturnMission.load(_arg1);
} else {
if (_arg1.parent.type == SUPPLY){
_local2 = SupplyMission.load(_arg1);
} else {
_local2 = UpgradeMission.load(_arg1);
};
};
};
_local2.source = Point.load(_arg1.parent.source);
_local2.sourceTower = Game.map.getCell(_local2.source.x, _local2.source.y).getTower();
_local2.dest = Point.load(_arg1.parent.dest);
_local2.destTower = Game.map.getCell(_local2.dest.x, _local2.dest.y).getTower();
_local2.payload = Lib.indexToResource(_arg1.parent.payload);
_local2.type = _arg1.parent.type;
_local2.survivorType = _arg1.parent.survivorType;
return (_local2);
}
protected static function sourceHasPayload(_arg1:Point, _arg2:Resource):Boolean{
var _local3:Tower;
_local3 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
return (((((!((_local3 == null))) && (_local3.hasResource(new ResourceCount(_arg2, Lib.truckLoad(_arg2)))))) && (_local3.hasResource(Lib.survivorLoad))));
}
}
}//package logic.mission
Section 51
//ReturnMission (logic.mission.ReturnMission)
package logic.mission {
import flash.*;
public class ReturnMission extends Mission {
protected var amount:int;
public function ReturnMission(_arg1:Point=null, _arg2:Point=null, _arg3:Resource=null, _arg4:int=0, _arg5:int=0):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2, _arg3);
this.survivorType = _arg5;
this.amount = _arg4;
if (_arg1 != null){
if (this.payload != Resource.SURVIVORS){
this.destTower.addIncoming(new ResourceCount(this.payload, this.amount));
};
this.destTower.addIncomingSurvivor(this.survivorType);
};
this.type = Mission.RETURN;
};
}
override public function takeFood():int{
return ((Option.returnTruckSpeedMin + Lib.rand(Option.returnTruckSpeedRange)));
}
override public function fail():Mission{
var _local1:Mission;
var _local2:Point;
_local1 = null;
_local2 = Game.progress.getRandomDepot();
if (_local2 != null){
_local1 = create(this.source, _local2, this.payload, this.amount, this.survivorType);
};
this.cleanup();
return (_local1);
}
override public function cleanup():void{
if (this.destExists()){
if (this.payload != Resource.SURVIVORS){
this.destTower.removeIncoming(new ResourceCount(this.payload, this.amount));
};
this.destTower.removeIncomingSurvivor(this.survivorType);
};
}
override public function dropLoad(_arg1:int, _arg2:int):void{
if (this.payload != Resource.SURVIVORS){
Game.map.getCell(_arg1, _arg2).addRubble(this.payload, this.amount);
};
}
override public function complete():Mission{
var _local1:Mission;
_local1 = null;
if (this.destExists()){
this.cleanup();
if (this.payload != Resource.SURVIVORS){
this.destTower.giveResource(new ResourceCount(this.payload, this.amount));
};
this.destTower.giveSurvivor(this.survivorType);
} else {
_local1 = this.fail();
};
return (_local1);
}
override public function save(){
return ({parent:super.save(), amount:this.amount});
}
protected static function isValid(_arg1:Point, _arg2:Resource, _arg3:int):Boolean{
var _local4:Tower;
_local4 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
return (!((_local4 == null)));
}
public static function create(_arg1:Point, _arg2:Point, _arg3:Resource, _arg4:int, _arg5:int):Mission{
var _local6:Mission;
var _local7:Point;
_local6 = null;
_local7 = Game.progress.getRandomDepot();
if (isValid(_arg2, _arg3, _arg4)){
_local6 = new ReturnMission(_arg1, _arg2, _arg3, _arg4, _arg5);
} else {
if (((!((_local7 == null))) && (isValid(_local7, _arg3, _arg4)))){
_local6 = new ReturnMission(_arg1, _local7, _arg3, _arg4, _arg5);
};
};
return (_local6);
}
public static function load(_arg1):ReturnMission{
var _local2:ReturnMission;
_local2 = new ReturnMission(null, null, null, 0, 0);
_local2.amount = _arg1.amount;
return (_local2);
}
}
}//package logic.mission
Section 52
//SupplyMission (logic.mission.SupplyMission)
package logic.mission {
import flash.*;
public class SupplyMission extends Mission {
protected var amount:int;
public function SupplyMission(_arg1:Point=null, _arg2:Point=null, _arg3:Resource=null, _arg4:int=0):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2, _arg3);
this.amount = _arg4;
if (_arg1 != null){
if (this.payload != Resource.SURVIVORS){
this.sourceTower.takeResource(new ResourceCount(this.payload, this.amount));
};
this.survivorType = this.sourceTower.takeSurvivor();
if (this.payload == Resource.SURVIVORS){
this.destTower.addIncomingSurvivor(this.survivorType);
} else {
this.destTower.addIncoming(new ResourceCount(this.payload, this.amount));
this.sourceTower.addIncomingSurvivor(this.survivorType);
};
};
this.type = Mission.SUPPLY;
};
}
override public function fail():Mission{
this.cleanup();
return (ReturnMission.create(this.dest, this.source, this.payload, this.amount, this.survivorType));
}
override public function cleanup():void{
if (this.payload == Resource.SURVIVORS){
if (this.destExists()){
this.destTower.removeIncomingSurvivor(this.survivorType);
};
} else {
if (this.destExists()){
this.destTower.removeIncoming(new ResourceCount(this.payload, this.amount));
};
if (this.sourceExists()){
this.sourceTower.removeIncomingSurvivor(this.survivorType);
};
};
}
override public function dropLoad(_arg1:int, _arg2:int):void{
if (this.payload != Resource.SURVIVORS){
Game.map.getCell(_arg1, _arg2).addRubble(this.payload, this.amount);
};
}
override public function complete():Mission{
var _local1:Mission;
_local1 = null;
if (this.destExists()){
this.cleanup();
if (this.payload == Resource.SURVIVORS){
this.destTower.giveSurvivor(this.survivorType);
} else {
this.destTower.giveResource(new ResourceCount(this.payload, this.amount));
};
if (this.payload != Resource.SURVIVORS){
this.payload = Resource.SURVIVORS;
_local1 = ReturnMission.create(this.dest, this.source, Resource.SURVIVORS, 1, this.survivorType);
};
Main.sound.play(SoundPlayer.TOWER_SUPPLY);
} else {
_local1 = this.fail();
};
return (_local1);
}
override public function save(){
return ({parent:super.save(), amount:this.amount});
}
public static function create(_arg1:Point, _arg2:Point, _arg3:Resource, _arg4:int):Mission{
var _local5:Mission;
var _local6:Tower;
var _local7:Tower;
_local5 = null;
_local6 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
_local7 = Game.map.getCell(_arg2.x, _arg2.y).getTower();
if ((((((_local6.countResource(_arg3) >= _arg4)) && (_local6.hasResource(Lib.survivorLoad)))) && (!((_local7 == null))))){
_local5 = new SupplyMission(_arg1, _arg2, _arg3, _arg4);
} else {
if (_local6.countResource(_arg3) < _arg4){
Lib.trace("Source tower does not have resources");
};
if (!_local6.hasResource(Lib.survivorLoad)){
Lib.trace("Source tower does not have a survivor");
};
if (_local7 == null){
Lib.trace("No Dest Tower");
};
};
return (_local5);
}
public static function load(_arg1):SupplyMission{
var _local2:SupplyMission;
_local2 = new SupplyMission(null, null, null, 0);
_local2.amount = _arg1.amount;
return (_local2);
}
}
}//package logic.mission
Section 53
//UpgradeMission (logic.mission.UpgradeMission)
package logic.mission {
import flash.*;
public class UpgradeMission extends Mission {
public function UpgradeMission(_arg1:Point=null, _arg2:Point=null, _arg3:Resource=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2, _arg3);
if (_arg1 != null){
this.takePayload();
this.sourceTower.addIncomingSurvivor(this.survivorType);
this.destTower.reserveUpgrade();
};
this.type = Mission.UPGRADE;
};
}
override public function fail():Mission{
var _local1:int;
this.cleanup();
_local1 = Option.truckLoad;
if (this.payload == Resource.SURVIVORS){
_local1 = 1;
};
return (ReturnMission.create(this.dest, this.source, this.payload, _local1, this.survivorType));
}
override public function cleanup():void{
if (this.sourceExists()){
this.sourceTower.removeIncomingSurvivor(this.survivorType);
};
if (this.destExists()){
this.destTower.freeUpgrade();
};
}
override public function complete():Mission{
var _local1:Mission;
_local1 = null;
if (this.destExists()){
this.cleanup();
this.destTower.upgrade();
this.payload = Resource.SURVIVORS;
_local1 = ReturnMission.create(this.dest, this.source, Resource.SURVIVORS, 1, this.survivorType);
} else {
_local1 = this.fail();
};
return (_local1);
}
override public function save(){
return ({parent:super.save()});
}
public static function create(_arg1:Point, _arg2:Point, _arg3:Resource):Mission{
var _local4:Mission;
var _local5:Tower;
_local4 = null;
_local5 = Game.map.getCell(_arg2.x, _arg2.y).getTower();
if (((((Mission.sourceHasPayload(_arg1, _arg3)) && (!((_local5 == null))))) && (_local5.canUpgrade()))){
_local4 = new UpgradeMission(_arg1, _arg2, _arg3);
};
return (_local4);
}
public static function load(_arg1):UpgradeMission{
var _local2:UpgradeMission;
_local2 = new UpgradeMission(null, null, null);
return (_local2);
}
}
}//package logic.mission
Section 54
//Bridge (logic.Bridge)
package logic {
import mapgen.*;
import flash.*;
public class Bridge {
protected var spawnArea:Section;
protected var lot:Section;
protected var dir:Direction;
protected var isBroken:Boolean;
protected static var bridgeRadius:int = (Option.cellPixels * MapGenerator.waterCount);
public function Bridge(_arg1:Direction=null, _arg2:Section=null, _arg3:Boolean=false):void{
if (!Boot.skip_constructor){
this.lot = new Section(_arg2.offset, _arg2.limit);
this.dir = _arg1;
this.spawnArea = this.lot.center().slice(Util.opposite(this.dir), 1);
this.isBroken = _arg3;
};
}
public function cleanup():void{
}
public function getOffset():Point{
return (this.lot.offset);
}
public function clear():void{
Util.fillClearTiles(this.lot);
}
protected function calculateFrame():int{
var _local1:int;
_local1 = (Lib.directionToIndex(this.dir) + 1);
if (this.isBroken){
_local1 = (_local1 + 4);
};
return (_local1);
}
public function spawnDir():Direction{
return (this.dir);
}
public function explosionDir():Direction{
return (Util.opposite(this.dir));
}
public function spawnPos():Point{
var _local1:int;
var _local2:int;
_local1 = Lib.rand((this.spawnArea.limit.x - this.spawnArea.offset.x));
_local2 = Lib.rand((this.spawnArea.limit.y - this.spawnArea.offset.y));
return (new Point((this.spawnArea.offset.x + _local1), (this.spawnArea.offset.y + _local2)));
}
public function destroy():void{
var _local1:int;
var _local2:int;
var _local3:PlaceBridge;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:MapCell;
var _local9:Zombie;
this.isBroken = true;
Game.progress.destroyBridge(this);
_local1 = this.lot.offset.y;
_local2 = this.lot.limit.y;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local4 = _temp1;
_local5 = this.lot.offset.x;
_local6 = this.lot.limit.x;
while (_local5 < _local6) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp2;
_local8 = Game.map.getCell(_local7, _local4);
while (_local8.hasZombies()) {
_local9 = _local8.getZombie();
_local9.removeFromMap();
_local9.cleanup();
};
Game.view.mini.updateCell(_local7, _local4);
_local8.setBlocked();
_local8.setBackground(BackgroundType.WATER);
};
};
_local3 = new PlaceBridge(this.dir, this.isBroken);
_local3.place(this.lot);
Game.view.window.fillRegion(this.lot.offset, this.lot.limit);
Game.spawner.reduceZombies();
Game.sprites.recalculateFov();
Main.replay.addBox(this.lot.offset, this.lot.limit, Option.waterColor);
}
public function getLot():Section{
return (this.lot);
}
public function save(){
return ({dir:Lib.directionToIndex(this.dir), lot:Section.save(this.lot), isBroken:this.isBroken});
}
public static function load(_arg1):Bridge{
return (new Bridge(Lib.indexToDirection(_arg1.dir), Section.load(_arg1.lot), _arg1.isBroken));
}
public static function saveS(_arg1:Bridge){
return (_arg1.save());
}
}
}//package logic
Section 55
//GameSettings (logic.GameSettings)
package logic {
import flash.utils.*;
import ui.*;
import haxe.io.*;
import mapgen.*;
import haxe.*;
import flash.*;
import native.*;
public class GameSettings {
protected var testing:Boolean;
protected var normalName:String;
protected var loseText:String;
protected var winText:String;
protected var briefingText:String;
protected var cityName:String;
protected var playTime:int;
protected var customMap:ByteArray;
protected var size:Point;
protected var campaign:int;
protected var difficulty:int;
protected var easterEgg:int;
protected var script:String;
protected var key:String;
protected var hasEdges:Boolean;
protected var editor:Boolean;
protected var custom:Boolean;
protected var start:Point;
protected var url:String;
protected static var zombieSpeed:Array = [80, 80, 104, 135, 175];
public static var FIDDLERSGREEN:int = 5;
protected static var zombieMultiplier:Array = [1, 1, 2, 2, 3];
protected static var difficultyText:Array = [Text.tutorialText, Text.noviceText, Text.veteranText, Text.expertText, Text.quartermasterText];
protected static var baseString:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
protected static var bridgeCount:Array = [1, 1, 2, 3, 4];
public static var NO_EASTER_EGG:int = 0;
public static var SALTLAKECITY:int = 6;
public static var LONDON:int = 1;
protected static var baseBytes:Bytes = Bytes.ofString(baseString);
public static var EASTLOSANGELES:int = 7;
public static var CUMBERLAND:int = 3;
public static var RACCOONCITY:int = 4;
protected static var resourceMultiplier:Array = [3, 3, 3, 3, 3];
protected static var scarceCount:Array = [0, 0, 1, 1, 2];
public static var MONROEVILLE:int = 2;
protected static var sizeList:Array = [46, 46, 56, 66, 76];
public function GameSettings():void{
if (!Boot.skip_constructor){
this.difficulty = 0;
this.cityName = "";
this.playTime = 0;
this.customMap = null;
this.editor = false;
this.testing = false;
this.hasEdges = true;
this.custom = false;
this.size = new Point(0, 0);
this.start = new Point(0, 0);
this.key = null;
this.url = null;
this.script = null;
this.campaign = -1;
this.briefingText = Text.mainIntroText;
this.winText = "";
this.loseText = "";
this.normalize();
};
}
public function save(){
return ({difficulty:this.difficulty, cityName:this.cityName, playTime:this.playTime, map:this.saveMap(), editor:this.editor, testing:this.testing, hasEdges:this.hasEdges, custom:this.custom, size:this.size.save(), start:this.start.save(), key:this.key, url:this.url, script:this.script, campaign:this.campaign, briefingText:this.briefingText, winText:this.winText, loseText:this.loseText});
}
public function getEasterEgg():int{
return (this.easterEgg);
}
public function isTesting():Boolean{
return (this.testing);
}
public function beginNewCustom(_arg1:String):void{
this.playTime = 0;
this.editor = false;
this.testing = false;
this.custom = true;
this.loadMap(_arg1);
}
public function getZombieSpeed():int{
var _local1:int;
_local1 = zombieSpeed[this.difficulty];
if (this.easterEgg == LONDON){
_local1 = (_local1 * 2);
};
return (_local1);
}
public function getCityName():String{
return (this.cityName);
}
public function getCampaign():int{
return (this.campaign);
}
public function setCampaign(_arg1:int):void{
this.campaign = _arg1;
}
protected function normalize():void{
this.updateDifficulty();
this.updateName();
this.updateEasterEgg();
}
public function loadMap(_arg1:String):void{
var _local2:XML;
var _local3:XMLList;
var _local4:XMLList;
if (_arg1.indexOf("<") == -1){
this.hasEdges = false;
this.loadCustomMap(_arg1, true);
this.script = null;
} else {
_local2 = new XML(_arg1);
if ((((((((((((((_local2.attribute("name").length() == 0)) || ((_local2.attribute("sizeX").length() == 0)))) || ((_local2.attribute("sizeY").length() == 0)))) || ((_local2.attribute("startX").length() == 0)))) || ((_local2.attribute("startY").length() == 0)))) || ((_local2.attribute("difficulty").length() == 0)))) || ((_local2.elements("terrain").length() == 0)))){
throw (new Error((("Could not find required tag.\n" + "Every map must have: name, sizeX, sizeY, ") + "startX, startY, terrain")));
};
this.cityName = Std.string(_local2.attribute("name"));
this.size = new Point(Std._parseInt(Std.string(_local2.attribute("sizeX"))), Std._parseInt(Std.string(_local2.attribute("sizeY"))));
this.start = new Point(Std._parseInt(Std.string(_local2.attribute("startX"))), Std._parseInt(Std.string(_local2.attribute("startY"))));
this.difficulty = Std._parseInt(Std.string(_local2.attribute("difficulty")));
_local3 = _local2.elements("briefing");
if (_local3.length() > 0){
this.briefingText = Std.string(_local3.text());
} else {
this.briefingText = Text.mainIntroText;
};
this.loadCustomMap(Std.string(_local2.elements("terrain")), false);
this.script = null;
_local4 = _local2.elements("script");
if (_local4.length() > 0){
this.script = _local4.toXMLString();
};
};
}
public function getNormalName():String{
return (this.normalName);
}
public function setCityName(_arg1:String):void{
this.cityName = _arg1;
this.normalize();
}
public function setMap(_arg1:ByteArray):void{
this.customMap = _arg1;
}
public function setKey(_arg1:String):void{
this.key = _arg1;
}
public function getPlayTime():int{
return (this.playTime);
}
public function saveMap():String{
var _local1:String;
_local1 = (("<map name=\"" + this.cityName) + "\" ");
_local1 = (_local1 + (("difficulty=\"" + Std.string(this.difficulty)) + "\" "));
_local1 = (_local1 + (("sizeX=\"" + Std.string(this.size.x)) + "\" "));
_local1 = (_local1 + (("sizeY=\"" + Std.string(this.size.y)) + "\" "));
_local1 = (_local1 + (("startX=\"" + Std.string(this.start.x)) + "\" "));
_local1 = (_local1 + (("startY=\"" + Std.string(this.start.y)) + "\" "));
_local1 = (_local1 + ">\n");
if (this.briefingText != Text.mainIntroText){
_local1 = (_local1 + "<briefing>\n");
_local1 = (_local1 + (this.briefingText + "\n"));
_local1 = (_local1 + "</briefing>\n");
};
if (this.customMap != null){
_local1 = (_local1 + "<terrain>\n");
_local1 = (_local1 + this.getCustomMap());
_local1 = (_local1 + "\n</terrain>\n");
};
if (this.script != null){
_local1 = (_local1 + this.script);
};
_local1 = (_local1 + "</map>\n");
return (_local1);
}
public function setStart(_arg1:Point):void{
this.start = _arg1.clone();
}
public function clearEditor():void{
this.editor = false;
}
public function getMap():ByteArray{
if (this.customMap != null){
this.customMap.position = 0;
};
return (this.customMap);
}
public function getKey():String{
return (this.key);
}
public function getStart():Point{
return (this.start);
}
public function setUrl(_arg1:String):void{
this.url = _arg1;
}
public function incrementPlayTime():void{
this.playTime++;
}
public function getDifficulty():int{
return (this.difficulty);
}
public function isEditor():Boolean{
return (this.editor);
}
public function getUrl():String{
return (this.url);
}
public function isCustom():Boolean{
return (this.custom);
}
public function setDifficulty(_arg1:int):void{
this.difficulty = _arg1;
this.normalize();
}
public function getScript():String{
return (this.script);
}
public function getBridgeCount():int{
return (bridgeCount[this.difficulty]);
}
public function doesHaveEdges():Boolean{
return (this.hasEdges);
}
public function getLoseText():String{
return (this.loseText);
}
public function beginLoadEdit(_arg1:String, _arg2:String, _arg3:String):void{
this.playTime = 0;
this.editor = true;
this.testing = false;
this.custom = true;
this.winText = _arg2;
this.loseText = _arg3;
this.loadMap(_arg1);
}
public function beginNewRandom(_arg1:int, _arg2:String):void{
this.difficulty = _arg1;
this.cityName = _arg2;
this.playTime = 0;
this.customMap = null;
this.editor = false;
this.testing = false;
this.custom = false;
this.normalize();
}
public function getDifficultyName():String{
return (difficultyText[this.difficulty]);
}
public function clone():GameSettings{
var _local1:GameSettings;
var _local2:ByteArray;
_local1 = new GameSettings();
_local1.difficulty = this.difficulty;
_local1.cityName = this.cityName;
_local1.playTime = this.playTime;
_local2 = this.getMap();
if (_local2 == null){
_local1.customMap = null;
} else {
_local1.customMap = new ByteArray();
_local1.customMap.writeBytes(_local2);
};
_local1.editor = this.editor;
_local1.testing = this.testing;
_local1.hasEdges = this.hasEdges;
_local1.custom = this.custom;
_local1.size = this.size.clone();
_local1.start = this.start.clone();
_local1.key = this.key;
_local1.url = this.url;
_local1.script = this.script;
_local1.campaign = this.campaign;
_local1.briefingText = this.briefingText;
_local1.winText = this.winText;
_local1.loseText = this.loseText;
_local1.normalize();
return (_local1);
}
public function beginLoadTest(_arg1:String):void{
this.playTime = 0;
this.editor = false;
this.testing = true;
this.custom = true;
this.loadMap(_arg1);
}
protected function updateDifficulty():void{
if (this.cityName.toLowerCase().indexOf("tutorial") != -1){
this.difficulty = 0;
};
if (((!(this.custom)) && (!(this.editor)))){
this.size = new Point(sizeList[this.difficulty], sizeList[this.difficulty]);
};
if (this.size.x < 15){
this.size.x = 15;
};
if (this.size.x > 90){
this.size.x = 90;
};
if (this.size.y < 15){
this.size.y = 15;
};
if (this.size.y > 90){
this.size.y = 90;
};
}
protected function loadCustomMap(_arg1:String, _arg2:Boolean):void{
var _local3:String;
var _local4:Array;
var _local5:String;
var _local6:String;
var _local7:String;
var _local8:Bytes;
var _local9:BaseCode;
var _local10:ByteArray;
var _local11:ByteArray;
if (_arg1 == null){
this.customMap = null;
this.normalize();
} else {
_local3 = NativeBase.removeWhitespace(_arg1);
_local4 = _local3.split(".");
if (_local4.length != 2){
throw (new Error("Could not find hash in terrain"));
};
_local5 = _local4[0];
_local6 = _local4[1];
_local7 = Md5.encode(_local6);
if (_local5 != _local7){
throw (new Error(((((("Could not verify terrain.\n" + "Specified Hash: ") + _local5) + "\n") + "Calculated Hash: ") + _local7)));
};
_local8 = Bytes.ofString(_local6);
_local9 = new BaseCode(baseBytes);
_local10 = _local9.decodeBytes(_local8).getData();
_local10.uncompress();
_local11 = _local10;
if (_arg2){
this.cityName = _local11.readUTF();
this.difficulty = _local11.readUnsignedByte();
this.size.x = (_local11.readUnsignedByte() + (Editor.edgeCount * 2));
this.size.y = (_local11.readUnsignedByte() + (Editor.edgeCount * 2));
this.start.x = _local11.readUnsignedByte();
this.start.y = _local11.readUnsignedByte();
};
this.customMap = new ByteArray();
_local11.readBytes(this.customMap);
this.normalize();
};
}
public function load(_arg1):void{
this.difficulty = _arg1.difficulty;
this.cityName = _arg1.cityName;
this.playTime = _arg1.playTime;
this.editor = _arg1.editor;
this.testing = _arg1.testing;
this.hasEdges = _arg1.hasEdges;
this.custom = _arg1.custom;
this.size = Point.load(_arg1.size);
this.start = Point.load(_arg1.start);
this.key = _arg1.key;
this.url = _arg1.url;
this.script = _arg1.script;
this.campaign = _arg1.campaign;
this.briefingText = _arg1.briefingText;
this.winText = _arg1.winText;
this.loseText = _arg1.loseText;
this.loadMap(_arg1.map);
}
public function setWinText(_arg1:String):void{
this.winText = _arg1;
}
public function beginNewEdit(_arg1:int, _arg2:String, _arg3:Point):void{
this.difficulty = _arg1;
this.cityName = _arg2;
this.playTime = 0;
this.customMap = null;
this.editor = true;
this.testing = false;
this.custom = false;
this.size = _arg3.clone();
this.key = null;
this.url = null;
this.script = null;
this.normalize();
}
public function getBriefingText():String{
return (this.briefingText);
}
public function getResourceMultiplier():int{
return (resourceMultiplier[this.difficulty]);
}
public function setEditor():void{
this.editor = true;
}
protected function updateEasterEgg():void{
if (this.custom){
this.easterEgg = NO_EASTER_EGG;
} else {
if (this.normalName.indexOf("london") != -1){
this.easterEgg = LONDON;
} else {
if (this.normalName.indexOf("monroeville") != -1){
this.easterEgg = MONROEVILLE;
} else {
if (this.normalName.indexOf("cumberland") != -1){
this.easterEgg = CUMBERLAND;
} else {
if (this.normalName.indexOf("raccooncity") != -1){
this.easterEgg = RACCOONCITY;
} else {
if (this.normalName.indexOf("fiddlersgreen") != -1){
this.easterEgg = FIDDLERSGREEN;
} else {
if (this.normalName.indexOf("saltlakecity") != -1){
this.easterEgg = SALTLAKECITY;
} else {
if (this.normalName.indexOf("eastlosangeles") != -1){
this.easterEgg = EASTLOSANGELES;
} else {
this.easterEgg = NO_EASTER_EGG;
};
};
};
};
};
};
};
};
}
public function getWinText():String{
return (this.winText);
}
protected function updateName():void{
this.normalName = Util.getNormal(this.cityName, this.difficulty);
}
protected function getCustomMap():String{
var _local1:String;
var _local2:ByteArray;
var _local3:BaseCode;
var _local4:Bytes;
var _local5:String;
var _local6:String;
var _local7:String;
var _local8:Array;
var _local9:int;
var _local10:int;
_local1 = null;
if (this.customMap != null){
_local2 = new ByteArray();
_local2.writeBytes(this.customMap);
_local2.compress();
_local3 = new BaseCode(baseBytes);
_local4 = _local3.encodeBytes(Bytes.ofData(_local2));
_local5 = _local4.toString();
_local6 = Md5.encode(_local5);
_local7 = ((_local6 + ".") + _local5);
_local8 = [];
_local9 = 0;
_local10 = 50;
while (_local9 < _local7.length) {
_local8.push(_local7.substr(_local9, _local10));
_local9 = (_local9 + _local10);
};
_local1 = _local8.join("\n");
};
return (_local1);
}
public function getScarceCount():int{
return (scarceCount[this.difficulty]);
}
public function getSize():Point{
return (this.size);
}
public function setLoseText(_arg1:String):void{
this.loseText = _arg1;
}
public function getZombieMultiplier():int{
return (zombieMultiplier[this.difficulty]);
}
public static function getDifficultyLimit():int{
return (difficultyText.length);
}
public static function getDifficultyNameS(_arg1:int):String{
return (difficultyText[_arg1]);
}
}
}//package logic
Section 56
//Script (logic.Script)
package logic {
import ui.*;
import flash.*;
public class Script {
protected var current:Array;
protected var states:Hash;
protected var sprite:ScriptView;
public static var BUILD_SNIPER:int = 20;
public static var CLICK_ADD_BOARDS:int = 42;
public static var CLICK_SHOOT:int = 46;
public static var ZOMBIE_HORDE_END:int = 33;
public static var SELECT_DEPOT:int = 3;
public static var CLICK_NEXT:int = 60;
public static var BUILD_BARRICADE:int = 21;
public static var SELECT_SNIPER:int = 1;
public static var START_BUILD_BARRICADE:int = 11;
public static var MOVE_WINDOW:int = 0;
public static var CLICK_REMOVE_SURVIVORS:int = 45;
public static var CLICK_HOLD_FIRE:int = 47;
public static var COUNTDOWN_COMPLETE:int = 36;
public static var DESTROY_BARRICADE:int = 25;
public static var CLICK_UPGRADE:int = 48;
public static var CLICK_ADD_AMMO:int = 40;
public static var SELECT_BARRICADE:int = 2;
public static var CANCEL_BUILD:int = 14;
public static var CLICK_ADD_SURVIVORS:int = 44;
public static var CLICK_REMOVE_BOARDS:int = 43;
public static var CLICK_REMOVE_AMMO:int = 41;
public static var DESTROY_WORKSHOP:int = 27;
public static var BUILD_WORKSHOP:int = 23;
public static var CREATE_TRADE_SOURCE:int = 30;
public static var ZOMBIE_CLEAR:int = 34;
public static var START_BUILD_SNIPER:int = 10;
public static var CREATE_TRADE_DEST:int = 31;
public static var ZOMBIE_HORDE_BEGIN:int = 32;
public static var START_BUILD_DEPOT:int = 12;
public static var SELECT_NOTHING:int = 5;
public static var CLICK_FLEE:int = 49;
public static var DESTROY_DEPOT:int = 26;
public static var BUILD_DEPOT:int = 22;
public static var DESTROY_SNIPER:int = 24;
public static var START_BUILD_WORKSHOP:int = 13;
public static var BRIDGE_CLEAR:int = 35;
public static var SELECT_WORKSHOP:int = 4;
public static var CLICK_SKIP:int = 61;
public function Script(_arg1:ScriptView=null):void{
if (!Boot.skip_constructor){
this.sprite = _arg1;
this.states = new Hash();
this.current = new Array();
this.sprite.setButtons(this.clickNext, this.clickSkip);
this.sprite.update(this.current);
};
}
public function takeAction():void{
var _local1:int;
var _local2:Array;
var _local3:ScriptState;
_local1 = 0;
_local2 = this.current;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.takeAction();
};
}
public function load(_arg1):void{
this.current = Load.loadArray(_arg1.current, this.loadState);
}
public function checkStates():Boolean{
var _local1:Boolean;
var _local2:*;
var _local3:ScriptState;
_local1 = true;
_local2 = this.states.iterator();
while (_local2.hasNext()) {
_local3 = _local2.next();
_local1 = _local3.checkEdges(this.states);
if (!_local1){
break;
};
};
return (_local1);
}
protected function loadState(_arg1):ScriptState{
var _local2:String;
_local2 = Std.string(_arg1);
return (this.states.get(_local2));
}
protected function clickSkip():void{
this.trigger(CLICK_SKIP);
}
public function addState(_arg1:ScriptState):void{
this.states.set(_arg1.getName(), _arg1);
if (_arg1.getName() == "start"){
this.current.push(_arg1);
this.sprite.update(this.current);
};
}
public function trigger(_arg1:int, _arg2:Point=null):void{
var _local3:int;
var _local4:String;
var _local5:ScriptState;
_local3 = 0;
while (_local3 < this.current.length) {
_local4 = this.current[_local3].trigger(_arg1, _arg2);
if (_local4 == null){
_local3++;
} else {
_local5 = this.states.get(_local4);
if (_local5 != null){
this.current[_local3] = _local5;
this.current[_local3].takeAction();
_local3++;
} else {
this.current.splice(_local3, 1);
};
};
};
if (_arg1 == MOVE_WINDOW){
this.sprite.redraw();
} else {
this.sprite.update(this.current);
};
}
public function addCurrentState(_arg1:String):void{
var _local2:ScriptState;
_local2 = this.states.get(_arg1);
if (_local2 != null){
this.current.push(_local2);
_local2.takeAction();
};
}
protected function clickNext():void{
this.trigger(CLICK_NEXT);
}
public function save(){
return ({current:Save.saveArray(this.current, Script.saveState)});
}
public static function saveState(_arg1:ScriptState):String{
return (_arg1.getName());
}
}
}//package logic
Section 57
//ScriptAction (logic.ScriptAction)
package logic {
import ui.*;
import action.*;
import flash.*;
public class ScriptAction implements Interface {
protected var action:int;
protected var arg:String;
public static var WIN:int = 0;
public static var HORDE:int = 3;
public static var MOVE_MAP:int = 4;
public static var COUNTDOWN:int = 2;
public static var ADD_STATE:int = 5;
public static var LOSE:int = 1;
public function ScriptAction(_arg1:int=0, _arg2:String=null):void{
if (!Boot.skip_constructor){
this.action = _arg1;
this.arg = _arg2;
};
}
public function run():void{
var _local1:String;
var _local2:String;
var _local3:*;
var _local4:*;
var _local5:Point;
var _local6:Array;
var _local7:*;
var _local8:*;
var _local9:Array;
var _local10:*;
var _local11:*;
if (this.action == WIN){
_local1 = this.arg;
if (_local1 == null){
_local1 = Text.mainWinText;
};
Game.settings.setWinText(_local1);
Game.endGame(GameOver.WIN);
} else {
if (this.action == LOSE){
_local2 = this.arg;
if (_local2 == null){
_local2 = Text.mainLoseText;
};
Game.settings.setLoseText(_local2);
Game.endGame(GameOver.LOSE);
} else {
if (this.action == COUNTDOWN){
_local3 = Std._parseInt(this.arg);
Game.spawner.startCountDown(_local3);
} else {
if (this.action == HORDE){
_local4 = null;
_local5 = null;
if (this.arg != null){
_local6 = this.arg.split(" ");
if (_local6.length >= 1){
_local4 = Std._parseInt(_local6[0]);
};
if (_local6.length >= 3){
_local7 = Std._parseInt(_local6[1]);
_local8 = Std._parseInt(_local6[2]);
if (((!((_local7 == null))) && (!((_local8 == null))))){
_local5 = new Point(_local7, _local8);
};
};
};
Game.spawner.startHorde(_local4, _local5);
} else {
if (this.action == MOVE_MAP){
_local9 = this.arg.split(" ");
if (_local9.length >= 2){
_local10 = Std._parseInt(_local9[0]);
_local11 = Std._parseInt(_local9[1]);
if (((!((_local10 == null))) && (!((_local11 == null))))){
Game.view.window.moveWindowCenter(_local10, _local11);
};
};
} else {
if (this.action == ADD_STATE){
Game.script.addCurrentState(this.arg);
};
};
};
};
};
};
}
}
}//package logic
Section 58
//ScriptEdge (logic.ScriptEdge)
package logic {
import mapgen.*;
import flash.*;
public class ScriptEdge {
protected var type:int;
protected var next:String;
protected var area:Section;
public function ScriptEdge(_arg1:int=0, _arg2:Section=null, _arg3:String=null):void{
if (!Boot.skip_constructor){
this.type = _arg1;
this.area = _arg2;
this.next = _arg3;
};
}
public function trigger(_arg1:int, _arg2:Point):String{
var _local3:String;
_local3 = null;
if (_arg1 == this.type){
if ((((this.area == null)) || (((((!((this.area == null))) && (!((_arg2 == null))))) && (this.area.contains(_arg2)))))){
_local3 = this.next;
};
};
return (_local3);
}
public function getNext():String{
return (this.next);
}
}
}//package logic
Section 59
//ScriptParse (logic.ScriptParse)
package logic {
import mapgen.*;
public class ScriptParse {
protected static var stringToTransition:Hash = new Hash();
protected static var stringToButton:Hash = new Hash();
public static var defaultScript:String = "
<script>
<state name="start">
<action type="add-state" arg="countdown" />
<edge type="bridge-clear" next="bridge"/>
<edge type="zombie-clear" next="zombie" />
</state>
<state name="bridge">
<edge type="zombie-clear" next="bridge-zombie" />
</state>
<state name="zombie">
<edge type="bridge-clear" next="bridge-zombie" />
<edge type="zombie-horde-begin" next="start" />
</state>
<state name="bridge-zombie">
<action type="win" />
</state>
<state name="countdown">
<action type="countdown" arg="150" />
<edge type="countdown-complete" next="horde" />
</state>
<state name="horde">
<action type="horde" />
<edge type="zombie-horde-end" next="countdown" />
</state>
</script>
";
public static var editScript:String = "<script></script>";
protected static var stringToAction:Hash = new Hash();
public function ScriptParse():void{
}
protected static function parseAction(_arg1:XML):ScriptAction{
var _local2:XMLList;
var _local3:*;
var _local4:String;
var _local5:ScriptAction;
_local2 = _arg1.attribute("type");
_local3 = stringToAction.get(Std.string(_local2));
_local4 = null;
_local2 = _arg1.attribute("arg");
if (_local2.length() > 0){
_local4 = Std.string(_local2);
} else {
_local2 = _arg1.elements("arg");
if (_local2.length() > 0){
_local4 = Std.string(_local2);
};
};
_local5 = new ScriptAction(_local3, _local4);
return (_local5);
}
protected static function calculatePoint(_arg1:XMLList, _arg2:XMLList):Point{
var _local3:Point;
var _local4:*;
var _local5:*;
_local3 = null;
if ((((_arg1.length() > 0)) && ((_arg2.length() > 0)))){
_local4 = Std._parseInt(Std.string(_arg1));
_local5 = Std._parseInt(Std.string(_arg2));
if (((!((_local4 == null))) && (!((_local5 == null))))){
_local3 = new Point(_local4, _local5);
};
};
return (_local3);
}
public static function init():void{
var _local1:Hash;
var _local2:Hash;
var _local3:Hash;
_local1 = stringToTransition;
_local1.set("move-window", Script.MOVE_WINDOW);
_local1.set("select-sniper", Script.SELECT_SNIPER);
_local1.set("select-barricade", Script.SELECT_BARRICADE);
_local1.set("select-depot", Script.SELECT_DEPOT);
_local1.set("select-workshop", Script.SELECT_WORKSHOP);
_local1.set("select-nothing", Script.SELECT_NOTHING);
_local1.set("start-build-sniper", Script.START_BUILD_SNIPER);
_local1.set("start-build-barricade", Script.START_BUILD_BARRICADE);
_local1.set("start-build-depot", Script.START_BUILD_DEPOT);
_local1.set("start-build-workshop", Script.START_BUILD_WORKSHOP);
_local1.set("cancel-build", Script.CANCEL_BUILD);
_local1.set("build-sniper", Script.BUILD_SNIPER);
_local1.set("build-barricade", Script.BUILD_BARRICADE);
_local1.set("build-depot", Script.BUILD_DEPOT);
_local1.set("build-workshop", Script.BUILD_WORKSHOP);
_local1.set("destroy-sniper", Script.DESTROY_SNIPER);
_local1.set("destroy-barricade", Script.DESTROY_BARRICADE);
_local1.set("destroy-depot", Script.DESTROY_DEPOT);
_local1.set("destroy-workshop", Script.DESTROY_WORKSHOP);
_local1.set("create-trade-source", Script.CREATE_TRADE_SOURCE);
_local1.set("create-trade-dest", Script.CREATE_TRADE_DEST);
_local1.set("zombie-horde-begin", Script.ZOMBIE_HORDE_BEGIN);
_local1.set("zombie-horde-end", Script.ZOMBIE_HORDE_END);
_local1.set("zombie-clear", Script.ZOMBIE_CLEAR);
_local1.set("bridge-clear", Script.BRIDGE_CLEAR);
_local1.set("countdown-complete", Script.COUNTDOWN_COMPLETE);
_local1.set("click-add-ammo", Script.CLICK_ADD_AMMO);
_local1.set("click-remove-ammo", Script.CLICK_REMOVE_AMMO);
_local1.set("click-add-boards", Script.CLICK_ADD_BOARDS);
_local1.set("click-remove-boards", Script.CLICK_REMOVE_BOARDS);
_local1.set("click-add-survivors", Script.CLICK_ADD_SURVIVORS);
_local1.set("click-remove-survivors", Script.CLICK_REMOVE_SURVIVORS);
_local1.set("click-shoot", Script.CLICK_SHOOT);
_local1.set("click-hold-fire", Script.CLICK_HOLD_FIRE);
_local1.set("click-upgrade", Script.CLICK_UPGRADE);
_local1.set("click-flee", Script.CLICK_FLEE);
_local1.set("click-next", Script.CLICK_NEXT);
_local1.set("click-skip", Script.CLICK_SKIP);
_local2 = stringToAction;
_local2.set("win", ScriptAction.WIN);
_local2.set("lose", ScriptAction.LOSE);
_local2.set("countdown", ScriptAction.COUNTDOWN);
_local2.set("horde", ScriptAction.HORDE);
_local2.set("move-map", ScriptAction.MOVE_MAP);
_local2.set("add-state", ScriptAction.ADD_STATE);
_local3 = stringToButton;
_local3.set("timer", ScriptState.TIMER);
_local3.set("minimap", ScriptState.MINIMAP);
_local3.set("system", ScriptState.SYSTEM);
_local3.set("zombipedia", ScriptState.PEDIA);
_local3.set("range", ScriptState.RANGE);
_local3.set("build-sniper", ScriptState.BUILD_SNIPER);
_local3.set("build-barricade", ScriptState.BUILD_BARRICADE);
_local3.set("build-workshop", ScriptState.BUILD_WORKSHOP);
_local3.set("build-depot", ScriptState.BUILD_DEPOT);
_local3.set("depot-flee", ScriptState.DEPOT_FLEE);
_local3.set("depot-resource", ScriptState.DEPOT_RESOURCE);
_local3.set("barricade-increase", ScriptState.BARRICADE_INCREASE);
_local3.set("barricade-decrease", ScriptState.BARRICADE_DECREASE);
_local3.set("workshop-increase", ScriptState.WORKSHOP_INCREASE);
_local3.set("workshop-decrease", ScriptState.WORKSHOP_DECREASE);
_local3.set("workshop-flee", ScriptState.WORKSHOP_FLEE);
_local3.set("workshop-extract", ScriptState.WORKSHOP_EXTRACT);
_local3.set("sniper-shoot", ScriptState.SNIPER_SHOOT);
_local3.set("sniper-hold-fire", ScriptState.SNIPER_HOLD_FIRE);
_local3.set("sniper-upgrade", ScriptState.SNIPER_UPGRADE);
_local3.set("sniper-flee", ScriptState.SNIPER_FLEE);
_local3.set("sniper-resource", ScriptState.SNIPER_RESOURCE);
_local3.set("sniper-increase-ammo", ScriptState.SNIPER_INCREASE_AMMO);
_local3.set("sniper-increase-survivors", ScriptState.SNIPER_INCREASE_SURVIVORS);
_local3.set("sniper-decrease-ammo", ScriptState.SNIPER_DECREASE_AMMO);
_local3.set("sniper-decrease-survivors", ScriptState.SNIPER_DECREASE_SURVIVORS);
_local3.set("depot-increase-ammo", ScriptState.DEPOT_INCREASE_AMMO);
_local3.set("depot-decrease-ammo", ScriptState.DEPOT_DECREASE_AMMO);
_local3.set("depot-increase-boards", ScriptState.DEPOT_INCREASE_BOARDS);
_local3.set("depot-decrease-boards", ScriptState.DEPOT_DECREASE_BOARDS);
_local3.set("depot-increase-survivors", ScriptState.DEPOT_INCREASE_SURVIVORS);
_local3.set("depot-decrease-survivors", ScriptState.DEPOT_DECREASE_SURVIVORS);
_local3.set("total-resources", ScriptState.TOTAL_RESOURCES);
}
public static function parse(_arg1:String, _arg2:Script):void{
var _local3:String;
var _local4:XML;
var _local5:XMLList;
var _local6:int;
var _local7:int;
var _local8:Boolean;
var _local9:int;
var _local10:ScriptState;
_local3 = _arg1;
if (Game.settings.isEditor()){
_local3 = editScript;
};
if (_local3 == null){
_local3 = defaultScript;
};
_local4 = new XML(_local3);
_local5 = _local4.child("state");
_local6 = 0;
_local7 = _local5.length();
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local9 = _temp1;
_local10 = parseState(_local5[_local9]);
_arg2.addState(_local10);
};
_local8 = _arg2.checkStates();
if (!_local8){
Lib.trace("Failed sanity check");
};
}
protected static function parseEdge(_arg1:XML):ScriptEdge{
var _local2:XMLList;
var _local3:*;
var _local4:Point;
var _local5:Point;
var _local6:Section;
var _local7:String;
var _local8:ScriptEdge;
_local2 = _arg1.attribute("type");
_local3 = stringToTransition.get(Std.string(_local2));
_local4 = calculatePoint(_arg1.attribute("offsetX"), _arg1.attribute("offsetY"));
_local5 = calculatePoint(_arg1.attribute("limitX"), _arg1.attribute("limitY"));
if (((!((_local4 == null))) && ((_local5 == null)))){
_local5 = new Point((_local4.x + 1), (_local4.y + 1));
};
_local6 = null;
if (_local4 != null){
_local6 = new Section(_local4, _local5);
};
_local2 = _arg1.attribute("next");
_local7 = Std.string(_local2);
_local8 = new ScriptEdge(_local3, _local6, _local7);
return (_local8);
}
protected static function parseState(_arg1:XML):ScriptState{
var _local2:XMLList;
var _local3:String;
var _local4:String;
var _local5:Point;
var _local6:Boolean;
var _local7:int;
var _local8:ScriptState;
var _local9:XMLList;
var _local10:int;
var _local11:int;
var _local12:XMLList;
var _local13:int;
var _local14:int;
var _local15:String;
var _local16:int;
var _local17:ScriptEdge;
var _local18:int;
var _local19:ScriptAction;
_local2 = _arg1.attribute("name");
_local3 = Std.string(_local2);
_local2 = _arg1.elements("text");
_local4 = null;
if (_local2.length() > 0){
_local4 = Std.string(_local2);
};
_local5 = calculatePoint(_arg1.attribute("posX"), _arg1.attribute("posY"));
_local6 = false;
_local2 = _arg1.child("next");
if (_local2.length() > 0){
_local6 = true;
};
_local7 = ScriptState.NO_BUTTON;
_local2 = _arg1.attribute("button");
if (_local2.length() > 0){
_local15 = Std.string(_local2);
if (stringToButton.exists(_local15)){
_local7 = stringToButton.get(_local15);
};
};
_local8 = new ScriptState(_local3, _local4, _local5, _local7, _local6);
_local9 = _arg1.child("edge");
_local10 = 0;
_local11 = _local9.length();
while (_local10 < _local11) {
var _temp1 = _local10;
_local10 = (_local10 + 1);
_local16 = _temp1;
_local17 = parseEdge(_local9[_local16]);
_local8.addEdge(_local17);
};
_local12 = _arg1.child("action");
_local13 = 0;
_local14 = _local12.length();
while (_local13 < _local14) {
var _temp2 = _local13;
_local13 = (_local13 + 1);
_local18 = _temp2;
_local19 = parseAction(_local12[_local18]);
_local8.addAction(_local19);
};
return (_local8);
}
}
}//package logic
Section 60
//ScriptState (logic.ScriptState)
package logic {
import ui.*;
import flash.*;
public class ScriptState {
protected var buttonPos:int;
protected var name:String;
protected var mapPos:Point;
protected var edges:Array;
protected var text:String;
protected var hasNext:Boolean;
protected var actions:Array;
public static var MINIMAP:int = 1;
public static var BUILD_SNIPER:int = 5;
public static var SNIPER_DECREASE_SURVIVORS:int = 25;
public static var BUILD_BARRICADE:int = 6;
public static var RANGE:int = 4;
public static var WORKSHOP_FLEE:int = 15;
public static var TIMER:int = 0;
public static var WORKSHOP_EXTRACT:int = 16;
public static var TOTAL_RESOURCES:int = 32;
public static var SYSTEM:int = 2;
public static var SNIPER_INCREASE_SURVIVORS:int = 23;
public static var DEPOT_FLEE:int = 9;
public static var SNIPER_UPGRADE:int = 19;
public static var SNIPER_FLEE:int = 20;
public static var SNIPER_SHOOT:int = 17;
public static var DEPOT_INCREASE_AMMO:int = 26;
public static var PEDIA:int = 3;
public static var DEPOT_INCREASE_BOARDS:int = 28;
public static var BARRICADE_DECREASE:int = 12;
public static var WORKSHOP_DECREASE:int = 14;
public static var BUILD_WORKSHOP:int = 7;
public static var DEPOT_RESOURCE:int = 10;
public static var SNIPER_INCREASE_AMMO:int = 22;
public static var BUILD_DEPOT:int = 8;
public static var DEPOT_DECREASE_AMMO:int = 27;
public static var SNIPER_HOLD_FIRE:int = 18;
public static var DEPOT_DECREASE_SURVIVORS:int = 31;
public static var DEPOT_DECREASE_BOARDS:int = 29;
public static var DEPOT_INCREASE_SURVIVORS:int = 30;
public static var SNIPER_RESOURCE:int = 21;
public static var NO_BUTTON:int = -1;
public static var BARRICADE_INCREASE:int = 11;
public static var WORKSHOP_INCREASE:int = 13;
public static var SNIPER_DECREASE_AMMO:int = 24;
public function ScriptState(_arg1:String=null, _arg2:String=null, _arg3:Point=null, _arg4:int=0, _arg5:Boolean=false):void{
if (!Boot.skip_constructor){
this.name = _arg1;
this.text = _arg2;
this.mapPos = _arg3;
this.buttonPos = _arg4;
this.hasNext = _arg5;
this.edges = new Array();
this.actions = new Array();
};
}
public function getName():String{
return (this.name);
}
public function shouldShowArrow():Boolean{
return (((!((this.mapPos == null))) || (!((this.buttonPos == NO_BUTTON)))));
}
public function takeAction():void{
var _local1:int;
var _local2:Array;
var _local3:ScriptAction;
_local1 = 0;
_local2 = this.actions;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
Game.actions.push(_local3);
};
}
public function getPos():Point{
var _local1:Point;
var _local2:LayoutGame;
_local1 = null;
if (this.isMapPos()){
_local1 = this.mapPos;
} else {
if (this.buttonPos != NO_BUTTON){
_local1 = new Point(0, 0);
_local2 = Game.view.layout;
if (this.buttonPos == TIMER){
_local1.x = (_local2.countDownOffset.x + Math.floor((_local2.countDownSize.x / 2)));
_local1.y = ((_local2.countDownOffset.y + _local2.countDownSize.y) - 30);
} else {
if (this.buttonPos == MINIMAP){
_local1.x = (_local2.miniOffset.x + Math.floor((_local2.miniSize.x / 2)));
_local1.y = (_local2.miniOffset.y + _local2.miniSize.y);
} else {
if (this.buttonPos == SYSTEM){
_local1.x = (_local2.quickOffset.x + 30);
_local1.y = ((_local2.quickOffset.y - 30) - 20);
} else {
if (this.buttonPos == PEDIA){
_local1.x = (_local2.quickOffset.x + 80);
_local1.y = ((_local2.quickOffset.y - 30) - 20);
} else {
if (this.buttonPos == RANGE){
_local1.x = (_local2.quickOffset.x + 130);
_local1.y = ((_local2.quickOffset.y - 30) - 20);
} else {
if (this.buttonPos == BUILD_SNIPER){
_local1.x = (_local2.buildMenuOffset.x + 43);
_local1.y = ((_local2.buildMenuOffset.y - 106) - 20);
} else {
if (this.buttonPos == BUILD_BARRICADE){
_local1.x = (_local2.buildMenuOffset.x + 103);
_local1.y = ((_local2.buildMenuOffset.y - 106) - 20);
} else {
if (this.buttonPos == BUILD_WORKSHOP){
_local1.x = (_local2.buildMenuOffset.x + 43);
_local1.y = ((_local2.buildMenuOffset.y - 61) - 20);
} else {
if (this.buttonPos == BUILD_DEPOT){
_local1.x = (_local2.buildMenuOffset.x + 103);
_local1.y = ((_local2.buildMenuOffset.y - 61) - 20);
} else {
if (this.buttonPos == DEPOT_FLEE){
_local1.x = ((_local2.sideMenuOffset.x + 370) - 15);
_local1.y = ((_local2.sideMenuOffset.y + 520) - 15);
} else {
if (this.buttonPos == DEPOT_RESOURCE){
_local1.x = ((_local2.sideMenuOffset.x + 75) + 150);
_local1.y = (_local2.sideMenuOffset.y + 525);
} else {
if (this.buttonPos == BARRICADE_INCREASE){
_local1.x = ((_local2.sideMenuOffset.x + 385) - 8);
_local1.y = (_local2.sideMenuOffset.y + 538);
} else {
if (this.buttonPos == BARRICADE_DECREASE){
_local1.x = ((_local2.sideMenuOffset.x + 385) - 8);
_local1.y = (_local2.sideMenuOffset.y + 558);
} else {
if (this.buttonPos == WORKSHOP_INCREASE){
_local1.x = ((_local2.sideMenuOffset.x + 375) - 8);
_local1.y = (_local2.sideMenuOffset.y + 510);
} else {
if (this.buttonPos == WORKSHOP_DECREASE){
_local1.x = ((_local2.sideMenuOffset.x + 375) - 8);
_local1.y = (_local2.sideMenuOffset.y + 530);
} else {
if (this.buttonPos == WORKSHOP_FLEE){
_local1.x = ((_local2.sideMenuOffset.x + 368) - 15);
_local1.y = ((_local2.sideMenuOffset.y + 568) - 15);
} else {
if (this.buttonPos == WORKSHOP_EXTRACT){
_local1.x = ((_local2.sideMenuOffset.x + 183) + 30);
_local1.y = ((_local2.sideMenuOffset.y + 515) - 15);
} else {
if (this.buttonPos == SNIPER_SHOOT){
_local1.x = ((_local2.sideMenuOffset.x + 320) - 15);
_local1.y = ((_local2.sideMenuOffset.y + 463) - 15);
} else {
if (this.buttonPos == SNIPER_HOLD_FIRE){
_local1.x = ((_local2.sideMenuOffset.x + 365) - 15);
_local1.y = ((_local2.sideMenuOffset.y + 463) - 15);
} else {
if (this.buttonPos == SNIPER_UPGRADE){
_local1.x = ((_local2.sideMenuOffset.x + 365) - 15);
_local1.y = ((_local2.sideMenuOffset.y + 508) - 15);
} else {
if (this.buttonPos == SNIPER_FLEE){
_local1.x = ((_local2.sideMenuOffset.x + 365) - 15);
_local1.y = ((_local2.sideMenuOffset.y + 568) - 15);
} else {
if (this.buttonPos == SNIPER_RESOURCE){
_local1.x = ((_local2.sideMenuOffset.x + 12) + 220);
_local1.y = ((_local2.sideMenuOffset.y + 525) - 10);
} else {
if (this.buttonPos == SNIPER_INCREASE_AMMO){
_local1.x = (((_local2.sideMenuOffset.x + 12) + 159) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 45) - 8);
} else {
if (this.buttonPos == SNIPER_INCREASE_SURVIVORS){
_local1.x = (((_local2.sideMenuOffset.x + 12) + 219) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 45) - 8);
} else {
if (this.buttonPos == SNIPER_DECREASE_AMMO){
_local1.x = (((_local2.sideMenuOffset.x + 12) + 159) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 65) - 8);
} else {
if (this.buttonPos == SNIPER_DECREASE_SURVIVORS){
_local1.x = (((_local2.sideMenuOffset.x + 12) + 219) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 65) - 8);
} else {
if (this.buttonPos == DEPOT_INCREASE_AMMO){
_local1.x = (((_local2.sideMenuOffset.x + 75) + 104) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 45) - 8);
} else {
if (this.buttonPos == DEPOT_DECREASE_AMMO){
_local1.x = (((_local2.sideMenuOffset.x + 75) + 104) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 65) - 8);
} else {
if (this.buttonPos == DEPOT_INCREASE_BOARDS){
_local1.x = (((_local2.sideMenuOffset.x + 75) + 159) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 45) - 8);
} else {
if (this.buttonPos == DEPOT_DECREASE_BOARDS){
_local1.x = (((_local2.sideMenuOffset.x + 75) + 159) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 65) - 8);
} else {
if (this.buttonPos == DEPOT_INCREASE_SURVIVORS){
_local1.x = (((_local2.sideMenuOffset.x + 75) + 219) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 45) - 8);
} else {
if (this.buttonPos == DEPOT_DECREASE_SURVIVORS){
_local1.x = (((_local2.sideMenuOffset.x + 75) + 219) - 8);
_local1.y = (((_local2.sideMenuOffset.y + 525) + 65) - 8);
} else {
if (this.buttonPos == TOTAL_RESOURCES){
_local1.x = _local2.totalResourceOffset.x;
_local1.y = (_local2.totalResourceOffset.y + 40);
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
return (_local1);
}
public function isMapPos():Boolean{
return ((this.buttonPos == NO_BUTTON));
}
public function shouldShowNext():Boolean{
return (this.hasNext);
}
public function shouldShowText():Boolean{
return (!((this.text == null)));
}
public function getText():String{
return (this.text);
}
public function checkEdges(_arg1:Hash):Boolean{
var _local2:Boolean;
var _local3:int;
var _local4:Array;
var _local5:ScriptEdge;
var _local6:String;
var _local7:ScriptState;
_local2 = true;
_local3 = 0;
_local4 = this.edges;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local6 = _local5.getNext();
if (_local6 != ""){
_local7 = _arg1.get(_local6);
if (_local7 == null){
_local2 = false;
break;
};
};
};
return (_local2);
}
public function addAction(_arg1:ScriptAction):void{
this.actions.push(_arg1);
}
public function trigger(_arg1:int, _arg2:Point):String{
var _local3:String;
var _local4:int;
var _local5:Array;
var _local6:ScriptEdge;
_local3 = null;
_local4 = 0;
_local5 = this.edges;
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
_local3 = _local6.trigger(_arg1, _arg2);
if (_local3 != null){
break;
};
};
return (_local3);
}
public function addEdge(_arg1:ScriptEdge):void{
this.edges.push(_arg1);
}
}
}//package logic
Section 61
//BlockApartment (mapgen.BlockApartment)
package mapgen {
import flash.*;
public class BlockApartment extends BlockRoot {
protected var baseLot:Section;
protected var walkLot:Section;
protected var parkingLot:Section;
protected var doPlaceRubble:Boolean;
protected var primaryCornerLot:Section;
protected var secondaryCornerLot:Section;
protected var primaryLot:Section;
protected var secondaryDir:Direction;
protected var primaryDir:Direction;
protected var entranceLot:Section;
protected var baseDir:Direction;
protected var secondaryLot:Section;
protected static var longs:Array = [[-1, -1, 903, 861], [-1, -1, 883, 921], [886, 928, -1, -1], [887, 925, -1, -1]];
protected static var tiling:int = 872;
protected static var trees:Array = [[-1, -1, 922, 882], [-1, -1, 862, 902], [905, 907, -1, -1], [908, 906, -1, -1]];
protected static var shorts:Array = [[-1, -1, 924, 880], [-1, -1, 864, 900], [865, 947, -1, -1], [868, 946, -1, -1]];
protected static var entrances:Array = [[-1, -1, 923, 881], [-1, -1, 863, 901], [885, 927, -1, -1], [888, 926, -1, -1]];
protected static var corners:Array = [[-1, -1, 904, 860], [-1, -1, 884, 920], [866, 948, -1, -1], [867, 945, -1, -1]];
public function BlockApartment(_arg1:Direction=null, _arg2:Direction=null, _arg3:Direction=null, _arg4=null):void{
if (!Boot.skip_constructor){
this.baseDir = _arg1;
this.primaryDir = _arg2;
this.secondaryDir = _arg3;
this.doPlaceRubble = true;
if (_arg4 == false){
this.doPlaceRubble = false;
};
};
}
protected function setLots(_arg1:Section):void{
var _local2:int;
var _local3:int;
var _local4:Section;
var _local5:Section;
var _local6:Section;
_local2 = 2;
if (_arg1.dirSize(this.baseDir) > 5){
_local2 = 3;
};
_local3 = 3;
_local4 = _arg1;
_local5 = _local4.slice(this.primaryDir, _local3);
this.primaryCornerLot = _local5.slice(this.baseDir, _local2);
this.primaryLot = _local5.remainder(this.baseDir, _local2);
_local4 = _local4.remainder(this.primaryDir, _local3);
this.secondaryLot = null;
this.secondaryCornerLot = null;
if (this.secondaryDir != null){
_local6 = _local4.slice(this.secondaryDir, _local3);
this.secondaryCornerLot = _local6.slice(this.baseDir, _local2);
this.secondaryLot = _local6.remainder(this.baseDir, _local2);
_local4 = _local4.remainder(this.secondaryDir, _local3);
};
this.baseLot = _local4.slice(this.baseDir, _local2);
_local4 = _local4.remainder(this.baseDir, _local2);
_local5 = _local4.slice(this.baseDir, 1);
this.entranceLot = _local5.slice(this.primaryDir, 1);
this.walkLot = _local5.remainder(this.primaryDir, 1);
_local4 = _local4.remainder(this.baseDir, 1);
this.parkingLot = _local4;
}
public function placeBuilding(_arg1:Section):Building{
var _local2:Building;
this.setDirections(_arg1);
this.setLots(_arg1);
_local2 = this.placeApartment();
this.placeEntrance();
this.placeParking();
return (_local2);
}
protected function setDirections(_arg1:Section):void{
var _local2:Array;
var _local3:int;
var _local4:Array;
if ((((this.baseDir == null)) || ((this.primaryDir == null)))){
_local2 = [[Direction.NORTH, Direction.SOUTH], [Direction.EAST, Direction.WEST]];
Util.shuffle(_local2);
_local3 = 0;
while (_local3 < _local2.length) {
_local4 = _local2[_local3];
_local3++;
Util.shuffle(_local4);
};
this.baseDir = _local2[0][0];
this.primaryDir = _local2[1][0];
this.secondaryDir = _local2[1][1];
};
if (_arg1.dirSize(this.primaryDir) < 8){
this.secondaryDir = null;
};
}
override public function place(_arg1:Section):void{
this.placeBuilding(_arg1);
}
protected function placeEntrance():void{
var _local1:Point;
var _local2:Point;
var _local3:Point;
var _local4:Point;
var _local5:int;
var _local6:int;
_local1 = this.entranceLot.offset;
_local2 = this.primaryLot.slice(this.baseDir, 1).slice(Util.opposite(this.primaryDir), 1).offset;
_local3 = this.baseLot.slice(this.primaryDir, 1).slice(Util.opposite(this.baseDir), 1).offset;
_local4 = this.primaryCornerLot.slice(Util.opposite(this.baseDir), 1).slice(Util.opposite(this.primaryDir), 1).offset;
_local5 = Lib.directionToIndex(this.baseDir);
_local6 = Lib.directionToIndex(this.primaryDir);
Util.addTile(_local1, entrances[_local5][_local6]);
Util.addTile(_local2, shorts[_local5][_local6]);
Util.addTile(_local3, longs[_local5][_local6]);
Util.addTile(_local4, corners[_local5][_local6]);
Util.setArea(this.walkLot, this.placeWalkTile, new Point(_local5, _local6));
}
protected function placeApartment():Building{
var _local1:Direction;
var _local2:Array;
var _local3:Building;
var _local4:int;
var _local5:BuildingApartment;
var _local6:Array;
var _local7:Section;
_local1 = Util.opposite(this.baseDir);
_local2 = [this.baseLot, this.primaryLot, this.primaryCornerLot, this.secondaryLot, this.secondaryCornerLot, this.entranceLot];
_local3 = new Building(Util.APARTMENT);
_local4 = 0;
while (_local4 < _local2.length) {
_local7 = _local2[_local4];
_local4++;
if (_local7 != null){
_local3.addLot(_local7);
};
};
_local3.setEntrance(this.entranceLot.offset, _local1);
Game.map.addBuilding(_local3);
_local3.attach();
_local5 = new BuildingApartment(_local3);
_local6 = [this.primaryDir];
if (this.secondaryDir != null){
_local6.push(this.secondaryDir);
};
_local5.setDirs(_local6);
_local5.place(this.baseLot);
_local5.setDirs([this.baseDir]);
_local5.place(this.primaryLot);
_local5.setDirs([_local1, Util.opposite(this.primaryDir)]);
_local5.place(this.primaryCornerLot);
if (this.secondaryDir != null){
_local5.setDirs([this.baseDir]);
_local5.place(this.secondaryLot);
_local5.setDirs([_local1, Util.opposite(this.secondaryDir)]);
_local5.place(this.secondaryCornerLot);
};
return (_local3);
}
protected function placeParking():void{
var _local1:Building;
var _local2:Section;
var _local3:Point;
var _local4:Point;
_local1 = Util.createBuilding(this.parkingLot, Util.PARKING_LOT);
_local2 = this.parkingLot.slice(Util.opposite(this.baseDir), 1);
_local3 = _local2.getSize();
_local4 = new Point((_local2.offset.x + Math.floor((_local3.x / 2))), (_local2.offset.y + Math.floor((_local3.y / 2))));
_local1.setEntrance(_local4, Util.opposite(this.baseDir));
Util.drawBuilding(this.parkingLot, _local1, this.doPlaceRubble);
}
protected function placeWalkTile(_arg1:Point, _arg2:Point):void{
if (Util.rand(2) == 0){
Util.addTile(_arg1, trees[_arg2.x][_arg2.y]);
Util.changeBlocked(_arg1, true);
} else {
Util.addTile(_arg1, tiling);
Util.changeBlocked(_arg1, false);
};
Util.setBackground(_arg1, BackgroundType.STREET);
}
}
}//package mapgen
Section 62
//BlockChurch (mapgen.BlockChurch)
package mapgen {
import flash.*;
public class BlockChurch extends BlockRoot {
protected var fillGaps:Boolean;
protected var primary:Direction;
protected static var pathTiles:Array = [703, 707, 711, 715];
protected static var NORTH:int = 0;
protected static var SOUTH:int = 1;
protected static var WEST:int = 1;
protected static var NEITHER:int = 2;
protected static var parkCornerTiles:Array = [215, 216, 195, 196];
protected static var parkEdgeTiles:Array = [[68, 66, 67], [108, 106, 107], [88, 86, 87]];
protected static var parkCornerDelta:Array = [new Point(1, -1), new Point(-1, -1), new Point(1, 1), new Point(-1, 1)];
protected static var EAST:int = 0;
public function BlockChurch(_arg1=null, _arg2:Direction=null):void{
if (!Boot.skip_constructor){
this.fillGaps = true;
if (_arg1 == false){
this.fillGaps = false;
};
this.primary = _arg2;
};
}
protected function isPark(_arg1:Point, _arg2:Direction):Boolean{
return (this.isParkDelta(_arg1, Lib.directionToDelta(_arg2)));
}
protected function isParkDelta(_arg1:Point, _arg2:Point):Boolean{
var _local3:MapCell;
_local3 = Game.map.getCell((_arg1.x + _arg2.x), (_arg1.y + _arg2.y));
return ((_local3.getBackground() == BackgroundType.PARK));
}
protected function addPath(_arg1:Point, _arg2:Building):void{
var _local3:int;
_local3 = Lib.directionToIndex(_arg2.getEntranceDir());
Util.addTile(_arg1, pathTiles[_local3]);
}
protected function addBlocked(_arg1:Point):void{
Util.addRandTile(_arg1, Tile.trees);
Util.changeBlocked(_arg1, true);
}
protected function placeScenery(_arg1:Section, _arg2:Building):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Point;
_local3 = _arg1.offset.y;
_local4 = _arg1.limit.y;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = _arg1.offset.x;
_local7 = _arg1.limit.x;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
_local9 = new Point(_local8, _local5);
this.addPark(_local9);
this.addOverlay(_local9, _arg2);
};
};
}
protected function findChurchDir(_arg1:Section, _arg2:Section):Direction{
var _local3:Direction;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Direction;
var _local8:int;
_local3 = Direction.NORTH;
_local4 = this.boxDiff(_arg1, _arg2, _local3);
_local5 = 0;
while (_local5 < 4) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp1;
_local7 = Lib.indexToDirection(_local6);
_local8 = this.boxDiff(_arg1, _arg2, _local7);
if (_local8 > _local4){
_local3 = _local7;
_local4 = _local8;
};
};
return (_local3);
}
protected function placeChurch(_arg1:Section):Building{
var _local2:Section;
var _local3:Direction;
var _local4:Building;
_local2 = this.findChurchLot(_arg1);
_local3 = this.primary;
if (_local3 == null){
_local3 = this.findChurchDir(_arg1, _local2);
};
_local4 = Util.createBuilding(_local2, Util.CHURCH, _local3);
Util.drawBuilding(_local2, _local4);
return (_local4);
}
protected function boxDiff(_arg1:Section, _arg2:Section, _arg3:Direction):int{
var _local4:int;
var _local5:enum;
_local4 = 0;
_local5 = _arg3;
switch (_local5.index){
case 0:
_local4 = (_arg2.offset.y - _arg1.offset.y);
break;
case 1:
_local4 = (_arg1.limit.y - _arg2.limit.y);
break;
case 2:
_local4 = (_arg1.limit.x - _arg2.limit.x);
break;
case 3:
_local4 = (_arg2.offset.x - _arg1.offset.x);
break;
};
return (_local4);
}
protected function findChurchLot(_arg1:Section):Section{
var _local2:Section;
var _local3:int;
var _local4:int;
_local2 = _arg1.randSublot(new Point(3, 3));
if ((((_local2.offset.x == (_arg1.offset.x + 1))) || ((_local2.limit.x == (_arg1.limit.x - 1))))){
_local3 = this.randAdjust();
_local2.offset.x = (_local2.offset.x + _local3);
_local2.limit.x = (_local2.limit.x + _local3);
};
if ((((_local2.offset.y == (_arg1.offset.y + 1))) || ((_local2.limit.y == (_arg1.limit.y - 1))))){
_local4 = this.randAdjust();
_local2.offset.y = (_local2.offset.y + _local4);
_local2.limit.y = (_local2.limit.y + _local4);
};
return (_local2);
}
protected function addPark(_arg1:Point):void{
var _local2:int;
var _local3:int;
var _local4:int;
if (Game.map.getCell(_arg1.x, _arg1.y).getBackground() == BackgroundType.PARK){
_local2 = NEITHER;
if (!this.isPark(_arg1, Direction.NORTH)){
_local2 = NORTH;
} else {
if (!this.isPark(_arg1, Direction.SOUTH)){
_local2 = SOUTH;
};
};
_local3 = NEITHER;
if (!this.isPark(_arg1, Direction.EAST)){
_local3 = EAST;
} else {
if (!this.isPark(_arg1, Direction.WEST)){
_local3 = WEST;
};
};
_local4 = parkEdgeTiles[_local2][_local3];
if ((((_local2 == NEITHER)) && ((_local3 == NEITHER)))){
_local4 = this.getCornerPark(_arg1);
};
Util.addTile(_arg1, _local4);
};
}
protected function randAdjust():int{
var _local1:int;
var _local2:int;
_local1 = 0;
_local2 = Util.rand(2);
if (_local2 == 0){
_local1 = 1;
} else {
_local1 = -1;
};
return (_local1);
}
protected function getCornerPark(_arg1:Point):int{
var _local2:int;
var _local3:int;
var _local4:int;
_local2 = 87;
_local3 = 0;
while (_local3 < 4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local4 = _temp1;
if (!this.isParkDelta(_arg1, parkCornerDelta[_local4])){
_local2 = parkCornerTiles[_local4];
};
};
return (_local2);
}
override public function place(_arg1:Section):void{
this.placeBuilding(_arg1);
}
public function placeEditBox(_arg1:Section):Building{
var _local2:PlaceTerrain;
var _local3:Section;
var _local4:Building;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:Point;
_local2 = new PlaceTerrain();
_local2.place(_arg1, PlaceTerrain.park);
_local3 = _arg1.slice(Util.opposite(this.primary), 3);
_local3 = _local3.randSublot(new Point(3, 3));
_local4 = Util.createBuilding(_local3, Util.CHURCH, this.primary);
Util.drawBuilding(_local3, _local4);
_local5 = _arg1.offset.y;
_local6 = _arg1.limit.y;
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp1;
_local8 = _arg1.offset.x;
_local9 = _arg1.limit.x;
while (_local8 < _local9) {
var _temp2 = _local8;
_local8 = (_local8 + 1);
_local10 = _temp2;
_local11 = new Point(_local10, _local7);
this.addOverlay(_local11, _local4);
};
};
return (_local4);
}
public function placeBuilding(_arg1:Section):Building{
var _local2:Building;
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.PARK);
_local2 = this.placeChurch(_arg1);
this.placeScenery(_arg1, _local2);
if (this.fillGaps){
Util.fillBlockedGaps(_arg1);
};
return (_local2);
}
protected function isPath(_arg1:Point, _arg2:Building):Boolean{
var _local3:Boolean;
var _local4:Direction;
var _local5:Point;
var _local6:enum;
_local3 = false;
_local4 = _arg2.getEntranceDir();
_local5 = _arg2.getEntrance();
_local6 = _local4;
switch (_local6.index){
case 0:
_local3 = (((_arg1.x == _local5.x)) && ((_arg1.y < _local5.y)));
break;
case 1:
_local3 = (((_arg1.x == _local5.x)) && ((_arg1.y > _local5.y)));
break;
case 2:
_local3 = (((_arg1.x > _local5.x)) && ((_arg1.y == _local5.y)));
break;
case 3:
_local3 = (((_arg1.x < _local5.x)) && ((_arg1.y == _local5.y)));
break;
};
return (_local3);
}
protected function addOverlay(_arg1:Point, _arg2:Building):void{
var _local3:BackgroundType;
_local3 = Game.map.getCell(_arg1.x, _arg1.y).getBackground();
if (_local3 == BackgroundType.PARK){
if (this.isPath(_arg1, _arg2)){
this.addPath(_arg1, _arg2);
} else {
if (((this.fillGaps) && ((Util.rand(100) < 30)))){
this.addBlocked(_arg1);
};
};
};
}
}
}//package mapgen
Section 63
//BlockHouses (mapgen.BlockHouses)
package mapgen {
public class BlockHouses extends BlockRoot {
protected static var drivewayTiles:Array = [683, 687, 691, 695];
protected static var startOffsets:Array = [new Point(0, -1), new Point(1, 2), new Point(2, 0), new Point(-1, 1)];
public function BlockHouses():void{
}
protected function middleLot(_arg1:Section):Section{
var _local2:Point;
var _local3:Section;
_local2 = _arg1.centerPoint();
_local3 = new Section(_local2, new Point((_local2.x + 2), (_local2.y + 2)));
_local3.north = _arg1.north;
_local3.south = _arg1.south;
_local3.east = _arg1.east;
_local3.west = _arg1.west;
return (_local3);
}
override public function place(_arg1:Section):void{
var _local2:List;
var _local3:*;
var _local4:Section;
var _local5:Section;
var _local6:Building;
Util.fillWithBorder(_arg1, Tile.parkTiles);
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.PARK);
_local2 = new List();
Util.subdivide(_arg1, Option.minHouseSize, _local2);
_local3 = _local2.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
_local5 = _local4.randSublot(new Point(Option.minHouseSize, Option.minHouseSize));
_local6 = Util.createBuilding(_local5, Util.HOUSE);
Util.drawBuilding(_local5, _local6);
addDriveway(_local5.offset, _local6.getEntranceDir(), _arg1);
};
Util.fillBlockedGaps(_arg1);
}
protected static function addDriveway(_arg1:Point, _arg2:Direction, _arg3:Section):void{
var _local4:int;
var _local5:Point;
_local4 = Lib.directionToIndex(_arg2);
_local5 = new Point((_arg1.x + startOffsets[_local4].x), (_arg1.y + startOffsets[_local4].y));
while (_arg3.contains(_local5)) {
Util.addTile(_local5, drivewayTiles[_local4]);
_local5.x = (_local5.x + Lib.directionToDelta(_arg2).x);
_local5.y = (_local5.y + Lib.directionToDelta(_arg2).y);
};
}
public static function placeEditBox(_arg1:Section, _arg2:Direction, _arg3:Direction):Building{
var _local4:PlaceTerrain;
var _local5:Section;
var _local6:Building;
_local4 = new PlaceTerrain();
_local4.place(_arg1, PlaceTerrain.park);
_local5 = _arg1.slice(Util.opposite(_arg2), 2);
_local5 = _local5.slice(Util.opposite(_arg3), 2);
_local6 = Util.createBuilding(_local5, Util.HOUSE, _arg2);
Util.drawBuilding(_local5, _local6);
addDriveway(_local5.offset, _arg2, _arg1);
return (_local6);
}
}
}//package mapgen
Section 64
//BlockMall (mapgen.BlockMall)
package mapgen {
import flash.*;
public class BlockMall extends BlockRoot {
protected var primary:Direction;
protected var vertTileLot:Section;
protected var placeRubble:Boolean;
protected var horizTileLot:Section;
protected var secondary:Direction;
protected static var horizDirs:Array = [Direction.EAST, Direction.WEST, Direction.EAST, Direction.WEST];
protected static var EDGE_CORNER:int = 0;
protected static var EDGE_BEGIN:int = 1;
protected static var EDGE_MIDDLE:int = 2;
protected static var tileCornerTile:int = 746;
protected static var vertCornerTile:Array = [748, 747, 808, 807];
protected static var edges:Array = [[746, 826, 827, 828], [746, 846, 847, 848], [746, 810, 830, 850], [746, 809, 829, 849]];
protected static var mallCornerTile:Array = [0x0300, 767, 788, 787];
protected static var EDGE_END:int = 3;
protected static var tileTile:int = 746;
protected static var vertDirs:Array = [Direction.NORTH, Direction.NORTH, Direction.SOUTH, Direction.SOUTH];
protected static var horizCornerTile:Array = [769, 766, 789, 786];
public function BlockMall(_arg1=null, _arg2:Direction=null, _arg3:Direction=null):void{
if (!Boot.skip_constructor){
this.placeRubble = true;
if (_arg1 == false){
this.placeRubble = false;
};
this.primary = _arg2;
this.secondary = _arg3;
};
}
protected function setupTiles(_arg1:Section, _arg2:Direction, _arg3:Direction):Section{
var _local4:Section;
_local4 = _arg1;
this.horizTileLot = null;
this.vertTileLot = null;
if (_local4.getSize().x > 5){
this.horizTileLot = _local4.slice(Util.opposite(_arg2), 1);
_local4 = _local4.slice(_arg2, (_local4.getSize().x - 1));
};
if (_local4.getSize().y > 5){
this.vertTileLot = _local4.slice(Util.opposite(_arg3), 1);
_local4 = _local4.slice(_arg3, (_local4.getSize().y - 1));
};
return (_local4);
}
override public function place(_arg1:Section):void{
this.placeBuilding(_arg1);
}
protected function placeEdgeTiles(_arg1:Section, _arg2:Direction, _arg3:Point):void{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
if (_arg1 != null){
Util.fillClearTiles(_arg1);
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.STREET);
_local4 = Lib.directionToIndex(_arg2);
_local5 = _arg1.offset.y;
_local6 = _arg1.limit.y;
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp1;
_local8 = _arg1.offset.x;
_local9 = _arg1.limit.x;
while (_local8 < _local9) {
var _temp2 = _local8;
_local8 = (_local8 + 1);
_local10 = _temp2;
_local11 = this.findEdgeIndex(_local10, _local7, _arg1, _arg2, _arg3);
Util.addTile(new Point(_local10, _local7), edges[_local4][_local11]);
};
};
};
}
protected function placeParkingLots(_arg1:Section, _arg2:int, _arg3:Direction, _arg4:Direction):Section{
var _local5:Section;
var _local6:Direction;
var _local7:Direction;
var _local8:int;
var _local9:int;
var _local10:Section;
var _local11:Section;
var _local12:Section;
var _local13:Section;
var _local14:Section;
_local5 = _arg1;
_local6 = null;
_local7 = null;
if (_arg1.getSize().x > _arg1.getSize().y){
_local6 = _arg4;
_local7 = _arg3;
} else {
_local6 = _arg3;
_local7 = _arg4;
};
_local5 = this.placeParkingStrip(_local5, _local6, _local7, true, this.getParkingSize(_arg1.dirSize(_local6)), this.getParkingSize(_arg1.dirSize(_local7)));
_local5 = this.placeParkingStrip(_local5, _local7, _local6, false, this.getParkingSize(_arg1.dirSize(_local7)), this.getParkingSize(_arg1.dirSize(_local6)));
_local8 = this.getParkingSize(_arg1.getSize().x);
_local9 = this.getParkingSize(_arg1.getSize().y);
if ((((_local8 == 2)) && ((_local9 == 2)))){
_local10 = _arg1.slice(Util.opposite(_local6), this.getParkingSize(_arg1.dirSize(_local6)));
_local11 = _local10.slice(Util.opposite(_local7), 2);
_local12 = _local11.slice(_local7, 1);
_local12 = _local12.slice(_local6, 1);
_local13 = _local11.slice(Util.opposite(_local7), 1);
_local14 = _local13.slice(_local6, 1);
_local13 = _local13.slice(Util.opposite(_local6), 1);
PlaceParkingLot.fixCorner(_local12, _local13, _local14, PlaceRoot.oppositeCorner(_arg2), (_local6 == _arg4));
};
return (_local5);
}
protected function getCornerIndex(_arg1:Direction, _arg2:Direction):int{
var _local3:int;
_local3 = PlaceRoot.NORTHEAST;
if ((((_arg2 == Direction.NORTH)) && ((_arg1 == Direction.WEST)))){
_local3 = PlaceRoot.NORTHWEST;
} else {
if ((((_arg2 == Direction.SOUTH)) && ((_arg1 == Direction.EAST)))){
_local3 = PlaceRoot.SOUTHEAST;
} else {
if ((((_arg2 == Direction.SOUTH)) && ((_arg1 == Direction.WEST)))){
_local3 = PlaceRoot.SOUTHWEST;
};
};
};
return (_local3);
}
public function placeBuilding(_arg1:Section):Building{
var _local2:Direction;
var _local3:Direction;
var _local4:int;
var _local5:Section;
var _local6:Building;
_local2 = this.primary;
_local3 = this.secondary;
if ((((this.primary == Direction.NORTH)) || ((this.primary == Direction.SOUTH)))){
_local2 = this.secondary;
_local3 = this.primary;
};
_local4 = 0;
if ((((this.primary == null)) || ((this.secondary == null)))){
_local4 = Util.rand(4);
_local2 = horizDirs[_local4];
_local3 = vertDirs[_local4];
} else {
_local4 = PlaceRoot.lessCorner(_local2);
if (_local3 == Direction.SOUTH){
_local4 = PlaceRoot.greaterCorner(_local2);
};
};
_local5 = _arg1;
_local5 = this.placeParkingLots(_local5, _local4, _local2, _local3);
_local5 = this.setupTiles(_local5, _local2, _local3);
_local6 = this.placeMall(_local5, _local2, _local3);
this.placeTiles(_local5, _local6, _local2, _local3);
return (_local6);
}
protected function findEdgeIndex(_arg1:int, _arg2:int, _arg3:Section, _arg4:Direction, _arg5:Point):int{
var _local6:int;
_local6 = EDGE_CORNER;
if ((((Lib.intAbs((_arg1 - _arg5.x)) <= 1)) && ((Lib.intAbs((_arg2 - _arg5.y)) <= 1)))){
if ((((_arg4 == Direction.NORTH)) || ((_arg4 == Direction.SOUTH)))){
_local6 = this.edgeEntranceIndex(_arg1, _arg5.x);
} else {
_local6 = this.edgeEntranceIndex(_arg2, _arg5.y);
};
} else {
if ((((_arg4 == Direction.NORTH)) || ((_arg4 == Direction.SOUTH)))){
_local6 = this.edgeNormalIndex(_arg1, _arg3.offset.x, _arg3.limit.x);
} else {
_local6 = this.edgeNormalIndex(_arg2, _arg3.offset.y, _arg3.limit.y);
};
};
return (_local6);
}
protected function getParkingSize(_arg1:int):int{
if (_arg1 <= 6){
return (0);
};
if (_arg1 <= 9){
return (2);
};
return (3);
}
protected function placeParkingStrip(_arg1:Section, _arg2:Direction, _arg3:Direction, _arg4:Boolean, _arg5:int, _arg6:int):Section{
var _local7:Section;
var _local8:int;
var _local9:Section;
var _local10:PlaceParkingLot;
var _local11:List;
var _local12:Section;
var _local13:Section;
var _local14:Section;
var _local15:Section;
var _local16:Section;
var _local17:Section;
_local7 = _arg1;
_local8 = _arg1.dirSize(_arg2);
if (_arg5 > 0){
_local9 = _local7.slice(Util.opposite(_arg2), _arg5);
_local7 = _local7.slice(_arg2, (_local8 - _arg5));
_local10 = new PlaceParkingLot();
_local11 = new List();
if (_arg6 > 0){
if (_arg4){
_local12 = _local9.slice(Util.opposite(_arg3), 2);
_local12 = _local12.slice(_arg3, 1);
_local12 = _local12.slice(_arg2, 1);
_local11.add(_local12.offset);
} else {
if (_arg5 == 3){
_local13 = _local9.slice(Util.opposite(_arg3), 1);
_local13 = _local13.slice(_arg2, 2);
_local13 = _local13.slice(Util.opposite(_arg2), 1);
_local11.add(_local13.offset);
} else {
if (_arg5 == 2){
_local9 = _local9.slice(_arg3, (_local9.dirSize(_arg3) + 1));
};
};
};
};
if (_arg5 == 3){
_local14 = _local9.slice(_arg3, 1);
_local14 = _local14.slice(_arg2, 2);
_local14 = _local14.slice(Util.opposite(_arg2), 1);
_local11.add(_local14.offset);
PlaceParkingLot.addCrossStreet(_local14, _local14.offset, _arg3, CrossStreet.PARKING_ENTRANCE);
} else {
_local15 = _local9.slice(_arg3, 1);
_local16 = _local15.slice(_arg2, 1);
_local11.add(_local16.offset);
_local17 = _local15.slice(Util.opposite(_arg2), 1);
_local11.add(_local17.offset);
if ((((_local16.offset.x < _local17.offset.x)) || ((_local16.offset.y < _local17.offset.y)))){
PlaceParkingLot.addCrossStreet(_local16, _local16.offset, _arg3, CrossStreet.BEGIN_PARKING_ENTRANCE);
PlaceParkingLot.addCrossStreet(_local17, _local17.offset, _arg3, CrossStreet.END_PARKING_ENTRANCE);
} else {
PlaceParkingLot.addCrossStreet(_local16, _local16.offset, _arg3, CrossStreet.END_PARKING_ENTRANCE);
PlaceParkingLot.addCrossStreet(_local17, _local17.offset, _arg3, CrossStreet.BEGIN_PARKING_ENTRANCE);
};
};
_local10.place(_local9, _local11, this.placeRubble, _arg2);
};
return (_local7);
}
protected function edgeNormalIndex(_arg1:int, _arg2:int, _arg3:int):int{
if (_arg1 == _arg2){
return (EDGE_BEGIN);
};
if (_arg1 == (_arg3 - 1)){
return (EDGE_END);
};
return (EDGE_MIDDLE);
}
protected function placeMall(_arg1:Section, _arg2:Direction, _arg3:Direction):Building{
var _local4:Array;
var _local5:Direction;
var _local6:Building;
_local4 = [_arg2, _arg3];
_local5 = Util.opposite(_local4[Util.rand(2)]);
if (this.primary != null){
_local5 = Util.opposite(this.primary);
};
_local6 = Util.createBuilding(_arg1, Util.MALL, _local5);
Util.drawBuilding(_arg1, _local6);
return (_local6);
}
protected function placeTiles(_arg1:Section, _arg2:Building, _arg3:Direction, _arg4:Direction):void{
var _local5:int;
var _local6:Section;
var _local7:Section;
var _local8:Section;
var _local9:Section;
var _local10:Section;
this.placeEdgeTiles(this.horizTileLot, Util.opposite(_arg3), _arg2.getEntrance());
this.placeEdgeTiles(this.vertTileLot, Util.opposite(_arg4), _arg2.getEntrance());
if (((!((this.horizTileLot == null))) && (!((this.vertTileLot == null))))){
_local5 = this.getCornerIndex(Util.opposite(_arg3), Util.opposite(_arg4));
_local6 = _arg1;
_local6 = _local6.slice(Util.opposite(_arg3), 1);
_local6 = _local6.slice(Util.opposite(_arg4), 1);
Util.addTile(_local6.offset, mallCornerTile[_local5]);
_local7 = this.horizTileLot.slice(Util.opposite(_arg4), 2);
_local8 = _local7.slice(Util.opposite(_arg4), 1);
Util.addTile(_local8.offset, tileCornerTile);
_local9 = _local7.slice(_arg4, 1);
Util.addTile(_local9.offset, horizCornerTile[_local5]);
_local10 = this.vertTileLot.slice(Util.opposite(_arg3), 1);
Util.addTile(_local10.offset, vertCornerTile[_local5]);
};
}
protected function edgeEntranceIndex(_arg1:int, _arg2:int):int{
if (_arg1 < _arg2){
return (EDGE_END);
};
if (_arg1 > _arg2){
return (EDGE_BEGIN);
};
return (EDGE_CORNER);
}
}
}//package mapgen
Section 65
//BlockPark (mapgen.BlockPark)
package mapgen {
import flash.*;
public class BlockPark extends BlockRoot {
protected var addTrees:Boolean;
public function BlockPark(_arg1=null):void{
if (!Boot.skip_constructor){
this.addTrees = true;
if (_arg1 == false){
this.addTrees = false;
};
};
}
override public function place(_arg1:Section):void{
Util.fillWithBorder(_arg1, Tile.parkTiles);
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.PARK);
if (this.addTrees){
Util.blockRandom(_arg1, [Tile.trees, Tile.rocks, Tile.lakes], [3, 1, 1]);
Util.fillBlockedGaps(_arg1);
};
}
}
}//package mapgen
Section 66
//BlockRoot (mapgen.BlockRoot)
package mapgen {
public class BlockRoot extends PlaceRoot {
public function place(_arg1:Section):void{
}
}
}//package mapgen
Section 67
//BlockStandard (mapgen.BlockStandard)
package mapgen {
public class BlockStandard extends BlockRoot {
public function BlockStandard():void{
}
override public function place(_arg1:Section):void{
var _local2:List;
var _local3:*;
var _local4:Section;
var _local5:Building;
_local2 = new List();
Util.subdivide(_arg1, Option.minGenericSize, _local2);
_local3 = _local2.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
_local5 = Util.createBuilding(_local4);
Util.drawBuilding(_local4, _local5);
};
}
}
}//package mapgen
Section 68
//BuildingApartment (mapgen.BuildingApartment)
package mapgen {
import flash.*;
public class BuildingApartment extends BuildingRoot {
protected var dirs:Array;
protected static var middle:int = 963;
protected static var EXTENDS_BOTH:int = 3;
protected static var STOPS:int = 0;
protected static var EXTENDS_HORIZ:int = 1;
protected static var EXTENDS_VERT:int = 2;
protected static var EXTENDS:int = 1;
protected static var edges:Array = [[943, 963], [983, 963], [964, 963], [962, 963]];
protected static var corners:Array = [[944, 943, 964, 960], [942, 943, 962, 961], [984, 983, 964, 940], [982, 983, 962, 941]];
public function BuildingApartment(_arg1:Building=null):void{
if (!Boot.skip_constructor){
super(_arg1);
this.dirs = [];
};
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
var _local6:int;
_local6 = STOPS;
if (this.doesExtend(PlaceRoot.cornerToVert(_arg2))){
_local6 = (_local6 | EXTENDS_VERT);
};
if (this.doesExtend(PlaceRoot.cornerToHoriz(_arg2))){
_local6 = (_local6 | EXTENDS_HORIZ);
};
Util.addTile(_arg1, corners[_arg2][_local6]);
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
var _local5:int;
_local5 = STOPS;
if (this.doesExtend(Lib.indexToDirection(_arg2))){
_local5 = EXTENDS;
};
Util.fillAddTile(_arg1, edges[_arg2][_local5]);
}
public function setDirs(_arg1:Array):void{
this.dirs = _arg1;
}
protected function doesExtend(_arg1:Direction):Boolean{
var _local2:Boolean;
var _local3:int;
var _local4:Array;
var _local5:Direction;
_local2 = false;
_local3 = 0;
_local4 = this.dirs;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
if (_arg1 == _local5){
_local2 = true;
};
};
return (_local2);
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
Util.fillAddTile(_arg1, middle);
}
}
}//package mapgen
Section 69
//BuildingChurch (mapgen.BuildingChurch)
package mapgen {
import flash.*;
public class BuildingChurch extends BuildingRoot {
protected static var center:Array = [701, 705, 709, 713];
protected static var edges:Array = [[723, 685, 689, 693], [721, 727, 729, 733], [702, 706, 731, 714], [700, 704, 708, 735]];
protected static var corners:Array = [[682, 686, 690, 694], [680, 684, 688, 692], [722, 726, 730, 734], [720, 724, 728, 732]];
public function BuildingChurch(_arg1:Building=null):void{
if (!Boot.skip_constructor){
super(_arg1);
};
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
Util.addTile(_arg1, corners[_arg2][this.getDir()]);
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
Util.addTile(_arg1.offset, edges[_arg2][this.getDir()]);
}
protected function getDir():int{
return (Lib.directionToIndex(this.building.getEntranceDir()));
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
Util.addTile(_arg1.offset, center[this.getDir()]);
}
}
}//package mapgen
Section 70
//BuildingFringe (mapgen.BuildingFringe)
package mapgen {
import flash.*;
public class BuildingFringe extends BuildingRoot {
protected static var ROAD:int = 1;
protected static var start:int = 320;
protected static var colors:Array = [0, 5, 10];
protected static var FRINGE:int = 0;
protected static var BUILDING:int = 2;
protected static var corner:Array = [[[4, 64, 104, 4], [1, 4, 4, 4], [61, 4, 4, 4], [4, 4, 4, 4]], [[2, 62, 102, 2], [0, 2, 2, 2], [60, 2, 2, 2], [2, 2, 2, 2]], [[44, 84, 124, 44], [41, 44, 44, 44], [101, 44, 44, 44], [44, 44, 44, 44]], [[42, 82, 122, 42], [40, 42, 42, 42], [100, 42, 42, 42], [42, 42, 42, 42]]];
protected static var ENTRANCE:int = 3;
protected static var center:int = 23;
protected static var edge:Array = [[63, 3, 3, 103], [83, 43, 43, 123], [21, 24, 24, 81], [20, 22, 22, 80]];
public function BuildingFringe(_arg1:Building=null):void{
if (!Boot.skip_constructor){
super(_arg1);
};
}
override protected function getColorCount():int{
return (colors.length);
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
var _local6:int;
var _local7:int;
var _local8:int;
_local6 = BUILDING;
if (this.building.getEntrance().y == _arg1.y){
_local6 = FRINGE;
} else {
if (_arg3 != null){
_local6 = ROAD;
};
};
_local7 = BUILDING;
if (this.building.getEntrance().x == _arg1.x){
_local7 = FRINGE;
} else {
if (_arg4 != null){
_local7 = ROAD;
};
};
_local8 = ((BuildingFringe.start + colors[_arg5]) + corner[_arg2][_local6][_local7]);
Util.addTile(_arg1, _local8);
if (((!((_local6 == FRINGE))) && (!((_local7 == FRINGE))))){
Util.addRoofOverlay(_arg1, Tile.cornerRoof);
};
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:Point;
var _local13:int;
_local5 = BUILDING;
if (_arg1.contains(this.building.getEntrance())){
_local5 = FRINGE;
} else {
if (_arg3 != null){
_local5 = ROAD;
};
};
_local6 = _arg1.offset.y;
_local7 = _arg1.limit.y;
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp1;
_local9 = _arg1.offset.x;
_local10 = _arg1.limit.x;
while (_local9 < _local10) {
var _temp2 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp2;
_local12 = new Point(_local11, _local8);
_local13 = Tile.NO_TILE;
if (Point.isEqual(_local12, this.building.getEntrance())){
_local13 = ((BuildingFringe.start + colors[_arg4]) + edge[_arg2][ENTRANCE]);
} else {
_local13 = ((BuildingFringe.start + colors[_arg4]) + edge[_arg2][_local5]);
};
Util.addTile(_local12, _local13);
if (_local5 != FRINGE){
Util.addRoofOverlay(_local12, Tile.edgeRoof[_arg2]);
};
};
};
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local3 = ((BuildingFringe.start + colors[_arg2]) + center);
Util.fillAddTile(_arg1, _local3);
_local4 = _arg1.offset.y;
_local5 = _arg1.limit.y;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local7 = _arg1.offset.x;
_local8 = _arg1.limit.x;
while (_local7 < _local8) {
var _temp2 = _local7;
_local7 = (_local7 + 1);
_local9 = _temp2;
Util.addRoofOverlay(new Point(_local9, _local6), Tile.centerRoof);
};
};
}
}
}//package mapgen
Section 71
//BuildingGeneric (mapgen.BuildingGeneric)
package mapgen {
import flash.*;
public class BuildingGeneric extends BuildingRoot {
public function BuildingGeneric(_arg1:Building=null):void{
if (!Boot.skip_constructor){
super(_arg1);
};
}
override public function place(_arg1:Section):void{
var _local2:Array;
var _local3:int;
_local2 = [new BuildingFringe(this.building), new BuildingPlant(this.building)];
_local3 = Util.rand(_local2.length);
_local2[_local3].place(_arg1);
}
}
}//package mapgen
Section 72
//BuildingHardware (mapgen.BuildingHardware)
package mapgen {
import flash.*;
public class BuildingHardware extends BuildingRoot {
protected var orientation:int;
protected static var signCorners:Array = [[876, 877], [878, 879], [839, 859], [838, 858]];
protected static var lumberEdges:Array = [[699, 739], [719, 759], [612, 749], [632, 806]];
protected static var corners:Array = [[752, 758, 755, 698], [750, 756, 753, 696], [792, 798, 795, 738], [790, 796, 793, 736]];
protected static var entrance:Array = [779, 799, 819, 818];
protected static var LUMBER:int = 4;
protected static var lumberCorners:Array = [659, 658, 679, 678];
protected static var edges:Array = [[751, 757, 754, 697], [791, 797, 794, 737], [772, 778, 775, 718], [770, 776, 773, 716]];
protected static var signMiddle:Array = [[851, 852, 853], [873, 874, 875], [815, 835, 855], [814, 834, 854]];
protected static var centers:Array = [0x0303, 777, 774, 717];
public function BuildingHardware(_arg1:Building=null):void{
if (!Boot.skip_constructor){
super(_arg1);
this.orientation = 0;
};
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
var _local6:Direction;
var _local7:Direction;
var _local8:Direction;
var _local9:Direction;
var _local10:int;
Util.addTile(_arg1, corners[_arg2][this.orientation]);
_local6 = PlaceRoot.cornerToVert(_arg2);
_local7 = PlaceRoot.cornerToHoriz(_arg2);
_local8 = this.building.getEntranceDir();
_local9 = null;
if (_local6 == _local8){
_local9 = _local7;
} else {
if (_local7 == _local8){
_local9 = _local6;
};
};
if (_local9 != null){
_local10 = -1;
if ((((_local9 == Direction.NORTH)) || ((_local9 == Direction.WEST)))){
_local10 = signCorners[Lib.directionToIndex(_local8)][0];
} else {
_local10 = signCorners[Lib.directionToIndex(_local8)][1];
};
Util.addTile(_arg1, _local10);
};
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
Util.fillAddTile(_arg1, edges[_arg2][this.orientation]);
if (Lib.indexToDirection(_arg2) == this.building.getEntranceDir()){
Util.addTile(this.building.getEntrance(), entrance[_arg2]);
Util.fillAddTile(_arg1, signMiddle[_arg2][Util.rand(3)]);
};
}
override public function place(_arg1:Section):void{
var _local2:Direction;
var _local3:Section;
var _local4:Direction;
var _local5:Section;
super.setupMap(_arg1);
_local2 = this.building.getEntranceDir();
this.orientation = Lib.directionToIndex(_local2);
_local3 = _arg1.slice(_local2, 3);
this.setupTiles(_local3);
_local4 = Util.opposite(_local2);
_local5 = _arg1.slice(_local4, (_arg1.dirSize(_local4) - 3));
while (_local5.dirSize(_local4) > 0) {
_local5 = this.placeLumber(_local5, _local4);
};
}
protected function placeLumber(_arg1:Section, _arg2:Direction):Section{
var _local3:Section;
var _local4:Section;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
_local3 = _arg1.slice(Util.opposite(_arg2), (_arg1.dirSize(_arg2) - 1));
_local4 = _arg1.slice(_arg2, 1);
_local5 = Lib.directionToIndex(_arg2);
_local6 = _local4.offset.y;
_local7 = _local4.limit.y;
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp1;
_local9 = _local4.offset.x;
_local10 = _local4.limit.x;
while (_local9 < _local10) {
var _temp2 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp2;
_local12 = Util.rand(2);
Util.addTile(new Point(_local11, _local8), lumberEdges[_local5][_local12]);
};
};
Util.addTile(_local4.offset, lumberCorners[PlaceRoot.lessCorner(_arg2)]);
Util.addTile(new Point((_local4.limit.x - 1), (_local4.limit.y - 1)), lumberCorners[PlaceRoot.greaterCorner(_arg2)]);
return (_local3);
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
Util.fillAddTile(_arg1, centers[this.orientation]);
}
}
}//package mapgen
Section 73
//BuildingHospital (mapgen.BuildingHospital)
package mapgen {
import flash.*;
public class BuildingHospital extends BuildingRoot {
protected static var ROAD_BOTH:int = 1;
protected static var ROAD_NONE_EDGE:int = 0;
protected static var BEFORE_ENTRANCE:int = 1;
protected static var ROAD_BOTH_VERT:int = 0;
protected static var center:int = 243;
protected static var edges:Array = [[[226, 223], [283, 283], [284, 284], [285, 285]], [[266, 263], [303, 303], [304, 304], [305, 305]], [[247, 244], [241, 241], [261, 261], [281, 281]], [[245, 242], [240, 240], [260, 260], [280, 280]]];
protected static var overlay:int = 228;
protected static var AFTER_ENTRANCE:int = 3;
protected static var ROAD_BOTH_EDGE:int = 1;
protected static var ROAD_BOTH_HORIZ:int = 1;
protected static var ROAD_VERT:int = 2;
protected static var BUILDING:int = 0;
protected static var ENTRANCE:int = 2;
protected static var ROAD_NONE:int = 0;
protected static var ROAD_HORIZ:int = 3;
protected static var corners:Array = [[[227, 224, 286, 221], [-1, 252, -1, 292], [-1, -1, -1, -1], [288, -1, 290, -1]], [[225, 222, 282, 220], [287, 251, 289, 291], [-1, -1, -1, -1], [-1, -1, -1, -1]], [[267, 264, 306, 301], [-1, -1, -1, -1], [-1, -1, -1, -1], [308, 272, 310, 312]], [[265, 262, 302, 300], [307, -1, 309, -1], [-1, -1, -1, -1], [-1, 271, -1, 311]]];
public function BuildingHospital(_arg1:Building=null):void{
if (!Boot.skip_constructor){
super(_arg1);
};
}
protected function getNextEdgeType(_arg1:Point, _arg2:int):int{
var _local3:int;
_local3 = BUILDING;
if (_arg2 == BEFORE_ENTRANCE){
_local3 = ENTRANCE;
} else {
if (_arg2 == ENTRANCE){
_local3 = AFTER_ENTRANCE;
} else {
if ((((_arg2 == BUILDING)) && (Point.isAdjacent(_arg1, this.building.getEntrance())))){
_local3 = BEFORE_ENTRANCE;
};
};
};
return (_local3);
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
var _local6:int;
var _local7:int;
_local6 = ROAD_NONE;
if (((!((_arg3 == null))) && (!((_arg4 == null))))){
_local6 = ROAD_BOTH;
} else {
if (_arg3 != null){
_local6 = ROAD_VERT;
} else {
if (_arg4 != null){
_local6 = ROAD_HORIZ;
};
};
};
_local7 = BUILDING;
if (Point.isVerticallyAdjacent(_arg1, this.building.getEntrance())){
if (_local6 == ROAD_BOTH){
_local6 = ROAD_BOTH_HORIZ;
} else {
_local6 = ROAD_HORIZ;
};
if ((((_arg2 == PlaceRoot.NORTHWEST)) || ((_arg2 == PlaceRoot.NORTHEAST)))){
_local7 = BEFORE_ENTRANCE;
} else {
_local7 = AFTER_ENTRANCE;
};
} else {
if (Point.isHorizontallyAdjacent(_arg1, this.building.getEntrance())){
if (_local6 == ROAD_BOTH){
_local6 = ROAD_BOTH_VERT;
} else {
_local6 = ROAD_VERT;
};
if ((((_arg2 == PlaceRoot.NORTHWEST)) || ((_arg2 == PlaceRoot.SOUTHWEST)))){
_local7 = BEFORE_ENTRANCE;
} else {
_local7 = AFTER_ENTRANCE;
};
};
};
Util.addTile(_arg1, corners[_arg2][_local7][_local6]);
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:Point;
_local5 = ROAD_NONE_EDGE;
_local6 = BUILDING;
if (Point.isEqual(_arg1.offset, this.building.getEntrance())){
_local6 = BEFORE_ENTRANCE;
};
if (_arg3 != null){
_local5 = ROAD_BOTH_EDGE;
};
_local7 = _arg1.offset.y;
_local8 = _arg1.limit.y;
while (_local7 < _local8) {
var _temp1 = _local7;
_local7 = (_local7 + 1);
_local9 = _temp1;
_local10 = _arg1.offset.x;
_local11 = _arg1.limit.x;
while (_local10 < _local11) {
var _temp2 = _local10;
_local10 = (_local10 + 1);
_local12 = _temp2;
_local13 = new Point(_local12, _local9);
_local6 = this.getNextEdgeType(_local13, _local6);
Util.addTile(_local13, edges[_arg2][_local6][_local5]);
};
};
}
override protected function placeOverlay(_arg1:Point):void{
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
_local2 = new Point((_arg1.x - 1), (_arg1.y - 1));
_local3 = 0;
while (_local3 < 3) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local4 = _temp1;
_local5 = 0;
while (_local5 < 3) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp2;
_local7 = ((BuildingHospital.overlay + (_local4 * Tile.X_COUNT)) + _local6);
Util.addTile(new Point((_local2.x + _local6), (_local2.y + _local4)), _local7);
};
};
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
Util.fillAddTile(_arg1, center);
}
}
}//package mapgen
Section 74
//BuildingHouse (mapgen.BuildingHouse)
package mapgen {
import flash.*;
public class BuildingHouse extends BuildingRoot {
protected static var colors:Array = [600, 604];
protected static var corner:Array = [[1, 3, 41, 43], [0, 2, 40, 42], [21, 23, 61, 63], [20, 22, 60, 62]];
public function BuildingHouse(_arg1:Building=null):void{
if (!Boot.skip_constructor){
super(_arg1);
};
}
override protected function getColorCount():int{
return (colors.length);
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
var _local6:int;
_local6 = Lib.directionToIndex(this.building.getEntranceDir());
Util.addTile(_arg1, (corner[_arg2][_local6] + colors[_arg5]));
}
}
}//package mapgen
Section 75
//BuildingMall (mapgen.BuildingMall)
package mapgen {
import flash.*;
public class BuildingMall extends BuildingRoot {
protected var center:Point;
protected static var BEGIN:int = 1;
protected static var centerTiles:Array = [[761, 762, 763, 764, 761], [781, 782, 783, 784, 781], [801, 802, 803, 804, 801], [821, 822, 823, 824, 821], [761, 762, 763, 764, 761]];
protected static var MIDDLE:int = 2;
protected static var END:int = 3;
protected static var AFTER:int = 4;
protected static var edges:Array = [[741, 742, 743, 744, 741], [841, 842, 843, 844, 841], [765, 785, 805, 825, 765], [760, 780, 800, 820, 760]];
protected static var corners:Array = [745, 740, 845, 840];
protected static var BEFORE:int = 0;
public function BuildingMall(_arg1:Building=null, _arg2:Section=null):void{
var _local3:Point;
var _local4:Point;
var _local5:Point;
var _local6:int;
var _local7:int;
if (!Boot.skip_constructor){
super(_arg1);
this.center = new Point(0, 0);
_local3 = _arg2.offset;
_local4 = _arg2.limit;
_local5 = _arg1.getEntrance();
if ((((_local5.x > _local3.x)) && ((_local5.x < (_local4.x - 1))))){
this.center.x = _local5.x;
} else {
_local6 = ((_local4.x - _local3.x) - 4);
this.center.x = ((Util.rand(_local6) + _local3.x) + 2);
};
if ((((_local5.y > _local3.y)) && ((_local5.y < (_local4.y - 1))))){
this.center.y = _local5.y;
} else {
_local7 = ((_local4.y - _local3.y) - 4);
this.center.y = ((Util.rand(_local7) + _local3.y) + 2);
};
};
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
Util.addTile(_arg1, corners[_arg2]);
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
_local5 = _arg1.offset.y;
_local6 = _arg1.limit.y;
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp1;
_local8 = _arg1.offset.x;
_local9 = _arg1.limit.x;
while (_local8 < _local9) {
var _temp2 = _local8;
_local8 = (_local8 + 1);
_local10 = _temp2;
_local11 = 0;
if ((((_arg2 == PlaceRoot.NORTH)) || ((_arg2 == PlaceRoot.SOUTH)))){
_local11 = this.findIndex(_local10, this.center.x);
} else {
_local11 = this.findIndex(_local7, this.center.y);
};
Util.addTile(new Point(_local10, _local7), edges[_arg2][_local11]);
};
};
}
protected function findIndex(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = BEFORE;
_local4 = (_arg1 - _arg2);
if (_local4 < -1){
_local3 = BEFORE;
} else {
if (_local4 == -1){
_local3 = BEGIN;
} else {
if (_local4 == 0){
_local3 = MIDDLE;
} else {
if (_local4 == 1){
_local3 = END;
} else {
_local3 = AFTER;
};
};
};
};
return (_local3);
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
_local3 = _arg1.offset.y;
_local4 = _arg1.limit.y;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = _arg1.offset.x;
_local7 = _arg1.limit.x;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
_local9 = this.findIndex(_local8, this.center.x);
_local10 = this.findIndex(_local5, this.center.y);
Util.addTile(new Point(_local8, _local5), centerTiles[_local10][_local9]);
};
};
}
}
}//package mapgen
Section 76
//BuildingPlant (mapgen.BuildingPlant)
package mapgen {
import flash.*;
public class BuildingPlant extends BuildingRoot {
protected var ignoreStreets:Boolean;
protected static var edgeWeights:Array = [1, 0, 1, 1, 0, 0, 6];
protected static var END_SHRUB:int = 1;
protected static var WIDE_ENTRANCE:int = 5;
protected static var colors:Array = [0, 5, 10];
protected static var SIMPLE:int = 6;
protected static var SINGLE_SHRUB:int = 3;
protected static var BEGIN_SHRUB:int = 0;
protected static var edges:Array = [[522, 523, 524, 562, 563, 564, 463], [542, 543, 544, 582, 583, 584, 503], [461, 481, 501, 521, 541, 561, 484], [460, 480, 500, 520, 540, 560, 482]];
protected static var center:int = 483;
protected static var NARROW_ENTRANCE:int = 4;
protected static var DOUBLE_SHRUB:int = 2;
protected static var corners:Array = [464, 462, 504, 502];
public function BuildingPlant(_arg1:Building=null, _arg2=null):void{
if (!Boot.skip_constructor){
super(_arg1);
this.ignoreStreets = false;
if (_arg2 == true){
this.ignoreStreets = true;
};
};
}
override protected function getColorCount():int{
return (colors.length);
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
Util.addTile(_arg1, (corners[_arg2] + colors[_arg5]));
Util.addRoofOverlay(_arg1, Tile.cornerRoof);
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:Point;
var _local13:Boolean;
var _local14:int;
_local5 = SIMPLE;
_local6 = _arg1.offset.y;
_local7 = _arg1.limit.y;
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp1;
_local9 = _arg1.offset.x;
_local10 = _arg1.limit.x;
while (_local9 < _local10) {
var _temp2 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp2;
_local12 = new Point(_local11, _local8);
_local13 = (((_local8 == (_arg1.limit.y - 1))) && ((_local11 == (_arg1.limit.x - 1))));
_local5 = this.findEdge(_local12, this.building.getEntrance(), _local5, _arg3, _local13);
_local14 = (edges[_arg2][_local5] + colors[_arg4]);
Util.addTile(_local12, _local14);
if (_local5 == SIMPLE){
Util.addRoofOverlay(_local12, Tile.edgeRoof[_arg2]);
};
};
};
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
Util.fillAddTile(_arg1, (BuildingPlant.center + colors[_arg2]));
_local3 = _arg1.offset.y;
_local4 = _arg1.limit.y;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = _arg1.offset.x;
_local7 = _arg1.limit.x;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
Util.addRoofOverlay(new Point(_local8, _local5), Tile.centerRoof);
};
};
}
protected function findEdge(_arg1:Point, _arg2:Point, _arg3:int, _arg4:Street, _arg5:Boolean):int{
var _local6:int;
_local6 = SIMPLE;
if (Point.isEqual(_arg1, _arg2)){
_local6 = (BuildingPlant.NARROW_ENTRANCE + Util.rand(2));
} else {
if (_arg3 == BEGIN_SHRUB){
_local6 = END_SHRUB;
} else {
if ((((_arg3 == NARROW_ENTRANCE)) || ((((_arg3 == WIDE_ENTRANCE)) && (((!((_arg4 == null))) || (this.ignoreStreets))))))){
_local6 = Util.randWeightedIndex(edgeWeights);
if (_local6 != BEGIN_SHRUB){
_local6 = SIMPLE;
};
} else {
if (Point.isAdjacent(_arg1, _arg2)){
_local6 = SIMPLE;
} else {
if ((((_arg3 == SIMPLE)) && (((!((_arg4 == null))) || (this.ignoreStreets))))){
_local6 = Util.randWeightedIndex(edgeWeights);
} else {
_local6 = SIMPLE;
};
};
};
};
};
if (((_arg5) && ((_local6 == BEGIN_SHRUB)))){
_local6 = SIMPLE;
};
return (_local6);
}
}
}//package mapgen
Section 77
//BuildingPolice (mapgen.BuildingPolice)
package mapgen {
import flash.*;
public class BuildingPolice extends BuildingRoot {
protected var baseDir:Direction;
protected var currentLevel:int;
protected var placeRubble:Boolean;
protected var legDir:Direction;
protected var currentEndings:Array;
protected static var FLOOR_1:int = 1;
protected static var centers:Array = [-1, 890, 991];
protected static var GROUND:int = 0;
protected static var edges:Array = [[[-1, -1, -1], [870, 890, 890], [1014, 971, 991]], [[-1, -1, -1], [910, 890, 890], [974, 1011, 991]], [[-1, -1, -1], [891, 890, 890], [993, 992, 991]], [[-1, -1, -1], [889, 890, 890], [995, 990, 991]]];
protected static var walkTile:int = 872;
protected static var helipad:Array = [[967, 968], [987, 988]];
protected static var entrances:Array = [[-1, -1, 952, 953], [-1, -1, 932, 933], [952, 932, -1, -1], [953, 933, -1, -1]];
protected static var corners:Array = [[[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]], [[871, 870, 870], [891, 950, 950], [891, 950, 950]], [[935, 893, 1014], [895, 897, 958], [993, 918, 1013]]], [[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]], [[869, 870, 870], [889, 951, 951], [889, 951, 951]], [[934, 892, 1014], [894, 896, 959], [995, 919, 1015]]], [[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]], [[911, 910, 910], [891, 930, 930], [891, 930, 930]], [[955, 913, 974], [915, 917, 938], [993, 898, 973]]], [[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]], [[909, 910, 910], [889, 931, 931], [889, 931, 931]], [[954, 912, 974], [914, 916, 939], [995, 899, 975]]]];
protected static var FLOOR_2:int = 2;
public function BuildingPolice(_arg1:Building=null, _arg2=null, _arg3:Direction=null, _arg4:Direction=null):void{
if (!Boot.skip_constructor){
super(_arg1);
this.placeRubble = true;
if (_arg2 == false){
this.placeRubble = false;
};
this.baseDir = _arg3;
this.legDir = _arg4;
};
}
override protected function placeMiddle(_arg1:Section, _arg2:int):void{
Util.fillAddTile(_arg1, centers[this.currentLevel]);
}
protected function placePolice(_arg1:Section, _arg2:Section, _arg3:Section):void{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:Array;
_local4 = Lib.directionToIndex(Util.opposite(this.legDir));
_local5 = Lib.directionToIndex(Util.opposite(this.baseDir));
_local6 = Util.rand((_arg2.dirSize(this.baseDir) + 1));
_local7 = Util.rand((_arg3.dirSize(this.legDir) + 1));
_local8 = this.placeLeg(_arg3, _local7, this.legDir);
_local9 = this.placeLeg(_arg2, _local6, this.baseDir);
_local10 = [GROUND, GROUND, GROUND, GROUND];
_local10[_local4] = _local8;
_local10[_local5] = _local9;
this.placePoliceSection(_arg1, FLOOR_2, _local10);
this.placeHelipad(_arg1);
}
protected function placeLeg(_arg1:Section, _arg2:int, _arg3:Direction):int{
var _local4:int;
var _local5:int;
var _local6:Section;
var _local7:Section;
var _local8:int;
var _local9:int;
var _local10:Array;
var _local11:Array;
_local4 = Lib.directionToIndex(_arg3);
_local5 = Lib.directionToIndex(Util.opposite(_arg3));
_local6 = _arg1.slice(_arg3, _arg2);
_local7 = _arg1.remainder(_arg3, _arg2);
_local8 = GROUND;
if (_arg2 < _arg1.dirSize(_arg3)){
_local8 = FLOOR_1;
_local10 = [GROUND, GROUND, GROUND, GROUND];
_local10[_local4] = FLOOR_2;
this.placePoliceSection(_local7, _local8, _local10);
};
if (_arg2 > 0){
_local11 = [GROUND, GROUND, GROUND, GROUND];
_local11[_local4] = FLOOR_2;
_local11[_local5] = _local8;
this.placePoliceSection(_local6, FLOOR_2, _local11);
};
_local9 = FLOOR_2;
if (_arg2 == 0){
_local9 = FLOOR_1;
};
return (_local9);
}
override public function place(_arg1:Section):void{
this.setDirections(_arg1);
this.divideAndPlace(_arg1);
this.building.attach();
}
protected function divideAndPlace(_arg1:Section):void{
var _local2:int;
var _local3:Section;
var _local4:Section;
var _local5:Section;
var _local6:Section;
var _local7:Direction;
var _local8:Direction;
_local2 = 2;
_local3 = _arg1.slice(this.baseDir, _local2);
_local4 = _arg1.remainder(this.baseDir, _local2);
_local5 = _local3.slice(this.legDir, _local2);
_local3 = _local3.remainder(this.legDir, _local2);
_local6 = _local4.slice(this.legDir, _local2);
_local4 = _local4.remainder(this.legDir, _local2);
this.placePolice(_local5, _local6, _local3);
_local7 = this.baseDir;
_local8 = this.legDir;
if (_local4.dirSize(this.legDir) > _local4.dirSize(this.baseDir)){
_local7 = this.legDir;
_local8 = this.baseDir;
};
this.placeOutside(_local4, _local7, _local8);
}
protected function placeHelipad(_arg1:Section):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
_local2 = 0;
while (_local2 < 2) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local3 = _temp1;
_local4 = 0;
while (_local4 < 2) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local5 = _temp2;
Util.addTile(new Point((_arg1.offset.x + _local5), (_arg1.offset.y + _local3)), helipad[_local3][_local5]);
};
};
}
protected function placeEntrance(_arg1:Section):void{
var _local2:int;
var _local3:int;
_local2 = Lib.directionToIndex(this.baseDir);
_local3 = Lib.directionToIndex(this.legDir);
Util.fillAddTile(_arg1, entrances[_local2][_local3]);
Util.fillBackground(_arg1, BackgroundType.ENTRANCE);
Util.fillUnblocked(_arg1);
this.building.addLot(_arg1);
this.building.setEntrance(_arg1.offset, Util.opposite(this.baseDir));
}
protected function placeOutside(_arg1:Section, _arg2:Direction, _arg3:Direction):void{
var _local4:Section;
var _local5:Section;
var _local6:Section;
_local4 = _arg1.slice(_arg2, 1);
_local5 = _arg1.remainder(_arg2, 1);
_local6 = _local4.slice(_arg3, 1);
_local4 = _local4.remainder(_arg3, 1);
this.placeWalk(_local4);
this.placeParking(_local5);
this.placeEntrance(_local6);
}
protected function placePoliceSection(_arg1:Section, _arg2:int, _arg3:Array):void{
var _local4:Direction;
var _local5:int;
this.currentEndings = _arg3;
this.currentLevel = _arg2;
this.setupMap(_arg1);
if ((((_arg1.dirSize(this.baseDir) > 1)) && ((_arg1.dirSize(this.legDir) > 1)))){
this.setupTiles(_arg1);
} else {
_local4 = this.legDir;
if (_arg1.dirSize(this.baseDir) == 1){
_local4 = this.baseDir;
};
if (this.getEnd(_local4) != GROUND){
_local4 = Util.opposite(_local4);
};
_local5 = PlaceRoot.lessCorner(_local4);
this.placeCorner(_arg1.corner(_local5), _local5, null, null, 0);
_local5 = PlaceRoot.greaterCorner(_local4);
this.placeCorner(_arg1.corner(_local5), _local5, null, null, 0);
this.placeEdge(_arg1.edge(_local4), Lib.directionToIndex(_local4), null, 0);
};
this.building.addLot(_arg1);
}
override protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
var _local5:int;
_local5 = this.currentEndings[_arg2];
Util.fillAddTile(_arg1, edges[_arg2][this.currentLevel][_local5]);
}
protected function getEnd(_arg1:Direction):int{
return (this.currentEndings[Lib.directionToIndex(_arg1)]);
}
protected function setDirections(_arg1:Section):void{
var _local2:Array;
var _local3:int;
var _local4:Array;
var _local5:Direction;
if ((((this.baseDir == null)) || ((this.legDir == null)))){
_local2 = [];
_local3 = 0;
_local4 = Lib.directions;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
if (_arg1.getStreet(_local5) != null){
_local2.push(_local5);
};
};
if (_local2.length == 0){
_local2 = Lib.directions.copy();
};
this.baseDir = Util.opposite(_local2[Util.rand(_local2.length)]);
this.legDir = Lib.rotateCW(this.baseDir);
if (Util.rand(2) == 0){
this.legDir = Lib.rotateCCW(this.baseDir);
};
};
}
protected function placeWalk(_arg1:Section):void{
Util.fillAddTile(_arg1, walkTile);
Util.fillBackground(_arg1, BackgroundType.STREET);
Util.fillUnblocked(_arg1);
}
protected function placeParking(_arg1:Section):void{
var _local2:Building;
if ((((_arg1.dirSize(this.baseDir) > 1)) && ((_arg1.dirSize(this.legDir) > 1)))){
_local2 = Util.createBuilding(_arg1, Util.PARKING_LOT);
Util.drawBuilding(_arg1, _local2, this.placeRubble);
} else {
this.placeWalk(_arg1);
};
}
override protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
var _local6:Direction;
var _local7:int;
var _local8:Direction;
var _local9:int;
var _local10:int;
_local6 = PlaceRoot.cornerToVert(_arg2);
_local7 = this.getEnd(_local6);
_local8 = PlaceRoot.cornerToHoriz(_arg2);
_local9 = this.getEnd(_local8);
_local10 = corners[_arg2][this.currentLevel][_local7][_local9];
Util.addTile(_arg1, _local10);
}
}
}//package mapgen
Section 78
//BuildingRoot (mapgen.BuildingRoot)
package mapgen {
import flash.*;
public class BuildingRoot extends PlaceRoot {
protected var building:Building;
public function BuildingRoot(_arg1:Building=null):void{
if (!Boot.skip_constructor){
this.building = _arg1;
};
}
protected function getColorCount():int{
return (1);
}
protected function placeCorner(_arg1:Point, _arg2:int, _arg3:Street, _arg4:Street, _arg5:int):void{
}
protected function placeEdge(_arg1:Section, _arg2:int, _arg3:Street, _arg4:int):void{
}
public function place(_arg1:Section):void{
this.setupMap(_arg1);
this.setupTiles(_arg1);
}
protected function setupTiles(_arg1:Section):void{
var _local2:int;
var _local3:Direction;
var _local4:Direction;
var _local5:Direction;
var _local6:Direction;
_local2 = Util.rand(this.getColorCount());
this.placeCorner(_arg1.northwest(), PlaceRoot.NORTHWEST, _arg1.north, _arg1.west, _local2);
this.placeCorner(_arg1.northeast(), PlaceRoot.NORTHEAST, _arg1.north, _arg1.east, _local2);
this.placeCorner(_arg1.southwest(), PlaceRoot.SOUTHWEST, _arg1.south, _arg1.west, _local2);
this.placeCorner(_arg1.southeast(), PlaceRoot.SOUTHEAST, _arg1.south, _arg1.east, _local2);
_local3 = Direction.NORTH;
_local4 = Direction.SOUTH;
_local5 = Direction.EAST;
_local6 = Direction.WEST;
this.placeEdge(_arg1.edge(_local3), PlaceRoot.NORTH, _arg1.north, _local2);
this.placeEdge(_arg1.edge(_local4), PlaceRoot.SOUTH, _arg1.south, _local2);
this.placeEdge(_arg1.edge(_local5), PlaceRoot.EAST, _arg1.east, _local2);
this.placeEdge(_arg1.edge(_local6), PlaceRoot.WEST, _arg1.west, _local2);
this.placeMiddle(_arg1.center(), _local2);
this.placeOverlay(_arg1.centerPoint());
}
protected function placeOverlay(_arg1:Point):void{
}
protected function placeMiddle(_arg1:Section, _arg2:int):void{
}
protected function setupMap(_arg1:Section):void{
var _local2:Point;
Util.fillBackground(_arg1, BackgroundType.BUILDING);
Util.fillBlocked(_arg1);
_local2 = this.building.getEntrance();
if (_local2 != null){
Util.setBackground(_local2, BackgroundType.ENTRANCE);
Util.changeBlocked(_local2, false);
};
}
}
}//package mapgen
Section 79
//CrossStreet (mapgen.CrossStreet)
package mapgen {
public class CrossStreet extends enum {
public static const __isenum:Boolean = true;
public static var ROAD:CrossStreet = new CrossStreet("ROAD", 4);
;
public static var END_PARKING_ENTRANCE:CrossStreet = new CrossStreet("END_PARKING_ENTRANCE", 1);
;
public static var BEGIN_PARKING_ENTRANCE:CrossStreet = new CrossStreet("BEGIN_PARKING_ENTRANCE", 0);
;
public static var ALLEY:CrossStreet = new CrossStreet("ALLEY", 3);
;
public static var NONE:CrossStreet = new CrossStreet("NONE", 5);
;
public static var __constructs__:Array = ["BEGIN_PARKING_ENTRANCE", "END_PARKING_ENTRANCE", "PARKING_ENTRANCE", "ALLEY", "ROAD", "NONE"];
public static var PARKING_ENTRANCE:CrossStreet = new CrossStreet("PARKING_ENTRANCE", 2);
;
public function CrossStreet(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
}
}//package mapgen
Section 80
//Division (mapgen.Division)
package mapgen {
import logic.*;
import flash.*;
public class Division {
protected var middle:Street;
protected var left:Section;
protected var minBuildingSize:int;
protected var right:Section;
public function Division(_arg1:int=0):void{
if (!Boot.skip_constructor){
this.left = null;
this.right = null;
this.middle = null;
this.minBuildingSize = _arg1;
};
}
public function getRight():Section{
return (this.right);
}
public function getBottom():Section{
return (this.right);
}
public function getMiddle():Street{
return (this.middle);
}
protected function randSplit(_arg1:int, _arg2:int, _arg3:int):int{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local4 = (((_arg2 - _arg1) - (2 * this.minBuildingSize)) - _arg3);
_local5 = 0;
if (Game.settings.getEasterEgg() == GameSettings.SALTLAKECITY){
_local5 = Math.floor((_local4 / 2));
} else {
_local6 = Math.floor((_local4 / _arg3));
_local7 = ((_local4 % _arg3) + _arg3);
_local8 = 0;
while (_local8 < _arg3) {
var _temp1 = _local8;
_local8 = (_local8 + 1);
_local9 = _temp1;
_local5 = (_local5 + Util.rand(_local6));
};
_local5 = (_local5 + Util.rand(_local7));
};
return (((_local5 + _arg1) + this.minBuildingSize));
}
public function split(_arg1:Section, _arg2:int):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
this.left = null;
this.right = null;
this.middle = null;
_local3 = (_arg2 + (this.minBuildingSize * 2));
_local4 = (_arg1.limit.x - _arg1.offset.x);
_local5 = (_arg1.limit.y - _arg1.offset.y);
if ((((((_local4 <= _local5)) && ((_local5 >= _local3)))) && (((((!((_arg1.west == null))) || (!((_arg1.east == null))))) || (((!((_arg1.north == null))) && (!((_arg1.south == null))))))))){
this.left = _arg1.clone();
this.right = _arg1.clone();
_local6 = this.randSplit(_arg1.offset.y, _arg1.limit.y, _arg2);
if (_arg2 > 0){
this.middle = new Street(new Point(_arg1.offset.x, _local6), _arg2, (_arg1.limit.x - _arg1.offset.x), false, _arg1.west, _arg1.east);
};
this.left.limit.y = _local6;
this.left.south = this.middle;
this.right.offset.y = (_local6 + _arg2);
this.right.north = this.middle;
} else {
if ((((_local4 >= _local3)) && (((((!((_arg1.north == null))) || (!((_arg1.south == null))))) || (((!((_arg1.east == null))) && (!((_arg1.west == null))))))))){
this.left = _arg1.clone();
this.right = _arg1.clone();
_local7 = this.randSplit(_arg1.offset.x, _arg1.limit.x, _arg2);
if (_arg2 > 0){
this.middle = new Street(new Point(_local7, _arg1.offset.y), _arg2, (_arg1.limit.y - _arg1.offset.y), true, _arg1.north, _arg1.south);
};
this.left.limit.x = _local7;
this.left.east = this.middle;
this.right.offset.x = (_local7 + _arg2);
this.right.west = this.middle;
};
};
}
public function getLeft():Section{
return (this.left);
}
public function getTop():Section{
return (this.left);
}
}
}//package mapgen
Section 81
//EditBox (mapgen.EditBox)
package mapgen {
import logic.*;
import flash.utils.*;
import ui.*;
import action.*;
import feature.*;
import flash.*;
public class EditBox {
protected var primary:Direction;
protected var street:Street;
protected var zombies:int;
protected var bridge:Bridge;
protected var resources:Array;
protected var isBroken:Boolean;
protected var building:Building;
protected var entrance:Point;
protected var isSpawnPoint:Boolean;
protected var type:EditType;
protected var lot:Section;
protected var isBridge:Boolean;
protected var color:int;
protected var isBreakable:Boolean;
protected var hasTwoEnds:Boolean;
protected var secondary:Direction;
protected var dynamitePos:Point;
public static var HOUSE:EditType = new EditType(38, 2, Text.editHouse);
public static var STREET:EditType = new EditType(9, 1, Text.editStreet);
public static var BRIDGE:EditType = new EditType(8, 3, Text.editBridge);
public static var PARKING_LOT:EditType = new EditType(3, 2, Text.editParking);
public static var STREET_H:EditType = new EditType(1, 1, Text.editStreetH);
public static var FRINGE:EditType = new EditType(32, 3, Text.editFringe);
public static var INTERSECTION:EditType = new EditType(11, 1, Text.editIntersection);
public static var APARTMENT:EditType = new EditType(36, 5, Text.editApartment);
public static var MALL:EditType = new EditType(39, 5, Text.editMall);
public static var STREET_V:EditType = new EditType(2, 1, Text.editStreetV);
public static var POLICE:EditType = new EditType(40, 3, Text.editPolice);
public static var CHURCH:EditType = new EditType(37, 3, Text.editChurch);
public static var UNKNOWN:EditType = new EditType(0, 1, Text.editUnknown);
public static var PLAZA:EditType = new EditType(5, 1, Text.editPlaza);
public static var BUILDING_END:int = POLICE.number;
public static var HOSPITAL:EditType = new EditType(35, 3, Text.editHospital);
public static var BUILDING_BEGIN:int = FRINGE.number;
public static var PLANT:EditType = new EditType(33, 3, Text.editPlant);
public static var CORNER:EditType = new EditType(10, 1, Text.editCorner);
public static var DEEP_WATER:EditType = new EditType(7, 1, Text.editDeepWater);
public static var HARDWARE:EditType = new EditType(34, 3, Text.editHardware);
public static var PARK:EditType = new EditType(4, 1, Text.editPark);
public static var SHALLOW_WATER:EditType = new EditType(6, 1, Text.editShallowWater);
public static var typeList:Array = [UNKNOWN, STREET_H, STREET_V, INTERSECTION, CORNER, FRINGE, PLANT, HARDWARE, HOSPITAL, APARTMENT, CHURCH, HOUSE, MALL, POLICE, PARKING_LOT, PARK, PLAZA, SHALLOW_WATER, DEEP_WATER, BRIDGE];
public function EditBox(_arg1:Point=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
this.color = (0x808080 | Util.rand(16777216));
this.type = UNKNOWN;
this.lot = new Section(_arg1, _arg2);
this.building = null;
this.bridge = null;
this.dynamitePos = null;
this.street = null;
this.zombies = 0;
this.resources = Lib.newResourceArray();
this.entrance = null;
this.primary = Util.randDirection();
this.secondary = Lib.rotateCW(this.primary);
this.isBroken = false;
this.checkEntrance();
};
}
public function addResources(_arg1:Resource, _arg2:int):void{
var _local3:int;
var _local4:int;
_local3 = Lib.resourceToIndex(_arg1);
_local4 = (Lib.truckLoad(_arg1) * _arg2);
this.resources[_local3] = (this.resources[_local3] + _local4);
if (this.building != null){
this.building.getSalvage().addResource(_arg1, _local4);
};
}
public function getLimit():Point{
return (this.lot.limit);
}
public function removeResources(_arg1:Resource, _arg2:int):void{
var _local3:int;
var _local4:int;
_local3 = Lib.resourceToIndex(_arg1);
_local4 = (Lib.truckLoad(_arg1) * _arg2);
this.resources[_local3] = (this.resources[_local3] - _local4);
if (this.resources[_local3] < 0){
this.resources[_local3] = 0;
};
if (this.building != null){
this.building.getSalvage().addResource(_arg1, -(_local4));
};
}
public function getOffset():Point{
return (this.lot.offset);
}
public function changeType(_arg1:EditType, _arg2=null):void{
var _local3:EditType;
_local3 = this.type;
this.type = _arg1;
if (_arg2 != true){
this.show();
this.refreshStreets();
};
}
public function isAlley():Boolean{
if (this.type == STREET_H){
return ((this.lot.dirSize(Direction.NORTH) == 1));
};
if (this.type == STREET_V){
return ((this.lot.dirSize(Direction.EAST) == 1));
};
return (false);
}
public function drawPixels():void{
if (!EditLoader.isLoading){
if (this.type == UNKNOWN){
Game.view.window.fillSolid(this.lot.offset.toPixel(), this.lot.limit.toPixel(), this.color);
} else {
Game.view.window.fillEdit(this.lot.offset, this.lot.limit);
};
};
}
public function remove():void{
Game.view.window.fillSolid(this.lot.offset.toPixel(), this.lot.limit.toPixel(), Color.editEmpty);
this.free();
this.clear();
Game.editor.clickSquare(null);
Game.editor.removeBoxFromList(this);
Game.view.window.refresh();
this.refreshStreets();
}
protected function addRefreshStreet(_arg1:int, _arg2:int, _arg3:List):void{
var _local4:Point;
var _local5:EditBox;
_local4 = new Point(_arg1, _arg2);
if (((!(Lib.outsideMap(_local4))) && (!((Game.map.getCell(_arg1, _arg2).edit == null))))){
_local5 = Game.map.getCell(_arg1, _arg2).edit;
_arg3.remove(_local5);
_arg3.add(_local5);
};
}
public function saveMap(_arg1:ByteArray):void{
_arg1.writeByte(this.type.number);
EditLoader.savePos(this.lot.offset.x, this.lot.offset.y, _arg1);
EditLoader.savePos(this.lot.getSize().x, this.lot.getSize().y, _arg1);
if (isBuilding(this.type)){
EditLoader.savePos(this.entrance.x, this.entrance.y, _arg1);
_arg1.writeByte(this.zombies);
EditLoader.saveResources(this.resources, _arg1);
};
if (this.type == BRIDGE){
EditLoader.saveBool(this.isBroken, _arg1);
};
EditLoader.saveDirections(this.type, this.primary, this.secondary, _arg1);
}
protected function doesIntersect(_arg1:EditType):Boolean{
var _local2:Boolean;
_local2 = false;
_local2 = ((_local2) || ((((this.type == STREET_H)) && ((_arg1 == STREET_V)))));
_local2 = ((_local2) || ((((this.type == STREET_V)) && ((_arg1 == STREET_H)))));
_local2 = ((_local2) || ((((((this.type == BRIDGE)) && ((_arg1 == STREET_H)))) && ((((this.primary == Direction.NORTH)) || ((this.primary == Direction.SOUTH)))))));
_local2 = ((_local2) || ((((((this.type == BRIDGE)) && ((_arg1 == STREET_V)))) && ((((this.primary == Direction.EAST)) || ((this.primary == Direction.WEST)))))));
return (_local2);
}
public function addZombies(_arg1:int):void{
this.zombies = (this.zombies + _arg1);
if (this.building != null){
this.building.addZombies(_arg1);
};
if (this.zombies < 0){
this.zombies = 0;
};
}
protected function getCrossStreet(_arg1:Point):CrossStreet{
var _local2:CrossStreet;
_local2 = CrossStreet.NONE;
if (this.type == STREET_V){
_local2 = CrossStreet.ROAD;
if (this.lot.getSize().x == 1){
_local2 = CrossStreet.ALLEY;
};
} else {
if (this.type == STREET_H){
_local2 = CrossStreet.ROAD;
if (this.lot.getSize().y == 1){
_local2 = CrossStreet.ALLEY;
};
} else {
if ((((this.type == BRIDGE)) && (this.bridge.getLot().edge(this.primary).contains(_arg1)))){
_local2 = CrossStreet.ROAD;
};
};
};
return (_local2);
}
public function getType():EditType{
return (this.type);
}
public function setEntrance(_arg1:Point, _arg2=null):void{
if (_arg1 != null){
this.entrance = _arg1.clone();
if (_arg2 != true){
this.show();
};
};
}
public function resize(_arg1:Point, _arg2:Point):void{
Game.view.window.fillSolid(this.lot.offset.toPixel(), this.lot.limit.toPixel(), Color.editEmpty);
this.free();
this.clear();
this.refreshStreets();
this.lot = new Section(_arg1, _arg2);
this.checkEntrance();
this.bind();
this.show();
this.refreshStreets();
}
public function bind():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = this.lot.offset.y;
_local2 = this.lot.limit.y;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = this.lot.offset.x;
_local5 = this.lot.limit.x;
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp2;
Game.map.getCell(_local6, _local3).edit = this;
};
};
}
protected function populateBuilding():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:Resource;
if (this.zombies > 0){
this.building.addZombies(this.zombies);
};
_local1 = 0;
_local2 = Option.resourceCount;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = Lib.indexToResource(_local3);
if (this.resources[_local3] > 0){
this.building.getSalvage().addResource(_local4, this.resources[_local3]);
};
};
}
public function reflect():void{
this.primary = Util.opposite(this.primary);
this.show();
this.refreshStreets();
}
protected function showObstacles():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:MapCell;
var _local8:*;
var _local9:Array;
var _local10:int;
_local1 = this.lot.offset.y;
_local2 = this.lot.limit.y;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = this.lot.offset.x;
_local5 = this.lot.limit.x;
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp2;
_local7 = Game.map.getCell(_local6, _local3);
_local8 = _local7.getObstacle();
if (_local8 != null){
_local9 = Tile.obstacles[_local8];
_local10 = Util.rand(_local9.length);
_local7.addTile(_local9[_local10]);
_local7.setBlocked();
if (_local8 == Tile.OBSTACLE_LAKE){
_local7.setBackground(BackgroundType.WATER);
};
};
};
};
}
protected function setIntersections(_arg1:Street):void{
var _local2:int;
var _local3:int;
var _local4:Boolean;
var _local5:Boolean;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local2 = 0;
_local3 = _arg1.getLength();
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local8 = _temp1;
this.addIntersection(_local8, -1, _arg1.addLess);
this.addIntersection(_local8, _arg1.getWidth(), _arg1.addGreater);
};
_local4 = true;
_local5 = true;
_local6 = 0;
_local7 = _arg1.getWidth();
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local9 = _temp2;
if (!this.isStreet(-1, _local9)){
_local4 = false;
};
if (!this.isStreet(_arg1.getLength(), _local9)){
_local5 = false;
};
};
if (_local4){
_arg1.setDrawLess();
};
if (_local5){
_arg1.setDrawGreater();
};
}
public function toggleBroken():void{
this.isBroken = !(this.isBroken);
this.show();
}
protected function addIntersection(_arg1:int, _arg2:int, _arg3:Function):void{
var _local4:Point;
var _local5:EditBox;
var _local6:CrossStreet;
_local4 = new Point((this.lot.offset.x + _arg2), (this.lot.offset.y + _arg1));
if (this.type == STREET_H){
_local4.x = (this.lot.offset.x + _arg1);
_local4.y = (this.lot.offset.y + _arg2);
};
if (((!(Lib.outsideMap(_local4))) && (!((Game.map.getCell(_local4.x, _local4.y).edit == null))))){
_local5 = Game.map.getCell(_local4.x, _local4.y).edit;
if (_local5.doesIntersect(this.type)){
_local6 = _local5.getCrossStreet(_local4);
_arg3(_local4, 1, _local6);
};
};
}
protected function clear():void{
Util.fillClearTiles(this.lot);
Util.fillBlocked(this.lot);
Util.fillBackground(this.lot, BackgroundType.STREET);
if (this.building != null){
Game.map.getBuildings().remove(this.building);
this.building.clearZombies();
this.building.detach();
this.building = null;
};
if (this.bridge != null){
Game.progress.clearBridge(this.bridge);
this.bridge = null;
};
if (this.dynamitePos != null){
Game.actions.push(new RemoveFeature(this.dynamitePos));
this.dynamitePos = null;
};
}
protected function findBridgeLot(_arg1:Direction, _arg2:Direction):Section{
var _local3:Section;
_local3 = this.lot.slice(this.primary, 8);
_local3 = _local3.slice(this.secondary, 6);
return (_local3);
}
protected function createBuilding(_arg1:int):void{
var _local2:Direction;
this.building = new Building(_arg1);
_local2 = Util.calculateDir(this.entrance, this.lot);
if (_arg1 != Util.POLICE_STATION){
this.building.addLot(this.lot);
this.building.setEntrance(this.entrance, _local2);
};
if (_arg1 != Util.PARKING_LOT){
Game.map.addBuilding(this.building);
if (_arg1 != Util.POLICE_STATION){
this.building.attach();
};
};
this.populateBuilding();
}
protected function isStreet(_arg1:int, _arg2:int):Boolean{
var _local3:Boolean;
var _local4:Point;
var _local5:EditBox;
_local3 = false;
_local4 = new Point((this.lot.offset.x + _arg2), (this.lot.offset.y + _arg1));
if (this.type == STREET_H){
_local4.x = (this.lot.offset.x + _arg1);
_local4.y = (this.lot.offset.y + _arg2);
};
if (((!(Lib.outsideMap(_local4))) && (!((Game.map.getCell(_local4.x, _local4.y).edit == null))))){
_local5 = Game.map.getCell(_local4.x, _local4.y).edit;
_local3 = (((((((this.type == STREET_H)) && ((_local5.type == STREET_V)))) || ((((this.type == STREET_V)) && ((_local5.type == STREET_H)))))) || ((_local5.type == INTERSECTION)));
};
return (_local3);
}
public function setDirections(_arg1:Direction, _arg2:Direction):void{
this.primary = _arg1;
this.secondary = _arg2;
}
public function canSetEntrance():Boolean{
return ((((((((this.type == FRINGE)) || ((this.type == PLANT)))) || ((this.type == HARDWARE)))) || ((this.type == HOSPITAL))));
}
public function rotate():void{
this.primary = Lib.rotateCW(this.primary);
this.secondary = Lib.rotateCW(this.secondary);
this.show();
this.refreshStreets();
}
protected function checkEntrance():void{
if (((!((this.entrance == null))) && (!(this.lot.contains(this.entrance))))){
this.entrance = null;
};
if (this.entrance == null){
this.entrance = Util.chooseEntrance(this.lot, Lib.randDirection(), Util.STANDARD);
};
}
public function getZombies():int{
return (this.zombies);
}
public function free():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = this.lot.offset.y;
_local2 = this.lot.limit.y;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = this.lot.offset.x;
_local5 = this.lot.limit.x;
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp2;
Game.map.getCell(_local6, _local3).edit = null;
};
};
}
public function getResources(_arg1:Resource):int{
var _local2:int;
_local2 = Lib.resourceToIndex(_arg1);
return (this.resources[_local2]);
}
public function refreshStreets():void{
var _local1:List;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:*;
var _local7:int;
var _local8:int;
var _local9:EditBox;
_local1 = new List();
_local2 = (this.lot.offset.x - 1);
_local3 = (this.lot.limit.x + 1);
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local7 = _temp1;
this.addRefreshStreet(_local7, (this.lot.offset.y - 1), _local1);
this.addRefreshStreet(_local7, this.lot.limit.y, _local1);
};
_local4 = this.lot.offset.y;
_local5 = this.lot.limit.y;
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local8 = _temp2;
this.addRefreshStreet((this.lot.offset.x - 1), _local8, _local1);
this.addRefreshStreet(this.lot.limit.x, _local8, _local1);
};
_local6 = _local1.iterator();
while (_local6.hasNext()) {
_local9 = _local6.next();
_local9.show();
};
}
public function setBroken(_arg1:Boolean, _arg2=null):void{
this.isBroken = _arg1;
if (_arg2 != true){
this.show();
};
}
public function show():void{
var _local1:PlaceParkingLot;
var _local2:Section;
var _local3:Section;
var _local4:List;
var _local5:PlaceTerrain;
var _local6:PlacePlaza;
var _local7:PlaceTerrain;
var _local8:PlaceTerrain;
var _local9:PlaceBridge;
var _local10:Section;
var _local11:Dynamite;
var _local12:PlaceIntersection;
var _local13:PlaceStreetCorner;
var _local14:BuildingFringe;
var _local15:BuildingPlant;
var _local16:BuildingHardware;
var _local17:BuildingHospital;
var _local18:BlockApartment;
var _local19:BlockChurch;
var _local20:BlockMall;
var _local21:BuildingPolice;
this.clear();
if (this.type == STREET_H){
this.street = new Street(this.lot.offset, (this.lot.limit.y - this.lot.offset.y), (this.lot.limit.x - this.lot.offset.x), false, null, null);
this.setIntersections(this.street);
this.street.draw(Game.map, false);
} else {
if (this.type == STREET_V){
this.street = new Street(this.lot.offset, (this.lot.limit.x - this.lot.offset.x), (this.lot.limit.y - this.lot.offset.y), true, null, null);
this.setIntersections(this.street);
this.street.draw(Game.map, false);
} else {
if (this.type == PARKING_LOT){
this.createBuilding(Util.PARKING_LOT);
_local1 = new PlaceParkingLot();
_local2 = this.lot.edge(this.primary);
_local3 = _local2.randSublot(new Point(1, 1));
_local4 = new List();
_local4.push(_local3.offset);
_local1.place(this.lot, _local4, false);
} else {
if (this.type == PARK){
_local5 = new PlaceTerrain();
_local5.place(this.lot, PlaceTerrain.park);
} else {
if (this.type == PLAZA){
_local6 = new PlacePlaza();
_local6.place(this.lot);
} else {
if (this.type == SHALLOW_WATER){
_local7 = new PlaceTerrain();
_local7.place(this.lot, PlaceTerrain.shallowWater);
} else {
if (this.type == DEEP_WATER){
_local8 = new PlaceTerrain();
_local8.place(this.lot, PlaceTerrain.deepWater);
} else {
if (this.type == BRIDGE){
_local9 = new PlaceBridge(this.primary, this.isBroken);
_local9.place(this.lot);
this.bridge = new Bridge(this.primary, this.lot, this.isBroken);
Game.progress.addBridge(this.bridge, this.isBroken);
if (!this.isBroken){
_local10 = this.lot.extend(this.primary, 1);
_local10 = _local10.slice(this.primary, 1);
this.dynamitePos = _local10.centerPoint();
if (Lib.outsideMap(this.dynamitePos)){
this.dynamitePos = null;
} else {
_local11 = new Dynamite(this.dynamitePos, Option.dynamiteWork, this.bridge);
};
};
} else {
if (this.type == INTERSECTION){
_local12 = new PlaceIntersection();
_local12.place(this.lot);
} else {
if (this.type == CORNER){
_local13 = new PlaceStreetCorner();
_local13.place(this.lot, this.primary);
} else {
if (this.type == FRINGE){
this.createBuilding(Util.STANDARD);
_local14 = new BuildingFringe(this.building);
_local14.place(this.lot);
} else {
if (this.type == PLANT){
this.createBuilding(Util.STANDARD);
_local15 = new BuildingPlant(this.building, true);
_local15.place(this.lot);
} else {
if (this.type == HARDWARE){
this.createBuilding(Util.HARDWARE_STORE);
_local16 = new BuildingHardware(this.building);
_local16.place(this.lot);
} else {
if (this.type == HOSPITAL){
this.createBuilding(Util.HOSPITAL);
_local17 = new BuildingHospital(this.building);
_local17.place(this.lot);
} else {
if (this.type == APARTMENT){
_local18 = new BlockApartment(this.primary, this.secondary, Util.opposite(this.secondary), false);
this.building = _local18.placeBuilding(this.lot);
this.populateBuilding();
} else {
if (this.type == CHURCH){
_local19 = new BlockChurch(false, this.primary);
this.building = _local19.placeEditBox(this.lot);
this.populateBuilding();
} else {
if (this.type == HOUSE){
this.building = BlockHouses.placeEditBox(this.lot, this.primary, this.secondary);
this.populateBuilding();
} else {
if (this.type == MALL){
_local20 = new BlockMall(false, this.primary, this.secondary);
this.building = _local20.placeBuilding(this.lot);
this.populateBuilding();
} else {
if (this.type == POLICE){
this.createBuilding(Util.POLICE_STATION);
_local21 = new BuildingPolice(this.building, false, this.primary, this.secondary);
_local21.place(this.lot);
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
this.showObstacles();
this.drawPixels();
if (!EditLoader.isLoading){
Game.sprites.recalculateFov();
};
}
public static function hasDirection(_arg1:EditType):Boolean{
return ((((((((((((((((((_arg1 == BRIDGE)) || ((_arg1 == PARKING_LOT)))) || ((_arg1 == CHURCH)))) || ((_arg1 == HOUSE)))) || ((_arg1 == APARTMENT)))) || ((_arg1 == MALL)))) || ((_arg1 == POLICE)))) || ((_arg1 == STREET)))) || ((_arg1 == CORNER))));
}
public static function intToType(_arg1:int):EditType{
var _local2:EditType;
var _local3:int;
var _local4:Array;
var _local5:EditType;
_local2 = null;
_local3 = 0;
_local4 = typeList;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
if (_arg1 == _local5.number){
_local2 = _local5;
break;
};
};
return (_local2);
}
public static function isBuilding(_arg1:EditType):Boolean{
return ((((_arg1.number >= BUILDING_BEGIN)) && ((_arg1.number <= BUILDING_END))));
}
}
}//package mapgen
Section 82
//EditChange (mapgen.EditChange)
package mapgen {
public class EditChange {
public static function removeLevel(_arg1:Point):void{
var _local2:Tower;
if (canRemoveLevel(_arg1)){
_local2 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
_local2.downgrade();
};
}
public static function addLevel(_arg1:Point):void{
var _local2:Tower;
if (canAddLevel(_arg1)){
_local2 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
_local2.upgradeLevel();
};
}
public static function remove(_arg1:Point):void{
var _local2:MapCell;
if (canRemove(_arg1)){
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
if (_local2.hasTower()){
_local2.destroyTower();
} else {
if (_local2.hasRubble()){
_local2.clearRubble();
} else {
if (_local2.hasObstacle()){
_local2.removeObstacle();
};
};
};
};
}
public static function changeObstacle(_arg1:Point):void{
var _local2:MapCell;
var _local3:*;
var _local4:int;
if (canChangeObstacle(_arg1)){
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
_local3 = _local2.getObstacle();
_local4 = ((_local3 + 1) % Tile.obstacles.length);
_local2.removeObstacle();
_local2.addObstacle(_local4);
};
}
public static function addZombie(_arg1:Point, _arg2:int):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:MapCell;
var _local7:Zombie;
if (canAddZombie(_arg1)){
_local3 = Math.round(Math.abs(_arg2));
_local4 = 0;
while (_local4 < _local3) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local5 = _temp1;
if (_arg2 > 0){
Util.forcePlaceZombie(_arg1.x, _arg1.y);
} else {
_local6 = Game.map.getCell(_arg1.x, _arg1.y);
_local7 = _local6.getZombie();
if (_local7 != null){
_local6.removeZombie(_local7);
_local7.cleanup();
};
};
};
};
}
public static function canCreateRubble(_arg1:Point):Boolean{
var _local2:MapCell;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
return (((((((!(_local2.isBlocked())) && (!(_local2.hasTower())))) && (!(_local2.hasRubble())))) && (!((_local2.getBackground() == BackgroundType.ENTRANCE)))));
}
public static function addResourceRubble(_arg1:Point, _arg2:Resource, _arg3:int, _arg4=null):void{
var _local5:MapCell;
_local5 = Game.map.getCell(_arg1.x, _arg1.y);
if (_local5.hasRubble()){
_local5.addRubble(_arg2, (_arg3 * Lib.truckLoad(_arg2)), _arg4);
};
}
public static function createTower(_arg1:Point, _arg2:int, _arg3=null, _arg4:Array=null, _arg5:Array=null):void{
var _local6:MapCell;
var _local7:Tower;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:Resource;
var _local12:int;
var _local13:int;
if (canCreateTower(_arg1, _arg2)){
_local6 = Game.map.getCell(_arg1.x, _arg1.y);
_local6.createTower(_arg2);
_local7 = _local6.getTower();
while (((((!((_arg3 == null))) && ((_local7.getLevel() < _arg3)))) && (_local7.canUpgrade()))) {
_local7.upgradeLevel();
};
if (((!((_arg4 == null))) && (!((_arg5 == null))))){
_local8 = 0;
_local9 = Option.resourceCount;
while (_local8 < _local9) {
var _temp1 = _local8;
_local8 = (_local8 + 1);
_local10 = _temp1;
_local11 = Lib.indexToResource(_local10);
addResourceTower(_arg1, _local11, _arg4[_local10]);
_local12 = _local7.countReserve(_local11);
_local13 = (Lib.truckLoad(_local11) * _arg5[_local10]);
_local7.addReserve(new ResourceCount(_local11, (_local13 - _local12)));
};
};
};
}
public static function addResource(_arg1:Point, _arg2:Resource, _arg3:int):void{
if (canAddResource(_arg1)){
if (Game.map.getCell(_arg1.x, _arg1.y).hasTower()){
addResourceTower(_arg1, _arg2, _arg3);
} else {
addResourceRubble(_arg1, _arg2, _arg3);
};
};
}
public static function canRemoveLevel(_arg1:Point):Boolean{
var _local2:Tower;
_local2 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
return (((!((_local2 == null))) && (_local2.canDowngrade())));
}
public static function addObstacle(_arg1:Point, _arg2=null):void{
var _local3:int;
var _local4:MapCell;
_local3 = Tile.OBSTACLE_START;
if (_arg2 != null){
_local3 = _arg2;
};
if (canAddObstacle(_arg1)){
_local4 = Game.map.getCell(_arg1.x, _arg1.y);
_local4.addObstacle(_local3);
};
}
public static function canAddLevel(_arg1:Point):Boolean{
var _local2:Tower;
_local2 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
return (((!((_local2 == null))) && (_local2.canUpgrade())));
}
public static function canRemove(_arg1:Point):Boolean{
var _local2:MapCell;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
return (((((((_local2.hasRubble()) && (!((_local2.getBackground() == BackgroundType.ENTRANCE))))) || (_local2.hasTower()))) || (_local2.hasObstacle())));
}
public static function canChangeObstacle(_arg1:Point):Boolean{
var _local2:MapCell;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
return (_local2.hasObstacle());
}
public static function canAddZombie(_arg1:Point):Boolean{
var _local2:MapCell;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
return (((((!(_local2.isBlocked())) && (!(_local2.hasTower())))) && (!((_local2.getBackground() == BackgroundType.ENTRANCE)))));
}
public static function createRubble(_arg1:Point, _arg2:Array=null):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
if (canCreateRubble(_arg1)){
_local3 = Util.randWeightedIndex(Parameter.rubbleWeight);
Game.map.getCell(_arg1.x, _arg1.y).addRubble(Resource.AMMO, 0);
if (_arg2 != null){
_local4 = 0;
_local5 = _arg2.length;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
addResourceRubble(_arg1, Lib.indexToResource(_local6), _arg2[_local6], _local3);
};
};
};
}
public static function canAddObstacle(_arg1:Point):Boolean{
var _local2:MapCell;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
return (((((((((((((!(_local2.isBlocked())) && (!(_local2.hasRubble())))) && (!(_local2.hasObstacle())))) && (!(_local2.hasZombies())))) && (!(_local2.hasTower())))) && (!((_local2.getBackground() == BackgroundType.ENTRANCE))))) && (!((_local2.getBackground() == BackgroundType.BUILDING)))));
}
public static function addResourceTower(_arg1:Point, _arg2:Resource, _arg3:int):void{
var _local4:Tower;
var _local5:ResourceCount;
_local4 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
if (_local4 != null){
_local5 = new ResourceCount(_arg2, (_arg3 * Lib.truckLoad(_arg2)));
_local4.giveResource(_local5);
};
}
public static function canCreateTower(_arg1:Point, _arg2:int):Boolean{
return (Tower.canPlace(_arg2, _arg1.x, _arg1.y, true));
}
public static function canAddResource(_arg1:Point):Boolean{
var _local2:MapCell;
var _local3:Boolean;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
_local3 = ((_local2.hasRubble()) && (!((_local2.getBackground() == BackgroundType.ENTRANCE))));
return (((_local3) || (_local2.hasTower())));
}
}
}//package mapgen
Section 83
//EditLoader (mapgen.EditLoader)
package mapgen {
import flash.utils.*;
public class EditLoader {
public static var SUPPLY_LINE:int = 131;
public static var OBSTACLE:int = 132;
public static var ZOMBIE:int = 128;
public static var TOWER:int = 130;
public static var isLoading:Boolean = false;
public static var RUBBLE:int = 129;
protected static function loadRubble(_arg1:ByteArray):void{
var _local2:Point;
var _local3:Array;
_local2 = loadPos(_arg1);
_local3 = loadResources(_arg1);
if (!Lib.outsideMap(_local2)){
EditChange.createRubble(_local2, _local3);
};
}
protected static function loadTower(_arg1:ByteArray):void{
var _local2:Point;
var _local3:uint;
var _local4:uint;
var _local5:Array;
var _local6:Array;
_local2 = loadPos(_arg1);
_local3 = _arg1.readUnsignedByte();
_local4 = _arg1.readUnsignedByte();
_local5 = loadResources(_arg1);
_local6 = loadResources(_arg1);
if (!Lib.outsideMap(_local2)){
EditChange.createTower(_local2, _local3, _local4, _local5, _local6);
};
}
protected static function loadSupplyLine(_arg1:ByteArray):void{
var _local2:Point;
var _local3:Point;
var _local4:Tower;
var _local5:Tower;
_local2 = loadPos(_arg1);
_local3 = loadPos(_arg1);
if (((!(Lib.outsideMap(_local2))) && (!(Lib.outsideMap(_local3))))){
_local4 = Game.map.getCell(_local2.x, _local2.y).getTower();
_local5 = Game.map.getCell(_local3.x, _local3.y).getTower();
if (((!((_local4 == null))) && (!((_local5 == null))))){
_local4.addTradeLink(_local3);
};
};
}
protected static function loadPos(_arg1:ByteArray, _arg2=null):Point{
var _local3:uint;
var _local4:uint;
_local3 = _arg1.readUnsignedByte();
_local4 = _arg1.readUnsignedByte();
if (((!(Game.settings.doesHaveEdges())) && (!((_arg2 == true))))){
_local3 = (_local3 + 5);
_local4 = (_local4 + 5);
};
return (new Point(_local3, _local4));
}
protected static function drawPixels(_arg1:List):void{
var _local2:*;
var _local3:EditBox;
if (Game.settings.isEditor()){
_local2 = _arg1.iterator();
while (_local2.hasNext()) {
_local3 = _local2.next();
_local3.drawPixels();
};
} else {
Game.view.window.fillBitmap();
};
}
protected static function loadObstacle(_arg1:ByteArray):void{
var _local2:Point;
var _local3:uint;
_local2 = loadPos(_arg1);
_local3 = _arg1.readUnsignedByte();
if (!Lib.outsideMap(_local2)){
EditChange.addObstacle(_local2, _local3);
};
}
public static function loadMap(_arg1:ByteArray, _arg2:List):void{
var _local3:Section;
var _local4:Boolean;
var _local5:uint;
var _local6:EditType;
var _local7:*;
var _local8:EditBox;
var _local9:*;
var _local10:EditBox;
EditLoader.isLoading = true;
_local3 = new Section(new Point(Editor.edgeCount, Editor.edgeCount), new Point((Game.map.size().x - Editor.edgeCount), (Game.map.size().y - Editor.edgeCount)));
Util.fillBlocked(_local3);
Util.fillBackground(_local3, BackgroundType.STREET);
_local4 = false;
while (_arg1.bytesAvailable > 0) {
_local5 = _arg1.readUnsignedByte();
_local6 = EditBox.intToType(_local5);
if (((!(_local4)) && ((((((((((_local5 == ZOMBIE)) || ((_local5 == RUBBLE)))) || ((_local5 == TOWER)))) || ((_local5 == SUPPLY_LINE)))) || ((_local5 == OBSTACLE)))))){
_local7 = _arg2.iterator();
while (_local7.hasNext()) {
_local8 = _local7.next();
_local8.show();
};
_local4 = true;
};
if (_local5 == ZOMBIE){
loadZombie(_arg1);
} else {
if (_local5 == RUBBLE){
loadRubble(_arg1);
} else {
if (_local5 == TOWER){
loadTower(_arg1);
} else {
if (_local5 == SUPPLY_LINE){
loadSupplyLine(_arg1);
} else {
if (_local5 == OBSTACLE){
loadObstacle(_arg1);
} else {
if ((((((((((((((((((((((((_local6 == EditBox.UNKNOWN)) || ((_local6 == EditBox.STREET_H)))) || ((_local6 == EditBox.STREET_V)))) || ((_local6 == EditBox.PARKING_LOT)))) || ((_local6 == EditBox.PARK)))) || ((_local6 == EditBox.PLAZA)))) || ((_local6 == EditBox.SHALLOW_WATER)))) || ((_local6 == EditBox.DEEP_WATER)))) || ((_local6 == EditBox.BRIDGE)))) || ((_local6 == EditBox.STREET)))) || ((_local6 == EditBox.CORNER)))) || ((_local6 == EditBox.INTERSECTION)))){
loadSimple(_local6, _arg1, _arg2);
} else {
if (EditBox.isBuilding(_local6)){
loadStandardBuilding(_local6, _arg1, _arg2);
};
};
};
};
};
};
};
};
if (!_local4){
_local9 = _arg2.iterator();
while (_local9.hasNext()) {
_local10 = _local9.next();
_local10.show();
};
};
sanityCheck();
EditLoader.isLoading = false;
drawPixels(_arg2);
Game.sprites.recalculateFov();
}
public static function savePos(_arg1:int, _arg2:int, _arg3:ByteArray):void{
_arg3.writeByte(_arg1);
_arg3.writeByte(_arg2);
}
protected static function addSaveLink(_arg1:Route, _arg2:Array, _arg3:Array):void{
var _local4:Boolean;
var _local5:int;
var _local6:int;
var _local7:int;
_local4 = false;
_local5 = 0;
_local6 = _arg2.length;
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp1;
if (((((Point.isEqual(_arg1.source, _arg2[_local7])) && (Point.isEqual(_arg1.dest, _arg3[_local7])))) || (((Point.isEqual(_arg1.source, _arg3[_local7])) && (Point.isEqual(_arg1.dest, _arg2[_local7])))))){
_local4 = true;
break;
};
};
if (!_local4){
_arg2.push(_arg1.source);
_arg3.push(_arg1.dest);
};
}
protected static function loadDirections(_arg1:EditType, _arg2:EditBox, _arg3:ByteArray):void{
var _local4:uint;
var _local5:int;
var _local6:int;
if (EditBox.hasDirection(_arg1)){
_local4 = _arg3.readUnsignedByte();
_local5 = (_local4 & 3);
_local6 = ((_local4 >> 2) & 3);
_arg2.setDirections(Lib.indexToDirection(_local5), Lib.indexToDirection(_local6));
};
}
protected static function cleanupMapSquare(_arg1:Point):void{
var _local2:MapCell;
var _local3:Zombie;
var _local4:Building;
var _local5:Salvage;
var _local6:int;
var _local7:Array;
var _local8:Resource;
var _local9:int;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
if (_local2.hasTower()){
_local2.destroyTower();
};
if (_local2.hasRubble()){
_local2.clearRubble();
};
while (_local2.hasZombies()) {
_local3 = _local2.getZombie();
if (_local3 != null){
_local2.removeZombie(_local3);
_local3.cleanup();
};
};
if (_local2.getBackground() == BackgroundType.ENTRANCE){
_local4 = _local2.getBuilding();
_local4.clearZombies();
_local5 = _local4.getSalvage();
_local6 = 0;
_local7 = Lib.resource;
while (_local6 < _local7.length) {
_local8 = _local7[_local6];
_local6++;
_local9 = _local5.getResourceCount(_local8);
_local5.addResource(_local8, -(_local9));
};
};
_local2.setBlocked();
}
protected static function loadStandardBuilding(_arg1:EditType, _arg2:ByteArray, _arg3:List):void{
var _local4:Section;
var _local5:Point;
var _local6:uint;
var _local7:Array;
var _local8:EditBox;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:Resource;
_local4 = loadSection(_arg2);
_local5 = loadPos(_arg2);
_local6 = _arg2.readUnsignedByte();
_local7 = loadResources(_arg2);
if (((((!(Lib.outsideMap(_local4.offset))) && ((_local4.limit.x <= Game.map.sizeX())))) && ((_local4.limit.y <= Game.map.sizeY())))){
_local8 = new EditBox(_local4.offset, _local4.limit);
_arg3.add(_local8);
_local8.changeType(_arg1, true);
_local8.bind();
_local8.setEntrance(_local5, true);
_local8.addZombies(_local6);
_local9 = 0;
_local10 = _local7.length;
while (_local9 < _local10) {
var _temp1 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp1;
if (_local7[_local11] > 0){
_local12 = Lib.indexToResource(_local11);
_local8.addResources(_local12, _local7[_local11]);
};
};
loadDirections(_arg1, _local8, _arg2);
} else {
if (EditBox.hasDirection(_arg1)){
_arg2.readUnsignedByte();
};
};
}
public static function saveMap(_arg1:ByteArray, _arg2:List):void{
var _local3:*;
var _local4:Array;
var _local5:Array;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:EditBox;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:MapCell;
var _local16:int;
_local3 = _arg2.iterator();
while (_local3.hasNext()) {
_local10 = _local3.next();
_local10.saveMap(_arg1);
};
_local4 = [];
_local5 = [];
_local6 = 0;
_local7 = Game.map.sizeY();
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local11 = _temp1;
_local12 = 0;
_local13 = Game.map.sizeX();
while (_local12 < _local13) {
var _temp2 = _local12;
_local12 = (_local12 + 1);
_local14 = _temp2;
_local15 = Game.map.getCell(_local14, _local11);
saveCell(_local14, _local11, _local15, _arg1, _local4, _local5);
};
};
_local8 = 0;
_local9 = _local4.length;
while (_local8 < _local9) {
var _temp3 = _local8;
_local8 = (_local8 + 1);
_local16 = _temp3;
_arg1.writeByte(SUPPLY_LINE);
savePos(_local4[_local16].x, _local4[_local16].y, _arg1);
savePos(_local5[_local16].x, _local5[_local16].y, _arg1);
};
}
protected static function sanityCheck():void{
var _local1:Section;
var _local2:int;
var _local3:Array;
var _local4:Point;
var _local5:Direction;
var _local6:Section;
var _local7:PathFinder;
_local1 = new Section(new Point(0, 0), Game.map.size().clone());
_local2 = 0;
_local3 = Lib.directions;
while (_local2 < _local3.length) {
_local5 = _local3[_local2];
_local2++;
_local6 = _local1.slice(_local5, 1);
Util.fillBlocked(_local6);
};
_local4 = Game.progress.getRandomDepot();
if (_local4 != null){
_local7 = new PathFinder(_local4, null, true, null);
_local7.setupVisit();
_local7.startCalculation();
while (!(_local7.isDone())) {
_local7.step(100);
};
cleanupMap(_local7);
};
}
protected static function checkRubble(_arg1:Point):void{
var _local2:MapCell;
var _local3:Boolean;
var _local4:int;
var _local5:Array;
var _local6:int;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
if (_local2.hasRubble()){
_local3 = true;
_local4 = 0;
_local5 = _local2.getAllRubbleCounts();
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
if (_local6 != 0){
_local3 = false;
break;
};
};
if (_local3){
_local2.clearRubble();
};
};
}
protected static function cleanupMap(_arg1:PathFinder):void{
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local2 = new Point(0, 0);
_local3 = 0;
_local4 = Game.map.sizeY();
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = 0;
_local7 = Game.map.sizeX();
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
_local2.x = _local8;
_local2.y = _local5;
if (!_arg1.isVisited(_local2)){
cleanupMapSquare(_local2);
};
checkRubble(_local2);
};
};
}
public static function saveResources(_arg1:Array, _arg2:ByteArray):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Resource;
var _local7:int;
_local3 = 0;
_local4 = _arg1.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = Lib.indexToResource(_local5);
if (_local6 != Resource.FOOD){
_local7 = Math.floor((_arg1[_local5] / Lib.truckLoad(_local6)));
_arg2.writeByte(_local7);
};
};
}
protected static function loadZombie(_arg1:ByteArray):void{
var _local2:Point;
var _local3:uint;
_local2 = loadPos(_arg1);
_local3 = _arg1.readUnsignedByte();
if (!Lib.outsideMap(_local2)){
EditChange.addZombie(_local2, _local3);
};
}
protected static function loadSection(_arg1:ByteArray):Section{
var _local2:Point;
var _local3:Point;
_local2 = loadPos(_arg1);
_local3 = _local2.clone();
_local3.plusEquals(loadPos(_arg1, true));
return (new Section(_local2, _local3));
}
protected static function loadBool(_arg1:ByteArray):Boolean{
var _local2:uint;
_local2 = _arg1.readUnsignedByte();
if (_local2 == 0){
return (false);
};
return (true);
}
public static function saveDirections(_arg1:EditType, _arg2:Direction, _arg3:Direction, _arg4:ByteArray):void{
var _local5:int;
var _local6:int;
var _local7:int;
if (EditBox.hasDirection(_arg1)){
_local5 = Lib.directionToIndex(_arg2);
_local6 = Lib.directionToIndex(_arg3);
_local7 = (_local5 & 3);
_local7 = (_local7 | ((_local6 & 3) << 2));
_arg4.writeByte(_local7);
};
}
public static function saveBool(_arg1:Boolean, _arg2:ByteArray):void{
if (_arg1){
_arg2.writeByte(1);
} else {
_arg2.writeByte(0);
};
}
protected static function loadResources(_arg1:ByteArray):Array{
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:int;
_local2 = Lib.newResourceArray();
_local3 = 0;
_local4 = _local2.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
if (_local5 != Lib.resourceToIndex(Resource.FOOD)){
_local2[_local5] = _arg1.readUnsignedByte();
};
};
return (_local2);
}
protected static function loadSimple(_arg1:EditType, _arg2:ByteArray, _arg3:List):void{
var _local4:Section;
var _local5:EditBox;
_local4 = loadSection(_arg2);
if (((((!(Lib.outsideMap(_local4.offset))) && ((_local4.limit.x <= Game.map.sizeX())))) && ((_local4.limit.y <= Game.map.sizeY())))){
_local5 = new EditBox(_local4.offset, _local4.limit);
_arg3.add(_local5);
_local5.bind();
_local5.changeType(_arg1, true);
if (_arg1 == EditBox.BRIDGE){
_local5.setBroken(loadBool(_arg2), true);
};
loadDirections(_arg1, _local5, _arg2);
} else {
if (_arg1 == EditBox.BRIDGE){
loadBool(_arg2);
};
if (EditBox.hasDirection(_arg1)){
_arg2.readUnsignedByte();
};
};
}
protected static function saveCell(_arg1:int, _arg2:int, _arg3:MapCell, _arg4:ByteArray, _arg5:Array, _arg6:Array):void{
var _local7:Tower;
var _local8:List;
var _local9:*;
var _local10:Route;
if (_arg3.hasZombies()){
_arg4.writeByte(ZOMBIE);
savePos(_arg1, _arg2, _arg4);
_arg4.writeByte(_arg3.zombieCount());
};
if (((_arg3.hasRubble()) && (!((_arg3.getBackground() == BackgroundType.ENTRANCE))))){
_arg4.writeByte(RUBBLE);
savePos(_arg1, _arg2, _arg4);
saveResources(_arg3.getAllRubbleCounts(), _arg4);
};
if (_arg3.hasTower()){
_local7 = _arg3.getTower();
_arg4.writeByte(TOWER);
savePos(_arg1, _arg2, _arg4);
_arg4.writeByte(_local7.getType());
_arg4.writeByte(_local7.getLevel());
_local7.saveEditResources(_arg4);
_local8 = _local7.getTradeLinks();
_local9 = _local8.iterator();
while (_local9.hasNext()) {
_local10 = _local9.next();
addSaveLink(_local10, _arg5, _arg6);
};
};
if (_arg3.hasObstacle()){
_arg4.writeByte(OBSTACLE);
savePos(_arg1, _arg2, _arg4);
_arg4.writeByte(_arg3.getObstacle());
};
}
}
}//package mapgen
Section 84
//EditMenu (mapgen.EditMenu)
package mapgen {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.text.*;
import flash.*;
public class EditMenu {
protected var posClip:EditPosClip;
protected var sprites:Array;
protected var clip:EditMenuClip;
protected var selectedSquare:Point;
protected var buttons:ButtonList;
protected var selected:EditBox;
public function EditMenu(_arg1:DisplayObjectContainer=null):void{
var _local2:int;
var _local3:Array;
var _local4:TextFormat;
var _local5:*;
super();
if (!Boot.skip_constructor){
this.selected = null;
this.selectedSquare = null;
this.posClip = new EditPosClip();
_arg1.addChild(this.posClip);
this.clip = new EditMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
_local2 = 0;
_local3 = [this.clip.zombies, this.clip.ammo, this.clip.boards, this.clip.survivors, this.clip.setEntranceLabel, this.clip.deleteBoxLabel, this.clip.addRubbleLabel, this.clip.addObstacleLabel, this.clip.rotateLabel, this.clip.reflectLabel, this.clip.brokenLabel, this.clip.changeTypeLabel];
while (_local2 < _local3.length) {
_local5 = _local3[_local2];
_local2++;
_local5.mouseEnabled = false;
};
this.clip.type.focusEnabled = false;
this.clip.type.addEventListener(Event.CHANGE, this.changeType);
_local4 = new TextFormat();
_local4.size = FontSize.comboListTitle;
this.clip.type.textField.setStyle("textFormat", _local4);
this.clip.type.dropdown.setStyle("cellRenderer", CustomCellRenderer);
this.initSprites();
this.buttons = new ButtonList(this.click, null, [this.clip.zombiesDown, this.clip.zombiesUp, this.clip.ammoDown, this.clip.ammoUp, this.clip.boardsDown, this.clip.boardsUp, this.clip.survivorsDown, this.clip.survivorsUp, this.clip.setEntrance, this.clip.deleteBox, this.clip.addRubble, this.clip.addObstacle, this.clip.rotate, this.clip.reflect, this.clip.levelsDown, this.clip.levelsUp, this.clip.broken, this.clip.changeType]);
};
}
protected function removeResources(_arg1:Resource):void{
if (this.selectedSquare == null){
this.selected.removeResources(_arg1, 1);
} else {
EditChange.addResource(this.selectedSquare, _arg1, -1);
};
}
protected function addResources(_arg1:Resource):void{
if (this.selectedSquare == null){
this.selected.addResources(_arg1, 1);
} else {
EditChange.addResource(this.selectedSquare, _arg1, 1);
};
}
protected function updateSquare():void{
var _local1:int;
var _local2:int;
var _local3:MapCell;
var _local4:int;
var _local5:int;
var _local6:Array;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:*;
var _local11:int;
if (this.selectedSquare != null){
_local1 = this.selectedSquare.x;
_local2 = this.selectedSquare.y;
_local3 = Game.map.getCell(_local1, _local2);
if (EditChange.canAddZombie(this.selectedSquare)){
this.clip.zombiesUp.visible = true;
this.clip.zombiesDown.visible = true;
this.clip.zombies.visible = true;
_local4 = _local3.zombieCount();
this.clip.zombies.text = Text.zombiesEdit(Std.string(_local4));
};
if (EditChange.canAddResource(this.selectedSquare)){
_local5 = 0;
_local6 = [this.clip.ammoUp, this.clip.ammoDown, this.clip.ammo, this.clip.boardsUp, this.clip.boardsDown, this.clip.boards, this.clip.survivorsUp, this.clip.survivorsDown, this.clip.survivors];
while (_local5 < _local6.length) {
_local10 = _local6[_local5];
_local5++;
_local10.visible = true;
};
_local7 = _local3.getRubbleCount(Resource.AMMO);
_local8 = _local3.getRubbleCount(Resource.BOARDS);
_local9 = _local3.getRubbleCount(Resource.SURVIVORS);
if (_local3.hasTower()){
_local7 = _local3.getTower().countResource(Resource.AMMO);
_local8 = _local3.getTower().countResource(Resource.BOARDS);
_local9 = _local3.getTower().countResource(Resource.SURVIVORS);
};
this.clip.ammo.text = Text.ammoEdit(Std.string(_local7));
this.clip.boards.text = Text.boardsEdit(Std.string(_local8));
this.clip.survivors.text = Text.survivorsEdit(Std.string(_local9));
};
if (((EditChange.canAddLevel(this.selectedSquare)) || (EditChange.canRemoveLevel(this.selectedSquare)))){
this.clip.levels.visible = true;
_local11 = _local3.getTower().getLevel();
this.clip.levels.text = Text.levelsEdit(Std.string(_local11));
};
if (EditChange.canRemoveLevel(this.selectedSquare)){
this.clip.levelsDown.visible = true;
};
if (EditChange.canAddLevel(this.selectedSquare)){
this.clip.levelsUp.visible = true;
};
if (EditChange.canCreateRubble(this.selectedSquare)){
this.clip.addRubble.visible = true;
this.clip.addRubbleLabel.visible = true;
};
if (EditChange.canAddObstacle(this.selectedSquare)){
this.clip.addObstacle.visible = true;
this.clip.addObstacleLabel.visible = true;
};
if (EditChange.canChangeObstacle(this.selectedSquare)){
this.clip.changeType.visible = true;
this.clip.changeTypeLabel.visible = true;
};
if (EditChange.canRemove(this.selectedSquare)){
this.clip.deleteBox.visible = true;
this.clip.deleteBoxLabel.visible = true;
};
};
}
public function update(_arg1:EditBox, _arg2:Point):void{
var _local3:int;
var _local4:Array;
var _local5:DisplayObject;
this.selected = _arg1;
this.selectedSquare = _arg2;
if (this.selected == null){
this.clip.visible = false;
} else {
this.clip.visible = true;
_local3 = 0;
_local4 = this.sprites;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local5.visible = false;
};
this.updateType();
this.updateBuilding();
this.updateDirections();
if (this.selectedSquare == null){
this.clip.deleteBox.visible = true;
this.clip.deleteBoxLabel.visible = true;
if (this.selected.getType() == EditBox.BRIDGE){
this.clip.broken.visible = true;
this.clip.brokenLabel.visible = true;
};
};
this.updateSquare();
};
}
protected function changeType(_arg1:Event):void{
Game.editor.changeType(this.clip.type.selectedItem.data);
Game.view.window.refresh();
Game.view.mini.update();
}
protected function reflect():void{
if (this.selected != null){
this.selected.reflect();
};
}
protected function click(_arg1:int):void{
if (this.selected == null){
return;
};
if (_arg1 == 0){
this.addZombies(-1);
} else {
if (_arg1 == 1){
this.addZombies(1);
} else {
if (_arg1 == 2){
this.removeResources(Resource.AMMO);
} else {
if (_arg1 == 3){
this.addResources(Resource.AMMO);
} else {
if (_arg1 == 4){
this.removeResources(Resource.BOARDS);
} else {
if (_arg1 == 5){
this.addResources(Resource.BOARDS);
} else {
if (_arg1 == 6){
this.removeResources(Resource.SURVIVORS);
} else {
if (_arg1 == 7){
this.addResources(Resource.SURVIVORS);
} else {
if (_arg1 == 8){
this.selected.setEntrance(this.selectedSquare);
} else {
if (_arg1 == 9){
this.removeSelected();
} else {
if (_arg1 == 10){
if (this.selectedSquare != null){
EditChange.createRubble(this.selectedSquare);
};
} else {
if (_arg1 == 11){
if (this.selectedSquare != null){
EditChange.addObstacle(this.selectedSquare);
this.selected.show();
};
} else {
if (_arg1 == 12){
this.rotate();
} else {
if (_arg1 == 13){
this.reflect();
} else {
if (_arg1 == 14){
if (this.selectedSquare != null){
EditChange.removeLevel(this.selectedSquare);
};
} else {
if (_arg1 == 15){
if (this.selectedSquare != null){
EditChange.addLevel(this.selectedSquare);
};
} else {
if (_arg1 == 16){
this.selected.toggleBroken();
} else {
if (_arg1 == 17){
if (this.selectedSquare != null){
EditChange.changeObstacle(this.selectedSquare);
this.selected.show();
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
Game.view.mini.update();
Game.view.window.refresh();
Game.editor.updateSelect();
}
protected function rotate():void{
if (this.selected != null){
this.selected.rotate();
};
}
protected function updateBuilding():void{
var _local1:int;
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:*;
var _local8:int;
var _local9:Array;
var _local10:*;
if (EditBox.isBuilding(this.selected.getType())){
if (this.selectedSquare == null){
_local1 = 0;
_local2 = [this.clip.zombiesDown, this.clip.zombiesUp, this.clip.zombies, this.clip.ammoDown, this.clip.ammoUp, this.clip.ammo, this.clip.boardsDown, this.clip.boardsUp, this.clip.boards, this.clip.survivorsDown, this.clip.survivorsUp, this.clip.survivors];
while (_local1 < _local2.length) {
_local7 = _local2[_local1];
_local1++;
_local7.visible = true;
};
_local3 = this.selected.getZombies();
_local4 = this.selected.getResources(Resource.AMMO);
_local5 = this.selected.getResources(Resource.BOARDS);
_local6 = this.selected.getResources(Resource.SURVIVORS);
this.clip.zombies.text = Text.zombiesEdit(Std.string(_local3));
this.clip.ammo.text = Text.ammoEdit(Std.string(_local4));
this.clip.boards.text = Text.boardsEdit(Std.string(_local5));
this.clip.survivors.text = Text.survivorsEdit(Std.string(_local6));
} else {
if (this.selected.canSetEntrance()){
_local8 = 0;
_local9 = [this.clip.setEntrance, this.clip.setEntranceLabel];
while (_local8 < _local9.length) {
_local10 = _local9[_local8];
_local8++;
_local10.visible = true;
};
};
};
};
}
protected function initSprites():void{
this.sprites = [function (_arg1:EditMenu):DisplayObject{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = $this.clip.zombiesDown;
$r = (Std._is(tmp, DisplayObject)) ? tmp : function (_arg1:EditMenu):MovieClip{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this), this.clip.zombiesUp, this.clip.zombies, this.clip.ammoDown, this.clip.ammoUp, this.clip.ammo, this.clip.boardsDown, this.clip.boardsUp, this.clip.boards, this.clip.survivorsDown, this.clip.survivorsUp, this.clip.survivors, this.clip.setEntrance, this.clip.setEntranceLabel, this.clip.deleteBox, this.clip.deleteBoxLabel, this.clip.addRubble, this.clip.addRubbleLabel, this.clip.addObstacle, this.clip.addObstacleLabel, this.clip.rotate, this.clip.rotateLabel, this.clip.reflect, this.clip.reflectLabel, this.clip.levelsDown, this.clip.levelsUp, this.clip.levels, this.clip.broken, this.clip.brokenLabel, this.clip.changeType, this.clip.changeTypeLabel];
}
protected function updateType():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:Array;
var _local5:EditType;
_local1 = Math.floor(Math.min((this.selected.getLimit().x - this.selected.getOffset().x), (this.selected.getLimit().y - this.selected.getOffset().y)));
this.clip.type.removeAll();
_local2 = 0;
_local3 = 0;
_local4 = EditBox.typeList;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
if (_local1 >= _local5.minSize){
this.clip.type.addItem(_local5.item);
if (_local5 == this.selected.getType()){
this.clip.type.selectedIndex = _local2;
};
_local2++;
};
};
}
public function cleanup():void{
this.buttons.cleanup();
this.clip.type.removeEventListener(Event.CHANGE, this.changeType);
this.clip.parent.removeChild(this.clip);
this.posClip.parent.removeChild(this.posClip);
}
protected function addZombies(_arg1:int):void{
if (this.selectedSquare == null){
this.selected.addZombies(_arg1);
} else {
EditChange.addZombie(this.selectedSquare, _arg1);
};
}
public function hover(_arg1:Point):void{
this.posClip.pos.text = _arg1.toString();
}
protected function updateDirections():void{
var _local1:int;
var _local2:Array;
var _local3:*;
if (((!((this.selected == null))) && ((this.selectedSquare == null)))){
if (EditBox.hasDirection(this.selected.getType())){
_local1 = 0;
_local2 = [this.clip.rotate, this.clip.rotateLabel, this.clip.reflect, this.clip.reflectLabel];
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.visible = true;
};
};
};
}
protected function removeSelected():void{
if (this.selectedSquare == null){
this.selected.remove();
} else {
EditChange.remove(this.selectedSquare);
this.selected.show();
};
}
}
}//package mapgen
Section 85
//EditMenuClip (mapgen.EditMenuClip)
package mapgen {
import fl.controls.*;
import flash.display.*;
import flash.text.*;
import fl.data.*;
public dynamic class EditMenuClip extends MovieClip {
public var ammoUp:MovieClip;
public var changeTypeLabel:TextField;
public var deleteBox:MovieClip;
public var brokenLabel:TextField;
public var reflectLabel:TextField;
public var survivors:TextField;
public var addObstacle:MovieClip;
public var rotateLabel:TextField;
public var boards:TextField;
public var levelsUp:MovieClip;
public var addRubbleLabel:TextField;
public var survivorsDown:MovieClip;
public var addRubble:MovieClip;
public var zombiesUp:MovieClip;
public var ammoDown:MovieClip;
public var boardsDown:MovieClip;
public var setEntranceLabel:TextField;
public var addObstacleLabel:TextField;
public var levelsDown:MovieClip;
public var deleteBoxLabel:TextField;
public var reflect:MovieClip;
public var collProps1:Array;
public var ammo:TextField;
public var i1:int;
public var zombies:TextField;
public var j1;
public var changeType:MovieClip;
public var collObj1:DataProvider;
public var setEntrance:MovieClip;
public var type:ComboBox;
public var zombiesDown:MovieClip;
public var rotate:MovieClip;
public var levels:TextField;
public var collProp1:Object;
public var boardsUp:MovieClip;
public var itemObj1:SimpleCollectionItem;
public var survivorsUp:MovieClip;
public var broken:MovieClip;
public function EditMenuClip(){
__setProp_type_EditMenuClip_Layer2_1();
}
function __setProp_type_EditMenuClip_Layer2_1(){
try {
type["componentInspectorSetting"] = true;
} catch(e:Error) {
};
collObj1 = new DataProvider();
collProps1 = [];
i1 = 0;
while (i1 < collProps1.length) {
itemObj1 = new SimpleCollectionItem();
collProp1 = collProps1[i1];
for (j1 in collProp1) {
itemObj1[j1] = collProp1[j1];
};
collObj1.addItem(itemObj1);
i1++;
};
type.dataProvider = collObj1;
type.editable = false;
type.enabled = true;
type.prompt = "";
type.restrict = "";
type.rowCount = 15;
type.visible = true;
try {
type["componentInspectorSetting"] = false;
} catch(e:Error) {
};
}
}
}//package mapgen
Section 86
//Editor (mapgen.Editor)
package mapgen {
import flash.display.*;
import flash.utils.*;
import ui.*;
import flash.*;
public class Editor {
protected var selectedClip:Shape;
protected var dragCurrent:Point;
protected var selectedSquare:Point;
protected var selected:EditBox;
protected var menu:EditMenu;
protected var dragBox:Shape;
protected var boxes:List;
protected var dragOrigin:Point;
public static var edgeCount:int = 5;
protected static var dragBoxBorder:int = 2;
protected static var selectedBorder:int = 4;
protected static var waterCount:int = 3;
public function Editor(_arg1:DisplayObjectContainer=null):void{
if (!Boot.skip_constructor){
this.boxes = new List();
this.selected = null;
this.selectedSquare = null;
this.dragOrigin = null;
this.dragCurrent = null;
this.selectedClip = new Shape();
_arg1.addChild(this.selectedClip);
this.dragBox = new Shape();
_arg1.addChild(this.dragBox);
this.menu = new EditMenu(_arg1);
};
}
protected function isOverlap(_arg1:Point, _arg2:Point):Boolean{
var _local3:Boolean;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:EditBox;
var _local11:BackgroundType;
_local3 = false;
_local4 = _arg1.y;
_local5 = _arg2.y;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local7 = _arg1.x;
_local8 = _arg2.x;
while (_local7 < _local8) {
var _temp2 = _local7;
_local7 = (_local7 + 1);
_local9 = _temp2;
_local10 = Game.map.getCell(_local9, _local6).edit;
_local11 = Game.map.getCell(_local9, _local6).getBackground();
if ((((_local11 == BackgroundType.EDGE)) || (!((((_local10 == null)) || ((_local10 == this.selected))))))){
_local3 = true;
break;
};
};
if (_local3){
break;
};
};
return (_local3);
}
public function clickSquare(_arg1:Point):void{
var _local2:EditBox;
if (_arg1 == null){
this.selected = null;
this.selectedSquare = null;
} else {
_local2 = Game.map.getCell(_arg1.x, _arg1.y).edit;
if (((!((this.selected == _local2))) || (!((this.selectedSquare == null))))){
this.selected = _local2;
this.selectedSquare = null;
} else {
this.selectedSquare = _arg1.clone();
};
};
this.updateSelect();
}
public function changeType(_arg1:EditType):void{
if (this.selected != null){
this.selected.changeType(_arg1);
this.updateSelect();
Game.view.mini.update();
Game.view.window.refresh();
};
}
public function getSelectedSquare():Point{
return (this.selectedSquare);
}
protected function tooSmall(_arg1:Point, _arg2:Point):Boolean{
var _local3:Boolean;
var _local4:EditType;
_local3 = false;
if (this.selected != null){
_local4 = this.selected.getType();
_local3 = ((((_arg2.x - _arg1.x) < _local4.minSize)) || (((_arg2.y - _arg1.y) < _local4.minSize)));
};
return (_local3);
}
public function loadMap(_arg1:ByteArray):void{
EditLoader.loadMap(_arg1, this.boxes);
}
public function updateDrag(_arg1:Point=null):void{
var _local2:EditBox;
var _local3:Point;
var _local4:Point;
var _local5:Point;
var _local6:Point;
var _local7:int;
if (_arg1 != null){
this.dragCurrent = _arg1.clone();
};
if (((((((!((this.dragOrigin == null))) && (!((this.dragCurrent == null))))) && (!(Lib.outsideMap(this.dragOrigin))))) && (!(Lib.outsideMap(this.dragCurrent))))){
_local2 = Game.map.getCell(this.dragOrigin.x, this.dragOrigin.y).edit;
if (this.selected != _local2){
this.selected = _local2;
};
this.selectedSquare = null;
this.updateSelect();
_local3 = Lib.getOffset(this.dragOrigin, this.dragCurrent);
_local4 = Lib.getLimit(this.dragOrigin, this.dragCurrent);
_local5 = Game.view.window.toRelative(_local3.x, _local3.y).toPixel();
_local6 = new Point((_local4.x - _local3.x), (_local4.y - _local3.y)).toPixel();
_local7 = Color.allowEditBox;
if (((this.isOverlap(_local3, _local4)) || (this.tooSmall(_local3, _local4)))){
_local7 = Color.denyEditBox;
};
this.dragBox.graphics.clear();
this.dragBox.graphics.lineStyle(dragBoxBorder, Color.editBoxBorder);
this.dragBox.graphics.beginFill(_local7);
this.dragBox.graphics.drawRect(_local5.x, _local5.y, _local6.x, _local6.y);
this.dragBox.graphics.endFill();
};
}
public function saveMap():ByteArray{
var _local1:ByteArray;
_local1 = new ByteArray();
EditLoader.saveMap(_local1, this.boxes);
return (_local1);
}
public function cleanup():void{
this.menu.cleanup();
this.dragBox.parent.removeChild(this.dragBox);
this.selectedClip.parent.removeChild(this.selectedClip);
}
protected function createBorderEdge(_arg1:Section, _arg2:Direction, _arg3:int, _arg4:EditType):Section{
var _local5:Section;
var _local6:Section;
var _local7:EditBox;
_local5 = _arg1.remainder(_arg2, _arg3);
_local6 = _arg1.slice(_arg2, _arg3);
_local7 = new EditBox(_local6.offset, _local6.limit);
_local7.bind();
_local7.changeType(_arg4);
this.boxes.add(_local7);
return (_local5);
}
public function createBorders():void{
var _local1:Section;
var _local2:int;
var _local3:Array;
var _local4:int;
var _local5:Array;
var _local6:Direction;
var _local7:Direction;
_local1 = new Section(new Point(edgeCount, edgeCount), new Point((Game.map.size().x - edgeCount), (Game.map.size().y - edgeCount)));
Util.fillBlocked(_local1);
Util.fillBackground(_local1, BackgroundType.STREET);
_local2 = 0;
_local3 = Lib.directions;
while (_local2 < _local3.length) {
_local6 = _local3[_local2];
_local2++;
_local1 = this.createBorderEdge(_local1, _local6, (Editor.waterCount - 1), EditBox.DEEP_WATER);
};
_local4 = 0;
_local5 = Lib.directions;
while (_local4 < _local5.length) {
_local7 = _local5[_local4];
_local4++;
_local1 = this.createBorderEdge(_local1, _local7, 1, EditBox.SHALLOW_WATER);
};
}
public function updateSelect():void{
var _local1:Point;
var _local2:Point;
var _local3:Point;
var _local4:Point;
this.selectedClip.graphics.clear();
if (this.selected != null){
if (this.selectedSquare == null){
_local1 = Game.view.window.toRelative(this.selected.getOffset().x, this.selected.getOffset().y).toPixel();
_local2 = Game.view.window.toRelative(this.selected.getLimit().x, this.selected.getLimit().y).toPixel();
this.selectedClip.graphics.lineStyle(selectedBorder, Color.editSelected);
this.selectedClip.graphics.drawRect(_local1.x, _local1.y, (_local2.x - _local1.x), (_local2.y - _local1.y));
} else {
_local3 = Game.view.window.toRelative(this.selectedSquare.x, this.selectedSquare.y).toPixel();
_local4 = new Point((_local3.x + Option.cellPixels), (_local3.y + Option.cellPixels));
this.selectedClip.graphics.lineStyle(selectedBorder, Color.editSelected);
this.selectedClip.graphics.drawRect(_local3.x, _local3.y, (_local4.x - _local3.x), (_local4.y - _local3.y));
};
};
if (this.selectedSquare == null){
Game.update.changeSelect(null);
};
this.menu.update(this.selected, this.selectedSquare);
}
public function endDrag(_arg1:Point):void{
var _local2:Point;
var _local3:Point;
var _local4:Point;
var _local5:EditBox;
if (((((!((this.dragOrigin == null))) && (!(Lib.outsideMap(this.dragOrigin))))) && (!(Lib.outsideMap(_arg1))))){
_local2 = this.dragOrigin;
_local3 = Lib.getOffset(_local2, _arg1);
_local4 = Lib.getLimit(_local2, _arg1);
if (((!(this.isOverlap(_local3, _local4))) && (!(this.tooSmall(_local3, _local4))))){
if (this.selected == null){
_local5 = new EditBox(_local3, _local4);
_local5.bind();
_local5.show();
this.boxes.add(_local5);
this.clickSquare(_arg1);
} else {
this.selected.resize(_local3, _local4);
this.selectedSquare = null;
this.updateSelect();
};
};
this.dragOrigin = null;
this.dragCurrent = null;
this.dragBox.graphics.clear();
Game.view.mini.update();
Game.view.window.refresh();
};
}
public function hover(_arg1:Point):void{
this.menu.hover(_arg1);
}
public function beginDrag(_arg1:Point):void{
var _local2:EditBox;
var _local3:Point;
var _local4:Point;
_local2 = Game.map.getCell(_arg1.x, _arg1.y).edit;
if (_local2 != null){
_local3 = _local2.getOffset();
_local4 = _local2.getLimit();
if ((((((_arg1.x == _local3.x)) || ((_arg1.x == (_local4.x - 1))))) && ((((_arg1.y == _local3.y)) || ((_arg1.y == (_local4.y - 1))))))){
this.dragOrigin = _local3.clone();
if (_arg1.x == _local3.x){
this.dragOrigin.x = (_local4.x - 1);
};
if (_arg1.y == _local3.y){
this.dragOrigin.y = (_local4.y - 1);
};
};
} else {
if (_local2 == null){
this.dragOrigin = _arg1.clone();
this.dragCurrent = null;
this.clickSquare(null);
} else {
this.dragOrigin = null;
this.dragCurrent = null;
};
};
}
public function removeBoxFromList(_arg1:EditBox):void{
this.boxes.remove(_arg1);
Game.view.mini.update();
Game.view.window.refresh();
}
public static function createEdges():void{
var _local1:Section;
var _local2:int;
var _local3:Array;
var _local4:Direction;
var _local5:Section;
_local1 = new Section(new Point(0, 0), Game.map.size().clone());
_local2 = 0;
_local3 = Lib.directions;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
_local5 = _local1.slice(_local4, edgeCount);
Util.fillBlocked(_local5);
Util.fillBackground(_local5, BackgroundType.EDGE);
Util.fillAddTile(_local5, Tile.EDGE);
Game.view.window.fillRegion(_local5.offset, _local5.limit);
_local1 = _local1.remainder(_local4, edgeCount);
};
}
}
}//package mapgen
Section 87
//EditPosClip (mapgen.EditPosClip)
package mapgen {
import flash.display.*;
import flash.text.*;
public dynamic class EditPosClip extends MovieClip {
public var pos:TextField;
}
}//package mapgen
Section 88
//EditType (mapgen.EditType)
package mapgen {
import flash.*;
import native.*;
public class EditType {
public var number:int;
public var minSize:int;
public var item:EditMenuItem;
public function EditType(_arg1:int=0, _arg2:int=0, _arg3:String=null):void{
if (!Boot.skip_constructor){
this.number = _arg1;
this.minSize = _arg2;
this.item = new EditMenuItem(_arg3, this);
};
}
}
}//package mapgen
Section 89
//Parameter (mapgen.Parameter)
package mapgen {
public class Parameter {
public static var roofOverlayChance:int = 5;
public static var rubbleWeight:Array = [0, 0, 0, 0, 10, 10, 30, 30, 30, 30, 30, 30, 30, 10, 30, 5, 5, 5, 5, 5];
public static var zombieStreetFactor:Number = 0.1;
public static var rubbleStreetFactor:Number = 0.15;
}
}//package mapgen
Section 90
//PlaceBridge (mapgen.PlaceBridge)
package mapgen {
import flash.*;
public class PlaceBridge {
protected var isBroken:Boolean;
protected var dir:Direction;
protected static var firstCenter:Array = [202, 182, 213, 214];
protected static var secondEnd:Array = [205, 185, 273, 274];
protected static var secondCenter:Array = [203, 183, 233, 234];
protected static var rightTile:Array = [207, 187, 314, 313];
protected static var firstEnd:Array = [204, 184, 253, 254];
protected static var threeBroken:Array = [1207, 1186, 1206, 1187];
protected static var leftTile:Array = [206, 186, 294, 293];
protected static var firstBegin:Array = [200, 180, 173, 174];
protected static var randBroken:Array = [[1207, 1247], [1186, 1226], [1206, 1246], [1187, 1227]];
protected static var secondBegin:Array = [201, 181, 193, 194];
public function PlaceBridge(_arg1:Direction=null, _arg2:Boolean=false):void{
if (!Boot.skip_constructor){
this.dir = _arg1;
this.isBroken = _arg2;
};
}
public function intersectStreet(_arg1:Section):void{
var _local2:Section;
var _local3:Street;
var _local4:enum;
_local2 = _arg1.edge(Util.opposite(this.dir));
_local3 = _arg1.getStreet(Util.opposite(this.dir));
if (_local3 != null){
_local4 = this.dir;
switch (_local4.index){
case 0:
_local3.addLess(_local2.offset, 4, CrossStreet.ROAD);
break;
case 1:
_local3.addGreater(_local2.offset, 4, CrossStreet.ROAD);
break;
case 2:
_local3.addGreater(_local2.offset, 4, CrossStreet.ROAD);
break;
case 3:
_local3.addLess(_local2.offset, 4, CrossStreet.ROAD);
break;
};
};
}
public function place(_arg1:Section):void{
var _local2:PlaceTerrain;
var _local3:Direction;
var _local4:Section;
var _local5:Section;
var _local6:Section;
var _local7:int;
_local2 = new PlaceTerrain();
_local2.place(_arg1, PlaceTerrain.shallowWater);
_local3 = Lib.rotateCW(this.dir);
if (_local3 == Direction.SOUTH){
_local3 = Direction.NORTH;
};
if (_local3 == Direction.EAST){
_local3 = Direction.WEST;
};
_local4 = _arg1.slice(_local3, 1);
_local5 = _arg1.slice(Util.opposite(_local3), 1);
_local6 = _arg1.remainder(_local3, 1).remainder(Util.opposite(_local3), 1);
Util.fillBlocked(_local4);
Util.fillBlocked(_local5);
if (this.isBroken){
this.placeBrokenEdge(_arg1, this.dir);
} else {
Util.fillBackground(_local6, BackgroundType.BRIDGE);
Util.fillUnblocked(_local6);
_local7 = Lib.directionToIndex(this.dir);
Util.fillAddTile(_local4, leftTile[_local7]);
Util.fillAddTile(_local5, rightTile[_local7]);
this.placeInside(_local6);
Main.replay.addBox(_local6.offset, _local6.limit, Option.roadMiniColor);
};
}
protected function placeBrokenEdge(_arg1:Section, _arg2:Direction):void{
var _local3:int;
var _local4:Section;
var _local5:int;
var _local6:int;
var _local7:Point;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:Array;
_local3 = Lib.directionToIndex(_arg2);
_local4 = _arg1.slice(_arg2, 1);
_local5 = 0;
_local6 = (Math.floor(Math.max(_local4.getSize().x, _local4.getSize().y)) - 1);
_local7 = new Point(0, 0);
_local8 = _local4.offset.y;
_local9 = _local4.limit.y;
while (_local8 < _local9) {
var _temp1 = _local8;
_local8 = (_local8 + 1);
_local10 = _temp1;
_local11 = _local4.offset.x;
_local12 = _local4.limit.x;
while (_local11 < _local12) {
var _temp2 = _local11;
_local11 = (_local11 + 1);
_local13 = _temp2;
_local14 = Tile.NO_TILE;
if ((((_local5 == 1)) && ((_local6 == 2)))){
_local14 = threeBroken[_local3];
} else {
if (_local5 == 0){
_local14 = firstBegin[_local3];
} else {
if (_local5 == 1){
_local14 = secondBegin[_local3];
} else {
if (_local5 == (_local6 - 1)){
_local14 = firstEnd[_local3];
} else {
if (_local5 == _local6){
_local14 = secondEnd[_local3];
} else {
if ((((((_local6 + 1) % 2) == 0)) && ((_local5 == (Math.floor(((_local6 + 1) / 2)) - 1))))){
_local14 = firstCenter[_local3];
} else {
if ((((((_local6 + 1) % 2) == 0)) && ((_local5 == Math.floor(((_local6 + 1) / 2)))))){
_local14 = secondCenter[_local3];
} else {
_local15 = randBroken[_local3];
_local14 = _local15[Util.rand(_local15.length)];
};
};
};
};
};
};
};
_local7.x = _local13;
_local7.y = _local10;
Util.addTile(_local7, _local14);
_local5++;
};
};
}
protected function placeInside(_arg1:Section):void{
var _local2:Boolean;
var _local3:Point;
var _local4:int;
var _local5:int;
var _local6:Street;
_local2 = (((this.dir == Direction.NORTH)) || ((this.dir == Direction.SOUTH)));
_local3 = _arg1.getSize();
_local4 = _local3.x;
_local5 = _local3.y;
if (!_local2){
_local4 = _local3.y;
_local5 = _local3.x;
};
_local6 = new Street(_arg1.offset, _local4, _local5, _local2, null, null);
_local6.draw(Game.map, false);
}
}
}//package mapgen
Section 91
//PlaceIntersection (mapgen.PlaceIntersection)
package mapgen {
public class PlaceIntersection extends PlaceRoot {
protected static var STREET:int = 3;
protected static var MIDDLE:int = 1;
protected static var BEGIN:int = 0;
protected static var INTERSECTION:int = 0;
protected static var BUILDING:int = 2;
protected static var ALLEY:int = 1;
protected static var END:int = 2;
protected static var edges:Array = [[[1200, 198, 1201], [138, 138, 138], [98, 98, 98], [133, 178, 134]], [[1220, 198, 1221], [158, 158, 158], [118, 118, 118], [153, 218, 154]], [[1201, 198, 1221], [96, 96, 96], [94, 94, 94], [136, 199, 156]], [[1200, 198, 1220], [95, 95, 95], [93, 93, 93], [135, 197, 155]]];
protected static var corners:Array = [[[1181, 96, 94, 136], [138, 1189, 1229, 139], [98, 1189, 1221, 99], [134, 76, 74, 179]], [[1180, 95, 93, 135], [138, 1188, 1188, 137], [98, 1228, 1220, 97], [133, 75, 73, 177]], [[1201, 96, 94, 156], [158, 1209, 1209, 159], [118, 1249, 1241, 119], [154, 116, 114, 219]], [[1200, 95, 93, 155], [158, 1208, 1248, 157], [118, 1208, 1240, 117], [153, 115, 113, 217]]];
public function PlaceIntersection():void{
}
protected function getEdit(_arg1:Point):EditBox{
var _local2:EditBox;
_local2 = null;
if (!Lib.outsideMap(_arg1)){
_local2 = Game.map.getCell(_arg1.x, _arg1.y).edit;
};
return (_local2);
}
protected function placeCorner(_arg1:Point, _arg2:int):void{
var _local3:int;
var _local4:int;
var _local5:int;
_local3 = this.getType(_arg1, PlaceRoot.cornerToVert(_arg2));
_local4 = this.getType(_arg1, PlaceRoot.cornerToHoriz(_arg2));
_local5 = corners[_arg2][_local3][_local4];
Util.addTile(_arg1, _local5);
}
protected function placeAllCorners(_arg1:Section):void{
var _local2:int;
var _local3:int;
var _local4:int;
_local2 = 0;
_local3 = PlaceRoot.CORNER_COUNT;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
this.placeCorner(_arg1.corner(_local4), _local4);
};
}
public function place(_arg1:Section):void{
var _local2:Point;
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.STREET);
Util.fillClearTiles(_arg1);
_local2 = _arg1.getSize();
if ((((_local2.x <= 1)) || ((_local2.y <= 1)))){
Util.fillAddTile(_arg1, 1064);
} else {
Util.fillAddTile(_arg1.center(), 198);
this.placeAllCorners(_arg1);
this.placeAllEdges(_arg1);
};
}
protected function hop(_arg1:Point, _arg2:Direction):Point{
var _local3:Point;
_local3 = Lib.directionToDelta(_arg2);
return (new Point((_arg1.x + _local3.x), (_arg1.y + _local3.y)));
}
protected function getTransition(_arg1:Point, _arg2:Direction):int{
var _local3:int;
var _local4:Direction;
var _local5:Direction;
var _local6:Point;
var _local7:Point;
var _local8:Point;
var _local9:EditBox;
_local3 = MIDDLE;
_local4 = Direction.WEST;
_local5 = Direction.EAST;
if ((((_arg2 == Direction.EAST)) || ((_arg2 == Direction.WEST)))){
_local4 = Direction.NORTH;
_local5 = Direction.SOUTH;
};
_local6 = this.hop(_arg1, _arg2);
_local7 = this.hop(_local6, _local4);
_local8 = this.hop(_local6, _local5);
_local9 = this.getEdit(_local6);
if (_local9 != this.getEdit(_local7)){
_local3 = BEGIN;
} else {
if (_local9 != this.getEdit(_local8)){
_local3 = END;
};
};
return (_local3);
}
protected function getType(_arg1:Point, _arg2:Direction):int{
var _local3:Point;
var _local4:int;
var _local5:EditBox;
_local3 = this.hop(_arg1, _arg2);
_local4 = BUILDING;
_local5 = this.getEdit(_local3);
if (_local5 != null){
if (_local5.getType() == EditBox.INTERSECTION){
_local4 = INTERSECTION;
} else {
if ((((((((_local5.getType() == EditBox.STREET)) || ((_local5.getType() == EditBox.CORNER)))) || ((_local5.getType() == EditBox.STREET_H)))) || ((_local5.getType() == EditBox.STREET_V)))){
if (_local5.isAlley()){
_local4 = ALLEY;
} else {
_local4 = STREET;
};
};
};
};
return (_local4);
}
protected function placeEdgeTile(_arg1:Point, _arg2:Direction):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local3 = Lib.directionToIndex(_arg2);
_local4 = this.getType(_arg1, _arg2);
_local5 = this.getTransition(_arg1, _arg2);
_local6 = edges[_local3][_local4][_local5];
Util.addTile(_arg1, _local6);
}
protected function placeAllEdges(_arg1:Section):void{
var _local2:int;
var _local3:Array;
var _local4:Direction;
_local2 = 0;
_local3 = Lib.directions;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
Util.setArea(_arg1.edge(_local4), this.placeEdgeTile, _local4);
};
}
}
}//package mapgen
Section 92
//PlaceParkingLot (mapgen.PlaceParkingLot)
package mapgen {
public class PlaceParkingLot {
protected static var END_BUILDING:int = 4;
protected static var horizontalLot:Array = [[[517, 617], [515, 615], [535, 537], [557, 637], [555, 635]], [[455, 575], [457, 577], [475, 477], [495, 595], [497, 597]], [[518, 618], [458, 578], [478, 478], [558, 638], [498, 598]], [[519, 619], [516, 616], [536, 539], [559, 639], [556, 636]], [[456, 576], [459, 579], [476, 479], [496, 596], [499, 599]]];
protected static var MIDDLE:int = 2;
protected static var BEGIN_ROAD:int = 0;
protected static var HORIZ:int = 1;
protected static var outsideCorner:Array = [[657, 616, 653, 655], [656, 615, 652, 654], [677, 636, 673, 675], [676, 635, 672, 674]];
protected static var END_ROAD:int = 3;
protected static var NORMAL:int = 0;
protected static var entranceCorner:Array = [[279, 458], [277, 458], [279, 498], [277, 498]];
protected static var insideCorner:Array = [210, 235, 212, 211];
protected static var VERT:int = 0;
protected static var BEGIN_BUILDING:int = 1;
protected static var verticalLot:Array = [[[357, 355], [417, 415], [418, 358], [359, 356], [419, 416]], [[317, 315], [0x0101, 0xFF], [318, 258], [319, 316], [259, 0x0100]], [[377, 375], [277, 275], [378, 378], [379, 376], [279, 276]], [[397, 395], [437, 435], [438, 398], [399, 396], [439, 436]], [[337, 335], [297, 295], [338, 298], [339, 336], [299, 296]]];
protected static var ENTRANCE:int = 1;
public function PlaceParkingLot():void{
}
protected function entranceIndex(_arg1:int, _arg2:int, _arg3:Boolean, _arg4:List):int{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:*;
var _local9:Point;
_local5 = _arg1;
_local6 = _arg2;
if (!_arg3){
_local5 = _arg2;
_local6 = _arg1;
};
_local7 = NORMAL;
_local8 = _arg4.iterator();
while (_local8.hasNext()) {
_local9 = _local8.next();
if ((((_local5 == _local9.x)) && ((_local6 == _local9.y)))){
_local7 = ENTRANCE;
break;
};
};
return (_local7);
}
protected function placeVertical(_arg1:Section, _arg2:List):void{
var _local3:Array;
var _local4:Array;
_local3 = this.createWithArray(_arg1.getSize().y, _arg1.north, _arg1.south);
_local4 = this.createCrossArray(_arg1.getSize().x, _arg1.west, _arg1.east);
this.placeTiles(_arg1.offset.y, _arg1.limit.y, _local3, _arg1.offset.x, _arg1.limit.x, _local4, verticalLot, false, _arg2);
}
public function place(_arg1:Section, _arg2:List, _arg3:Boolean, _arg4:Direction=null):void{
var _local5:List;
var _local6:Point;
var _local7:*;
var _local8:Point;
_local5 = new List();
_local6 = null;
_local7 = _arg2.iterator();
while (_local7.hasNext()) {
_local8 = _local7.next();
_local6 = _local8;
_local5.add(_local8.clone());
};
if (_arg4 == null){
if (_local6 != null){
if ((((_local6.y == _arg1.offset.y)) || ((_local6.y == (_arg1.limit.y - 1))))){
_arg4 = Direction.NORTH;
} else {
_arg4 = Direction.WEST;
};
} else {
_arg4 = Direction.NORTH;
};
};
Util.fillClearTiles(_arg1);
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.STREET);
if ((((_arg4 == Direction.NORTH)) || ((_arg4 == Direction.SOUTH)))){
this.placeHorizontal(_arg1, _local5);
} else {
this.placeVertical(_arg1, _local5);
};
if (_arg3){
this.placeRubble(_arg1);
};
}
protected function fixEdges(_arg1:Array, _arg2:Street, _arg3:Street):void{
if (_arg2 == null){
_arg1[0] = BEGIN_BUILDING;
} else {
_arg1[0] = BEGIN_ROAD;
};
if (_arg3 == null){
_arg1[(_arg1.length - 1)] = END_BUILDING;
} else {
_arg1[(_arg1.length - 1)] = END_ROAD;
};
}
protected function placeRubble(_arg1:Section):void{
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local2 = _arg1.getSize();
_local3 = (Math.ceil(((_local2.x * _local2.y) * Parameter.rubbleStreetFactor)) + 1);
_local4 = Util.rand(_local3);
_local5 = 0;
while (_local5 < _local4) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp1;
_local7 = (_arg1.offset.x + Util.rand(_local2.x));
_local8 = (_arg1.offset.y + Util.rand(_local2.y));
Util.placeSingleSalvage(Game.map, _local7, _local8);
};
}
protected function placeHorizontal(_arg1:Section, _arg2:List):void{
var _local3:Array;
var _local4:Array;
_local3 = this.createWithArray(_arg1.getSize().x, _arg1.west, _arg1.east);
_local4 = this.createCrossArray(_arg1.getSize().y, _arg1.north, _arg1.south);
this.placeTiles(_arg1.offset.x, _arg1.limit.x, _local3, _arg1.offset.y, _arg1.limit.y, _local4, horizontalLot, true, _arg2);
}
protected function createCrossArray(_arg1:int, _arg2:Street, _arg3:Street):Array{
var _local4:Array;
var _local5:int;
_local4 = [];
_local5 = _arg1;
if ((_local5 % 3) != 0){
_local4.push(BEGIN_BUILDING);
_local4.push(END_BUILDING);
_local5 = (_local5 - 2);
};
while (_local5 >= 3) {
_local4.push(BEGIN_BUILDING);
_local4.push(MIDDLE);
_local4.push(END_BUILDING);
_local5 = (_local5 - 3);
};
if (_local5 == 2){
_local4.push(BEGIN_BUILDING);
_local4.push(END_BUILDING);
};
this.fixEdges(_local4, _arg2, _arg3);
return (_local4);
}
protected function createWithArray(_arg1:int, _arg2:Street, _arg3:Street):Array{
var _local4:Array;
var _local5:int;
var _local6:int;
_local4 = [];
_local5 = 0;
while (_local5 < _arg1) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp1;
_local4.push(MIDDLE);
};
this.fixEdges(_local4, _arg2, _arg3);
return (_local4);
}
protected function getPoint(_arg1:int, _arg2:int, _arg3:Boolean):Point{
var _local4:Point;
_local4 = new Point(_arg1, _arg2);
if (!_arg3){
_local4.x = _arg2;
_local4.y = _arg1;
};
return (_local4);
}
protected function addEntrances(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:Array, _arg6:Boolean, _arg7:List):void{
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
_local8 = Math.floor(((_arg1 + _arg2) / 2));
_local9 = 1;
_local10 = (_arg5.length - 1);
while (_local9 < _local10) {
var _temp1 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp1;
if ((((_arg5[_local11] == BEGIN_BUILDING)) || ((_arg5[_local11] == END_BUILDING)))){
_arg7.add(this.getPoint(_local8, (_arg3 + _local11), _arg6));
};
};
}
protected function placeSingleTile(_arg1:int, _arg2:int, _arg3:int, _arg4:Boolean):void{
var _local5:int;
var _local6:int;
_local5 = _arg1;
_local6 = _arg2;
if (!_arg4){
_local5 = _arg2;
_local6 = _arg1;
};
Util.addTile(new Point(_local5, _local6), _arg3);
}
protected function placeTiles(_arg1:int, _arg2:int, _arg3:Array, _arg4:int, _arg5:int, _arg6:Array, _arg7:Array, _arg8:Boolean, _arg9:List):void{
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:int;
var _local16:int;
var _local17:int;
var _local18:int;
this.addEntrances(_arg1, _arg2, _arg4, _arg5, _arg6, _arg8, _arg9);
_local10 = _arg1;
while (_local10 < _arg2) {
var _temp1 = _local10;
_local10 = (_local10 + 1);
_local11 = _temp1;
_local12 = (_local11 - _arg1);
_local13 = _arg4;
while (_local13 < _arg5) {
var _temp2 = _local13;
_local13 = (_local13 + 1);
_local14 = _temp2;
_local15 = (_local14 - _arg4);
_local16 = _arg3[_local12];
_local17 = _arg6[_local15];
_local18 = this.entranceIndex(_local11, _local14, _arg8, _arg9);
this.placeSingleTile(_local11, _local14, _arg7[_local16][_local17][_local18], _arg8);
};
};
}
public static function addCrossStreet(_arg1:Section, _arg2:Point, _arg3:Direction, _arg4:CrossStreet):void{
if ((((_arg3 == Direction.NORTH)) && (!((_arg1.north == null))))){
_arg1.north.addGreater(_arg2, 1, _arg4);
} else {
if ((((_arg3 == Direction.SOUTH)) && (!((_arg1.south == null))))){
_arg1.south.addLess(_arg2, 1, _arg4);
} else {
if ((((_arg3 == Direction.EAST)) && (!((_arg1.east == null))))){
_arg1.east.addLess(_arg2, 1, _arg4);
} else {
if ((((_arg3 == Direction.WEST)) && (!((_arg1.west == null))))){
_arg1.west.addGreater(_arg2, 1, _arg4);
};
};
};
};
}
public static function fixCorner(_arg1:Section, _arg2:Section, _arg3:Section, _arg4:int, _arg5:Boolean):void{
var _local6:Direction;
var _local7:Direction;
var _local8:int;
Util.addTile(_arg1.offset, insideCorner[_arg4]);
_local6 = PlaceRoot.cornerToVert(_arg4);
_local7 = PlaceRoot.cornerToHoriz(_arg4);
_local8 = 0;
if (_arg2.getStreet(_local6) != null){
_local8 = (_local8 + 2);
};
if (_arg2.getStreet(_local7) != null){
_local8 = (_local8 + 1);
};
Util.addTile(_arg2.offset, outsideCorner[_arg4][_local8]);
_local8 = 0;
if (!_arg5){
_local8 = 1;
};
Util.addTile(_arg3.offset, entranceCorner[_arg4][_local8]);
}
}
}//package mapgen
Section 93
//PlacePlaza (mapgen.PlacePlaza)
package mapgen {
public class PlacePlaza extends PlaceRoot {
public function PlacePlaza():void{
}
public function place(_arg1:Section):void{
Util.fillAddTile(_arg1, 872);
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.STREET);
}
}
}//package mapgen
Section 94
//PlaceRoot (mapgen.PlaceRoot)
package mapgen {
public class PlaceRoot {
public static var CORNER_COUNT:int = 4;
protected static var oppositeCornerTable:Array = [SOUTHWEST, SOUTHEAST, NORTHWEST, NORTHEAST];
public static var NORTHWEST:int = 1;
public static var NORTHEAST:int = 0;
public static var SOUTHWEST:int = 3;
protected static var NORTH:int = 0;
public static var SOUTHEAST:int = 2;
protected static var SOUTH:int = 1;
protected static var WEST:int = 3;
protected static var EAST:int = 2;
public static function cornerToVert(_arg1:int):Direction{
if ((((_arg1 == NORTHEAST)) || ((_arg1 == NORTHWEST)))){
return (Direction.NORTH);
};
return (Direction.SOUTH);
}
protected static function lessCorner(_arg1:Direction):int{
var _local2:int;
var _local3:enum;
_local2 = NORTHWEST;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = NORTHWEST;
break;
case 1:
_local2 = SOUTHWEST;
break;
case 2:
_local2 = NORTHEAST;
break;
case 3:
_local2 = NORTHWEST;
break;
};
return (_local2);
}
public static function oppositeCorner(_arg1:int):int{
return (oppositeCornerTable[_arg1]);
}
protected static function clockwiseCorner(_arg1:Direction):int{
var _local2:int;
var _local3:enum;
_local2 = NORTHEAST;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = NORTHEAST;
break;
case 1:
_local2 = SOUTHWEST;
break;
case 2:
_local2 = SOUTHEAST;
break;
case 3:
_local2 = NORTHWEST;
break;
};
return (_local2);
}
public static function cornerToHoriz(_arg1:int):Direction{
if ((((_arg1 == NORTHEAST)) || ((_arg1 == SOUTHEAST)))){
return (Direction.EAST);
};
return (Direction.WEST);
}
protected static function greaterCorner(_arg1:Direction):int{
var _local2:int;
var _local3:enum;
_local2 = NORTHEAST;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = NORTHEAST;
break;
case 1:
_local2 = SOUTHEAST;
break;
case 2:
_local2 = SOUTHEAST;
break;
case 3:
_local2 = SOUTHWEST;
break;
};
return (_local2);
}
}
}//package mapgen
Section 95
//PlaceStreetCorner (mapgen.PlaceStreetCorner)
package mapgen {
public class PlaceStreetCorner extends PlaceRoot {
protected static var TWO_LEFT:int = 1;
protected static var MULTI_PATCH:int = 11;
protected static var VERTICAL:int = 0;
protected static var LARGE_ROAD:int = 1;
protected static var corners:Array = [[1141, 84, 103, 84, 1151, 1204, 1155, 1157, 1153, 1159, 1143, 1204, 1149], [1140, 81, 102, 81, 1150, 1203, 1154, 1156, 1152, 1158, 1142, 1203, 1148], [1161, 144, 123, 144, 1171, 1224, 1175, 1177, 1173, 1179, 1163, 1224, 1169], [1160, 141, 122, 141, 1170, 1223, 1174, 1176, 1172, 1178, 1162, 1223, 1168]];
protected static var FOUR_MIDDLE:int = 12;
protected static var edges:Array = [[20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 29, 24, 25], [11, 31, 51, 71, 91, 111, 131, 151, 171, 191, 191, 91, 111]];
protected static var MULTI_A:int = 3;
protected static var MULTI_B:int = 4;
protected static var MULTI_C:int = 5;
protected static var MULTI_D:int = 6;
protected static var MULTI_E:int = 7;
protected static var MULTI_F:int = 8;
protected static var MULTI_G:int = 9;
protected static var HORIZONTAL:int = 1;
protected static var TWO_RIGHT:int = 2;
protected static var transitions:Array = [[[104, 1145], [83, 1147]], [[101, 1146], [82, 1144]], [[124, 1167], [143, 1165]], [[121, 1164], [142, 1166]]];
protected static var ALLEY:int = 0;
protected static var THREE_MIDDLE:int = 10;
protected static var types:Array = [[ALLEY], [TWO_LEFT, TWO_RIGHT], [MULTI_A, THREE_MIDDLE, MULTI_F], [MULTI_A, FOUR_MIDDLE, MULTI_D, MULTI_F]];
protected static var SMALL_ROAD:int = 0;
public function PlaceStreetCorner():void{
}
protected function getType(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:Boolean;
_local3 = Tile.NO_TILE;
if (_arg2 <= 4){
_local3 = types[(_arg2 - 1)][_arg1];
} else {
_local4 = ((_arg2 % 2) == 0);
if (_arg1 == 0){
_local3 = MULTI_A;
} else {
if (_arg1 == (_arg2 - 1)){
_local3 = MULTI_F;
} else {
if (((_local4) && ((_arg1 == (Math.floor((_arg2 / 2)) - 1))))){
_local3 = MULTI_C;
} else {
if (((_local4) && ((_arg1 == Math.floor((_arg2 / 2)))))){
_local3 = MULTI_D;
} else {
if (((!(_local4)) && ((_arg1 == Math.floor((_arg2 / 2)))))){
_local3 = MULTI_G;
} else {
if (_arg1 < Math.floor((_arg2 / 2))){
if (_arg1 > 1){
_local3 = MULTI_PATCH;
} else {
_local3 = MULTI_B;
};
} else {
_local3 = MULTI_E;
};
};
};
};
};
};
};
return (_local3);
}
protected function placeEdge(_arg1:Section, _arg2:Direction, _arg3:int, _arg4:int):void{
var _local5:int;
var _local6:int;
var _local7:int;
_local5 = this.getType(_arg3, _arg4);
if ((((_arg2 == Direction.EAST)) || ((_arg2 == Direction.SOUTH)))){
_local5 = this.getType(((_arg4 - _arg3) - 1), _arg4);
};
_local6 = VERTICAL;
if ((((_arg2 == Direction.SOUTH)) || ((_arg2 == Direction.NORTH)))){
_local6 = HORIZONTAL;
};
_local7 = edges[_local6][_local5];
Util.fillAddTile(_arg1, _local7);
}
public function place(_arg1:Section, _arg2:Direction):void{
var _local3:int;
var _local4:Point;
var _local5:int;
var _local6:Section;
var _local7:int;
var _local8:int;
Util.fillUnblocked(_arg1);
Util.fillBackground(_arg1, BackgroundType.STREET);
Util.fillClearTiles(_arg1);
_local3 = PlaceRoot.clockwiseCorner(_arg2);
_local4 = _arg1.getSize();
_local5 = Math.floor(Math.min(_local4.x, _local4.y));
_local6 = _arg1;
_local7 = _local5;
_local8 = 0;
while (_local5 > 0) {
_local6 = this.placeNext(_local6, _local3, _local8, _local7);
_local4 = _local6.getSize();
_local5 = Math.floor(Math.min(_local4.x, _local4.y));
_local8++;
};
}
protected function placeNext(_arg1:Section, _arg2:int, _arg3:int, _arg4:int):Section{
var _local5:Direction;
var _local6:Direction;
var _local7:Section;
var _local8:Section;
var _local9:Point;
var _local10:Section;
var _local11:Section;
var _local12:Section;
_local5 = PlaceRoot.cornerToVert(_arg2);
_local6 = PlaceRoot.cornerToHoriz(_arg2);
_local7 = _arg1.slice(_local6, 1).remainder(_local5, 1);
_local8 = _arg1.slice(_local5, 1).remainder(_local6, 1);
_local9 = _arg1.corner(_arg2);
if ((((_arg3 == 0)) && ((_arg4 > 1)))){
_local11 = _local7.slice(_local5, 1);
_local7 = _local7.remainder(_local5, 1);
_local12 = _local8.slice(_local6, 1);
_local8 = _local8.remainder(_local6, 1);
this.placeTransition(_local11, _local6, _arg2, _arg4);
this.placeTransition(_local12, _local5, _arg2, _arg4);
};
this.placeEdge(_local7, _local6, _arg3, _arg4);
this.placeEdge(_local8, _local5, _arg3, _arg4);
this.placeCorner(_local9, _arg2, _arg3, _arg4);
_local10 = _arg1.remainder(_local6, 1).remainder(_local5, 1);
return (_local10);
}
protected function placeTransition(_arg1:Section, _arg2:Direction, _arg3:int, _arg4:int):void{
var _local5:int;
var _local6:int;
var _local7:int;
_local5 = VERTICAL;
if ((((_arg2 == Direction.NORTH)) || ((_arg2 == Direction.SOUTH)))){
_local5 = HORIZONTAL;
};
_local6 = SMALL_ROAD;
if (_arg4 > 2){
_local6 = LARGE_ROAD;
};
_local7 = transitions[_arg3][_local5][_local6];
Util.fillAddTile(_arg1, _local7);
}
protected function placeCorner(_arg1:Point, _arg2:int, _arg3:int, _arg4:int):void{
var _local5:int;
var _local6:int;
_local5 = this.getType(_arg3, _arg4);
_local6 = corners[_arg2][_local5];
Util.addTile(_arg1, _local6);
}
}
}//package mapgen
Section 96
//PlaceTerrain (mapgen.PlaceTerrain)
package mapgen {
public class PlaceTerrain extends PlaceRoot {
public static var shallowWater:Terrain = new Terrain(PlaceTerrain.isWater, true, BackgroundType.WATER, [989, 160, 165, 161, 60, 80, 949, 1119, 65, 969, 145, 1118, 64, 1139, 1138, 929]);
protected static var cornerOffset:Array = [[new Point(0, -1), new Point(1, -1), new Point(1, 0)], [new Point(0, -1), new Point(-1, -1), new Point(-1, 0)], [new Point(0, 1), new Point(1, 1), new Point(1, 0)], [new Point(0, 1), new Point(-1, 1), new Point(-1, 0)]];
public static var park:Terrain = new Terrain(PlaceTerrain.isPark, false, BackgroundType.PARK, [87, 215, 216, 67, 195, 88, 231, 68, 196, 232, 86, 66, 107, 108, 106, 246]);
public static var deepWater:Terrain = new Terrain(PlaceTerrain.isDeepWater, true, BackgroundType.WATER, [147, 166, 168, 167, 126, 146, 1082, 1097, 128, 1086, 148, 1096, 127, 1077, 1095, 994]);
public function PlaceTerrain():void{
}
public function place(_arg1:Section, _arg2:Terrain):void{
var _local3:Point;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
Util.fillChangeBlocked(_arg1, _arg2.isBlocked());
Util.fillBackground(_arg1, _arg2.getBackground());
Util.fillClearTiles(_arg1);
_local3 = new Point(0, 0);
_local4 = _arg1.offset.y;
_local5 = _arg1.limit.y;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local7 = _arg1.offset.x;
_local8 = _arg1.limit.x;
while (_local7 < _local8) {
var _temp2 = _local7;
_local7 = (_local7 + 1);
_local9 = _temp2;
_local3.x = _local9;
_local3.y = _local6;
_local10 = this.checkCorners(_local3, _arg2);
Util.addTile(_local3, _arg2.getCorner(_local10));
};
};
}
protected function checkCorners(_arg1:Point, _arg2:Terrain):int{
var _local3:int;
var _local4:Point;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Array;
var _local10:Point;
var _local11:MapCell;
_local3 = 0;
_local4 = new Point(0, 0);
_local5 = 0;
_local6 = PlaceRoot.CORNER_COUNT;
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp1;
_local8 = 0;
_local9 = cornerOffset[_local7];
while (_local8 < _local9.length) {
_local10 = _local9[_local8];
_local8++;
_local4.x = (_arg1.x + _local10.x);
_local4.y = (_arg1.y + _local10.y);
if (!Lib.outsideMap(_local4)){
_local11 = Game.map.getCell(_local4.x, _local4.y);
if ((((((((_local11.edit == null)) || (!(_arg2.isTerrain(_local11.edit.getType()))))) && (((!((_local11.getBackground() == _arg2.getBackground()))) || (!((_arg2 == shallowWater))))))) && (!((_local11.getBackground() == BackgroundType.EDGE))))){
_local3 = (_local3 | (1 << _local7));
};
};
};
};
return (_local3);
}
protected static function isDeepWater(_arg1:EditType):Boolean{
return ((_arg1 == EditBox.DEEP_WATER));
}
protected static function isWater(_arg1:EditType):Boolean{
return ((((((_arg1 == EditBox.SHALLOW_WATER)) || ((_arg1 == EditBox.DEEP_WATER)))) || ((_arg1 == EditBox.BRIDGE))));
}
protected static function isPark(_arg1:EditType):Boolean{
return ((((((((((_arg1 == EditBox.SHALLOW_WATER)) || ((_arg1 == EditBox.CHURCH)))) || ((_arg1 == EditBox.HOUSE)))) || ((_arg1 == EditBox.PARK)))) || ((_arg1 == EditBox.BRIDGE))));
}
}
}//package mapgen
Section 97
//Section (mapgen.Section)
package mapgen {
import flash.*;
public class Section {
public var east:Street;
public var north:Street;
public var south:Street;
public var offset:Point;
public var limit:Point;
public var west:Street;
public function Section(_arg1:Point=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
this.offset = _arg1.clone();
this.limit = _arg2.clone();
this.north = null;
this.south = null;
this.east = null;
this.west = null;
};
}
public function northeast():Point{
return (new Point((this.limit.x - 1), this.offset.y));
}
public function setStreet(_arg1:Direction, _arg2:Street):void{
var _local3:enum;
_local3 = _arg1;
switch (_local3.index){
case 0:
this.north = _arg2;
break;
case 1:
this.south = _arg2;
break;
case 2:
this.east = _arg2;
break;
case 3:
this.west = _arg2;
break;
};
}
public function southeast():Point{
return (new Point((this.limit.x - 1), (this.limit.y - 1)));
}
public function slice(_arg1:Direction, _arg2:int):Section{
var _local3:Section;
var _local4:enum;
_local3 = null;
_local4 = _arg1;
switch (_local4.index){
case 0:
_local3 = new Section(this.offset, new Point(this.limit.x, (this.offset.y + _arg2)));
break;
case 1:
_local3 = new Section(new Point(this.offset.x, (this.limit.y - _arg2)), this.limit);
break;
case 2:
_local3 = new Section(new Point((this.limit.x - _arg2), this.offset.y), this.limit);
break;
case 3:
_local3 = new Section(this.offset, new Point((this.offset.x + _arg2), this.limit.y));
break;
};
_local3.north = this.north;
_local3.south = this.south;
_local3.east = this.east;
_local3.west = this.west;
_local3.setStreet(Util.opposite(_arg1), null);
return (_local3);
}
public function corner(_arg1:int):Point{
var _local2:Point;
_local2 = null;
if (_arg1 == PlaceRoot.NORTHEAST){
_local2 = this.northeast();
} else {
if (_arg1 == PlaceRoot.NORTHWEST){
_local2 = this.northwest();
} else {
if (_arg1 == PlaceRoot.SOUTHEAST){
_local2 = this.southeast();
} else {
if (_arg1 == PlaceRoot.SOUTHWEST){
_local2 = this.southwest();
};
};
};
};
return (_local2);
}
public function randSublot(_arg1:Point):Section{
var _local2:int;
var _local3:int;
var _local4:Section;
_local2 = Util.rand((((this.limit.x - this.offset.x) - _arg1.x) + 1));
_local3 = Util.rand((((this.limit.y - this.offset.y) - _arg1.y) + 1));
_local4 = new Section(new Point((this.offset.x + _local2), (this.offset.y + _local3)), new Point(((this.offset.x + _local2) + _arg1.x), ((this.offset.y + _local3) + _arg1.y)));
_local4.north = this.north;
_local4.south = this.south;
_local4.east = this.east;
_local4.west = this.west;
return (_local4);
}
public function extend(_arg1:Direction, _arg2:int):Section{
var _local3:Section;
var _local4:enum;
_local3 = null;
_local4 = _arg1;
switch (_local4.index){
case 0:
_local3 = new Section(new Point(this.offset.x, (this.offset.y - _arg2)), this.limit);
break;
case 1:
_local3 = new Section(this.offset, new Point(this.limit.x, (this.limit.y + _arg2)));
break;
case 2:
_local3 = new Section(this.offset, new Point((this.limit.x + _arg2), this.limit.y));
break;
case 3:
_local3 = new Section(new Point((this.offset.x - _arg2), this.offset.y), this.limit);
break;
};
return (_local3);
}
public function center():Section{
return (new Section(new Point((this.offset.x + 1), (this.offset.y + 1)), new Point((this.limit.x - 1), (this.limit.y - 1))));
}
public function clone():Section{
var _local1:Section;
_local1 = new Section(this.offset, this.limit);
_local1.north = this.north;
_local1.south = this.south;
_local1.east = this.east;
_local1.west = this.west;
return (_local1);
}
public function contains(_arg1:Point):Boolean{
return ((((((((_arg1.x >= this.offset.x)) && ((_arg1.x < this.limit.x)))) && ((_arg1.y >= this.offset.y)))) && ((_arg1.y < this.limit.y))));
}
public function remainder(_arg1:Direction, _arg2:int):Section{
return (this.slice(Util.opposite(_arg1), (this.dirSize(_arg1) - _arg2)));
}
public function dirSize(_arg1:Direction):int{
var _local2:int;
_local2 = 0;
if ((((_arg1 == Direction.NORTH)) || ((_arg1 == Direction.SOUTH)))){
_local2 = (this.limit.y - this.offset.y);
} else {
_local2 = (this.limit.x - this.offset.x);
};
return (_local2);
}
public function isNear(_arg1:Point, _arg2:int):Boolean{
var _local3:int;
var _local4:int;
_local3 = 0;
if (_arg1.x < this.offset.x){
_local3 = (this.offset.x - _arg1.x);
} else {
if (_arg1.x >= this.limit.x){
_local3 = ((_arg1.x - this.limit.x) + 1);
};
};
_local4 = 0;
if (_arg1.y < this.offset.y){
_local4 = (this.offset.y - _arg1.y);
} else {
if (_arg1.y >= this.limit.y){
_local4 = ((_arg1.y - this.limit.y) + 1);
};
};
return ((((_local3 < _arg2)) && ((_local4 < _arg2))));
}
public function northwest():Point{
return (this.offset.clone());
}
public function getSize():Point{
return (new Point((this.limit.x - this.offset.x), (this.limit.y - this.offset.y)));
}
public function getStreet(_arg1:Direction):Street{
var _local2:Street;
var _local3:enum;
_local2 = this.north;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = this.north;
break;
case 1:
_local2 = this.south;
break;
case 2:
_local2 = this.east;
break;
case 3:
_local2 = this.west;
break;
};
return (_local2);
}
public function centerPoint():Point{
var _local1:int;
var _local2:int;
_local1 = ((this.limit.x + this.offset.x) - 1);
_local2 = ((this.limit.y + this.offset.y) - 1);
return (new Point(Math.floor((_local1 / 2)), Math.floor((_local2 / 2))));
}
public function southwest():Point{
return (new Point(this.offset.x, (this.limit.y - 1)));
}
public function edge(_arg1:Direction):Section{
var _local2:Section;
var _local3:enum;
_local2 = null;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = new Section(new Point((this.offset.x + 1), this.offset.y), new Point((this.limit.x - 1), (this.offset.y + 1)));
_local2.north = this.north;
break;
case 1:
_local2 = new Section(new Point((this.offset.x + 1), (this.limit.y - 1)), new Point((this.limit.x - 1), this.limit.y));
_local2.south = this.south;
break;
case 2:
_local2 = new Section(new Point((this.limit.x - 1), (this.offset.y + 1)), new Point(this.limit.x, (this.limit.y - 1)));
_local2.east = this.east;
break;
case 3:
_local2 = new Section(new Point(this.offset.x, (this.offset.y + 1)), new Point((this.offset.x + 1), (this.limit.y - 1)));
break;
};
return (_local2);
}
public static function save(_arg1:Section){
return ({offset:_arg1.offset.save(), limit:_arg1.limit.save()});
}
public static function load(_arg1):Section{
return (new Section(Point.load(_arg1.offset), Point.load(_arg1.limit)));
}
}
}//package mapgen
Section 98
//Street (mapgen.Street)
package mapgen {
import logic.*;
import flash.*;
public class Street {
protected var isVertical:Boolean;
protected var width:int;
protected var greater:Array;
protected var drawLessEnd:Boolean;
protected var less:Array;
protected var start:Point;
protected var drawGreaterEnd:Boolean;
protected var length:int;
protected static var road:Array = [[Tile.alley], [Tile.twoLaneLeft, Tile.twoLaneRight], [Tile.multiLaneA, Tile.multiLaneG, Tile.multiLaneF], [Tile.multiLaneA, Tile.multiLaneC, Tile.multiLaneD, Tile.multiLaneF]];
protected static var greaterEdgeHoriz:Array = [[Tile.swCornerFadeBoth, Tile.swCornerFadeBoth, Tile.swCornerFadeBoth, Tile.fadeWestWalkSouth, Tile.fadeWestAlleySouth], [Tile.swCornerFadeSouth, Tile.seCornerFadeSouth, Tile.fadeFromSouth, Tile.walkSouth, Tile.alleySouth], [Tile.seCornerFadeBoth, Tile.seCornerFadeBoth, Tile.seCornerFadeBoth, Tile.fadeEastWalkSouth, Tile.fadeEastAlleySouth]];
protected static var centerVert:Array = [Tile.fadeFromNorth, Tile.centerRoad, Tile.fadeFromSouth];
protected static var centerHoriz:Array = [Tile.fadeFromWest, Tile.centerRoad, Tile.fadeFromEast];
protected static var greaterEdgeVert:Array = [[Tile.neCornerFadeBoth, Tile.neCornerFadeBoth, Tile.neCornerFadeBoth, Tile.fadeNorthWalkEast, Tile.fadeNorthAlleyEast], [Tile.neCornerFadeEast, Tile.seCornerFadeEast, Tile.fadeFromEast, Tile.walkEast, Tile.alleyEast], [Tile.seCornerFadeBoth, Tile.seCornerFadeBoth, Tile.seCornerFadeBoth, Tile.fadeSouthWalkEast, Tile.fadeSouthAlleyEast]];
protected static var lessEdgeVert:Array = [[Tile.nwCornerFadeBoth, Tile.nwCornerFadeBoth, Tile.nwCornerFadeBoth, Tile.fadeNorthWalkWest, Tile.fadeNorthAlleyWest], [Tile.nwCornerFadeWest, Tile.swCornerFadeWest, Tile.fadeFromWest, Tile.walkWest, Tile.alleyWest], [Tile.swCornerFadeBoth, Tile.swCornerFadeBoth, Tile.swCornerFadeBoth, Tile.fadeSouthWalkWest, Tile.fadeSouthAlleyWest]];
protected static var parkingAlleyOverlay:Array = [[649, 650, 648], [669, 670, 668], [609, 629, 628], [610, 630, 608]];
protected static var parkingOverlay:Array = [[590, 591, 236], [450, 451, 238], [651, 671, 239], [611, 631, 237]];
protected static var lessEdgeHoriz:Array = [[Tile.nwCornerFadeBoth, Tile.nwCornerFadeBoth, Tile.nwCornerFadeBoth, Tile.fadeWestWalkNorth, Tile.fadeWestAlleyNorth], [Tile.nwCornerFadeNorth, Tile.neCornerFadeNorth, Tile.fadeFromNorth, Tile.walkNorth, Tile.alleyNorth], [Tile.neCornerFadeBoth, Tile.neCornerFadeBoth, Tile.neCornerFadeBoth, Tile.fadeEastWalkNorth, Tile.fadeEastAlleyNorth]];
public function Street(_arg1:Point=null, _arg2:int=0, _arg3:int=0, _arg4:Boolean=false, _arg5:Street=null, _arg6:Street=null):void{
var _local7:int;
var _local8:int;
var _local9:CrossStreet;
var _local10:int;
super();
if (!Boot.skip_constructor){
this.start = _arg1.clone();
this.width = _arg2;
this.length = _arg3;
this.isVertical = _arg4;
this.less = [];
this.greater = [];
_local7 = 0;
_local8 = this.length;
while (_local7 < _local8) {
var _temp1 = _local7;
_local7 = (_local7 + 1);
_local10 = _temp1;
this.less.push(CrossStreet.NONE);
this.greater.push(CrossStreet.NONE);
};
_local9 = CrossStreet.NONE;
if (this.width == 1){
_local9 = CrossStreet.ALLEY;
} else {
if (this.width > 1){
_local9 = CrossStreet.ROAD;
};
};
if (_arg5 != null){
_arg5.addGreater(this.start, this.width, _local9);
};
if (_arg6 != null){
_arg6.addLess(this.start, this.width, _local9);
};
this.drawLessEnd = !((_arg5 == null));
this.drawGreaterEnd = !((_arg6 == null));
};
}
public function edgeCol(_arg1:int, _arg2:int, _arg3:Array, _arg4:Array):int{
if (((this.isRoad(_arg1, _arg4)) && (!(this.isRoad((_arg1 - 1), _arg4))))){
return (_arg3[_arg2][0]);
};
if (((this.isRoad(_arg1, _arg4)) && (!(this.isRoad((_arg1 + 1), _arg4))))){
return (_arg3[_arg2][1]);
};
if (this.isRoad(_arg1, _arg4)){
return (_arg3[_arg2][2]);
};
if (_arg4[_arg1] == CrossStreet.ALLEY){
return (_arg3[_arg2][4]);
};
return (_arg3[_arg2][3]);
}
public function draw(_arg1:Map, _arg2=null):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local3 = 0;
_local4 = this.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = 0;
_local7 = this.width;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
this.drawTile(_arg1, _local5, _local8);
};
};
if (_arg2 != false){
this.fillStreet(_arg1, Parameter.rubbleStreetFactor, this.placeUnbiasedSalvage);
if (Game.settings.getEasterEgg() != GameSettings.FIDDLERSGREEN){
this.fillStreet(_arg1, Parameter.zombieStreetFactor, Util.placeSingleZombie);
};
};
}
protected function calculateOverlay(_arg1:int, _arg2:int):int{
var _local3:int;
_local3 = this.calculateLessOverlay(_arg1, _arg2);
if (_local3 == Tile.NO_TILE){
_local3 = this.calculateGreaterOverlay(_arg1, _arg2);
};
return (_local3);
}
public function getWidth():int{
return (this.width);
}
protected function drawTile(_arg1:Map, _arg2:int, _arg3:int):void{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local4 = this.calculateTile(_arg2, _arg3);
_local5 = 0;
_local6 = 0;
if (this.isVertical){
_local5 = (this.start.x + _arg3);
_local6 = (this.start.y + _arg2);
} else {
_local5 = (this.start.x + _arg2);
_local6 = (this.start.y + _arg3);
};
_arg1.getCell(_local5, _local6).clearTiles();
_arg1.getCell(_local5, _local6).addTile(_local4);
_local7 = Tile.NO_TILE;
_local8 = Tile.NO_TILE;
if (this.width > 1){
_local7 = this.calculateOverlay(_arg2, _arg3);
} else {
_local7 = this.calculateLessOverlay(_arg2, _arg3);
_local8 = this.calculateGreaterOverlay(_arg2, _arg3);
};
if (_local7 != Tile.NO_TILE){
_arg1.getCell(_local5, _local6).addTile(_local7);
};
if (_local8 != Tile.NO_TILE){
_arg1.getCell(_local5, _local6).addTile(_local8);
};
if (this.width > 1){
_arg1.getCell(_local5, _local6).setBackground(BackgroundType.STREET);
} else {
_arg1.getCell(_local5, _local6).setBackground(BackgroundType.ALLEY);
};
_arg1.getCell(_local5, _local6).clearBlocked();
}
public function setDrawGreater():void{
this.drawGreaterEnd = true;
}
protected function isCrossed(_arg1:int):Boolean{
return ((((this.less[_arg1] == CrossStreet.ROAD)) || ((this.greater[_arg1] == CrossStreet.ROAD))));
}
protected function calculateIntersection(_arg1:int, _arg2:int):int{
if (((!(this.isCrossed((_arg1 - 1)))) && (!(this.isCrossed((_arg1 - 2)))))){
return (this.calculateCol(_arg1, _arg2, Tile.BEGIN));
};
if (((!(this.isCrossed((_arg1 + 1)))) && (!(this.isCrossed((_arg1 + 2)))))){
return (this.calculateCol(_arg1, _arg2, Tile.END));
};
return (this.calculateCol(_arg1, _arg2, Tile.MIDDLE));
}
public function addGreater(_arg1:Point, _arg2:int, _arg3:CrossStreet):void{
this.addChild(_arg1, _arg2, _arg3, this.greater);
}
public function addLess(_arg1:Point, _arg2:int, _arg3:CrossStreet):void{
this.addChild(_arg1, _arg2, _arg3, this.less);
}
protected function hasAlley(_arg1:int, _arg2:int):Boolean{
return ((((((_arg2 == 0)) && ((this.less[_arg1] == CrossStreet.ALLEY)))) || ((((_arg2 == (this.width - 1))) && ((this.greater[_arg1] == CrossStreet.ALLEY))))));
}
public function getLength():int{
return (this.length);
}
protected function getNormal(_arg1:int, _arg2:int, _arg3:int):int{
var _local4:int;
var _local5:int;
var _local6:int;
_local4 = 0;
_local5 = 0;
_local6 = 0;
if (this.hasAlley(_arg1, _arg2)){
_local5 = this.getAlleyOffset(_arg2);
if (this.isVertical){
_local4 = Tile.alleyVertical[_arg3];
_local6 = Tile.verticalFactor;
} else {
_local4 = Tile.alleyHorizontal[_arg3];
_local6 = Tile.horizontalFactor;
};
} else {
if (this.width <= 4){
_local5 = road[(this.width - 1)][_arg2];
} else {
_local5 = this.roadTile(this.width, _arg2);
};
if (this.isVertical){
_local4 = Tile.roadVertical[_arg3];
_local6 = Tile.verticalFactor;
} else {
_local4 = Tile.roadHorizontal[_arg3];
_local6 = Tile.horizontalFactor;
};
};
return ((_local4 + (_local5 * _local6)));
}
protected function getAlleyOffset(_arg1:int):int{
var _local2:int;
_local2 = 0;
if (_arg1 == 0){
if (this.width == 2){
_local2 = Tile.alleyCrossTwoLeft;
} else {
_local2 = Tile.alleyCrossMultiLeft;
};
} else {
if (this.width == 2){
_local2 = Tile.alleyCrossTwoRight;
} else {
_local2 = Tile.alleyCrossMultiRight;
};
};
return (_local2);
}
protected function crossedBy(_arg1:int, _arg2:CrossStreet):Boolean{
return ((((this.less[_arg1] == _arg2)) || ((this.greater[_arg1] == _arg2))));
}
protected function fillStreet(_arg1:Map, _arg2:Number, _arg3:Function):void{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local4 = (Math.ceil(((this.length * this.width) * _arg2)) + 1);
_local5 = Util.rand(_local4);
_local6 = 0;
while (_local6 < _local5) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local7 = _temp1;
_local8 = 0;
_local9 = 0;
if (this.isVertical){
_local8 = (this.start.x + Util.rand(this.width));
_local9 = (this.start.y + Util.rand(this.length));
} else {
_local8 = (this.start.x + Util.rand(this.length));
_local9 = (this.start.y + Util.rand(this.width));
};
_arg3(_arg1, _local8, _local9);
};
}
protected function isRoad(_arg1:int, _arg2:Array):Boolean{
return ((_arg2[_arg1] == CrossStreet.ROAD));
}
protected function roadTile(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:Boolean;
_local3 = Tile.multiLaneG;
_local4 = ((_arg1 % 2) == 0);
if (_arg2 == 0){
_local3 = Tile.multiLaneA;
} else {
if (_arg2 == (_arg1 - 1)){
_local3 = Tile.multiLaneF;
} else {
if (((_local4) && ((_arg2 == (Math.floor((_arg1 / 2)) - 1))))){
_local3 = Tile.multiLaneC;
} else {
if (((_local4) && ((_arg2 == Math.floor((_arg1 / 2)))))){
_local3 = Tile.multiLaneD;
} else {
if (((!(_local4)) && ((_arg2 == Math.floor((_arg1 / 2)))))){
_local3 = Tile.multiLaneG;
} else {
if (_arg2 < Math.floor((_arg1 / 2))){
_local3 = Tile.multiLaneB;
} else {
_local3 = Tile.multiLaneE;
};
};
};
};
};
};
return (_local3);
}
protected function placeUnbiasedSalvage(_arg1:Map, _arg2:int, _arg3:int):void{
Util.placeSingleSalvage(_arg1, _arg2, _arg3);
}
protected function calculateLessOverlay(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = Tile.NO_TILE;
if (_arg2 == 0){
_local4 = 0;
if (this.isVertical){
_local4 = 2;
};
_local3 = this.genericOverlay(this.less[_arg1], _local4);
};
return (_local3);
}
protected function calculateTile(_arg1:int, _arg2:int):int{
var _local3:int;
_local3 = 0;
if (_arg1 == 0){
if (this.drawLessEnd){
_local3 = this.getNormal(_arg1, _arg2, Tile.BEGIN);
} else {
_local3 = this.getNormal(_arg1, _arg2, Tile.MIDDLE);
};
} else {
if (_arg1 == (this.length - 1)){
if (this.drawGreaterEnd){
_local3 = this.getNormal(_arg1, _arg2, Tile.END);
} else {
_local3 = this.getNormal(_arg1, _arg2, Tile.MIDDLE);
};
} else {
if (((((!(this.isCrossed(_arg1))) && (!(this.isCrossed((_arg1 - 1)))))) && (this.isCrossed((_arg1 + 1))))){
if (((!(this.crossedBy(_arg1, CrossStreet.BEGIN_PARKING_ENTRANCE))) && (!(this.crossedBy(_arg1, CrossStreet.PARKING_ENTRANCE))))){
_local3 = this.getNormal(_arg1, _arg2, Tile.END);
} else {
_local3 = this.getNormal(_arg1, _arg2, Tile.MIDDLE);
};
} else {
if (((((!(this.isCrossed(_arg1))) && (!(this.isCrossed((_arg1 + 1)))))) && (this.isCrossed((_arg1 - 1))))){
if (((!(this.crossedBy(_arg1, CrossStreet.END_PARKING_ENTRANCE))) && (!(this.crossedBy(_arg1, CrossStreet.PARKING_ENTRANCE))))){
_local3 = this.getNormal(_arg1, _arg2, Tile.BEGIN);
} else {
_local3 = this.getNormal(_arg1, _arg2, Tile.MIDDLE);
};
} else {
if (((((this.isCrossed(_arg1)) || (this.isCrossed((_arg1 - 1))))) || (this.isCrossed((_arg1 + 1))))){
_local3 = this.calculateIntersection(_arg1, _arg2);
} else {
_local3 = this.getNormal(_arg1, _arg2, Tile.MIDDLE);
};
};
};
};
};
return (_local3);
}
protected function genericOverlay(_arg1:CrossStreet, _arg2:int):int{
var _local3:int;
var _local4:Array;
_local3 = 0;
_local4 = parkingOverlay;
if (this.width == 1){
_local4 = parkingAlleyOverlay;
};
if (_arg1 == CrossStreet.BEGIN_PARKING_ENTRANCE){
_local3 = 0;
} else {
if (_arg1 == CrossStreet.END_PARKING_ENTRANCE){
_local3 = 1;
} else {
if (_arg1 == CrossStreet.PARKING_ENTRANCE){
_local3 = 2;
} else {
return (Tile.NO_TILE);
};
};
};
return (_local4[_arg2][_local3]);
}
public function calculateCol(_arg1:int, _arg2:int, _arg3:int):int{
if (_arg2 == 0){
if (this.isVertical){
return (this.edgeCol(_arg1, _arg3, lessEdgeVert, this.less));
};
return (this.edgeCol(_arg1, _arg3, lessEdgeHoriz, this.less));
} else {
if (_arg2 == (this.width - 1)){
if (this.isVertical){
return (this.edgeCol(_arg1, _arg3, greaterEdgeVert, this.greater));
};
return (this.edgeCol(_arg1, _arg3, greaterEdgeHoriz, this.greater));
} else {
if (this.isVertical){
return (centerVert[_arg3]);
};
};
};
return (!NULL!);
}
public function addChild(_arg1:Point, _arg2:int, _arg3:CrossStreet, _arg4:Array):void{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local5 = 0;
if (this.isVertical){
_local5 = (_arg1.y - this.start.y);
} else {
_local5 = (_arg1.x - this.start.x);
};
_local6 = _local5;
_local7 = (_local5 + _arg2);
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp1;
_arg4[_local8] = _arg3;
};
}
protected function calculateGreaterOverlay(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = Tile.NO_TILE;
if (_arg2 == (this.width - 1)){
_local4 = 0;
if (this.isVertical){
_local4 = 2;
};
_local3 = this.genericOverlay(this.greater[_arg1], (_local4 + 1));
};
return (_local3);
}
public function setDrawLess():void{
this.drawLessEnd = true;
}
}
}//package mapgen
Section 99
//Terrain (mapgen.Terrain)
package mapgen {
import flash.*;
public class Terrain {
protected var blocked:Boolean;
protected var background:BackgroundType;
protected var terrainFunc:Function;
protected var corners:Array;
public function Terrain(_arg1:Function=null, _arg2:Boolean=false, _arg3:BackgroundType=null, _arg4:Array=null):void{
if (!Boot.skip_constructor){
this.terrainFunc = _arg1;
this.blocked = _arg2;
this.background = _arg3;
this.corners = _arg4;
};
}
public function isBlocked():Boolean{
return (this.blocked);
}
public function getBackground():BackgroundType{
return (this.background);
}
public function getCorner(_arg1:int):int{
return (this.corners[_arg1]);
}
public function isTerrain(_arg1:EditType):Boolean{
return (this.terrainFunc(_arg1));
}
}
}//package mapgen
Section 100
//Util (mapgen.Util)
package mapgen {
import logic.*;
import twister.*;
import haxe.*;
public class Util {
public static var HOUSE:int = 8;
public static var PARKING_LOT:int = 9;
public static var APARTMENT:int = 1;
public static var MALL:int = 7;
protected static var churchEntrances:Array = [new Point(1, 0), new Point(1, 2), new Point(2, 1), new Point(0, 1)];
public static var CHURCH:int = 5;
public static var HARDWARE_STORE:int = 4;
public static var HOSPITAL:int = 6;
public static var STANDARD:int = 0;
protected static var houseEntrances:Array = [new Point(1, 0), new Point(0, 1), new Point(1, 1), new Point(0, 0)];
protected static var generator:Twister = null;
public static var SUPERMARKET:int = 2;
public static var POLICE_STATION:int = 3;
protected static function fillInGaps(_arg1:Point, _arg2, _arg3:Grid):void{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:Point;
_local4 = 1;
_local5 = (_arg2.y - 1);
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local7 = 1;
_local8 = (_arg2.x - 1);
while (_local7 < _local8) {
var _temp2 = _local7;
_local7 = (_local7 + 1);
_local9 = _temp2;
if (neitherTouchBlockedGap(_local9, _local6, _arg1, _arg3)){
_local10 = new Point((_local9 + _arg1.x), (_local6 + _arg1.y));
addRandTile(_local10, Tile.trees);
changeBlocked(_local10, true);
};
};
};
}
public static function setArea(_arg1:Section, _arg2:Function, _arg3):void{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:Point;
_local4 = _arg1.offset.y;
_local5 = _arg1.limit.y;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local7 = _arg1.offset.x;
_local8 = _arg1.limit.x;
while (_local7 < _local8) {
var _temp2 = _local7;
_local7 = (_local7 + 1);
_local9 = _temp2;
_local10 = new Point(_local9, _local6);
_arg2(_local10, _arg3);
};
};
}
public static function fillBackground(_arg1:Section, _arg2:BackgroundType):void{
setArea(_arg1, Util.setBackground, _arg2);
}
public static function drawBuilding(_arg1:Section, _arg2:Building, _arg3=null):void{
var _local4:Boolean;
var _local5:int;
var _local6:PlaceParkingLot;
var _local7:Point;
var _local8:Direction;
var _local9:Point;
var _local10:List;
var _local11:Direction;
var _local12:int;
var _local13:BuildingRoot;
_local4 = true;
if (_arg3 == false){
_local4 = false;
};
_local5 = _arg2.getType();
if (_local5 == PARKING_LOT){
_local6 = new PlaceParkingLot();
_local7 = _arg2.getEntrance();
_local8 = _arg2.getEntranceDir();
_local9 = null;
if ((((_local7.x == (_arg1.limit.x - 1))) && ((((_local8 == Direction.NORTH)) || ((_local8 == Direction.SOUTH)))))){
_local9 = new Point(_arg1.offset.x, _local7.y);
};
if ((((_local7.y == (_arg1.limit.y - 1))) && ((((_local8 == Direction.EAST)) || ((_local8 == Direction.WEST)))))){
_local9 = new Point(_local7.x, _arg1.offset.y);
};
_local10 = new List();
_local10.add(_local7);
if (_local9 == null){
PlaceParkingLot.addCrossStreet(_arg1, _local7, _local8, CrossStreet.PARKING_ENTRANCE);
} else {
_local10.add(_local9);
PlaceParkingLot.addCrossStreet(_arg1, _local9, _local8, CrossStreet.BEGIN_PARKING_ENTRANCE);
PlaceParkingLot.addCrossStreet(_arg1, _local7, _local8, CrossStreet.END_PARKING_ENTRANCE);
};
_local11 = Lib.rotateCW(_local8);
_local12 = _arg1.dirSize(_local11);
if ((((_local12 == 2)) || ((_local12 == 3)))){
_local6.place(_arg1, _local10, _local4, Lib.rotateCW(_local8));
} else {
_local6.place(_arg1, _local10, _local4, _local8);
};
} else {
_local13 = null;
if (_local5 == CHURCH){
_local13 = new BuildingChurch(_arg2);
} else {
if (_local5 == HOSPITAL){
_local13 = new BuildingHospital(_arg2);
} else {
if (_local5 == HOUSE){
_local13 = new BuildingHouse(_arg2);
} else {
if (_local5 == MALL){
_local13 = new BuildingMall(_arg2, _arg1);
} else {
if (_local5 == HARDWARE_STORE){
_local13 = new BuildingHardware(_arg2);
} else {
if (_local5 == POLICE_STATION){
_local13 = new BuildingPolice(_arg2);
} else {
_local13 = new BuildingGeneric(_arg2);
};
};
};
};
};
};
_local13.place(_arg1);
};
}
public static function fillClearTiles(_arg1:Section):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
_local2 = _arg1.offset.y;
_local3 = _arg1.limit.y;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local5 = _arg1.offset.x;
_local6 = _arg1.limit.x;
while (_local5 < _local6) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp2;
clearTiles(new Point(_local7, _local4));
};
};
}
public static function changeBlocked(_arg1:Point, _arg2:Boolean):void{
if (_arg2){
Game.map.getCell(_arg1.x, _arg1.y).setBlocked();
} else {
Game.map.getCell(_arg1.x, _arg1.y).clearBlocked();
};
}
public static function forcePlaceZombie(_arg1:int, _arg2:int):void{
var _local3:int;
var _local4:Zombie;
_local3 = Lib.directionToAngle(randDirection());
_local4 = new Zombie(_arg1, _arg2, _local3, _arg1, _arg2, Zombie.START_SPAWN);
}
public static function rand(_arg1:int):int{
return ((generator.getPositiveInt() % _arg1));
}
public static function setBackground(_arg1:Point, _arg2:BackgroundType):void{
Game.map.getCell(_arg1.x, _arg1.y).setBackground(_arg2);
}
protected static function chooseRandEntrance(_arg1:Section, _arg2:Direction, _arg3:int):Point{
if (_arg2 == Direction.NORTH){
return (new Point((rand(((_arg1.limit.x - _arg1.offset.x) - (_arg3 * 2))) + _arg3), 0));
};
if (_arg2 == Direction.SOUTH){
return (new Point((rand(((_arg1.limit.x - _arg1.offset.x) - (_arg3 * 2))) + _arg3), ((_arg1.limit.y - _arg1.offset.y) - 1)));
};
if (_arg2 == Direction.EAST){
return (new Point(((_arg1.limit.x - _arg1.offset.x) - 1), (rand(((_arg1.limit.y - _arg1.offset.y) - (_arg3 * 2))) + _arg3)));
};
return (new Point(0, (rand(((_arg1.limit.y - _arg1.offset.y) - (_arg3 * 2))) + _arg3)));
}
public static function addRandTile(_arg1:Point, _arg2:Array):void{
var _local3:int;
_local3 = rand(_arg2.length);
addTile(_arg1, _arg2[_local3]);
}
public static function placeSingleZombie(_arg1:Map, _arg2:int, _arg3:int):void{
var _local4:Point;
var _local5:int;
var _local6:int;
_local4 = Game.settings.getStart();
_local5 = Math.floor(Math.abs((_arg2 - _local4.x)));
_local6 = Math.floor(Math.abs((_arg3 - _local4.y)));
if ((((_local5 > Option.hqInfluence)) || ((_local6 > Option.hqInfluence)))){
if (_arg1.getCell(_arg2, _arg3).getBuilding() != null){
_arg1.getCell(_arg2, _arg3).getBuilding().addZombies(1);
} else {
if (!_arg1.getCell(_arg2, _arg3).isBlocked()){
forcePlaceZombie(_arg2, _arg3);
};
};
};
}
protected static function neitherTouchBlockedGap(_arg1:int, _arg2:int, _arg3:Point, _arg4:Grid):Boolean{
return (((!(_arg4.get(_arg1, _arg2))) && (!(Game.map.getCell((_arg1 + _arg3.x), (_arg2 + _arg3.y)).isBlocked()))));
}
public static function blockRandom(_arg1:Section, _arg2:Array, _arg3:Array):void{
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:Point;
var _local11:int;
_local4 = ((_arg1.limit.x - _arg1.offset.x) * (_arg1.limit.y - _arg1.offset.y));
_local5 = Math.floor((_local4 / 3));
_local6 = 0;
while (_local6 < _local5) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local7 = _temp1;
_local8 = (rand((_arg1.limit.x - _arg1.offset.x)) + _arg1.offset.x);
_local9 = (rand((_arg1.limit.y - _arg1.offset.y)) + _arg1.offset.y);
if (Game.map.getCell(_local8, _local9).getTiles().length <= 1){
_local10 = new Point(_local8, _local9);
_local11 = randWeightedIndex(_arg3);
addRandTile(_local10, _arg2[_local11]);
changeBlocked(_local10, true);
};
};
}
public static function clearTiles(_arg1:Point):void{
Game.map.getCell(_arg1.x, _arg1.y).clearTiles();
}
public static function subdivide(_arg1:Section, _arg2:int, _arg3:List):void{
var _local4:Division;
_local4 = new Division(_arg2);
_local4.split(_arg1, 0);
if ((((_local4.getLeft() == null)) || ((_local4.getRight() == null)))){
_arg3.add(_arg1);
} else {
subdivide(_local4.getLeft(), _arg2, _arg3);
subdivide(_local4.getRight(), _arg2, _arg3);
};
}
protected static function chooseBuildingType(_arg1:Section, _arg2):int{
var _local3:int;
_local3 = STANDARD;
if (_arg2 == null){
if (_arg1.isNear(Game.settings.getStart(), Option.hqInfluence)){
_local3 = randWeightedIndex(Option.hqBuildingDistribution);
} else {
if ((((Game.settings.getEasterEgg() == GameSettings.CUMBERLAND)) && ((rand(10) < 2)))){
_local3 = HOSPITAL;
} else {
_local3 = randWeightedIndex(Option.buildingDistribution);
if ((((_local3 == STANDARD)) && ((Game.settings.getEasterEgg() == GameSettings.RACCOONCITY)))){
_local3 = randWeightedIndex(Option.buildingDistribution);
};
};
};
} else {
_local3 = _arg2;
};
return (_local3);
}
public static function calculateDir(_arg1:Point, _arg2:Section):Direction{
var _local3:Direction;
_local3 = Direction.EAST;
if (_arg1 != null){
if (_arg1.x == _arg2.offset.x){
_local3 = Direction.WEST;
} else {
if (_arg1.y == _arg2.offset.y){
_local3 = Direction.NORTH;
} else {
if (_arg1.y == (_arg2.limit.y - 1)){
_local3 = Direction.SOUTH;
};
};
};
};
return (_local3);
}
protected static function markGaps(_arg1:Point, _arg2:Point, _arg3:List, _arg4:Grid):void{
var _local5:Array;
var _local6:Point;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
_local5 = [new Point(0, -1), new Point(0, 1), new Point(1, 0), new Point(-1, 0)];
while (!(_arg3.isEmpty())) {
_local6 = _arg3.pop();
_local7 = 0;
while (_local7 < 4) {
var _temp1 = _local7;
_local7 = (_local7 + 1);
_local8 = _temp1;
_local9 = (_local6.x + _local5[_local8].x);
_local10 = (_local6.y + _local5[_local8].y);
if ((((((((((_local9 >= 0)) && ((_local9 < _arg2.x)))) && ((_local10 >= 0)))) && ((_local10 < _arg2.y)))) && (neitherTouchBlockedGap(_local9, _local10, _arg1, _arg4)))){
_arg4.set(_local9, _local10, true);
_arg3.add(new Point(_local9, _local10));
};
};
};
}
public static function createBuilding(_arg1:Section, _arg2=null, _arg3:Direction=null):Building{
var _local4:int;
var _local5:Building;
var _local6:Direction;
var _local7:Point;
_local4 = chooseBuildingType(_arg1, _arg2);
_local5 = new Building(_local4);
_local6 = _arg3;
if (_local6 == null){
_local6 = chooseEntranceDir(_arg1);
};
_local7 = chooseEntrance(_arg1, _local6, _local4);
if (_local4 != POLICE_STATION){
_local5.addLot(_arg1);
_local5.setEntrance(_local7, _local6);
};
if (_local4 != PARKING_LOT){
Game.map.addBuilding(_local5);
if (_local4 != POLICE_STATION){
_local5.attach();
};
};
return (_local5);
}
public static function randWeightedIndex(_arg1:Array):int{
return (Lib.randWeightedIndex(_arg1, generator));
}
public static function fillChangeBlocked(_arg1:Section, _arg2:Boolean):void{
setArea(_arg1, Util.changeBlocked, _arg2);
}
public static function randDirection():Direction{
return (Lib.randDirection(generator));
}
public static function getNormal(_arg1:String, _arg2:int):String{
var _local3:*;
var _local4:*;
var _local5:*;
var _local6:*;
var _local7:String;
var _local8:StringBuf;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:*;
_local3 = "a"["charCodeAt"](0);
_local4 = "z"["charCodeAt"](0);
_local5 = "0"["charCodeAt"](0);
_local6 = "9"["charCodeAt"](0);
_local7 = (_arg1.toLowerCase() + Std.string(_arg2));
_local8 = new StringBuf();
_local9 = 0;
_local10 = _local7.length;
while (_local9 < _local10) {
var _temp1 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp1;
_local12 = _local7["charCodeAt"](_local11);
if ((((((_local12 >= _local3)) && ((_local12 <= _local4)))) || ((((_local12 >= _local5)) && ((_local12 <= _local6)))))){
_local8.addChar(_local12);
};
};
return (_local8.toString());
}
protected static function chooseEntranceDir(_arg1:Section):Direction{
var _local2:Array;
var _local3:Array;
var _local4:Array;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local2 = [_arg1.north, _arg1.south, _arg1.east, _arg1.west];
_local3 = [Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST];
_local4 = [];
_local5 = 0;
_local6 = 0;
_local7 = _local2.length;
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local9 = _temp1;
if (_local2[_local9] != null){
if (_local2[_local9].getWidth() > _local5){
while (_local4.length > 0) {
_local4.pop();
};
_local5 = _local2[_local9].getWidth();
};
if (_local2[_local9].getWidth() >= _local5){
_local4.push(_local9);
};
};
};
_local8 = _local4[rand(_local4.length)];
return (_local3[_local8]);
}
public static function fillBlockedGaps(_arg1:Section):void{
var _local2:Point;
var _local3:Point;
var _local4:Grid;
var _local5:int;
var _local6:int;
var _local7:List;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
_local2 = new Point((_arg1.offset.x - 1), (_arg1.offset.y - 1));
_local3 = new Point((_arg1.getSize().x + 2), (_arg1.getSize().y + 2));
_local4 = new Grid(_local3.x, _local3.y);
_local5 = 0;
_local6 = _local3.y;
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local8 = _temp1;
_local9 = 0;
_local10 = _local3.x;
while (_local9 < _local10) {
var _temp2 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp2;
_local4.set(_local11, _local8, false);
};
};
_local7 = new List();
setupGapQueue(_arg1, _local3, _local7, _local4);
markGaps(_local2, _local3, _local7, _local4);
fillInGaps(_local2, _local3, _local4);
}
public static function opposite(_arg1:Direction):Direction{
var _local2:Direction;
var _local3:enum;
_local2 = Direction.SOUTH;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = Direction.SOUTH;
break;
case 1:
_local2 = Direction.NORTH;
break;
case 2:
_local2 = Direction.WEST;
break;
case 3:
_local2 = Direction.EAST;
break;
};
return (_local2);
}
public static function fillBlocked(_arg1:Section):void{
setArea(_arg1, Util.changeBlocked, true);
}
public static function fillAddTile(_arg1:Section, _arg2:int):void{
setArea(_arg1, Util.addTile, _arg2);
}
public static function chooseEntrance(_arg1:Section, _arg2:Direction, _arg3:int):Point{
var _local4:int;
var _local5:Point;
_local4 = Lib.directionToIndex(_arg2);
_local5 = null;
if (_arg3 == CHURCH){
_local5 = churchEntrances[_local4];
} else {
if (_arg3 == HOUSE){
_local5 = houseEntrances[_local4];
} else {
if (_arg3 == MALL){
_local5 = chooseRandEntrance(_arg1, _arg2, 2);
} else {
_local5 = chooseRandEntrance(_arg1, _arg2, 1);
};
};
};
return (new Point((_arg1.offset.x + _local5.x), (_arg1.offset.y + _local5.y)));
}
public static function addTile(_arg1:Point, _arg2:int):void{
Game.map.getCell(_arg1.x, _arg1.y).addTile(_arg2);
}
public static function fillUnblocked(_arg1:Section):void{
setArea(_arg1, Util.changeBlocked, false);
}
public static function seed(_arg1:String, _arg2:Point=null, _arg3:Point=null):void{
var _local4:String;
var _local5:Array;
var _local6:String;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:String;
var _local11:*;
_local4 = _arg1;
if (_arg2 != null){
_local4 = (_local4 + _arg2.toString());
};
if (_arg3 != null){
_local4 = (_local4 + _arg3.toString());
};
_local5 = [];
_local6 = Md5.encode(_local4);
_local7 = 0;
while (_local7 < 4) {
var _temp1 = _local7;
_local7 = (_local7 + 1);
_local8 = _temp1;
_local9 = (_local8 * 4);
_local10 = ("0x" + _local6.substr(_local9, 4));
_local11 = Std._parseInt(_local10);
if (_local11 == null){
Lib.trace(("nextSeed is null: " + _local10));
} else {
_local5.push(_local11);
};
};
Util.generator = new Twister(null, _local5);
}
public static function fillWithBorder(_arg1:Section, _arg2:Array):void{
fillClearTiles(_arg1);
addTile(_arg1.northwest(), _arg2[0]);
addTile(_arg1.northeast(), _arg2[2]);
addTile(_arg1.southwest(), _arg2[6]);
addTile(_arg1.southeast(), _arg2[8]);
fillAddTile(_arg1.edge(Direction.NORTH), _arg2[1]);
fillAddTile(_arg1.edge(Direction.WEST), _arg2[3]);
fillAddTile(_arg1.edge(Direction.EAST), _arg2[5]);
fillAddTile(_arg1.edge(Direction.SOUTH), _arg2[7]);
if (_arg2[4] != Tile.NO_TILE){
fillAddTile(_arg1.center(), _arg2[4]);
};
}
protected static function addToGapQueue(_arg1:Point, _arg2:List):void{
_arg2.add(_arg1);
}
protected static function setupGapQueue(_arg1:Section, _arg2:Point, _arg3:List, _arg4:Grid):void{
var _local5:Section;
var _local6:int;
var _local7:Array;
var _local8:Direction;
var _local9:Section;
_local5 = _arg1.clone();
_local5.limit = _arg1.getSize();
_local5.offset = new Point(0, 0);
_local6 = 0;
_local7 = Lib.directions;
while (_local6 < _local7.length) {
_local8 = _local7[_local6];
_local6++;
if (_local5.getStreet(_local8) != null){
_local9 = _local5.edge(_local8);
setArea(_local9, Util.addToGapQueue, _arg3);
};
};
if (((!((_local5.north == null))) || (!((_local5.west == null))))){
addToGapQueue(_local5.northwest(), _arg3);
};
if (((!((_local5.north == null))) || (!((_local5.east == null))))){
addToGapQueue(_local5.northeast(), _arg3);
};
if (((!((_local5.south == null))) || (!((_local5.west == null))))){
addToGapQueue(_local5.southwest(), _arg3);
};
if (((!((_local5.south == null))) || (!((_local5.east == null))))){
addToGapQueue(_local5.southeast(), _arg3);
};
}
public static function shuffle(_arg1:Array):void{
Lib.shuffle(_arg1, generator);
}
public static function addRoofOverlay(_arg1:Point, _arg2:Array):void{
var _local3:int;
if (rand(100) < Parameter.roofOverlayChance){
_local3 = rand(_arg2.length);
addTile(_arg1, _arg2[_local3]);
};
}
public static function placeSingleSalvage(_arg1:Map, _arg2:int, _arg3:int, _arg4:Resource=null):void{
var _local5:Building;
var _local6:Array;
var _local7:int;
var _local8:Resource;
var _local9:int;
var _local10:int;
_local5 = _arg1.getCell(_arg2, _arg3).getBuilding();
_local6 = Option.groundSalvageDistribution;
if (_local5 != null){
_local6 = Option.salvageDistribution[_local5.getType()];
};
_local7 = randWeightedIndex(_local6);
_local8 = Lib.indexToResource(_local7);
if (_arg4 != null){
_local7 = Lib.resourceToIndex(_arg4);
_local8 = _arg4;
};
_local9 = Lib.truckLoad(_local8);
if (_local5 != null){
_local5.getSalvage().addResource(_local8, _local9);
} else {
if (((((!(_arg1.getCell(_arg2, _arg3).isBlocked())) && (!((_local8 == Resource.SURVIVORS))))) && (!(_arg1.getCell(_arg2, _arg3).hasTower())))){
_local10 = randWeightedIndex(Parameter.rubbleWeight);
_arg1.getCell(_arg2, _arg3).addRubble(_local8, _local9, _local10);
};
};
}
}
}//package mapgen
Section 101
//EditMenuItem (native.EditMenuItem)
package native {
public class EditMenuItem {
public var label:String;
public var icon:String;
public var data;
public function EditMenuItem(_arg1:String, _arg2):void{
label = _arg1;
data = _arg2;
icon = "";
}
}
}//package native
Section 102
//NativeBase (native.NativeBase)
package native {
public class NativeBase {
public static function removeWhitespace(_arg1:String):String{
var _local2:*;
_local2 = new RegExp("\\s", "g");
return (_arg1.replace(_local2, ""));
}
public static function nativeTrace(_arg1):void{
trace(_arg1);
}
}
}//package native
Section 103
//Twister (twister.Twister)
package twister {
import flash.*;
public class Twister {
protected var statePos:int;
protected var state:Array;
protected static var MAG01:Array = [0, -1727483681];
protected static var LOWER_MASK:int = 2147483647;
protected static var UPPER_MASK:int = -2147483648;
protected static var M:int = 397;
protected static var N:int = 624;
public function Twister(_arg1=null, _arg2:Array=null):void{
var _local3:int;
var _local4:int;
var _local5:int;
super();
if (!Boot.skip_constructor){
this.state = new Array();
if (_arg2 != null){
this.init(19650218);
_local3 = 1;
_local4 = 0;
_local5 = ((Twister.N > _arg2.length)) ? N : _arg2.length;
while (_local5 > 0) {
this.state[_local3] = (((this.state[_local3] ^ this.unsignedMultiply((this.state[(_local3 - 1)] ^ (this.state[(_local3 - 1)] >>> 30)), 1664525)) + _arg2[_local4]) + _local4);
++_local3;
if (_local3 >= N){
this.state[0] = this.state[(Twister.N - 1)];
_local3 = 1;
};
++_local4;
if (_local4 >= _arg2.length){
_local4 = 0;
};
_local5--;
};
_local5 = (Twister.N - 1);
while (_local5 > 0) {
this.state[_local3] = ((this.state[_local3] ^ this.unsignedMultiply((this.state[(_local3 - 1)] ^ (this.state[(_local3 - 1)] >>> 30)), 1566083941)) - _local3);
++_local3;
if (_local3 >= N){
this.state[0] = this.state[(Twister.N - 1)];
_local3 = 1;
};
_local5--;
};
this.state[0] = UPPER_MASK;
} else {
if (_arg1 == null){
_arg1 = Math.floor(Date["now"]().getTime());
};
this.init(_arg1);
};
this.statePos = N;
};
}
public function getInt():int{
var _local1:int;
var _local2:int;
if (this.statePos >= N){
_local2 = 0;
while (_local2 < (Twister.N - M)) {
_local1 = ((this.state[_local2] & UPPER_MASK) | (this.state[(_local2 + 1)] & LOWER_MASK));
this.state[_local2] = ((this.state[(_local2 + M)] ^ (_local1 >>> 1)) ^ MAG01[(_local1 & 1)]);
_local2++;
};
while (_local2 < (Twister.N - 1)) {
_local1 = ((this.state[_local2] & UPPER_MASK) | (this.state[(_local2 + 1)] & LOWER_MASK));
this.state[_local2] = ((this.state[(_local2 + (Twister.M - N))] ^ (_local1 >>> 1)) ^ MAG01[(_local1 & 1)]);
_local2++;
};
_local1 = ((this.state[(Twister.N - 1)] & UPPER_MASK) | (this.state[0] & LOWER_MASK));
this.state[(Twister.N - 1)] = ((this.state[(Twister.M - 1)] ^ (_local1 >>> 1)) ^ MAG01[(_local1 & 1)]);
this.statePos = 0;
};
_local1 = this.state[this.statePos++];
_local1 = (_local1 ^ (_local1 >>> 11));
_local1 = (_local1 ^ ((_local1 << 7) & -1658038656));
_local1 = (_local1 ^ ((_local1 << 15) & -272236544));
_local1 = (_local1 ^ (_local1 >>> 18));
return (_local1);
}
public function getFloat():Number{
return ((this.getInt() / 4294967295));
}
public function getPositiveInt():int{
return ((this.getInt() >>> 1));
}
protected function init(_arg1:int):void{
var _local2:int;
var _local3:int;
var _local4:int;
this.state[0] = _arg1;
_local2 = 1;
_local3 = N;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
this.state[_local4] = (this.unsignedMultiply(1812433253, (this.state[(_local4 - 1)] ^ (this.state[(_local4 - 1)] >>> 30))) + _local4);
};
}
public function getFloatExclusive():Number{
return ((this.getInt() / 4294967296));
}
protected function unsignedMultiply(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_arg1 = (_arg1 & -1);
_arg2 = (_arg2 & -1);
_local3 = 1;
_local4 = 0;
_local5 = 0;
while (_local5 < 32) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp1;
if ((_arg2 & _local3) != 0){
_local4 = (_local4 + _arg1);
};
_arg1 = (_arg1 << 1);
_local3 = (_local3 << 1);
};
return (_local4);
}
}
}//package twister
Section 104
//AccuracyClip (ui.menu.AccuracyClip)
package ui.menu {
import flash.display.*;
public dynamic class AccuracyClip extends MovieClip {
public var bar:MovieClip;
}
}//package ui.menu
Section 105
//BarricadeMenuClip (ui.menu.BarricadeMenuClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class BarricadeMenuClip extends MovieClip {
public var boardsQuota:TextField;
public var boardsIcon:MovieClip;
public var quota:TextField;
public var boardsDown:ButtonMinus;
public var boardsQuotaBackground:MovieClip;
public var boardsStock:TextField;
public var boardsUp:ButtonPlus;
public var boardsStockBackground:MovieClip;
public function BarricadeMenuClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 106
//Bookmark (ui.menu.Bookmark)
package ui.menu {
import flash.*;
public class Bookmark {
public var pos:int;
public var name:String;
public function Bookmark(_arg1:String=null, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.name = _arg1;
this.pos = _arg2;
};
}
}
}//package ui.menu
Section 107
//BuildMenu (ui.menu.BuildMenu)
package ui.menu {
import flash.display.*;
import flash.events.*;
import logic.*;
import ui.*;
import flash.*;
public class BuildMenu {
protected var clip:BuildMenuClip;
protected var action:int;
protected var buttonList:ButtonList;
protected static var DEPOT:int = 1;
protected static var SNIPER:int = 2;
protected static var WORKSHOP:int = 3;
protected static var BARRICADE:int = 0;
protected static var NO_ACTION:int = -1;
public function BuildMenu(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
if (!Boot.skip_constructor){
this.clip = new BuildMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = true;
this.clip.mouseEnabled = false;
this.buttonList = new ButtonList(this.click, this.hover, [this.clip.barricade, this.clip.depot, this.clip.sniper, this.clip.workshop]);
this.clip.addEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.resize(_arg2);
this.action = NO_ACTION;
};
}
public function clickTower(_arg1:Point):void{
var _local2:Point;
_local2 = Game.select.getSelected();
if (this.action == NO_ACTION){
this.changeSelect(_arg1);
Util.success();
} else {
Util.failure();
if (!Main.key.shift()){
this.resetAction();
};
Game.view.warning.show(Text.towerWarning);
};
}
public function cleanup():void{
this.clip.removeEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.buttonList.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function resetAction():void{
this.action = NO_ACTION;
Game.floater.stop();
Game.script.trigger(Script.CANCEL_BUILD);
}
public function hoverBackground(_arg1:Point):void{
var _local2:String;
var _local3:MapCell;
var _local4:int;
_local2 = null;
_local3 = Game.map.getCell(_arg1.x, _arg1.y);
if (this.action == NO_ACTION){
if (_local3.hasShadow()){
_local2 = Text.hoverPlanTip;
} else {
if (_local3.feature != null){
_local2 = _local3.feature.getHoverTip();
} else {
if (_local3.hasZombies()){
_local2 = Text.hoverZombieTip;
} else {
if (_local3.getBuilding() != null){
_local2 = _local3.getBuilding().getToolTip();
} else {
if (_local3.hasRubble()){
_local2 = Text.hoverRubbleTip;
};
};
};
};
};
} else {
if (_local3.hasShadow()){
_local2 = Text.backgroundBuildShadowTip;
} else {
if (_local3.hasZombies()){
_local2 = Text.backgroundBuildZombieTip;
} else {
if (_local3.getBackground() == BackgroundType.BRIDGE){
_local2 = Text.backgroundBuildBridgeTip;
} else {
if (!Tower.isSupplied(_arg1.x, _arg1.y)){
_local2 = Text.backgroundBuildSupplyTip(Std.string(Option.supplyRange));
} else {
if (this.getBuildType(this.action) == Tower.WORKSHOP){
if (((!((_local3.getBuilding() == null))) && (_local3.getBuilding().hasZombies()))){
_local2 = Text.workshopBuildingZombiesTip;
} else {
if (((!((_local3.getBuilding() == null))) && (!(_local3.getBuilding().hasResources())))){
_local2 = Text.workshopBuildingEmptyTip;
} else {
if (_local3.getBackground() == BackgroundType.BUILDING){
_local2 = Text.workshopBuildingTip;
} else {
if (_local3.isBlocked()){
_local2 = Text.backgroundBuildBlockedTip;
} else {
if (_local3.getBackground() == BackgroundType.ENTRANCE){
_local2 = Text.workshopEntranceTip;
} else {
if (_local3.feature != null){
_local2 = _local3.feature.getWorkshopTip();
} else {
if (_local3.hasRubble()){
_local2 = Text.workshopRubbleTip;
} else {
_local2 = Text.workshopBackgroundTip;
};
};
};
};
};
};
};
} else {
_local4 = this.getBuildType(this.action);
if (_local3.isBlocked()){
_local2 = Text.backgroundBuildBlockedTip;
} else {
if (_local3.feature != null){
_local2 = _local3.feature.getBuildTip();
} else {
if ((((_local3.getBackground() == BackgroundType.ENTRANCE)) && (_local3.getBuilding().hasResources()))){
_local2 = Text.backgroundEntranceTip;
} else {
if (_local3.getBackground() == BackgroundType.ENTRANCE){
_local2 = Text.backgroundEmptyEntranceTip;
} else {
if (_local3.hasRubble()){
_local2 = Text.backgroundBuildRubbleTip;
} else {
if (_local4 == Tower.BARRICADE){
_local2 = Text.backgroundBarricadeTip;
} else {
if (_local4 == Tower.SNIPER){
_local2 = Text.backgroundSniperTip;
} else {
_local2 = Text.backgroundDepotTip;
};
};
};
};
};
};
};
};
};
};
};
};
};
Game.view.toolTip.show(_local2);
}
protected function changeSelect(_arg1:Point):void{
Game.view.changeSelect(_arg1);
}
public function hoverTower(_arg1:Point):void{
var _local2:String;
var _local3:Tower;
var _local4:int;
_local2 = null;
if (this.action == NO_ACTION){
_local3 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
_local4 = _local3.getType();
if (_local4 == Tower.DEPOT){
_local2 = Text.hoverDepotTip;
} else {
if (_local4 == Tower.WORKSHOP){
_local2 = Text.hoverWorkshopTip;
} else {
if (_local4 == Tower.SNIPER){
if (_local3.countResource(Resource.SURVIVORS) == 0){
_local2 = Text.hoverSniperNoSurvivorsTip;
} else {
if (_local3.countResource(Resource.AMMO) == 0){
_local2 = Text.hoverSniperNoAmmoTip;
} else {
if (_local3.isHoldingFire()){
_local2 = Text.hoverSniperHoldFireTip;
} else {
_local2 = Text.hoverSniperTip;
};
};
};
} else {
if (_local3.countResource(Resource.BOARDS) == 0){
_local2 = Text.hoverBarricadeNoBoardsTip;
} else {
_local2 = Text.hoverBarricadeTip;
};
};
};
};
} else {
_local2 = Text.towerBuildTip;
};
Game.view.toolTip.show(_local2);
}
protected function rollOver(_arg1:MouseEvent):void{
Game.view.toolTip.hide();
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if ((((_arg1 == "s")) || ((_arg1 == "S")))){
this.click(SNIPER);
} else {
if ((((_arg1 == "b")) || ((_arg1 == "B")))){
this.click(BARRICADE);
} else {
if ((((_arg1 == "d")) || ((_arg1 == "D")))){
this.click(DEPOT);
} else {
if ((((_arg1 == "w")) || ((_arg1 == "W")))){
this.click(WORKSHOP);
} else {
if (((!((this.action == NO_ACTION))) && ((_arg2 == Keyboard.escapeCode)))){
Util.success();
this.resetAction();
} else {
_local3 = false;
};
};
};
};
};
return (_local3);
}
public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.buildMenuOffset.x;
this.clip.y = _arg1.buildMenuOffset.y;
}
public function clickBackground(_arg1:Point):void{
var _local2:int;
var _local3:Tower;
var _local4:List;
var _local5:*;
var _local6:Point;
var _local7:Tower;
var _local8:int;
var _local9:MapCell;
var _local10:String;
if (this.action == NO_ACTION){
this.changeSelect(_arg1);
Util.success();
} else {
_local2 = this.getBuildType(this.action);
if (Tower.canPlace(_local2, _arg1.x, _arg1.y)){
Game.map.getCell(_arg1.x, _arg1.y).createTower(_local2);
_local3 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
_local4 = Game.map.findTowers(_arg1.x, _arg1.y, Option.supplyRange);
_local5 = _local4.iterator();
while (_local5.hasNext()) {
_local6 = _local5.next();
_local7 = Game.map.getCell(_local6.x, _local6.y).getTower();
_local8 = _local7.getType();
if ((((_local2 == Tower.DEPOT)) || ((_local8 == Tower.DEPOT)))){
_local3.addTradeLink(_local6);
};
};
Util.success();
if (!Main.key.shift()){
this.resetAction();
} else {
Game.floater.updatePublic();
};
} else {
_local9 = Game.map.getCell(_arg1.x, _arg1.y);
if (!Main.key.shift()){
this.resetAction();
};
Util.failure();
_local10 = null;
if (((_local9.hasTower()) || (_local9.hasShadow()))){
_local10 = Text.towerWarning;
} else {
if (_local9.hasZombies()){
_local10 = Text.placeZombieWarning;
} else {
if (_local9.isBlocked()){
_local10 = Text.placeBlockedWarning;
} else {
if (_local9.getBackground() == BackgroundType.BRIDGE){
_local10 = Text.placeBridgeWarning;
} else {
if (!Tower.isSupplied(_arg1.x, _arg1.y)){
_local10 = Text.placeSupplyWarning;
} else {
if (_local2 == Tower.WORKSHOP){
if (((!((_local9.getBuilding() == null))) && (_local9.getBuilding().hasZombies()))){
_local10 = Text.placeZombieWarning;
} else {
if (((!(_local9.hasRubble())) && ((_local9.feature == null)))){
_local10 = Text.placeBoringWarning;
};
};
} else {
if (_local9.hasRubble()){
_local10 = Text.placeRubbleWarning;
} else {
if (_local9.feature != null){
_local10 = Text.placeFeatureWarning;
} else {
if ((((_local9.getBackground() == BackgroundType.ENTRANCE)) || ((_local9.getBackground() == BackgroundType.BUILDING)))){
_local10 = Text.placeBuildingWarning;
};
};
};
};
};
};
};
};
};
Game.view.warning.show(_local10);
};
};
}
protected function click(_arg1:int):void{
var _local2:int;
if (this.action == NO_ACTION){
this.action = _arg1;
Util.success();
_local2 = this.getBuildType(this.action);
if (_local2 == Tower.SNIPER){
Game.script.trigger(Script.START_BUILD_SNIPER);
} else {
if (_local2 == Tower.BARRICADE){
Game.script.trigger(Script.START_BUILD_BARRICADE);
} else {
if (_local2 == Tower.DEPOT){
Game.script.trigger(Script.START_BUILD_DEPOT);
} else {
if (_local2 == Tower.WORKSHOP){
Game.script.trigger(Script.START_BUILD_WORKSHOP);
};
};
};
};
Game.floater.start(_local2);
} else {
this.resetAction();
};
}
protected function getBuildType(_arg1:int):int{
var _local2:int;
_local2 = Tower.SNIPER;
if (_arg1 == BARRICADE){
_local2 = Tower.BARRICADE;
} else {
if (_arg1 == DEPOT){
_local2 = Tower.DEPOT;
} else {
if (_arg1 == WORKSHOP){
_local2 = Tower.WORKSHOP;
};
};
};
return (_local2);
}
protected function hover(_arg1:int):String{
var _local2:String;
_local2 = Text.buildWorkshopTip;
if (_arg1 == SNIPER){
_local2 = Text.buildSniperTip;
} else {
if (_arg1 == BARRICADE){
_local2 = Text.buildBarricadeTip;
} else {
if (_arg1 == DEPOT){
_local2 = Text.buildDepotTip;
};
};
};
return (_local2);
}
}
}//package ui.menu
Section 108
//BuildMenuClip (ui.menu.BuildMenuClip)
package ui.menu {
import flash.display.*;
public dynamic class BuildMenuClip extends MovieClip {
public var depot:ButtonBuildDepot;
public var workshop:ButtonBuildWorkshop;
public var barricade:ButtonBuildBarricade;
public var sniper:ButtonBuildSniper;
}
}//package ui.menu
Section 109
//CenterMenu (ui.menu.CenterMenu)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class CenterMenu {
protected var menus:Array;
protected var oldState:int;
protected var state:int;
protected var backdrop:Sprite;
public static var SAVE_MAP_FAIL:int = 6;
public static var OPTIONS:int = 2;
public static var PEDIA:int = 3;
public static var BRIEFING:int = 5;
public static var UPLOAD_MAP:int = 9;
public static var SYSTEM:int = 1;
public static var UPLOAD_MAP_WAIT:int = 8;
public static var SAVE_WAIT:int = 4;
public static var NONE:int = 0;
public static var SAVE_MAP:int = 7;
public function CenterMenu(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var _local3:Point;
var _local4:String;
super();
if (!Boot.skip_constructor){
this.backdrop = new Sprite();
_arg1.addChild(this.backdrop);
this.backdrop.visible = false;
this.backdrop.mouseEnabled = true;
this.backdrop.useHandCursor = false;
this.state = NONE;
this.oldState = NONE;
_local3 = Util.minSize(_arg2.screenSize);
_local4 = Text.playPediaRoot;
if (Game.settings.isEditor()){
_local4 = Text.editPediaRoot;
};
this.menus = [];
this.menus.push(new MenuRoot());
this.menus.push(new CenterSystem(_arg1, _local3));
this.menus.push(new CenterOptions(_arg1, _local3, true));
this.menus.push(new CenterPedia(_arg1, _local3, _local4, true));
this.menus.push(new WaitMenu(_arg1, _local3, WaitMenu.SAVE_GAME));
this.menus.push(new StoryMenu(_arg1, _local3, StoryMenu.CENTER));
this.menus.push(new MainFail(_arg1, _local3, true));
this.menus.push(new SaveMapMenu(_arg1, _local3));
this.menus.push(new WaitMenu(_arg1, _local3, WaitMenu.UPLOAD_MAP));
this.menus.push(new UploadMapMenu(_arg1, _local3));
this.drawBackdrop(_arg2.screenSize);
};
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:MenuRoot;
_local1 = 0;
_local2 = this.menus;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.cleanup();
};
this.menus = null;
this.backdrop.parent.removeChild(this.backdrop);
this.backdrop = null;
}
public function changeState(_arg1:int):void{
this.menus[this.state].hide();
this.menus[_arg1].show();
this.oldState = this.state;
this.state = _arg1;
Game.view.toolTip.hide();
if (this.state == NONE){
Game.view.sideMenu.enableHover();
this.backdrop.visible = false;
Game.pause.systemResume();
} else {
Game.update.changeSelect(null);
Game.view.sideMenu.disableHover();
this.backdrop.visible = true;
Game.pause.systemPause();
};
}
protected function drawBackdrop(_arg1:Point):void{
Util.drawBase(this.backdrop.graphics, new Point(0, 0), _arg1, Color.centerGhost, Color.centerGhostAlpha);
}
public function systemTutorial():void{
this.changeState(SYSTEM);
this.menus[this.state].showTutorial();
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:int;
_local3 = this.state;
this.menus[this.state].hotkey(_arg1, _arg2);
return (!((_local3 == NONE)));
}
public function resize(_arg1:LayoutGame):void{
var _local2:Point;
var _local3:int;
var _local4:Array;
var _local5:MenuRoot;
this.drawBackdrop(_arg1.screenSize);
_local2 = Util.minSize(_arg1.screenSize);
_local3 = 0;
_local4 = this.menus;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local5.resize(_local2);
};
}
public function lookup(_arg1:String):void{
this.changeState(PEDIA);
this.menus[PEDIA].visitPage(_arg1);
}
public function revertState():void{
this.changeState(this.oldState);
}
}
}//package ui.menu
Section 110
//CenterOptions (ui.menu.CenterOptions)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class CenterOptions extends MenuRoot {
protected var buttons:ButtonList;
protected var clip:OptionsMenuClip;
protected var isCenter:Boolean;
public function CenterOptions(_arg1:DisplayObjectContainer=null, _arg2:Point=null, _arg3:Boolean=false):void{
if (!Boot.skip_constructor){
super();
this.isCenter = _arg3;
this.clip = new OptionsMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.soundUp, this.clip.soundDown, this.clip.musicUp, this.clip.musicDown, this.clip.scrollUp, this.clip.scrollDown, this.clip.back]);
this.clip.music.barText.text = Text.musicBarLabel;
this.clip.sound.barText.text = Text.soundBarLabel;
this.clip.scroll.barText.text = Text.scrollBarLabel;
if (this.isCenter){
this.clip.background.visible = false;
};
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function showMusic():void{
this.showBar(Config.MUSIC, this.clip.music, this.clip.musicUp, this.clip.musicDown);
Main.music.setVolume(Main.config.getProportion(Config.MUSIC));
}
protected function showScroll():void{
this.showBar(Config.SCROLL, this.clip.scroll, this.clip.scrollUp, this.clip.scrollDown);
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(6);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
protected function showBar(_arg1:int, _arg2:StatusClip, _arg3:MovieClip, _arg4:MovieClip):void{
var _local5:Number;
_local5 = Main.config.getProportion(_arg1);
_arg2.bar.width = (_local5 * Option.statusBarSize);
if (Main.config.canIncrease(_arg1)){
this.buttons.setNormal(_arg3);
} else {
this.buttons.setGhosted(_arg3);
};
if (Main.config.canDecrease(_arg1)){
this.buttons.setNormal(_arg4);
} else {
this.buttons.setGhosted(_arg4);
};
}
protected function click(_arg1:int):void{
if ((((_arg1 == 0)) && (Main.config.canIncrease(Config.SOUND)))){
Main.config.increase(Config.SOUND);
this.showSound();
Util.success();
} else {
if ((((_arg1 == 1)) && (Main.config.canDecrease(Config.SOUND)))){
Main.config.decrease(Config.SOUND);
this.showSound();
Util.success();
} else {
if ((((_arg1 == 2)) && (Main.config.canIncrease(Config.MUSIC)))){
Main.config.increase(Config.MUSIC);
this.showMusic();
Util.success();
} else {
if ((((_arg1 == 3)) && (Main.config.canDecrease(Config.MUSIC)))){
Main.config.decrease(Config.MUSIC);
this.showMusic();
Util.success();
} else {
if ((((_arg1 == 4)) && (Main.config.canIncrease(Config.SCROLL)))){
Main.config.increase(Config.SCROLL);
this.showScroll();
Util.success();
} else {
if ((((_arg1 == 5)) && (Main.config.canDecrease(Config.SCROLL)))){
Main.config.decrease(Config.SCROLL);
this.showScroll();
Util.success();
} else {
if (_arg1 == 6){
Util.success();
if (this.isCenter){
Game.view.centerMenu.changeState(CenterMenu.SYSTEM);
} else {
Main.menu.changeState(MainMenu.START);
};
} else {
Util.failure();
};
};
};
};
};
};
};
}
protected function showSound():void{
this.showBar(Config.SOUND, this.clip.sound, this.clip.soundUp, this.clip.soundDown);
Main.sound.setVolume(Main.config.getProportion(Config.SOUND));
}
override public function show():void{
this.clip.visible = true;
this.showSound();
this.showMusic();
this.showScroll();
}
}
}//package ui.menu
Section 111
//CenterPedia (ui.menu.CenterPedia)
package ui.menu {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.text.*;
import flash.*;
public class CenterPedia extends MenuRoot {
protected var clip:PediaMenuClip;
protected var history:Array;
protected var buttons:ButtonList;
protected var isCenter:Boolean;
protected var root:String;
protected var current:int;
protected static var maxHistory:int = 20;
protected static var hash:PediaHash = new PediaHash();
public function CenterPedia(_arg1:DisplayObjectContainer=null, _arg2:Point=null, _arg3:String=null, _arg4:Boolean=false):void{
var _local5:StyleSheet;
if (!Boot.skip_constructor){
super();
this.root = _arg3;
this.isCenter = _arg4;
this.clip = new PediaMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.back, this.clip.up, this.clip.forward, this.clip.returnToMenu]);
this.clip.entry.multiline = true;
this.clip.entry.wordWrap = true;
this.clip.entry.autoSize = TextFieldAutoSize.NONE;
this.clip.entry.addEventListener(TextEvent.LINK, this.link);
_local5 = new StyleSheet();
_local5.parseCSS(Text.pediaStyleSheet);
this.clip.entry.styleSheet = _local5;
this.history = [new Bookmark(this.root, 1)];
this.current = 0;
this.moveCursor(0);
if (this.isCenter){
this.clip.background.visible = false;
this.clip.splash.visible = false;
};
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
protected function click(_arg1:int):void{
var _local2:Boolean;
_local2 = true;
if (_arg1 == 0){
_local2 = this.moveCursor(-1);
} else {
if (_arg1 == 1){
if (this.history[this.current].name == this.root){
this.exitPedia();
} else {
this.visitPage(this.root);
};
} else {
if (_arg1 == 2){
_local2 = this.moveCursor(1);
} else {
if (_arg1 == 3){
this.exitPedia();
};
};
};
};
if (_local2){
Util.success();
} else {
Util.failure();
};
}
protected function moveCursor(_arg1:int):Boolean{
var _local2:Boolean;
_local2 = true;
if (((((this.current + _arg1) >= 0)) && (((this.current + _arg1) < this.history.length)))){
this.history[this.current].pos = this.clip.entry.scrollV;
this.current = (this.current + _arg1);
this.clip.entry.htmlText = hash.lookup(this.history[this.current].name);
this.clip.entry.scrollV = this.history[this.current].pos;
this.clip.scrollBar.update();
} else {
_local2 = false;
};
if (this.current == 0){
this.buttons.setGhosted(this.clip.back);
} else {
this.buttons.setNormal(this.clip.back);
};
if (this.current == (this.history.length - 1)){
this.buttons.setGhosted(this.clip.forward);
} else {
this.buttons.setNormal(this.clip.forward);
};
return (_local2);
}
protected function link(_arg1:TextEvent):void{
Util.success();
this.visitPage(_arg1.text);
}
override public function cleanup():void{
this.clip.entry.removeEventListener(TextEvent.LINK, this.link);
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function componentUpdate(_arg1:Event):void{
this.clip.scrollBar.update();
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
protected function exitPedia():void{
if (this.isCenter){
Game.view.centerMenu.revertState();
} else {
Main.menu.revertState();
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(3);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
var _local2:int;
Util.centerHorizontally(this.clip.returnToMenu, _arg1);
Util.alignBottom(this.clip.returnToMenu, _arg1);
Util.scaleToFit(this.clip.background, _arg1);
Util.scaleToFit(this.clip.splash, _arg1);
_local2 = (_arg1.x - 60);
if (_local2 > 600){
_local2 = 600;
};
this.clip.entry.x = (((_arg1.x - _local2) / 2) - 10);
this.clip.entry.width = _local2;
this.clip.entry.height = (_arg1.y - 200);
this.clip.scrollBar.x = ((this.clip.entry.x + this.clip.entry.width) + 5);
this.clip.scrollBar.height = (_arg1.y - 200);
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
override public function visitPage(_arg1:String):void{
var _local2:int;
_local2 = ((this.current - maxHistory) + 1);
if (_local2 < 0){
_local2 = 0;
};
this.history = this.history.slice(_local2, (_local2 + maxHistory));
this.history.push(new Bookmark(_arg1, 1));
this.current = (this.current - _local2);
this.moveCursor(1);
}
override public function showTutorial():void{
this.show();
}
override public function show():void{
this.clip.visible = true;
}
}
}//package ui.menu
Section 112
//CenterSystem (ui.menu.CenterSystem)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.text.*;
import flash.*;
public class CenterSystem extends MenuRoot {
protected var clip:SystemMenuClip;
protected var buttons:ButtonList;
public function CenterSystem(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
var _local3:int;
var _local4:Array;
var _local5:TextField;
var _local6:int;
var _local7:Array;
var _local8:*;
var _local9:int;
var _local10:Array;
var _local11:*;
var _local12:int;
var _local13:Array;
var _local14:*;
if (!Boot.skip_constructor){
super();
this.clip = new SystemMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
_local3 = 0;
_local4 = [this.clip.saveMapLabel, this.clip.uploadMapLabel, this.clip.testMapLabel, this.clip.editMapLabel, this.clip.briefingLabel];
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local5.mouseEnabled = false;
};
if (Game.settings.isEditor()){
_local6 = 0;
_local7 = [this.clip.pedia, this.clip.options, this.clip.saveGame, this.clip.loadGame, this.clip.retryGame, this.clip.editMapLabel, this.clip.editMap, this.clip.briefing, this.clip.briefingLabel];
while (_local6 < _local7.length) {
_local8 = _local7[_local6];
_local6++;
_local8.visible = false;
};
} else {
if (Game.settings.isTesting()){
_local9 = 0;
_local10 = [this.clip.saveMap, this.clip.saveMapLabel, this.clip.uploadMap, this.clip.uploadMapLabel, this.clip.testMap, this.clip.testMapLabel, this.clip.loadGame, this.clip.mainMenu];
while (_local9 < _local10.length) {
_local11 = _local10[_local9];
_local9++;
_local11.visible = false;
};
} else {
_local12 = 0;
_local13 = [this.clip.saveMap, this.clip.saveMapLabel, this.clip.uploadMap, this.clip.uploadMapLabel, this.clip.testMap, this.clip.testMapLabel, this.clip.editMap, this.clip.editMapLabel];
while (_local12 < _local13.length) {
_local14 = _local13[_local12];
_local12++;
_local14.visible = false;
};
};
};
this.buttons = new ButtonList(this.click, null, [this.clip.resume, this.clip.pedia, this.clip.options, this.clip.saveGame, this.clip.loadGame, this.clip.retryGame, this.clip.mainMenu, this.clip.saveMap, this.clip.uploadMap, this.clip.testMap, this.clip.editMap, this.clip.briefing]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
if (_arg1 == 0){
Util.success();
Game.view.centerMenu.changeState(CenterMenu.NONE);
} else {
if (_arg1 == 1){
Util.success();
Game.view.centerMenu.changeState(CenterMenu.PEDIA);
} else {
if (_arg1 == 2){
Util.success();
Game.view.centerMenu.changeState(CenterMenu.OPTIONS);
} else {
if (_arg1 == 3){
Util.success();
this.hide();
Game.attemptSave();
} else {
if (_arg1 == 4){
if (Main.canLoad()){
Util.success();
Game.endGame(GameOver.RESTART_LOAD);
} else {
Util.failure();
};
} else {
if (_arg1 == 5){
Util.success();
Game.endGame(GameOver.RESTART);
} else {
if (_arg1 == 6){
Util.success();
Game.endGame(GameOver.END);
} else {
if ((((_arg1 == 7)) && (Game.settings.isEditor()))){
Util.success();
Game.settings.setMap(Game.editor.saveMap());
Game.settings.setStart(Game.view.window.getCenter());
Game.view.centerMenu.changeState(CenterMenu.SAVE_MAP);
} else {
if ((((_arg1 == 8)) && (Game.settings.isEditor()))){
Util.success();
Game.settings.setMap(Game.editor.saveMap());
Game.settings.setStart(Game.view.window.getCenter());
Game.view.centerMenu.changeState(CenterMenu.UPLOAD_MAP_WAIT);
} else {
if ((((_arg1 == 9)) && (Game.settings.isEditor()))){
Util.success();
Game.settings.setMap(Game.editor.saveMap());
Game.settings.setStart(Game.view.window.getCenter());
Game.loadMap = Game.settings.saveMap();
Game.endGame(GameOver.TRY_MAP);
} else {
if ((((_arg1 == 10)) && (Game.settings.isTesting()))){
Util.success();
Game.endGame(GameOver.EDIT_MAP);
} else {
if (_arg1 == 11){
Util.success();
Game.view.centerMenu.changeState(CenterMenu.BRIEFING);
} else {
Util.failure();
};
};
};
};
};
};
};
};
};
};
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(0);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.alignRight(this.clip.city, _arg1);
Util.alignRight(this.clip.difficulty, _arg1);
Util.alignRight(this.clip.zombies, _arg1);
Util.alignRight(this.clip.bridges, _arg1);
}
override public function showTutorial():void{
this.show();
}
override public function show():void{
var _local1:String;
var _local2:String;
this.clip.visible = true;
this.clip.city.text = Game.settings.getCityName();
this.clip.difficulty.text = Game.settings.getDifficultyName();
_local1 = Std.string(Game.progress.getZombieCount());
this.clip.zombies.text = Text.zombiesLeft(_local1);
_local2 = Std.string(Game.progress.getBridgeCount());
this.clip.bridges.text = Text.bridgesLeft(_local2);
if (Main.canLoad()){
this.buttons.setNormal(this.clip.loadGame);
} else {
this.buttons.setGhosted(this.clip.loadGame);
};
this.buttons.setNormal(this.clip.saveGame);
}
}
}//package ui.menu
Section 113
//DepotMenuClip (ui.menu.DepotMenuClip)
package ui.menu {
import flash.display.*;
public dynamic class DepotMenuClip extends MovieClip {
public var resource:ResourceMenuClip;
public var abandon:ButtonAbandon;
public function DepotMenuClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 114
//MainCampaign (ui.menu.MainCampaign)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.net.*;
import flash.*;
public class MainCampaign extends MenuRoot {
protected var clip:MainCampaignClip;
protected var levels:Array;
protected var buttons:ButtonList;
public function MainCampaign(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainCampaignClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.level1, this.clip.level2, this.clip.level3, this.clip.level4, this.clip.level5, this.clip.level6, this.clip.level7, this.clip.back]);
this.levels = [this.clip.level1, this.clip.level2, this.clip.level3, this.clip.level4, this.clip.level5, this.clip.level6, this.clip.level7];
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 7){
Main.menu.changeState(MainMenu.PLAY);
} else {
Main.menu.rateState = MainMenu.CAMPAIGN;
WaitMenu.loadMap(Text.levels[_arg1]);
Main.menu.getSettings().setCampaign(_arg1);
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(7);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
override public function show():void{
var _local1:Boolean;
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:MovieClip;
this.clip.visible = true;
_local1 = true;
_local2 = getComplete();
_local3 = 0;
_local4 = _local2.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = this.levels[_local5];
if (_local2[_local5] == 1){
this.buttons.setGhosted(_local6);
} else {
if (_local1){
this.buttons.setGreen(_local6);
_local1 = false;
} else {
this.buttons.setNormal(_local6);
};
};
};
}
public static function setComplete(_arg1:int):void{
var _local2:SharedObject;
var _local3:Array;
_local2 = Main.gameDisk;
_local3 = getComplete();
if ((((_arg1 >= 0)) && ((_arg1 < _local3.length)))){
_local3[_arg1] = 1;
};
_local2.data.campaign = _local3;
_local2.flush(1000000);
}
public static function getComplete():Array{
var _local1:SharedObject;
var _local2:*;
var _local3:Array;
_local1 = Main.gameDisk;
_local2 = _local1.data.campaign;
_local3 = [];
if (_local2 == null){
_local3 = [0, 0, 0, 0, 0, 0, 0];
_local1.data.campaign = _local3;
} else {
_local3 = Load.loadArrayInt(_local2);
};
return (_local3);
}
}
}//package ui.menu
Section 115
//MainCampaignClip (ui.menu.MainCampaignClip)
package ui.menu {
import flash.display.*;
public dynamic class MainCampaignClip extends MovieClip {
public var level1:MovieClip;
public var background:MovieClip;
public var level4:MovieClip;
public var level5:MovieClip;
public var level6:MovieClip;
public var level7:MovieClip;
public var level2:MovieClip;
public var level3:MovieClip;
public var back:MovieClip;
public function MainCampaignClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 116
//MainCredits (ui.menu.MainCredits)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainCredits extends MenuRoot {
protected var buttons:ButtonList;
protected var clip:MainCreditsClip;
protected var credits:ScrollingText;
public function MainCredits(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
var scrolls:Array;
var parent = _arg1;
var screenSize = _arg2;
if (!Boot.skip_constructor){
super();
this.clip = new MainCreditsClip();
parent.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.returnClick, null, [this.clip.back]);
scrolls = [function (_arg1:MainCredits):DisplayObject{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = $this.clip.credits;
$r = (Std._is(tmp, DisplayObject)) ? tmp : function (_arg1:MainCredits):MovieClip{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this)];
this.credits = new ScrollingText(parent, scrolls, [-130], screenSize);
this.resize(screenSize);
};
}
override public function hide():void{
this.clip.visible = false;
this.credits.end();
}
override public function cleanup():void{
this.credits.cleanup();
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.returnClick(0);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
var _local2:int;
Util.scaleToFit(this.clip.background, _arg1);
_local2 = Math.floor((this.clip.back.x + this.clip.back.width));
this.clip.credits.x = (_local2 + (((_arg1.x - _local2) - this.clip.credits.width) / 2));
this.credits.resize(_arg1);
}
protected function returnClick(_arg1:int):void{
Util.success();
Main.menu.changeState(MainMenu.START);
}
override public function show():void{
this.clip.visible = true;
this.credits.begin();
}
}
}//package ui.menu
Section 117
//MainCreditsClip (ui.menu.MainCreditsClip)
package ui.menu {
import flash.display.*;
public dynamic class MainCreditsClip extends MovieClip {
public var background:MovieClip;
public var credits:MovieClip;
public var back:MovieClip;
public function MainCreditsClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 118
//MainDifficulty (ui.menu.MainDifficulty)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainDifficulty extends MenuRoot {
protected var clip:MainDifficultyClip;
protected var buttons:ButtonList;
public function MainDifficulty(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainDifficultyClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.novice, this.clip.veteran, this.clip.expert, this.clip.quartermaster, this.clip.back]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 4){
Main.menu.changeState(MainMenu.PLAY);
} else {
Main.menu.getSettings().setDifficulty((_arg1 + 1));
Main.menu.changeState(MainMenu.NAME);
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(4);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
override public function show():void{
this.clip.visible = true;
}
public static function tutorialClick():void{
}
}
}//package ui.menu
Section 119
//MainDifficultyClip (ui.menu.MainDifficultyClip)
package ui.menu {
import flash.display.*;
public dynamic class MainDifficultyClip extends MovieClip {
public var quartermaster:MovieClip;
public var background:MovieClip;
public var expert:MovieClip;
public var novice:MovieClip;
public var veteran:MovieClip;
public var back:MovieClip;
public function MainDifficultyClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 120
//MainDownloadMap (ui.menu.MainDownloadMap)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainDownloadMap extends MenuRoot {
protected var clip:MainDownloadMapClip;
protected var buttons:ButtonList;
public function MainDownloadMap(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainDownloadMapClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
Util.setupInputText(this.clip.url);
this.buttons = new ButtonList(this.click, null, [this.clip.loadButton, this.clip.back]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
Main.menu.rateState = MainMenu.DOWNLOAD_MAP;
Main.menu.getSettings().setUrl(this.clip.url.text);
Main.menu.changeState(MainMenu.DOWNLOAD_MAP_WAIT);
} else {
if (_arg1 == 1){
if (Main.menu.getSettings().isEditor()){
Main.menu.changeState(MainMenu.EDIT_SELECT);
} else {
Main.menu.changeState(MainMenu.PLAY);
};
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(1);
} else {
if (_arg2 == Keyboard.enterCode){
this.click(0);
} else {
_local3 = false;
};
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
override public function show():void{
this.clip.visible = true;
this.clip.url.text = "";
this.clip.stage.focus = this.clip.url;
}
}
}//package ui.menu
Section 121
//MainDownloadMapClip (ui.menu.MainDownloadMapClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class MainDownloadMapClip extends MovieClip {
public var background:MovieClip;
public var url:TextField;
public var loadButton:MovieClip;
public var back:MovieClip;
public function MainDownloadMapClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 122
//MainEdit (ui.menu.MainEdit)
package ui.menu {
import flash.display.*;
import logic.*;
import ui.*;
import flash.*;
public class MainEdit extends MenuRoot {
protected var difficulty:int;
protected var clip:MainEditClip;
protected var buttons:ButtonList;
public function MainEdit(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.difficulty = 1;
this.clip = new MainEditClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
Util.setupInputText(this.clip.cityName, Text.nameConstraint, Util.NAME_MAX_CHARS);
Util.setupInputText(this.clip.widthText, Text.sizeConstraint, Util.SIZE_MAX_CHARS);
Util.setupInputText(this.clip.heightText, Text.sizeConstraint, Util.SIZE_MAX_CHARS);
this.clip.cityName.tabEnabled = true;
this.clip.cityName.tabIndex = 1;
this.clip.widthText.tabEnabled = true;
this.clip.widthText.tabIndex = 2;
this.clip.heightText.tabEnabled = true;
this.clip.heightText.tabIndex = 3;
this.clip.newMapLabel.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.difficultyDown, this.clip.difficultyUp, this.clip.newMap, this.clip.back]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
var _local2:*;
var _local3:int;
var _local4:*;
var _local5:int;
var _local6:GameSettings;
if (_arg1 == 0){
if (this.difficulty > 1){
this.difficulty--;
Util.success();
} else {
Util.failure();
};
this.updateDifficulty();
} else {
if (_arg1 == 1){
if (this.difficulty < (GameSettings.getDifficultyLimit() - 1)){
this.difficulty++;
Util.success();
} else {
Util.failure();
};
this.updateDifficulty();
} else {
if (_arg1 == 2){
Util.success();
_local2 = Std._parseInt(this.clip.widthText.text);
_local3 = 0;
if (_local2 != null){
_local3 = _local2;
};
_local4 = Std._parseInt(this.clip.heightText.text);
_local5 = 0;
if (_local4 != null){
_local5 = _local4;
};
_local6 = new GameSettings();
_local6.beginNewEdit(this.difficulty, this.clip.cityName.text, new Point(_local3, _local5));
Main.menu.setSettings(_local6);
Main.menu.changeState(MainMenu.EDIT_WAIT);
} else {
if (_arg1 == 3){
Util.success();
Main.menu.changeState(MainMenu.EDIT_SELECT);
};
};
};
};
}
protected function updateDifficulty():void{
var _local1:int;
var _local2:int;
this.clip.difficulty.barText.text = GameSettings.getDifficultyNameS(this.difficulty);
_local1 = this.difficulty;
_local2 = (GameSettings.getDifficultyLimit() - 1);
this.clip.difficulty.bar.width = ((_local1 / _local2) * Option.statusBarSize);
if (this.difficulty == 0){
this.buttons.setGhosted(this.clip.difficultyDown);
} else {
this.buttons.setNormal(this.clip.difficultyDown);
};
if (this.difficulty == (GameSettings.getDifficultyLimit() - 1)){
this.buttons.setGhosted(this.clip.difficultyUp);
} else {
this.buttons.setNormal(this.clip.difficultyUp);
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(3);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
override public function show():void{
var _local1:int;
var _local2:int;
this.clip.visible = true;
this.difficulty = 1;
this.clip.cityName.setSelection(0, 0);
_local1 = Lib.rand(Text.cities.length);
this.clip.cityName.text = Text.cities[_local1];
_local2 = this.clip.cityName.text.length;
this.clip.cityName.setSelection(0, _local2);
this.clip.stage.focus = this.clip.cityName;
this.clip.widthText.setSelection(0, 0);
this.clip.widthText.text = "50";
this.clip.widthText.setSelection(0, _local2);
this.clip.heightText.setSelection(0, 0);
this.clip.heightText.text = "50";
this.clip.heightText.setSelection(0, _local2);
this.updateDifficulty();
}
}
}//package ui.menu
Section 123
//MainEditClip (ui.menu.MainEditClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class MainEditClip extends MovieClip {
public var widthText:TextField;
public var heightText:TextField;
public var background:MovieClip;
public var cityName:TextField;
public var difficulty:StatusClip;
public var difficultyUp:MovieClip;
public var newMap:MovieClip;
public var newMapLabel:TextField;
public var back:MovieClip;
public var difficultyDown:MovieClip;
public function MainEditClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 124
//MainEditSelect (ui.menu.MainEditSelect)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainEditSelect extends MenuRoot {
protected var clip:MainEditSelectClip;
protected var buttons:ButtonList;
public function MainEditSelect(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainEditSelectClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.newMap, this.clip.downloadMap, this.clip.loadMap, this.clip.instructions, this.clip.back]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
Main.menu.changeState(MainMenu.EDIT);
} else {
if (_arg1 == 1){
Main.menu.changeState(MainMenu.DOWNLOAD_MAP);
} else {
if (_arg1 == 2){
Main.menu.changeState(MainMenu.PASTE_MAP);
} else {
if (_arg1 == 3){
Main.menu.changeState(MainMenu.EDIT_PEDIA);
} else {
if (_arg1 == 4){
Main.menu.changeState(MainMenu.START);
};
};
};
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(4);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
override public function show():void{
this.clip.visible = true;
Main.menu.getSettings().setEditor();
}
}
}//package ui.menu
Section 125
//MainEditSelectClip (ui.menu.MainEditSelectClip)
package ui.menu {
import flash.display.*;
public dynamic class MainEditSelectClip extends MovieClip {
public var background:MovieClip;
public var loadMap:MovieClip;
public var instructions:MovieClip;
public var downloadMap:MovieClip;
public var newMap:MovieClip;
public var back:MovieClip;
public function MainEditSelectClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 126
//MainFail (ui.menu.MainFail)
package ui.menu {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.text.*;
import flash.*;
public class MainFail extends MenuRoot {
protected var clip:MainFailClip;
protected var buttons:ButtonList;
protected var isCenter:Boolean;
public function MainFail(_arg1:DisplayObjectContainer=null, _arg2:Point=null, _arg3:Boolean=false):void{
if (!Boot.skip_constructor){
super();
this.isCenter = _arg3;
this.clip = new MainFailClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.back]);
this.clip.entry.multiline = true;
this.clip.entry.wordWrap = true;
this.clip.entry.autoSize = TextFieldAutoSize.NONE;
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function componentUpdate(_arg1:Event):void{
this.clip.scrollBar.update();
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
protected function click(_arg1:int):void{
Util.success();
if (this.isCenter){
Game.view.centerMenu.changeState(CenterMenu.SYSTEM);
} else {
Main.menu.changeState(Main.menu.rateState);
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if ((((_arg2 == Keyboard.escapeCode)) || ((_arg2 == Keyboard.enterCode)))){
this.click(0);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
var _local2:int;
Util.centerHorizontally(this.clip.back, _arg1);
Util.alignBottom(this.clip.back, _arg1);
Util.scaleToFit(this.clip.background, _arg1);
_local2 = (_arg1.x - 60);
if (_local2 > 600){
_local2 = 600;
};
this.clip.entry.x = (((_arg1.x - _local2) / 2) - 10);
this.clip.entry.width = _local2;
this.clip.entry.height = (_arg1.y - 140);
this.clip.scrollBar.x = ((this.clip.entry.x + this.clip.entry.width) + 5);
this.clip.scrollBar.height = (_arg1.y - 140);
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
override public function show():void{
this.clip.visible = true;
this.clip.entry.text = Main.error;
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
}
}//package ui.menu
Section 127
//MainFailClip (ui.menu.MainFailClip)
package ui.menu {
import fl.controls.*;
import flash.display.*;
import flash.text.*;
public dynamic class MainFailClip extends MovieClip {
public var scrollBar:UIScrollBar;
public var background:MovieClip;
public var entry:TextField;
public var back:MovieClip;
public function MainFailClip(){
addFrameScript(0, frame1);
__setProp_scrollBar_MainFailClip_Layer1_1();
}
function frame1(){
stop();
}
function __setProp_scrollBar_MainFailClip_Layer1_1(){
try {
scrollBar["componentInspectorSetting"] = true;
} catch(e:Error) {
};
scrollBar.direction = "vertical";
scrollBar.scrollTargetName = "background";
scrollBar.visible = true;
try {
scrollBar["componentInspectorSetting"] = false;
} catch(e:Error) {
};
}
}
}//package ui.menu
Section 128
//MainLose (ui.menu.MainLose)
package ui.menu {
import flash.display.*;
import logic.*;
import ui.*;
import flash.*;
public class MainLose extends MenuRoot {
protected var clip:MainLoseClip;
protected var buttons:ButtonList;
public function MainLose(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainLoseClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.clip.rateLabel.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.replay, this.clip.loadGame, this.clip.retryMap, this.clip.mainMenu, this.clip.rateButton]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
if (_arg1 == 0){
Util.success();
Main.beginReplay();
} else {
if (_arg1 == 1){
if (Main.canLoad()){
Util.success();
Main.menu.changeState(MainMenu.LOAD_WAIT);
} else {
Util.failure();
};
} else {
if (_arg1 == 2){
Util.success();
Main.menu.changeState(MainMenu.GENERATE_MAP);
} else {
if (_arg1 == 3){
Util.success();
Main.menu.setSettings(new GameSettings());
Main.menu.changeState(MainMenu.START);
} else {
if (_arg1 == 4){
Main.menu.rateState = MainMenu.LOSE;
Main.menu.changeState(MainMenu.RATE_MAP);
};
};
};
};
};
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
Util.alignRight(this.clip.city, _arg1);
Util.alignRight(this.clip.difficulty, _arg1);
Util.alignRight(this.clip.time, _arg1);
Util.alignBottom(this.clip.rateButton, _arg1);
Util.alignLabel(this.clip.rateButton, this.clip.rateLabel);
}
override public function show():void{
var _local1:int;
this.clip.visible = true;
if (Main.canLoad()){
this.buttons.setNormal(this.clip.loadGame);
} else {
this.buttons.setGhosted(this.clip.loadGame);
};
this.clip.city.text = Main.menu.getSettings().getCityName();
this.clip.difficulty.text = Main.menu.getSettings().getDifficultyName();
_local1 = Main.menu.getSettings().getPlayTime();
this.clip.time.text = new Time(_local1).toString();
if (Main.menu.getSettings().getKey() == null){
this.clip.rateButton.visible = false;
this.clip.rateLabel.visible = false;
} else {
this.clip.rateButton.visible = true;
this.clip.rateLabel.visible = true;
};
}
}
}//package ui.menu
Section 129
//MainLoseClip (ui.menu.MainLoseClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class MainLoseClip extends MovieClip {
public var rateLabel:TextField;
public var background:MovieClip;
public var rateButton:MovieClip;
public var city:TextField;
public var retryMap:MovieClip;
public var difficulty:TextField;
public var time:TextField;
public var mainMenu:MovieClip;
public var replay:MovieClip;
public var loadGame:MovieClip;
public function MainLoseClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 130
//MainMenu (ui.menu.MainMenu)
package ui.menu {
import flash.display.*;
import logic.*;
import ui.*;
import flash.*;
public class MainMenu {
protected var menus:Array;
protected var oldState:int;
protected var settings:GameSettings;
protected var state:int;
public var rateState:int;
public var rateDifficulty:String;
public var rateFun:String;
public static var CREDITS:int = 3;
public static var DOWNLOAD_MAP:int = 18;
public static var EDIT_WAIT:int = 11;
public static var NAME:int = 2;
public static var OPTIONS:int = 7;
public static var CAMPAIGN:int = 25;
public static var EDIT:int = 12;
public static var LOSE:int = 5;
public static var RATE_MAP_WAIT:int = 24;
public static var LOAD_WAIT:int = 10;
public static var PLAY:int = 14;
public static var DIFFICULTY:int = 1;
public static var WIN:int = 4;
public static var STORY_LOSE:int = 17;
public static var START:int = 0;
public static var PEDIA:int = 8;
public static var EDIT_SELECT:int = 20;
public static var EDIT_PEDIA:int = 13;
public static var STORY_BRIEFING:int = 15;
public static var RATE_MAP:int = 23;
public static var TUTORIAL:int = 6;
public static var STORY_WIN:int = 16;
public static var DOWNLOAD_MAP_WAIT:int = 19;
public static var PASTE_MAP:int = 22;
public static var GENERATE_MAP:int = 9;
public static var LOAD_MAP_FAIL:int = 21;
public function MainMenu(_arg1:DisplayObjectContainer=null, _arg2:LayoutMain=null):void{
var _local3:Point;
super();
if (!Boot.skip_constructor){
this.rateState = WIN;
this.rateFun = "";
this.rateDifficulty = "";
Main.key.addHandler(this.hotkey);
_local3 = Util.minSize(_arg2.screenSize);
this.oldState = START;
this.state = START;
this.menus = [];
this.menus.push(new MainStart(_arg1, _local3));
this.menus.push(new MainDifficulty(_arg1, _local3));
this.menus.push(new MainName(_arg1, _local3));
this.menus.push(new MainCredits(_arg1, _local3));
this.menus.push(new MainWin(_arg1, _local3));
this.menus.push(new MainLose(_arg1, _local3));
this.menus.push(new MainTutorial(_arg1, _local3));
this.menus.push(new CenterOptions(_arg1, _local3, false));
this.menus.push(new CenterPedia(_arg1, _local3, Text.playPediaRoot, false));
this.menus.push(new WaitMenu(_arg1, _local3, WaitMenu.GENERATE_MAP));
this.menus.push(new WaitMenu(_arg1, _local3, WaitMenu.LOAD_GAME));
this.menus.push(new WaitMenu(_arg1, _local3, WaitMenu.EDIT_MAP));
this.menus.push(new MainEdit(_arg1, _local3));
this.menus.push(new CenterPedia(_arg1, _local3, Text.editPediaRoot, false));
this.menus.push(new MainPlay(_arg1, _local3));
this.menus.push(new StoryMenu(_arg1, _local3, StoryMenu.BRIEFING));
this.menus.push(new StoryMenu(_arg1, _local3, StoryMenu.WIN));
this.menus.push(new StoryMenu(_arg1, _local3, StoryMenu.LOSE));
this.menus.push(new MainDownloadMap(_arg1, _local3));
this.menus.push(new WaitMenu(_arg1, _local3, WaitMenu.DOWNLOAD_MAP));
this.menus.push(new MainEditSelect(_arg1, _local3));
this.menus.push(new MainFail(_arg1, _local3, false));
this.menus.push(new MainPasteMap(_arg1, _local3));
this.menus.push(new MainRate(_arg1, _local3));
this.menus.push(new WaitMenu(_arg1, _local3, WaitMenu.RATE_MAP));
this.menus.push(new MainCampaign(_arg1, _local3));
this.menus[this.state].show();
this.settings = new GameSettings();
};
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:MenuRoot;
_local1 = 0;
_local2 = this.menus;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.cleanup();
};
this.menus = null;
Main.key.clearHandlers();
}
public function setSettings(_arg1:GameSettings):void{
this.settings = _arg1;
}
public function changeState(_arg1:int):void{
this.oldState = this.state;
this.menus[this.state].hide();
this.menus[_arg1].show();
this.state = _arg1;
}
public function revertState():void{
this.changeState(this.oldState);
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
return (this.menus[this.state].hotkey(_arg1, _arg2));
}
public function resize(_arg1:LayoutMain):void{
var _local2:Point;
var _local3:int;
var _local4:Array;
var _local5:MenuRoot;
_local2 = Util.minSize(_arg1.screenSize);
_local3 = 0;
_local4 = this.menus;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local5.resize(_local2);
};
}
public function getSettings():GameSettings{
return (this.settings);
}
}
}//package ui.menu
Section 131
//MainName (ui.menu.MainName)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainName extends MenuRoot {
protected var clip:MainNameClip;
protected var buttons:ButtonList;
public function MainName(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainNameClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
Util.setupInputText(this.clip.cityName, Text.nameConstraint, Util.NAME_MAX_CHARS);
this.buttons = new ButtonList(this.click, null, [this.clip.playGame, this.clip.back]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
Main.menu.getSettings().setCityName(this.clip.cityName.text);
Main.menu.changeState(MainMenu.STORY_BRIEFING);
} else {
if (_arg1 == 1){
Main.menu.changeState(MainMenu.DIFFICULTY);
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(1);
} else {
if (_arg2 == Keyboard.enterCode){
this.click(0);
} else {
_local3 = false;
};
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
Util.alignRight(this.clip.notice, _arg1);
Util.alignBottom(this.clip.difficulty, _arg1);
Util.centerHorizontally(this.clip.difficulty, _arg1);
}
override public function show():void{
var _local1:int;
var _local2:int;
this.clip.visible = true;
this.clip.cityName.setSelection(0, 0);
_local1 = Lib.rand(Text.cities.length);
this.clip.cityName.text = Text.cities[_local1];
_local2 = this.clip.cityName.text.length;
this.clip.cityName.setSelection(0, _local2);
this.clip.stage.focus = this.clip.cityName;
this.clip.difficulty.text = Main.menu.getSettings().getDifficultyName();
}
}
}//package ui.menu
Section 132
//MainNameClip (ui.menu.MainNameClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class MainNameClip extends MovieClip {
public var notice:TextField;
public var background:MovieClip;
public var playGame:MovieClip;
public var cityName:TextField;
public var difficulty:TextField;
public var back:MovieClip;
public function MainNameClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 133
//MainPasteMap (ui.menu.MainPasteMap)
package ui.menu {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.text.*;
import flash.*;
public class MainPasteMap extends MenuRoot {
protected var clip:MainPasteMapClip;
protected var buttons:ButtonList;
public function MainPasteMap(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainPasteMapClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.clip.loadLabel.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.back, this.clip.loadButton]);
this.clip.entry.multiline = true;
this.clip.entry.wordWrap = true;
this.clip.entry.autoSize = TextFieldAutoSize.NONE;
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function componentUpdate(_arg1:Event):void{
this.clip.scrollBar.update();
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
if (Main.menu.getSettings().isEditor()){
Main.menu.changeState(MainMenu.EDIT_SELECT);
} else {
Main.menu.changeState(MainMenu.PLAY);
};
} else {
if (_arg1 == 1){
Main.menu.rateState = MainMenu.PASTE_MAP;
WaitMenu.loadMap(this.clip.entry.text);
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(0);
} else {
if (_arg2 == Keyboard.enterCode){
this.click(1);
} else {
_local3 = false;
};
};
return (_local3);
}
override public function resize(_arg1:Point):void{
var _local2:int;
Util.alignBottom(this.clip.back, _arg1);
Util.alignBottom(this.clip.loadButton, _arg1);
Util.centerHorizontally(this.clip.loadButton, _arg1);
Util.alignLabel(this.clip.loadButton, this.clip.loadLabel);
Util.scaleToFit(this.clip.background, _arg1);
_local2 = (_arg1.x - 60);
if (_local2 > 600){
_local2 = 600;
};
this.clip.entry.x = (((_arg1.x - _local2) / 2) - 10);
this.clip.entry.width = _local2;
this.clip.entry.height = (_arg1.y - 140);
this.clip.scrollBar.x = ((this.clip.entry.x + this.clip.entry.width) + 5);
this.clip.scrollBar.height = (_arg1.y - 140);
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
override public function show():void{
Main.error = "";
this.clip.visible = true;
this.clip.entry.text = "";
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
}
}//package ui.menu
Section 134
//MainPasteMapClip (ui.menu.MainPasteMapClip)
package ui.menu {
import fl.controls.*;
import flash.display.*;
import flash.text.*;
public dynamic class MainPasteMapClip extends MovieClip {
public var scrollBar:UIScrollBar;
public var background:MovieClip;
public var entry:TextField;
public var loadLabel:TextField;
public var loadButton:MovieClip;
public var back:MovieClip;
public function MainPasteMapClip(){
addFrameScript(0, frame1);
__setProp_scrollBar_MainPasteMapClip_Layer1_1();
}
function __setProp_scrollBar_MainPasteMapClip_Layer1_1(){
try {
scrollBar["componentInspectorSetting"] = true;
} catch(e:Error) {
};
scrollBar.direction = "vertical";
scrollBar.scrollTargetName = "background";
scrollBar.visible = true;
try {
scrollBar["componentInspectorSetting"] = false;
} catch(e:Error) {
};
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 135
//MainPlay (ui.menu.MainPlay)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainPlay extends MenuRoot {
protected var clip:MainPlayClip;
protected var buttons:ButtonList;
public function MainPlay(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainPlayClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.campaign, this.clip.randomMap, this.clip.downloadMap, this.clip.loadMap, this.clip.back]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
Main.menu.changeState(MainMenu.CAMPAIGN);
} else {
if (_arg1 == 1){
Main.menu.changeState(MainMenu.DIFFICULTY);
} else {
if (_arg1 == 2){
Main.menu.changeState(MainMenu.DOWNLOAD_MAP);
} else {
if (_arg1 == 3){
Main.menu.changeState(MainMenu.PASTE_MAP);
} else {
if (_arg1 == 4){
Main.menu.changeState(MainMenu.START);
};
};
};
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(4);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
override public function show():void{
Main.menu.getSettings().clearEditor();
this.clip.visible = true;
}
}
}//package ui.menu
Section 136
//MainPlayClip (ui.menu.MainPlayClip)
package ui.menu {
import flash.display.*;
public dynamic class MainPlayClip extends MovieClip {
public var campaign:MovieClip;
public var background:MovieClip;
public var randomMap:MovieClip;
public var loadMap:MovieClip;
public var downloadMap:MovieClip;
public var back:MovieClip;
public function MainPlayClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 137
//MainRate (ui.menu.MainRate)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainRate extends MenuRoot {
protected var difficulty:int;
protected var clip:MainRateClip;
protected var buttons:ButtonList;
protected var fun:int;
protected static var funRatings:Array = [Text.rateBad, Text.rateOk, Text.rateGood];
protected static var difficultyLabels:Array = ["easy", "medium", "hard"];
protected static var difficultyRatings:Array = [Text.rateEasy, Text.rateMedium, Text.rateHard];
protected static var funLabels:Array = ["bad", "ok", "good"];
public function MainRate(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.difficulty = 1;
this.fun = 1;
this.clip = new MainRateClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.back, this.clip.submitButton, this.clip.difficultyDown, this.clip.difficultyUp, this.clip.funDown, this.clip.funUp]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
if (_arg1 == 0){
Main.menu.revertState();
} else {
if (_arg1 == 1){
Main.menu.rateFun = funLabels[this.fun];
Main.menu.rateDifficulty = difficultyLabels[this.difficulty];
Main.menu.changeState(MainMenu.RATE_MAP_WAIT);
} else {
if (_arg1 == 2){
if (this.difficulty > 0){
this.difficulty--;
Util.success();
} else {
Util.failure();
};
this.updateDifficulty();
} else {
if (_arg1 == 3){
if (this.difficulty < 2){
this.difficulty++;
Util.success();
} else {
Util.failure();
};
this.updateDifficulty();
} else {
if (_arg1 == 4){
if (this.fun > 0){
this.fun--;
Util.success();
} else {
Util.failure();
};
this.updateFun();
} else {
if (_arg1 == 5){
if (this.fun < 2){
this.fun++;
Util.success();
} else {
Util.failure();
};
this.updateFun();
};
};
};
};
};
};
}
protected function updateDifficulty():void{
var _local1:int;
var _local2:int;
this.clip.difficulty.barText.text = difficultyRatings[this.difficulty];
_local1 = this.difficulty;
_local2 = 2;
this.clip.difficulty.bar.width = ((_local1 / _local2) * Option.statusBarSize);
if (this.difficulty == 0){
this.buttons.setGhosted(this.clip.difficultyDown);
} else {
this.buttons.setNormal(this.clip.difficultyDown);
};
if (this.difficulty == 2){
this.buttons.setGhosted(this.clip.difficultyUp);
} else {
this.buttons.setNormal(this.clip.difficultyUp);
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(0);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
protected function updateFun():void{
var _local1:int;
var _local2:int;
this.clip.fun.barText.text = funRatings[this.fun];
_local1 = this.fun;
_local2 = 2;
this.clip.fun.bar.width = ((_local1 / _local2) * Option.statusBarSize);
if (this.fun == 0){
this.buttons.setGhosted(this.clip.funDown);
} else {
this.buttons.setNormal(this.clip.funDown);
};
if (this.fun == 2){
this.buttons.setGhosted(this.clip.funUp);
} else {
this.buttons.setNormal(this.clip.funUp);
};
}
override public function show():void{
this.clip.visible = true;
this.difficulty = 1;
this.fun = 1;
this.updateDifficulty();
this.updateFun();
}
}
}//package ui.menu
Section 138
//MainRateClip (ui.menu.MainRateClip)
package ui.menu {
import flash.display.*;
public dynamic class MainRateClip extends MovieClip {
public var background:MovieClip;
public var submitButton:MovieClip;
public var fun:StatusClip;
public var funUp:MovieClip;
public var difficulty:StatusClip;
public var difficultyUp:MovieClip;
public var funDown:MovieClip;
public var back:MovieClip;
public var difficultyDown:MovieClip;
public function MainRateClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 139
//MainStart (ui.menu.MainStart)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainStart extends MenuRoot {
protected var clip:MainStartClip;
protected var buttons:ButtonList;
public function MainStart(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainStartClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.newGame, this.clip.loadGame, this.clip.pedia, this.clip.options, this.clip.editor, this.clip.credits]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
if (_arg1 == 0){
Util.success();
Main.menu.getSettings().clearEditor();
if (Main.firstGame()){
Main.menu.changeState(MainMenu.TUTORIAL);
} else {
Main.menu.changeState(MainMenu.PLAY);
};
} else {
if (_arg1 == 1){
if (Main.canLoad()){
Util.success();
Main.menu.changeState(MainMenu.LOAD_WAIT);
} else {
Util.failure();
};
} else {
if (_arg1 == 2){
Util.success();
Main.menu.changeState(MainMenu.PEDIA);
} else {
if (_arg1 == 3){
Util.success();
Main.menu.changeState(MainMenu.OPTIONS);
} else {
if (_arg1 == 4){
Util.success();
Main.menu.changeState(MainMenu.EDIT_SELECT);
} else {
if (_arg1 == 5){
Util.success();
Main.menu.changeState(MainMenu.CREDITS);
};
};
};
};
};
};
}
override public function resize(_arg1:Point):void{
var _local2:int;
Util.scaleToFit(this.clip.background, _arg1);
_local2 = Math.floor((this.clip.newGame.x + this.clip.newGame.width));
this.clip.title.x = ((_local2 + (((_arg1.x - _local2) - this.clip.title.width) / 2)) + 10);
this.clip.mb2.x = _arg1.x;
this.clip.mb2.y = _arg1.y;
}
override public function show():void{
this.clip.visible = true;
if (Main.canLoad()){
this.buttons.setNormal(this.clip.loadGame);
} else {
this.buttons.setGhosted(this.clip.loadGame);
};
}
}
}//package ui.menu
Section 140
//MainStartClip (ui.menu.MainStartClip)
package ui.menu {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public dynamic class MainStartClip extends MovieClip {
public var background:MovieClip;
public var mb2:SimpleButton;
public var title:MovieClip;
public var editor:MovieClip;
public var pedia:MovieClip;
public var credits:MovieClip;
public var options:MovieClip;
public var newGame:MovieClip;
public var loadGame:MovieClip;
public function MainStartClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
mb2.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
}
public function clickHandler(_arg1:MouseEvent):void{
navigateToURL(new URLRequest("http://www.arcadebomb.com"), "_blank");
}
}
}//package ui.menu
Section 141
//MainTutorial (ui.menu.MainTutorial)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class MainTutorial extends MenuRoot {
protected var clip:MainTutorialClip;
protected var buttons:ButtonList;
public function MainTutorial(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainTutorialClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.playTutorial, this.clip.skipTutorial, this.clip.back]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
Main.menu.rateState = MainMenu.CAMPAIGN;
WaitMenu.loadMap(Text.levels[0]);
Main.menu.getSettings().setCampaign(0);
} else {
if (_arg1 == 1){
Main.menu.changeState(MainMenu.PLAY);
} else {
if (_arg1 == 2){
Main.menu.changeState(MainMenu.START);
};
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(2);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
}
override public function show():void{
this.clip.visible = true;
}
}
}//package ui.menu
Section 142
//MainTutorialClip (ui.menu.MainTutorialClip)
package ui.menu {
import flash.display.*;
public dynamic class MainTutorialClip extends MovieClip {
public var background:MovieClip;
public var playTutorial:MovieClip;
public var back:MovieClip;
public var skipTutorial:MovieClip;
public function MainTutorialClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 143
//MainWin (ui.menu.MainWin)
package ui.menu {
import flash.display.*;
import logic.*;
import ui.*;
import mapgen.*;
import flash.*;
public class MainWin extends MenuRoot {
protected var clip:MainWinClip;
protected var buttons:ButtonList;
public function MainWin(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new MainWinClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.clip.rateLabel.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.replay, this.clip.mainMenu, this.clip.rateButton]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
protected function hintText():String{
var _local1:String;
var _local2:int;
var _local3:int;
_local1 = "";
_local2 = Main.menu.getSettings().getDifficulty();
Util.seed(Main.menu.getSettings().getNormalName());
if (_local2 == 1){
_local1 = Text.easter[0];
} else {
if (_local2 == 2){
_local1 = Text.easter[1];
} else {
if (_local2 >= 3){
_local3 = Util.rand((Text.easter.length - 2));
_local1 = Text.easter[(_local3 + 2)];
};
};
};
return (_local1);
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
var _local2:int;
Util.success();
if (_arg1 == 0){
Main.beginReplay();
} else {
if (_arg1 == 1){
_local2 = MainMenu.START;
if (Main.menu.getSettings().getCampaign() != -1){
_local2 = MainMenu.CAMPAIGN;
};
Main.menu.setSettings(new GameSettings());
Main.menu.changeState(_local2);
} else {
if (_arg1 == 2){
Main.menu.rateState = MainMenu.WIN;
Main.menu.changeState(MainMenu.RATE_MAP);
};
};
};
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
Util.alignRight(this.clip.city, _arg1);
Util.alignRight(this.clip.difficulty, _arg1);
Util.alignRight(this.clip.time, _arg1);
Util.alignBottom(this.clip.rateButton, _arg1);
Util.alignLabel(this.clip.rateButton, this.clip.rateLabel);
this.clip.mb2.x = _arg1.x;
this.clip.mb2.y = _arg1.y;
}
override public function show():void{
var _local1:int;
this.clip.visible = true;
this.clip.city.text = Main.menu.getSettings().getCityName();
this.clip.difficulty.text = Main.menu.getSettings().getDifficultyName();
_local1 = Main.menu.getSettings().getPlayTime();
this.clip.time.text = new Time(_local1).toString();
if (Main.menu.getSettings().getKey() == null){
this.clip.rateButton.visible = false;
this.clip.rateLabel.visible = false;
} else {
this.clip.rateButton.visible = true;
this.clip.rateLabel.visible = true;
};
}
}
}//package ui.menu
Section 144
//MainWinClip (ui.menu.MainWinClip)
package ui.menu {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.text.*;
public dynamic class MainWinClip extends MovieClip {
public var rateLabel:TextField;
public var background:MovieClip;
public var rateButton:MovieClip;
public var mb2:SimpleButton;
public var city:TextField;
public var difficulty:TextField;
public var time:TextField;
public var mainMenu:MovieClip;
public var replay:MovieClip;
public function MainWinClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
mb2.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
}
public function clickHandler(_arg1:MouseEvent):void{
navigateToURL(new URLRequest("http://www.arcadebomb.com"), "_blank");
}
}
}//package ui.menu
Section 145
//MenuRoot (ui.menu.MenuRoot)
package ui.menu {
public class MenuRoot {
public function MenuRoot():void{
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
return (false);
}
public function cleanup():void{
}
public function hide():void{
}
public function showTutorial():void{
this.show();
}
public function resize(_arg1:Point):void{
}
public function visitPage(_arg1:String):void{
}
public function show():void{
}
}
}//package ui.menu
Section 146
//OptionsMenuClip (ui.menu.OptionsMenuClip)
package ui.menu {
import flash.display.*;
public dynamic class OptionsMenuClip extends MovieClip {
public var scrollDown:MovieClip;
public var soundUp:MovieClip;
public var music:StatusClip;
public var background:MovieClip;
public var sound:StatusClip;
public var scrollUp:MovieClip;
public var soundDown:MovieClip;
public var musicDown:MovieClip;
public var musicUp:MovieClip;
public var scroll:StatusClip;
public var back:MovieClip;
}
}//package ui.menu
Section 147
//PediaHash (ui.menu.PediaHash)
package ui.menu {
import ui.*;
import flash.*;
public class PediaHash {
protected var hash:Hash;
public function PediaHash():void{
var _local1:int;
var _local2:String;
var _local3:String;
super();
if (!Boot.skip_constructor){
this.hash = new Hash();
_local1 = 0;
while (_local1 < (Text.pedia.length - 1)) {
_local2 = Text.pedia[_local1];
_local2 = StringTools.trim(_local2);
_local3 = Text.pedia[(_local1 + 1)];
this.hash.set(_local2, _local3);
_local1 = (_local1 + 2);
};
};
}
public function lookup(_arg1:String):String{
var _local2:String;
_local2 = (("ERROR: " + _arg1) + " not found");
if (this.hash.exists(_arg1)){
_local2 = this.hash.get(_arg1);
};
return (_local2);
}
}
}//package ui.menu
Section 148
//PediaMenuClip (ui.menu.PediaMenuClip)
package ui.menu {
import fl.controls.*;
import flash.display.*;
import flash.text.*;
public dynamic class PediaMenuClip extends MovieClip {
public var scrollBar:UIScrollBar;
public var background:MovieClip;
public var splash:MovieClip;
public var entry:TextField;
public var up:ButtonUpgrade;
public var forward:MovieClip;
public var returnToMenu:MovieClip;
public var back:MovieClip;
public function PediaMenuClip(){
__setProp_scrollBar_PediaMenuClip_Layer1_1();
}
function __setProp_scrollBar_PediaMenuClip_Layer1_1(){
try {
scrollBar["componentInspectorSetting"] = true;
} catch(e:Error) {
};
scrollBar.direction = "vertical";
scrollBar.scrollTargetName = "entry";
scrollBar.visible = true;
try {
scrollBar["componentInspectorSetting"] = false;
} catch(e:Error) {
};
}
}
}//package ui.menu
Section 149
//PlanMenuClip (ui.menu.PlanMenuClip)
package ui.menu {
import flash.display.*;
public dynamic class PlanMenuClip extends MovieClip {
public var abandon:ButtonAbandon;
public function PlanMenuClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 150
//Quick (ui.menu.Quick)
package ui.menu {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.*;
public class Quick {
protected var clip:QuickClip;
protected var buttonList:ButtonList;
protected static var HELP:int = 1;
protected static var RANGE_ON:int = 3;
protected static var RANGE_OFF:int = 2;
protected static var SYSTEM:int = 0;
public function Quick(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
if (!Boot.skip_constructor){
this.clip = new QuickClip();
_arg1.addChild(this.clip);
this.clip.visible = true;
this.clip.mouseEnabled = false;
this.clip.rangeOn.visible = false;
if (Game.settings.isEditor()){
this.clip.rangeOff.visible = false;
this.clip.rangeOn.visible = false;
};
this.buttonList = new ButtonList(this.click, this.hover, [this.clip.system, this.clip.help, this.clip.rangeOff, this.clip.rangeOn]);
this.clip.addEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.resize(_arg2);
};
}
protected function findDepot(_arg1:Point):Point{
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local2 = _arg1.clone();
if (this.hasDepot(_local2)){
return (_local2);
};
_local3 = Math.floor(Math.max(Game.map.sizeX(), Game.map.sizeY()));
_local4 = 1;
while (_local4 < _local3) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local5 = _temp1;
_local6 = -(_local5);
_local7 = _local5;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
_local2.y = (_arg1.y + _local8);
_local2.x = (_arg1.x - _local5);
if (this.hasDepot(_local2)){
return (_local2);
};
_local2.x = (_arg1.x + _local5);
if (this.hasDepot(_local2)){
return (_local2);
};
_local2.x = (_arg1.x + _local8);
_local2.y = (_arg1.y - _local5);
if (this.hasDepot(_local2)){
return (_local2);
};
_local2.y = (_arg1.y + _local5);
if (this.hasDepot(_local2)){
return (_local2);
};
};
};
return (null);
}
public function cleanup():void{
this.clip.removeEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.buttonList.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == SYSTEM){
Game.view.centerMenu.changeState(CenterMenu.SYSTEM);
} else {
if (_arg1 == HELP){
Game.view.centerMenu.changeState(CenterMenu.PEDIA);
} else {
if ((((_arg1 == RANGE_ON)) || ((_arg1 == RANGE_OFF)))){
Game.view.window.toggleRanges();
};
};
};
}
public function updateView(_arg1:Boolean):void{
if (_arg1){
this.clip.rangeOn.visible = true;
this.clip.rangeOff.visible = false;
} else {
this.clip.rangeOn.visible = false;
this.clip.rangeOff.visible = true;
};
}
protected function rollOver(_arg1:MouseEvent):void{
Game.view.toolTip.hide();
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if ((((_arg1 == "/")) || ((_arg1 == "?")))){
this.click(HELP);
} else {
if (_arg1 == " "){
Game.pause.toggle();
} else {
if (_arg1 == "v"){
this.click(RANGE_ON);
} else {
_local3 = false;
};
};
};
return (_local3);
}
protected function centerOn(_arg1:int, _arg2:int):void{
var _local3:LayoutGame;
_local3 = Game.view.layout;
Game.view.window.moveWindow((_arg1 - _local3.windowCenter.x), (_arg2 - _local3.windowCenter.y));
}
protected function hasDepot(_arg1:Point):Boolean{
var _local2:Boolean;
var _local3:Tower;
_local2 = false;
if (!Lib.outsideMap(_arg1)){
_local3 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
if (((!((_local3 == null))) && ((_local3.getType() == Tower.DEPOT)))){
_local2 = true;
};
};
return (_local2);
}
public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.quickOffset.x;
this.clip.y = _arg1.quickOffset.y;
}
protected function hover(_arg1:int):String{
var _local2:String;
_local2 = null;
if (_arg1 == SYSTEM){
_local2 = Text.systemTip;
} else {
if (_arg1 == HELP){
_local2 = Text.pediaTip;
} else {
if ((((_arg1 == RANGE_ON)) || ((_arg1 == RANGE_OFF)))){
if (Game.view.window.isShowingRanges()){
_local2 = Text.hideRangeTip;
} else {
_local2 = Text.showRangeTip;
};
};
};
};
return (_local2);
}
}
}//package ui.menu
Section 151
//QuickClip (ui.menu.QuickClip)
package ui.menu {
import flash.display.*;
public dynamic class QuickClip extends MovieClip {
public var rangeOn:ButtonRangeOn;
public var system:ButtonSystem;
public var help:ButtonHelp;
public var rangeOff:ButtonRangeOff;
}
}//package ui.menu
Section 152
//ReplayMenuClip (ui.menu.ReplayMenuClip)
package ui.menu {
import flash.display.*;
public dynamic class ReplayMenuClip extends MovieClip {
public var slow:MovieClip;
public var speed:StatusClip;
public var fast:MovieClip;
public var back:MovieClip;
}
}//package ui.menu
Section 153
//ResourceMenuClip (ui.menu.ResourceMenuClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class ResourceMenuClip extends MovieClip {
public var ammoUp:ButtonPlus;
public var boardsQuota:TextField;
public var ammoQuotaBackground:MovieClip;
public var ammoStockBackground:MovieClip;
public var survivorsQuota:TextField;
public var boardsIcon:MovieClip;
public var ammoQuota:TextField;
public var quota:TextField;
public var survivorsIcon:MovieClip;
public var ammoDown:ButtonMinus;
public var boardsDown:ButtonMinus;
public var ammoIcon:MovieClip;
public var boardsQuotaBackground:MovieClip;
public var survivorsDown:ButtonMinus;
public var survivorsQuotaBackground:MovieClip;
public var boardsUp:ButtonPlus;
public var boardsStock:TextField;
public var boardsStockBackground:MovieClip;
public var survivorsStock:TextField;
public var survivorsUp:ButtonPlus;
public var ammoStock:TextField;
public var survivorsStockBackground:MovieClip;
}
}//package ui.menu
Section 154
//SaveMapMenu (ui.menu.SaveMapMenu)
package ui.menu {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.text.*;
import flash.*;
import flash.system.*;
public class SaveMapMenu extends MenuRoot {
protected var clip:SaveMapMenuClip;
protected var buttons:ButtonList;
public function SaveMapMenu(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new SaveMapMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.clip.copyLabel.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.back, this.clip.copyButton]);
this.clip.entry.multiline = true;
this.clip.entry.wordWrap = true;
this.clip.entry.autoSize = TextFieldAutoSize.NONE;
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function componentUpdate(_arg1:Event):void{
this.clip.scrollBar.update();
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
Game.view.centerMenu.changeState(CenterMenu.SYSTEM);
} else {
if (_arg1 == 1){
System.setClipboard(this.clip.entry.text);
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(0);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
var _local2:int;
Util.centerHorizontally(this.clip.back, _arg1);
Util.alignBottom(this.clip.back, _arg1);
Util.alignBottom(this.clip.copyButton, _arg1);
Util.alignLabel(this.clip.copyButton, this.clip.copyLabel);
_local2 = (_arg1.x - 60);
if (_local2 > 600){
_local2 = 600;
};
this.clip.entry.x = (((_arg1.x - _local2) / 2) - 10);
this.clip.entry.width = _local2;
this.clip.entry.height = (_arg1.y - 140);
this.clip.scrollBar.x = ((this.clip.entry.x + this.clip.entry.width) + 5);
this.clip.scrollBar.height = (_arg1.y - 140);
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
override public function show():void{
this.clip.visible = true;
this.clip.entry.text = Game.settings.saveMap();
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
}
}//package ui.menu
Section 155
//SaveMapMenuClip (ui.menu.SaveMapMenuClip)
package ui.menu {
import fl.controls.*;
import flash.display.*;
import flash.text.*;
public dynamic class SaveMapMenuClip extends MovieClip {
public var scrollBar:UIScrollBar;
public var copyButton:MovieClip;
public var copyLabel:TextField;
public var entry:TextField;
public var back:MovieClip;
public function SaveMapMenuClip(){
__setProp_scrollBar_SaveMapMenuClip_Layer1_1();
}
function __setProp_scrollBar_SaveMapMenuClip_Layer1_1(){
try {
scrollBar["componentInspectorSetting"] = true;
} catch(e:Error) {
};
scrollBar.direction = "vertical";
scrollBar.scrollTargetName = "entry";
scrollBar.visible = true;
try {
scrollBar["componentInspectorSetting"] = false;
} catch(e:Error) {
};
}
}
}//package ui.menu
Section 156
//ScrollMenu (ui.menu.ScrollMenu)
package ui.menu {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.*;
public class ScrollMenu {
protected var hoverDir:Direction;
protected var arrows:Array;
public function ScrollMenu(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
var _local3:int;
var _local4:Array;
var _local5:Direction;
var _local6:ScrollArrowClip;
super();
if (!Boot.skip_constructor){
this.arrows = [];
_local3 = 0;
_local4 = Lib.directions;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local6 = new ScrollArrowClip();
_arg1.addChild(_local6);
_local6.rotation = Lib.directionToAngle(_local5);
_local6.gotoAndStop(1);
_local6.addEventListener(MouseEvent.ROLL_OVER, this.rollOver);
_local6.addEventListener(MouseEvent.ROLL_OUT, this.rollOut);
this.arrows.push(_local6);
if (!Game.settings.isEditor()){
_local6.visible = false;
};
};
this.hoverDir = null;
this.resize(_arg2);
};
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:MovieClip;
_local1 = 0;
_local2 = this.arrows;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.removeEventListener(MouseEvent.ROLL_OVER, this.rollOver);
_local3.removeEventListener(MouseEvent.ROLL_OUT, this.rollOut);
_local3.parent.removeChild(_local3);
};
}
protected function rollOut(_arg1:MouseEvent):void{
var _local2:int;
if (this.hoverDir != null){
_local2 = Lib.directionToIndex(this.hoverDir);
this.arrows[_local2].gotoAndStop(1);
this.hoverDir = null;
};
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
var _local4:Direction;
var _local5:Window;
_local3 = true;
_local4 = Direction.NORTH;
_local5 = Game.view.window;
if ((((_arg2 == 38)) || ((_arg2 == 104)))){
_local4 = Direction.NORTH;
_local5.scrollWindow(_local4, 1);
} else {
if ((((_arg2 == 40)) || ((_arg2 == 98)))){
_local4 = Direction.SOUTH;
_local5.scrollWindow(_local4, 1);
} else {
if ((((_arg2 == 39)) || ((_arg2 == 102)))){
_local4 = Direction.EAST;
_local5.scrollWindow(_local4, 1);
} else {
if ((((_arg2 == 37)) || ((_arg2 == 100)))){
_local4 = Direction.WEST;
_local5.scrollWindow(_local4, 1);
} else {
_local3 = false;
};
};
};
};
return (_local3);
}
public function resize(_arg1:Point):void{
this.arrows[0].x = (_arg1.x / 2);
this.arrows[0].y = 50;
this.arrows[1].x = (_arg1.x / 2);
this.arrows[1].y = _arg1.y;
this.arrows[2].x = _arg1.x;
this.arrows[2].y = (_arg1.y / 2);
this.arrows[3].x = 0;
this.arrows[3].y = (_arg1.y / 2);
}
public function enterFrame():void{
if (this.hoverDir != null){
Game.view.window.scrollWindow(this.hoverDir, 1);
};
}
protected function rollOver(_arg1:MouseEvent):void{
var _local2:int;
var _local3:Boolean;
var _local4:int;
var _local5:Array;
var _local6:MovieClip;
this.hoverDir = null;
_local2 = 0;
_local3 = false;
_local4 = 0;
_local5 = this.arrows;
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
if (_local6 == _arg1.target){
_local6.gotoAndStop(2);
_local3 = true;
break;
};
_local2++;
};
if (_local3){
this.hoverDir = Lib.indexToDirection(_local2);
};
}
}
}//package ui.menu
Section 157
//SetChargesClip (ui.menu.SetChargesClip)
package ui.menu {
import flash.display.*;
public dynamic class SetChargesClip extends MovieClip {
public var bar:MovieClip;
}
}//package ui.menu
Section 158
//SideBar (ui.menu.SideBar)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class SideBar {
protected var state:int;
protected var sideBars:Array;
protected var useHover:Boolean;
public static var WORKSHOP:int = 3;
public static var PLAN:int = 4;
public static var SNIPER:int = 1;
public static var BARRICADE:int = 0;
public static var DEPOT:int = 2;
public static var NONE:int = 5;
public function SideBar(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
if (!Boot.skip_constructor){
this.state = NONE;
this.sideBars = [];
this.sideBars.push(new SideBarricade(_arg1, _arg2));
this.sideBars.push(new SideSniper(_arg1, _arg2));
this.sideBars.push(new SideDepot(_arg1, _arg2));
this.sideBars.push(new SideWorkshop(_arg1, _arg2));
this.sideBars.push(new SidePlan(_arg1, _arg2));
this.sideBars.push(new SideRoot(null));
this.useHover = true;
};
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:SideRoot;
_local1 = 0;
_local2 = this.sideBars;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.cleanup();
};
this.sideBars = null;
}
public function clickTower(_arg1:Point):void{
this.changeState(this.sideBars[this.state].tower(_arg1));
}
public function hoverBackground(_arg1:Point):void{
if (this.useHover){
this.sideBars[this.state].hoverBackground(_arg1);
};
}
public function changeSelect():void{
var _local1:int;
var _local2:Point;
var _local3:MapCell;
_local1 = NONE;
_local2 = Game.select.getSelected();
if (_local2 != null){
_local3 = Game.map.getCell(_local2.x, _local2.y);
if (_local3.hasTower()){
_local1 = _local3.getTower().getType();
} else {
if (_local3.hasShadow()){
_local1 = PLAN;
};
};
};
this.changeState(_local1);
}
public function hoverTower(_arg1:Point):void{
if (this.useHover){
this.sideBars[this.state].hoverTower(_arg1);
};
}
protected function changeState(_arg1:int):void{
if (_arg1 != this.state){
this.sideBars[this.state].hide();
this.sideBars[_arg1].show();
this.state = _arg1;
};
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
return (this.sideBars[this.state].hotkey(_arg1, _arg2));
}
public function resize(_arg1:LayoutGame):void{
var _local2:int;
var _local3:Array;
var _local4:SideRoot;
_local2 = 0;
_local3 = this.sideBars;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
_local4.resize(_arg1);
};
}
public function enterFrame():void{
var _local1:int;
var _local2:int;
var _local3:int;
_local1 = 0;
_local2 = this.sideBars.length;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
if (_local3 == this.state){
this.sideBars[_local3].stepShow();
} else {
this.sideBars[_local3].stepHide();
};
};
}
public function clickBackground(_arg1:Point):void{
this.changeState(this.sideBars[this.state].background(_arg1));
}
public function enableHover():void{
this.useHover = true;
}
public function disableHover():void{
this.useHover = false;
}
public function show():void{
this.sideBars[this.state].show();
}
}
}//package ui.menu
Section 159
//SideBarricade (ui.menu.SideBarricade)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.text.*;
import flash.*;
public class SideBarricade extends SideRoot {
protected var clip:BarricadeMenuClip;
protected var hoverBase:HoverList;
protected static var BOARDS_DOWN:int = 1;
protected static var BOARDS_UP:int = 0;
public function SideBarricade(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var parent = _arg1;
var l = _arg2;
if (!Boot.skip_constructor){
this.clip = new BarricadeMenuClip();
parent.addChild(this.clip);
this.clip.visible = false;
this.resize(l);
super(this.clip, [this.clip.boardsUp, this.clip.boardsDown]);
this.hoverBase = new HoverList([function (_arg1:SideBarricade):DisplayObject{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = $this.clip.boardsStock;
$r = (Std._is(tmp, DisplayObject)) ? tmp : function (_arg1:SideBarricade):TextField{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this), this.clip.boardsIcon, this.clip.boardsStockBackground, this.clip.boardsQuota, this.clip.boardsQuotaBackground, this.clip.quota], [Text.boardsTip, Text.boardsTip, Text.boardsTip, Text.boardsQuotaTip, Text.boardsQuotaTip, Text.quotaTip]);
};
}
override protected function click(_arg1:int):void{
if (_arg1 == BOARDS_UP){
this.boardClick(Resource.BOARDS, true);
} else {
if (_arg1 == BOARDS_DOWN){
this.boardClick(Resource.BOARDS, false);
};
};
}
override protected function hover(_arg1:int):String{
if (_arg1 == BOARDS_UP){
return (this.boardHover(Resource.BOARDS, true));
};
if (_arg1 == BOARDS_DOWN){
return (this.boardHover(Resource.BOARDS, false));
};
return (null);
}
protected function boardClick(_arg1:Resource, _arg2:Boolean):void{
this.changeReserve(Resource.BOARDS, _arg2);
}
override public function cleanup():void{
this.hoverBase.cleanup();
super.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
return (false);
}
override public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.sideMenuOffset.x;
this.clip.y = _arg1.sideMenuOffset.y;
}
protected function boardHover(_arg1:Resource, _arg2:Boolean):String{
var _local3:String;
_local3 = null;
if (_arg2){
return (Text.barricadeBoardsIncreaseTip);
};
return (Text.barricadeBoardsDecreaseTip);
}
override public function show():void{
var _local1:Point;
var _local2:Tower;
super.show();
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
this.clip.boardsStock.text = Std.string(_local2.countResource(Resource.BOARDS));
this.clip.boardsQuota.text = Std.string(_local2.countReserve(Resource.BOARDS));
}
}
}//package ui.menu
Section 160
//SideDepot (ui.menu.SideDepot)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.text.*;
import flash.*;
public class SideDepot extends SideRoot {
protected var quotaText:Array;
protected var hoverBase:HoverList;
protected var clip:DepotMenuClip;
protected var stockText:Array;
protected static var SURVIVORS_DOWN:int = 3;
protected static var resources:Array = [Resource.AMMO, Resource.BOARDS, Resource.SURVIVORS];
protected static var AMMO_UP:int = 4;
protected static var BOARDS_UP:int = 5;
protected static var AMMO_DOWN:int = 1;
protected static var BOARDS_DOWN:int = 2;
protected static var ABANDON:int = 0;
protected static var barDecreaseTip:Array = [Text.depotAmmoDecreaseTip, Text.depotBoardsDecreaseTip, null, Text.depotSurvivorsDecreaseTip];
protected static var SURVIVORS_UP:int = 6;
protected static var barIncreaseTip:Array = [Text.depotAmmoIncreaseTip, Text.depotBoardsIncreaseTip, null, Text.depotSurvivorsIncreaseTip];
public function SideDepot(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var parent = _arg1;
var l = _arg2;
if (!Boot.skip_constructor){
this.clip = new DepotMenuClip();
parent.addChild(this.clip);
this.clip.visible = false;
this.resize(l);
this.quotaText = [this.clip.resource.ammoQuota, this.clip.resource.boardsQuota, this.clip.resource.survivorsQuota];
this.stockText = [this.clip.resource.ammoStock, this.clip.resource.boardsStock, this.clip.resource.survivorsStock];
super(this.clip, [this.clip.abandon, this.clip.resource.ammoDown, this.clip.resource.boardsDown, this.clip.resource.survivorsDown, this.clip.resource.ammoUp, this.clip.resource.boardsUp, this.clip.resource.survivorsUp]);
this.setResourceClip(this.clip, this.clip.resource);
this.hoverBase = new HoverList([function (_arg1:SideDepot):DisplayObject{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = $this.clip.resource.ammoStock;
$r = (Std._is(tmp, DisplayObject)) ? tmp : function (_arg1:SideDepot):TextField{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this), this.clip.resource.ammoIcon, this.clip.resource.ammoStockBackground, this.clip.resource.boardsStock, this.clip.resource.boardsIcon, this.clip.resource.boardsStockBackground, this.clip.resource.survivorsStock, this.clip.resource.survivorsIcon, this.clip.resource.survivorsStockBackground, this.clip.resource.quota, this.clip.resource.ammoQuota, this.clip.resource.ammoQuotaBackground, this.clip.resource.boardsQuota, this.clip.resource.boardsQuotaBackground, this.clip.resource.survivorsQuota, this.clip.resource.survivorsQuotaBackground], [Text.ammoTip, Text.ammoTip, Text.ammoTip, Text.boardsTip, Text.boardsTip, Text.boardsTip, Text.survivorsTip, Text.survivorsTip, Text.survivorsTip, Text.quotaTip, Text.ammoQuotaTip, Text.ammoQuotaTip, Text.boardsQuotaTip, Text.boardsQuotaTip, Text.survivorsQuotaTip, Text.survivorsQuotaTip]);
if (Game.settings.isEditor()){
this.clip.abandon.visible = false;
};
};
}
override public function hide():void{
super.hide();
}
protected function showButtons():void{
this.showReserveButtons([this.clip.resource.ammoDown, this.clip.resource.boardsDown, this.clip.resource.survivorsDown], [Resource.AMMO, Resource.BOARDS, Resource.SURVIVORS]);
if (Game.progress.getDepotCount() <= 1){
this.buttonList.setGhosted(this.clip.abandon);
} else {
this.buttonList.setNormal(this.clip.abandon);
};
}
override protected function click(_arg1:int):void{
var _local2:Boolean;
var _local3:Resource;
if (_arg1 == ABANDON){
if (Game.progress.getDepotCount() <= 1){
Util.failure();
} else {
Util.fleeClick();
Util.success();
};
} else {
_local2 = this.getIncreasing(_arg1);
_local3 = this.getResource(_arg1);
this.barClick(_local3, _local2);
};
if (_arg1 != ABANDON){
this.show();
};
}
override protected function hover(_arg1:int):String{
var _local2:String;
var _local3:Boolean;
var _local4:Resource;
_local2 = null;
if (_arg1 == ABANDON){
if (Game.progress.getDepotCount() <= 1){
_local2 = Text.noFleeTip;
} else {
_local2 = Text.fleeTip;
};
} else {
_local3 = this.getIncreasing(_arg1);
_local4 = this.getResource(_arg1);
_local2 = this.barHover(_local4, _local3);
};
return (_local2);
}
protected function getIncreasing(_arg1:int):Boolean{
var _local2:Boolean;
_local2 = true;
if ((((((_arg1 == AMMO_DOWN)) || ((_arg1 == BOARDS_DOWN)))) || ((_arg1 == SURVIVORS_DOWN)))){
_local2 = false;
};
return (_local2);
}
protected function barHover(_arg1:Resource, _arg2:Boolean):String{
var _local3:String;
var _local4:int;
_local3 = null;
_local4 = Lib.resourceToIndex(_arg1);
if (_arg2){
_local3 = barIncreaseTip[_local4];
} else {
if (this.getTower().countReserve(_arg1) > 0){
_local3 = barDecreaseTip[_local4];
} else {
_local3 = SideRoot.barNoDecreaseTip[_local4];
};
};
return (_local3);
}
protected function barClick(_arg1:Resource, _arg2:Boolean):void{
this.changeReserve(_arg1, _arg2);
}
protected function getResource(_arg1:int):Resource{
var _local2:Resource;
_local2 = Resource.SURVIVORS;
if ((((_arg1 == AMMO_DOWN)) || ((_arg1 == AMMO_UP)))){
_local2 = Resource.AMMO;
} else {
if ((((_arg1 == BOARDS_DOWN)) || ((_arg1 == BOARDS_UP)))){
_local2 = Resource.BOARDS;
};
};
return (_local2);
}
override public function cleanup():void{
this.hoverBase.cleanup();
super.removeResourceClip(this.clip);
super.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
Util.success();
this.show();
} else {
_local3 = Util.towerMenuHotkey(_arg1, _arg2);
};
return (_local3);
}
override public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.sideMenuOffset.x;
this.clip.y = _arg1.sideMenuOffset.y;
}
override public function show():void{
super.show();
showResources(this.quotaText, this.stockText);
this.showButtons();
}
protected static function showResources(_arg1:Array, _arg2:Array):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Resource;
var _local7:Tower;
var _local8:int;
var _local9:int;
var _local10:int;
_local3 = 0;
_local4 = _arg1.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = resources[_local5];
_local7 = SideRoot.getSelectedTower();
_local8 = 1;
_local9 = Math.floor((_local7.countReserve(_local6) / _local8));
_arg1[_local5].text = Std.string(_local9);
_local10 = Math.floor((_local7.countResource(_local6) / _local8));
_arg2[_local5].text = Std.string(_local10);
};
}
}
}//package ui.menu
Section 161
//SidePlan (ui.menu.SidePlan)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class SidePlan extends SideRoot {
protected var clip:PlanMenuClip;
public function SidePlan(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
if (!Boot.skip_constructor){
this.clip = new PlanMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.resize(_arg2);
super(this.clip, [this.clip.abandon]);
};
}
protected function cancelClick():void{
var _local1:Point;
_local1 = Game.select.getSelected();
Game.map.getCell(_local1.x, _local1.y).clearShadow();
Game.update.changeSelect(null);
Util.success();
}
override protected function click(_arg1:int):void{
this.cancelClick();
}
override protected function hover(_arg1:int):String{
return (this.cancelHover());
}
override public function cleanup():void{
super.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if ((((_arg2 == Keyboard.deleteCode)) || ((_arg2 == Keyboard.backSpaceCode)))){
this.cancelClick();
} else {
if (_arg2 == Keyboard.escapeCode){
Game.update.changeSelect(null);
Util.success();
} else {
_local3 = false;
};
};
return (_local3);
}
override public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.sideMenuOffset.x;
this.clip.y = _arg1.sideMenuOffset.y;
}
protected function cancelHover():String{
return (Text.planCancelTip);
}
}
}//package ui.menu
Section 162
//SideRoot (ui.menu.SideRoot)
package ui.menu {
import flash.display.*;
import flash.events.*;
import logic.*;
import ui.*;
import flash.*;
public class SideRoot {
protected var base:MovieClip;
protected var alpha:int;
protected var buttonList:ButtonList;
protected var resourceClip:MovieClip;
protected static var maxAlpha:int = 3;
protected static var barNoDecreaseTip:Array = [Text.ammoNoDecreaseTip, Text.boardsNoDecreaseTip, Text.foodNoDecreaseTip, Text.survivorsNoDecreaseTip];
public function SideRoot(_arg1:MovieClip=null, _arg2:Array=null):void{
var _local3:Array;
super();
if (!Boot.skip_constructor){
this.base = _arg1;
this.alpha = 0;
if (this.base != null){
this.base.alpha = 0;
this.base.addEventListener(MouseEvent.ROLL_OVER, this.baseOver);
};
this.resourceClip = null;
_local3 = [];
if (_arg2 != null){
_local3 = _arg2;
};
this.buttonList = new ButtonList(this.click, this.hover, _local3);
};
}
protected function setResourceClip(_arg1:MovieClip, _arg2:MovieClip):void{
this.resourceClip = _arg2;
this.resourceClip.y = Game.view.layout.resourceShownOffset;
_arg1.addEventListener(MouseEvent.ROLL_OVER, this.rollOver);
_arg1.addEventListener(MouseEvent.ROLL_OUT, this.rollOut);
}
public function hide():void{
}
protected function baseOver(_arg1:MouseEvent):void{
Game.view.toolTip.hide();
}
protected function click(_arg1:int):void{
}
public function tower(_arg1:Point):int{
Util.success();
return (this.changeSelect(_arg1));
}
public function hoverBackground(_arg1:Point):void{
var _local2:MapCell;
var _local3:String;
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
_local3 = null;
if (_local2.hasShadow()){
_local3 = Text.hoverPlanTip;
} else {
if (_local2.feature != null){
_local3 = _local2.feature.getHoverTip();
} else {
if (_local2.hasZombies()){
_local3 = Text.hoverZombieTip;
} else {
if (_local2.getBuilding() != null){
_local3 = _local2.getBuilding().getToolTip();
} else {
if (_local2.hasRubble()){
_local3 = Text.hoverRubbleTip;
};
};
};
};
};
Game.view.toolTip.show(_local3);
}
protected function changeSelect(_arg1:Point):int{
var _local2:MapCell;
if (_arg1 == null){
Game.update.changeSelect(null);
} else {
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
if (((_local2.hasTower()) || (_local2.hasShadow()))){
if (((!(Game.settings.isEditor())) || (Point.isEqual(Game.editor.getSelectedSquare(), _arg1)))){
Game.update.changeSelect(_arg1);
} else {
Game.update.changeSelect(null);
};
} else {
Game.update.changeSelect(null);
};
};
return (SideBar.NONE);
}
protected function rollOut(_arg1:MouseEvent):void{
}
protected function getTower():Tower{
return (getSelectedTower());
}
protected function showReserveButtons(_arg1:Array, _arg2:Array):void{
var _local3:Tower;
var _local4:int;
var _local5:int;
var _local6:int;
_local3 = this.getTower();
_local4 = 0;
_local5 = _arg1.length;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
if (_local3.countReserve(_arg2[_local6]) < Lib.truckLoad(_arg2[_local6])){
this.buttonList.setGhosted(_arg1[_local6]);
} else {
this.buttonList.setNormal(_arg1[_local6]);
};
};
}
protected function removeResourceClip(_arg1:MovieClip):void{
if (this.resourceClip != null){
_arg1.removeEventListener(MouseEvent.ROLL_OVER, this.rollOver);
_arg1.removeEventListener(MouseEvent.ROLL_OUT, this.rollOut);
this.resourceClip = null;
};
}
public function cleanup():void{
if (this.base != null){
this.base.removeEventListener(MouseEvent.ROLL_OVER, this.baseOver);
};
this.buttonList.cleanup();
}
public function stepShow():void{
if (this.base != null){
if (this.alpha < maxAlpha){
this.alpha++;
if (this.alpha == maxAlpha){
this.base.alpha = 1;
} else {
this.base.alpha = (this.alpha / maxAlpha);
};
};
};
}
protected function changeReserve(_arg1:Resource, _arg2:Boolean):void{
var _local3:ResourceCount;
var _local4:Point;
_local3 = new ResourceCount(_arg1, Lib.truckLoad(_arg1));
_local4 = Game.select.getSelected();
if (_arg2){
this.getTower().addReserve(_local3);
Util.success();
if (_arg1 == Resource.AMMO){
Game.script.trigger(Script.CLICK_ADD_AMMO, _local4);
} else {
if (_arg1 == Resource.BOARDS){
Game.script.trigger(Script.CLICK_ADD_BOARDS, _local4);
} else {
if (_arg1 == Resource.SURVIVORS){
Game.script.trigger(Script.CLICK_ADD_SURVIVORS, _local4);
};
};
};
} else {
if (this.getTower().countReserve(_arg1) > 0){
this.getTower().removeReserve(_local3);
Util.success();
if (_arg1 == Resource.AMMO){
Game.script.trigger(Script.CLICK_REMOVE_AMMO, _local4);
} else {
if (_arg1 == Resource.BOARDS){
Game.script.trigger(Script.CLICK_REMOVE_BOARDS, _local4);
} else {
if (_arg1 == Resource.SURVIVORS){
Game.script.trigger(Script.CLICK_REMOVE_SURVIVORS, _local4);
};
};
};
} else {
Util.failure();
};
};
}
public function hoverTower(_arg1:Point):void{
var _local2:String;
var _local3:Tower;
var _local4:int;
_local2 = null;
_local3 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
_local4 = _local3.getType();
if (_local4 == Tower.DEPOT){
_local2 = Text.hoverDepotTip;
} else {
if (_local4 == Tower.WORKSHOP){
_local2 = Text.hoverWorkshopTip;
} else {
if (_local4 == Tower.SNIPER){
if (_local3.countResource(Resource.SURVIVORS) == 0){
_local2 = Text.hoverSniperNoSurvivorsTip;
} else {
if (_local3.countResource(Resource.AMMO) == 0){
_local2 = Text.hoverSniperNoAmmoTip;
} else {
if (_local3.isHoldingFire()){
_local2 = Text.hoverSniperHoldFireTip;
} else {
_local2 = Text.hoverSniperTip;
};
};
};
} else {
if (_local3.countResource(Resource.BOARDS) == 0){
_local2 = Text.hoverBarricadeNoBoardsTip;
} else {
_local2 = Text.hoverBarricadeTip;
};
};
};
};
Game.view.toolTip.show(_local2);
}
public function background(_arg1:Point):int{
if (Game.select.getSelected() != null){
Util.success();
};
return (this.changeSelect(_arg1));
}
protected function rollOver(_arg1:MouseEvent):void{
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
return (false);
}
public function resize(_arg1:LayoutGame):void{
}
public function stepHide():void{
if (this.base != null){
if (this.alpha > 0){
this.alpha--;
if (this.alpha == 0){
this.base.alpha = 0;
this.base.visible = false;
} else {
this.base.alpha = (this.alpha / maxAlpha);
};
};
};
}
protected function hover(_arg1:int):String{
return (null);
}
public function show():void{
if (this.base != null){
this.base.visible = true;
};
}
protected static function getSelectedTower():Tower{
var _local1:Point;
_local1 = Game.select.getSelected();
return (Game.map.getCell(_local1.x, _local1.y).getTower());
}
}
}//package ui.menu
Section 163
//SideSniper (ui.menu.SideSniper)
package ui.menu {
import flash.display.*;
import logic.*;
import ui.*;
import flash.*;
public class SideSniper extends SideRoot {
protected var stocks:Array;
protected var resources:Array;
protected var hoverBase:HoverList;
protected var clip:SniperMenuClip;
protected var quotas:Array;
protected static var SURVIVORS_UP:int = 8;
protected static var FIRE_AT_WILL:int = 3;
protected static var SURVIVORS_DOWN:int = 6;
protected static var SHOOT_INTO_AIR:int = 1;
protected static var barIncreaseTip:Array = [Text.sniperAmmoIncreaseTip, null, null, Text.sniperSurvivorsIncreaseTip];
protected static var AMMO_DOWN:int = 5;
protected static var ABANDON:int = 0;
protected static var barDecreaseTip:Array = [Text.sniperAmmoDecreaseTip, null, null, Text.sniperSurvivorsDecreaseTip];
protected static var accuracySize:int = 92;
protected static var AMMO_UP:int = 7;
protected static var UPGRADE:int = 4;
protected static var HOLD_FIRE:int = 2;
public function SideSniper(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var parent = _arg1;
var l = _arg2;
if (!Boot.skip_constructor){
this.clip = new SniperMenuClip();
parent.addChild(this.clip);
this.clip.visible = false;
this.clip.accuracy.mouseChildren = false;
this.resize(l);
super(this.clip, [this.clip.abandon, this.clip.shootIntoAir, this.clip.holdFire, this.clip.fireAtWill, this.clip.upgrade, this.clip.resource.ammoDown, this.clip.resource.survivorsDown, this.clip.resource.ammoUp, this.clip.resource.survivorsUp]);
this.setResourceClip(this.clip, this.clip.resource);
this.stocks = [this.clip.resource.ammoStock, this.clip.resource.survivorsStock];
this.quotas = [this.clip.resource.ammoQuota, this.clip.resource.survivorsQuota];
this.resources = [Resource.AMMO, Resource.SURVIVORS];
this.hoverBase = new HoverList([function (_arg1:SideSniper):DisplayObject{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = $this.clip.accuracy;
$r = (Std._is(tmp, DisplayObject)) ? tmp : function (_arg1:SideSniper):AccuracyClip{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this), this.clip.resource.ammoStock, this.clip.resource.ammoIcon, this.clip.resource.ammoStockBackground, this.clip.resource.survivorsStock, this.clip.resource.survivorsIcon, this.clip.resource.survivorsStockBackground, this.clip.resource.quota, this.clip.resource.ammoQuota, this.clip.resource.ammoQuotaBackground, this.clip.resource.survivorsQuota, this.clip.resource.survivorsQuotaBackground], [Text.accuracyBarTip, Text.ammoTip, Text.ammoTip, Text.ammoTip, Text.survivorsTip, Text.survivorsTip, Text.survivorsTip, Text.quotaTip, Text.ammoQuotaTip, Text.ammoQuotaTip, Text.survivorsQuotaTip, Text.survivorsQuotaTip]);
if (Game.settings.isEditor()){
this.clip.abandon.visible = false;
this.clip.shootIntoAir.visible = false;
this.clip.holdFire.visible = false;
this.clip.fireAtWill.visible = false;
this.clip.upgrade.visible = false;
};
};
}
protected function getResource(_arg1:int):Resource{
var _local2:Resource;
_local2 = Resource.SURVIVORS;
if ((((_arg1 == AMMO_DOWN)) || ((_arg1 == AMMO_UP)))){
_local2 = Resource.AMMO;
};
return (_local2);
}
protected function upgradeHover():String{
var _local1:String;
var _local2:Point;
var _local3:Tower;
var _local4:String;
_local1 = null;
_local2 = Game.select.getSelected();
_local3 = Game.map.getCell(_local2.x, _local2.y).getTower();
if (_local3.isUpgrading()){
_local1 = Text.upgradeInProgressTip;
} else {
if (!_local3.canUpgrade()){
_local1 = Text.upgradeMaxTip;
} else {
if (_local3.getUpgradeSupplier() != null){
_local4 = _local3.getUpgradeLeftText();
_local1 = Text.upgradeSniperTip(_local4);
} else {
_local1 = Text.upgradeNoResourceTip;
};
};
};
return (_local1);
}
override protected function click(_arg1:int):void{
var _local2:Boolean;
var _local3:Resource;
var _local4:Tower;
if (_arg1 == ABANDON){
Util.fleeClick();
Util.success();
} else {
if (_arg1 == SHOOT_INTO_AIR){
this.wasteShotClick();
} else {
if ((((_arg1 == HOLD_FIRE)) || ((_arg1 == FIRE_AT_WILL)))){
this.toggleFireClick();
} else {
if (_arg1 == UPGRADE){
this.upgradeClick();
} else {
_local2 = this.getIncreasing(_arg1);
_local3 = this.getResource(_arg1);
_local4 = this.getTower();
if (((((!(_local2)) || (!((_local3 == Resource.SURVIVORS))))) || ((_local4.countReserve(Resource.SURVIVORS) < Sniper.maxSurvivors)))){
this.barClick(_local3, _local2);
} else {
Util.failure();
};
};
};
};
};
}
override public function cleanup():void{
this.hoverBase.cleanup();
super.removeResourceClip(this.clip);
super.cleanup();
this.clip.parent.removeChild(this.clip);
}
protected function toggleFireHover():String{
var _local1:Point;
var _local2:Tower;
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
if (_local2.isHoldingFire()){
return (Text.enableFireTip);
};
return (Text.disableFireTip);
}
override public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.sideMenuOffset.x;
this.clip.y = _arg1.sideMenuOffset.y;
}
protected function barClick(_arg1:Resource, _arg2:Boolean):void{
this.changeReserve(_arg1, _arg2);
}
protected function wasteShotClick():void{
var _local1:Point;
var _local2:Tower;
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
if (_local2.canWasteShot()){
Util.success();
_local2.wasteShot();
Game.script.trigger(Script.CLICK_SHOOT, _local1);
} else {
Util.failure();
if (_local2.countResource(Resource.SURVIVORS) == 0){
Game.view.warning.show(Text.noSurvivorsWarning);
} else {
if (_local2.countResource(Resource.AMMO) == 0){
Game.view.warning.show(Text.noAmmoWarning);
} else {
Game.view.warning.show(Text.noBoardsWarning);
};
};
};
this.show();
}
override protected function hover(_arg1:int):String{
var _local2:String;
var _local3:Boolean;
var _local4:Resource;
_local2 = null;
if (_arg1 == ABANDON){
_local2 = Util.fleeHover();
} else {
if (_arg1 == SHOOT_INTO_AIR){
_local2 = this.wasteShotHover();
} else {
if ((((_arg1 == HOLD_FIRE)) || ((_arg1 == FIRE_AT_WILL)))){
_local2 = this.toggleFireHover();
} else {
if (_arg1 == UPGRADE){
_local2 = this.upgradeHover();
} else {
_local3 = this.getIncreasing(_arg1);
_local4 = this.getResource(_arg1);
_local2 = this.barHover(_local4, _local3);
};
};
};
};
return (_local2);
}
protected function upgradeClick():void{
var _local1:Point;
var _local2:Tower;
var _local3:Boolean;
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
_local3 = _local2.startUpgradeTruck();
if (_local3){
Game.script.trigger(Script.CLICK_UPGRADE, _local1);
Util.success();
} else {
Util.failure();
if (_local2.isUpgrading()){
Game.view.warning.show(Text.upgradeInProgressWarning);
} else {
Game.view.warning.show(Text.noUpgradeResourcesWarning);
};
};
this.show();
}
protected function wasteShotHover():String{
var _local1:Point;
var _local2:Tower;
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
if (_local2.canWasteShot()){
return (Text.wasteShotTip);
};
return (Text.noWasteShotTip);
}
protected function barHover(_arg1:Resource, _arg2:Boolean):String{
var _local3:String;
var _local4:int;
_local3 = null;
_local4 = Lib.resourceToIndex(_arg1);
if (_arg2){
_local3 = barIncreaseTip[_local4];
} else {
if (this.getTower().countReserve(_arg1) > 0){
_local3 = barDecreaseTip[_local4];
} else {
_local3 = SideRoot.barNoDecreaseTip[_local4];
};
};
return (_local3);
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if ((((_arg1 == "a")) || ((_arg1 == "A")))){
this.wasteShotClick();
} else {
if ((((_arg1 == "f")) || ((_arg1 == "F")))){
this.toggleFireClick();
} else {
if ((((_arg1 == "u")) || ((_arg1 == "U")))){
this.upgradeClick();
} else {
_local3 = Util.towerMenuHotkey(_arg1, _arg2);
};
};
};
return (_local3);
}
protected function getIncreasing(_arg1:int):Boolean{
var _local2:Boolean;
_local2 = true;
if ((((_arg1 == AMMO_DOWN)) || ((_arg1 == SURVIVORS_DOWN)))){
_local2 = false;
};
return (_local2);
}
override public function show():void{
var _local1:Point;
var _local2:Tower;
var _local3:int;
var _local4:int;
var _local5:int;
super.show();
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
_local3 = 0;
_local4 = this.resources.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
this.stocks[_local5].text = Std.string(_local2.countResource(this.resources[_local5]));
this.quotas[_local5].text = Std.string(_local2.countReserve(this.resources[_local5]));
};
this.clip.accuracy.bar.width = ((_local2.getAccuracy() / 100) * accuracySize);
if (_local2.canWasteShot()){
this.buttonList.setNormal(this.clip.shootIntoAir);
} else {
this.buttonList.setGhosted(this.clip.shootIntoAir);
};
if (!Game.settings.isEditor()){
if (_local2.isHoldingFire()){
this.clip.holdFire.visible = true;
this.clip.fireAtWill.visible = false;
} else {
this.clip.holdFire.visible = false;
this.clip.fireAtWill.visible = true;
};
if (_local2.isUpgrading()){
this.buttonList.setProgress(this.clip.upgrade);
this.clip.upgrade.visible = true;
} else {
if (!_local2.canUpgrade()){
this.clip.upgrade.visible = false;
} else {
if (_local2.getUpgradeSupplier() == null){
this.buttonList.setGhosted(this.clip.upgrade);
this.clip.upgrade.visible = true;
} else {
this.buttonList.setNormal(this.clip.upgrade);
this.clip.upgrade.visible = true;
};
};
};
};
this.showReserveButtons([this.clip.resource.ammoDown, this.clip.resource.survivorsDown], [Resource.AMMO, Resource.SURVIVORS]);
if (_local2.countReserve(Resource.SURVIVORS) >= Sniper.maxSurvivors){
this.buttonList.setGhosted(this.clip.resource.survivorsUp);
} else {
this.buttonList.setNormal(this.clip.resource.survivorsUp);
};
}
protected function toggleFireClick():void{
var _local1:Point;
var _local2:Tower;
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
_local2.toggleHoldFire();
Game.script.trigger(Script.CLICK_HOLD_FIRE, _local1);
Util.success();
this.show();
}
}
}//package ui.menu
Section 164
//SideWorkshop (ui.menu.SideWorkshop)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.*;
public class SideWorkshop extends SideRoot {
protected var clip:WorkshopMenuClip;
protected var hoverBase:HoverList;
protected var lefts:Array;
protected var stocks:Array;
protected static var ABANDON:int = 0;
protected static var resources:Array = [Resource.AMMO, Resource.BOARDS, Resource.SURVIVORS];
protected static var SURVIVORS_DOWN:int = 1;
protected static var SURVIVORS_UP:int = 2;
protected static var setChargesSize:int = 128;
public function SideWorkshop(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var parent = _arg1;
var l = _arg2;
if (!Boot.skip_constructor){
this.clip = new WorkshopMenuClip();
parent.addChild(this.clip);
this.clip.visible = false;
this.clip.setCharges.mouseChildren = false;
this.resize(l);
super(this.clip, [this.clip.abandon, this.clip.survivorsDown, this.clip.survivorsUp]);
this.stocks = [this.clip.ammoStock, this.clip.boardsStock, this.clip.survivorsStock];
this.lefts = [this.clip.ammoLeft, this.clip.boardsLeft, this.clip.survivorsLeft];
this.hoverBase = new HoverList([function (_arg1:SideWorkshop):DisplayObject{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = $this.clip.setCharges;
$r = (Std._is(tmp, DisplayObject)) ? tmp : function (_arg1:SideWorkshop):SetChargesClip{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this), this.clip.ammoStock, this.clip.ammoIcon, this.clip.ammoStockBackground, this.clip.boardsStock, this.clip.boardsIcon, this.clip.boardsStockBackground, this.clip.survivorsStock, this.clip.survivorsIcon, this.clip.survivorsStockBackground, this.clip.quota, this.clip.survivorsQuota, this.clip.survivorsQuotaBackground, this.clip.leftToExtract, this.clip.ammoLeft, this.clip.ammoLeftBackground, this.clip.boardsLeft, this.clip.boardsLeftBackground, this.clip.survivorsLeft, this.clip.survivorsLeftBackground], [Text.setChargesBarTip, Text.ammoTip, Text.ammoTip, Text.ammoTip, Text.boardsTip, Text.boardsTip, Text.boardsTip, Text.survivorsTip, Text.survivorsTip, Text.survivorsTip, Text.quotaTip, Text.survivorsQuotaTip, Text.survivorsQuotaTip, Text.leftToExtractTip, Text.ammoLeftTip, Text.ammoLeftTip, Text.boardsLeftTip, Text.boardsLeftTip, Text.survivorsLeftTip, Text.survivorsLeftTip]);
if (Game.settings.isEditor()){
this.clip.abandon.visible = false;
};
};
}
override public function hide():void{
}
protected function barClick(_arg1:Resource, _arg2:Boolean):void{
if (_arg1 == Resource.SURVIVORS){
this.changeReserve(_arg1, _arg2);
};
}
override protected function click(_arg1:int):void{
if (_arg1 == ABANDON){
Util.fleeClick();
Util.success();
} else {
if (_arg1 == SURVIVORS_DOWN){
this.barClick(Resource.SURVIVORS, false);
} else {
this.barClick(Resource.SURVIVORS, true);
};
};
}
override protected function hover(_arg1:int):String{
var _local2:String;
_local2 = null;
if (_arg1 == ABANDON){
_local2 = Util.fleeHover();
} else {
if (_arg1 == SURVIVORS_DOWN){
_local2 = this.barHover(Resource.SURVIVORS, false);
} else {
_local2 = this.barHover(Resource.SURVIVORS, true);
};
};
return (_local2);
}
protected function barHover(_arg1:Resource, _arg2:Boolean):String{
var _local3:String;
_local3 = null;
if (_arg1 == Resource.SURVIVORS){
if (_arg2){
_local3 = Text.workshopSurvivorsIncreaseTip;
} else {
if (this.getTower().countReserve(_arg1) > 0){
_local3 = Text.workshopSurvivorsDecreaseTip;
} else {
_local3 = Text.survivorsNoDecreaseTip;
};
};
};
return (_local3);
}
override public function cleanup():void{
this.hoverBase.cleanup();
super.cleanup();
this.clip.parent.removeChild(this.clip);
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
return (Util.towerMenuHotkey(_arg1, _arg2));
}
override public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.sideMenuOffset.x;
this.clip.y = _arg1.sideMenuOffset.y;
}
override public function show():void{
var _local1:Point;
var _local2:MapCell;
var _local3:Tower;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Resource;
var _local8:int;
var _local9:int;
var _local10:Number;
super.show();
_local1 = Game.select.getSelected();
_local2 = Game.map.getCell(_local1.x, _local1.y);
_local3 = _local2.getTower();
this.clip.survivorsQuota.text = Std.string(_local3.countReserve(Resource.SURVIVORS));
_local4 = 0;
_local5 = this.stocks.length;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local7 = resources[_local6];
this.stocks[_local6].text = Std.string(_local3.countResource(_local7));
this.lefts[_local6].text = Std.string(_local2.getRubbleCount(_local7));
};
if (_local2.feature != null){
_local8 = _local2.feature.workLeft();
_local9 = _local2.feature.maxWork();
_local10 = ((_local9 - _local8) / _local9);
this.clip.setCharges.visible = true;
this.clip.setCharges.bar.width = (_local10 * setChargesSize);
} else {
this.clip.setCharges.visible = false;
};
this.showReserveButtons([this.clip.survivorsDown], [Resource.SURVIVORS]);
}
}
}//package ui.menu
Section 165
//SniperMenuClip (ui.menu.SniperMenuClip)
package ui.menu {
import flash.display.*;
public dynamic class SniperMenuClip extends MovieClip {
public var resource:SniperResourceMenuClip;
public var upgrade:ButtonUpgrade;
public var abandon:ButtonAbandon;
public var fireAtWill:ButtonFireAtWill;
public var holdFire:ButtonFireHold;
public var shootIntoAir:ButtonFlare;
public var accuracy:AccuracyClip;
public function SniperMenuClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 166
//SniperResourceMenuClip (ui.menu.SniperResourceMenuClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class SniperResourceMenuClip extends MovieClip {
public var ammoUp:ButtonPlus;
public var ammoQuotaBackground:MovieClip;
public var ammoStockBackground:MovieClip;
public var survivorsQuota:TextField;
public var survivorsIcon:MovieClip;
public var ammoQuota:TextField;
public var quota:TextField;
public var ammoDown:ButtonMinus;
public var survivorsDown:ButtonMinus;
public var ammoIcon:MovieClip;
public var survivorsQuotaBackground:MovieClip;
public var survivorsUp:ButtonPlus;
public var survivorsStock:TextField;
public var ammoStock:TextField;
public var survivorsStockBackground:MovieClip;
}
}//package ui.menu
Section 167
//StatusClip (ui.menu.StatusClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class StatusClip extends MovieClip {
public var bar:MovieClip;
public var barText:TextField;
}
}//package ui.menu
Section 168
//StoryMenu (ui.menu.StoryMenu)
package ui.menu {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.text.*;
import flash.*;
public class StoryMenu extends MenuRoot {
protected var clip:StoryMenuClip;
protected var context:int;
protected var buttons:ButtonList;
public static var CENTER:int = 3;
public static var LOSE:int = 1;
public static var WIN:int = 0;
public static var BRIEFING:int = 2;
public function StoryMenu(_arg1:DisplayObjectContainer=null, _arg2:Point=null, _arg3:int=0):void{
if (!Boot.skip_constructor){
super();
this.context = _arg3;
this.clip = new StoryMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.clip.okButton]);
this.clip.briefing.multiline = true;
this.clip.briefing.wordWrap = true;
this.clip.briefing.autoSize = TextFieldAutoSize.NONE;
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function componentUpdate(_arg1:Event):void{
this.clip.scrollBar.update();
this.clip.removeEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
protected function click(_arg1:int):void{
Util.success();
if (this.context == WIN){
if (Main.menu.getSettings().isEditor()){
Main.menu.changeState(MainMenu.GENERATE_MAP);
} else {
Main.menu.changeState(MainMenu.WIN);
};
} else {
if (this.context == LOSE){
if (Main.menu.getSettings().isEditor()){
Main.menu.changeState(MainMenu.GENERATE_MAP);
} else {
Main.menu.changeState(MainMenu.LOSE);
};
} else {
if (this.context == BRIEFING){
Main.menu.changeState(MainMenu.GENERATE_MAP);
} else {
if (this.context == CENTER){
Game.view.centerMenu.revertState();
};
};
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if ((((_arg2 == Keyboard.escapeCode)) || ((_arg2 == Keyboard.enterCode)))){
this.click(0);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
var _local2:int;
Util.centerHorizontally(this.clip.okButton, _arg1);
Util.alignBottom(this.clip.okButton, _arg1);
Util.scaleToFit(this.clip.background, _arg1);
Util.scaleToFit(this.clip.splash, _arg1);
Util.scaleToFit(this.clip.splashWin, _arg1);
Util.scaleToFit(this.clip.splashLose, _arg1);
_local2 = (_arg1.x - 60);
if (_local2 > 600){
_local2 = 600;
};
this.clip.briefing.x = (((_arg1.x - _local2) / 2) - 10);
this.clip.briefing.width = _local2;
this.clip.briefing.height = (_arg1.y - 140);
this.clip.scrollBar.x = ((this.clip.briefing.x + this.clip.briefing.width) + 5);
this.clip.scrollBar.height = (_arg1.y - 140);
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
override public function show():void{
this.clip.visible = true;
this.clip.splash.visible = false;
this.clip.splashWin.visible = false;
this.clip.splashLose.visible = false;
if (this.context == WIN){
MainCampaign.setComplete(Main.menu.getSettings().getCampaign());
this.clip.splashWin.visible = true;
this.clip.briefing.text = Main.menu.getSettings().getWinText();
} else {
if (this.context == LOSE){
this.clip.splashLose.visible = true;
this.clip.briefing.text = Main.menu.getSettings().getLoseText();
} else {
if (this.context == BRIEFING){
this.clip.splash.visible = true;
this.clip.briefing.text = Main.menu.getSettings().getBriefingText();
} else {
if (this.context == CENTER){
this.clip.background.visible = false;
this.clip.briefing.text = Game.settings.getBriefingText();
};
};
};
};
this.clip.scrollBar.update();
this.clip.addEventListener(Event.ENTER_FRAME, this.componentUpdate);
}
}
}//package ui.menu
Section 169
//StoryMenuClip (ui.menu.StoryMenuClip)
package ui.menu {
import fl.controls.*;
import flash.display.*;
import flash.text.*;
public dynamic class StoryMenuClip extends MovieClip {
public var splashWin:MovieClip;
public var scrollBar:UIScrollBar;
public var splashLose:MovieClip;
public var background:MovieClip;
public var okButton:MovieClip;
public var splash:MovieClip;
public var briefing:TextField;
public function StoryMenuClip(){
__setProp_scrollBar_StoryMenuClip_Layer1_1();
}
function __setProp_scrollBar_StoryMenuClip_Layer1_1(){
try {
scrollBar["componentInspectorSetting"] = true;
} catch(e:Error) {
};
scrollBar.direction = "vertical";
scrollBar.scrollTargetName = "briefing";
scrollBar.visible = true;
try {
scrollBar["componentInspectorSetting"] = false;
} catch(e:Error) {
};
}
}
}//package ui.menu
Section 170
//SystemMenuClip (ui.menu.SystemMenuClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class SystemMenuClip extends MovieClip {
public var zombies:TextField;
public var saveGame:MovieClip;
public var editMapLabel:TextField;
public var bridges:TextField;
public var resume:MovieClip;
public var uploadMapLabel:TextField;
public var testMap:MovieClip;
public var city:TextField;
public var pedia:MovieClip;
public var briefing:MovieClip;
public var saveMapLabel:TextField;
public var saveMap:MovieClip;
public var briefingLabel:TextField;
public var options:MovieClip;
public var testMapLabel:TextField;
public var uploadMap:MovieClip;
public var retryGame:MovieClip;
public var difficulty:TextField;
public var mainMenu:MovieClip;
public var editMap:MovieClip;
public var loadGame:MovieClip;
}
}//package ui.menu
Section 171
//UploadMapMenu (ui.menu.UploadMapMenu)
package ui.menu {
import flash.display.*;
import ui.*;
import flash.text.*;
import flash.*;
import flash.system.*;
public class UploadMapMenu extends MenuRoot {
protected var clip:UploadMapMenuClip;
protected var buttons:ButtonList;
public function UploadMapMenu(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
super();
this.clip = new UploadMapMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.clip.url.selectable = true;
this.clip.url.autoSize = TextFieldAutoSize.NONE;
this.clip.url.mouseEnabled = true;
this.clip.url.multiline = false;
this.clip.url.wordWrap = false;
this.clip.url.alwaysShowSelection = true;
this.buttons = new ButtonList(this.click, null, [this.clip.back, this.clip.copyButton]);
this.resize(_arg2);
};
}
override public function hide():void{
this.clip.visible = false;
}
override public function cleanup():void{
this.buttons.cleanup();
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function click(_arg1:int):void{
Util.success();
if (_arg1 == 0){
Game.view.centerMenu.changeState(CenterMenu.SYSTEM);
} else {
if (_arg1 == 1){
System.setClipboard(this.clip.url.text);
};
};
}
override public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
this.click(0);
} else {
_local3 = false;
};
return (_local3);
}
override public function resize(_arg1:Point):void{
}
override public function show():void{
this.clip.visible = true;
this.clip.url.text = Game.settings.getUrl();
this.clip.url.setSelection(0, this.clip.url.text.length);
this.clip.stage.focus = this.clip.url;
}
}
}//package ui.menu
Section 172
//UploadMapMenuClip (ui.menu.UploadMapMenuClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class UploadMapMenuClip extends MovieClip {
public var copyButton:MovieClip;
public var url:TextField;
public var back:MovieClip;
public function UploadMapMenuClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 173
//WaitMenu (ui.menu.WaitMenu)
package ui.menu {
import flash.display.*;
import flash.events.*;
import logic.*;
import ui.*;
import flash.net.*;
import haxe.*;
import flash.*;
public class WaitMenu extends MenuRoot {
protected var loader:URLLoader;
protected var frame:int;
protected var usage:int;
protected var clip:WaitMenuClip;
public static var DOWNLOAD_MAP:int = 4;
public static var EDIT_MAP:int = 3;
protected static var frameWait:int = 2;
public static var LOAD_GAME:int = 1;
protected static var waitText:Array = [Text.waitGenerateMap, Text.waitLoadGame, Text.waitSaveGame, Text.waitEditMap, Text.waitDownloadMap, Text.waitUploadMap, Text.waitRateMap];
public static var GENERATE_MAP:int = 0;
public static var SAVE_GAME:int = 2;
public static var RATE_MAP:int = 6;
public static var UPLOAD_MAP:int = 5;
public function WaitMenu(_arg1:DisplayObjectContainer=null, _arg2:Point=null, _arg3:int=0):void{
if (!Boot.skip_constructor){
super();
this.usage = _arg3;
this.clip = new WaitMenuClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseEnabled = false;
this.clip.message.text = waitText[this.usage];
this.frame = 0;
this.loader = new URLLoader();
this.loader.dataFormat = URLLoaderDataFormat.VARIABLES;
this.loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, this.status);
this.loader.addEventListener(IOErrorEvent.IO_ERROR, this.ioError);
this.loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.securityError);
this.loader.addEventListener(Event.COMPLETE, this.complete);
this.resize(_arg2);
};
}
protected function complete(_arg1:Event):void{
var _local2:URLVariables;
var _local3:String;
var _local4:String;
_local2 = this.loader.data;
_local3 = _local2.error;
_local4 = _local2.result;
if (_local3 != null){
Main.error = (Main.error + (("Server Error: " + _local3) + "\n"));
errorSwitch(this.usage);
} else {
if (this.usage == RATE_MAP){
Main.menu.changeState(Main.menu.rateState);
} else {
if (_local4 == null){
Main.error = (Main.error + "No Result From Server\n");
} else {
if (this.usage == DOWNLOAD_MAP){
loadMap(_local4, _local2.key);
} else {
if (this.usage == UPLOAD_MAP){
Game.settings.setUrl(_local4);
Game.view.centerMenu.changeState(CenterMenu.UPLOAD_MAP);
};
};
};
};
};
}
override public function hide():void{
this.clip.visible = false;
this.clip.removeEventListener(Event.ENTER_FRAME, this.enterFrame);
}
override public function cleanup():void{
this.loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, this.status);
this.loader.removeEventListener(IOErrorEvent.IO_ERROR, this.ioError);
this.loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, this.securityError);
this.loader.removeEventListener(Event.COMPLETE, this.complete);
this.clip.removeEventListener(Event.ENTER_FRAME, this.enterFrame);
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function securityError(_arg1:SecurityErrorEvent):void{
Main.error = (Main.error + "Could not access network (Security Error)\n");
errorSwitch(this.usage);
}
protected function ioError(_arg1:IOErrorEvent):void{
Main.error = (Main.error + "Could not access network (IO Error)\n");
errorSwitch(this.usage);
}
override public function resize(_arg1:Point):void{
Util.scaleToFit(this.clip.background, _arg1);
Util.alignBottom(this.clip.message, _arg1);
Util.centerHorizontally(this.clip.message, _arg1);
}
protected function enterFrame(_arg1:Event):void{
var _local2:URLRequest;
var _local3:String;
var _local4:URLVariables;
var _local5:String;
var _local6:String;
var _local7:URLVariables;
this.frame--;
if (this.frame == 0){
_local2 = new URLRequest();
if (this.usage == GENERATE_MAP){
Main.beginPlay();
} else {
if (this.usage == LOAD_GAME){
Main.loadGame();
} else {
if (this.usage == SAVE_GAME){
Game.saveGame();
Game.view.centerMenu.changeState(CenterMenu.SYSTEM);
} else {
if (this.usage == EDIT_MAP){
Main.beginPlay();
} else {
if (this.usage == DOWNLOAD_MAP){
Main.error = "Map Download Failed:\n";
_local2.url = Main.menu.getSettings().getUrl();
this.loader.load(_local2);
} else {
if (this.usage == UPLOAD_MAP){
_local3 = "men judge generally more by the eye than by the hand, because it belongs to everybody to see you, to few to come in touch with you.";
Main.error = "Map Upload Failed:\n";
_local2.method = URLRequestMethod.POST;
_local4 = new URLVariables();
_local5 = Game.settings.saveMap();
_local4.name = Game.settings.getCityName();
_local4.map = _local5;
_local4.verify = Md5.encode((_local3 + _local5));
_local2.data = _local4;
_local2.url = "http://auriga-squad.appspot.com/upload";
this.loader.load(_local2);
} else {
if (this.usage == RATE_MAP){
Main.error = "Map Rate Failed:\n";
_local2.method = URLRequestMethod.POST;
_local6 = Main.menu.getSettings().getKey();
_local7 = new URLVariables();
_local7.fun = Main.menu.rateFun;
_local7.difficulty = Main.menu.rateDifficulty;
_local2.data = _local7;
_local2.url = ("http://auriga-squad.appspot.com/rate/" + _local6);
this.loader.load(_local2);
};
};
};
};
};
};
};
};
}
protected function status(_arg1:HTTPStatusEvent):void{
if (_arg1.status != 200){
Main.error = (Main.error + (("HTML Status: " + Std.string(_arg1.status)) + "\n"));
};
}
override public function show():void{
this.clip.visible = true;
this.clip.addEventListener(Event.ENTER_FRAME, this.enterFrame);
this.frame = frameWait;
}
protected static function errorSwitch(_arg1:int):void{
if ((((_arg1 == DOWNLOAD_MAP)) || ((_arg1 == RATE_MAP)))){
Main.menu.changeState(MainMenu.LOAD_MAP_FAIL);
} else {
if (_arg1 == UPLOAD_MAP){
Game.view.centerMenu.changeState(CenterMenu.SAVE_MAP_FAIL);
};
};
}
public static function loadMap(_arg1:String, _arg2:String=null):void{
var map = _arg1;
var key = _arg2;
try {
if (Main.menu.getSettings().isEditor()){
Main.menu.setSettings(new GameSettings());
Main.menu.getSettings().beginLoadEdit(map, "", "");
Main.menu.changeState(MainMenu.EDIT_WAIT);
} else {
Main.menu.setSettings(new GameSettings());
Main.menu.getSettings().setKey(key);
Main.menu.getSettings().beginNewCustom(map);
Main.menu.changeState(MainMenu.STORY_BRIEFING);
};
} catch(e:Error) {
Main.error = (Main.error + (("Failed to load map: " + e.message) + "\n"));
errorSwitch(DOWNLOAD_MAP);
};
}
}
}//package ui.menu
Section 174
//WaitMenuClip (ui.menu.WaitMenuClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class WaitMenuClip extends MovieClip {
public var message:TextField;
public var background:MovieClip;
public function WaitMenuClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 175
//WorkshopMenuClip (ui.menu.WorkshopMenuClip)
package ui.menu {
import flash.display.*;
import flash.text.*;
public dynamic class WorkshopMenuClip extends MovieClip {
public var ammoLeft:TextField;
public var survivorsLeft:TextField;
public var ammoLeftBackground:MovieClip;
public var boardsLeft:TextField;
public var survivorsLeftBackground:MovieClip;
public var ammoStockBackground:MovieClip;
public var survivorsQuota:TextField;
public var leftToExtract:TextField;
public var survivorsIcon:MovieClip;
public var boardsIcon:MovieClip;
public var abandon:ButtonAbandon;
public var boardsLeftBackground:MovieClip;
public var quota:TextField;
public var setCharges:SetChargesClip;
public var survivorsDown:ButtonMinus;
public var ammoIcon:MovieClip;
public var survivorsQuotaBackground:MovieClip;
public var boardsStock:TextField;
public var boardsStockBackground:MovieClip;
public var survivorsStock:TextField;
public var survivorsUp:ButtonPlus;
public var survivorsStockBackground:MovieClip;
public var ammoStock:TextField;
public function WorkshopMenuClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui.menu
Section 176
//AbstractFrame (ui.AbstractFrame)
package ui {
public interface AbstractFrame {
function fixedStep():void;
}
}//package ui
Section 177
//AmbientMusic (ui.AmbientMusic)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class AmbientMusic extends Sound {
public function AmbientMusic(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 178
//Animation (ui.Animation)
package ui {
import flash.*;
public class Animation {
protected var advance:Array;
protected var linkage:Array;
protected var number:int;
protected var doRotate:Boolean;
protected var layer:int;
protected var scale:Number;
protected var doReverse:Boolean;
protected var doFace:Boolean;
protected var doWait:Boolean;
protected var doOffset:Boolean;
protected var moveCount:int;
protected static var survivorAdvanceTable:Array = null;
public static var zombieDeathWait:int = 7;
public static var carryAmmo:Animation = null;
public static var carryFood:Animation = null;
public static var sniperScale:Number = 1;
protected static var validSurvivors:Array = [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20];
public static var attackTower:Animation = null;
public static var fireRifle:Animation = null;
public static var bodyLinkage:Array = linkageTable("gunCycle_midlayer_", "", validSurvivors);
public static var headLinkage:Array = linkageTable("gunCycle_toplayer_", "", validSurvivors);
public static var carryBoards:Animation = null;
protected static var mobileScale:Number = 0.9;
protected static var fireAdvanceTable:Array = null;
public static var attackSurvivor:Animation = null;
public static var carrySurvivors:Animation = null;
public static var zombieDeath:Animation = null;
public static var animations:Array = null;
public static var fireShotgun:Animation = null;
public static var feature:Animation = null;
public static var headShot:Animation = null;
public static var zombieShamble:Animation = null;
public static var rubble:Animation = null;
public function Animation(_arg1:int=0, _arg2:Array=null, _arg3:Array=null, _arg4:int=0, _arg5:int=0):void{
if (!Boot.skip_constructor){
this.moveCount = _arg1;
this.advance = _arg2;
this.linkage = _arg3;
this.layer = _arg4;
this.doReverse = false;
this.doFace = false;
this.doRotate = true;
this.doWait = false;
this.scale = 1;
this.number = _arg5;
this.doOffset = false;
};
}
public function getTypeCount():int{
return (this.linkage.length);
}
public function getMove(_arg1:int):int{
var _local2:int;
_local2 = 0;
if (this.advance[_arg1] > 0){
_local2 = this.advance[_arg1];
};
return (_local2);
}
public function getMoveCount():int{
return (this.moveCount);
}
public function getLinkage(_arg1:int):String{
return (this.linkage[_arg1]);
}
public function getScale():Number{
return (this.scale);
}
public function shouldWait():Boolean{
return (this.doWait);
}
public function getFrameCount():int{
return (this.advance.length);
}
public function getLayer():int{
return (this.layer);
}
public function shouldOffset():Boolean{
return (this.doOffset);
}
public function getWait(_arg1:int):int{
var _local2:int;
_local2 = 0;
if (this.advance[_arg1] < 0){
_local2 = -(this.advance[_arg1]);
};
return (_local2);
}
public function shouldRotate():Boolean{
return (this.doRotate);
}
public function shouldReverse():Boolean{
return (this.doReverse);
}
public function shouldFace():Boolean{
return (this.doFace);
}
public function getNumber():int{
return (this.number);
}
protected static function linkageTable(_arg1:String, _arg2:String, _arg3:Array):Array{
var _local4:Array;
var _local5:int;
var _local6:int;
_local4 = [];
_local5 = 0;
while (_local5 < _arg3.length) {
_local6 = _arg3[_local5];
_local5++;
_local4.push(((_arg1 + Std.string(_local6)) + _arg2));
};
return (_local4);
}
public static function init():void{
Animation.carryAmmo = new Animation(32, survivorAdvance(), survivorLinkage(0), SpriteDisplay.SURVIVOR_LAYER, 0);
carryAmmo.scale = mobileScale;
Animation.carryBoards = new Animation(32, survivorAdvance(), survivorLinkage(1), SpriteDisplay.SURVIVOR_LAYER, 1);
carryBoards.scale = mobileScale;
Animation.carryFood = new Animation(32, survivorAdvance(), survivorLinkage(2), SpriteDisplay.SURVIVOR_LAYER, 2);
carryFood.scale = mobileScale;
Animation.carrySurvivors = new Animation(32, survivorAdvance(), survivorLinkage(3), SpriteDisplay.SURVIVOR_LAYER, 3);
carrySurvivors.scale = mobileScale;
Animation.fireRifle = new Animation(20, fireAdvance(), fireLinkage(2), SpriteDisplay.SNIPER_LAYER, 4);
fireRifle.scale = sniperScale;
fireRifle.doWait = true;
Animation.fireShotgun = new Animation(20, fireAdvance(), fireLinkage(1), SpriteDisplay.SNIPER_LAYER, 5);
fireShotgun.scale = sniperScale;
fireShotgun.doWait = true;
Animation.attackTower = new Animation(60, attackTowerAdvance(), zombieLinkage("attack"), SpriteDisplay.CREATURE_LAYER, 6);
attackTower.doReverse = true;
attackTower.doFace = true;
attackTower.doRotate = false;
attackTower.scale = mobileScale;
attackTower.doOffset = true;
Animation.attackSurvivor = new Animation(72, attackSurvivorAdvance(), zombieLinkage("attack"), SpriteDisplay.CREATURE_LAYER, 7);
attackSurvivor.scale = mobileScale;
attackSurvivor.doFace = true;
attackSurvivor.doRotate = false;
attackSurvivor.scale = mobileScale;
attackSurvivor.doOffset = true;
Animation.zombieDeath = new Animation(34, zombieDeathAdvance(), zombieLinkage("death"), SpriteDisplay.CREATURE_LAYER, 8);
zombieDeath.doWait = true;
zombieDeath.scale = mobileScale;
zombieDeath.doOffset = true;
Animation.zombieShamble = new Animation(32, zombieShambleAdvance(), zombieLinkage("shamble"), SpriteDisplay.CREATURE_LAYER, 9);
zombieShamble.scale = mobileScale;
Animation.headShot = new Animation(12, headShotAdvance(), ["zombie_headshot"], SpriteDisplay.SURVIVOR_LAYER, 10);
headShot.doWait = true;
headShot.doOffset = true;
Animation.rubble = new Animation(1, [wait(1)], ["RubbleClip"], SpriteDisplay.FLOOR_LAYER, 11);
Animation.feature = new Animation(1, [wait(1)], ["FeatureClip"], SpriteDisplay.FLOOR_LAYER, 12);
Animation.animations = [carryAmmo, carryBoards, carryFood, carrySurvivors, fireRifle, fireShotgun, attackTower, attackSurvivor, zombieDeath, zombieShamble, headShot, rubble, feature];
}
public static function carry(_arg1:Resource):Animation{
var _local2:Animation;
var _local3:enum;
_local2 = null;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = carryAmmo;
break;
case 1:
_local2 = carryBoards;
break;
case 2:
_local2 = carryFood;
break;
case 3:
_local2 = carrySurvivors;
break;
};
return (_local2);
}
protected static function survivorAdvance():Array{
var _local1:int;
var _local2:int;
if (Animation.survivorAdvanceTable == null){
Animation.survivorAdvanceTable = [];
_local1 = 0;
while (_local1 < 8) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local2 = _temp1;
survivorAdvanceTable.push(move(8));
};
};
return (survivorAdvanceTable);
}
protected static function headShotAdvance():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
_local1 = [];
_local1.push(wait(zombieDeathWait));
_local2 = 0;
while (_local2 < 5) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local3 = _temp1;
_local1.push(wait(1));
};
return (_local1);
}
protected static function attackTowerAdvance():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
_local1 = [];
_local2 = 0;
while (_local2 < 60) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local3 = _temp1;
_local1.push(move(1));
};
return (_local1);
}
protected static function zombieDeathAdvance():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
_local1 = [];
_local1.push(wait(zombieDeathWait));
_local2 = 0;
while (_local2 < 27) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local3 = _temp1;
_local1.push(wait(1));
};
return (_local1);
}
protected static function fireLinkage(_arg1:int):Array{
var _local2:Array;
var _local3:String;
var _local4:int;
var _local5:Array;
var _local6:int;
_local2 = [];
_local3 = "gunCycle_";
_local4 = 0;
_local5 = validSurvivors;
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
_local2.push((((_local3 + Std.string(_local6)) + "_gun") + Std.string(_arg1)));
};
return (_local2);
}
protected static function zombieLinkage(_arg1:String):Array{
var _local2:Array;
var _local3:String;
var _local4:int;
var _local5:int;
_local2 = [];
_local3 = "zombieCycle_";
_local4 = 0;
while (_local4 < 12) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local5 = _temp1;
_local2.push((((_local3 + _arg1) + "_") + Std.string((_local5 + 1))));
};
return (_local2);
}
protected static function attackSurvivorAdvance():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
_local1 = [];
_local2 = 0;
while (_local2 < 72) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local3 = _temp1;
_local1.push(move(1));
};
return (_local1);
}
protected static function move(_arg1:int):int{
return (_arg1);
}
protected static function fireAdvance():Array{
var _local1:int;
var _local2:int;
if (Animation.fireAdvanceTable == null){
Animation.fireAdvanceTable = [];
_local1 = 0;
while (_local1 < 20) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local2 = _temp1;
fireAdvanceTable.push(wait(1));
};
};
return (fireAdvanceTable);
}
protected static function wait(_arg1:int):int{
return (-(_arg1));
}
protected static function zombieShambleAdvance():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
_local1 = [];
_local1.push(move(2));
_local2 = 0;
while (_local2 < 5) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local1.push(move(1));
_local1.push(wait(1));
};
_local1.push(move(1));
_local3 = 0;
while (_local3 < 6) {
var _temp2 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp2;
_local1.push(move(2));
_local1.push(move(2));
};
return (_local1);
}
protected static function survivorLinkage(_arg1:int):Array{
var _local2:Array;
var _local3:String;
var _local4:int;
var _local5:Array;
var _local6:int;
_local2 = [];
_local3 = "Survivor_";
_local4 = 0;
_local5 = validSurvivors;
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
_local2.push((((_local3 + Std.string(_arg1)) + "_") + Std.string(_local6)));
};
return (_local2);
}
}
}//package ui
Section 179
//ButtonList (ui.ButtonList)
package ui {
import flash.display.*;
import flash.events.*;
import flash.*;
public class ButtonList {
protected var frame:int;
protected var hoverAction:Function;
protected var clickAction:Function;
protected var lastHovered;
protected var buttonList:Array;
protected var lastClicked:DisplayObject;
public static var GREEN:int = 5;
public static var IN_PROGRESS:int = 4;
public static var GREEN_OVER:int = 6;
public static var OVER:int = 2;
public static var NORMAL:int = 1;
protected static var mouseWait:int = 6;
public static var GHOSTED:int = 3;
public function ButtonList(_arg1:Function=null, _arg2:Function=null, _arg3:Array=null):void{
var _local4:int;
var _local5:Array;
var _local6:MovieClip;
super();
if (!Boot.skip_constructor){
this.clickAction = _arg1;
this.hoverAction = _arg2;
this.buttonList = _arg3;
_local4 = 0;
_local5 = this.buttonList;
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
_local6.mouseChildren = false;
_local6.addEventListener(MouseEvent.MOUSE_DOWN, this.buttonDown);
_local6.addEventListener(MouseEvent.MOUSE_UP, this.buttonUp);
_local6.addEventListener(MouseEvent.MOUSE_OVER, this.buttonOver);
_local6.addEventListener(MouseEvent.MOUSE_OUT, this.buttonOut);
_local6.gotoAndStop(NORMAL);
};
this.lastHovered = null;
this.lastClicked = null;
this.frame = mouseWait;
};
}
protected function changeState(_arg1:MovieClip, _arg2:int):void{
_arg1.gotoAndStop(_arg2);
}
protected function buttonOut(_arg1:MouseEvent):void{
var _local2:*;
_local2 = this.getButtonIndex(_arg1.target);
if (_local2 != null){
if (this.buttonList[_local2].currentFrame == OVER){
this.buttonList[_local2].gotoAndStop(NORMAL);
} else {
if (this.buttonList[_local2].currentFrame == GREEN_OVER){
this.buttonList[_local2].gotoAndStop(GREEN);
};
};
};
if (this.hoverAction != null){
Game.view.toolTip.hide();
};
this.lastHovered = null;
Main.getRoot().removeEventListener(Event.ENTER_FRAME, this.enterFrame);
}
protected function getButtonIndex(_arg1){
var _local2:*;
var _local3:int;
var _local4:int;
var _local5:int;
_local2 = null;
_local3 = 0;
_local4 = this.buttonList.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
if (this.buttonList[_local5] == _arg1){
_local2 = _local5;
break;
};
};
return (_local2);
}
public function setGreen(_arg1:MovieClip):void{
var _local2:*;
_local2 = this.getButtonIndex(_arg1);
if (((!((this.lastHovered == null))) && ((_local2 == this.lastHovered)))){
this.changeState(_arg1, GREEN_OVER);
} else {
this.changeState(_arg1, GREEN);
};
}
public function get(_arg1:int):MovieClip{
return (this.buttonList[_arg1]);
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:MovieClip;
_local1 = 0;
_local2 = this.buttonList;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.removeEventListener(MouseEvent.MOUSE_DOWN, this.buttonDown);
_local3.removeEventListener(MouseEvent.MOUSE_UP, this.buttonUp);
_local3.removeEventListener(MouseEvent.MOUSE_OVER, this.buttonOver);
_local3.removeEventListener(MouseEvent.MOUSE_OUT, this.buttonOut);
};
Main.getRoot().removeEventListener(Event.ENTER_FRAME, this.enterFrame);
}
protected function buttonOver(_arg1:MouseEvent):void{
var _local2:*;
var _local3:String;
_local2 = this.getButtonIndex(_arg1.target);
if (this.hoverAction != null){
_local3 = null;
if (_local2 != null){
_local3 = this.hoverAction(_local2);
};
if (_local3 == null){
Game.view.toolTip.hide();
} else {
Game.view.toolTip.show(_local3);
};
};
if (_local2 != null){
if (this.buttonList[_local2].currentFrame == NORMAL){
this.buttonList[_local2].gotoAndStop(OVER);
} else {
if (this.buttonList[_local2].currentFrame == GREEN){
this.buttonList[_local2].gotoAndStop(GREEN_OVER);
};
};
};
this.lastHovered = _local2;
}
public function setNormal(_arg1:MovieClip):void{
var _local2:*;
_local2 = this.getButtonIndex(_arg1);
if (((!((this.lastHovered == null))) && ((_local2 == this.lastHovered)))){
this.changeState(_arg1, OVER);
} else {
this.changeState(_arg1, NORMAL);
};
}
public function setGhosted(_arg1:MovieClip):void{
this.changeState(_arg1, GHOSTED);
}
protected function buttonUp(_arg1:MouseEvent):void{
Main.getRoot().removeEventListener(Event.ENTER_FRAME, this.enterFrame);
}
public function setProgress(_arg1:MovieClip):void{
this.changeState(_arg1, IN_PROGRESS);
}
protected function buttonDown(_arg1:MouseEvent):void{
var event = _arg1;
this.lastClicked = function (_arg1:ButtonList):DisplayObject{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = event.target;
$r = (Std._is(tmp, DisplayObject)) ? tmp : function (_arg1:ButtonList){
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this);
Main.getRoot().addEventListener(Event.ENTER_FRAME, this.enterFrame);
this.frame = mouseWait;
this.buttonClick();
}
protected function enterFrame(_arg1:Event):void{
this.frame--;
if ((((((((this.frame <= 0)) && (this.lastClicked.visible))) && (this.lastClicked.parent.visible))) && (this.lastClicked.parent.parent.visible))){
this.buttonClick();
this.frame = mouseWait;
};
}
protected function buttonClick():void{
var _local1:*;
var _local2:*;
_local1 = this.getButtonIndex(this.lastClicked);
_local2 = null;
if (_local1 != null){
this.clickAction(_local1);
};
}
}
}//package ui
Section 180
//Check (ui.Check)
package ui {
public class Check {
public static var ADD_OK:int = 0;
public static var ADD_SAME:int = 1;
public static var REMOVE_NO_DEST:int = 2;
public static var ADD_NO_DEST:int = 3;
public static var REMOVE_NO_SUPPLY:int = 1;
public static var REMOVE_OK:int = 0;
public static var ADD_EXISTS:int = 2;
public static var ADD_NO_SELECT:int = 4;
public static var REMOVE_NO_SELECT:int = 3;
public static function checkAddSupply(_arg1:Point):int{
var _local2:Point;
var _local3:Tower;
var _local4:Tower;
_local2 = Game.select.getSelected();
if (_local2 == null){
return (ADD_NO_SELECT);
};
_local3 = Game.map.getCell(_local2.x, _local2.y).getTower();
_local4 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
if (_local3 == null){
return (ADD_NO_SELECT);
};
if (_local4 == null){
return (ADD_NO_DEST);
};
if (_local3 == _local4){
return (ADD_SAME);
};
if (_local3.getRoute(_arg1) != null){
return (ADD_EXISTS);
};
return (ADD_OK);
}
public static function checkRemoveSupply(_arg1:Point):int{
var _local2:Point;
var _local3:Tower;
var _local4:Tower;
_local2 = Game.select.getSelected();
if (_local2 == null){
return (REMOVE_NO_SELECT);
};
_local3 = Game.map.getCell(_local2.x, _local2.y).getTower();
_local4 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
if (_local3 == null){
return (REMOVE_NO_SELECT);
};
if (_local4 == null){
return (REMOVE_NO_DEST);
};
if (_local3.getRoute(_arg1) == null){
return (REMOVE_NO_SUPPLY);
};
return (REMOVE_OK);
}
}
}//package ui
Section 181
//Color (ui.Color)
package ui {
import flash.geom.*;
public class Color {
public static var supplyOtherLine:int = 0xDDDDDD;
public static var buttonBackground:int = 0x9999;
public static var plannedTransform:ColorTransform = new ColorTransform(0.6, 0.6, 0.6, 0.8, 0, 0, 0, 0);
public static var shadowAllow:int = 0xFF00;
public static var supplyDepotLine:int = 6711039;
public static var toggledOnBackground:int = 0x999900;
public static var countDownText:int = 0xDDDDDD;
public static var shouldAvoidRollOverBackground:int = 0xFF0000;
public static var allowTransform:ColorTransform = new ColorTransform(0.5, 1.5, 0.5, 2, 0, 0, 0, 0);
public static var shadowAlpha:Number = 0.3;
public static var tutorialBorder:int = 0xFFFFFF;
public static var tutorialBackground:int = 0;
public static var mainMenuBackdrop:int = 0x404040;
public static var barricadeReplay:int = 0x6D4900;
public static var supplyLineThickness:int = 10;
public static var shadowBuild:int = 0;
public static var menuTitle:int = 0xFFFFFF;
public static var centerGhost:int = 0;
public static var depotReplay:int = 204;
public static var inProgressBackground:int = 0x9900;
public static var ghostedBackground:int = 0x999999;
public static var centerGhostAlpha:Number = 0.85;
public static var normalTransform:ColorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);
public static var shadowDeny:int = 0xFF0000;
public static var resourceBarOverflow:int = -16746633;
public static var shouldAvoidBackground:int = 0x990000;
public static var resourceBarQuota:int = -16746752;
public static var workshopReplay:int = 8454143;
public static var countDownBackground:int = 0x404040;
public static var fpsCounterBackground:int = 0xFFFFFF;
public static var gameMenuAlpha:Number = 1;
public static var progressBarBackground:int = 0x300000;
public static var shadowPlanAlpha:Number = 0.7;
public static var announceBackground:int = 0x400000;
public static var progressBarBorder:int = 0xFFFFFF;
public static var shouldClickRollOverBackground:int = 0xFF00;
public static var mouseLureOn:int = 0xFF0000;
public static var editEmpty:int = 0xFFFFFF;
public static var mainMenuAlpha:Number = 0.4;
public static var progressBarForeground:int = 0x7700;
public static var announceForeground:int = 0xDDDDDD;
public static var miniCursor:int = 0xAAAAAA;
public static var countDownForeground:int = 0x400000;
public static var supplyLineAlpha:Number = 1;
public static var textBoxAlpha:Number = 1;
public static var shouldClickBackground:int = 0x9900;
public static var tutorialAlpha:Number = 0.8;
public static var resourceBarBorder:int = -13619152;
public static var denyEditBox:int = 0x800000;
public static var sniperReplay:int = 0xCC0000;
public static var denyTransform:ColorTransform = new ColorTransform(1.5, 0.5, 0.5, 2, 0, 0, 0, 0);
public static var editSelected:int = 0;
public static var mainMenuBackdropAlpha:Number = 1;
public static var buttonRollOverBackground:int = 0xFFFF;
public static var allowEditBox:int = 0x8000;
public static var countDownBorder:int = 0;
public static var noShoot:int = 0xEE0000;
public static var toolTip:int = 16777130;
public static var menuBackground:int = 0x4000;
public static var toggledOnRollOverBackground:int = 0xFFFF00;
public static var nameNoteText:int = 0xFFFFFF;
public static var resourceBarText:int = 0;
public static var progressBarText:int = 0xFFFFFF;
public static var editBoxBorder:int = 0;
public static var mouseLureOff:int = 0xFFFF00;
public static var buttonBorder:int = 0;
}
}//package ui
Section 182
//CustomCellRenderer (ui.CustomCellRenderer)
package ui {
import fl.controls.listClasses.*;
import flash.text.*;
import flash.*;
public class CustomCellRenderer extends CellRenderer {
public function CustomCellRenderer():void{
var _local1:TextFormat;
if (!Boot.skip_constructor){
super();
_local1 = new TextFormat();
_local1.size = FontSize.comboList;
this.setStyle("textFormat", _local1);
};
}
}
}//package ui
Section 183
//Explosion (ui.Explosion)
package ui {
import flash.display.*;
import logic.*;
import flash.*;
public class Explosion implements AbstractFrame {
protected var bigPoints:Array;
protected var bridge:Bridge;
protected var smallPoints:Array;
protected var bigImages:Array;
protected var bridgeBitmap:Bitmap;
protected var imageStacks:Array;
protected var frame:int;
protected var smallImages:Array;
protected var bridgeClip:MovieClip;
protected var bridgeTiles:BitmapData;
protected static var bigFrameCount:int = 90;
protected static var bigRadius:int = 375;
protected static var smallFrameCount:int = 36;
protected static var sideTable:Array = [new Point(1, 0), new Point(1, 0), new Point(0, 1), new Point(0, 1)];
protected static var forwardTable:Array = [new Point(0, 1), new Point(0, 1), new Point(1, 0), new Point(1, 0)];
protected static var smallRadius:int = 40;
public function Explosion(_arg1:Bridge=null):void{
if (!Boot.skip_constructor){
if (_arg1 != null){
this.imageStacks = [];
this.bigImages = [];
this.smallImages = [];
this.bridge = _arg1;
this.frame = 0;
this.setupPoints();
this.setupBridgeClip();
Main.sound.play(SoundPlayer.BRIDGE_EXPLOSION);
};
Game.view.frameAdvance.add(this);
Game.view.explosions.add(this);
};
}
protected function setupPoints():void{
var _local1:Point;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local1 = this.bridge.getLot().getSize();
_local2 = _local1.x;
_local3 = _local1.y;
if ((((this.bridge.spawnDir() == Direction.NORTH)) || ((this.bridge.spawnDir() == Direction.SOUTH)))){
_local2 = _local1.y;
_local3 = _local1.x;
};
this.smallPoints = [];
_local4 = 1;
while (_local4 < _local2) {
this.smallPoints.push(new Point(_local4, 1));
this.smallPoints.push(new Point(_local4, (_local3 - 1)));
_local4 = (_local4 + 2);
};
Lib.shuffle(this.smallPoints);
this.bigPoints = [];
_local5 = 0;
_local6 = (_local3 - 1);
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp1;
_local8 = 0;
while (_local8 < _local2) {
var _temp2 = _local8;
_local8 = (_local8 + 1);
_local9 = _temp2;
if (((((_local7 % 2) == 1)) && ((((_local9 + _local7) % 3) == 2)))){
this.bigPoints.push(new Point(_local9, _local7));
};
};
};
Lib.shuffle(this.bigPoints);
}
protected function addSmallExplosion(_arg1:Point):void{
var _local2:ImageStack;
var _local3:VirtualImage;
_local2 = new ImageStack(smallRadius);
_local3 = new VirtualImage(SpriteDisplay.SMALL_EXPLOSION_LAYER, new Point(0, 0), Label.smallExplosion);
_local2.addImage(_local3);
_local2.setPixel(this.getExplosionPos(_arg1, true));
_local2.update();
this.imageStacks.push(_local2);
this.smallImages.push(_local3);
}
protected function setupBridgeClip():void{
var _local1:DisplayObjectContainer;
var _local2:Point;
_local1 = Game.sprites.getLayer(SpriteDisplay.BRIDGE_LAYER);
this.bridgeClip = new MovieClip();
_local1.addChild(this.bridgeClip);
this.bridgeClip.mouseEnabled = false;
this.bridgeClip.mouseChildren = false;
this.bridgeClip.cacheAsBitmap = true;
_local2 = this.bridge.getLot().getSize();
this.bridgeTiles = new BitmapData(Lib.cellToPixel(_local2.x), Lib.cellToPixel(_local2.y), true, 0xFFFFFF);
this.bridgeBitmap = new Bitmap(this.bridgeTiles);
this.bridgeClip.addChild(this.bridgeBitmap);
Game.view.window.fillBitmapRegion(this.bridgeBitmap, this.bridge.getOffset(), this.bridge.getLot().offset, this.bridge.getLot().limit, false);
this.moveWindow();
}
public function cleanupBridgeBitmap():void{
if (this.bridgeBitmap != null){
this.bridgeBitmap.bitmapData.dispose();
this.bridgeBitmap.parent.removeChild(this.bridgeBitmap);
this.bridgeBitmap = null;
this.bridgeClip.parent.removeChild(this.bridgeClip);
this.bridgeClip = null;
};
}
public function fixedStep():void{
var _local1:Boolean;
var _local2:int;
var _local3:Array;
var _local4:int;
var _local5:Array;
var _local6:VirtualImage;
var _local7:VirtualImage;
this.frame--;
_local1 = true;
_local2 = 0;
_local3 = this.bigImages;
while (_local2 < _local3.length) {
_local6 = _local3[_local2];
_local2++;
if (_local6.getFrame() != bigFrameCount){
_local6.advanceFrame();
_local6.update();
_local1 = false;
};
};
_local4 = 0;
_local5 = this.smallImages;
while (_local4 < _local5.length) {
_local7 = _local5[_local4];
_local4++;
if (_local7.getFrame() != smallFrameCount){
_local7.advanceFrame();
_local7.update();
_local1 = false;
};
};
if (this.smallPoints.length > 0){
this.addSmallExplosion(this.smallPoints.pop());
this.frame = 21;
} else {
if (this.bigPoints.length > 0){
if (this.frame <= 0){
this.addBigExplosion(this.bigPoints.pop());
this.frame = 3;
if (this.bigPoints.length == 0){
this.frame = 10;
};
};
} else {
if (this.frame == 0){
this.bridge.destroy();
this.cleanupBridgeBitmap();
} else {
if (_local1){
this.cleanup();
};
};
};
};
}
public function moveWindow():void{
var _local1:Point;
if (this.bridgeClip != null){
_local1 = Game.view.window.toRelative(this.bridge.getOffset().x, this.bridge.getOffset().y);
this.bridgeClip.x = Lib.cellToPixel(_local1.x);
this.bridgeClip.y = Lib.cellToPixel(_local1.y);
};
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:ImageStack;
_local1 = 0;
_local2 = this.imageStacks;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.cleanup();
};
Game.view.frameAdvance.remove(this);
Game.view.explosions.remove(this);
this.cleanupBridgeBitmap();
}
protected function getExplosionPos(_arg1:Point, _arg2:Boolean):Point{
var _local3:int;
var _local4:Point;
var _local5:Point;
var _local6:Point;
var _local7:int;
var _local8:int;
var _local9:Point;
_local3 = Lib.directionToIndex(this.bridge.explosionDir());
_local4 = forwardTable[_local3];
_local5 = sideTable[_local3];
_local6 = this.bridge.getOffset();
_local7 = ((_local6.x + (_arg1.x * _local4.x)) + (_arg1.y * _local5.x));
_local8 = ((_local6.y + (_arg1.x * _local4.y)) + (_arg1.y * _local5.y));
_local9 = new Point(_local7, _local8).toPixel();
if (_arg2){
_local9.x = (_local9.x - Option.halfCell);
_local9.y = (_local9.y - Option.halfCell);
};
return (_local9);
}
protected function addBigExplosion(_arg1:Point):void{
var _local2:ImageStack;
var _local3:VirtualImage;
_local2 = new ImageStack(bigRadius);
_local3 = new VirtualImage(SpriteDisplay.EXPLOSION_LAYER, new Point(0, 0), Label.largeExplosion);
_local2.addImage(_local3);
_local2.setPixel(this.getExplosionPos(_arg1, false));
_local2.update();
this.imageStacks.push(_local2);
this.bigImages.push(_local3);
}
public function save(){
return ({bigImages:Save.saveArray(this.bigImages, VirtualImage.saveS), smallImages:Save.saveArray(this.smallImages, VirtualImage.saveS), bridge:Save.maybe(this.bridge, Bridge.saveS), frame:this.frame, bigPoints:Save.saveArray(this.bigPoints, Point.saveS), smallPoints:Save.saveArray(this.smallPoints, Point.saveS)});
}
public static function load(_arg1):Explosion{
var _local2:Explosion;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:ImageStack;
var _local9:int;
var _local10:ImageStack;
_local2 = new Explosion(null);
_local2.bigImages = Load.loadArray(_arg1.bigImages, VirtualImage.load);
_local3 = 0;
_local4 = _local2.bigImages.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local7 = _temp1;
_local8 = new ImageStack(bigRadius);
_local8.setPixel(_local2.bigImages[_local7].getPos());
_local8.addImage(_local2.bigImages[_local7]);
_local8.update();
_local2.imageStacks.push(_local8);
};
_local2.smallImages = Load.loadArray(_arg1.smallImages, VirtualImage.load);
_local5 = 0;
_local6 = _local2.smallImages.length;
while (_local5 < _local6) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local9 = _temp2;
_local10 = new ImageStack(smallRadius);
_local10.setPixel(_local2.smallImages[_local9].getPos());
_local10.addImage(_local2.smallImages[_local9]);
_local10.update();
_local2.imageStacks.push(_local10);
};
_local2.frame = _arg1.frame;
_local2.bigPoints = Load.loadArray(_arg1.bigPoints, Point.load);
_local2.smallPoints = Load.loadArray(_arg1.smallPoints, Point.load);
return (_local2);
}
public static function saveS(_arg1:Explosion){
return (_arg1.save());
}
}
}//package ui
Section 184
//FailClip (ui.FailClip)
package ui {
import flash.display.*;
import flash.text.*;
public dynamic class FailClip extends MovieClip {
public var fail:TextField;
}
}//package ui
Section 185
//FailWarning (ui.FailWarning)
package ui {
import flash.display.*;
import flash.text.*;
import flash.*;
public class FailWarning {
protected var clip:FailClip;
protected var frame:int;
protected static var maxFrame:int = 15;
protected static var alphaFrame:int = 10;
public function FailWarning(_arg1:DisplayObjectContainer=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
this.clip = new FailClip();
this.clip.mouseEnabled = false;
this.clip.mouseChildren = false;
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.fail.wordWrap = true;
this.clip.fail.autoSize = TextFieldAutoSize.LEFT;
this.frame = (FailWarning.maxFrame + 1);
this.resize(_arg2);
};
}
public function cleanup():void{
this.clip.parent.removeChild(this.clip);
}
public function enterFrame():void{
if (this.frame < alphaFrame){
this.clip.visible = true;
this.clip.alpha = 1;
this.frame++;
} else {
if (this.frame < maxFrame){
this.clip.visible = true;
this.clip.alpha = ((FailWarning.maxFrame - this.frame) / (FailWarning.maxFrame - alphaFrame));
this.frame++;
} else {
if (this.frame == maxFrame){
this.clip.visible = false;
this.frame++;
};
};
};
}
public function resize(_arg1:Point):void{
Util.centerHorizontally(this.clip.fail, _arg1);
Util.centerVertically(this.clip.fail, _arg1);
}
public function show(_arg1:String):void{
if (_arg1 != null){
this.clip.fail.text = _arg1;
this.resize(Game.view.layout.screenSize);
this.frame = 0;
this.clip.visible = true;
this.clip.alpha = 1;
};
}
}
}//package ui
Section 186
//FontSize (ui.FontSize)
package ui {
public class FontSize {
public static var resourceBar:int = 12;
public static var announce:int = 36;
public static var countDown:int = 18;
public static var comboListTitle:int = 18;
public static var pause:int = 36;
public static var button:int = 12;
public static var comboList:int = 14;
}
}//package ui
Section 187
//FpsCounter (ui.FpsCounter)
package ui {
import flash.display.*;
import flash.text.*;
public class FpsCounter {
protected var timeCount:int;
protected var lastTime:Number;
protected var counter:TextField;
public function FpsCounter(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
}
public function cleanup():void{
}
public function enterFrame():void{
}
}
}//package ui
Section 188
//FrameAdvance (ui.FrameAdvance)
package ui {
import flash.*;
public class FrameAdvance {
protected var frames:Array;
public function FrameAdvance():void{
if (!Boot.skip_constructor){
this.frames = [];
};
}
public function fixedStep():void{
var _local1:int;
var _local2:Array;
var _local3:AbstractFrame;
_local1 = 0;
_local2 = this.frames;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.fixedStep();
};
}
public function remove(_arg1:AbstractFrame):void{
this.frames.remove(_arg1);
}
public function add(_arg1:AbstractFrame):void{
this.frames.push(_arg1);
}
}
}//package ui
Section 189
//HoverList (ui.HoverList)
package ui {
import flash.display.*;
import flash.events.*;
import flash.*;
public class HoverList {
protected var textList:Array;
protected var clipList:Array;
public function HoverList(_arg1:Array=null, _arg2:Array=null):void{
var _local3:int;
var _local4:Array;
var _local5:DisplayObject;
super();
if (!Boot.skip_constructor){
this.clipList = _arg1;
this.textList = _arg2;
_local3 = 0;
_local4 = this.clipList;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local5.addEventListener(MouseEvent.MOUSE_OVER, this.rollOver);
_local5.addEventListener(MouseEvent.MOUSE_OUT, this.rollOut);
};
};
}
protected function rollOut(_arg1:MouseEvent):void{
Game.view.toolTip.hide();
}
protected function rollOver(_arg1:MouseEvent):void{
var _local2:*;
_local2 = this.getIndex(_arg1);
if (_local2 != null){
Game.view.toolTip.show(this.textList[_local2]);
};
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:DisplayObject;
_local1 = 0;
_local2 = this.clipList;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.removeEventListener(MouseEvent.MOUSE_OVER, this.rollOver);
_local3.removeEventListener(MouseEvent.MOUSE_OUT, this.rollOut);
};
}
protected function getIndex(_arg1:MouseEvent){
var _local2:*;
var _local3:int;
var _local4:int;
var _local5:int;
_local2 = null;
_local3 = 0;
_local4 = this.clipList.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
if (this.clipList[_local5] == _arg1.target){
_local2 = _local5;
break;
};
};
return (_local2);
}
}
}//package ui
Section 190
//ImageStack (ui.ImageStack)
package ui {
import flash.*;
public class ImageStack {
protected var pixel:Point;
protected var maxRadius:int;
protected var source:Point;
protected var stepNum:int;
protected var dest:Point;
protected var danceBase:int;
protected var totalSteps:int;
protected var shouldShow:Boolean;
protected var danceCounter:int;
protected var control:Point;
protected var shouldRotate:Boolean;
protected var images:List;
protected var rotation:int;
protected static var stepDenom:int = Math.floor((Option.cellPixels / 2));
public function ImageStack(_arg1=null):void{
if (!Boot.skip_constructor){
this.shouldShow = true;
this.images = new List();
this.pixel = new Point(0, 0);
this.shouldRotate = true;
this.rotation = 0;
this.source = new Point(0, 0);
this.dest = new Point(0, 0);
this.control = new Point(0, 0);
this.stepNum = 1;
this.totalSteps = 1;
this.maxRadius = Option.cellPixels;
this.danceCounter = 0;
this.danceBase = 0;
if (_arg1 != null){
this.maxRadius = _arg1;
};
Game.view.imageList.add(this);
};
}
public function show():void{
this.shouldShow = true;
this.update();
}
protected function findScalar(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
var _local5:Number;
var _local6:Number;
var _local7:Number;
_local5 = ((_arg4 - (2 * _arg3)) + _arg2);
_local6 = ((2 * _arg3) - (2 * _arg2));
_local7 = _arg2;
return (((((_local5 * _arg1) * _arg1) + (_local6 * _arg1)) + _local7));
}
public function travel(_arg1:int, _arg2:Point, _arg3:Point=null):void{
this.totalSteps = _arg1;
this.source = this.pixel.clone();
this.dest = _arg2.clone();
if (_arg3 == null){
this.control = new Point(Math.floor(((this.dest.x + this.source.x) / 2)), Math.floor(((this.dest.y + this.source.y) / 2)));
} else {
this.control = _arg3.clone();
};
this.stepNum = 0;
}
public function getPos():Point{
return (this.pixel.clone());
}
public function isDancing():Boolean{
return (!((this.danceCounter == 0)));
}
public function cleanup():void{
var _local1:*;
var _local2:VirtualImage;
_local1 = this.images.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local2.cleanup();
};
this.images = null;
Game.view.imageList.remove(this);
}
public function faceEnemy(_arg1:int):int{
var _local2:int;
var _local3:Boolean;
_local2 = 0;
_local3 = true;
while ((((_local2 < _arg1)) && (_local3))) {
_local3 = this.stepRotate(this.source.x, this.source.y, this.control.x, this.control.y);
if (_local3){
_local2++;
};
};
return (_local2);
}
public function forbidRotation():void{
this.shouldRotate = false;
}
public function addImage(_arg1:VirtualImage):void{
this.images.add(_arg1);
}
public function hide():void{
this.shouldShow = false;
this.update();
}
public function setPixel(_arg1:Point):void{
this.pixel = _arg1.clone();
this.dest = _arg1.clone();
this.control = _arg1.clone();
}
public function stepRotate(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Boolean{
var _local5:Boolean;
var _local6:int;
_local5 = false;
while (true) {
_local6 = 0;
if (this.danceCounter == 0){
_local6 = Lib.slopeToAngle((_arg1 - _arg3), (_arg2 - _arg4));
} else {
if (this.danceCounter > 0){
_local6 = (((this.danceBase + Option.danceMoves[this.danceCounter]) + 360) % 360);
} else {
_local6 = (((this.danceBase - Option.danceMoves[-(this.danceCounter)]) + 360) % 360);
};
};
_local5 = this.tryRotate(_local6);
if (_local5){
break;
} else {
if (this.danceCounter > 0){
this.danceCounter--;
} else {
if (this.danceCounter < 0){
this.danceCounter++;
} else {
break;
};
};
};
};
return (_local5);
}
public function update():void{
var _local1:LayoutGame;
var _local2:Point;
var _local3:Point;
var _local4:*;
var _local5:VirtualImage;
var _local6:*;
var _local7:VirtualImage;
_local1 = Game.view.layout;
_local2 = Game.view.window.toAbsolute(0, 0).toPixel();
_local3 = new Point((this.pixel.x - _local2.x), (this.pixel.y - _local2.y));
if (((((((((!(this.shouldShow)) || ((_local3.x <= -(this.maxRadius))))) || ((_local3.x >= (Lib.cellToPixel(_local1.windowSize.x) + this.maxRadius))))) || ((_local3.y <= -(this.maxRadius))))) || ((_local3.y >= (Lib.cellToPixel(_local1.windowSize.y) + this.maxRadius))))){
_local4 = this.images.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local5.setPos(this.pixel);
_local5.setRotation(this.rotation);
_local5.outside(_local2);
};
} else {
_local6 = this.images.iterator();
while (_local6.hasNext()) {
_local7 = _local6.next();
_local7.setPos(this.pixel);
_local7.setRotation(this.rotation);
_local7.inside(_local2);
};
};
}
public function step(_arg1:int):int{
var _local2:int;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Point;
var _local8:Boolean;
_local2 = 0;
_local3 = this.findScalarX((this.stepNum - 1));
_local4 = this.findScalarY((this.stepNum - 1));
_local5 = this.findScalarX(this.stepNum);
_local6 = this.findScalarY(this.stepNum);
_local7 = new Point(Math.floor(_local5), Math.floor(_local6));
while ((((_local2 < _arg1)) && ((this.stepNum <= this.totalSteps)))) {
_local5 = this.findScalarX(this.stepNum);
_local6 = this.findScalarY(this.stepNum);
_local7.x = Math.floor(_local5);
_local7.y = Math.floor(_local6);
_local8 = false;
if (((this.shouldRotate) && (!(Point.isEqual(this.pixel, _local7))))){
_local8 = this.stepRotate(_local3, _local4, _local5, _local6);
};
if (!_local8){
this.pixel = _local7;
this.stepNum++;
_local3 = _local5;
_local4 = _local6;
};
_local2++;
};
return (_local2);
}
public function getPixel():Point{
return (this.pixel);
}
public function rotate(_arg1:int):void{
this.rotation = _arg1;
if (this.rotation > 180){
this.rotation = (this.rotation - 360);
};
if (this.rotation <= -180){
this.rotation = (this.rotation + 360);
};
}
public function allowRotation():void{
this.shouldRotate = true;
}
public function startDance(_arg1:int):void{
this.danceCounter = _arg1;
this.danceBase = this.rotation;
}
protected function findScalarX(_arg1:int):Number{
if (_arg1 >= 0){
return (this.findScalar((_arg1 / this.totalSteps), this.source.x, this.control.x, this.dest.x));
};
return (this.source.x);
}
protected function findScalarY(_arg1:int):Number{
if (_arg1 >= 0){
return (this.findScalar((_arg1 / this.totalSteps), this.source.y, this.control.y, this.dest.y));
};
return (this.source.y);
}
public function tryRotate(_arg1:int):Boolean{
var _local2:Boolean;
var _local3:int;
_local2 = false;
_local3 = Util.angleDistance(this.rotation, _arg1);
if (Util.angleDistance(this.rotation, _arg1) < Option.rotateStep){
this.rotate(_arg1);
} else {
if (Util.angleDistance((this.rotation + Option.rotateStep), _arg1) < _local3){
this.rotate((this.rotation + Option.rotateStep));
_local2 = true;
} else {
this.rotate((this.rotation - Option.rotateStep));
_local2 = true;
};
};
return (_local2);
}
public function save(){
return ({shouldShow:this.shouldShow, pixel:this.pixel.save(), shouldRotate:this.shouldRotate, rotation:this.rotation, stepNum:this.stepNum, totalSteps:this.totalSteps, source:this.source.save(), dest:this.dest.save(), control:this.control.save(), maxRadius:this.maxRadius, danceCounter:this.danceCounter, danceBase:this.danceBase});
}
public static function load(_arg1):ImageStack{
var _local2:ImageStack;
_local2 = new (ImageStack);
_local2.shouldShow = _arg1.shouldShow;
_local2.pixel = Point.load(_arg1.pixel);
_local2.shouldRotate = _arg1.shouldRotate;
_local2.rotation = _arg1.rotation;
_local2.stepNum = _arg1.stepNum;
_local2.totalSteps = _arg1.totalSteps;
_local2.source = Point.load(_arg1.source);
_local2.dest = Point.load(_arg1.dest);
_local2.control = Point.load(_arg1.control);
_local2.maxRadius = _arg1.maxRadius;
_local2.danceCounter = _arg1.danceCounter;
_local2.danceBase = _arg1.danceBase;
return (_local2);
}
}
}//package ui
Section 191
//Label (ui.Label)
package ui {
public class Label {
public static var workshopScreen:String = "WorkshopScreen";
public static var barricadeScreen:String = "BarricadeScreen";
public static var configDisk:String = "ZomLogConfig";
public static var tower:String = "towerclip";
public static var smallExplosion:String = "ExplosionSmallClip";
public static var bridge:String = "BridgeClip";
public static var timerScreen:String = "TimerScreen";
public static var depotMiscScreen:String = "DepotMiscScreen";
public static var floater:String = "FloaterClip";
public static var largeExplosion:String = "ExplosionLargeClip";
public static var depotBuildScreen:String = "DepotBuildScreen";
public static var background:String = "backgroundtiles";
public static var gameDisk:String = "ZomLog";
public static var depotResourceScreen:String = "DepotResourceScreen";
public static var pause:String = "PauseClip";
public static var sniperScreen:String = "SniperScreen";
public static var select:String = "SelectClip";
public static var towerNeed:String = "TowerNeedClip";
}
}//package ui
Section 192
//LayoutGame (ui.LayoutGame)
package ui {
import logic.*;
import flash.*;
public class LayoutGame {
public var tutorialBoxOffset:Point;
public var sideMenuOffset:Point;
public var fpsSize:Point;
public var resourceHiddenOffset:int;
public var screenSize:Point;
public var mapOffset:Point;
public var windowSize:Point;
public var resourceShownOffset:int;
public var pauseToggleOffset:Point;
public var tutorialTextOffset:Point;
public var margin:int;
public var monitorOffset:Point;
public var totalResourceOffset:Point;
public var miniScreenSize:Point;
public var monitorScaleX:Number;
public var monitorScaleY:Number;
public var countDownOffset:Point;
public var scrollOutMargin:int;
public var miniOffset:Point;
public var scrollMargin:int;
public var fpsOffset:Point;
public var buildMenuOffset:Point;
public var playToggleOffset:Point;
public var windowCenter:Point;
public var quickOffset:Point;
public var tipWidth:int;
public var countDownSize:Point;
public var miniSize:Point;
public var miniCellSize:int;
public var monitorSize:Point;
public var mapSize:Point;
public var tutorialSize:Point;
public function LayoutGame(_arg1:int=0, _arg2:int=0, _arg3:GameSettings=null):void{
if (!Boot.skip_constructor){
this.screenSize = new Point(_arg1, _arg2);
this.margin = 10;
this.scrollMargin = 5;
this.scrollOutMargin = 100;
this.initMiniMap(_arg3);
this.initWindow(_arg3);
this.initFpsCounter();
this.initMenu();
this.initQuick();
this.initZombieSpawner();
this.initToolTip();
this.initTutorial();
};
}
protected function initFpsCounter():void{
this.fpsSize = new Point(60, 15);
this.fpsOffset = new Point(0, (this.screenSize.y - this.fpsSize.y));
}
protected function initTutorial():void{
this.tutorialBoxOffset = new Point(5, 200);
this.tutorialTextOffset = new Point((this.tutorialBoxOffset.x + 10), (this.tutorialBoxOffset.y + 10));
this.tutorialSize = new Point(200, 50);
}
protected function initWindow(_arg1:GameSettings):void{
this.windowSize = new Point(Math.ceil((this.screenSize.x / Option.cellPixels)), Math.ceil((this.screenSize.y / Option.cellPixels)));
if (this.windowSize.x > _arg1.getSize().x){
this.windowSize.x = _arg1.getSize().x;
};
if (this.windowSize.y > _arg1.getSize().y){
this.windowSize.y = _arg1.getSize().y;
};
this.mapOffset = new Point(0, 0);
this.mapSize = new Point(Lib.cellToPixel(this.windowSize.x), Lib.cellToPixel(this.windowSize.y));
this.windowCenter = new Point(Math.floor((this.windowSize.x / 2)), Math.floor((this.windowSize.y / 2)));
}
protected function initMenu():void{
this.sideMenuOffset = new Point((this.screenSize.x - 400), (this.screenSize.y - 600));
this.resourceHiddenOffset = 565;
this.resourceShownOffset = 525;
}
protected function initZombieSpawner():void{
this.playToggleOffset = new Point(157, 39);
this.pauseToggleOffset = new Point(160, 60);
this.countDownSize = new Point(221, 140);
if (this.screenSize.x < 800){
this.countDownSize = new Point(166, 105);
};
this.countDownOffset = new Point(0, 0);
}
protected function initQuick():void{
this.quickOffset = new Point(0, this.screenSize.y);
this.totalResourceOffset = new Point(Math.floor((this.screenSize.x / 2)), 0);
this.buildMenuOffset = new Point(0, (this.quickOffset.y - 20));
}
protected function initToolTip():void{
this.tipWidth = Math.floor((this.screenSize.x / 3));
if (this.tipWidth > 200){
this.tipWidth = 200;
};
}
protected function initMiniMap(_arg1:GameSettings):void{
var _local2:int;
this.miniCellSize = 2;
if ((((_arg1.getSize().x > 65)) && ((_arg1.getSize().y > 65)))){
this.miniCellSize = 1;
};
_local2 = 10;
this.miniSize = new Point((_arg1.getSize().x * this.miniCellSize), (_arg1.getSize().y * this.miniCellSize));
this.miniScreenSize = new Point(160, 160);
this.monitorScaleX = (this.miniSize.x / this.miniScreenSize.x);
this.monitorScaleY = (this.miniSize.y / this.miniScreenSize.y);
this.monitorSize = new Point(Math.ceil((245 * this.monitorScaleX)), Math.ceil((217 * this.monitorScaleY)));
this.monitorOffset = new Point(((this.screenSize.x - this.monitorSize.x) + _local2), -(_local2));
this.miniOffset = new Point((Math.ceil((27 * this.monitorScaleX)) + this.monitorOffset.x), (Math.ceil((30 * this.monitorScaleY)) + this.monitorOffset.y));
}
}
}//package ui
Section 193
//LayoutMain (ui.LayoutMain)
package ui {
import flash.*;
public class LayoutMain {
public var screenSize:Point;
public function LayoutMain(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.screenSize = new Point(_arg1, _arg2);
};
}
}
}//package ui
Section 194
//MainIntroMusic (ui.MainIntroMusic)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class MainIntroMusic extends Sound {
public function MainIntroMusic(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 195
//MainLoopMusic (ui.MainLoopMusic)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class MainLoopMusic extends Sound {
public function MainLoopMusic(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 196
//MiniMap (ui.MiniMap)
package ui {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.*;
public class MiniMap {
protected var foreground:Bitmap;
protected var clip:DisplayObjectContainer;
protected var glare:MovieClip;
protected var monitor:MonitorClip;
protected var background:Bitmap;
protected var supply:Shape;
protected var window:Shape;
public function MiniMap(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var _local3:BitmapData;
var _local4:BitmapData;
super();
if (!Boot.skip_constructor){
this.monitor = new MonitorClip();
_arg1.addChild(this.monitor);
this.monitor.visible = true;
this.monitor.scaleX = _arg2.monitorScaleX;
this.monitor.scaleY = _arg2.monitorScaleY;
this.clip = new Sprite();
_arg1.addChild(this.clip);
this.clip.visible = true;
this.clip.addEventListener(MouseEvent.MOUSE_DOWN, this.bitmapPress);
this.clip.addEventListener(MouseEvent.MOUSE_UP, this.bitmapRelease);
this.glare = new MonitorOverlayClip();
_arg1.addChild(this.glare);
this.glare.visible = true;
this.glare.scaleX = _arg2.monitorScaleX;
this.glare.scaleY = _arg2.monitorScaleY;
this.glare.mouseEnabled = false;
_local3 = new BitmapData(_arg2.miniSize.x, _arg2.miniSize.y, false, Option.roadMiniColor);
this.background = new Bitmap(_local3);
this.clip.addChild(this.background);
this.background.visible = true;
this.supply = new Shape();
this.clip.addChild(this.supply);
this.supply.visible = true;
this.window = new Shape();
this.clip.addChild(this.window);
this.window.visible = true;
_local4 = new BitmapData(_arg2.miniSize.x, _arg2.miniSize.y, true, 0xFFFFFF);
this.foreground = new Bitmap(_local4);
this.clip.addChild(this.foreground);
this.foreground.visible = true;
this.monitor.addEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.resize(_arg2);
};
}
public function update():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = 0;
_local2 = Game.map.sizeY();
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = 0;
_local5 = Game.map.sizeX();
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp2;
this.updateCell(_local6, _local3);
};
};
}
public function updateCell(_arg1:int, _arg2:int):void{
var _local3:MapCell;
var _local4:int;
var _local5:BitmapData;
var _local6:int;
var _local7:enum;
_local3 = Game.map.getCell(_arg1, _arg2);
_local4 = Option.roadMiniColor;
_local5 = this.background.bitmapData;
if (_local3.hasZombies()){
_local4 = Option.zombieMiniColor;
_local5 = this.foreground.bitmapData;
} else {
if (Point.isEqual(new Point(_arg1, _arg2), Game.select.getSelected())){
_local4 = Option.selectedMiniColor;
_local5 = this.foreground.bitmapData;
} else {
if (_local3.hasTower()){
_local4 = Option.towerMiniColor;
_local5 = this.foreground.bitmapData;
} else {
if (_local3.hasTrucks()){
_local4 = Option.truckMiniColor;
_local5 = this.foreground.bitmapData;
} else {
if (_local3.buildingHasZombies()){
_local6 = _local3.getBuilding().getZombieCount();
_local4 = Lib.zombieColor(_local6);
} else {
_local7 = _local3.getBackground();
switch (_local7.index){
case 0:
_local4 = Option.emptyBuildingMiniColor;
break;
case 1:
_local4 = Option.emptyBuildingMiniColor;
break;
case 2:
_local4 = Option.roadMiniColor;
break;
case 3:
_local4 = Option.roadMiniColor;
break;
case 4:
_local4 = Option.roadMiniColor;
break;
case 5:
_local4 = Option.roadMiniColor;
break;
case 6:
_local4 = Option.waterColor;
break;
case 7:
_local4 = Option.waterColor;
break;
};
};
};
};
};
};
this.setCell(_arg1, _arg2, _local4, _local5);
}
protected function showSupply(_arg1:int, _arg2:int):void{
var _local3:LayoutGame;
var _local4:Number;
var _local5:Tower;
var _local6:*;
var _local7:Route;
_local3 = Game.view.layout;
_local4 = (_local3.miniCellSize / 2);
this.supply.graphics.clear();
this.supply.graphics.lineStyle(Option.miniSupplyThickness, Option.miniSupplyColor);
_local5 = Game.map.getCell(_arg1, _arg2).getTower();
_local6 = _local5.getTradeLinks().iterator();
while (_local6.hasNext()) {
_local7 = _local6.next();
this.supply.graphics.moveTo(((_arg1 * _local3.miniCellSize) + _local4), ((_arg2 * _local3.miniCellSize) + _local4));
this.supply.graphics.lineTo(((_local7.dest.x * _local3.miniCellSize) + _local4), ((_local7.dest.y * _local3.miniCellSize) + _local4));
};
}
protected function drawWindow(_arg1:LayoutGame):void{
var _local2:Point;
_local2 = new Point((_arg1.windowSize.x * _arg1.miniCellSize), (_arg1.windowSize.y * _arg1.miniCellSize));
this.window.graphics.clear();
this.window.graphics.lineStyle(1, Color.miniCursor);
this.window.graphics.moveTo(0, 0);
this.window.graphics.lineTo(_local2.x, 0);
this.window.graphics.lineTo(_local2.x, _local2.y);
this.window.graphics.lineTo(0, _local2.y);
this.window.graphics.lineTo(0, 0);
}
public function updateSupply():void{
var _local1:Point;
_local1 = Game.select.getSelected();
if ((((_local1 == null)) || ((Game.map.getCell(_local1.x, _local1.y).getTower() == null)))){
this.clearSupply();
} else {
this.showSupply(_local1.x, _local1.y);
};
}
public function bitmapPress(_arg1:MouseEvent):void{
this.clip.addEventListener(MouseEvent.MOUSE_MOVE, this.bitmapMouseMove);
this.bitmapUpdate(Math.floor(_arg1.localX), Math.floor(_arg1.localY));
}
protected function clearSupply():void{
this.supply.graphics.clear();
}
public function bitmapRelease(_arg1:MouseEvent):void{
this.clip.removeEventListener(MouseEvent.MOUSE_MOVE, this.bitmapMouseMove);
}
public function moveWindow(_arg1:int, _arg2:int):void{
var _local3:LayoutGame;
_local3 = Game.view.layout;
this.window.x = (_arg1 * _local3.miniCellSize);
this.window.y = (_arg2 * _local3.miniCellSize);
}
public function cleanup():void{
this.monitor.removeEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.foreground.parent.removeChild(this.foreground);
this.foreground.bitmapData.dispose();
this.foreground = null;
this.window.parent.removeChild(this.window);
this.window = null;
this.supply.parent.removeChild(this.supply);
this.supply = null;
this.background.parent.removeChild(this.background);
this.background.bitmapData.dispose();
this.background = null;
this.glare.parent.removeChild(this.glare);
this.glare = null;
this.clip.removeEventListener(MouseEvent.MOUSE_DOWN, this.bitmapPress);
this.clip.removeEventListener(MouseEvent.MOUSE_UP, this.bitmapRelease);
this.clip.removeEventListener(MouseEvent.MOUSE_MOVE, this.bitmapMouseMove);
this.clip.parent.removeChild(this.clip);
this.clip = null;
this.monitor.parent.removeChild(this.monitor);
this.monitor = null;
}
public function bitmapMouseMove(_arg1:MouseEvent):void{
if (_arg1.buttonDown){
this.bitmapUpdate(Math.floor(_arg1.localX), Math.floor(_arg1.localY));
} else {
this.bitmapRelease(_arg1);
};
}
protected function setCell(_arg1:int, _arg2:int, _arg3:int, _arg4:BitmapData):void{
var _local5:int;
var _local6:Rectangle;
_local5 = Game.view.layout.miniCellSize;
_local6 = new Rectangle((_arg1 * _local5), (_arg2 * _local5), _local5, _local5);
_arg4.fillRect(_local6, _arg3);
if (_arg4 == this.background.bitmapData){
this.foreground.bitmapData.fillRect(_local6, 0xFFFFFF);
};
}
protected function bitmapUpdate(_arg1:int, _arg2:int):void{
var _local3:LayoutGame;
var _local4:int;
var _local5:int;
var _local6:int;
_local3 = Game.view.layout;
_local4 = _local3.miniCellSize;
_local5 = (Math.floor((_arg1 / _local4)) - _local3.windowCenter.x);
_local6 = (Math.floor((_arg2 / _local4)) - _local3.windowCenter.y);
Game.view.window.moveWindow(_local5, _local6);
}
protected function rollOver(_arg1:MouseEvent):void{
Game.view.toolTip.hide();
}
public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.miniOffset.x;
this.clip.y = _arg1.miniOffset.y;
this.monitor.x = _arg1.monitorOffset.x;
this.monitor.y = _arg1.monitorOffset.y;
this.glare.x = _arg1.monitorOffset.x;
this.glare.y = _arg1.monitorOffset.y;
this.drawWindow(_arg1);
}
}
}//package ui
Section 197
//MonitorClip (ui.MonitorClip)
package ui {
import flash.display.*;
public dynamic class MonitorClip extends MovieClip {
}
}//package ui
Section 198
//MonitorOverlayClip (ui.MonitorOverlayClip)
package ui {
import flash.display.*;
public dynamic class MonitorOverlayClip extends MovieClip {
}
}//package ui
Section 199
//MouseFloater (ui.MouseFloater)
package ui {
import flash.display.*;
import flash.events.*;
import flash.*;
public class MouseFloater {
protected var buildType:int;
protected var supplies:Shape;
protected var isActive:Boolean;
protected var shadow:CenteredImage;
protected var parent:DisplayObjectContainer;
protected var oldPos:Point;
protected var range:Range;
public static var REMOVE_SUPPLY:int = 5;
public static var ADD_SUPPLY:int = 4;
public function MouseFloater(_arg1:DisplayObjectContainer=null):void{
if (!Boot.skip_constructor){
this.parent = _arg1;
this.range = new Range(this.parent, Option.newRangeColor, Option.newRangeOpacity);
this.supplies = new Shape();
this.parent.addChild(this.supplies);
this.supplies.visible = false;
this.shadow = new CenteredImage(this.parent, Label.floater);
this.shadow.setCenter(new Point(0, 0));
this.shadow.hide();
this.isActive = false;
this.oldPos = null;
this.buildType = 0;
};
}
public function stop():void{
if (this.isActive){
this.parent.removeEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.shadow.hide();
this.isActive = false;
this.range.clear();
this.supplies.visible = false;
};
}
protected function updateShadow(_arg1:Point):void{
var _local2:Point;
_local2 = Game.view.window.toRelative(_arg1.x, _arg1.y);
this.shadow.goto(Lib.cellToPixel(_local2.x), Lib.cellToPixel(_local2.y));
}
protected function updateOverlay(_arg1:Point):void{
if (this.isValid(_arg1)){
this.shadow.setTransform(Color.allowTransform);
this.updateSupplies(_arg1);
} else {
this.shadow.setTransform(Color.denyTransform);
this.supplies.visible = false;
};
}
public function update(_arg1:Number, _arg2:Number, _arg3:Boolean):void{
var _local4:LayoutGame;
var _local5:Point;
var _local6:Point;
_local4 = Game.view.layout;
_local5 = new Point(Math.floor(_arg1), Math.floor(_arg2));
if ((((((((((_local5.x >= _local4.mapOffset.x)) && ((_local5.x < (_local4.mapSize.x + _local4.mapOffset.x))))) && ((_local5.y >= _local4.mapOffset.y)))) && ((_local5.y < (_local4.mapSize.y + _local4.mapOffset.y))))) && (this.isActive))){
this.shadow.show();
_local6 = Game.view.window.toAbsolute(Lib.pixelToCell((_local5.x - _local4.mapOffset.x)), Lib.pixelToCell((_local5.y - _local4.mapOffset.y)));
if ((((((this.oldPos == null)) || (!(Point.isEqual(_local6, this.oldPos))))) || (_arg3))){
this.oldPos = _local6;
this.updateShadow(_local6);
this.updateOverlay(_local6);
this.updateRange(_local6);
};
} else {
this.shadow.hide();
this.range.clear();
this.supplies.visible = false;
this.oldPos = null;
};
}
public function updatePublic():void{
this.update(Main.getRoot().mouseX, Main.getRoot().mouseY, true);
}
public function mouseMove(_arg1:MouseEvent):void{
this.update(_arg1.stageX, _arg1.stageY, false);
}
public function start(_arg1:int):void{
if (((!(this.isActive)) || (!((_arg1 == this.buildType))))){
this.buildType = _arg1;
this.shadow.gotoFrame((this.buildType + 2));
this.shadow.show();
this.parent.addEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.isActive = true;
this.oldPos = null;
this.update(Main.getRoot().mouseX, Main.getRoot().mouseY, false);
};
}
public function cleanup():void{
this.parent.removeEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.parent = null;
this.shadow.cleanup();
this.shadow = null;
this.supplies.parent.removeChild(this.supplies);
this.supplies = null;
this.range.cleanup();
this.range = null;
this.isActive = false;
}
protected function isValid(_arg1:Point):Boolean{
var _local2:Boolean;
_local2 = true;
if (this.buildType == ADD_SUPPLY){
_local2 = (Check.checkAddSupply(_arg1) == Check.ADD_OK);
} else {
if (this.buildType == REMOVE_SUPPLY){
_local2 = (Check.checkRemoveSupply(_arg1) == Check.REMOVE_OK);
} else {
_local2 = Tower.canPlace(this.buildType, _arg1.x, _arg1.y);
};
};
return (_local2);
}
public function resize(_arg1:LayoutGame):void{
var _local2:Point;
this.range.resize(_arg1);
if (this.oldPos != null){
_local2 = this.oldPos;
this.oldPos = null;
this.update(_local2.x, _local2.y, false);
};
}
protected function updateSupplies(_arg1:Point):void{
var _local2:Point;
var _local3:List;
var _local4:*;
var _local5:Point;
var _local6:Tower;
var _local7:int;
var _local8:int;
var _local9:int;
_local2 = Game.view.window.toRelative(_arg1.x, _arg1.y);
this.supplies.x = (Lib.cellToPixel(_local2.x) + Option.halfCell);
this.supplies.y = (Lib.cellToPixel(_local2.y) + Option.halfCell);
this.supplies.graphics.clear();
_local3 = Game.map.findTowers(_arg1.x, _arg1.y, Option.supplyRange);
_local4 = _local3.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local6 = Game.map.getCell(_local5.x, _local5.y).getTower();
if ((((this.buildType == Tower.DEPOT)) || ((_local6.getType() == Tower.DEPOT)))){
_local7 = Color.supplyOtherLine;
if ((((this.buildType == Tower.DEPOT)) && ((_local6.getType() == Tower.DEPOT)))){
_local7 = Color.supplyDepotLine;
};
this.supplies.graphics.lineStyle(Color.supplyLineThickness, _local7, Color.supplyLineAlpha, true, LineScaleMode.NORMAL, CapsStyle.ROUND);
_local8 = Lib.cellToPixel((_local5.x - _arg1.x));
_local9 = Lib.cellToPixel((_local5.y - _arg1.y));
this.supplies.graphics.moveTo(0, 0);
this.supplies.graphics.lineTo(_local8, _local9);
};
};
this.supplies.visible = true;
}
protected function updateRange(_arg1:Point):void{
var _local2:int;
this.range.clear();
if ((((this.buildType == Tower.SNIPER)) && (Tower.canPlace(this.buildType, _arg1.x, _arg1.y)))){
_local2 = Option.sniperRange[0];
PermissiveFov.permissiveFov(_arg1.x, _arg1.y, _local2, Sniper.isBlocked, this.addNewSquare);
this.range.draw();
};
}
protected function addNewSquare(_arg1:int, _arg2:int):void{
if (!Sniper.isBlocked(_arg1, _arg2)){
this.range.set(_arg1, _arg2);
};
}
}
}//package ui
Section 200
//MouseScroller (ui.MouseScroller)
package ui {
import flash.display.*;
import flash.events.*;
import flash.*;
public class MouseScroller {
protected var north:Boolean;
protected var enabled:Boolean;
protected var south:Boolean;
protected var parent:InteractiveObject;
protected var west:Boolean;
protected var counter:int;
protected var east:Boolean;
protected static var basePos:Point = null;
protected static var mouseOut:Boolean = false;
protected static var mousePos:Point = null;
protected static var maxScroll:int = 7;
protected static var outMargin:int = 75;
public function MouseScroller(_arg1:InteractiveObject=null):void{
if (!Boot.skip_constructor){
this.enabled = true;
this.north = false;
this.south = false;
this.east = false;
this.west = false;
this.parent = _arg1;
this.counter = 0;
this.parent.stage.addEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.parent.stage.addEventListener(MouseEvent.ROLL_OVER, this.mouseMove);
this.parent.stage.addEventListener(Event.MOUSE_LEAVE, this.mouseLeave);
};
}
public function enable():void{
this.enabled = true;
}
protected function mouseLeave(_arg1:Event):void{
this.parent.addEventListener(Event.ENTER_FRAME, this.enterFrame);
Game.view.toolTip.hide();
this.updateMouse(Math.floor(this.parent.stage.mouseX), Math.floor(this.parent.stage.mouseY), Game.view.layout.scrollOutMargin);
}
public function mouseMove(_arg1:MouseEvent):void{
this.mouseClear();
this.updateMouse(Math.floor(_arg1.stageX), Math.floor(_arg1.stageY), Game.view.layout.scrollMargin);
}
protected function updateMouse(_arg1:int, _arg2:int, _arg3:int):void{
var _local4:Point;
_local4 = Game.view.layout.screenSize;
this.north = (((_arg2 <= _arg3)) && (this.withinGutter(_local4, _arg1, _arg2)));
this.south = (((_arg2 > (_local4.y - _arg3))) && (this.withinGutter(_local4, _arg1, _arg2)));
this.east = (((_arg1 > (_local4.x - _arg3))) && (this.withinGutter(_local4, _arg1, _arg2)));
this.west = (((_arg1 <= _arg3)) && (this.withinGutter(_local4, _arg1, _arg2)));
if (((((((this.north) || (this.south))) || (this.east))) || (this.west))){
this.parent.addEventListener(Event.ENTER_FRAME, this.enterFrame);
} else {
this.parent.removeEventListener(Event.ENTER_FRAME, this.enterFrame);
};
}
public function cleanup():void{
this.parent.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.parent.stage.removeEventListener(MouseEvent.ROLL_OVER, this.mouseMove);
this.parent.stage.removeEventListener(Event.MOUSE_LEAVE, this.mouseLeave);
this.parent.removeEventListener(Event.ENTER_FRAME, this.enterFrame);
}
protected function withinGutter(_arg1:Point, _arg2:int, _arg3:int):Boolean{
return ((((((((_arg2 >= -(outMargin))) && ((_arg3 >= -(outMargin))))) && ((_arg2 <= (_arg1.x + outMargin))))) && ((_arg3 <= (_arg1.y + outMargin)))));
}
public function mouseClear():void{
this.north = false;
this.south = false;
this.east = false;
this.west = false;
this.parent.removeEventListener(Event.ENTER_FRAME, this.enterFrame);
}
public function disable():void{
this.enabled = false;
}
protected function updateExternal():void{
}
public function enterFrame(_arg1:Event):void{
if (((this.enabled) && (!(Game.pause.isSystemPaused())))){
this.updateExternal();
this.counter = (this.counter + (Main.config.getValue(Config.SCROLL) + 1));
if (this.counter >= maxScroll){
if (this.north){
Game.view.window.scrollWindow(Direction.NORTH, 1);
};
if (this.south){
Game.view.window.scrollWindow(Direction.SOUTH, 1);
};
if (this.east){
Game.view.window.scrollWindow(Direction.EAST, 1);
};
if (this.west){
Game.view.window.scrollWindow(Direction.WEST, 1);
};
this.counter = (this.counter - maxScroll);
};
};
}
protected static function setMouseOut():void{
MouseScroller.mouseOut = true;
}
protected static function setMousePosition(_arg1:int, _arg2:int):void{
if (MouseScroller.basePos != null){
MouseScroller.mousePos = new Point((_arg1 - basePos.x), (_arg2 - basePos.y));
} else {
MouseScroller.mousePos = new Point(_arg1, _arg2);
};
}
protected static function getBasePos(_arg1:String):Point{
var _local2:Point;
_local2 = null;
return (_local2);
}
protected static function clearMouseOut():void{
MouseScroller.mouseOut = false;
}
public static function trackMouse():void{
}
}
}//package ui
Section 201
//MusicPlayer (ui.MusicPlayer)
package ui {
import flash.events.*;
import flash.media.*;
import flash.*;
public class MusicPlayer {
protected var channel:SoundChannel;
protected var currentMusic:Sound;
protected var pos:int;
protected var transform:SoundTransform;
public static var QUIET:int = 6;
protected static var musicList:Array = [new MainIntroMusic(), new MainLoopMusic(), new Wave1Music(), new Wave2Music(), new Wave3Music(), new WaveEndMusic(), new QuietMusic(), new AmbientMusic()];
public static var WAVE_3:int = 4;
public static var MAIN_INTRO:int = 0;
public static var MAIN_LOOP:int = 1;
public static var WAVE_1:int = 2;
protected static var bufferLength:Number = 1000;
protected static var nextMusic:Array = [MAIN_LOOP, MAIN_INTRO, WAVE_2, WAVE_3, WAVE_1, QUIET, AMBIENT, QUIET];
public static var WAVE_END:int = 5;
public static var WAVE_2:int = 3;
public static var AMBIENT:int = 7;
public function MusicPlayer():void{
if (!Boot.skip_constructor){
this.pos = MAIN_INTRO;
this.transform = new SoundTransform();
this.advance();
};
}
public function stop():void{
if (this.channel != null){
this.channel.removeEventListener(Event.SOUND_COMPLETE, this.complete);
this.channel.stop();
this.channel = null;
};
}
public function cleanup():void{
this.stop();
}
protected function advance(_arg1=null):void{
var _local2:Number;
_local2 = 0;
if (_arg1 != null){
_local2 = _arg1;
};
this.stop();
this.currentMusic = musicList[this.pos];
this.transform.volume = Main.config.getProportion(Config.MUSIC);
this.channel = this.currentMusic.play(_local2, 0, this.transform);
this.channel.addEventListener(Event.SOUND_COMPLETE, this.complete);
this.pos = nextMusic[this.pos];
}
protected function enterFrame(_arg1:Event):void{
var _local2:SoundChannel;
var _local3:Number;
var _local4:Number;
if ((((this.pos == MAIN_INTRO)) || ((this.pos == MAIN_LOOP)))){
if (this.channel.position > (this.currentMusic.length - bufferLength)){
Lib.trace("within buffer");
_local2 = this.channel;
this.stop();
_local3 = (musicList[this.pos].length - _local2.position);
_local4 = (MusicPlayer.bufferLength - _local3);
this.advance(_local4);
};
};
}
public function changeMusic(_arg1:int, _arg2:Boolean):void{
this.pos = _arg1;
if (_arg2){
this.advance();
};
}
protected function complete(_arg1:Event):void{
this.advance();
}
public function setVolume(_arg1:Number):void{
if (this.channel != null){
this.transform.volume = _arg1;
this.channel.soundTransform = this.transform;
};
}
public static function randomWave():int{
return ((Lib.rand(3) + WAVE_1));
}
}
}//package ui
Section 202
//QuietMusic (ui.QuietMusic)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class QuietMusic extends Sound {
public function QuietMusic(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 203
//ResourceBar (ui.ResourceBar)
package ui {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import flash.*;
public class ResourceBar {
protected var allowedWidth:int;
protected var clip:DisplayObjectContainer;
protected var bar:Bitmap;
protected var payload:Resource;
protected var hoverAction:Function;
protected var survivorImages:Array;
protected var clickAction:Function;
protected var truckLoad:int;
protected var baseY:int;
protected var text:TextField;
protected var sourceRect:Rectangle;
protected var survivorOffset:int;
protected var middle:int;
protected static var groupSize:int = (Option.truckLoad * 5);
protected static var resourceRow:Array = [0, 2, 4, 0];
protected static var INCOMING:int = 2;
protected static var STUFF:int = 1;
protected static var iconWidth:int = 24;
protected static var BACKGROUND:int = 0;
protected static var evenOut:int = 1;
protected static var margin:int = 35;
protected static var backgroundColor:Array = [0xFF, 0xFF, 0xFF];
protected static var incomingColor:Array = [0, 119, 0];
public function ResourceBar(_arg1:DisplayObjectContainer=null, _arg2:Resource=null, _arg3:int=0, _arg4:int=0, _arg5:int=0, _arg6:Function=null, _arg7:Function=null, _arg8:LayoutGame=null):void{
var _local9:BitmapData;
var _local10:TextFormat;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:String;
super();
if (!Boot.skip_constructor){
this.payload = _arg2;
this.clickAction = _arg6;
this.hoverAction = _arg7;
this.clip = new Sprite();
_arg1.addChild(this.clip);
this.clip.x = _arg3;
this.clip.y = _arg4;
this.clip.visible = false;
this.clip.addEventListener(MouseEvent.CLICK, this.release);
this.clip.addEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.clip.addEventListener(MouseEvent.MOUSE_MOVE, this.rollOver);
this.clip.addEventListener(MouseEvent.ROLL_OUT, this.rollOut);
_local9 = new BitmapData(_arg5, Option.cellPixels, true, 0xFFFFFF);
this.bar = new Bitmap(_local9);
this.clip.addChild(this.bar);
this.bar.visible = true;
this.bar.x = 0;
this.bar.y = 0;
this.bar.width = _arg5;
this.bar.height = Option.cellPixels;
this.text = Util.createTextField(this.clip, new Point(0, 0), new Point(_arg5, Option.cellPixels));
this.text.visible = true;
this.text.border = false;
this.text.background = false;
_local10 = Util.createTextFormat();
_local10.align = TextFormatAlign.RIGHT;
_local10.size = FontSize.resourceBar;
_local10.color = Color.resourceBarText;
this.text.defaultTextFormat = _local10;
this.survivorImages = null;
if (this.payload == Resource.SURVIVORS){
this.survivorImages = [];
_local12 = 0;
_local13 = Animation.carryAmmo.getTypeCount();
while (_local12 < _local13) {
var _temp1 = _local12;
_local12 = (_local12 + 1);
_local14 = _temp1;
_local15 = Sprite.getSurvivorLinkage(Resource.SURVIVORS, _local14);
this.survivorImages[_local14] = new CenteredImage(this.clip, _local15);
this.survivorImages[_local14].detach();
this.survivorImages[_local14].setCenter(new Point(0, 0));
};
};
_local11 = Lib.resourceToIndex(this.payload);
this.baseY = (resourceRow[_local11] * Option.cellPixels);
this.sourceRect = new Rectangle(0, 0, Option.cellPixels, Option.cellPixels);
this.truckLoad = Lib.truckLoad(this.payload);
this.allowedWidth = _arg5;
this.middle = Math.floor((this.allowedWidth / 2));
};
}
public function hide():void{
this.clip.visible = false;
}
protected function draw(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int, _arg8:Boolean):void{
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:int;
var _local16:int;
var _local17:int;
var _local18:Point;
var _local19:Tower;
var _local20:int;
var _local21:Array;
this.sourceRect.x = Lib.cellToPixel(_arg4);
_local9 = (Option.cellPixels - 8);
_local10 = (Math.floor(((_arg2 / this.truckLoad) * _local9)) + 4);
_local11 = (Math.floor(((_arg3 / this.truckLoad) * _local9)) + 4);
this.sourceRect.y = (this.baseY + (Option.cellPixels - _local11));
if (_arg8){
this.sourceRect.y = (this.sourceRect.y + Option.cellPixels);
};
_local12 = (_arg5 - 1);
_local13 = _arg1;
if (this.payload == Resource.SURVIVORS){
_local12 = (Math.ceil((_arg5 / 2)) - 1);
_local13 = Math.floor((_arg1 / 2));
};
if (_local12 == 0){
_local12 = 1;
_local13 = 0;
};
_local14 = (Math.floor((((_arg7 - iconWidth) / _local12) * _local13)) + _arg6);
if (_local14 > (Lib.cellToPixel(_local13) + _arg6)){
_local14 = (Lib.cellToPixel(_local13) + _arg6);
};
this.sourceRect.height = (_local11 - _local10);
if ((((this.payload == Resource.SURVIVORS)) && (((_arg3 - _arg2) > 0)))){
_local15 = Math.floor((Option.cellPixels / 2));
_local16 = Math.floor((Option.cellPixels / 4));
if ((_arg1 % 2) == 1){
_local16 = (_local16 * 3);
};
_local17 = (this.survivorOffset + _arg1);
_local18 = Game.select.getSelected();
_local19 = Game.map.getCell(_local18.x, _local18.y).getTower();
_local20 = _local19.getSurvivorType(_local17);
_local21 = null;
if (_arg4 == BACKGROUND){
_local21 = backgroundColor;
} else {
if (_arg4 == INCOMING){
_local21 = incomingColor;
};
};
Workaround.drawOverPixels(this.bar, this.survivorImages[_local20].getImage(), (_local14 + _local15), _local16, _local21);
} else {
Workaround.copyOverPixels(this.bar, Game.view.barSource, this.sourceRect, _local14, (Option.cellPixels - _local11));
};
}
protected function release(_arg1:MouseEvent):void{
var _local2:Point;
var _local3:Boolean;
_local2 = new Point(Math.floor(_arg1.stageX), Math.floor(_arg1.stageY));
_local3 = (_arg1.localX >= this.middle);
this.clickAction(this.payload, _local3);
}
public function move(_arg1:int, _arg2:int):void{
this.clip.x = _arg1;
this.clip.y = _arg2;
}
protected function drawHalf(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
_local7 = ((_arg3 - _arg4) - _arg5);
_local8 = 0;
_local9 = _arg4;
if (this.payload != Resource.SURVIVORS){
_local10 = Math.floor((_arg4 / groupSize));
this.drawGroup(_local10, STUFF, _arg2, _arg1, _arg6);
_local8 = (_local10 * this.truckLoad);
_local9 = (_arg4 - (_local10 * groupSize));
if ((((_local10 > 0)) && ((_local9 > 0)))){
_local8 = (_local8 + this.truckLoad);
_arg2 = (_arg2 + 1);
};
};
this.drawRegion(_local8, _local9, STUFF, _arg2, _arg1, _arg6);
_local8 = (_local8 + _arg4);
this.drawRegion(_local8, _arg5, INCOMING, _arg2, _arg1, _arg6);
_local8 = (_local8 + _arg5);
this.drawRegion(_local8, _local7, BACKGROUND, _arg2, _arg1, _arg6);
_local8 = (_local8 + _local7);
}
protected function drawRegion(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
var _local7:int;
var _local8:int;
var _local9:int;
_local7 = Math.floor((_arg1 / this.truckLoad));
_local8 = (_arg1 % this.truckLoad);
_local9 = _arg2;
while ((_local9 + _local8) >= this.truckLoad) {
this.draw(_local7, _local8, this.truckLoad, _arg3, _arg4, _arg5, _arg6, false);
_local9 = ((_local9 - this.truckLoad) + _local8);
_local7++;
_local8 = 0;
};
this.draw(_local7, _local8, (_local9 + _local8), _arg3, _arg4, _arg5, _arg6, false);
}
protected function drawGroup(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int):void{
var _local6:int;
var _local7:int;
_local6 = 0;
while (_local6 < _arg1) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local7 = _temp1;
this.draw(_local7, 0, this.truckLoad, _arg2, _arg3, _arg4, _arg5, true);
};
}
public function getPayload():Resource{
return (this.payload);
}
public function cleanup():void{
var _local1:int;
var _local2:Array;
var _local3:CenteredImage;
if (this.survivorImages != null){
_local1 = 0;
_local2 = this.survivorImages;
while (_local1 < _local2.length) {
_local3 = _local2[_local1];
_local1++;
_local3.cleanup();
};
this.survivorImages = null;
};
this.text.parent.removeChild(this.text);
this.text = null;
this.bar.parent.removeChild(this.bar);
this.bar.bitmapData.dispose();
this.bar = null;
this.clip.removeEventListener(MouseEvent.CLICK, this.release);
this.clip.removeEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.clip.removeEventListener(MouseEvent.MOUSE_MOVE, this.rollOver);
this.clip.removeEventListener(MouseEvent.ROLL_OUT, this.rollOut);
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function rollOut(_arg1:MouseEvent):void{
}
protected function rollOver(_arg1:MouseEvent):void{
var _local2:Boolean;
_local2 = (_arg1.localX >= this.middle);
Game.view.toolTip.show(this.hoverAction(this.payload, _local2));
}
public function show(_arg1:int, _arg2:int, _arg3:int, _arg4:int):void{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
this.middle = calculateMiddle(_arg1, _arg2, _arg3, this.payload, this.allowedWidth);
this.clip.visible = true;
this.bar.bitmapData.fillRect(new Rectangle(0, 0, this.allowedWidth, Option.cellPixels), Color.resourceBarBorder);
this.bar.bitmapData.fillRect(new Rectangle(1, 1, this.middle, (Option.cellPixels - 2)), Color.resourceBarQuota);
this.bar.bitmapData.fillRect(new Rectangle(this.middle, 1, (this.allowedWidth - 2), (Option.cellPixels - 2)), Color.resourceBarOverflow);
if (_arg4 > 0){
this.text.htmlText = ((Lib.resourceToString(this.payload) + " left: ") + Std.string(_arg4));
} else {
if ((((((((_arg1 == 0)) && ((_arg2 == 0)))) && ((_arg3 == 0)))) && ((_arg4 == 0)))){
this.text.htmlText = Lib.resourceToString(this.payload);
} else {
this.text.htmlText = "";
};
};
this.text.y = ((Option.cellPixels - this.text.textHeight) / 2);
_local5 = (Math.ceil((_arg3 / this.truckLoad)) + 1);
_local6 = Math.floor(Math.min(_arg3, _arg1));
if (this.payload != Resource.SURVIVORS){
_local5 = (_local5 - (4 * Math.floor((_local6 / groupSize))));
};
_local7 = Math.floor(Math.min((_arg3 - _local6), _arg2));
this.survivorOffset = 0;
this.drawHalf(0, _local5, _arg3, _local6, _local7, this.middle);
if ((_arg1 + _arg2) > _arg3){
_local8 = ((_arg1 + _arg2) - _arg3);
_local9 = (Math.ceil((_local8 / this.truckLoad)) + 1);
_local10 = (this.allowedWidth - this.middle);
this.survivorOffset = Math.floor((_arg3 / this.truckLoad));
if (_arg1 >= _arg3){
if (this.payload != Resource.SURVIVORS){
_local9 = (_local9 - (4 * Math.floor(((_arg1 - _arg3) / groupSize))));
};
this.drawHalf(this.middle, _local9, _local8, (_arg1 - _arg3), _arg2, _local10);
} else {
this.drawHalf(this.middle, _local9, _local8, 0, _local8, _local10);
};
};
}
public static function calculateMiddle(_arg1:int, _arg2:int, _arg3:int, _arg4:Resource, _arg5:int):int{
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
_local6 = Lib.truckLoad(_arg4);
_local7 = Math.ceil((_arg3 / _local6));
_local8 = Math.ceil(((_arg1 + _arg2) / _local6));
_local9 = (Math.floor(Math.max(_local8, _local7)) + (ResourceBar.evenOut * 2));
_local10 = Math.floor((_arg5 * ((_local7 + evenOut) / _local9)));
_local11 = ((_local7 + 1) * margin);
_local10 = Math.floor(Math.min(_local10, _local11));
_local10 = Math.floor(Math.max(_local10, margin));
_local10 = Math.floor(Math.min(_local10, (_arg5 - margin)));
return (_local10);
}
}
}//package ui
Section 204
//ScriptView (ui.ScriptView)
package ui {
import flash.display.*;
import flash.events.*;
import logic.*;
import flash.text.*;
import flash.*;
public class ScriptView {
protected var clip:TutorialClip;
protected var state:ScriptState;
protected var buttons:ButtonList;
protected var clickNext:Function;
protected var clickSkip:Function;
protected static var borderThickness:int = 2;
public function ScriptView(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
if (!Boot.skip_constructor){
this.state = null;
this.clickNext = null;
this.clickSkip = null;
this.clip = new TutorialClip();
_arg1.addChild(this.clip);
this.clip.mouseEnabled = false;
this.clip.back.mouseEnabled = false;
this.clip.back.mouseChildren = false;
this.buttons = new ButtonList(this.click, null, [this.clip.next]);
this.clip.next.mouseEnabled = true;
this.clip.next.mouseChildren = false;
this.clip.text.wordWrap = true;
this.clip.text.autoSize = TextFieldAutoSize.LEFT;
this.clip.text.addEventListener(TextEvent.LINK, this.link);
this.clip.arrow.mouseEnabled = false;
this.clip.arrow.mouseChildren = false;
this.clip.arrow.visible = false;
this.resize(_arg2);
};
}
protected function click(_arg1:int):void{
if (_arg1 == 0){
this.clickNext();
} else {
this.clickSkip();
};
}
public function update(_arg1:Array):void{
var _local2:ScriptState;
var _local3:int;
var _local4:ScriptState;
_local2 = null;
_local3 = 0;
while (_local3 < _arg1.length) {
_local4 = _arg1[_local3];
_local3++;
if (((_local4.shouldShowText()) || (_local4.shouldShowArrow()))){
_local2 = _local4;
break;
};
};
if (this.state != _local2){
this.state = _local2;
this.redraw();
};
}
protected function showArrow(_arg1:Point):void{
var _local2:Number;
var _local3:Number;
var _local4:int;
this.clip.arrow.visible = true;
this.clip.arrow.x = _arg1.x;
this.clip.arrow.y = _arg1.y;
_local2 = (_arg1.x - (this.clip.text.x + (this.clip.text.width / 2)));
_local3 = (_arg1.y - (this.clip.text.y + (this.clip.text.height / 2)));
_local4 = Lib.slopeToAngle(_local2, _local3);
this.clip.arrow.rotation = (180 + _local4);
this.clip.arrow.tail.width = Math.sqrt(((_local2 * _local2) + (_local3 * _local3)));
}
protected function link(_arg1:TextEvent):void{
Util.success();
Game.view.centerMenu.lookup(_arg1.text);
}
protected function hideText():void{
this.clip.text.visible = false;
this.clip.next.visible = false;
this.clip.back.visible = false;
}
public function cleanup():void{
this.buttons.cleanup();
this.clip.text.removeEventListener(TextEvent.LINK, this.link);
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
protected function hideArrow():void{
this.clip.arrow.visible = false;
}
protected function setText():void{
var _local1:int;
var _local2:int;
var _local3:Point;
this.clip.text.visible = true;
this.clip.back.visible = true;
this.clip.text.text = this.state.getText();
_local1 = Math.floor(this.clip.text.width);
_local2 = Math.floor(this.clip.text.height);
if (this.state.shouldShowNext()){
this.clip.next.visible = true;
this.clip.next.x = (this.clip.text.x + 15);
this.clip.next.y = ((this.clip.text.y + _local2) + 10);
_local2 = (_local2 + (5 + Math.floor(this.clip.next.height)));
} else {
this.clip.next.visible = false;
};
_local3 = new Point((_local1 + 10), (_local2 + 15));
this.clip.back.graphics.clear();
this.clip.back.graphics.lineStyle();
this.clip.back.graphics.beginFill(Color.tutorialBackground, Color.tutorialAlpha);
this.clip.back.graphics.drawRoundRect(0, 0, _local3.x, _local3.y, 10, 10);
this.clip.back.graphics.endFill();
}
protected function updateGuide(_arg1:Point, _arg2:Boolean):void{
var _local3:Point;
var _local4:Point;
var _local5:Array;
var _local6:Direction;
var _local7:int;
if (_arg2){
_local3 = Game.view.layout.screenSize;
_local4 = new Point(Math.floor((_local3.x / 2)), Math.floor((_local3.y / 2)));
_local5 = [new Point(_local4.x, 0), new Point(_local4.x, _local3.y), new Point(_local3.x, _local4.y), new Point(0, _local4.y)];
_local6 = Game.view.window.getDir(_arg1);
if (_local6 == null){
_arg1 = Game.view.window.toRelative(_arg1.x, _arg1.y).toPixel();
_arg1.x = (_arg1.x + Option.halfCell);
_arg1.y = (_arg1.y + Option.halfCell);
} else {
_local7 = Lib.directionToIndex(_local6);
_arg1 = _local5[_local7];
};
};
this.showArrow(_arg1);
}
public function resize(_arg1:LayoutGame):void{
this.clip.back.x = _arg1.tutorialBoxOffset.x;
this.clip.back.y = _arg1.tutorialBoxOffset.y;
this.clip.text.x = _arg1.tutorialTextOffset.x;
this.clip.text.y = _arg1.tutorialTextOffset.y;
this.clip.text.width = _arg1.tutorialSize.x;
this.redraw();
}
public function redraw():void{
if (this.state == null){
this.clip.visible = false;
this.hideArrow();
} else {
this.clip.visible = true;
if (this.state.shouldShowText()){
this.setText();
} else {
this.hideText();
};
if (this.state.shouldShowArrow()){
this.updateGuide(this.state.getPos(), this.state.isMapPos());
} else {
this.hideArrow();
};
};
}
public function setButtons(_arg1:Function, _arg2:Function):void{
this.clickNext = _arg1;
this.clickSkip = _arg2;
}
}
}//package ui
Section 205
//ScrollArrowClip (ui.ScrollArrowClip)
package ui {
import flash.display.*;
public dynamic class ScrollArrowClip extends MovieClip {
}
}//package ui
Section 206
//ScrollingText (ui.ScrollingText)
package ui {
import flash.display.*;
import flash.events.*;
import flash.*;
public class ScrollingText {
protected var parent:DisplayObjectContainer;
protected var height:int;
protected var starts:Array;
protected var clips:Array;
protected var offset:Number;
protected static var delta:Number = 1;
protected static var skipDelta:Number = 100;
public function ScrollingText(_arg1:DisplayObjectContainer=null, _arg2:Array=null, _arg3:Array=null, _arg4:Point=null):void{
if (!Boot.skip_constructor){
this.parent = _arg1;
this.clips = _arg2;
this.starts = _arg3;
this.height = _arg4.y;
this.reset();
};
}
public function cleanup():void{
this.end();
}
public function update():void{
var _local1:int;
var _local2:int;
var _local3:int;
_local1 = 0;
_local2 = this.clips.length;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
this.clips[_local3].y = ((this.height + this.starts[_local3]) + this.offset);
};
}
protected function reset():void{
this.offset = 0;
this.update();
}
public function begin():void{
this.parent.addEventListener(Event.ENTER_FRAME, this.enterFrame);
this.reset();
}
public function resize(_arg1:Point):void{
this.height = _arg1.y;
this.update();
}
protected function enterFrame(_arg1:Event):void{
this.offset = (this.offset - delta);
this.update();
}
public function end():void{
this.parent.removeEventListener(Event.ENTER_FRAME, this.enterFrame);
}
public function skip():void{
this.offset = (this.offset - skipDelta);
this.update();
}
}
}//package ui
Section 207
//SniperSprite (ui.SniperSprite)
package ui {
import flash.*;
public class SniperSprite {
protected var headAngle:int;
protected var idle:ImageStack;
protected var bodyAngle:int;
protected var idleHead:VirtualImage;
protected var type:int;
protected var shooter:Sprite;
protected var idleBody:VirtualImage;
public function SniperSprite(_arg1:Point=null, _arg2:int=0):void{
var _local3:Point;
super();
if (!Boot.skip_constructor){
if (_arg1 != null){
_local3 = _arg1.toPixel();
this.type = _arg2;
this.shooter = new Sprite(_local3, 0, this.type, Animation.fireShotgun);
this.idle = new ImageStack();
this.idle.setPixel(_local3);
this.idleHead = new VirtualImage(SpriteDisplay.SNIPER_LAYER, new Point(0, 0), Animation.headLinkage[this.type]);
this.idleHead.setScale(Animation.sniperScale);
this.idle.addImage(this.idleHead);
this.idleBody = new VirtualImage(SpriteDisplay.BODY_LAYER, new Point(0, 0), Animation.bodyLinkage[this.type]);
this.idleBody.setScale(Animation.sniperScale);
this.idle.addImage(this.idleBody);
this.shooter.hide();
this.idle.show();
};
};
}
public function cleanup():void{
this.shooter.cleanup();
this.shooter = null;
this.idle.cleanup();
this.idle = null;
this.idleHead = null;
this.idleBody = null;
}
public function startShooting():void{
this.idle.hide();
this.shooter.setRotationOffset(this.bodyAngle);
this.shooter.show();
this.shooter.resetWait();
}
public function shootStep(_arg1:int):int{
return (this.shooter.step(_arg1));
}
public function stopShooting():void{
this.idle.show();
this.shooter.hide();
}
public function rotateStep(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local3 = 0;
_local4 = _arg1;
if (_local4 > 0){
_local5 = Option.sniperHeadRotate;
_local3 = (_local3 + Util.homeInCount(_local4, _local5, this.headAngle, _arg2));
this.headAngle = Util.homeIn(_local4, _local5, this.headAngle, _arg2);
this.idleHead.setRotationOffset(this.headAngle);
};
if (_local4 > 0){
_local6 = Option.sniperBodyRotate;
if (Util.angleDistance(this.headAngle, this.bodyAngle) >= 40){
_local3 = 0;
};
_local4 = (_arg1 - _local3);
_local3 = (_local3 + Util.homeInCount(_local4, _local6, this.bodyAngle, _arg2));
this.bodyAngle = Util.homeIn(_local4, _local6, this.bodyAngle, _arg2);
this.idleBody.setRotationOffset(this.bodyAngle);
};
this.idle.update();
return (_local3);
}
public function save(){
return ({type:this.type, shooter:Save.maybe(this.shooter, Sprite.saveS), idle:this.idle.save(), idleHead:this.idleHead.save(), idleBody:this.idleBody.save(), headAngle:this.headAngle, bodyAngle:this.bodyAngle});
}
public static function load(_arg1):SniperSprite{
var _local2:SniperSprite;
_local2 = new SniperSprite(null, 0);
_local2.type = _arg1.type;
_local2.shooter = Load.maybe(_arg1.shooter, Sprite.load);
_local2.idle = ImageStack.load(_arg1.idle);
_local2.idleHead = VirtualImage.load(_arg1.idleHead);
_local2.idleBody = VirtualImage.load(_arg1.idleBody);
_local2.idle.addImage(_local2.idleHead);
_local2.idle.addImage(_local2.idleBody);
_local2.headAngle = _arg1.headAngle;
_local2.bodyAngle = _arg1.bodyAngle;
return (_local2);
}
public static function saveS(_arg1:SniperSprite){
return (_arg1.save());
}
}
}//package ui
Section 208
//SpawnDisplay (ui.SpawnDisplay)
package ui {
import flash.display.*;
import flash.events.*;
import logic.*;
import flash.*;
public class SpawnDisplay {
protected var timer:TimerClip;
protected var oldCount:int;
public function SpawnDisplay(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
if (!Boot.skip_constructor){
this.oldCount = 0;
this.timer = new TimerClip();
_arg1.addChild(this.timer);
if (Game.settings.isEditor()){
this.timer.visible = false;
};
this.timer.mouseChildren = false;
this.timer.addEventListener(MouseEvent.CLICK, this.click);
this.timer.addEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.timer.addEventListener(MouseEvent.ROLL_OUT, this.rollOut);
this.timer.addEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.resize(_arg2);
this.setPlay();
};
}
public function cleanup():void{
this.timer.removeEventListener(MouseEvent.CLICK, this.click);
this.timer.removeEventListener(MouseEvent.ROLL_OVER, this.rollOver);
this.timer.removeEventListener(MouseEvent.ROLL_OUT, this.rollOut);
this.timer.removeEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.timer.parent.removeChild(this.timer);
this.timer = null;
}
public function showAnnounce():void{
}
protected function click(_arg1:MouseEvent):void{
Game.pause.toggle();
this.updateTip(_arg1.localX, _arg1.localY);
}
public function update():void{
var _local1:int;
var _local2:int;
var _local3:int;
_local1 = Game.spawner.getWaveCount();
if (((!((Game.settings.getEasterEgg() == GameSettings.FIDDLERSGREEN))) && ((((_local1 > 0)) || (!(Game.spawner.getIsCounting())))))){
this.timer.minutes.visible = false;
this.timer.tens.visible = false;
this.timer.seconds.visible = false;
} else {
this.timer.minutes.visible = true;
this.timer.tens.visible = true;
this.timer.seconds.visible = true;
_local2 = Game.spawner.getFramesLeft();
_local3 = Math.floor((_local2 / Option.fps));
if ((((_local3 <= 10)) && (!((_local3 == this.oldCount))))){
Main.sound.play(SoundPlayer.TIMER_PIP);
};
this.oldCount = _local3;
if (Game.settings.getEasterEgg() != GameSettings.FIDDLERSGREEN){
this.outputTime(_local2);
} else {
this.outputTime(Math.floor((Game.settings.getPlayTime() / 60)));
};
};
}
public function step():void{
this.update();
}
protected function outputTime(_arg1:int):void{
var _local2:Time;
_local2 = new Time(_arg1);
if ((_local2.minutes + 1) != this.timer.minutes.currentFrame){
this.timer.minutes.gotoAndStop((_local2.minutes + 1));
};
if ((_local2.tens + 1) != this.timer.tens.currentFrame){
this.timer.tens.gotoAndStop((_local2.tens + 1));
};
if ((_local2.seconds + 1) != this.timer.seconds.currentFrame){
this.timer.seconds.gotoAndStop((_local2.seconds + 1));
};
}
protected function rollOver(_arg1:MouseEvent):void{
this.updateTip(_arg1.localX, _arg1.localY);
}
protected function updateTip(_arg1:Number, _arg2:Number):void{
if (_arg1 < 115){
Game.view.toolTip.show(Text.countDownTip);
} else {
if (Game.pause.isPaused()){
Game.view.toolTip.show(Text.unpauseTip);
} else {
Game.view.toolTip.show(Text.pauseTip);
};
};
}
public function resize(_arg1:LayoutGame):void{
this.timer.x = _arg1.countDownOffset.x;
this.timer.y = _arg1.countDownOffset.y;
this.timer.width = _arg1.countDownSize.x;
this.timer.height = _arg1.countDownSize.y;
}
protected function mouseMove(_arg1:MouseEvent):void{
this.updateTip(_arg1.localX, _arg1.localY);
}
protected function rollOut(_arg1:MouseEvent):void{
Game.view.toolTip.hide();
}
public function setPause():void{
this.timer.isPause.visible = true;
this.timer.isPlay.visible = false;
}
public function setPlay():void{
this.timer.isPause.visible = false;
this.timer.isPlay.visible = true;
}
}
}//package ui
Section 209
//Sprite (ui.Sprite)
package ui {
import mapgen.*;
import flash.filters.*;
import flash.*;
public class Sprite {
protected var stack:ImageStack;
protected var offset:Point;
protected var currentFrame:int;
protected var toWait:int;
protected var anim:Animation;
protected var toMove:int;
protected var image:VirtualImage;
protected var type:int;
protected var maxWait:int;
public function Sprite(_arg1:Point=null, _arg2:int=0, _arg3:int=0, _arg4:Animation=null):void{
if (!Boot.skip_constructor){
this.anim = _arg4;
this.type = _arg3;
if (_arg1 != null){
this.maxWait = 0;
this.toWait = 0;
this.toMove = 0;
this.stack = new ImageStack();
this.image = new VirtualImage(this.anim.getLayer(), new Point(0, 0), this.anim.getLinkage(this.type));
this.image.setScale(this.anim.getScale());
this.image.setFrame(1);
this.updateGlowFilter();
this.stack.addImage(this.image);
this.stack.rotate(_arg2);
this.offset = new Point(0, 0);
this.setOffset();
if (this.anim.shouldRotate()){
this.stack.allowRotation();
} else {
this.stack.forbidRotation();
};
if (_arg1 != null){
this.stack.setPixel(_arg1.plus(this.offset));
};
this.resetWait();
};
};
}
public function hide():void{
this.stack.hide();
}
public function save(){
return ({animNumber:this.anim.getNumber(), type:this.type, stack:this.stack.save(), image:this.image.save(), offset:this.offset.save(), currentFrame:this.currentFrame, maxWait:this.maxWait, toWait:this.toWait, toMove:this.toMove});
}
public function update():void{
this.stack.update();
}
public function dance(_arg1:Boolean):void{
var _local2:int;
_local2 = (Option.danceMoves.length - 1);
if (!_arg1){
_local2 = -(_local2);
};
this.stack.startDance(_local2);
}
public function step(_arg1:int):int{
var _local2:int;
_local2 = 0;
if (((this.anim.shouldFace()) || (this.stack.isDancing()))){
_local2 = (_local2 + this.stack.faceEnemy((_arg1 - _local2)));
};
if (_arg1 > _local2){
_local2 = (_local2 + this.move((_arg1 - _local2)));
};
if (_local2 > 0){
this.stack.update();
};
return (_local2);
}
protected function updateGlowFilter():void{
if ((((((((this.anim == Animation.zombieDeath)) || ((this.anim == Animation.zombieShamble)))) || ((this.anim == Animation.attackTower)))) || ((this.anim == Animation.attackSurvivor)))){
this.image.setGlowFilter(new GlowFilter(0xFF0000, 1, 8, 8, 1));
};
}
public function move(_arg1:int):int{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local2 = this.anim.getFrameCount();
_local3 = this.currentFrame;
while ((((_arg1 > (this.toMove + this.toWait))) && (((!(this.anim.shouldWait())) || ((this.maxWait > 0)))))) {
this.toWait = (this.toWait + this.anim.getWait(_local3));
this.maxWait = (this.maxWait - this.anim.getWait(_local3));
this.toMove = (this.toMove + this.anim.getMove(_local3));
_local3 = ((_local3 + 1) % _local2);
};
_local4 = Math.floor(Math.min(this.toWait, _arg1));
this.toWait = (this.toWait - _local4);
_local5 = 0;
if (((!(this.anim.shouldWait())) && ((_local4 < _arg1)))){
_local5 = this.stack.step((_arg1 - _local4));
this.toMove = (this.toMove - _local5);
};
if (_local3 != this.currentFrame){
_local6 = _local3;
if (_local6 == 0){
_local6 = this.anim.getFrameCount();
};
if (((this.anim.shouldReverse()) && ((_local6 > Math.floor((_local2 / 2)))))){
_local6 = ((_local2 - _local6) + 1);
};
this.image.setFrame(_local6);
};
this.currentFrame = _local3;
return ((_local4 + _local5));
}
public function setPos(_arg1:Point):void{
this.stack.setPixel(_arg1.plus(this.offset));
}
protected function setOffset():void{
if (this.anim.shouldOffset()){
this.offset.x = (Util.rand(7) - 3);
this.offset.y = (Util.rand(7) - 3);
};
}
public function setAlpha(_arg1:Number):void{
this.image.setAlpha(_arg1);
}
public function getPos():Point{
return (this.stack.getPos().minus(this.offset));
}
public function cleanup():void{
this.stack.cleanup();
}
public function resetWait():void{
if (this.anim.shouldWait()){
this.maxWait = this.anim.getMoveCount();
this.toWait = 0;
this.toMove = 0;
this.currentFrame = 0;
this.image.setFrame(1);
this.stack.update();
} else {
this.maxWait = 0;
};
}
public function travelSimple(_arg1:Point, _arg2:Point=null):void{
var _local3:Point;
var _local4:Point;
_local3 = _arg1.plus(this.offset);
_local4 = _arg2;
if (_local4 != null){
_local4.plusEquals(this.offset);
};
this.stack.travel(this.anim.getMoveCount(), _local3, _local4);
}
public function setFrame(_arg1:int):void{
this.currentFrame = _arg1;
this.image.setFrame(_arg1);
}
public function setRotationOffset(_arg1:int):void{
this.image.setRotationOffset(_arg1);
}
public function changeAnimation(_arg1:Animation):void{
var _local2:Animation;
if (this.anim != _arg1){
_local2 = this.anim;
this.anim = _arg1;
if (!_local2.shouldOffset()){
this.setOffset();
};
this.currentFrame = 0;
if (this.anim.shouldRotate()){
this.stack.allowRotation();
} else {
this.stack.forbidRotation();
};
this.resetWait();
this.image.changeLinkage(this.anim.getLinkage(this.type));
};
}
public function travelCurve(_arg1:Point, _arg2:Point, _arg3:Point):Boolean{
var _local4:Point;
var _local5:Point;
var _local6:Point;
var _local7:Boolean;
var _local8:Point;
_local4 = _arg1.plus(this.offset);
_local5 = _arg2.plus(this.offset);
_local6 = _arg3;
if (_local6 != null){
_local6.plusEquals(this.offset);
};
_local7 = true;
_local8 = this.averagePos(_local4, _local5);
if (_local6 == null){
this.stack.travel(Math.floor((this.anim.getMoveCount() / 2)), _local5);
} else {
if (Point.isEqual(this.stack.getPixel(), _local8)){
this.stack.travel(this.anim.getMoveCount(), this.averagePos(_local5, _local6), _local5);
} else {
if (Point.isEqual(this.stack.getPixel(), _local4)){
this.stack.travel(Math.floor((this.anim.getMoveCount() / 2)), _local8, _local4);
_local7 = false;
} else {
this.stack.travel(this.anim.getMoveCount(), _local8, _local4);
_local7 = false;
};
};
};
return (_local7);
}
protected function averagePos(_arg1:Point, _arg2:Point):Point{
return (new Point(Math.floor(((_arg1.x + _arg2.x) / 2)), Math.floor(((_arg1.y + _arg2.y) / 2))));
}
public function getRotation():int{
return (this.image.getRotation());
}
public function show():void{
this.stack.show();
}
public static function getSurvivorLinkage(_arg1:Resource, _arg2:int):String{
return (Animation.carry(_arg1).getLinkage(_arg2));
}
public static function load(_arg1):Sprite{
var _local2:Sprite;
_local2 = new Sprite(null, 0, _arg1.type, Animation.animations[_arg1.animNumber]);
_local2.stack = ImageStack.load(_arg1.stack);
_local2.image = VirtualImage.load(_arg1.image);
_local2.stack.addImage(_local2.image);
_local2.offset = Point.load(_arg1.offset);
_local2.currentFrame = _arg1.currentFrame;
_local2.maxWait = _arg1.maxWait;
_local2.toWait = _arg1.toWait;
_local2.toMove = _arg1.toMove;
return (_local2);
}
public static function saveS(_arg1:Sprite){
return (_arg1.save());
}
}
}//package ui
Section 210
//Text (ui.Text)
package ui {
public class Text {
public static var hoverBarricadeNoBoardsTip:String = (((((("<p>" + "<span class=\"title\">") + "Barricade is Vulnerable ") + "</span>\n") + "There are no boards left in this barricade. The next hit will ") + "destroy it unless it is resupplied first. ") + "</p>");
public static var upgradeDepotTip:String = (((((("<p>" + "<span class=\"title\">") + "<span class=\"hotkey\">U</span>pgrade (30 Boards)") + "</span>\n") + "Increase the speed of this depot. The survivors at upgraded depots move 50% faster ") + "than normal survivors. ") + "</p>");
public static var boardsLeftTip:String = ((("<p>" + "<span class=\"title\">Survivors Left</span>\n") + "How many boards will be recovered before the tower is closed. ") + "</p>");
public static var sniperSurvivorsIncreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Increase Survivor Quota ") + "</span>\n") + "More survivors will make this sniper tower more accurate. ") + "</p>");
public static var upgradeInProgressTip:String = ((((("<p>" + "<span class=\"title\">") + "Upgrade In Progress ") + "</span>\n") + "The materials necessary to upgrade this structure are on the way. ") + "</p> ");
public static var mainIntroText:String = ((((((((((((((((((((((("No one knows how it happened. Soon, there'll be no one left to " + "care. But the simple truth is that overnight a globe full of civilized ") + "people festered, and changed, and became something less than ") + "civilized. Less than human. And if you weren't the smartest, or the ") + "fastest, or the best-armed on your block, well... you're one of them ") + "now.\n\n") + "Auriga Squad was the best, and you were its leader. Your final ") + "orders before static filled the airwaves for good were ") + "simple. Parachute onto the island. Secure the city. Blow the ") + "bridges. And set up a secure command post surrounded by water, a safe ") + "haven from the roving, hungry packs.\n\n") + "But it didn't work out that way. There were so many of them, ") + "lurching through the streets, feeding in dark alleyways. Sure, it only ") + "took one shot to drop them, but it only took one bite to drop you. And ") + "those bites went through flak suits, through Kevlar, through ") + "bone...\n\n") + "Now everyone is dead. Except you and the handful of civilians ") + "you've rounded up, scared, defiant, looking for a leader. The ") + "explosives sit useless where the airdrop left them, ready to drop the ") + "bridges-- if only someone could reach them.\n\n") + "What the hell. Maybe there's still a chance. There'll be time to ") + "mourn later, but for now, you'd better get these people moving. ") + "Something tells you this quiet won't last.\n\n") + "The clock is ticking. ");
public static var buildingHouseText:String = "House ";
public static var spendFoodTip:String = ((((((("<p>" + "<span class=\"title\">") + "Begin spending <span class=\"hotkey\">F</span>ood") + "</span>\n") + "This depot is currently sending out slower survivors to conserve ") + "food. You can click here to begin spending food to double the speed ") + "of survivors. ") + "</p>");
public static var hoverFeatureTip:String = (((((("<p>" + "<span class=\"title\">") + "Special Feature ") + "</span>\n") + "There is a special feature here. You can build a workshop here to ") + "begin activate it. ") + "</p>");
public static var tutorialStyleSheet:String = ((((((((((((("p { " + "font-size: 12; ") + "color: #ffffff ") + "} ") + ".title { ") + "font-size: 14; ") + "font-weight: bold; ") + "color: #ffff00 ") + "} ") + "a { ") + "font-size: 12; ") + "text-decoration: underline; ") + "color: #ffaaaa ") + "} ");
public static var sniperSurvivorsDecreaseTip:String = (((((("<p>" + "<span class=\"title\">") + "Decrease Survivor Quota ") + "</span>\n") + "Fewer survivors will make this sniper less accurate. This tower ") + "needs at least one survivor to shoot zombies. ") + "</p>");
public static var jumpToDepotTip:String = ((((("<p>" + "<span class=\"title\">") + "<span class=\"hotkey\">J</span>ump to Depot") + "</span>\n") + "Select the nearest depot and center it in the window. ") + "</p>");
public static var buildingMallText:String = "Mall ";
public static var buildingPoliceStationText:String = "Police Station (Ammo) ";
public static var showRangeTip:String = (((((("<p>" + "<span class=\"title\">") + "Show Range <span class=\"hotkey\">V</span>iew") + "</span>\n") + "Show global range view. The range of every sniper tower will be ") + "shown with a white overlay. ") + "</p>");
public static var pauseText:String = "Paused ";
public static var backgroundBuildDynamiteTip:String = (((((((("<p>" + "<span class=\"title\">") + "Dynamite Here ") + "</span>\n") + "There is some dynamite here which blocks you from building a ") + "structure. You can build a workshop on the dynamite to place the charges ") + "and prevent more zombies from getting onto the island. You may press ") + "escape to cancel. ") + "</p>");
public static var editApartment:String = "Apartment Building ";
public static var salvageProspectsHigh:String = "High ";
public static var noBoardsWarning:String = "No Boards ";
public static var editChurch:String = "Church ";
public static var buildingHardwareStoreText:String = "Hardware Store (Boards) ";
public static var towerWarning:String = "Structure Already There ";
public static var unpauseTip:String = ((((("<p>" + "<span class=\"title\">") + "Resume Game <span class=\"hotkey\">[Space]</span>") + "</span>\n") + "Click to resume the game. ") + "</p>");
public static var ammoLeftTip:String = ((("<p>" + "<span class=\"title\">Ammo Left</span>\n") + "How much ammo will be recovered before the tower is closed. ") + "</p>");
public static var survivorsQuotaTip:String = (((("<p>" + "<span class=\"title\">Survivor Quota</span>\n") + "How many survivors should stay here. Survivors transport resources, ") + "staff buildings, and increase accuracy at sniper towers. ") + "</p>");
public static var noAmmoWarning:String = "No Ammo ";
public static var upgradeNoResourceTip:String = (((((("<p>" + "<span class=\"title\">") + "Not Enough Boards to Upgrade ") + "</span>\n") + "The suppliers to this structure do not have enough boards, or survivors ") + "to transport those boards. ") + "</p>");
public static var moveWindowWest:String = "<p>Move window West.</p>";
public static var rateMedium:String = "Medium ";
public static var boardsQuotaTip:String = (((("<p>" + "<span class=\"title\">Board Quota</span>\n") + "How many boards you want to keep on hand here. You can use boards ") + "to build, upgrade, and repair structures. ") + "</p>");
public static var countDownTip:String = (((("<p>" + "<span class=\"title\">Countdown Timer</span>\n") + "The timer counts down till the next zombie horde invasion. You can ") + "also click here to pause the game. ") + "</p>");
public static var scrollBarLabel:String = "Scroll Speed ";
public static var editPediaRootSecret:String = "map_editor ";
public static var clickSniper:String = "<p>Click on your sniper tower to select it.</p>";
public static var survivorsInside:String = ("<span class=\"survivor\">Survivors Inside</span>" + "</p>");
public static var buildingDepotTip:String = (((((((("<p>" + "<span class=\"title\">") + "Place Depot ") + "</span>\n") + "Move the mouse to on an open square and click to build a depot ") + "there. It will take some time for a survivor to bring the ") + "construction materials to your planned building location. You may ") + "press escape to cancel. ") + "</p>");
public static var editDeepWater:String = "Deep Water ";
public static var clickNext:String = "<p>Click Next to continue</p>";
public static var workshopSurvivorsIncreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Increase Survivor Quota ") + "</span>\n") + "More survivors will make this workshop faster. ") + "</p>");
public static var boardsLabel:String = "Boards ";
public static var placeFeatureWarning:String = "Blocked by Dynamite ";
public static var salvageProspectsLow:String = "Low ";
public static var veteranText:String = "Veteran ";
public static var sizeConstraint:String = "0-9 ";
public static var ammoLabel:String = "Ammo ";
public static var workshopSurvivorsDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Decrease Survivor Quota ") + "</span>\n") + "Fewer survivors will make this workshop slower. ") + "</p>");
public static var placeZombieWarning:String = "Blocked by Zombie ";
public static var depotSurvivorsIncreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Increase Survivor Quota ") + "</span>\n") + "More survivors will be here ready to ferry supplies to nearby structures. ") + "</p>");
public static var pediaTip:String = ((("<p>" + "<span class=\"title\">Zombipedia</span>") + "Click here for more details on how the game works. ") + "</p>");
public static var soundBarLabel:String = "Sound Volume ";
public static var buildingSniperTip:String = (((((((("<p>" + "<span class=\"title\">") + "Place Sniper ") + "</span>\n") + "Move the mouse to on an open square and click to build a sniper tower ") + "there. It will take some time for a survivor to bring the ") + "construction materials to your planned building location. You may ") + "press escape to cancel. ") + "</p>");
public static var hoverSniperNoAmmoTip:String = (((((("<p>" + "<span class=\"title\">") + "Sniper Tower Cannot Fire ") + "</span>\n") + "This sniper tower has run out of ammo. It cannot shoot until it is ") + "resupplied. ") + "</p>");
public static var noTowerWarning:String = "No Structure There ";
public static var noUpgradeResourcesWarning:String = "No Resources ";
public static var depotSurvivorsDecreaseTip:String = (((((("<p>" + "<span class=\"title\">") + "Decrease Survivor Quota ") + "</span>\n") + "Fewer survivors will be on hand to transfer supplies to nearby ") + "structures. ") + "</p>");
public static var eastLabel:String = "East ";
public static var workshopNoSurvivorTip:String = (((((("<p>" + "<span class=\"title\">") + "Cannot Construct Workshop ") + "</span>\n") + "You cannot construct a workshop from this depot. There are no ") + "survivors here to build it. ") + "</p>");
public static var towerNoRemoveSupplyTip:String = ((((((("<p>" + "<span class=\"title\">") + "No Supply Line ") + "</span>\n") + "You cannot remove a supply line to this structure because there is no ") + "supply line from the source depot to here. You may press escape to ") + "cancel. ") + "</p>");
public static var editCorner:String = "Street Corner ";
public static var zombieThreatModerate:String = "Moderate ";
public static var placeBlockedWarning:String = "Blocked ";
public static var northLabel:String = "North ";
public static var removeSupplyTip:String = ((((((("<p>" + "<span class=\"title\">") + "<span class=\"hotkey\">R</span>emove Supply Line") + "</span>\n") + "Remove the supply line from this depot to another structure. After ") + "removing the supply line, no new survivors will be sent to carry ") + "resources between the two structures. ") + "</p>");
public static var rateEasy:String = "Easy ";
public static var editPediaRoot:String = StringTools.trim(editPediaRootSecret);
public static var backgroundBuildBlockedTip:String = (((((("<p>" + "<span class=\"title\">") + "Location Blocked ") + "</span>\n") + "This location is blocked by an obstruction. No structure may be built ") + "here. You may press escape to cancel. ") + "</p>");
public static var backgroundDepotTip:String = (((((("<p>" + "<span class=\"title\">") + "Click To Build Depot ") + "</span>\n") + "If you click here, a survivor will be dispatched to this location ") + "with some boards to build a depot. You may press escape to cancel. ") + "</p>");
public static var buildingParkingLotText:String = "Parking Lot ";
public static var editPark:String = "Park ";
public static var survivorsTip:String = ((((("<p>" + "<span class=\"title\">Survivors</span>\n") + "How many survivors are here right now. Once liberated, survivors can ") + "be put to work ferrying supplies, scavenging buildings, making ") + "fortifications, manning sniper towers, and setting charges. ") + "</p>");
public static var southLabel:String = "South ";
public static var buildingApartmentText:String = "Apartment Complex ";
public static var workshopBuildingTip:String = (((((("<p>" + "<span class=\"title\">") + "Move to Entrance ") + "</span>\n") + "Move the mouse to the entrance of this building and click if you ") + "want to salvage the resources inside. You may press escape to cancel. ") + "</p>");
public static var clickBarricade:String = "<p>Click on your barricade to select it.</p>";
public static var buildingChurchText:String = "Church (Survivors) ";
public static var waitRateMap:String = "Submitting Rating... ";
public static var hoverBarricadeTip:String = ((((("<p>" + "<span class=\"title\">") + "Barricade ") + "</span>\n") + "Barricades use boards to slow down zombies. Click to select it. ") + "</p>");
public static var boardsNoDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Cannot Decrease Board Quota ") + "</span>\n") + "The board quota is now zero. You cannot further decrease the quota. ") + "</p>");
public static var backgroundBuildShadowTip:String = (((((("<p>" + "<span class=\"title\">") + "Structure Already Planned ") + "</span>\n") + "You cannot build here because a structure is already being constructed ") + "here. You may press escape to cancel. ") + "</p>");
public static var foodLabel:String = "Food ";
public static var easter:Array = ["Some city names cause special maps which change the rules a bit. ", "Map names must contain a certain name to be special. For instance, if 'New York' was a special map, then 'New York City' would also be the same kind of special map. ", "The author's home town map is a perfect grid, just like in the real world. ", "In the city from \"28 Days Later\", the zombies run. ", "There is a mall city inspired by \"Dawn of the Dead\". ", "A medical reference from \"Night of the Living Dead\" creates an extra challenge. ", "Umbrella Corporation's home town is cut off from the mainland but has lots of special buildings. ", "If you visit the city from \"Land of the Dead\", survive as long as you can because the zombies can cross the water... ", "In the city where Thriller was shot, the zombies can dance. "];
public static var depotNoSurvivorTip:String = (((((("<p>" + "<span class=\"title\">") + "Cannot Construct Depot ") + "</span>\n") + "You cannot construct a depot from this structure. There are no survivors ") + "here to build it. ") + "</p>");
public static var towerBuildTip:String = (((((("<p>" + "<span class=\"title\">") + "Structure Already Here ") + "</span>\n") + "You cannot build here because there is already a structure here. You may ") + "press escape to cancel. ") + "</p>");
public static var hideRangeTip:String = ((((("<p>" + "<span class=\"title\">") + "Hide Range <span class=\"hotkey\">V</span>iew") + "</span>\n") + "Hide the global range view. ") + "</p>");
public static var levels:Array = [(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("<map name=\"Basic Training\" difficulty=\"0\" sizeX=\"25\" sizeY=\"19\" startX=\"12\" startY=\"9\" >" + "<terrain>") + "aa1ea42d3c903d1fa27aa713a477f59c.eNoVikESgDAIxFwsC ") + "y2tdPTHvly85JDEVBOmK8GwBs5poPqP8ArGQrk2nWgrFNAewtu ") + "g9lSM3UVa2gle1JrZ8W6XY4wE8AF+HwLw ") + "</terrain>") + "<briefing>") + "No one knows how it happened. Soon, there'll be no one left to ") + "care. But the simple truth is that overnight a globe full of civilized ") + "people festered, and changed, and became something less than ") + "civilized. Less than human. And if you weren't the smartest, or the ") + "fastest, or the best-armed on your block, well... you're one of them ") + "now.\n\n") + "*Begin Transmission*\n\n") + "The hordes of undead are growing. We need to get you up to speed as fast as possible. Lets start with the basics.\n\n") + "*End Transmission* ") + "</briefing>") + "<script>") + "<state name=\"start\" posX=\"16\" posY=\"8\">") + "<text>Your depot is the backbone of your supply network</text>") + "<next/>") + "<edge type=\"click-next\" next=\"1\"/>") + "<edge type=\"start-build-sniper\" next=\"4\"/>") + "<edge type=\"build-sniper\" next=\"5\"/>") + "</state>") + "<state name=\"1\">") + "<text>Depots store your resources and send them to other towers.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"2\"/>") + "<edge type=\"start-build-sniper\" next=\"4\"/>") + "<edge type=\"build-sniper\" next=\"5\"/>") + "</state>") + "<state name=\"2\">") + "<text>Everything must be built within 7 tiles of a depot.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"3\"/>") + "<edge type=\"start-build-sniper\" next=\"4\"/>") + "<edge type=\"build-sniper\" next=\"5\"/>") + "</state>") + "<state name=\"3\" button=\"build-sniper\">") + "<text>We need a sniper tower to protect us from zombies. Click the build sniper button on the right.</text>") + "<edge type=\"start-build-sniper\" next=\"4\"/>") + "<edge type=\"build-sniper\" next=\"5\"/>") + "</state>") + "<state name=\"4\" posX=\"12\" posY=\"8\">") + "<text>Now click to place a sniper tower at the indicated location. You can hold down shift to easily place multiple towers.</text>") + "<edge type=\"build-sniper\" next=\"5\"/>") + "<edge type=\"cancel-build\" next=\"3\"/>") + "</state>") + "<state name=\"5\" posX=\"12\" posY=\"10\">") + "<text>Build one more sniper tower here to support the other one. The sniper tower's range is shown in light blue.</text>") + "<edge type=\"build-sniper\" next=\"6\"/>") + "</state>") + "<state name=\"6\" button=\"build-barricade\">") + "<text>If a zombie gets too close to a sniper, it will be toast. We need barricades to hold off the hordes. Click to build a barricade.</text>") + "<edge type=\"start-build-barricade\" next=\"7\"/>") + "</state>") + "<state name=\"7\" posX=\"10\" posY=\"10\">") + "<text>Place the new barricade a bit in front of the snipers. Make sure at least one side is clear so the barricade can be properly supplied.</text>") + "<edge type=\"build-barricade\" next=\"8\"/>") + "<edge type=\"cancel-build\" next=\"6\"/>") + "</state>") + "<state name=\"8\" posX=\"10\" posY=\"9\">") + "<text>Place another barricade to seal off the road. Otherwise some zombies might bypass your defenses.</text>") + "<edge type=\"build-barricade\" next=\"9\"/>") + "</state>") + "<state name=\"9\">") + "<text>Zombies are coming! Get ready!</text>") + "<action type=\"countdown\" arg=\"10\"/>") + "<edge type=\"countdown-complete\" next=\"10\"/>") + "</state>") + "<state name=\"10\">") + "<text>Hold off this wave of zombies, and victory will be yours!</text>") + "<action type=\"horde\" arg=\"5 5 9\"/>") + "<action type=\"horde\" arg=\"5 5 10\"/>") + "<edge type=\"zombie-clear\" next=\"11\"/>") + "</state>") + "<state name=\"11\">") + "<action type=\"win\">") + "<arg>") + "*Begin Transmission*\n\n") + "Congratulations! This was your first meeting with our awful enemy, but you still have much to learn.\n\n") + "*End Transmission*</arg>") + "</action>") + "</state>") + "</script>") + "</map>"), ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("<map name=\"Boom\" difficulty=\"1\" sizeX=\"20\" sizeY=\"31\" startX=\"10\" startY=\"14\" >" + "<terrain>") + "1151f1ee463c72420c6686469eb083eb.eNoVzksSwjAMA9DId ") + "izn21LacgPuCScnbN5CMxqJOVfhJHbmhZMOHxXhTlDKLv6uIVp ") + "LqnUbzhPwdgksGoq1CbK/VJkXEbdZCusN7v0B8x5QDv45kFuZI ") + "lqa6jAGsnNAjTvEeUDoz1XxDUafaybOlfFa9BtrcN34tIaUvqV ") + "LSkkA/AApEQYw ") + "</terrain>") + "<briefing>") + "*Begin Transmission*\n\n") + "You've done well so far, soldier. But out in the field you will often have to scavenge what you can from the local area. You need to learn about workshops and resources.\n\n") + "*End Transmission* ") + "</briefing>") + "<script>") + "<state name=\"start\">") + "<text>Most maps are bigger than your flash window. Scroll by dragging the map or using the arrow keys.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"build-workshop\" next=\"5\" offsetX=\"10\" offsetY = \"9\" ") + "limitX=\"11\" limitY=\"10\"/>") + "<edge type=\"click-next\" next=\"1\"/>") + "</state>") + "<state name=\"1\" button=\"total-resources\">") + "<text>Your unallocated resources are shown at the top. Oh no! Resource levels are extremely low!</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"build-workshop\" next=\"5\" offsetX=\"10\" offsetY = \"9\" ") + "limitX=\"11\" limitY=\"10\"/>") + "<edge type=\"click-next\" next=\"2\"/>") + "</state>") + "<state name=\"2\" posX=\"10\" posY=\"9\">") + "<text>This house has a green arrow which means it is clear of zombies and there are resources inside.</text>") + "<action type=\"move-map\" arg=\"10 9\"/>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"build-workshop\" next=\"5\" offsetX=\"10\" offsetY = \"9\" ") + "limitX=\"11\" limitY=\"10\"/>") + "<edge type=\"click-next\" next=\"3\"/>") + "</state>") + "<state name=\"3\" button=\"build-workshop\">") + "<text>Click on the build workshop button so we can scavenge the valuable resources.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"build-workshop\" next=\"5\" offsetX=\"10\" offsetY = \"9\" ") + "limitX=\"11\" limitY=\"10\"/>") + "<edge type=\"start-build-workshop\" next=\"4\"/>") + "</state>") + "<state name=\"4\" posX=\"10\" posY=\"9\">") + "<text>Click on the entrance to the house to build a workshop there. This workshop will collect the resources in a building over time and return them to the depot.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"build-workshop\" next=\"5\" offsetX=\"10\" offsetY = \"9\" ") + "limitX=\"11\" limitY=\"10\"/>") + "<edge type=\"cancel-build\" next=\"3\"/>") + "</state>") + "<state name=\"5\" posX=\"10\" posY=\"9\">") + "<text>There are a lot of resources there and it will take a long time for one survivor to collect them all. Lets speed things up. Click on the new workshop.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"select-workshop\" next=\"6\"/>") + "</state>") + "<state name=\"6\" button=\"workshop-increase\">") + "<text>Click the plus button to increase the worker quota. New workers will start working here when available and speed up the collection.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"select-nothing\" next=\"5\"/>") + "<edge type=\"click-add-survivors\" next=\"7\" offsetX=\"10\" offsetY=\"9\" limitX=\"11\" limitY=\"10\"/>") + "</state>") + "<state name=\"7\">") + "<text>You can see how many resources are left to extract on the right. Increase the survivor quota to 10, then click next.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"click-next\" next=\"8\"/>") + "</state>") + "<state name=\"8\">") + "<text>There are three kinds of resources: Ammo, Boards, and Survivors.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"click-next\" next=\"9\"/>") + "</state>") + "<state name=\"9\">") + "<text>Ammo is used by snipers to shoot zombies.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"click-next\" next=\"10\"/>") + "</state>") + "<state name=\"10\">") + "<text>Boards are used to build sniper towers and barricades.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"click-next\" next=\"11\"/>") + "</state>") + "<state name=\"11\">") + "<text>Survivors carry resources around and staff buildings.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"click-next\" next=\"12\"/>") + "</state>") + "<state name=\"12\" button=\"total-resources\">") + "<text>When you increase quotas and spend resources, these numbers go down. If they are negative, that means you've allocated more resources than you have.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"click-next\" next=\"13\"/>") + "</state>") + "<state name=\"13\">") + "<text>There are no zombies on this island, and we need to keep it that way by blowing up the bridge which gives them access.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"click-next\" next=\"14\"/>") + "</state>") + "<state name=\"14\" button=\"build-depot\">") + "<text>We need to expand our supply lines to cover the bridge. Click the build depot button.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "<edge type=\"start-build-depot\" next=\"15\"/>") + "</state>") + "<state name=\"15\" posX=\"9\" posY=\"19\">") + "<action type=\"move-map\" arg=\"9 19\"/>") + "<text>Click to place the depot as far south as you can.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "<edge type=\"cancel-build\" next=\"14\"/>") + "<edge type=\"build-depot\" next=\"16\" offsetX=\"5\" offsetY=\"14\" ") + "limitX=\"15\" limitY=\"26\"/>") + "</state>") + "<state name=\"16\" posX=\"9\" posY=\"21\">") + "<text>Now build a workshop on the dynamite location to set charges and blow up the bridge.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"build-workshop\" next=\"17\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "</state>") + "<state name=\"17\">") + "<text>Click on the workshop to see the progress it is making.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"select-workshop\" next=\"18\" offsetX=\"9\" offsetY=\"21\" ") + "limitX=\"10\" limitY=\"22\"/>") + "</state>") + "<state name=\"18\">") + "<text>Many hands make light work. Increase the number of survivors here as much as you can to speed the work, then click next.</text>") + "<next/>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "<edge type=\"click-next\" next=\"19\"/>") + "</state>") + "<state name=\"19\">") + "<text>Clearing an island of zombies and blowing the bridges is how you win. Sit back and wait for victory.</text>") + "<edge type=\"bridge-clear\" next=\"win\"/>") + "</state>") + "<state name=\"win\">") + "<action type=\"win\">") + "<arg>") + "*Begin Transmission*\n\n") + "Well done on that demolition work, soldier. Destroying bridges will be crucial to preventing new zombies from entering an area. The last thing you need to learn is how to manage your snipers effectively in the field.\n\n") + "*End Transmission* ") + "</arg>") + "</action>") + "</state>") + "</script>") + "</map>"), ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("<map name=\"Bang\" difficulty=\"0\" sizeX=\"25\" sizeY=\"30\" startX=\"12\" startY=\"9\" >" + "<terrain>") + "8d3979175577820f4d5fe645fca194c1.eNody9ESgyAMRFEX2 ") + "MSAELTV/q72ywt9OXNndlb58ZBypYFZItogFEaWkmMUqwjCmiB ") + "eEaWPUrZoerRgSjKpDyQTFBohbZbPskuRvIOpH/Prg32f6xmg/ ") + "Zq0we4IyeZqB5KsDdT1hXRvhtsKnty5LE/5W/+26Xc7w7L4G8A ") + "PlKcJBA ") + "</terrain>") + "<briefing>") + "*Begin Transmission*\n\n") + "We don't have much time left. Outbreaks have been reported on every major continent. I'll show you how to use your snipers well, otherwise you will be slaughtered out there.\n\n") + "*End Transmission* ") + "</briefing>") + "<script>") + "<state name=\"start\" posX=\"12\" posY=\"9\">") + "<text>There are zombies to the north, and we don't have any ammo!</text>") + "<next/>") + "<edge type=\"click-next\" next=\"1\"/>") + "</state>") + "<state name=\"1\">") + "<text>Luckily, they haven't heard us yet. They will stay where they are until they hear a noise.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"2\"/>") + "</state>") + "<state name=\"2\" posX=\"11\" posY=\"16\">") + "<text>Before we do anything else, we need to restock on ammo. There is some rubble left on the street. Build a workshop to search for resources.</text>") + "<action type=\"move-map\" arg=\"11 16\" />") + "<edge type=\"build-workshop\" next=\"3\"/>") + "</state>") + "<state name=\"3\">") + "<text>In addition to finding resources, the rubble must be cleared away before you can build other towers there.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"4\"/>") + "</state>") + "<state name=\"4\">") + "<text>Build workshops on the other rubble tiles and add survivors until you have a good stock of ammo. Then click next.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"5\"/>") + "</state>") + "<state name=\"5\" posX=\"12\" posY=\"16\">") + "<text>Now build a sniper to take out these three zombies. Don't worry if the zombies aren't in range yet, we'll take care of that.</text>") + "<edge type=\"build-sniper\" next=\"6\"/>") + "</state>") + "<state name=\"6\">") + "<text>If we make some noise, we can pull the zombies within range. And shooting off a round should do that. Select your sniper.</text>") + "<edge type=\"select-sniper\" next=\"7\"/>") + "</state>") + "<state name=\"7\" button=\"sniper-shoot\">") + "<text>Now tell your sniper to shoot into the air. That will attract all nearby zombies.</text>") + "<edge type=\"select-nothing\" next=\"6\"/>") + "<edge type=\"click-shoot\" next=\"8\"/>") + "</state>") + "<state name=\"8\">") + "<text>Your sniper should make short work of these zombies. You can often draw zombies out of an area to clear it in a controlled manner.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"9\"/>") + "</state>") + "<state name=\"9\" button=\"sniper-upgrade\">") + "<text>Your snipers are versatile and you can improve them in several ways. First, you can upgrade your sniper to increase its range.</text>") + "<next/>") + "<edge type=\"click-upgrade\" next=\"10\"/>") + "<edge type=\"click-next\" next=\"10\"/>") + "</state>") + "<state name=\"10\" button=\"sniper-increase-survivors\">") + "<text>Second, you can add extra survivors as spotters. Each additional survivor increases accuracy.</text>") + "<next/>") + "<edge type=\"click-add-survivors\" next=\"11\"/>") + "<edge type=\"click-next\" next=\"11\"/>") + "</state>") + "<state name=\"11\" button=\"sniper-increase-ammo\">") + "<text>Third, you can increase the amount of ammo. More ammo means that the sniper tower can shoot longer between resupplies</text>") + "<next/>") + "<edge type=\"click-add-ammo\" next=\"12\"/>") + "<edge type=\"click-next\" next=\"12\"/>") + "</state>") + "<state name=\"12\">") + "<text>Finally, be sure to use barricades to protect your vulnerable snipers. A sniper is much more accurate when attacking zombies delayed by a barricade.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"13\"/>") + "</state>") + "<state name=\"13\">") + "<text>Set up a defensive perimeter here, upgrading your towers as necessary. Click next when you are ready for the final zombie attack.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"14\"/>") + "</state>") + "<state name=\"14\">") + "<text>Make sure you have at least two sniper towers and plenty of ammo. Then click next.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"15\"/>") + "</state>") + "<state name=\"15\">") + "<text>Defeat the zombie swarms!</text>") + "<action type=\"horde\" arg=\"4 12 5\"/>") + "<action type=\"horde\" arg=\"3 5 11\"/>") + "<action type=\"horde\" arg=\"4 19 11\"/>") + "<edge type=\"zombie-clear\" next=\"16\"/>") + "</state>") + "<state name=\"16\">") + "<action type=\"win\">") + "<arg>") + "*Begin Transmission*\n\n") + "For the next part of the course...\n\n") + "One minute...\n\n") + "I've just recieved reports that a zombie horde has overrun the final training facility. This time will be for real. Get ready.\n\n") + "*End Transmission* ") + "</arg>") + "</action>") + "</state>") + "</script>") + "</map>"), (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("<map name=\"Graduation\" difficulty=\"1\" sizeX=\"40\" sizeY=\"40\" startX=\"12\" startY=\"27\" >" + "<terrain>") + "84dc19f602cc8396e8735db89eb5a222.eNodkoGyoyAMRUlCC ") + "IJoa9Gqrdr33mx3P7OzX77XdYY7hxC4MWCqO5t+tWxfxqvpyhb ") + "MVgrtSym8Ik3BCsVXbIKk7LzTV9+oDFmc6msE3rOqhtcKfOaEj ") + "60h4e6UCqEYA1FumfjA9B0Lc9M5Igrv2IMvjtiBr8xxcCwMviF ") + "+c+Il/FqKyd4751R+5mrymJBtv/uidu26WmvUWki0K2Q6FpF3h ") + "kPbETGD4dBeHMzBcMinA9k7w6Gtjp2TdzPBbUIOxXcGt3cnxJE ") + "TfpziiHiGcIEB9VWZ68DMM0xlu4gI20RMcVbkTKyy3lXku59E+ ") + "9mhZd8D8DY5uP2ZZvHzQgW+uVSGx4O5UP8Q9tNgTNNdKA8PD3q ") + "iimUm75vFa7we3rsYRtyJjV8d0iuLbjdUNmzM/roR+3pK2bz4c ") + "TPx6xrEHzcy/9yYwnMnDvtJ285k2+HZDlBoDk/BFlBcSX3aBbG ") + "d6HwJZvHlyeJBlOoFPaXpopyOFhdISxsoz8BcITS2QumIaGSu8 ") + "ZzHRLng6qlvlXJ3xvqolAwkybCn5HTujEgKweCmkLQ8cXpa7lj ") + "gcSbJI1qcKxqWH6ghpxHroaJo7RgCSjb+P3PGmT4i/bO29NkxS ") + "kefy0CfEWO40d/mwa5PCa4fNO0fd7UhUg ") + "</terrain>") + "<briefing>") + "*Begin Transmission*\n\n") + "The training ground has been overrun. You must clear the island of zombies and blow the bridge to prevent others from coming.\n\n") + "*End Transmission* ") + "</briefing>") + "<script>") + "<state name=\"start\">") + "<text>There are zombies in many of the buildings. Yellow, orange, and red triangles show increasing threat levels.</text>") + "<next/>") + "<action type=\"add-state\" arg=\"none\" />") + "<edge type=\"click-next\" next=\"1\" />") + "</state>") + "<state name=\"1\">") + "<text>If the zombies hear a noise, they will come out and attack. Be especially careful when dealing with buildings marked in red.</text>") + "<next/>") + "<edge type=\"click-next\" next=\"2\" />") + "</state>") + "<state name=\"2\" button=\"timer\">") + "<text>The timer counts down till the next zombie wave. You can also click it to pause the game. You can still issue orders while the game is paused.</text>") + "<next/>") + "<action type=\"add-state\" arg=\"countdown\" />") + "<edge type=\"click-next\" next=\"3\" />") + "</state>") + "<state name=\"3\">") + "<text>Clear the island of zombies and blow up the bridge. Good luck!</text>") + "<next/>") + "<edge type=\"click-next\" />") + "</state>") + "<state name=\"none\">") + "<edge type=\"bridge-clear\" next=\"bridge\"/>") + "<edge type=\"zombie-clear\" next=\"zombie\" />") + "</state>") + "<state name=\"bridge\">") + "<edge type=\"zombie-clear\" next=\"bridge-zombie\" />") + "</state>") + "<state name=\"zombie\">") + "<edge type=\"bridge-clear\" next=\"bridge-zombie\" />") + "<edge type=\"zombie-horde-begin\" next=\"none\" />") + "</state>") + "<state name=\"bridge-zombie\">") + "<action type=\"win\">") + "<arg>") + "*Begin Transmission*\n\n") + "The training island is now secured. Now it is time for you to move into the field.\n\n") + "*End Transmission* ") + "</arg>") + "</action>") + "</state>") + "<state name=\"countdown\">") + "<action type=\"countdown\" arg=\"150\" />") + "<edge type=\"countdown-complete\" next=\"horde\" />") + "</state>") + "<state name=\"horde\">") + "<action type=\"horde\" />") + "<edge type=\"zombie-horde-end\" next=\"countdown\" />") + "</state>") + "</script>") + "</map>"), (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("<map name=\"Bridge\" difficulty=\"1\" sizeX=\"60\" sizeY=\"60\" startX=\"26\" startY=\"49\" >" + "<briefing>") + "*Begin Transmission*\n\n") + "Zombies have infiltrated the heart of the city. Your goal is to create a checkpoint on the south bridge.\n\n") + "Enter the area, clear out undead you find there, and make sure nobody enters or leaves the city. We need to quarantine the whole island.\n\n") + "*End Transmission* ") + "</briefing>") + "<terrain>") + "40b96b8ff8119e279e1fb5ff8c004a08.eNpFkguXojoMgJukD ") + "ygIXBEVGUB8jasr4mPm94HbH75hz7kOpwlfEpomKfreKaPXl5T ") + "MYydD7bUThJk/JT0LJWLOSi5DQB1FFk2UWKPNxJA2ijyjEt8Yp ") + "TCAyNcko1CjtKGETaQUxYb3cwYl5TZVRDO2AZs548JIAMRAkTy ") + "WbFdjSHjrtZLUGAIQsgxT1GWUgu4UWnNXyq7PnpJnO4bxwFlpp ") + "5D05qQ0nTR7yTS7qa+zC5FR+4mvvQ65zpYMRN2cMG+5l7Ilbqg ") + "F3KRPrunJ+3A7Z1w8BTDnDylV+ZjApnxKqp6CW9g3HN98j+jBr ") + "tOEpwfJpu0ktTckEk37YORvQajLA6RsvyUcdrzr8CX48ZpP5uO ") + "Tu1ZGLWxk1vEi03UFni736OuyQjDzBRo9P7Ba7MdKKunJtNZal ") + "jVqnVYa9HSvwEwP0pjphdhcSKPjnQQdV6B1/EFo4gUpzCOZ6GU ") + "EiS5jilXp+aBOHkgVeQFIy0kwP3D6+gIgl3vwZVKR1usdU30AY ") + "wOfaBIcfEn21BF56nIDlJcOwAZsEwY8AWk7MMeEW5t+aR6Opuj ") + "J41DRgw/xvhG0+QI06guxXxnsC4NDYfj6+iPT8R8lvhwSnyffZ ") + "z4Nmc8j7Gsfh5p92MeW+qmlYWpH/8JyHiv7wuq+Yt5w9JOjnxz ") + "FPgxwYGHKAs7EBP1HQH3D/uaftQvQ2RBcEgpXsqyZG37vQ3RHf ") + "v9maVmiiXApy3Ii+tVEupp5y3JgOU/AXSborhwrEnRFyjXNaFj ") + "NxnqLOQ3FfKTVEofVkumVF/wHyHG9Vj9Y/ODHG4e85D7dtBJ9W ") + "uOQ1jx+l9ViKGpC8SprEMCNILiqFu6/NQ6LtSbhZg24okGXbIS ") + "bb9DNttzgVgzZTiOXucM+/+Ryjpyk//iFLj+BW57F8HFG5DZbM ") + "ZTteHDdsnVl/5Wv5lVef467cvAKQ9yNdWQdFwzjejVvdL874ex ") + "NuPCGLrvha357f7W6obA251t+NW+vm9451f0n1Rvd/s4X9RAuY ") + "2ke8Mqf/1fyKt74p7yubn+yjlUzqvmN1erW3Fllo2pGs3iyyp9 ") + "/AZagfKk ") + "</terrain>") + "<script>") + "<state name=\"start\">") + "<action type=\"add-state\" arg=\"countdown\" />") + "<edge type=\"bridge-clear\" next=\"bridge\"/>") + "<edge type=\"zombie-clear\" next=\"zombie\" />") + "</state>") + "<state name=\"bridge\">") + "<edge type=\"zombie-clear\" next=\"bridge-zombie\" />") + "</state>") + "<state name=\"zombie\">") + "<edge type=\"bridge-clear\" next=\"bridge-zombie\" />") + "<edge type=\"zombie-horde-begin\" next=\"start\" />") + "</state>") + "<state name=\"bridge-zombie\">") + "<action type=\"win\">") + "<arg>") + "*Begin Transmission*\n\n") + "Excellent work, soldier. Other squads are reporting that their bridges are secure as well. We might just contain this.\n\n") + "*End Transmission*</arg>") + "</action>") + "</state>") + "<state name=\"countdown\">") + "<action type=\"countdown\" arg=\"150\" />") + "<edge type=\"countdown-complete\" next=\"horde\" />") + "</state>") + "<state name=\"horde\">") + "<action type=\"horde\" />") + "<edge type=\"zombie-horde-end\" next=\"countdown\" />") + "</state>") + "</script>") + "</map>"), ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("<map name=\"Survival\" difficulty=\"2\" sizeX=\"90\" sizeY=\"70\" startX=\"6\" startY=\"39\" >" + "<briefing>") + "*Begin Transmission*\n\n") + "Make your way inland, clearing the area of zombies and collecting survivors. We will contact you with...\n\n") + "*Gunshots*\n\n") + "*Moans*\n\n") + "My God! They are overrunning the command center! Fall back!\n\n") + "*End Transmission*\n\n") + "It looks like you are on your own. If you can establish a beach head here, you may be able to secure the entire island and destroy the bridges connecting it to the mainland. You could create a sanctuary here. ") + "</briefing>") + "<terrain>") + "61d9972b068f4bcbfb4fbba385ae0dc3.eNpNlg1b2swShvc7g ") + "ZCAAgomYAIhCEgQDGj9OMVaa8UWbfv+IJI3P/w867kajpd38mR ") + "2dmcyO1k15M2VoYzrJVNGwoSSCWOGXEE9L02u3hZKGG8rxdSXl ") + "WRUtixu1Vqcs5rDlVWzOKd1q8atPhTrO7zM+pIrGlnw68OPdlu ") + "SU8uSnJkfAy2Tl2MMmCx2uVGOe5zbdN6rcOsekt0P4BRPqnicY ") + "PZ60uTWBIpNYi7Kk4RjOEwMxHd5zappn3Bi8HIbIzZrx0iqrY3 ") + "1iYJPDFWZC14uzfVwaYyIpSGCUzkU3Jrr9BOrhGA6/XuHN+gam ") + "ZdfLZ3gq8Mt67UNn20bEV89rsqvPZ3BugcnE052uYaV1bDrW5Y ") + "/qBrKVEHLE8LtcMZY0PS5bAaMUuo3YG10BKXMb2GNkz4nhPSaA ") + "y6aEdfWrifFqQdJg8jjIuoKhnqPAk7leUBx6VIuRh6XYtqlQox ") + "6ksvQpVL0PTwOPMrE4BR+gy4uXVdRdjJirHwyZIyXPZc5SrQGg ") + "tF6C+/rtRiXA9fAsi7jvOULpqTbQwQPk2TdZyVZx+Ky4ZpU1Ee ") + "SidaQidCLlQoWeDXOwzA21OCSIEvFejFT1EPNrV7COPUSrSaMn ") + "9VjxVszwplhB3XsxNECr03k8Rwr1OGlejXs3EGilxSlxBCiMhR ") + "lUbvq0GiGLb+YEcZJKVpAJ3NCtF5Cr2b0Q88w+2JFkIUZLaCTp ") + "aCMmNESermEHXo94+IB6yBE9Aj9OBeE8kr0Dfr7XOdj9jbQmwv ") + "tP3ibcf4+Myglpvgzw5xrxPs0x4YSO7rGup8QjwiT3cNu3S84o ") + "/GiyqwJlLiNmRDryyqVLzMq5Do+pOJLYuOylFT8nDEhf8cY+BM ") + "zKm4T7Nz0yqEiTlD6GAOBnHBlTIkSgkvUi0lzTA0px5z2Zccwy ") + "h0iMFTpCENh/y2uhHQtFsqqlMbBx7uE5aqSdh210n3esFgkj7D ") + "O8cdgZEKXj1ELaAu6ckS0Fs4RbDUYrFoD3iXHQJaOwEXykprUq ") + "kIlDVUSSUcxcVPjh2J+WuI8coRpiolzyMSkgaTHDi2L6EiwsIG ") + "MGofoDm6HriPl6YFucxV261IGx0iOqch3OOtVdWI2bzSkUMxro ") + "lvdOk4Lq11HRm2HSdaGUbpNymXDQRXriBH5B5wF/3th4dc49a8 ") + "jIW5GknMSXEKuzvRYMIvQQyO99/4Y1vHwo/1GgwaVVxFe7i5Ck ") + "4/GdSpj/bjQlxEu4Xpgyocz9VGbJ1RfrHGRj2NGw/eulO+neiE ") + "Vvvel+iesCiFV+H2g1Iv+xIgttiODiXmDW2LrMVu8ezg8122L+ ") + "2tHiMcqR5MGT5DfDnRfBes6rA3UhPhPkN/qyBjdc2hR+RXtIb/ ") + "WqeIvDk5l8VLXHXYsmHg6Vqz/3OH8WZ8VrP8A+dhFa0v25DHF1 ") + "75kNn/Gt22LjT4knnG8yK8dtNraQx3XUOwep7K/kJa6MwihLFh ") + "LUz0b+vTqbbAhr+WPMm6lYb5VtPS3Djfeq9hX5v+G/H2g+yfYH ") + "hl8+9FicmvjWPnloGu3TYOy7xKbfi6VOjernAszjKAjQ1CUj/u ") + "IroITqXjX0JP5SUkxe9CQUhwriSTssCINWVG6qqa0JFWyUsb6d ") + "a0aJclkW6sTE+fdPb5Ncae/pDUOIfXlus7UwxXlxsNNwzDvrmS ") + "ZmLkyyM40eGoaOJZzwyR5A7SAKpGsX0ISVP/uPpd4+rlEtZNFs ") + "muL6MMBA9lGS65l+gop858WyWWFZH6lmBxWeBpWECEbF8bsdi8 ") + "3lWKNHxW9hmGT3cLm6cJGxGxj70NAymxbGPK5Q9Klg3LkK4fkN ") + "+DWIdmrUzj8cFj2Uz+Kj8dJleQxuAAJuAZ3VbJr12jarmEf85s ") + "azT7X/uaW3xzAAdQPSTY4LMydOobAHdiAywbN4ybN5022WzRZu ") + "mhSPbkJjybJ7pvFxA2c6keYAF5A9ZjkERiCMzAC5yAGt+ARfD8 ") + "m6XFL1++8VRQ1brE0bukoFy2SLlq6BjctxGvRfI37E3gGG4wGb ") + "XRletvWPndttlu3Wbpu69p+bxeZvbdZVjspNuVgLw/3cljIfH6 ") + "CtwA34A5Il+QVl+aOS7KqW8yoFzI/csnut8vT365uJOXRvOShA ") + "h7ZHXgiPfB0D45gmYA5uAVr8AC+gEewxaxfuI87NF91EB33dYf ") + "sfnR45nSLqF636NBOIfNRl+TTLslm3f1bwHQH0/3etIZpfIo0T ") + "mk+xX0Bbk9Zvj0l6dBHJfORj1GwAtfg1ie7WsDTGv67IdkoKAJ ") + "OA0QAC5AEJL3SDvknPN2Bt4BklV4Rd9RDXDDpIS7ucY/tPvVY+ ") + "qmH8zG73Ts+9Fj29f/m9dEyfbK76PP0oo9jInvsF22ygXEDI8l ") + "Ow78fReaH+5KECBrSfIL7FMQhyVZhUccvhcxbA5K3wQlwB6jro ") + "CjxYVR4nUQ0dyOS30csf4tIpoaMlEpl3WvWsPCqDLHekOVt3E+ ") + "GJLPPqP6rhJ+8eoYh0AadM5L956xIxhrtkxnBA3igM8LLjYpkg ") + "r3Xb4w6Y5q3xvAGHuiM8f7jfS1h+gbewC/wz5hm5UkxbE9Ydlg ") + "87poTlgJEOSmMmbt3v4T7aj9yW8j08wR7sHvB/Bc9P32f4O9/X ") + "jlH/5+T3eCcp4NzvUuz8yLYEsblh9Ge/i1PFkyLYGdTlt+A5yl ") + "LWzF6JL+LSfoW6yo6M7KbzlgK8FGtZzhEwBb8AZULmi/m6FvwZ ") + "06y0qIIerCg6cFCd+nPBT6FS3x1YAPKCSYm+L4TnIRJkUUM8xx ") + "cgitwA74mdPec0PQ50Qv9gGULSkt8P0tdhtGSp6OlzvNxifKD0 ") + "ork1ors7BVLAd7FWZG0u9I+pSsEBrUrmh/j7oIO8EEfDGCPcD8 ") + "DEzAFCbi9Yv9Wemr4rxqWJ7hYI33Rj/aZvkz/C6qQhVY ") + "</terrain>") + "<script>") + "<state name=\"start\">") + "<action type=\"add-state\" arg=\"countdown\" />") + "<edge type=\"bridge-clear\" next=\"bridge\"/>") + "<edge type=\"zombie-clear\" next=\"zombie\" />") + "</state>") + "<state name=\"bridge\">") + "<edge type=\"zombie-clear\" next=\"bridge-zombie\" />") + "</state>") + "<state name=\"zombie\">") + "<edge type=\"bridge-clear\" next=\"bridge-zombie\" />") + "<edge type=\"zombie-horde-begin\" next=\"start\" />") + "</state>") + "<state name=\"bridge-zombie\">") + "<action type=\"win\">") + "<arg>") + "The old world is gone, lost to this grim tide. But your sanctuary contains the hope of new life. Perhaps humankind will survive.\n\n") + "For more challenges, try playing a random map or creating your own levels! ") + "</arg>") + "</action>") + "</state>") + "<state name=\"countdown\">") + "<action type=\"countdown\" arg=\"150\" />") + "<edge type=\"countdown-complete\" next=\"horde\" />") + "</state>") + "<state name=\"horde\">") + "<action type=\"horde\" />") + "<edge type=\"zombie-horde-end\" next=\"countdown\" />") + "</state>") + "</script>") + "</map>"), ((((((((((((((((((((((((((((((((((((((("<map name=\"Hide and Seek\" difficulty=\"2\" sizeX=\"90\" sizeY=\"64\" startX=\"35\" startY=\"35\" >" + "<terrain>") + "41d079c7f0eaa432f235005707feb90f.eNollIt22jgQhq2RR ") + "r6BodxqSgm2IUDC2jGXBJJectgk9NAmTdLuI+nB97fgnM/zazQ ") + "ajUcyLt+9Cc23a6G3N02pDxuf9O8F+/p9KCP9t0/K/W8oIvfvg ") + "hru60Zp98eNp9zdbUOod8yq1z611GGthXrMyVfbTZ3U9YZY8XW ") + "pBDebMuw2paRuW3phdyCliAdtGS6gaHEma+HiEr7iMpbBAUrTI ") + "ZL18BDCeQx9zIQxAivfIqyWsNQiDttIGEkKu5Wvy9UyPII/YZX ") + "hTzXuVrm7Ve7aJdLEl1iyyCUHi5WsUqyqFNW4i3FdFINYhoeqq ") + "AMWkp9JL/BHUnqCR0qGfpWIL5XkIgoE7SJS4a5FJO5aTOE9FN1 ") + "3yKVdB76iF9CkaLBbNhz8vMm6wbxpV1omd5FSd9affI+kuo8qK ") + "fZIk+4xfrBT8hEbeMldh9XXjo196GCuV8n0IZby8ZMN22NPGex ") + "6RDq5i1l+s+7kJlZyF9vgFeTGyqSAvLJSrTtM5wVrXQbVuJ5so ") + "HdWp3es9Bcrkz2z3vt2p+/oaX0WR+369IN1pHN45l6laeKiHRP ") + "GqyesKDiDqquYNSWxK1Vsg5KBy2p42iJxlcpcm2bKpGXSDJmbd ") + "eto+vCIpou2Ri7aGvkkg6iGNxRc80lxFFLqM3NoC0sYN8091ci ") + "Bj307beGpqK3FOOy53LQ9U9xTruS2j/OMOiixhXPyqNUjFuEgo ") + "MAfoGTye9W9HTZpXBu5Xn1ql7ZH5MnazJf1hDPsNT3tNVNSZ1G ") + "pub20jih3cXmCnISoFURBgEedO6WQqrMWpGqYUZyzTLlk9kpbf ") + "FAqrlnpjjKl1GjmkZqkkvVkJEl/HnlSf86k0uNMKD2aKqHG1eP ") + "zVKKvZ6qmPp+FGF7gMcMwiXNWfZswHUKmha1tnLsks/GVKydXl ") + "YMvc8GcVY94GYj5Ed/7Lz7dz7cGy/fTJXzBffSyIy7ss3XwW8Q ") + "ifWkp+ft0KY+QP61M3yH/WsnHbk2kbz2Wf2zvk1+Qz1bK40Arq ") + "X71Fakjep0eR1r9HJ1yjbU6TiqZHWeQc9v84wLfxQ907Yd9E9r ") + "nxMF+Vd2G9SqiYLmqzm1ZouFLNNwTRSFp8jVnvl+evr0t9O50R ") + "Ok6V7y2HVBFzkL+KFnib2cpRJ0OuVDqsBJCPeTCVc85uWlRSr7 ") + "a2PjlRolJmbm6tDXWJ7eJ1l/Pbd7J/oy9f63WdH9GXnA/rSq8n ") + "WoKt5C0zfCBbJPqvyHxMZwTqeLsAx4ZaVXMca9v5zj6/ZSVitg ") + "lg06bNjsm0o5pgjUoPMdc+cKsfMe4kWMCUAfccIzXEKYB224jt ") + "uOYLbjuOuZnD7EfHdMBHCMuFuYI6/Yd8wz4E2KAHmAOvAM9FMY ") + "dOiYEDdAakunAvgI+c4wP6uADGIIMnINLsAQ34CvojBzTBwUow ") + "QZsR8Lcwn4ZkfkO+wo7SBwzT/C+KeLBJBVmBvsGLjKsB52xYwb ") + "gHPQnwlxM0AvQPocfvIHzKeJBAfbgCfRnqBHMZ2QeYAdzx6RzY ") + "a5gb8AXsAePczLZBeoHG3AHvoMn8Ap+/uOYF8A5+gQegC7Qx4L ") + "MI+wL8K6E8a8wV2IMnpbo8VKYxzV6voYPrDY4F3ALvoH7jTBPs ") + "PoafQU10AI9MAAjkIEpKK+F2cJ+AXvwAKIbx3y8EWZ8QyaHXoF ") + "roLeoZytMCNsCfTAEKTgHF2CxJdPcOaYLRjthStjrnfgfv7rhH ") + "g ") + "</terrain>") + "</map>")];
public static var addSupplyTip:String = (((((("<p>" + "<span class=\"title\">") + "<span class=\"hotkey\">A</span>dd Supply Line") + "</span>\n") + "Click here to create a supply line to another structure. The two structures ") + "will send resources to each other as needed. ") + "</p>");
public static var towerSameWarning:String = "Structure Can't Supply Itself ";
public static var clickDepot:String = "<p>Click on your depot to select it.</p>";
public static var zombieThreatHigh:String = "High ";
public static var waitUploadMap:String = "Uploading Map... ";
public static var tutorialText:String = "Tutorial ";
public static var editIntersection:String = "Intersection ";
public static var rateGood:String = "Good ";
public static var upgradeMaxTip:String = ((((("<p>" + "<span class=\"title\">") + "Upgrading Complete ") + "</span>\n") + "This structure has been completely upgraded. ") + "</p>");
public static var noFleeTip:String = ((((("<p>" + "<span class=\"title\">") + "Cannot Flee ") + "</span>\n") + "This is your last depot. There can be no further retreat from this structure. ") + "</p>");
public static var salvageProspectsNone:String = "None ";
public static var backgroundAddSupplyTip:String = (((((("<p>" + "<span class=\"title\">") + "How To Add ") + "</span>\n") + "Move the mouse to the structure you want to add a supply line to and ") + "click it, or press escape to cancel. ") + "</p>");
public static var accuracyBarTip:String = ((((("<p>" + "<span class=\"title\">Accuracy</span>\n") + "Shows the accuracy of shots fired by this sniper. Extra survivors ") + "act as spotters to increase accuracy. It is much easier to hit ") + "zombies as they are attacking a barricade. ") + "</p>");
public static var noviceText:String = "Novice ";
public static var placeSupplyWarning:String = "No Supply Line ";
public static var rateHard:String = "Hard ";
public static var backgroundRemoveSupplyTip:String = ((((((("<p>" + "<span class=\"title\">") + "How To Remove ") + "</span>\n") + "Move the mouse to the structure that you want to remove a supply line to ") + "and click on it. The blue arrows show current supply lines from this ") + "depot. You may press escape to cancel. ") + "</p>");
public static var workshopEntranceTip:String = (((((((("<p>" + "<span class=\"title\">") + "Click to Salvage ") + "</span>\n") + "You can build a workshop here to salvage all usable ") + "resources in this building. The workshop will automatically close ") + "down and return the survivor when finished. You may press escape to ") + "cancel. ") + "</p>");
public static var workshopBuildingZombiesTip:String = (((((("<p>" + "<span class=\"title\">") + "Zombies Inside ") + "</span>\n") + "You cannot build a workshop at a building with zombies inside. Lure ") + "out and destroy the zombies first. You may press escape to cancel. ") + "</p>");
public static var depotNoBoardTip:String = (((((("<p>" + "<span class=\"title\">") + "Cannot Construct Depot ") + "</span>\n") + "You cannot construct a depot from this structure. There are not enough ") + "boards here to build the depot with. ") + "</p>");
public static var placeBridgeWarning:String = "Bridge Unstable ";
public static var upgradeInProgressWarning:String = "Upgrade in Progress ";
public static var survivorsLeftTip:String = ((("<p>" + "<span class=\"title\">Survivors Left</span>\n") + "How many survivors will be found before the tower is closed. ") + "</p>");
public static var editHardware:String = "Hardware Store ";
public static var playPediaRootSecret:String = "index ";
public static var editBridge:String = "Bridge ";
public static var editFringe:String = "Office (A) ";
public static var workshopDynamiteTip:String = (((((((("<p>" + "<span class=\"title\">") + "Click to Place Charges ") + "</span>\n") + "If you build a workshop here, it will begin placing explosive ") + "charges on this bridge. After this bridge is destroyed, no more ") + "zombies can cross it to enter the island. You may press escape to ") + "cancel. ") + "</p>");
public static var backgroundBarricadeTip:String = ((((((("<p>" + "<span class=\"title\">") + "Click To Build Barricade ") + "</span>\n") + "If you click here, a survivor will be dispatched to this location ") + "with some boards to build a barricade. You may press escape to ") + "cancel. ") + "</p>");
public static var placeBuildingWarning:String = "Building Unsafe ";
public static var buildWorkshopTip:String = ((((((((("<p>" + "<span class=\"title\">") + "Construct <span class=\"hotkey\">W</span>orkshop") + "</span>\n") + "<span class=\"cost\">1 Survivor</span>\n") + "Workshops can be built at the entrances of buildings to collect the ") + "resources inside. They can also reclaim resources after a structure has ") + "been destroyed or abandoned. Finally, they can be used to activate ") + "special features on the map such as dynamite. ") + "</p>");
public static var buildingWorkshopTip:String = (((((((("<p>" + "<span class=\"title\">") + "Place Workshop ") + "</span>\n") + "Move the mouse to on the entrance of a building, rubble on the ") + "ground, or a special feature and click to build a workshop there. It ") + "will take some time for a survivor to arrive at your planned ") + "building location. You may press escape to cancel. ") + "</p>");
public static var workshopBackgroundTip:String = (((((((("<p>" + "<span class=\"title\">") + "Nothing Here ") + "</span>\n") + "There is nothing for a workshop to do here. Workshops can only be ") + "placed at the entrance to a building with resources inside, at some ") + "rubble on the street, or at a special feature. You may press escape ") + "to cancel. ") + "</p>");
public static var backgroundBuildBridgeTip:String = ((((("<p>" + "<span class=\"title\">") + "Cannot Build on Bridge ") + "</span>\n") + "It is too dangerous to build on a bridge. You may press escape to cancel. ") + "</p>");
public static var buildDepotTip:String = ((((((("<p>" + "<span class=\"title\">") + "Construct <span class=\"hotkey\">D</span>epot") + "</span>\n") + "<span class=\"cost\">1 Survivor</span>\n") + "Depots store your resources and transfer them through your ") + "supply network as needed. ") + "</p>");
public static var quartermasterText:String = "Quartermaster ";
public static var sniperAmmoIncreaseTip:String = (((((("<p>" + "<span class=\"title\">") + "Increase Ammo Quota ") + "</span>\n") + "Storing more ammo allows this sniper to shoot more zombies between ") + "resupplies. ") + "</p>");
public static var buildSniperTip:String = (((((((("<p>" + "<span class=\"title\">") + "Construct <span class=\"hotkey\">S</span>niper") + "</span>\n") + "<span class=\"cost\">1 Survivor</span>\n") + "<span class=\"cost\">20 Boards</span>\n") + "Snipers are your only way to kill zombies. They are inaccurate, but ") + "will kill a zombie in one hit. ") + "</p>");
public static var moveWindowNorth:String = "<p>Move window North.</p>";
public static var buildingStandardText:String = "Office ";
public static var editParking:String = "Parking Lot ";
public static var pedia:Array = ["index ", (((((((((((((((((((((((((((((((((((("<p><span class=\"title\">Index</span></p>\n" + "<a href=\"event:goal\">Goal</a>") + "\n\n") + "<a href=\"event:timer\">Timer</a>") + "\n\n") + "<a href=\"event:resources\">Resources</a>") + "<li><a href=\"event:ammo\">Ammo</a></li>") + "<li><a href=\"event:boards\">Boards</a></li>") + "<li><a href=\"event:survivors\">Survivors</a></li>") + "\n\n") + "Towers ") + "<li><a href=\"event:sniper\">Sniper</a></li>") + "<li><a href=\"event:workshop\">Workshop</a></li>") + "<li><a href=\"event:depot\">Depot</a></li>") + "<li><a href=\"event:barricade\">Barricade</a></li>") + "\n\n") + "<a href=\"event:buildings\">Buildings</a>\n") + "<a href=\"event:building_types\">Building Types</a>") + "<li><a href=\"event:house\">House</a></li>") + "<li><a href=\"event:office\">Office</a></li>") + "<li><a href=\"event:apartment\">Apartment</a></li>") + "<li><a href=\"event:mall\">Mall</a></li>") + "<li><a href=\"event:police_station\">Police Station</a></li>") + "<li><a href=\"event:hardware_store\">Hardware Store</a></li>") + "<li><a href=\"event:church\">Church</a></li>") + "<li><a href=\"event:hospital\">Hospital</a></li>") + "\n\n") + "<a href=\"event:zombies\">Zombies</a>\n") + "<li><a href=\"event:zombie_hordes\">Zombie Hordes</a></li>") + "<li><a href=\"event:noise\">Noise</a></li>") + "<li><a href=\"event:scent\">Scent</a></li>") + "\n\n") + "<a href=\"event:map_features\">Map Features</a>") + "<li><a href=\"event:charges\">Charges</a></li>") + "<li><a href=\"event:rubble\">Rubble</a></li>") + "\n\n") + "<a href=\"event:map_editor\">Map Editor</a>"), "goal ", (((((((((("<p><span class=\"title\">Goal</span></p>\n" + "<p>") + "Without safe havens, civilization will be destroyed. Your goal is to ") + "secure the city by slowly expanding your perimeter, killing <a ") + "href=\"event:zombies\">zombies</a> and looting <a ") + "href=\"event:resources\">resources</a> as you go, until you reach and ") + "destroy each bridge by setting off the <a ") + "href=\"event:charges\">charges</a> that were airlifted in. Only once ") + "the island is secure can you think about the future-- and whether ") + "you'll live to see it. ") + "</p>"), "timer ", ((((((("<p><span class=\"title\">Timer</span></p>\n" + "<p>") + "The timer is your friend and your worst enemy. It ticks down the ") + "precious seconds until the next <a ") + "href=\"event:zombie_horde\">horde</a> arrives, so keep a close eye on ") + "it. If you can't take the heat, you can pause the game by ") + "clicking on the timer. ") + "</p>"), "resources ", (((((((("<p><span class=\"title\">Resources</span></p>\n" + "<p>") + "You'll need three things for this mission to succeed: <a ") + "href=\"event:boards\">lumber</a>, <a href=\"event:ammo\">ammo</a>, and ") + "fellow <a href=\"event:survivors\">survivors</a>. You'll find these by ") + "looting the city's eerily quiet <a ") + "href=\"event:buildings\">buildings</a>. But plan ahead: some types ") + "contain more of certain resources. ") + "</p>"), "ammo ", (((((((((("<p><span class=\"title\">Ammo</span></p>\n" + "<p>") + "<img src=\"pedia_ammo\">") + "The folks who once lived here had time to stockpile ammunition, but ") + "in the end it didn't save them. Maybe it will save you. Ammo is one ") + "of three <a href=\"event:resources\">resources</a> your team is ") + "searching for in <a href=\"event:buildings\">buildings</a>. Once your ") + "people get it to a supply <a href=\"event:depot\">depot</a>, it can be ") + "distributed to your <a href=\"event:sniper\">snipers</a>. You can bet ") + "your ass they'll need it. ") + "</p>"), "boards ", (((((((((("<p><span class=\"title\">Boards</span></p>\n" + "<p>") + "<img src=\"pedia_boards\">") + "You've ordered your team to strip all spare lumber from any <a ") + "href=\"event:buildings\">buildings</a> they reconnoiter. Once they ") + "haul it back to the nearest <a href=\"event:depot\">depot</a>, it will ") + "fuel your survival: you can order survivors to build <a ") + "href=\"event:sniper\">sniper towers</a> or <a ") + "href=\"event:barricade\">barricades</a>. You can even ") + "upgrade your sniper towers... if there's time. ") + "</p>"), "survivors ", (((((((((((("<p><span class=\"title\">Survivors</span></p>\n" + "<p>") + "<img src=\"pedia_survivors\">") + "Anyone left alive is holed up deep inside one of these <a ") + "href=\"event:buildings\">buildings</a>, scared and hungry. But their ") + "fear has kept them alive, and they'll be eager to join you, once ") + "your scouts find them. You can put them to work ferrying <a ") + "href=\"event:resources\">supplies</a>, scavenging buildings, making <a ") + "href=\"event:barricade\">fortifications</a>, manning <a ") + "href=\"event:sniper\">sniper towers</a>, and even setting <a ") + "href=\"event:charges\">charges</a>. If you survive long enough to ") + "reach them. ") + "</p>"), "sniper ", ((((((((((((((((((("<p><span class=\"title\">Sniper</span></p>\n" + "<p>") + "<img src=\"pedia_sniper\">") + "Anyone who's handy with a rifle gets sent to man these towers, ") + "thrown together from <a href=\"event:boards\">boards</a> and ") + "sweat. Send more <a href=\"event:survivors\">survivors</a> to a tower ") + "and they'll act as spotters, increasing the accuracy of your shots; ") + "and make damn sure your snipers have enough <a ") + "href=\"event:ammo\">ammo</a>. If you have the time ") + "and boards, you can upgrade a sniper tower, building it up higher ") + "to improve your range. ") + "</p>\n") + "<p>") + "Your snipers are good shots, and sharp: they'll obey tactical orders ") + "without question, like firing in the air to attract the <a ") + "href=\"event:zombies\">zombies</a>, or holding fire to avoid a ") + "swarm. But the towers themselves are rickety scrap heaps; one good ") + "swipe from those monsters and they'll collapse. So don't let ") + "them get within swiping distance. ") + "</p>"), "workshop ", ((((((((((((((("<p><span class=\"title\">Workshop</span></p>\n" + "<p>") + "<img src=\"pedia_workshop\">") + "If something needs doing, assign a <a ") + "href=\"event:survivors\">civvie</a> to the job by building a workshop ") + "there: at the entrance to a <a href=\"event:buildings\">building</a> ") + "to loot it, on a piece of <a href=\"event:rubble\">rubble</a> to clear ") + "it, or on the bridge <a href=\"event:charges\">charges</a> to prime ") + "them to blow. Up the quota of survivors at a workshop to get the job done faster. Collected <a ") + "href=\"event:resources\">resources</a> get taken ") + "back to the nearest <a href=\"event:depot\">depot</a>, ready to be ferried wherever they're needed. ") + "</p>\n") + "<p>") + "When the job's done, the workshop automatically closes and the ") + "assigned survivors return to base. ") + "</p>"), "depot ", (((((((((((((((("<p><span class=\"title\">Depot</span></p>\n" + "<p>") + "<img src=\"pedia_depot\">") + "Your command posts and sanctuaries against the <a ") + "href=\"event:zombies\">horde</a>. All the <a ") + "href=\"event:resources\">resources</a> and <a ") + "href=\"event:survivors\">survivors</a> you gather will be staged at ") + "the nearest depot, and you can only build new structures close by ") + "a depot which can keep them supplied. ") + "</p>\n") + "<p>") + "As you start to control more area, you should keep a tight eye on ") + "your supply lines. Each <a href=\"event:sniper\">sniper tower</a> or ") + "<a href=\"event:workshop\">workshop</a> is connected to a depot; add ") + "and remove supply lines to make sure your survivors are being routed ") + "as efficiently as possible. ") + "</p>"), "barricade ", (((((((((((((((((("<p><span class=\"title\">Barricade</span></p>\n" + "<p>") + "<img src=\"pedia_barricade\">") + "Unmanned heaps of <a href=\"event:boards\">boards</a> and other junk that should ") + "hold back the <a href=\"event:zombies\">horde</a>, though not for ") + "long. Each costs 10 boards to build and will stand up to about that ") + "many blows from a zombie before it collapses. You can assign <a ") + "href=\"event:survivors\">survivors</a> to repair them if you act fast, ") + "and increase the board quota to add durability, but you can only put ") + "off the inevitable: those things will break through, sooner or ") + "later. ") + "</p>\n") + "<p>") + "But here's the good news: zombies held up by a barricade are easy ") + "pickings for your <a href=\"event:sniper\">snipers</a>, and the things ") + "are usually too stupid to go around them. Put up a barricade between ") + "your sniper towers and the advancing horde and pick them off like ") + "ducks in a shooting gallery. ") + "</p>"), "buildings ", (((((((((((((((((((("<p><span class=\"title\">Buildings</span></p>\n" + "<p>") + "Whoever once owned them is dead now. Inside are exactly three things ") + "you care about: <a href=\"event:boards\">lumber</a>, <a ") + "href=\"event:ammo\">ammo</a>, and <a ") + "href=\"event:survivors\">survivors</a>. The quicker you can get them ") + "out, the better your chances. But be careful: <a ") + "href=\"event:zombies\">zombies</a> are lurking inside too, and any ") + "loud <a href=\"event:noise\">noise</a> nearby will draw them out into ") + "the street. To feed. ") + "</p>\n") + "<p>") + "Through initial recon runs you know a little about what's inside ") + "each building. A green triangle means a cakewalk: plenty of loot and ") + "no sign of trouble. But yellow, orange, and red triangles point to ") + "increasing levels of bad news inside: zombies, hiding and waiting in ") + "the quiet shadows. ") + "</p>\n") + "<p>") + "See also: <a href=\"event:building_types\">Building Types</a>") + "</p>"), "building_types ", ((((((((((((("<p><span class=\"title\">Building Types</span></p>\n" + "<p>") + "Based on a few scouting runs and detailed intel on the <a ") + "href=\"event:zombies\">zombies</a>, you have a sense of what to expect ") + "inside each type of <a href=\"event:buildings\">building</a>. ") + "</p>\n") + "<li><a href=\"event:house\">House</a></li>") + "<li><a href=\"event:office\">Office</a></li>") + "<li><a href=\"event:apartment\">Apartment</a></li>") + "<li><a href=\"event:mall\">Mall</a></li>") + "<li><a href=\"event:police_station\">Police Station</a></li>") + "<li><a href=\"event:hardware_store\">Hardware Store</a></li>") + "<li><a href=\"event:church\">Church</a></li>") + "<li><a href=\"event:hospital\">Hospital</a></li>"), "house ", ((((((("<p><span class=\"title\">House</span></p>\n" + "<p>") + "<img src=\"pedia_house\">") + "You can't expect to find too many <a ") + "href=\"event:resources\">resources</a> in these yuppie McMansions, but ") + "on the plus side, 2.4 kids can't turn into too many <a ") + "href=\"event:zombies\">zombies</a>. ") + "</p>"), "office ", ((((((("<p><span class=\"title\">Office</span></p>\n" + "<p>") + "<img src=\"pedia_office\">") + "A good source for basic <a href=\"event:resources\">resources</a> in ") + "reasonable quantities, and only a moderate amount of <a ") + "href=\"event:zombies\">zombies</a>. Bet these schmucks wish they ") + "hadn't put in for overtime now. ") + "</p>"), "apartment ", ((((("<p><span class=\"title\">Apartment</span></p>\n" + "<p>") + "<img src=\"pedia_apartment\">") + "<a href=\"event:resources\">Resource</a>-heavy, but swarming with <a ") + "href=\"event:zombies\">former occupants</a>. Watch out. ") + "</p>"), "mall ", (((((("<p><span class=\"title\">Mall</span></p>\n" + "<p>") + "<img src=\"pedia_mall\">") + "The mother lode for <a href=\"event:resources\">resources</a>, but ") + "swarming with <a href=\"event:zombies\">monsters</a>: ain't no free ") + "lunch in this food court. ") + "</p>"), "police_station ", (((((("<p><span class=\"title\">Police Station</span></p>\n" + "<p>") + "<img src=\"pedia_police_station\">") + "<a href=\"event:ammo\">Ammunition</a> by the truckful, but since cops ") + "were usually the first ones infected, they've had plenty of time to ") + "feed and grow strong. Be on your guard. ") + "</p>"), "hardware_store ", (((((("<p><span class=\"title\">Hardware Store</span></p>\n" + "<p>") + "<img src=\"pedia_hardware_store\">") + "Your best source for <a href=\"event:boards\">lumber</a>, but these ") + "seem to attract the <a href=\"event:zombies\">zombies</a>, too. Maybe ") + "it's the smell of sawdust. ") + "</p>"), "church ", ((((((("<p><span class=\"title\">Church</span></p>\n" + "<p>") + "<img src=\"pedia_church\">") + "You can bet your ass a congregation's worth of <a ") + "href=\"event:survivors\">survivors</a> is holed up inside. But the ") + "overgrown graveyard and shadowy halls inside offer far too many ") + "perfect hiding places for <a href=\"event:zombies\">unholy things</a>. ") + "</p>"), "hospital ", (((((("<p><span class=\"title\">Hospital</span></p>\n" + "<p>") + "<img src=\"pedia_hospital\">") + "The sick and weak were the first to be taken, God rest their ") + "souls. There's precious little hope of finding survivors here. What ") + "roams the halls now is beyond your skill to heal. ") + "</p>"), "zombies ", ((((((((((((((((((("<p><span class=\"title\">Zombies</span></p>\n" + "<p>") + "<img src=\"pedia_zombies\">") + "Keep two things in mind and you have a chance to stay alive. First, ") + "their sense of hearing is far more acute than their vision. They're ") + "attracted by <a href=\"event:noise\">noise</a>-- gunfire or ") + "construction-- and will mindlessly move towards it. They can <a ") + "href=\"event:scent\">smell</a> you too, so keep your distance and ") + "stay quiet. ") + "</p>\n") + "<p>") + "Second, it only takes one good shot to the head to drop them. On the ") + "flip side, one bite from those rotten teeth and it's curtains for ") + "you. If you get within hand-to-hand distance, you're as good as ") + "dead. Scratch that. You're worse than dead, because soon you'll be ") + "one of them. ") + "</p>\n") + "<p>") + "See also: <a href=\"event:zombie_hordes\">Zombie Hordes</a>") + "</p>"), "zombie_hordes ", ((((((("<p><span class=\"title\">Zombie Hordes</span></p>\n" + "<p>") + "These <a href=\"event:zombies\">things</a> seem to like to move in ") + "packs, or waves. Every so often a new horde will sweep into town ") + "across a bridge, or swarm out of unexplored buildings angry and ") + "drooling. The hordes only get bigger each time it happens. Better ") + "get to those bridge <a href=\"event:charges\">charges</a> fast. ") + "</p>"), "noise ", ((((((("<p><span class=\"title\">Noise</span></p>\n" + "The <a href=\"event:zombies\">zombies</a> flock to noise like moths to ") + "flame. Loud noises like gunshots bring them from far away, but ") + "construction noise wakes up the ones at a medium distance. Remember ") + "that it's not just the ones in the street you have to worry about; ") + "most of the <a href=\"event:buildings\">buildings</a> are swarming ") + "with them too. ") + "</p>"), "scent ", (((((((("<p><span class=\"title\">Scent</span></p>\n" + "<p>") + "Almost anything you'll do makes <a href=\"event:noise\">noise</a>, ") + "which attracts the <a href=\"event:zombies\">zombies</a>. But those ") + "bastards can smell you, too. Walk past some and they'll follow your ") + "scent trail all the way back to base. Noise seems more important to ") + "them, though; distract them with a loud noise and they'll forget ") + "about the delicious scent of flesh-- for a while. ") + "</p>"), "map_features ", (((((((((((((((((("<p><span class=\"title\">Map Features</span></p>\n" + "<p>") + "Keep an eye on the topography around your <a ") + "href=\"event:depot\">depots</a>. <a ") + "href=\"event:survivors\">Survivors</a> can't move through <a ") + "href=\"event:barricade\">barricades</a> or other structures, so make ") + "sure they have clear paths to work, and run. Mind the urban warfare tradeoff: wide streets make your ") + "structures harder to defend, and narrow streets make them harder to ") + "supply. And keep an eye on where the bridges are, since both the <a ") + "href=\"event:zombie_hordes\">hordes</a> and the <a ") + "href=\"event:charges\">charges</a> are in that direction. ") + "</p>\n") + "<p>") + "<a href=\"event:rubble\">Destroyed structures</a> block construction, ") + "and must be cleared by building a <a ") + "href=\"event:workshop\">workshop</a> on them. Also watch for parks, ") + "whose vegetation provides cover and is hard for <a ") + "href=\"event:sniper\">snipers</a> to shoot through. ") + "</p>"), "charges ", (((("<p><span class=\"title\">Charges</span></p>\n" + "<p>") + "<img src=\"pedia_charges\">") + "Your only prayer of surviving this mission is to get to the charges at each bridge, build <a href=\"event:workshop\">workshops</a> on them, and buy your team enough time to get them ready to blow. ") + "</p>"), "rubble ", (((("<p><span class=\"title\">Rubble</span></p>\n" + "<p>") + "<img src=\"pedia_rubble\">") + "Jetsam left over from the initial attack, or the sorry ruins of your own construction. Either way, it'll have to go if you want to clear a path for <a href=\"event:survivors\">survivors</a> or build new structures. Build a <a href=\"event:workshop\">workshop</a> on a tile of rubble to clear it and recover most of its <a href=\"event:resources\">resources</a>. ") + "</p>"), "map_editor ", (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("<p><span class=\"title\">Map Editor</span></p>\n" + "<p>") + "When editing a map, you can click the question mark icon in the ") + "lower-left to access this help again. ") + "</p>\n") + "<p><span class=\"title\">Boxes</span></p>\n") + "<p>") + "Boxes represent areas or buildings. The outlines of boxes are shown ") + "by thin white lines surrounding them. A box might be a single office ") + "or a street or an area of water. ") + "</p>\n") + "<p>") + "When you create a new map, boxes representing the ocean around an ") + "island are created for you automatically. You can adjust them or ") + "move them aside to create bridges. I recommend that you always make ") + "sure to leave at least the starting amount of water around the edges ") + "so that the status displays on the edges of the screens do not ") + "interfere with the player's visibility. ") + "</p>\n") + "<p><span class=\"title\">Creating a Box</span></p>\n") + "<p>") + "To create a new box, move the mouse to an empty (white) area of the ") + "map. Click and drag. A green rectangle will follow your cursor ") + "showing where the new box will be placed. If the rectangle turns ") + "red, that means the prospective box overlaps an existing box and ") + "will not be created. When you have a size that you want, release the ") + "mouse and a new box will be created. ") + "</p>\n") + "<p><span class=\"title\">Resizing a Box</span></p>\n") + "<p>") + "Existing boxes can be resized by dragging their corners. Move the ") + "mouse so it is inside the box you want to resize near one of the ") + "corners. Click and drag. You can resize the box to any dimension you ") + "want. If it overlaps with another box or is too small for the ") + "current box type, it will turn red. ") + "</p>\n") + "<p><span class=\"title\">Selecting</span></p>\n") + "<p>") + "Select boxes and squares to edit them. A box or square which is ") + "selected has a black outline. Click on an unselected box to select ") + "it. Click within a selected box to select a particular square. ") + "</p>\n") + "<p><span class=\"title\">Editing Boxes</span></p>\n") + "<p>") + "You can edit boxes using the combo-box and buttons on the ") + "left. Click on the box you want to edit. Then click on the combo-box ") + "widget in the upper-left and select what kind of area you want the ") + "box to be. Keep in mind that some box types have a minimum size and ") + "a box must be that size before you can change to those types. ") + "</p>\n") + "<p>") + "All boxes can be deleted using the delete button in the ") + "lower-left. Buildings can have zombies and resources added to ") + "them. Some kinds of boxes, like bridges, have a direction which you ") + "can modify using the rotate and reflect buttons. ") + "</p>\n") + "<p><span class=\"title\">Editing Squares</span></p>\n") + "<p>") + "In addition to editing boxes as a whole, individual squares may be ") + "edited as well. Some buildings allow you to set an entrance anywhere ") + "on the perimiter. On those boxes, select the square where you want ") + "the entrance and click 'Set Entrance' on the left. ") + "</p>\n") + "<p>") + "You can also place zombies, rubble, or towers on any square where ") + "they are normally allowed. You can add obstacles which permanently ") + "block a square. You can edit the resources available at any tower or ") + "rubble location. You can also select towers to change their quotas ") + "or to create and destroy trade links. ") + "</p>\n") + "<p>") + "Finally, you can select a square and remove the obstacle, rubble, or ") + "tower there with the delete button. To remove zombies just click '-' ") + "next to the zombie count. ") + "</p>\n") + "<p><span class=\"title\">Saving, Loading, and Testing</span></p>\n") + "<p>") + "Open the system menu by clicking the system button in the lower-left ") + "corner. From the system menu, you can save, load, and test the ") + "current map. ") + "</p>\n") + "<p>") + "When you click \"Save Map\", the map is encoded into a plain text ") + "format and displayed in the white text box. You can copy and paste ") + "that into a file for later use. ") + "</p>\n") + "<p>") + "To load a map, copy a the text for a map into the text box. Make ") + "sure that the only text in the text box is the map you wish to ") + "load. Then click \"Load Map\" to load that map for editing. ") + "</p>\n") + "<p>") + "You can also test a map by clicking \"Test Map\". When you do, you ") + "will begin playing the current map. If you win or lose, you will be ") + "returned to the map editor. You can also end the test by opening the ") + "system menu and clicking \"Edit Map\". ") + "</p>")];
public static var editHospital:String = "Hospital ";
public static var ammoNoDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Cannot Decrease Ammo Quota ") + "</span>\n") + "The ammo quota is now zero. You cannot further decrease the quota. ") + "</p>");
public static var toolTipStyleSheet:String = (((((((((((((((((((("p { " + "font-size: 14; ") + "color: #333333 ") + "} ") + ".title { ") + "font-size: 16; ") + "font-weight: bold; ") + "color: #000000 ") + "} ") + ".hotkey { ") + "color: #0000ff ") + "} ") + ".status { ") + "color: #008888 ") + "} ") + ".survivor { ") + "color: #008800 ") + "} ") + ".cost { ") + "color: #ff0000 ") + "} ");
public static var toggleTipTip:String = ((((("<p>" + "<span class=\"title\">") + "Toggle Tooltips <span class=\"hotkey\">[?]</span>") + "</span>\n") + "Click here to turn off tool tips like this one. ") + "</p>");
public static var depotAmmoIncreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Increase Ammo Quota ") + "</span>\n") + "More ammo will be stored here to resupply nearby snipers. ") + "</p>");
public static var hoverSniperHoldFireTip:String = (((((("<p>" + "<span class=\"title\">") + "Sniper Tower Will Not Fire ") + "</span>\n") + "You have ordered this sniper tower to hold fire. It will not shoot until ") + "you change its orders. ") + "</p>");
public static var disableFireTip:String = (((((("<p>" + "<span class=\"title\">") + "Forbid Sniper from <span class=\"hotkey\">F</span>iring") + "</span>\n") + "This sniper's current orders are to shoot any zombies within ") + "range. Click this button to prevent the sniper from firing. ") + "</p>");
public static var expertText:String = "Expert ";
public static var backgroundBuildRubbleTip:String = ((((((("<p>" + "<span class=\"title\">") + "Rubble Here ") + "</span>\n") + "You cannot build here because there is rubble blocking this ") + "area. You can build a workshop here to clear the rubble and salvage ") + "the resources in this square. You may press escape to cancel. ") + "</p>");
public static var editPlant:String = "Office (B) ";
public static var westLabel:String = "West ";
public static var sniperAmmoDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Decrease Ammo Quota ") + "</span>\n") + "Storing less ammo makes this sniper more reliant on its supplier. ") + "</p>");
public static var workshopBuildingEmptyTip:String = (((((("<p>" + "<span class=\"title\">") + "No Resources Left ") + "</span>\n") + "This building has already been stripped of all usable resources. You ") + "may press escape to cancel. ") + "</p>");
public static var waitLoadGame:String = "Loading... ";
public static var noSurvivorsWarning:String = "No Survivors ";
public static var editShallowWater:String = "Shallow Water ";
public static var backgroundBuildZombieTip:String = (((((("<p>" + "<span class=\"title\">") + "Zombies Here ") + "</span>\n") + "There are zombies here. Structures cannot be built where there are ") + "zombies. You may press escape to cancel. ") + "</p>");
public static var depotBoardsIncreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Increase Board Quota ") + "</span>\n") + "More boards will be kept on hand to build or upgrade towers. ") + "</p>");
public static var depotAmmoDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Decrease Ammo Quota ") + "</span>\n") + "Less ammo will be kept for resupplying nearby snipers. ") + "</p>");
public static var sniperNoSurvivorTip:String = (((((("<p>" + "<span class=\"title\">") + "Cannot Construct Sniper ") + "</span>\n") + "You cannot construct a sniper tower from this depot. There are no ") + "survivors here to build it. ") + "</p>");
public static var planCancelTip:String = (((((("<p>" + "<span class=\"title\">") + "Cancel Construction <span class=\"hotkey\">[Del]</span>") + "</span>\n") + "Click here to cancel the planned structure. The survivor sent to build it ") + "will return to the depot which sent it. ") + "</p>");
public static var hoverRubbleTip:String = (((((("<p>" + "<span class=\"title\">") + "Rubble ") + "</span>\n") + "Some rubble blocks the street. You can only build a workshop here ") + "to clear away the rubble and recover the resources in the rubble. ") + "</p>");
public static var supplyNotExistsWarning:String = "No Supply Line ";
public static var workshopFeatureTip:String = (((((("<p>" + "<span class=\"title\">") + "Click to Activate ") + "</span>\n") + "If you build a workshop it will begin activating the special feature ") + "here. The effect depends on the feature. You may press escape to cancel. ") + "</p>");
public static var editStreet:String = "Street ";
public static var survivorsLabel:String = "Survivors ";
public static var hoverWorkshopTip:String = (((((("<p>" + "<span class=\"title\">") + "Workshop ") + "</span>\n") + "Workshops are your industrial base. They salvage resources from ") + "buildings and rubble to allow the fight to continue. ") + "</p>");
public static var hoverZombieTip:String = (((((((("<p>" + "<span class=\"title\">") + "Zombie ") + "</span>\n") + "This is a zombie. They stay where they are unless they hear a ") + "noise. When they hear sounds, they will pursue them and attack ") + "anything in the way. Survivors, buildings, and especially gunfire ") + "attract zombies. ") + "</p>");
public static var mainLoseText:String = ((((((((((("The last board shatters and the monsters surge forward, the " + "bloodcurdling screams of your dying companions mingling with the ") + "crunching of bone and snarls of inhuman throats, a wall of tattered ") + "clothes and festering flesh and teeth stained lurid red advancing ") + "toward you. And as that last board shatters your hope goes with it, ") + "and you know you've failed. The island has fallen. Another sliver of ") + "humanity corrupted and destroyed.\n\n") + "Screaming in rage, you draw your last weapon, an eight-inch hunting ") + "knife, and charge straight into the advancing horde, stabbing and ") + "slashing even as claws rip your flesh and teeth begin shattering your ") + "bones. Let no man say Auriga Squad fell without a fight, if there be ") + "men left to say anything at all... ");
public static var depotBoardsDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Decrease Board Quota ") + "</span>\n") + "Fewer boards will be kept here for building or upgrading. ") + "</p>");
public static var workshopRubbleTip:String = (((((("<p>" + "<span class=\"title\">") + "Click to Reclaim ") + "</span>\n") + "Build a workshop here to clear the rubble and reclaim all of ") + "the resource in this square. You may press escape to cancel. ") + "</p>");
public static var pauseTip:String = ((((("<p>" + "<span class=\"title\">") + "Pause Game <span class=\"hotkey\">[Space]</span>") + "</span>\n") + "Click to pause the game. You can still select structures and issue orders while paused. ") + "</p>");
public static var towerRemoveSupplyTip:String = ((((((("<p>" + "<span class=\"title\">") + "Remove Supply Line ") + "</span>\n") + "If you click here, the supply line to this structure from the source ") + "depot will be removed. They will no longer send survivors with ") + "supplies to one another. You may press escape to cancel. ") + "</p>");
public static var wasteShotTip:String = (((((("<p>" + "<span class=\"title\">") + "Shoot Into <span class=\"hotkey\">A</span>ir") + "</span>\n") + "Zombies are attracted to sound. Firing a round into the air can ") + "serve as a lure for nearby zombies. ") + "</p>");
public static var nameConstraint:String = "A-Za-z0-9 ' ";
public static var sniperFoodIncreaseTip:String = (((((((("<p>" + "<span class=\"title\">") + "Increase Food Quota ") + "</span>\n") + "Food increases the accuracy of your snipers. If food is available ") + "when they fire at a zombie, they will consume some of the food and ") + "are 50% more likely to hit. If you click here, more food will be ") + "moved here. ") + "</p>");
public static var buildingBarricadeTip:String = (((((((("<p>" + "<span class=\"title\">") + "Place Barricade ") + "</span>\n") + "Move the mouse to an open square and click to build a barricade ") + "there. It will take some time for a survivor to bring the ") + "construction materials to your planned building location. You may ") + "press escape to cancel. ") + "</p>");
public static var fleeTip:String = (((((("<p>" + "<span class=\"title\">") + "Flee <span class=\"hotkey\">[Del]</span>") + "</span>\n") + "Abandon this structure and flee for safety, leaving behind any ") + "resources. They may be recovered later with a workshop. ") + "</p>");
public static var moveWindowEast:String = "<p>Move window East.</p>";
public static var mainNameDefaultInputText:String = "Anytown ";
public static var leftToExtractTip:String = (((("<p>" + "<span class=\"title\">Left to Extract</span>") + "How many resources are left in this area for your survivors to ") + "recover. ") + "</p>");
public static var foodNoDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Cannot Decrease Food Quota ") + "</span>\n") + "The food quota is now zero. You cannot further decrease the quota. ") + "</p>");
public static var rateOk:String = "Ok ";
public static var depotFoodIncreaseTip:String = ((((((("<p>" + "<span class=\"title\">") + "Increase Food Quota ") + "</span>\n") + "Food can be used here to increase the speed of your survivors. It ") + "can also be used by sniper towers. A depot will reserve all food in ") + "its quota for local use and will not transfer it to other depots. ") + "</p>");
public static var ammoTip:String = (((("<p>" + "<span class=\"title\">Ammo</span>\n") + "How much ammo is here right now. Your snipers use ammo to shoot ") + "zombies. ") + "</p>");
public static var editUnknown:String = "Undefined ";
public static var sniperFoodDecreaseTip:String = ((((((("<p>" + "<span class=\"title\">") + "Decrease Food Quota ") + "</span>\n") + "If you click here, less food will be stored at this sniper ") + "tower. While snipers can still fire without food, they are less ") + "accurate. ") + "</p>");
public static var supplyExistsWarning:String = "Supply Line Already Exists ";
public static var survivorsNotInside:String = ("Deserted " + "</p>");
public static var waitGenerateMap:String = "Generating Map... ";
public static var waitDownloadMap:String = "Downloading Map... ";
public static var buttonStyleSheet:String = (((((".hotkey { " + "color: #dd0000 ") + "} ") + ".status { ") + "color: #0000dd ") + "} ");
public static var quotaTip:String = (((("<p>" + "<span class=\"title\">Quota</span>\n") + "If the amount of ammo, boards, or survivors drops below its quota, ") + "your depot will send more as long as there is enough to go around. ") + "</p>");
public static var sniperNoBoardTip:String = (((((("<p>" + "<span class=\"title\">") + "Cannot Construct Sniper ") + "</span>\n") + "You cannot construct a sniper tower from this depot. There are not ") + "enough boards available here to build it. ") + "</p>");
public static var depotFoodDecreaseTip:String = ((((((("<p>" + "<span class=\"title\">") + "Decrease Food Quota ") + "</span>\n") + "If you click here, less food will be reserved for local use. If a ") + "depot lacks food, survivors will move more slowly when transferring ") + "resources. ") + "</p>");
public static var rateBad:String = "Bad ";
public static var boardsTip:String = ((((("<p>" + "<span class=\"title\">Boards</span>\n") + "How many boards are here right now. You need boards to build sniper ") + "towers, barricades, and more depots. You can also upgrade your ") + "sniper towers and repair barricades if you have enough boards. ") + "</p>");
public static var playPediaRoot:String = StringTools.trim(playPediaRootSecret);
public static var placeBoringWarning:String = ("Nothing to\n" + "Scavenge ");
public static var hoverDepotTip:String = (((((("<p>" + "<span class=\"title\">") + "Depot ") + "</span>\n") + "This is a depot. You can use it to build other structures or to store ") + "and distribute supplies. Click to select it. ") + "</p>");
public static var noWasteShotTip:String = ((((("<p>" + "<span class=\"title\">") + "Out of Ammo ") + "</span>\n") + "You cannot shoot into the air becaue this sniper is out of ammo. ") + "</p>");
public static var clickWorkshop:String = "<p>Click on your workshop to select it.</p>";
public static var mainWinText:String = (((((((((((("The bridge falls into the water, sounds of rending metal and echoes " + "of the blast reverberating through the city, fading slowly to a ") + "strange, deep silence.\n\n") + "At first your ragtag team watches numbly, too tired or gripped by ") + "fear to respond, not yet people again, only survivors.\n\n") + "But then voices begin to murmur, to gasp, to cry out. A cheer ") + "ripples through the crowd and finally explodes, elation shattering ") + "through memories of horror and tears washing cheeks stained with blood ") + "and grime. You've done it. The island is secure.\n\n") + "Your lips crack as you smile too. Sure, it's only one victory, and ") + "there's a lot more work ahead. But it's something. You've made a haven ") + "against darkness, a place to start to rebuild. Today you've triumphed ") + "against horror. Against despair. Against the horde. ");
public static var moveWindowSouth:String = "<p>Move window South.</p>";
public static var towerAddSupplyTip:String = (((((("<p>" + "<span class=\"title\">") + "Add Supply Line ") + "</span>\n") + "If you click here, a new supply line will be created. You may press ") + "escape to cancel. ") + "</p>");
public static var editHouse:String = "House ";
public static var zombieThreatNone:String = "None ";
public static var editStreetH:String = "Street (H) ";
public static var editMall:String = "Mall ";
public static var editStreetV:String = "Street (V) ";
public static var hoverSniperTip:String = (((((("<p>" + "<span class=\"title\">") + "Sniper Tower ") + "</span>\n") + "Sniper towers like this one are used to kill zombies. Snipers aren't 100% accurate, but only one successful shot is required to kill each zombie. Click to ") + "select it. ") + "</p>");
public static var cities:Array = ["Tokyo ", "Seoul ", "Mexico City ", "New York City ", "Mumbai ", "Jakarta ", "Sao Paulo ", "Delhi ", "Osaka ", "Kyoto ", "Kobe ", "Shanghai ", "Manila ", "Hong Kong ", "Los Angeles ", "Kolkata ", "Moscow ", "Cairo ", "Buenos Aires ", "Beijing ", "Karachi ", "Chicago ", "Dallas ", "Philadelphia ", "Houston ", "Miami ", "Washington DC ", "Atlanta ", "Boston ", "Detroit ", "San Francisco ", "Phoenix ", "Seattle ", "Minneapolis ", "San Diego ", "St Louis ", "Tampa ", "Baltimore ", "Denver ", "Pittsburgh ", "Portland ", "Cincinnati ", "Cleveland ", "Sacramento ", "Orlando ", "San Antonio ", "Kansas City ", "Las Vegas ", "San Jose ", "Istanbul ", "Paris ", "Madrid ", "Barcelona ", "Manchester ", "Liverpool ", "Milan ", "Berlin ", "Athens ", "Naples ", "Hamburg ", "Frankfurt ", "Kiev ", "Lisbon ", "Budapest ", "Copenhagen ", "Munich ", "Warsaw ", "Bucharest ", "Brussels ", "Vienna ", "Stockholm ", "Lyon ", "Lille ", "Belgrade ", "Minsk ", "Turin ", "Glasgow ", "Donetsk ", "Marseille ", "Kharkiv ", "Prague ", "Amsterdam ", "Antwerp ", "Odessa ", "Hannover ", "Zurich ", "Bordeaux ", "Dresden ", "Birmingham ", "Cologne ", "Katowice ", "Leeds ", "Lagos ", "Kinshasa ", "Khartoum ", "Johannesburg ", "Algiers ", "Abidjan ", "Ibadan ", "Cape Town ", "Alexandria ", "Nairobi ", "Casablanca ", "Mogadishu ", "Dakar ", "Tripoli ", "Rio de Janeiro ", "Bogata ", "Lima ", "Toronto ", "Santiago ", "Caracas ", "Guadalajara ", "Montreal ", "Recife ", "Havana ", "Sydney ", "Melbourne ", "Brisbane ", "Perth ", "Chennai ", "Bengaluru ", "Hyderabad ", "Ahmedabad ", "Pune ", "Kanpur ", "Surat ", "Jaipur ", "Guangzhou ", "Harbin ", "Shenzhen ", "Gonguan ", "Tianjin ", "Wuhan ", "Shenyang ", "Chengdu ", "Zhengzhou ", "Chongqing ", "Singapore "];
public static var buildingHospitalText:String = "Hospital (Zombies) ";
public static var survivorsNoDecreaseTip:String = ((((("<p>" + "<span class=\"title\">") + "Cannot Decrease Survivor Quota ") + "</span>\n") + "The survivor quota is now zero. You cannot further decrease the quota. ") + "</p>");
public static var replaySpeedBarLabel:String = "Speed ";
public static var zombieThreatLow:String = "Low ";
public static var setChargesBarTip:String = (((("<p>" + "<span class=\"title\">Set Charges Progress</span>\n") + "Progress towards preparing the explosives to blow the bridge. Your ") + "progress is cumulative even if you have to abandon the workshop. ") + "</p>");
public static var hoverDynamiteTip:String = (((((((("<p>" + "<span class=\"title\">") + "Dynamite ") + "</span>\n") + "If you built a workshop on these explosives, your survivors ") + "will wire them to the bridge and eventually detonate them. If all ") + "bridges are destroyed, no more zombies can invade the ") + "island. ") + "</p>");
public static var tutorial:Array = [(((((("<p>" + "<span class=\"title\">Tutorial</span>\n") + "There's not much time, so let's get you trained ASAP. <a ") + "href=\"event:zombies\">Zombies</a> are everywhere. We need to <a ") + "href=\"event:goal\">clear</a> the island and <a ") + "href=\"event:resources\">resources</a> are limited. ") + "</p>"), (((("<p>" + "<span class=\"title\">Scrolling</span>\n") + "Scout out the area. Scroll the map by moving the mouse outside the ") + "play area or using the arrow keys. ") + "</p>"), "2 ", (((((("<p>" + "<span class=\"title\">Establish Perimeter</span>\n") + "You need a <a href=\"event:sniper\">sniper</a> to defend your <a ") + "href=\"event:depot\">depot</a> from the <a ") + "href=\"event:zombies\">zombies</a>. Click 'Build Sniper,' then click ") + "the map to place your sniper tower. ") + "</p>"), (((("<p>" + "<span class=\"title\">Establish Perimeter</span>\n") + "Good. An idle <a href=\"event:survivors\">survivor</a> has been sent ") + "out with some <a href=\"event:boards\">boards</a> to build the tower. ") + "</p>"), (((("<p>" + "<span class=\"title\">Establish Perimeter</span>\n") + "I'd breathe a lot easier with a second <a href=\"event:sniper\">sniper ") + "tower</a>. Build another one near the first tower. ") + "</p>"), ((((("<p>" + "<span class=\"title\">Establish Perimeter</span>\n") + "Your <a href=\"event:sniper\">snipers</a> don't have <a ") + "href=\"event:ammo\">ammo</a> yet. Wait until both towers are stocked ") + "up. ") + "</p>"), "7 ", ((((((("<p>" + "<span class=\"title\">Lure out Zombies</span>\n") + "Now that we've got some protection, let's give these crack shots ") + "something to shoot at. Order one survivor to shoot into the air to ") + "<a href=\"event:noise\">lure</a> out <a ") + "href=\"event:zombies\">zombies</a> from any nearby <a ") + "href=\"event:buildings\">buildings</a>. ") + "</p>"), (((("<p>" + "<span class=\"title\">Lure out Zombies</span>\n") + "That's the stuff. Your <a href=\"event:sniper\">snipers</a> should ") + "make mincemeat from these <a href=\"event:zombies\">living dead</a>. ") + "</p>"), "10 ", (((((("<p>" + "<span class=\"title\">Strengthen Perimeter</span>\n") + "If the <a href=\"event:zombies\">zombies</a> reach the base of a tower ") + "you can kiss it goodbye. Some <a ") + "href=\"event:barricade\">barricades</a> ought to slow the monsters ") + "down. ") + "</p>"), ((("<p>" + "<span class=\"title\">Strengthen Perimeter</span>\n") + "Build a second <a href=\"event:barricade\">barricade</a> next to the first. ") + "</p>"), ((("<p>" + "<span class=\"title\">Strengthen Perimeter</span>\n") + "Build a third <a href=\"event:barricade\">barricade</a>. ") + "</p>"), (((("<p>" + "<span class=\"title\">Strengthen Perimeter</span>\n") + "A fourth <a href=\"event:barricade\">barricade</a> can block off the ") + "street completely. ") + "</p>"), "15 ", ((((((("<p>" + "<span class=\"title\">Ride Out Attack</span>\n") + "Damn, we're running out of time. The <a ") + "href=\"event:timer\">counter</a> in the upper left is all the time ") + "you've got till the next <a href=\"event:zombie_hordes\">horde</a>") + "swarms over the bridges. Sit tight and hope those <a ") + "href=\"event:sniper\">snipers</a> hold the line. ") + "</p>"), "17 ", (((((("<p>" + "<span class=\"title\">Expand Perimeter</span>\n") + "Close call, but we have to keep moving. Destroy a <a ") + "href=\"event:barricade\">barricade</a> so <a ") + "href=\"event:survivors\">survivors</a> can move through to the other ") + "side. ") + "</p>"), (((("<p>" + "<span class=\"title\">Expand Perimeter</span>\n") + "Wait while a <a href=\"survivor\">survivor</a> dismantles the <a ") + "href=\"event:barricade\">barricade</a>. ") + "</p>"), ((((("<p>" + "<span class=\"title\">Expand Perimeter</span>\n") + "It's an awful long walk from here back to our first <a ") + "href=\"event:depot\">depot</a>. Build another one as a forward supply ") + "center. ") + "</p>"), "21 ", ((((((((("<p>" + "<span class=\"title\">Resupply</span>\n") + "We need to get this <a href=\"event:depot\">depot</a> stocked before ") + "those things come back. Build <a href=\"event:workshop\">workshops</a>") + "at the entrances to nearby <a href=\"event:buildings\">buildings</a>") + "to search for <a href=\"event:ammo\">ammo</a>, <a ") + "href=\"event:boards\">boards</a> to build structures, and <a ") + "href=\"event:survivors\">survivors</a> to man stations and transport ") + "<a href=\"event:resources\">resources</a>. ") + "</p>"), ((("<p>" + "<span class=\"title\">Resupply</span>\n") + "That's a good start. Build another <a href=\"event:workshop\">workshop</a>. ") + "</p>"), ((("<p>" + "<span class=\"title\">Resupply</span>\n") + "Build a third <a href=\"event:workshop\">workshop</a>. ") + "</p>"), (((((((("<p>" + "<span class=\"title\">Clear Island of Zombies</span>\n") + "Good work. Now keep expanding. Build more <a ") + "href=\"event:sniper\">sniper towers</a> to <a ") + "href=\"event:noise\">lure</a> out <a href=\"event:zombies\">zombies</a>") + "and clear the streets. Build <a href=\"event:workshop\">workshops</a>") + "at buildings to send survivors in to bolster your resources. <a ") + "href=\"event:goal\">Clear the island</a>. ") + "</p>"), (((((((("<p>" + "<span class=\"title\">Destroy Bridge</span>\n") + "You've secured the island, but as long as that bridge is up, all ") + "you've built could be overrun by a <a ") + "href=\"event:zombie_hordes\">horde</a> at any moment. Build a <a ") + "href=\"event:workshop\">workshop</a> on the <a ") + "href=\"event:charges\">charge</a> to blow the bridge and make this a ") + "permanent sanctuary. ") + "</p>"), (((("<p>" + "<span class=\"title\">Destroy Bridge</span>\n") + "Wait for the <a href=\"event:survivors\">survivor</a> to build the <a ") + "href=\"event:workshop\">workshop</a>. ") + "</p>"), "28 ", (((((("<p>" + "<span class=\"title\">Destroy Bridge</span>\n") + "You're about to be a hero, but don't get cocky. Increase the quota ") + "at the <a href=\"event:workshop\">workshop</a> to send more people to ") + "get those <a href=\"event:charges\">charges</a> set faster; you've got ") + "plenty of <a href=\"event:survivors\">survivors</a> to spare now. ") + "</p>"), (((("<p>" + "<span class=\"title\">Mission Accomplished</span>\n") + "Congrats, soldier: that's one bridge down. Keep it up and there may ") + "just be hope for humanity yet. ") + "</p>")];
public static var towerAlreadyExistsAddSupplyTip:String = (((((("<p>" + "<span class=\"title\">") + "Supply Line Already Exists ") + "</span>\n") + "You cannot add a supply line here because the source depot already ") + "has a supply line to this structure. You may press escape to cancel. ") + "</p>");
public static var barricadeNoBoardTip:String = (((((("<p>" + "<span class=\"title\">") + "Cannot Construct Barricade ") + "</span>\n") + "You cannot construct a barricade from this depot. There are not enough ") + "boards here to create one. ") + "</p>");
public static var buildBarricadeTip:String = (((((("<p>" + "<span class=\"title\">") + "Construct <span class=\"hotkey\">B</span>arricade") + "</span>\n") + "<span class=\"cost\">10 Boards</span>\n") + "Barricades block off streets and slow zombies down. Each board can withstand one zombie hit. Zombies are easier to kill while attacking a barricade. ") + "</p>");
public static var enableFireTip:String = (((((("<p>" + "<span class=\"title\">") + "Allow Sniper to <span class=\"hotkey\">F</span>ire") + "</span>\n") + "This sniper is currently holding fire. Click this ") + "button to allow the sniper to fire at targets within range. ") + "</p>");
public static var barricadeBoardsIncreaseTip:String = ((((((("<p>" + "<span class=\"title\">") + "Increase Board Quota ") + "</span>\n") + "More boards will hold off zombies for longer. Each zombie attack ") + "destroys one board. When this barricade runs out of boards, it will ") + "be destroyed. ") + "</p>");
public static var backgroundSniperTip:String = (((((("<p>" + "<span class=\"title\">") + "Click To Build Sniper ") + "</span>\n") + "If you click here, a survivor will be dispatched to this location ") + "with some boards to build a sniper tower. You may press escape to cancel. ") + "</p>");
public static var waitSaveGame:String = "Saving... ";
public static var barricadeBoardsDecreaseTip:String = ((((((("<p>" + "<span class=\"title\">") + "Decrease Board Quota ") + "</span>\n") + "Fewer boards will make this barricade weaker. Your survivors will ") + "tear down part of the barricade to recover excess boards. Demolish ") + "this barricade by setting the quota to 0. ") + "</p>");
public static var hoverSniperNoSurvivorsTip:String = (((((("<p>" + "<span class=\"title\">") + "Sniper Tower Cannot Fire ") + "</span>\n") + "There are no survivors here to shoot. This sniper tower ") + "is defenseless! ") + "</p>");
public static var noSourceTowerWarning:String = "No Selected Structure ";
public static var placeRubbleWarning:String = "Blocked by Rubble ";
public static var waitEditMap:String = "Starting Map Editor... ";
public static var backgroundBuildFeatureTip:String = ((((((("<p>" + "<span class=\"title\">") + "Special Feature Here ") + "</span>\n") + "There is a special feature here which blocks you from building a ") + "structure. You can build a workshop on this square to use this ") + "feature. You may press escape to cancel. ") + "</p>");
public static var backgroundEmptyEntranceTip:String = ((((((("<p>" + "<span class=\"title\">") + "Building Entrance Here ") + "</span>\n") + "The building entrance here blocks you from constructing a ") + "structure. This building has already been stripped of all useful ") + "resources. You may press escape to cancel. ") + "</p>");
public static var editPolice:String = "Police Station ";
public static var conserveFoodTip:String = ((((((("<p>" + "<span class=\"title\">") + "Begin conserving <span class=\"hotkey\">F</span>ood") + "</span>\n") + "This depot is sending out fast survivors which use up food. Click ") + "here to begin conserving food by sending out survivors who move at ") + "half speed. ") + "</p>");
public static var hoverPlanTip:String = (((((("<p>" + "<span class=\"title\">") + "Planned Structure ") + "</span>\n") + "A survivor is on the way here to build a structure. You can select the ") + "plan to cancel it. ") + "</p>");
public static var barricadeNoSurvivorTip:String = (((((("<p>" + "<span class=\"title\">") + "Cannot Construct Barricade ") + "</span>\n") + "You cannot construct a barricade from this depot. There are no ") + "survivors here to carry the boards needed to create the barricade. ") + "</p>");
public static var towerSameTowerAddSupplyTip:String = ((((("<p>" + "<span class=\"title\">") + "Source Depot ") + "</span>\n") + "A structure can't have a supply line to itself. You may press escape to cancel. ") + "</p>");
public static var musicBarLabel:String = "Music Volume ";
public static var editPlaza:String = "Plaza ";
public static var systemTip:String = ((((("<p>" + "<span class=\"title\">") + "System Menu<span class=\"hotkey\">[Esc]</span>") + "</span>\n") + "Save, set options, restart, or quit. ") + "</p>");
public static var buildingSupermarketText:String = "Supermarket (Food) ";
public static var ammoQuotaTip:String = (((("<p>" + "<span class=\"title\">Ammo Quota</span>\n") + "How much ammo you want to keep on hand here. Snipers use ammo to ") + "shoot zombies. ") + "</p>");
public static var pediaStyleSheet:String = (((((((((((((("p { " + "font-size: 18; ") + "color: #dddddd; ") + "} ") + "a { ") + "font-size: 18; ") + "text-decoration: underline; ") + "color: #aaaaff; ") + "} ") + ".title { ") + "font-size: 24; ") + "font-weight: bold; ") + "text-align: center; ") + "color: #ffffff; ") + "} ");
public static var backgroundEntranceTip:String = ((((((("<p>" + "<span class=\"title\">") + "Building Entrance Here ") + "</span>\n") + "There is a building entrance here which prevents you from ") + "building. You can build a workshop on this square to harvest the ") + "resources in the building. You may press escape to cancel. ") + "</p>");
public static var clickRestartTutorial:String = "<p>You have done something unexpected. Press escape to go to the system menu and select restart map to replay the tutorial from the beginning.</p>";
public static function levelsEdit(_arg1:String):String{
return ((("Level: " + _arg1) + " "));
}
public static function timeLabel(_arg1:String, _arg2:String, _arg3:String):String{
return ((((((("Time: " + _arg1) + ":") + _arg2) + "") + _arg3) + " "));
}
public static function zombiesLeft(_arg1:String):String{
return ((("Zombies Left: " + _arg1) + " "));
}
public static function bridgesLeft(_arg1:String):String{
return ((("Bridges Left: " + _arg1) + " "));
}
public static function survivorsEdit(_arg1:String):String{
return ((("Survivors: " + _arg1) + " "));
}
public static function boardsEdit(_arg1:String):String{
return ((("Boards: " + _arg1) + " "));
}
public static function ammoEdit(_arg1:String):String{
return ((("Ammo: " + _arg1) + " "));
}
public static function buildingText(_arg1:String, _arg2:String, _arg3:String, _arg4:String):String{
return (((((((((((((("<p>" + "") + _arg1) + "\n") + "Zombie Threat: <span class=\"status\">") + _arg2) + "</span>\n") + "Resource Level: <span class=\"status\">") + _arg3) + "</span>\n") + "") + _arg4) + " ") + "</p>"));
}
public static function upgradeSniperTip(_arg1:String):String{
return ((((((((("<p>" + "<span class=\"title\">") + "<span class=\"hotkey\">U</span>pgrade") + "</span>\n") + "<span class=\"cost\">") + _arg1) + " Boards</span>\n") + "Upgrade this sniper tower to increase its range by 50%. ") + "</p>"));
}
public static function zombiesEdit(_arg1:String):String{
return ((("Zombies: " + _arg1) + " "));
}
public static function backgroundBuildSupplyTip(_arg1:String):String{
return (((((((("<p>" + "<span class=\"title\">") + "Need Supply Line ") + "</span>\n") + "You must build within ") + _arg1) + " squares of an existing depot so it can provide supplies. ") + "</p>"));
}
}
}//package ui
Section 211
//Time (ui.Time)
package ui {
import flash.*;
public class Time {
public var seconds:int;
public var tens:int;
public var minutes:int;
public function Time(_arg1:int=0):void{
var _local2:int;
super();
if (!Boot.skip_constructor){
_local2 = Math.floor((_arg1 / Option.fps));
this.minutes = Math.floor((_local2 / 60));
_local2 = (_local2 % 60);
this.tens = Math.floor((_local2 / 10));
this.seconds = (_local2 % 10);
};
}
public function toString():String{
return (Text.timeLabel(Std.string(this.minutes), Std.string(this.tens), Std.string(this.seconds)));
}
}
}//package ui
Section 212
//TimerClip (ui.TimerClip)
package ui {
import flash.display.*;
public dynamic class TimerClip extends MovieClip {
public var isPause:MovieClip;
public var seconds:MovieClip;
public var isPlay:MovieClip;
public var minutes:MovieClip;
public var tens:MovieClip;
public function TimerClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
minutes.stop();
tens.stop();
seconds.stop();
}
}
}//package ui
Section 213
//ToolTip (ui.ToolTip)
package ui {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.*;
public class ToolTip {
protected var framesLeft:int;
protected var clip:ToolTipClip;
protected var shouldShow:Boolean;
protected static var margin:int = 40;
public function ToolTip(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var _local3:StyleSheet;
super();
if (!Boot.skip_constructor){
this.clip = new ToolTipClip();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.stage.addEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.clip.mouseEnabled = false;
this.clip.mouseChildren = false;
this.clip.text.wordWrap = true;
this.clip.text.autoSize = TextFieldAutoSize.LEFT;
_local3 = new StyleSheet();
_local3.parseCSS(Text.toolTipStyleSheet);
this.clip.text.styleSheet = _local3;
this.shouldShow = false;
this.framesLeft = 0;
};
}
public function hide():void{
this.shouldShow = false;
this.clip.visible = false;
}
public function cleanup():void{
this.clip.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.mouseMove);
this.clip.parent.removeChild(this.clip);
}
public function enterFrame():void{
this.framesLeft--;
if (this.framesLeft <= 0){
this.refresh();
};
}
protected function mouseMove(_arg1:MouseEvent):void{
this.framesLeft = Option.toolTipDelay;
}
public function refresh():void{
if (((this.shouldShow) && ((this.framesLeft <= 0)))){
this.clip.visible = true;
} else {
this.clip.visible = false;
};
}
public function show(_arg1:String):void{
var _local2:LayoutGame;
var _local3:Point;
this.shouldShow = true;
if (_arg1 != null){
_local2 = Game.view.layout;
this.clip.text.width = _local2.tipWidth;
this.clip.text.htmlText = _arg1;
_local3 = new Point(Math.floor(this.clip.stage.mouseX), Math.floor(this.clip.stage.mouseY));
this.clip.x = (_local3.x + margin);
if ((this.clip.x + this.clip.text.width) > _local2.screenSize.x){
this.clip.x = ((_local3.x - margin) - this.clip.text.width);
};
this.clip.y = (_local3.y + margin);
if ((this.clip.y + this.clip.text.height) > _local2.screenSize.y){
this.clip.y = ((_local3.y - margin) - this.clip.text.height);
};
this.clip.back.graphics.clear();
this.clip.back.graphics.beginFill(Color.toolTip, Color.textBoxAlpha);
this.clip.back.graphics.drawRoundRect(0, 0, this.clip.text.width, this.clip.text.height, 10, 10);
this.clip.back.graphics.endFill();
} else {
this.shouldShow = false;
};
this.refresh();
}
}
}//package ui
Section 214
//ToolTipClip (ui.ToolTipClip)
package ui {
import flash.display.*;
import flash.text.*;
public dynamic class ToolTipClip extends MovieClip {
public var text:TextField;
public var back:MovieClip;
public function ToolTipClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui
Section 215
//TotalResource (ui.TotalResource)
package ui {
import flash.display.*;
import flash.text.*;
import flash.*;
public class TotalResource {
protected var clip:TotalResourceClip;
public function TotalResource(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
if (!Boot.skip_constructor){
this.clip = new TotalResourceClip();
_arg1.addChild(this.clip);
this.resize(_arg2);
if (Game.settings.isEditor()){
this.clip.visible = false;
};
};
}
public function cleanup():void{
this.clip.parent.removeChild(this.clip);
}
protected function updateText(_arg1:Resource, _arg2:TextField, _arg3:Array):void{
var _local4:int;
_local4 = Lib.resourceToIndex(_arg1);
_arg2.text = Std.string(_arg3[_local4]);
}
public function update(_arg1:Array):void{
this.updateText(Resource.AMMO, this.clip.ammoStock, _arg1);
this.updateText(Resource.BOARDS, this.clip.boardsStock, _arg1);
this.updateText(Resource.SURVIVORS, this.clip.survivorsStock, _arg1);
}
public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.totalResourceOffset.x;
this.clip.y = _arg1.totalResourceOffset.y;
}
}
}//package ui
Section 216
//TotalResourceClip (ui.TotalResourceClip)
package ui {
import flash.display.*;
import flash.text.*;
public dynamic class TotalResourceClip extends MovieClip {
public var ammoStockBackground:MovieClip;
public var survivorsIcon:MovieClip;
public var boardsIcon:MovieClip;
public var ammoIcon:MovieClip;
public var boardsStock:TextField;
public var boardsStockBackground:MovieClip;
public var survivorsStock:TextField;
public var ammoStock:TextField;
public var survivorsStockBackground:MovieClip;
}
}//package ui
Section 217
//TowerSprite (ui.TowerSprite)
package ui {
import flash.*;
public class TowerSprite {
protected var stack:ImageStack;
protected var upgradeOffset:int;
protected var overlay:VirtualImage;
protected var image:VirtualImage;
protected var needs:Array;
protected var towerType:int;
protected static var barricadeCount:int = 3;
protected static var towerFrames:Array = [2, 5, 21, 23];
public function TowerSprite(_arg1:Point=null, _arg2:int=0, _arg3:int=0):void{
var _local4:int;
var _local5:int;
var _local6:int;
super();
if (!Boot.skip_constructor){
this.needs = [];
_local4 = 0;
_local5 = Option.resourceCount;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
this.needs.push(false);
};
if (_arg1 != null){
this.stack = new ImageStack();
this.stack.setPixel(new Point(Lib.cellToPixel(_arg1.x), Lib.cellToPixel(_arg1.y)));
this.image = new VirtualImage(SpriteDisplay.TOWER_LAYER, new Point(0, 0), Label.tower);
this.image.setRotationOffset(_arg3);
this.overlay = new VirtualImage(SpriteDisplay.OVERLAY_LAYER, new Point(0, 0), Label.towerNeed);
this.stack.addImage(this.image);
this.stack.addImage(this.overlay);
this.towerType = _arg2;
this.upgradeOffset = 0;
if (this.towerType == Tower.BARRICADE){
this.upgradeOffset = Lib.rand(barricadeCount);
};
this.update();
};
};
}
public function update():void{
var _local1:int;
_local1 = (towerFrames[this.towerType] + this.upgradeOffset);
this.image.setFrame(_local1);
this.overlay.setFrame(this.getNeedFrame());
this.stack.update();
}
public function changeUpgrade(_arg1:int):void{
this.upgradeOffset = _arg1;
this.update();
}
protected function getNeedFrame():int{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:Array;
var _local5:Resource;
var _local6:int;
_local1 = 1;
_local2 = 1;
_local3 = 0;
_local4 = [Resource.AMMO, Resource.BOARDS, Resource.SURVIVORS];
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local6 = Lib.resourceToIndex(_local5);
if (this.needs[_local6]){
_local1 = (_local1 + _local2);
};
_local2 = (_local2 * 2);
};
return (_local1);
}
public function changeColor(_arg1:ShadowColor):void{
this.image.setOverlayColor(_arg1);
}
public function upgrade():void{
this.upgradeOffset++;
this.update();
}
public function addNeed(_arg1:Resource):void{
var _local2:int;
_local2 = Lib.resourceToIndex(_arg1);
if (this.needs[_local2] == false){
this.needs[_local2] = true;
this.update();
};
}
public function rotate(_arg1:int):void{
this.image.setRotationOffset(_arg1);
}
public function goto(_arg1:Point):void{
this.stack.setPixel(_arg1);
}
public function cleanup():void{
this.stack.cleanup();
}
public function changeCanOperate(_arg1:Boolean):void{
this.overlay.changeOperate(_arg1);
}
public function changeSupplyTarget(_arg1:Boolean):void{
this.overlay.changeSupplyTarget(_arg1);
}
public function removeNeed(_arg1:Resource):void{
var _local2:int;
_local2 = Lib.resourceToIndex(_arg1);
if (this.needs[_local2] == true){
this.needs[_local2] = false;
this.update();
};
}
public function save(){
return ({stack:this.stack.save(), image:this.image.save(), overlay:this.overlay.save(), towerType:this.towerType, upgradeOffset:this.upgradeOffset, needs:this.needs.copy()});
}
public static function saveS(_arg1:TowerSprite){
return (_arg1.save());
}
public static function load(_arg1):TowerSprite{
var _local2:TowerSprite;
var _local3:int;
var _local4:int;
var _local5:int;
_local2 = new TowerSprite(null, 0, 0);
_local2.stack = ImageStack.load(_arg1.stack);
_local2.image = VirtualImage.load(_arg1.image);
_local2.overlay = VirtualImage.load(_arg1.overlay);
_local2.stack.addImage(_local2.image);
_local2.stack.addImage(_local2.overlay);
_local2.towerType = _arg1.towerType;
_local2.upgradeOffset = _arg1.upgradeOffset;
_local3 = 0;
_local4 = Option.resourceCount;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local2.needs[_local5] = _arg1.needs[_local5];
};
_local2.update();
return (_local2);
}
}
}//package ui
Section 218
//TutorialArrowClip (ui.TutorialArrowClip)
package ui {
import flash.display.*;
public dynamic class TutorialArrowClip extends MovieClip {
public var tail:MovieClip;
}
}//package ui
Section 219
//TutorialClip (ui.TutorialClip)
package ui {
import flash.display.*;
import flash.text.*;
public dynamic class TutorialClip extends MovieClip {
public var arrow:TutorialArrowClip;
public var next:MovieClip;
public var text:TextField;
public var back:MovieClip;
public function TutorialClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package ui
Section 220
//Util (ui.Util)
package ui {
import flash.display.*;
import logic.*;
import flash.text.*;
public class Util {
public static var SIZE_MAX_CHARS:int = 3;
public static var NAME_MAX_CHARS:int = 100;
public static var difficultyText:Array = [Text.tutorialText, Text.noviceText, Text.veteranText, Text.expertText, Text.quartermasterText];
public static function resizeText(_arg1:TextField, _arg2:Point, _arg3:Point):void{
_arg1.x = _arg2.x;
_arg1.y = _arg2.y;
_arg1.width = _arg3.x;
_arg1.height = _arg3.y;
}
public static function fleeClick():void{
var _local1:Point;
_local1 = Game.select.getSelected();
if (_local1 != null){
Game.script.trigger(Script.CLICK_FLEE, _local1);
Game.map.getCell(_local1.x, _local1.y).fleeTower();
Main.sound.play(SoundPlayer.TOWER_ABANDON);
Game.update.changeSelect(null);
};
}
public static function success():void{
Main.sound.play(SoundPlayer.BUTTON_SUCCESS);
}
public static function createResourceBars(_arg1:DisplayObjectContainer, _arg2:Point, _arg3:Point, _arg4:Point, _arg5:Array, _arg6:Function, _arg7:Function, _arg8:LayoutGame):Array{
var _local9:Array;
var _local10:Point;
var _local11:int;
var _local12:Resource;
_local9 = [];
_local10 = _arg2.clone();
_local11 = 0;
while (_local11 < _arg5.length) {
_local12 = _arg5[_local11];
_local11++;
_local9.push(new ResourceBar(_arg1, _local12, _local10.x, _local10.y, _arg3.x, _arg6, _arg7, _arg8));
_local10.y = (_local10.y + _arg4.y);
};
return (_local9);
}
public static function showResourceBars(_arg1:Array):void{
var _local2:int;
var _local3:ResourceBar;
_local2 = 0;
while (_local2 < _arg1.length) {
_local3 = _arg1[_local2];
_local2++;
showOneResourceBar(_local3);
};
}
public static function failure():void{
Main.sound.play(SoundPlayer.BUTTON_FAILED);
}
public static function homeInCount(_arg1:int, _arg2:int, _arg3:int, _arg4:int):int{
var _local5:int;
var _local6:int;
_local5 = angleDistance(_arg3, _arg4);
_local6 = Math.floor((_local5 / _arg2));
return (Math.floor(Math.min(_arg1, _local6)));
}
public static function centerMenu(_arg1:Point, _arg2:Point):Point{
return (new Point(Math.floor(((_arg2.x - _arg1.x) / 2)), Math.floor(((_arg2.y - _arg1.y) / 2))));
}
public static function attachButton(_arg1:String):SimpleButton{
var _local2:Class;
_local2 = Type.resolveClass(_arg1);
return (Type.createInstance(_local2, []));
}
public static function noTip():String{
return (null);
}
public static function createTitleField(_arg1:DisplayObjectContainer, _arg2:Point, _arg3:Point):TextField{
var _local4:TextField;
var _local5:TextFormat;
_local4 = createTextField(_arg1, _arg2, _arg3);
_local5 = createTextFormat();
_local5.color = Color.menuTitle;
_local5.size = 24;
_local5.align = TextFormatAlign.CENTER;
_local4.defaultTextFormat = _local5;
return (_local4);
}
public static function alignBottom(_arg1:DisplayObject, _arg2:Point):void{
_arg1.y = ((_arg2.y - _arg1.height) - 5);
}
public static function createTextFormat():TextFormat{
var _local1:TextFormat;
_local1 = new TextFormat();
_local1.align = TextFormatAlign.LEFT;
return (_local1);
}
public static function towerMenuHotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
_local3 = true;
if ((((_arg2 == Keyboard.deleteCode)) || ((_arg2 == Keyboard.backSpaceCode)))){
fleeClick();
success();
} else {
_local3 = false;
};
return (_local3);
}
public static function homeIn(_arg1:int, _arg2:int, _arg3:int, _arg4:int):int{
var _local5:int;
var _local6:int;
_local5 = _arg3;
_local6 = angleDistance(_arg3, _arg4);
if (_local6 >= (_arg1 * _arg2)){
if (angleDistance((_arg3 + 1), _arg4) < _local6){
_local5 = (_arg3 + (_arg1 * _arg2));
} else {
_local5 = (_arg3 - (_arg1 * _arg2));
};
} else {
_local5 = _arg4;
};
_local6 = angleDistance(_local5, _arg4);
if (_local6 < _arg2){
_local5 = _arg4;
};
return (_local5);
}
public static function alignRight(_arg1:DisplayObject, _arg2:Point):void{
_arg1.x = ((_arg2.x - _arg1.width) - 5);
}
public static function angleDistance(_arg1:int, _arg2:int):int{
var _local3:int;
var _local4:int;
_local3 = ((_arg1 + 360) % 360);
_local4 = ((_arg2 + 360) % 360);
return (Math.floor(Math.min(Lib.intAbs((_local3 - _local4)), (360 - Lib.intAbs((_local3 - _local4))))));
}
public static function setupInputText(_arg1:TextField, _arg2:String=null, _arg3=null):void{
_arg1.selectable = true;
_arg1.autoSize = TextFieldAutoSize.NONE;
_arg1.type = TextFieldType.INPUT;
_arg1.mouseEnabled = true;
_arg1.multiline = false;
_arg1.wordWrap = false;
_arg1.alwaysShowSelection = true;
if (_arg2 != null){
_arg1.restrict = _arg2;
};
if (_arg3 != null){
_arg1.maxChars = _arg3;
};
}
public static function scaleToFit(_arg1:DisplayObject, _arg2:Point):void{
var _local3:Number;
var _local4:Number;
_local3 = (_arg2.x / 640);
_local4 = (_arg2.y / 480);
if (_local3 >= _local4){
_arg1.scaleX = _local4;
_arg1.scaleY = _local4;
} else {
_arg1.scaleX = _local3;
_arg1.scaleY = _local3;
};
}
public static function centerHorizontally(_arg1:DisplayObject, _arg2:Point):void{
_arg1.x = ((_arg2.x - _arg1.width) / 2);
}
public static function alignLabel(_arg1:DisplayObject, _arg2:TextField):void{
_arg2.x = (_arg1.x + 34.6);
_arg2.y = (_arg1.y + 6.7);
}
public static function createTextField(_arg1:DisplayObjectContainer, _arg2:Point, _arg3:Point):TextField{
var _local4:TextField;
_local4 = new TextField();
_arg1.addChild(_local4);
resizeText(_local4, _arg2, _arg3);
_local4.htmlText = "";
_local4.type = TextFieldType.DYNAMIC;
_local4.selectable = false;
_local4.wordWrap = true;
_local4.autoSize = TextFieldAutoSize.LEFT;
_local4.embedFonts = true;
_local4.mouseEnabled = false;
_local4.antiAliasType = AntiAliasType.ADVANCED;
_local4.defaultTextFormat = createTextFormat();
return (_local4);
}
public static function minSize(_arg1:Point):Point{
return (new Point(Math.floor(Math.min(_arg1.x, ((_arg1.y * 4) / 3))), Math.floor(Math.min(((_arg1.x * 3) / 4), _arg1.y))));
}
public static function drawBase(_arg1:Graphics, _arg2:Point, _arg3:Point, _arg4:int, _arg5:Number):void{
_arg1.clear();
_arg1.beginFill(_arg4, _arg5);
_arg1.drawRect(_arg2.x, _arg2.y, _arg3.x, _arg3.y);
_arg1.endFill();
}
public static function fleeHover():String{
return (Text.fleeTip);
}
public static function centerVertically(_arg1:DisplayObject, _arg2:Point):void{
_arg1.y = ((_arg2.y - _arg1.height) / 2);
}
public static function showOneResourceBar(_arg1:ResourceBar):void{
var _local2:Resource;
var _local3:Point;
var _local4:Tower;
var _local5:int;
_local2 = _arg1.getPayload();
_local3 = Game.select.getSelected();
if (((!((_local3 == null))) && (Game.map.getCell(_local3.x, _local3.y).hasTower()))){
_local4 = Game.map.getCell(_local3.x, _local3.y).getTower();
_local5 = Game.map.getCell(_local3.x, _local3.y).getRubbleCount(_local2);
_arg1.show(_local4.countResource(_local2), _local4.countIncoming(_local2), _local4.countReserve(_local2), _local5);
} else {
throw (new Error("ResourceBar shown when there is no valid tower."));
};
}
}
}//package ui
Section 221
//Wave1Music (ui.Wave1Music)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class Wave1Music extends Sound {
public function Wave1Music(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 222
//Wave2Music (ui.Wave2Music)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class Wave2Music extends Sound {
public function Wave2Music(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 223
//Wave3Music (ui.Wave3Music)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class Wave3Music extends Sound {
public function Wave3Music(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 224
//WaveEndMusic (ui.WaveEndMusic)
package ui {
import flash.net.*;
import flash.media.*;
import flash.*;
public class WaveEndMusic extends Sound {
public function WaveEndMusic(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package ui
Section 225
//View (ui.View)
package ui {
import flash.display.*;
import ui.menu.*;
import flash.*;
public class View {
public var scrollMenu:ScrollMenu;
public var barSource:BitmapData;
public var fpsCounter:FpsCounter;
public var frameAdvance:FrameAdvance;
public var sideMenu:SideBar;
public var mini:MiniMap;
public var imageList:List;
public var centerMenu:CenterMenu;
public var toolTip:ToolTip;
public var spawner:SpawnDisplay;
public var layout:LayoutGame;
public var warning:FailWarning;
public var quickMenu:Quick;
public var buildMenu:BuildMenu;
public var window:Window;
public var totals:TotalResource;
public var scriptSprite:ScriptView;
public var explosions:List;
public function View(_arg1:DisplayObjectContainer=null):void{
if (!Boot.skip_constructor){
this.frameAdvance = new FrameAdvance();
this.imageList = new List();
this.initBarSource();
this.layout = new LayoutGame(_arg1.stage.stageWidth, _arg1.stage.stageHeight, Game.settings);
this.window = new Window(_arg1, this.layout);
this.explosions = new List();
};
}
public function initMenus(_arg1:DisplayObjectContainer):void{
this.spawner = new SpawnDisplay(_arg1, this.layout);
this.mini = new MiniMap(_arg1, this.layout);
this.buildMenu = new BuildMenu(_arg1, this.layout);
this.quickMenu = new Quick(_arg1, this.layout);
this.sideMenu = new SideBar(_arg1, this.layout);
this.totals = new TotalResource(_arg1, this.layout);
this.scrollMenu = new ScrollMenu(_arg1, this.layout.screenSize);
this.scriptSprite = new ScriptView(_arg1, this.layout);
this.toolTip = new ToolTip(_arg1, this.layout);
this.warning = new FailWarning(_arg1, this.layout.screenSize);
this.centerMenu = new CenterMenu(_arg1, this.layout);
this.fpsCounter = new FpsCounter(_arg1, this.layout);
Main.key.addHandler(this.centerMenu.hotkey);
Main.key.addHandler(this.buildMenu.hotkey);
if (!Game.settings.isEditor()){
Main.key.addHandler(this.sideMenu.hotkey);
Main.key.addHandler(this.quickMenu.hotkey);
};
Main.key.addHandler(this.scrollMenu.hotkey);
Main.key.addHandler(this.hotkey);
}
protected function cleanupBarSource():void{
this.barSource.dispose();
this.barSource = null;
}
public function changeSelect(_arg1:Point):void{
var _local2:MapCell;
if (_arg1 == null){
Game.update.changeSelect(null);
} else {
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
if (((_local2.hasTower()) || (_local2.hasShadow()))){
if (((!(Game.settings.isEditor())) || (Point.isEqual(Game.editor.getSelectedSquare(), _arg1)))){
Game.update.changeSelect(_arg1);
} else {
Game.update.changeSelect(null);
};
} else {
Game.update.changeSelect(null);
};
};
}
public function updateImageList():void{
var _local1:*;
var _local2:ImageStack;
_local1 = this.imageList.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local2.update();
};
}
protected function initBarSource():void{
var _local1:MovieClip;
var _local2:int;
var _local3:int;
_local1 = Workaround.attach("resourcetiles");
_local2 = Lib.cellToPixel(3);
_local3 = Lib.cellToPixel(6);
this.barSource = new BitmapData(_local2, _local3, true, 0);
this.barSource.draw(_local1);
_local1 = null;
}
public function cleanup():void{
Main.key.clearHandlers();
this.fpsCounter.cleanup();
this.fpsCounter = null;
this.centerMenu.cleanup();
this.centerMenu = null;
this.warning.cleanup();
this.warning = null;
this.toolTip.cleanup();
this.toolTip = null;
this.scriptSprite.cleanup();
this.scriptSprite = null;
this.scrollMenu.cleanup();
this.scrollMenu = null;
this.totals.cleanup();
this.totals = null;
this.sideMenu.cleanup();
this.sideMenu = null;
this.quickMenu.cleanup();
this.quickMenu = null;
this.buildMenu.cleanup();
this.buildMenu = null;
this.mini.cleanup();
this.mini = null;
this.spawner.cleanup();
this.spawner = null;
this.window.cleanup();
this.window = null;
this.layout = null;
this.cleanupBarSource();
}
public function hotkey(_arg1:String, _arg2:int):Boolean{
var _local3:Boolean;
var _local4:Point;
var _local5:Point;
_local3 = true;
if (_arg2 == Keyboard.escapeCode){
Util.success();
if (Game.select.getSelected() != null){
Game.update.changeSelect(null);
} else {
this.centerMenu.changeState(CenterMenu.SYSTEM);
};
} else {
if (_arg1 == "`"){
Game.toggleFast();
} else {
if (_arg1 == ";"){
_local4 = new Point(Math.floor(Main.getRoot().stage.mouseX), Math.floor(Main.getRoot().stage.mouseY));
_local5 = Game.view.window.toAbsolute(Lib.pixelToCell(_local4.x), Lib.pixelToCell(_local4.y));
Lib.trace(("Mouse Pos: " + _local4.toString()));
Lib.trace(("Map Pos: " + _local5.toString()));
} else {
_local3 = false;
};
};
};
return (_local3);
}
public function resize():void{
this.toolTip.hide();
this.scriptSprite.resize(this.layout);
this.mini.resize(this.layout);
this.window.resize(this.layout);
this.spawner.resize(this.layout);
this.quickMenu.resize(this.layout);
this.sideMenu.resize(this.layout);
this.buildMenu.resize(this.layout);
this.centerMenu.resize(this.layout);
this.warning.resize(this.layout.screenSize);
this.totals.resize(this.layout);
this.scrollMenu.resize(this.layout.screenSize);
}
public function enterFrame():void{
this.fpsCounter.enterFrame();
this.spawner.step();
if (!Game.pause.isPaused()){
this.frameAdvance.fixedStep();
};
this.toolTip.enterFrame();
this.sideMenu.enterFrame();
this.warning.enterFrame();
this.scrollMenu.enterFrame();
}
}
}//package ui
Section 226
//Window (ui.Window)
package ui {
import flash.display.*;
import flash.events.*;
import logic.*;
import flash.geom.*;
import flash.*;
public class Window {
protected var tileStatus:Shape;
protected var showingRanges:Boolean;
protected var tiles:Bitmap;
protected var offset:Point;
protected var isDragging:Boolean;
protected var source:BitmapData;
protected var mouse:Point;
protected var background:DisplayObjectContainer;
protected var startDrag:Point;
protected static var start:Point = new Point(Math.floor((Option.cellPixels / 2)), Math.floor((Option.cellPixels / 2)));
protected static var second:Array = [new Point(-1, 1), new Point(-1, -1), new Point(-1, -1), new Point(1, -1)];
protected static var third:Array = [new Point(1, 1), new Point(1, -1), new Point(-1, 1), new Point(1, 1)];
public function Window(_arg1:DisplayObjectContainer=null, _arg2:LayoutGame=null):void{
var _local3:Point;
var _local4:BitmapData;
var _local5:MovieClip;
super();
if (!Boot.skip_constructor){
this.offset = new Point(0, 0);
this.background = new Sprite();
this.background.mouseChildren = false;
_arg1.addChild(this.background);
this.background.visible = true;
this.background.x = _arg2.mapOffset.x;
this.background.y = _arg2.mapOffset.y;
this.background.cacheAsBitmap = true;
this.background.addEventListener(MouseEvent.MOUSE_DOWN, this.press);
this.background.addEventListener(MouseEvent.MOUSE_UP, this.release);
this.background.addEventListener(MouseEvent.MOUSE_MOVE, this.hoverMove);
_local3 = Game.settings.getSize().toPixel();
_local4 = new BitmapData(_local3.x, _local3.y, false, 0xFFFFFF);
this.tiles = new Bitmap(_local4);
this.background.addChild(this.tiles);
this.tileStatus = new Shape();
this.background.addChild(this.tileStatus);
this.tileStatus.visible = true;
this.tileStatus.x = _arg2.mapOffset.x;
this.tileStatus.y = _arg2.mapOffset.y;
_local5 = Workaround.attach(Label.background);
this.source = new BitmapData(Lib.cellToPixel(Tile.X_COUNT), Lib.cellToPixel(Tile.Y_COUNT), true, 0);
this.source.draw(_local5);
this.isDragging = false;
this.startDrag = null;
this.mouse = null;
this.showingRanges = false;
};
}
public function press(_arg1:MouseEvent):void{
this.isDragging = false;
this.mouse = new Point(Math.floor(_arg1.localX), Math.floor(_arg1.localY));
this.startDrag = this.toAbsolute(Lib.pixelToCell(this.mouse.x), Lib.pixelToCell(this.mouse.y));
this.background.stage.addEventListener(MouseEvent.MOUSE_MOVE, this.dragMove);
if (Game.editor != null){
Game.editor.beginDrag(this.startDrag);
};
}
public function getClip():DisplayObjectContainer{
return (this.background);
}
public function getOffset():Point{
return (this.offset);
}
public function toggleRanges():void{
if (this.showingRanges){
Game.sprites.clearAllVisibility();
} else {
Game.sprites.showAllVisibility();
};
this.showingRanges = !(this.showingRanges);
Game.view.quickMenu.updateView(this.showingRanges);
}
public function updateCell(_arg1:int, _arg2:int):void{
this.refresh();
}
protected function updateRect(_arg1:Rectangle, _arg2:int):void{
_arg1.x = Lib.cellToPixel((_arg2 % Tile.X_COUNT));
_arg1.y = Lib.cellToPixel(Math.floor((_arg2 / Tile.X_COUNT)));
}
public function release(_arg1:MouseEvent):void{
var _local2:Point;
var _local3:Point;
var _local4:Point;
_local2 = new Point(Math.floor(_arg1.localX), Math.floor(_arg1.localY));
_local3 = new Point(Lib.pixelToCell(_local2.x), Lib.pixelToCell(_local2.y));
_local4 = this.toAbsolute(_local3.x, _local3.y);
if (((!(this.isDragging)) && (!((this.startDrag == null))))){
this.startDrag = null;
if (Game.editor != null){
Game.editor.clickSquare(_local4);
};
if (((Game.map.getCell(_local4.x, _local4.y).hasTower()) || (Game.map.getCell(_local4.x, _local4.y).hasShadow()))){
Game.view.buildMenu.clickTower(_local4);
} else {
Game.view.buildMenu.clickBackground(_local4);
};
} else {
if (((this.isDragging) && (!((this.startDrag == null))))){
this.isDragging = false;
this.startDrag = null;
if (Game.editor != null){
Game.editor.endDrag(_local4);
};
};
};
this.background.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragMove);
}
public function fillBitmap():void{
this.fillRegion(new Point(0, 0), Game.map.size());
}
public function moveWindowCenter(_arg1:int, _arg2:int):void{
this.moveWindow((_arg1 - Game.view.layout.windowCenter.x), (_arg2 - Game.view.layout.windowCenter.y));
}
public function fillRegion(_arg1:Point, _arg2:Point):void{
this.fillBitmapRegion(this.tiles, new Point(0, 0), _arg1, _arg2, true);
}
public function toAbsolute(_arg1:int, _arg2:int):Point{
return (new Point((_arg1 + this.offset.x), (_arg2 + this.offset.y)));
}
public function getCenter():Point{
var _local1:LayoutGame;
_local1 = Game.view.layout;
return (new Point((this.offset.x + Math.floor((_local1.windowSize.x / 2))), (this.offset.y + Math.floor((_local1.windowSize.y / 2)))));
}
public function refresh():void{
var _local1:LayoutGame;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:Point;
var _local9:MapCell;
var _local10:int;
_local1 = Game.view.layout;
this.tileStatus.graphics.clear();
_local2 = 0;
_local3 = _local1.windowSize.y;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local5 = 0;
_local6 = _local1.windowSize.x;
while (_local5 < _local6) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp2;
_local8 = this.toAbsolute(_local7, _local4);
_local9 = Game.map.getCell(_local8.x, _local8.y);
if (_local9.getBackground() == BackgroundType.ENTRANCE){
if (_local9.getBuilding().getZombieCount() > 0){
_local10 = Lib.weightedIndex(_local9.getBuilding().getZombieCount(), Option.zombieBuildingWeights);
this.updateCellStatus(_local7, _local4, Option.zombieBuildingColor[_local10], Option.zombieBuildingOpacity[_local10]);
} else {
if (_local9.getBuilding().getSalvage().getTotalCount() > 0){
this.updateCellStatus(_local7, _local4, Option.salvageBuildingColor, Option.salvageBuildingOpacity);
};
};
};
};
};
}
protected function updateCellStatus(_arg1:int, _arg2:int, _arg3:int, _arg4:Number):void{
var _local5:int;
var _local6:int;
var _local7:Point;
var _local8:Building;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:int;
_local5 = Lib.cellToPixel(_arg2);
_local6 = Lib.cellToPixel(_arg1);
_local7 = this.toAbsolute(_arg1, _arg2);
_local8 = Game.map.getCell(_local7.x, _local7.y).getBuilding();
if (_local8 != null){
_local9 = Lib.directionToIndex(_local8.getEntranceDir());
_local10 = (Option.cellPixels - 16);
_local11 = (Option.cellPixels - 16);
_local12 = 0;
_local13 = 0;
this.tileStatus.graphics.lineStyle(2, 0);
this.tileStatus.graphics.beginFill(_arg3);
this.tileStatus.graphics.moveTo((start.x + _local6), (start.y + _local5));
_local12 = (((second[_local9].x * _local10) + start.x) + _local6);
_local13 = (((second[_local9].y * _local11) + start.y) + _local5);
this.tileStatus.graphics.lineTo(_local12, _local13);
_local12 = (((third[_local9].x * _local10) + start.x) + _local6);
_local13 = (((third[_local9].y * _local11) + start.y) + _local5);
this.tileStatus.graphics.lineTo(_local12, _local13);
this.tileStatus.graphics.lineTo((start.x + _local6), (start.y + _local5));
this.tileStatus.graphics.endFill();
};
}
public function getDir(_arg1:Point):Direction{
var _local2:Point;
_local2 = Game.view.layout.windowSize;
if (_arg1.x < this.offset.x){
return (Direction.WEST);
};
if (_arg1.y < this.offset.y){
return (Direction.NORTH);
};
if (_arg1.x >= (this.offset.x + _local2.x)){
return (Direction.EAST);
};
if (_arg1.y >= (this.offset.y + _local2.y)){
return (Direction.SOUTH);
};
return (null);
}
public function moveWindow(_arg1:int, _arg2:int):void{
var _local3:LayoutGame;
var _local4:Point;
var _local5:Point;
var _local6:*;
var _local7:Explosion;
_local3 = Game.view.layout;
_local4 = new Point((Game.map.sizeX() - _local3.windowSize.x), (Game.map.sizeY() - _local3.windowSize.y));
_local5 = new Point(_arg1, _arg2);
if (_local5.x < 0){
_local5.x = 0;
};
if (_local5.x > _local4.x){
_local5.x = _local4.x;
};
if (_local5.y < 0){
_local5.y = 0;
};
if (_local5.y > _local4.y){
_local5.y = _local4.y;
};
this.offset = _local5;
this.tiles.scrollRect = new Rectangle(Lib.cellToPixel(this.offset.x), Lib.cellToPixel(this.offset.y), _local3.mapSize.x, _local3.mapSize.y);
Game.view.mini.moveWindow(_local5.x, _local5.y);
Game.view.updateImageList();
Game.script.trigger(Script.MOVE_WINDOW, this.offset);
_local6 = Game.view.explosions.iterator();
while (_local6.hasNext()) {
_local7 = _local6.next();
_local7.moveWindow();
};
Game.select.update();
if (Game.editor != null){
Game.editor.updateDrag();
Game.editor.updateSelect();
};
this.refresh();
this.updateRanges();
}
public function cleanup():void{
this.source.dispose();
this.source = null;
this.tileStatus.parent.removeChild(this.tileStatus);
this.tileStatus = null;
this.tiles.parent.removeChild(this.tiles);
this.tiles.bitmapData.dispose();
this.background.removeEventListener(MouseEvent.MOUSE_DOWN, this.press);
this.background.removeEventListener(MouseEvent.MOUSE_UP, this.release);
this.background.removeEventListener(MouseEvent.MOUSE_MOVE, this.hoverMove);
this.background.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragMove);
this.background.parent.removeChild(this.background);
this.background = null;
}
public function dragMove(_arg1:MouseEvent):void{
var _local2:Point;
if (!_arg1.buttonDown){
this.release(_arg1);
} else {
this.mouse.x = Math.floor(_arg1.stageX);
this.mouse.y = Math.floor(_arg1.stageY);
_local2 = this.toAbsolute(Lib.pixelToCell(this.mouse.x), Lib.pixelToCell(this.mouse.y));
if (((this.isDragging) || (!(Point.isEqual(this.startDrag, _local2))))){
this.isDragging = true;
if (!Game.settings.isEditor()){
this.moveWindow(((this.offset.x - _local2.x) + this.startDrag.x), ((this.offset.y - _local2.y) + this.startDrag.y));
};
if (Game.editor != null){
Game.editor.updateDrag(_local2);
};
this.startDrag = this.toAbsolute(Lib.pixelToCell(this.mouse.x), Lib.pixelToCell(this.mouse.y));
};
};
}
public function fillBitmapRegion(_arg1:Bitmap, _arg2:Point, _arg3:Point, _arg4:Point, _arg5:Boolean):void{
var _local6:Rectangle;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:MapCell;
var _local14:*;
var _local15:int;
_local6 = new Rectangle(0, 0, Option.cellPixels, Option.cellPixels);
_local6.width = Option.cellPixels;
_local6.height = Option.cellPixels;
_local7 = _arg3.y;
_local8 = _arg4.y;
while (_local7 < _local8) {
var _temp1 = _local7;
_local7 = (_local7 + 1);
_local9 = _temp1;
_local10 = _arg3.x;
_local11 = _arg4.x;
while (_local10 < _local11) {
var _temp2 = _local10;
_local10 = (_local10 + 1);
_local12 = _temp2;
_local13 = Game.map.getCell(_local12, _local9);
_local14 = _local13.getTiles().iterator();
while (_local14.hasNext()) {
_local15 = _local14.next();
if (((_arg5) || ((_local15 == _local13.getTiles().last())))){
this.updateRect(_local6, _local15);
Workaround.copyPixels(_arg1, this.source, _local6, Lib.cellToPixel((_local12 - _arg2.x)), Lib.cellToPixel((_local9 - _arg2.y)));
};
};
};
};
}
public function toRelative(_arg1:int, _arg2:int):Point{
return (new Point((_arg1 - this.offset.x), (_arg2 - this.offset.y)));
}
public function fillSolid(_arg1:Point, _arg2:Point, _arg3:int):void{
Workaround.fillRect(this.tiles, (_arg1.x + 1), (_arg1.y + 1), (_arg2.x - 1), (_arg2.y - 1), _arg3);
}
public function scrollWindow(_arg1:Direction, _arg2:int):void{
var _local3:enum;
_local3 = _arg1;
switch (_local3.index){
case 0:
this.moveWindow(this.offset.x, (this.offset.y - _arg2));
break;
case 1:
this.moveWindow(this.offset.x, (this.offset.y + _arg2));
break;
case 2:
this.moveWindow((this.offset.x + _arg2), this.offset.y);
break;
case 3:
this.moveWindow((this.offset.x - _arg2), this.offset.y);
break;
};
}
public function hoverMove(_arg1:MouseEvent):void{
var _local2:int;
var _local3:int;
var _local4:Point;
_local2 = Math.floor(_arg1.stageX);
_local3 = Math.floor(_arg1.stageY);
_local4 = this.toAbsolute(Lib.pixelToCell(_local2), Lib.pixelToCell(_local3));
if ((((_local2 < (Game.view.layout.mapOffset.x + Game.view.layout.mapSize.x))) && ((_local3 < (Game.view.layout.mapOffset.y + Game.view.layout.mapSize.y))))){
if (Game.editor != null){
Game.editor.hover(_local4);
};
if (Game.map.getCell(_local4.x, _local4.y).getTower() != null){
Game.view.buildMenu.hoverTower(_local4);
} else {
Game.view.buildMenu.hoverBackground(_local4);
};
};
}
public function isShowingRanges():Boolean{
return (this.showingRanges);
}
public function resize(_arg1:LayoutGame):void{
this.background.x = _arg1.mapOffset.x;
this.background.y = _arg1.mapOffset.y;
this.tileStatus.x = _arg1.mapOffset.x;
this.tileStatus.y = _arg1.mapOffset.y;
this.moveWindow(this.offset.x, this.offset.y);
}
public function fillEdit(_arg1:Point, _arg2:Point):void{
var _local3:Point;
var _local4:Point;
this.fillRegion(_arg1, _arg2);
_local3 = _arg1.toPixel();
_local4 = _arg2.toPixel();
Workaround.fillRect(this.tiles, _local3.x, _local3.y, _local4.x, (_local3.y + 1), Color.editEmpty);
Workaround.fillRect(this.tiles, _local3.x, _local3.y, (_local3.x + 1), _local4.y, Color.editEmpty);
Workaround.fillRect(this.tiles, _local3.x, (_local4.y - 1), _local4.x, _local4.y, Color.editEmpty);
Workaround.fillRect(this.tiles, (_local4.x - 1), _local3.y, _local4.x, _local4.y, Color.editEmpty);
}
public function updateRanges():void{
if (this.showingRanges){
Game.sprites.showAllVisibility();
};
}
}
}//package ui
Section 227
//VirtualImage (ui.VirtualImage)
package ui {
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import flash.*;
public class VirtualImage {
protected var frameChanged:Boolean;
protected var scaleChanged:Boolean;
protected var canOperate:Boolean;
protected var centerChanged:Boolean;
protected var glowFilterChanged:Boolean;
protected var isSupplyTarget:Boolean;
protected var rotationOffset:int;
protected var linkage:String;
protected var scale:Number;
protected var overlayChanged:Boolean;
protected var layer:int;
protected var positionChanged:Boolean;
protected var windowPos:Point;
protected var center:Point;
protected var rotationChanged:Boolean;
protected var image:CenteredImage;
protected var isPermanent:Boolean;
protected var alpha:Number;
protected var pos:Point;
protected var glowFilter:GlowFilter;
protected var visibleChanged:Boolean;
protected var frame:int;
protected var visible:Boolean;
protected var overlayColor:ShadowColor;
protected var alphaChanged:Boolean;
protected var rotation:int;
protected static var supplyCenterLength:int = 32;
protected static var supplySideLength:int = 8;
protected static var noShootRadius:int = 10;
protected static var noShootThickness:int = 4;
protected static var supplyArrowAngle:Number = 0.628318530717959;
protected static var supplyArrowThickness:int = 5;
public function VirtualImage(_arg1:int=0, _arg2:Point=null, _arg3:String=null):void{
if (!Boot.skip_constructor){
this.image = null;
this.layer = _arg1;
this.frame = 1;
this.linkage = _arg3;
this.frameChanged = true;
this.scale = 1;
this.scaleChanged = true;
this.overlayColor = ShadowColor.NORMAL;
this.canOperate = true;
this.isSupplyTarget = false;
this.overlayChanged = true;
this.center = _arg2.clone();
this.centerChanged = true;
this.pos = new Point(0, 0);
this.windowPos = null;
this.positionChanged = true;
this.rotation = 0;
this.rotationOffset = 0;
this.rotationChanged = true;
this.alpha = 1;
this.alphaChanged = true;
this.visible = true;
this.visibleChanged = true;
this.glowFilter = null;
this.glowFilterChanged = true;
this.isPermanent = false;
};
}
public function setRotation(_arg1:int):void{
if (this.rotation != _arg1){
this.rotation = _arg1;
this.rotationChanged = true;
};
}
protected function drawShadow():void{
var _local1:ColorTransform;
var _local2:enum;
_local1 = null;
_local2 = this.overlayColor;
switch (_local2.index){
case 0:
_local1 = Color.normalTransform;
break;
case 1:
_local1 = Color.allowTransform;
break;
case 2:
_local1 = Color.denyTransform;
break;
case 3:
_local1 = Color.plannedTransform;
break;
};
this.image.setTransform(_local1);
}
public function setScale(_arg1:Number):void{
if (this.scale != _arg1){
this.scale = _arg1;
this.scaleChanged = true;
};
}
public function advanceFrame():void{
this.setFrame((this.frame + 1));
}
public function show():void{
if (!this.visible){
this.visible = true;
this.visibleChanged = true;
};
}
public function changeLinkage(_arg1:String):void{
if (this.linkage != _arg1){
this.linkage = _arg1;
if (this.image != null){
this.releaseClip();
this.inside(this.windowPos);
};
};
}
public function setPos(_arg1:Point):void{
if (!Point.isEqual(this.pos, _arg1)){
this.pos = _arg1;
this.positionChanged = true;
};
}
public function setAlpha(_arg1:Number):void{
if (this.alpha != _arg1){
this.alpha = _arg1;
this.alphaChanged = true;
};
}
protected function drawCannotOperate():void{
if (!this.canOperate){
this.image.drawLine(Color.noShoot, noShootThickness, true, new Point(-(noShootRadius), -(noShootRadius)), new Point(noShootRadius, noShootRadius));
this.image.drawLine(Color.noShoot, noShootThickness, true, new Point(noShootRadius, -(noShootRadius)), new Point(-(noShootRadius), noShootRadius));
};
}
public function getPos():Point{
return (this.pos);
}
public function cleanup():void{
this.releaseClip();
}
public function outside(_arg1:Point):void{
if (!this.isPermanent){
this.releaseClip();
} else {
this.inside(_arg1);
};
}
public function setFrame(_arg1:int):void{
if (this.frame != _arg1){
this.frame = _arg1;
this.frameChanged = true;
};
}
public function changeSupplyTarget(_arg1:Boolean):void{
if (this.isSupplyTarget != _arg1){
this.isSupplyTarget = _arg1;
this.overlayChanged = true;
};
}
public function changeOperate(_arg1:Boolean):void{
if (this.canOperate != _arg1){
this.canOperate = _arg1;
this.overlayChanged = true;
};
}
public function getFrame():int{
return (this.frame);
}
public function setRotationOffset(_arg1:int):void{
if (this.rotationOffset != _arg1){
this.rotationOffset = _arg1;
this.rotationChanged = true;
};
}
protected function drawSupplyLeg(_arg1:Number, _arg2:int, _arg3:int):void{
var _local4:Point;
_local4 = new Point(Math.round((Math.cos(_arg1) * _arg2)), Math.round((Math.sin(_arg1) * _arg2)));
this.image.drawLine(_arg3, supplyArrowThickness, true, new Point(0, 0), _local4);
}
public function hide():void{
if (this.visible){
this.visible = false;
this.visibleChanged = true;
};
}
protected function drawSupplyTarget(_arg1:Point):void{
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Point;
var _local7:Number;
if (this.isSupplyTarget){
_local2 = Game.select.getSelected();
_local3 = Game.map.getCell(Lib.pixelToCell(_arg1.x), Lib.pixelToCell(_arg1.y)).getTower().getType();
_local4 = Game.map.getCell(_local2.x, _local2.y).getTower().getType();
_local5 = Color.supplyOtherLine;
if ((((_local3 == Tower.DEPOT)) && ((_local4 == Tower.DEPOT)))){
_local5 = Color.supplyDepotLine;
};
_local6 = new Point((Lib.cellToPixel(_local2.x) - _arg1.x), (Lib.cellToPixel(_local2.y) - _arg1.y));
_local7 = ((Math.PI / 2) - Math.atan2(_local6.x, _local6.y));
this.drawSupplyLeg(_local7, supplyCenterLength, _local5);
this.drawSupplyLeg((_local7 - supplyArrowAngle), supplySideLength, _local5);
this.drawSupplyLeg((_local7 + supplyArrowAngle), supplySideLength, _local5);
};
}
public function getClip():MovieClip{
var _local1:MovieClip;
_local1 = null;
if (this.isPermanent){
_local1 = this.image.getClip();
};
return (_local1);
}
public function update():void{
if (this.image != null){
if (this.frameChanged){
this.image.gotoFrame(this.frame);
this.frameChanged = false;
};
if (this.scaleChanged){
this.image.setScale(this.scale);
this.scaleChanged = false;
};
if (this.overlayChanged){
this.image.clear();
this.drawShadow();
this.drawCannotOperate();
this.drawSupplyTarget(this.pos);
this.overlayChanged = false;
};
if (this.centerChanged){
this.image.setCenter(this.center);
this.centerChanged = false;
};
if (this.positionChanged){
this.image.goto((this.pos.x - this.windowPos.x), (this.pos.y - this.windowPos.y));
this.positionChanged = false;
};
if (this.rotationChanged){
this.image.rotate((this.rotation + this.rotationOffset));
this.rotationChanged = false;
};
if (this.alphaChanged){
this.image.setAlpha(this.alpha);
this.alphaChanged = false;
};
if (this.visibleChanged){
if (this.visible){
this.image.show();
} else {
this.image.hide();
};
this.visibleChanged = false;
};
if (this.glowFilterChanged){
this.image.setGlowFilter(this.glowFilter);
this.glowFilterChanged = false;
};
};
}
public function setGlowFilter(_arg1:GlowFilter):void{
this.glowFilter = _arg1;
this.glowFilterChanged = true;
}
public function setPermanent():void{
var _local1:Point;
this.isPermanent = true;
_local1 = this.windowPos;
this.windowPos = null;
this.inside(_local1);
}
public function getRotation():int{
return (this.rotation);
}
public function setOverlayColor(_arg1:ShadowColor):void{
if (this.overlayColor != _arg1){
this.overlayColor = _arg1;
this.overlayChanged = true;
};
}
public function releaseClip():void{
if (this.image != null){
Game.sprites.releaseSpriteClip(this.image, this.layer);
this.image = null;
};
}
public function inside(_arg1:Point):void{
if (this.image == null){
this.image = Game.sprites.getSpriteClip(this.layer, this.linkage);
this.image.show();
this.frameChanged = true;
this.scaleChanged = true;
this.overlayChanged = true;
this.centerChanged = true;
this.positionChanged = true;
this.rotationChanged = true;
this.alphaChanged = true;
this.visibleChanged = true;
this.glowFilterChanged = true;
};
if (!Point.isEqual(_arg1, this.windowPos)){
this.windowPos = _arg1;
this.positionChanged = true;
};
this.update();
}
public function save(){
return ({layer:this.layer, frame:this.frame, linkage:this.linkage, scale:this.scale, overlayColor:Lib.shadowColorToIndex(this.overlayColor), canOperate:this.canOperate, isSupplyTarget:this.isSupplyTarget, center:this.center.save(), pos:this.pos.save(), rotation:this.rotation, rotationOffset:this.rotationOffset, alpha:this.alpha, visible:this.visible});
}
public static function load(_arg1):VirtualImage{
var _local2:VirtualImage;
_local2 = new VirtualImage(_arg1.layer, Point.load(_arg1.center), _arg1.linkage);
_local2.setFrame(_arg1.frame);
_local2.setScale(_arg1.scale);
_local2.setOverlayColor(Lib.indexToShadowColor(_arg1.overlayColor));
_local2.changeOperate(_arg1.canOperate);
_local2.changeSupplyTarget(_arg1.isSupplyTarget);
_local2.setPos(Point.load(_arg1.pos));
_local2.setRotation(_arg1.rotation);
_local2.setRotationOffset(_arg1.rotationOffset);
_local2.setAlpha(_arg1.alpha);
if (_arg1.visible){
_local2.show();
} else {
_local2.hide();
};
return (_local2);
}
public static function saveS(_arg1:VirtualImage){
return (_arg1.save());
}
}
}//package ui
Section 228
//Workaround (ui.Workaround)
package ui {
import flash.display.*;
import flash.geom.*;
import flash.*;
public class Workaround {
public static var SHIFT:uint = 16;
public static function copyPixels(_arg1:Bitmap, _arg2:BitmapData, _arg3:Rectangle, _arg4:int, _arg5:int):void{
_arg1.bitmapData.copyPixels(_arg2, _arg3, new Point(_arg4, _arg5));
}
public static function drawOverPixels(_arg1:Bitmap, _arg2:DisplayObject, _arg3:int, _arg4:int, _arg5:Array):void{
var _local6:Matrix;
var _local7:ColorTransform;
_local6 = new Matrix();
_local6.translate((_arg3 * 2), (_arg4 * 2));
_local6.scale(0.5, 0.5);
_local7 = null;
if (_arg5 != null){
_local7 = new ColorTransform(0, 0, 0, 1, _arg5[0], _arg5[1], _arg5[2], 0);
};
_arg1.bitmapData.draw(_arg2, _local6, _local7);
}
public static function copyOverPixels(_arg1:Bitmap, _arg2:BitmapData, _arg3:Rectangle, _arg4:int, _arg5:int):void{
_arg1.bitmapData.copyPixels(_arg2, _arg3, new Point(_arg4, _arg5), null, null, true);
}
public static function fillRect(_arg1:Bitmap, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int):void{
var _local7:Rectangle;
_local7 = new Rectangle(_arg2, _arg3, (_arg4 - _arg2), (_arg5 - _arg3));
_arg1.bitmapData.fillRect(_local7, _arg6);
}
public static function attach(_arg1:String):MovieClip{
return (Lib.attach(_arg1));
}
}
}//package ui
Section 229
//AssetClip_10 (zomlog_fla.AssetClip_10)
package zomlog_fla {
import flash.display.*;
public dynamic class AssetClip_10 extends MovieClip {
public function AssetClip_10(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 230
//ButtonLeft_380 (zomlog_fla.ButtonLeft_380)
package zomlog_fla {
import flash.display.*;
public dynamic class ButtonLeft_380 extends MovieClip {
public function ButtonLeft_380(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 231
//ButtonRight_385 (zomlog_fla.ButtonRight_385)
package zomlog_fla {
import flash.display.*;
public dynamic class ButtonRight_385 extends MovieClip {
public function ButtonRight_385(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 232
//DepotClip_224 (zomlog_fla.DepotClip_224)
package zomlog_fla {
import flash.display.*;
public dynamic class DepotClip_224 extends MovieClip {
public function DepotClip_224(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 233
//GameClip_494 (zomlog_fla.GameClip_494)
package zomlog_fla {
import flash.display.*;
import flash.*;
public dynamic class GameClip_494 extends MovieClip {
public var boot;
public function GameClip_494(){
addFrameScript(1, frame2);
}
function frame2(){
boot = new Boot(null);
stage.align = StageAlign.TOP_LEFT;
stage.addChild(boot);
Main.main();
stop();
}
}
}//package zomlog_fla
Section 234
//JonLogo_478 (zomlog_fla.JonLogo_478)
package zomlog_fla {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.net.*;
import flash.geom.*;
import flash.text.*;
import flash.filters.*;
import flash.media.*;
import flash.ui.*;
import flash.system.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.printing.*;
import flash.xml.*;
public dynamic class JonLogo_478 extends MovieClip {
public var wheelMax;
public var water;
public var waters;
public var speed;
public var wheelCount;
public var logospeed;
public var logomc:MovieClip;
public var waterIndex;
public var wheelspeed;
public var gears1;
public function JonLogo_478(){
addFrameScript(0, frame1);
}
function frame1(){
stage.addEventListener(Event.ENTER_FRAME, gears);
stop();
gears1 = true;
speed = 3;
wheelspeed = 1.2;
logospeed = 0;
wheelMax = 41.7;
wheelCount = wheelMax;
logomc.waterwheel.gotoAndStop(1);
waters = [logomc.ring.w1, logomc.ring.w2, logomc.ring.w3, logomc.ring.w4, logomc.ring.w5, logomc.ring.w6, logomc.ring.w7, logomc.ring.w8];
for each (water in waters) {
water.gotoAndStop(water.totalFrames);
};
waterIndex = 1;
waters[1].gotoAndPlay(1);
}
public function gears(_arg1:Event):void{
var _local2:*;
var _local3:*;
var _local4:*;
var _local5:*;
var _local6:*;
var _local7:*;
wheelCount = (wheelCount - 1);
if (wheelCount <= 0){
wheelCount = (wheelCount + wheelMax);
_local6 = logomc.waterwheel.currentFrame;
_local7 = logomc.waterwheel.totalFrames;
logomc.waterwheel.gotoAndStop(((_local6 % _local7) + 1));
waterIndex = ((waterIndex + 1) % 8);
waters[waterIndex].gotoAndPlay(1);
};
logomc.shelf.y = (logomc.shelf.y + speed);
logomc.biggear.rotation = (logomc.biggear.rotation + (speed * 0.8));
logomc.biggear2.rotation = (logomc.biggear2.rotation + (speed * 0.8));
logomc.biggear3.rotation = (logomc.biggear3.rotation + (speed * 0.8));
if (!gears1){
logospeed = 0;
} else {
logospeed = speed;
};
if (logomc.logo.y > 140){
gears1 = false;
};
_local2 = 1;
while (_local2 < 11) {
logomc[("chain" + _local2)].y = (logomc[("chain" + _local2)].y + speed);
if (logomc[("chain" + _local2)].y > 205.85){
logomc[("chain" + _local2)].y = 193.85;
};
_local2++;
};
logomc.logo.y = (logomc.logo.y + logospeed);
logomc.turner1.rotation = (logomc.turner1.rotation + wheelspeed);
logomc.turner2.rotation = (logomc.turner2.rotation + (speed * 3));
if ((((wheelspeed <= 1)) && (gears1))){
wheelspeed = (wheelspeed + 0.3);
};
logomc.waterwheel.rotation = (logomc.waterwheel.rotation + (wheelspeed / 1.109));
logomc.ring.rotation = logomc.waterwheel.rotation;
if (((gears1) && ((speed < 1)))){
speed = (speed + 0.03);
};
_local3 = 1;
while (_local3 < 7) {
logomc[("smallgear" + _local3)].rotation = (logomc[("smallgear" + _local3)].rotation - (speed * 2));
_local3++;
};
logomc.smallgearback1.rotation = (logomc.smallgearback1.rotation + (speed * 2));
logomc.smallgearback2.rotation = (logomc.smallgearback2.rotation + (speed * 2));
logomc.smallgearback3.rotation = (logomc.smallgearback3.rotation + (speed * 2));
_local4 = 1;
while (_local4 < 11) {
logomc[("gear" + _local4)].rotation = (logomc[("gear" + _local4)].rotation - (speed * 0.58));
_local4++;
};
_local5 = 11;
while (_local5 < 21) {
logomc[("gear" + _local5)].rotation = (logomc[("gear" + _local5)].rotation + (speed * 0.58));
_local5++;
};
}
}
}//package zomlog_fla
Section 235
//Main_logo_479 (zomlog_fla.Main_logo_479)
package zomlog_fla {
import flash.display.*;
public dynamic class Main_logo_479 extends MovieClip {
public var gear20:MovieClip;
public var ring:MovieClip;
public var shelf:MovieClip;
public var gear2:MovieClip;
public var gear3:MovieClip;
public var gear5:MovieClip;
public var gear6:MovieClip;
public var gear9:MovieClip;
public var gear4:MovieClip;
public var gear7:MovieClip;
public var gear8:MovieClip;
public var gear1:MovieClip;
public var biggear:MovieClip;
public var waterwheel:MovieClip;
public var chain10:MovieClip;
public var smallgearback1:MovieClip;
public var smallgearback2:MovieClip;
public var smallgearback3:MovieClip;
public var biggear2:MovieClip;
public var biggear3:MovieClip;
public var turner1:MovieClip;
public var turner2:MovieClip;
public var chain1:MovieClip;
public var chain2:MovieClip;
public var chain3:MovieClip;
public var chain6:MovieClip;
public var chain8:MovieClip;
public var chain9:MovieClip;
public var chain4:MovieClip;
public var chain5:MovieClip;
public var chain7:MovieClip;
public var logo:MovieClip;
public var smallgear1:MovieClip;
public var smallgear3:MovieClip;
public var smallgear5:MovieClip;
public var smallgear6:MovieClip;
public var smallgear2:MovieClip;
public var smallgear4:MovieClip;
public var gear11:MovieClip;
public var gear14:MovieClip;
public var gear15:MovieClip;
public var gear16:MovieClip;
public var gear17:MovieClip;
public var gear18:MovieClip;
public var gear19:MovieClip;
public var gear13:MovieClip;
public var gear10:MovieClip;
public var gear12:MovieClip;
}
}//package zomlog_fla
Section 236
//MainTimeline (zomlog_fla.MainTimeline)
package zomlog_fla {
import flash.events.*;
import flash.display.*;
import flash.net.*;
public dynamic class MainTimeline extends MovieClip {
public var startHeight;
public var frame;
public var startWidth;
public var logomc:MovieClip;
public var frameCount;
public var logo:MovieClip;
public var pre:PreloaderClip;
public var game:MovieClip;
public function MainTimeline(){
addFrameScript(2, frame3, 3, frame4, 4, frame5, 5, frame6);
}
public function resizeHandler4(_arg1:Event):void{
updateSize4();
}
public function updateSize5():void{
logomc.width = ((startWidth * stage.stageWidth) / 620);
logomc.height = ((startHeight * stage.stageHeight) / 465);
}
public function updateSize4():void{
logo.width = stage.stageWidth;
logo.height = stage.stageHeight;
}
public function fullScreenHandler4(_arg1:FullScreenEvent):void{
updateSize4();
}
public function onProgress(_arg1:ProgressEvent):void{
var _local2:int;
_local2 = ((_arg1.bytesLoaded / _arg1.bytesTotal) * 100);
pre.progress.text = (("Loading: " + _local2) + "%");
}
public function fullScreenHandler5(_arg1:FullScreenEvent):void{
updateSize5();
}
public function onComplete(_arg1:Event):void{
loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
loaderInfo.removeEventListener(Event.COMPLETE, onComplete);
frameCount = 100;
}
function frame3(){
frameCount = -1;
stop();
resize();
if (loaderInfo.bytesLoaded < loaderInfo.bytesTotal){
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
this.loaderInfo.addEventListener(Event.COMPLETE, onComplete);
} else {
frameCount = 1;
};
pre.addEventListener(MouseEvent.CLICK, clickHandler2);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);
stage.addEventListener(Event.RESIZE, resizeHandler);
stage.addEventListener(Event.ENTER_FRAME, enterFrame);
resize();
}
function frame6(){
stop();
}
public function enterFrame(_arg1:Event):void{
frameCount--;
if (frameCount == 0){
pre.removeEventListener(MouseEvent.CLICK, clickHandler2);
stage.removeEventListener(Event.ENTER_FRAME, enterFrame);
stage.removeEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);
stage.removeEventListener(Event.RESIZE, resizeHandler);
play();
};
}
function frame4(){
stop();
logo.play();
addEventListener(Event.ENTER_FRAME, step4);
logo.addEventListener(MouseEvent.CLICK, clickHandler4);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler4);
stage.addEventListener(Event.RESIZE, resizeHandler4);
updateSize4();
}
function frame5(){
stop();
frame = 0;
startWidth = logomc.width;
startHeight = logomc.height;
addEventListener(Event.ENTER_FRAME, enterFrame5);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler5);
stage.addEventListener(Event.RESIZE, resizeHandler5);
}
public function enterFrame5(_arg1:Event):void{
if (frame >= 60){
removeEventListener(Event.ENTER_FRAME, enterFrame5);
stage.removeEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler5);
stage.removeEventListener(Event.RESIZE, resizeHandler5);
play();
};
frame++;
}
public function resize():void{
pre.x = (stage.stageWidth / 2);
pre.y = (stage.stageHeight / 2);
pre.width = stage.stageWidth;
pre.height = stage.stageHeight;
}
public function clickHandler2(_arg1:MouseEvent):void{
navigateToURL(new URLRequest("http://www.arcadebomb.com"), "_blank");
}
public function clickHandler4(_arg1:MouseEvent):void{
navigateToURL(new URLRequest("http://www.arcadebomb.com"), "_blank");
}
public function maybePlay(_arg1:MovieClip):void{
if (_arg1.currentFrame == 1){
_arg1.stop();
if (Math.floor((Math.random() * 50)) == 0){
_arg1.play();
};
};
}
public function step4(_arg1:Event):void{
if (logo.currentFrame == logo.totalFrames){
removeEventListener(Event.ENTER_FRAME, step4);
logo.removeEventListener(MouseEvent.CLICK, clickHandler4);
stage.removeEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler4);
stage.removeEventListener(Event.RESIZE, resizeHandler4);
play();
};
}
public function fullScreenHandler(_arg1:FullScreenEvent):void{
resize();
}
public function resizeHandler(_arg1:Event):void{
resize();
}
public function resizeHandler5(_arg1:Event):void{
updateSize5();
}
}
}//package zomlog_fla
Section 237
//MinusButton_372 (zomlog_fla.MinusButton_372)
package zomlog_fla {
import flash.display.*;
public dynamic class MinusButton_372 extends MovieClip {
public function MinusButton_372(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 238
//MusicClip_477 (zomlog_fla.MusicClip_477)
package zomlog_fla {
import flash.display.*;
public dynamic class MusicClip_477 extends MovieClip {
public function MusicClip_477(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
this.stop();
}
}
}//package zomlog_fla
Section 239
//PediaClip_298 (zomlog_fla.PediaClip_298)
package zomlog_fla {
import flash.display.*;
public dynamic class PediaClip_298 extends MovieClip {
public function PediaClip_298(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 240
//PlusButton_373 (zomlog_fla.PlusButton_373)
package zomlog_fla {
import flash.display.*;
public dynamic class PlusButton_373 extends MovieClip {
public function PlusButton_373(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 241
//TextButton_339 (zomlog_fla.TextButton_339)
package zomlog_fla {
import flash.display.*;
public dynamic class TextButton_339 extends MovieClip {
public function TextButton_339(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package zomlog_fla
Section 242
//water_484 (zomlog_fla.water_484)
package zomlog_fla {
import flash.display.*;
public dynamic class water_484 extends MovieClip {
public function water_484(){
addFrameScript(59, frame60);
}
function frame60(){
stop();
}
}
}//package zomlog_fla
Section 243
//WaterRing_483 (zomlog_fla.WaterRing_483)
package zomlog_fla {
import flash.display.*;
public dynamic class WaterRing_483 extends MovieClip {
public var w1:MovieClip;
public var w4:MovieClip;
public var w6:MovieClip;
public var w8:MovieClip;
public var w7:MovieClip;
public var w2:MovieClip;
public var w3:MovieClip;
public var w5:MovieClip;
}
}//package zomlog_fla
Section 244
//ActionQueue (ActionQueue)
package {
import action.*;
import flash.*;
public class ActionQueue {
protected var actions:List;
public function ActionQueue():void{
if (!Boot.skip_constructor){
this.actions = new List();
};
}
public function runAll():void{
while (!(this.actions.isEmpty())) {
this.actions.first().run();
this.actions.pop();
};
}
public function push(_arg1:Interface):void{
if (_arg1 != null){
this.actions.add(_arg1);
};
}
}
}//package
Section 245
//Actor (Actor)
package {
import flash.*;
public class Actor {
protected var speedCounter:int;
protected var speed:int;
public function Actor(_arg1:int=0):void{
if (!Boot.skip_constructor){
this.speed = _arg1;
this.speedCounter = -(Option.startDelay);
Game.actorList.add(this);
};
}
public function saveTruck(){
return (null);
}
public function saveZombie(){
return (null);
}
public function cleanup():void{
Game.actorList.remove(this);
this.speedCounter = 0;
}
public function load(_arg1):void{
this.speed = _arg1.speed;
this.speedCounter = _arg1.speedCounter;
}
public function saveTower(){
return (null);
}
public function enterFrame():void{
var _local1:int;
this.speedCounter = (this.speedCounter + this.speed);
_local1 = 0;
if (this.speedCounter > 0){
_local1 = Math.ceil((this.speedCounter / Option.frameDelay));
};
this.speedCounter = (this.speedCounter - (_local1 * Option.frameDelay));
if (_local1 > 0){
this.step(_local1);
};
}
public function dance(_arg1:Boolean):void{
}
public function step(_arg1:int):void{
}
protected function wait():void{
this.speedCounter = (this.speedCounter - Option.waitDelay);
}
public function save(){
return ({speed:this.speed, speedCounter:this.speedCounter});
}
public static function saveZombieS(_arg1:Actor){
return (_arg1.saveZombie());
}
public static function saveTruckS(_arg1:Actor){
return (_arg1.saveTruck());
}
public static function saveTowerS(_arg1:Actor){
return (_arg1.saveTower());
}
}
}//package
Section 246
//ActorList (ActorList)
package {
import logic.*;
import flash.*;
public class ActorList {
protected var reaper:List;
protected var list:List;
public function ActorList():void{
if (!Boot.skip_constructor){
this.list = new List();
this.reaper = new List();
};
}
public function add(_arg1:Actor):void{
this.list.add(_arg1);
}
public function remove(_arg1:Actor):void{
this.reaper.add(_arg1);
}
public function load(_arg1):void{
var _local2:List;
var _local3:List;
var _local4:List;
_local2 = Load.loadList(_arg1.towers, Tower.loadS);
_local3 = Load.loadList(_arg1.zombies, Zombie.loadS);
_local4 = Load.loadList(_arg1.trucks, Truck.loadS);
}
protected function tidyList():void{
var _local1:*;
var _local2:Actor;
_local1 = this.reaper.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
this.list.remove(_local2);
};
this.reaper.clear();
}
protected function listContains(_arg1:List, _arg2):Boolean{
var _local3:Boolean;
var _local4:*;
var _local5:*;
_local3 = false;
_local4 = _arg1.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
if (_local5 == _arg2){
_local3 = true;
break;
};
};
return (_local3);
}
public function enterFrame():void{
var _local1:int;
var _local2:int;
var _local3:Boolean;
var _local4:Boolean;
var _local5:*;
var _local6:Actor;
_local1 = (Game.settings.getPlayTime() % Option.dancePeriod);
_local2 = Game.settings.getEasterEgg();
_local3 = (((_local2 == GameSettings.EASTLOSANGELES)) && ((_local1 == (Option.dancePeriod - 1))));
_local4 = true;
if (((_local3) && ((Lib.rand(2) == 0)))){
_local4 = false;
};
this.tidyList();
_local5 = this.list.iterator();
while (_local5.hasNext()) {
_local6 = _local5.next();
if (!this.listContains(this.reaper, _local6)){
if (_local3){
_local6.dance(_local4);
};
_local6.enterFrame();
};
};
this.tidyList();
}
public function save(){
return ({towers:Save.saveList(this.list, Actor.saveTowerS), zombies:Save.saveList(this.list, Actor.saveZombieS), trucks:Save.saveList(this.list, Actor.saveTruckS)});
}
}
}//package
Section 247
//backgroundtiles (backgroundtiles)
package {
import flash.display.*;
public dynamic class backgroundtiles extends MovieClip {
}
}//package
Section 248
//BackgroundType (BackgroundType)
package {
public class BackgroundType extends enum {
public static const __isenum:Boolean = true;
public static var STREET:BackgroundType = new BackgroundType("STREET", 3);
;
public static var ENTRANCE:BackgroundType = new BackgroundType("ENTRANCE", 1);
;
public static var BRIDGE:BackgroundType = new BackgroundType("BRIDGE", 5);
;
public static var PARK:BackgroundType = new BackgroundType("PARK", 2);
;
public static var BUILDING:BackgroundType = new BackgroundType("BUILDING", 0);
;
public static var ALLEY:BackgroundType = new BackgroundType("ALLEY", 4);
;
public static var WATER:BackgroundType = new BackgroundType("WATER", 6);
;
public static var __constructs__:Array = ["BUILDING", "ENTRANCE", "PARK", "STREET", "ALLEY", "BRIDGE", "WATER", "EDGE"];
public static var EDGE:BackgroundType = new BackgroundType("EDGE", 7);
;
public function BackgroundType(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
}
}//package
Section 249
//Barricade (Barricade)
package {
import action.*;
import mapgen.*;
import flash.*;
public class Barricade extends Tower {
protected static var BOARDS:Resource = Resource.BOARDS;
public function Barricade(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.type = Tower.BARRICADE;
super(new Point(_arg1, _arg2), Option.barricadeLevelLimit, Option.barricadeSpeed, Option.barricadeCost);
this.updateCanTakeHit();
this.addReserve(Lib.boardLoad);
};
}
override public function attack():Boolean{
var _local1:Boolean;
_local1 = true;
if (this.countResource(BOARDS) >= Option.barricadeHitCost){
Main.sound.play(SoundPlayer.ZOMBIE_BASH);
this.takeResource(new ResourceCount(BOARDS, Option.barricadeHitCost));
_local1 = false;
} else {
_local1 = super.attack();
};
this.updateCanTakeHit();
return (_local1);
}
protected function updateCanTakeHit():void{
var _local1:Boolean;
_local1 = (this.countResource(BOARDS) >= Option.barricadeHitCost);
this.sprite.changeCanOperate(_local1);
this.sprite.update();
}
override public function giveResource(_arg1:ResourceCount):void{
super.giveResource(_arg1);
this.updateCanTakeHit();
}
protected function isBlocked(_arg1:Direction):Boolean{
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:MapCell;
_local2 = Lib.directionToDelta(_arg1);
_local3 = (this.mapPos.x + _local2.x);
_local4 = (this.mapPos.y + _local2.y);
_local5 = Game.map.getCell(_local3, _local4);
return (((_local5.isBlocked()) || (_local5.hasTower())));
}
protected function getSupplyDir():Direction{
var _local1:Direction;
var _local2:Point;
var _local3:int;
var _local4:Direction;
var _local5:int;
var _local6:Direction;
_local1 = null;
if (!this.links.isEmpty()){
_local2 = this.links.first().dest;
_local3 = (this.mapPos.x - _local2.x);
_local4 = Direction.EAST;
if (_local3 < 0){
_local4 = Direction.WEST;
};
_local5 = (this.mapPos.y - _local2.y);
_local6 = Direction.SOUTH;
if (_local5 < 0){
_local6 = Direction.NORTH;
};
if (((this.isBlocked(_local4)) && (!(this.isBlocked(_local6))))){
_local1 = _local6;
} else {
if (((!(this.isBlocked(_local4))) && (this.isBlocked(_local6)))){
_local1 = _local4;
} else {
if (((!(this.isBlocked(_local4))) && (!(this.isBlocked(_local6))))){
if (Math.abs(_local3) > Math.abs(_local5)){
_local1 = _local4;
} else {
if (Math.abs(_local3) == Math.abs(_local5)){
_local1 = _local4;
} else {
if (Math.abs(_local3) < Math.abs(_local5)){
_local1 = _local6;
};
};
};
};
};
};
};
return (_local1);
}
override public function saveTower(){
return ({parent:super.saveTowerGeneric()});
}
protected function getProtectedDir():Direction{
var _local1:Direction;
var _local2:List;
var _local3:*;
var _local4:Direction;
var _local5:Direction;
_local1 = null;
_local2 = this.getProtectedList();
_local3 = _local2.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
_local5 = Util.opposite(_local4);
if (!this.isBlocked(_local5)){
_local1 = _local5;
break;
};
};
return (_local1);
}
protected function getProtectedList():List{
var _local1:List;
var _local2:int;
var _local3:Array;
var _local4:Direction;
var _local5:Point;
var _local6:int;
var _local7:int;
var _local8:Tower;
_local1 = new List();
_local2 = 0;
_local3 = Lib.directions;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
_local5 = Lib.directionToDelta(_local4);
_local6 = (this.mapPos.x + _local5.x);
_local7 = (this.mapPos.y + _local5.y);
_local8 = Game.map.getCell(_local6, _local7).getTower();
if (((!((_local8 == null))) && (!((_local8.getType() == Tower.BARRICADE))))){
_local1.add(_local4);
};
};
return (_local1);
}
override public function getType():int{
return (Tower.BARRICADE);
}
protected function updateReserve():void{
var _local1:int;
var _local2:int;
_local1 = this.stuff.reserve(Resource.BOARDS);
_local2 = this.stuff.count(Resource.BOARDS);
if ((((_local1 == 0)) || ((_local1 <= (_local2 - Lib.truckLoad(Resource.BOARDS)))))){
if (this.stuff.reserve(Resource.SURVIVORS) == 0){
this.stuff.addReserve(Lib.survivorLoad);
};
} else {
if (this.stuff.reserve(Resource.SURVIVORS) > 0){
this.stuff.removeReserve(Lib.survivorLoad);
};
};
}
override public function step(_arg1:int):void{
if ((((this.stuff.count(Resource.SURVIVORS) > 0)) && ((this.stuff.count(Resource.BOARDS) > 0)))){
if (this.stuff.reserve(Resource.BOARDS) > 0){
this.sendToDepot(true);
} else {
this.sendToDepot(false);
};
this.updateCanTakeHit();
} else {
if ((((this.stuff.count(Resource.SURVIVORS) > 0)) && ((this.stuff.count(Resource.BOARDS) == 0)))){
Game.view.window.refresh();
Game.actions.push(new CloseTower(this.mapPos.x, this.mapPos.y));
};
};
this.updateReserve();
}
protected function getUnblockedDir():Direction{
var _local1:Direction;
var _local2:int;
var _local3:Array;
var _local4:Direction;
_local1 = null;
_local2 = 0;
_local3 = Lib.directions;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
if (!this.isBlocked(_local4)){
_local1 = _local4;
break;
};
};
return (_local1);
}
override public function updateBlocked():void{
var _local1:Direction;
_local1 = this.getProtectedDir();
if (_local1 == null){
_local1 = this.getSupplyDir();
};
if (_local1 == null){
_local1 = this.getUnblockedDir();
};
if (_local1 == null){
_local1 = Direction.NORTH;
};
this.sprite.rotate((Lib.directionToAngle(_local1) - 90));
this.sprite.update();
}
override public function load(_arg1):void{
super.load(_arg1.parent);
}
}
}//package
Section 250
//BarricadeScreen (BarricadeScreen)
package {
import flash.display.*;
public dynamic class BarricadeScreen extends MovieClip {
}
}//package
Section 251
//BitstreamVeraSans (BitstreamVeraSans)
package {
import flash.text.*;
import flash.*;
public class BitstreamVeraSans extends Font {
public function BitstreamVeraSans():void{
if (!Boot.skip_constructor){
super();
};
}
public static function init():void{
}
}
}//package
Section 252
//BridgeExplosionSound (BridgeExplosionSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class BridgeExplosionSound extends Sound {
public function BridgeExplosionSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 253
//Building (Building)
package {
import ui.*;
import mapgen.*;
import flash.*;
public class Building {
protected var lots:List;
protected var zombies:int;
protected var salvage:Salvage;
protected var entrance:Point;
protected var type:int;
protected var entranceDir:Direction;
protected static var buildingText:Array = [Text.buildingStandardText, Text.buildingApartmentText, Text.buildingSupermarketText, Text.buildingPoliceStationText, Text.buildingHardwareStoreText, Text.buildingChurchText, Text.buildingHospitalText, Text.buildingMallText, Text.buildingHouseText, Text.buildingParkingLotText];
protected static var zombieText:Array = [Text.zombieThreatNone, Text.zombieThreatLow, Text.zombieThreatModerate, Text.zombieThreatHigh];
public function Building(_arg1:int=0):void{
if (!Boot.skip_constructor){
this.type = _arg1;
this.entrance = null;
this.entranceDir = Direction.EAST;
this.zombies = 0;
this.salvage = new Salvage();
this.lots = new List();
};
}
public function clearZombies():void{
Game.progress.addZombies(-(this.zombies));
this.zombies = 0;
}
public function addZombies(_arg1:int):void{
this.zombies = (this.zombies + _arg1);
Game.progress.addZombies(_arg1);
if (Game.settings.isEditor()){
Game.view.window.refresh();
Game.view.mini.update();
};
}
public function attach():void{
var _local1:*;
var _local2:Section;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local1 = this.lots.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local3 = _local2.offset.y;
_local4 = _local2.limit.y;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = _local2.offset.x;
_local7 = _local2.limit.x;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
Game.map.getCell(_local8, _local5).setBuilding(this);
};
};
};
}
public function getEntranceDir():Direction{
return (this.entranceDir);
}
public function refreshMinimap():void{
var _local1:*;
var _local2:Section;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local1 = this.lots.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local3 = _local2.offset.y;
_local4 = _local2.limit.y;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = _local2.offset.x;
_local7 = _local2.limit.x;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
Game.update.cellState(new Point(_local8, _local5));
};
};
};
}
public function drawReplay():void{
var _local1:*;
var _local2:Section;
_local1 = this.lots.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
Main.replay.addBox(_local2.offset, _local2.limit, Lib.zombieColor(this.zombies));
};
}
public function makeNoise(_arg1:Point, _arg2:int, _arg3:PathFinder):void{
var zombiesProduced:int;
var _g:int;
var i:int;
var newZombie:Zombie;
var source = _arg1;
var loudness = _arg2;
var guide = _arg3;
if ((((this.zombies > 0)) && ((Lib.rand(100) < (loudness * Option.disturbChance))))){
zombiesProduced = Lib.rand(function (_arg1:Building):int{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = Math.min(($this.zombies + 1), 2);
$r = (Std._is(tmp, int)) ? tmp : function (_arg1:Building):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this));
_g = 0;
while (_g < zombiesProduced) {
_g = (_g + 1);
i = _g;
newZombie = new Zombie(this.entrance.x, this.entrance.y, Lib.directionToAngle(this.entranceDir), source.x, source.y, Zombie.BUILDING_SPAWN);
newZombie.makeNoise(source, loudness, guide);
Game.spawner.addZombie();
};
this.zombieSideEffect(zombiesProduced);
};
}
protected function zombieSideEffect(_arg1:int):void{
this.zombies = (this.zombies - _arg1);
if (_arg1 > 0){
this.refreshMinimap();
Game.view.window.refresh();
Main.replay.addBox(this.entrance, new Point((this.entrance.x + 1), (this.entrance.y + 1)), Option.spawnReplayColor);
this.drawReplay();
};
}
public function hasZombies():Boolean{
return ((this.zombies > 0));
}
protected function getZombieThreat():String{
var _local1:int;
_local1 = 0;
if (this.zombies > 0){
_local1 = (Lib.weightedIndex(this.zombies, Option.zombieBuildingWeights) + 1);
};
return (zombieText[_local1]);
}
public function detach():void{
var _local1:*;
var _local2:Section;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
_local1 = this.lots.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local3 = _local2.offset.y;
_local4 = _local2.limit.y;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = _local2.offset.x;
_local7 = _local2.limit.x;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
Game.map.getCell(_local8, _local5).setBuilding(null);
};
};
};
}
protected function getSalvageProspect():String{
var _local1:Resource;
var _local2:Resource;
var _local3:Resource;
var _local4:int;
_local1 = Resource.AMMO;
_local2 = Resource.FOOD;
_local3 = Resource.BOARDS;
_local4 = this.salvage.getResourceCount(_local1);
_local4 = (_local4 + this.salvage.getResourceCount(_local2));
_local4 = (_local4 + this.salvage.getResourceCount(_local3));
if (_local4 == 0){
return (Text.salvageProspectsNone);
};
if (_local4 < 100){
return (Text.salvageProspectsLow);
};
return (Text.salvageProspectsHigh);
}
protected function getSurvivors():String{
var _local1:Resource;
var _local2:int;
_local1 = Resource.SURVIVORS;
_local2 = this.salvage.getResourceCount(_local1);
if (_local2 > 0){
return (Text.survivorsInside);
};
return (Text.survivorsNotInside);
}
public function getZombieCount():int{
return (this.zombies);
}
public function hasResources():Boolean{
return ((this.salvage.getTotalCount() > 0));
}
public function getEntrance():Point{
var _local1:Point;
_local1 = null;
if (this.entrance != null){
_local1 = this.entrance.clone();
};
return (_local1);
}
public function getToolTip():String{
return (Text.buildingText(buildingText[this.type], this.getZombieThreat(), this.getSalvageProspect(), this.getSurvivors()));
}
public function getType():int{
return (this.type);
}
public function getSalvage():Salvage{
return (this.salvage);
}
public function addLot(_arg1:Section):void{
this.lots.add(_arg1.clone());
}
public function getLots():List{
return (this.lots);
}
public function spawn(_arg1:Point, _arg2:PathFinder):void{
var _local3:Zombie;
if (this.zombies > 0){
_local3 = new Zombie(this.entrance.x, this.entrance.y, Lib.directionToAngle(this.entranceDir), _arg1.x, _arg1.y, Zombie.BUILDING_SPAWN);
_local3.makeNoise(_arg1, 0, _arg2);
this.zombieSideEffect(1);
_local3.addToWave();
};
}
public function save(){
return ({type:this.type, entrance:this.entrance.save(), entranceDir:Lib.directionToIndex(this.entranceDir), zombies:this.zombies, salvage:this.salvage.save(), lots:Save.saveList(this.lots, Section.save)});
}
public function setEntrance(_arg1:Point, _arg2:Direction):void{
this.entrance = _arg1.clone();
this.entranceDir = _arg2;
}
public static function load(_arg1):Building{
var _local2:Building;
_local2 = new Building(_arg1.type);
_local2.entrance = Point.load(_arg1.entrance);
_local2.entranceDir = Lib.indexToDirection(_arg1.entranceDir);
_local2.zombies = _arg1.zombies;
_local2.salvage = Salvage.load(_arg1.salvage);
_local2.lots = Load.loadList(_arg1.lots, Section.load);
_local2.attach();
return (_local2);
}
public static function saveS(_arg1:Building){
return (_arg1.save());
}
}
}//package
Section 254
//Bump (Bump)
package {
import flash.*;
public class Bump {
public var location:Offset;
public var parent:Bump;
public function Bump():void{
if (!Boot.skip_constructor){
this.location = new Offset(0, 0);
this.parent = null;
};
}
}
}//package
Section 255
//ButtonAbandon (ButtonAbandon)
package {
import flash.display.*;
public dynamic class ButtonAbandon extends MovieClip {
public function ButtonAbandon(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 256
//ButtonBuildBarricade (ButtonBuildBarricade)
package {
import flash.display.*;
public dynamic class ButtonBuildBarricade extends MovieClip {
public function ButtonBuildBarricade(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 257
//ButtonBuildDepot (ButtonBuildDepot)
package {
import flash.display.*;
public dynamic class ButtonBuildDepot extends MovieClip {
public function ButtonBuildDepot(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 258
//ButtonBuildSniper (ButtonBuildSniper)
package {
import flash.display.*;
public dynamic class ButtonBuildSniper extends MovieClip {
public function ButtonBuildSniper(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 259
//ButtonBuildWorkshop (ButtonBuildWorkshop)
package {
import flash.display.*;
public dynamic class ButtonBuildWorkshop extends MovieClip {
public function ButtonBuildWorkshop(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 260
//ButtonFailedSound (ButtonFailedSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ButtonFailedSound extends Sound {
public function ButtonFailedSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 261
//ButtonFireAtWill (ButtonFireAtWill)
package {
import flash.display.*;
public dynamic class ButtonFireAtWill extends MovieClip {
public function ButtonFireAtWill(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 262
//ButtonFireHold (ButtonFireHold)
package {
import flash.display.*;
public dynamic class ButtonFireHold extends MovieClip {
public function ButtonFireHold(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 263
//ButtonFlare (ButtonFlare)
package {
import flash.display.*;
public dynamic class ButtonFlare extends MovieClip {
public function ButtonFlare(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 264
//ButtonHelp (ButtonHelp)
package {
import flash.display.*;
public dynamic class ButtonHelp extends MovieClip {
public function ButtonHelp(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 265
//ButtonMinus (ButtonMinus)
package {
import flash.display.*;
public dynamic class ButtonMinus extends MovieClip {
public function ButtonMinus(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 266
//ButtonPlus (ButtonPlus)
package {
import flash.display.*;
public dynamic class ButtonPlus extends MovieClip {
public function ButtonPlus(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 267
//ButtonRangeOff (ButtonRangeOff)
package {
import flash.display.*;
public dynamic class ButtonRangeOff extends MovieClip {
public function ButtonRangeOff(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 268
//ButtonRangeOn (ButtonRangeOn)
package {
import flash.display.*;
public dynamic class ButtonRangeOn extends MovieClip {
public function ButtonRangeOn(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 269
//ButtonSuccessSound (ButtonSuccessSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ButtonSuccessSound extends Sound {
public function ButtonSuccessSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 270
//ButtonSystem (ButtonSystem)
package {
import flash.display.*;
public dynamic class ButtonSystem extends MovieClip {
public function ButtonSystem(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 271
//ButtonUpgrade (ButtonUpgrade)
package {
import flash.display.*;
public dynamic class ButtonUpgrade extends MovieClip {
public function ButtonUpgrade(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 272
//CellRenderer_disabledSkin (CellRenderer_disabledSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_disabledSkin extends MovieClip {
}
}//package
Section 273
//CellRenderer_downSkin (CellRenderer_downSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_downSkin extends MovieClip {
}
}//package
Section 274
//CellRenderer_overSkin (CellRenderer_overSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_overSkin extends MovieClip {
}
}//package
Section 275
//CellRenderer_selectedDisabledSkin (CellRenderer_selectedDisabledSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_selectedDisabledSkin extends MovieClip {
}
}//package
Section 276
//CellRenderer_selectedDownSkin (CellRenderer_selectedDownSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_selectedDownSkin extends MovieClip {
}
}//package
Section 277
//CellRenderer_selectedOverSkin (CellRenderer_selectedOverSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_selectedOverSkin extends MovieClip {
}
}//package
Section 278
//CellRenderer_selectedUpSkin (CellRenderer_selectedUpSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_selectedUpSkin extends MovieClip {
}
}//package
Section 279
//CellRenderer_upSkin (CellRenderer_upSkin)
package {
import flash.display.*;
public dynamic class CellRenderer_upSkin extends MovieClip {
}
}//package
Section 280
//CenteredImage (CenteredImage)
package {
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
import flash.*;
public class CenteredImage {
protected var diagDistance:Number;
protected var center:Point;
protected var image:MovieClip;
protected var baseY:Number;
protected var rotation:Number;
protected var baseX:Number;
public function CenteredImage(_arg1:DisplayObjectContainer=null, _arg2:String=null):void{
if (!Boot.skip_constructor){
this.image = Lib.attach(_arg2);
_arg1.addChild(this.image);
this.image.visible = true;
this.image.useHandCursor = false;
this.image.cacheAsBitmap = true;
this.image.mouseEnabled = false;
this.image.mouseChildren = false;
this.image.stop();
this.baseX = 0;
this.baseY = 0;
this.rotation = 0;
this.clearCenter();
};
}
public function hide():void{
this.image.visible = false;
}
public function getClip():MovieClip{
return (this.image);
}
public function setScale(_arg1:Number):void{
this.image.scaleX = _arg1;
this.image.scaleY = _arg1;
}
public function clearCenter():void{
this.setCenter(new Point(Math.floor((Option.cellPixels / 2)), Math.floor((Option.cellPixels / 2))));
}
public function gotoFrame(_arg1:int):void{
this.image.gotoAndStop(1);
this.image.gotoAndStop(_arg1);
}
public function clear():void{
this.image.graphics.clear();
}
protected function moveClip():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
_local1 = (((this.rotation * Math.PI) / 180) + (Math.PI / 4));
_local2 = (Math.cos(_local1) * this.diagDistance);
_local3 = (Math.sin(_local1) * this.diagDistance);
this.image.x = ((this.baseX - _local2) + this.center.x);
this.image.y = ((this.baseY - _local3) + this.center.y);
if ((((this.center.x == 0)) && ((this.center.y == 0)))){
this.image.x = (this.image.x + (Option.cellPixels / 2));
this.image.y = (this.image.y + (Option.cellPixels / 2));
};
this.image.rotation = this.rotation;
}
public function detach():void{
if (this.image.parent != null){
this.image.parent.removeChild(this.image);
};
}
public function setCenter(_arg1:Point):void{
this.center = _arg1.clone();
this.diagDistance = Math.sqrt(((this.center.x * this.center.x) + (this.center.y * this.center.y)));
}
public function drawLine(_arg1:int, _arg2:int, _arg3:Boolean, _arg4:Point, _arg5:Point):void{
var _local6:String;
_local6 = CapsStyle.ROUND;
if (!_arg3){
_local6 = CapsStyle.NONE;
};
this.image.graphics.lineStyle(_arg2, _arg1, 1, true, LineScaleMode.NORMAL, _local6);
this.image.graphics.moveTo(_arg4.x, _arg4.y);
this.image.graphics.lineTo(_arg5.x, _arg5.y);
}
public function rotate(_arg1:int):void{
this.rotation = _arg1;
this.moveClip();
}
public function setAlpha(_arg1:Number):void{
this.image.alpha = _arg1;
}
public function goto(_arg1:int, _arg2:int):void{
this.baseX = _arg1;
this.baseY = _arg2;
this.moveClip();
}
public function cleanup():void{
this.detach();
this.image = null;
}
public function getImage():MovieClip{
return (this.image);
}
public function setGlowFilter(_arg1:GlowFilter):void{
if (_arg1 == null){
this.image.filters = [];
} else {
this.image.filters = [_arg1];
};
}
public function setTransform(_arg1:ColorTransform):void{
this.image.transform.colorTransform = _arg1;
}
public function setFrame(_arg1:String):void{
this.image.gotoAndStop(1);
this.image.gotoAndStop(_arg1);
}
public function drawBox(_arg1:int, _arg2:Number, _arg3:Point, _arg4:Point):void{
this.image.graphics.beginFill(_arg1, _arg2);
this.image.graphics.moveTo(_arg3.x, _arg3.y);
this.image.graphics.lineTo(_arg3.x, (_arg3.y + _arg4.y));
this.image.graphics.lineTo((_arg3.x + _arg4.x), (_arg3.y + _arg4.y));
this.image.graphics.lineTo((_arg3.x + _arg4.x), _arg3.y);
this.image.graphics.lineTo(_arg3.x, _arg3.y);
this.image.graphics.endFill();
}
public function getRotation():int{
return (Math.floor(this.rotation));
}
public function show():void{
this.image.visible = true;
}
}
}//package
Section 281
//ComboBox_disabledSkin (ComboBox_disabledSkin)
package {
import flash.display.*;
public dynamic class ComboBox_disabledSkin extends MovieClip {
}
}//package
Section 282
//ComboBox_downSkin (ComboBox_downSkin)
package {
import flash.display.*;
public dynamic class ComboBox_downSkin extends MovieClip {
}
}//package
Section 283
//ComboBox_overSkin (ComboBox_overSkin)
package {
import flash.display.*;
public dynamic class ComboBox_overSkin extends MovieClip {
}
}//package
Section 284
//ComboBox_upSkin (ComboBox_upSkin)
package {
import flash.display.*;
public dynamic class ComboBox_upSkin extends MovieClip {
}
}//package
Section 285
//Config (Config)
package {
import flash.net.*;
import flash.*;
public class Config {
protected var options:Array;
protected static var startValues:Array = [3, 3, 3];
public static var MUSIC:int = 1;
protected static var maxValues:Array = [6, 6, 6];
public static var SCROLL:int = 2;
public static var SOUND:int = 0;
public function Config():void{
if (!Boot.skip_constructor){
this.options = startValues.copy();
this.load();
};
}
public function increase(_arg1:int):void{
if (this.canIncrease(_arg1)){
var _local2 = this.options;
var _local3 = _arg1;
var _local4 = (_local2[_local3] + 1);
_local2[_local3] = _local4;
this.save();
};
}
public function cleanup():void{
}
protected function load():void{
var input:SharedObject;
var _g1:int;
var _g:*;
var i:int;
try {
input = Main.configDisk;
if (input.data.options != null){
_g1 = 0;
_g = input.data.options.length;
while (_g1 < _g) {
_g1 = (_g1 + 1);
i = _g1;
if (i < this.options.length){
this.options[i] = input.data.options[i];
};
};
};
} catch(e:Error) {
} catch(e2) {
};
}
public function canDecrease(_arg1:int):Boolean{
return ((this.options[_arg1] > 0));
}
public function getProportion(_arg1:int):Number{
return ((this.options[_arg1] / maxValues[_arg1]));
}
public function canIncrease(_arg1:int):Boolean{
return ((this.options[_arg1] < maxValues[_arg1]));
}
public function setValue(_arg1:int, _arg2:int):void{
var _local3:int;
_local3 = _arg2;
if (_local3 < 0){
_local3 = 0;
};
if (_local3 > maxValues[_arg1]){
_local3 = maxValues[_arg1];
};
this.options[_arg1] = _local3;
this.save();
}
public function getValue(_arg1:int):int{
return (this.options[_arg1]);
}
public function setProportion(_arg1:int, _arg2:Number):void{
this.setValue(_arg1, Math.round((_arg2 * maxValues[_arg1])));
}
public function save():void{
var out:SharedObject;
try {
out = Main.configDisk;
out.data.options = this.options.copy();
out.flush(100);
} catch(e:Error) {
} catch(e2) {
};
}
public function decrease(_arg1:int):void{
if (this.canDecrease(_arg1)){
var _local2 = this.options;
var _local3 = _arg1;
var _local4 = (_local2[_local3] - 1);
_local2[_local3] = _local4;
this.save();
};
}
}
}//package
Section 286
//Depot (Depot)
package {
import flash.*;
public class Depot extends Tower {
protected var buildReserve:Array;
protected var sand:Array;
protected var useFood:Boolean;
public static var supplyButton:int = 0;
public static var endSupplyButton:int = 1;
public static var toggleFoodButton:int = 3;
public static var buildWorkshopButton:int = 7;
protected static var survivorIndex:int = Lib.resourceToIndex(Resource.SURVIVORS);
protected static var boardIndex:int = Lib.resourceToIndex(Resource.BOARDS);
public static var buildBarricadeButton:int = 5;
public static var upgradeButton:int = 2;
public static var buildSniperButton:int = 4;
protected static var sandFactor:Number = 0.9;
public static var buildDepotButton:int = 6;
public function Depot(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.type = Tower.DEPOT;
super(new Point(_arg1, _arg2), Option.depotLevelLimit, Option.depotSpeed, Option.depotCost);
this.addReserve(Lib.boardLoad);
this.addReserve(Lib.ammoLoad);
this.addReserve(Lib.survivorLoad);
this.useFood = false;
this.sand = Lib.newResourceArray();
this.buildReserve = Lib.newResourceArray();
};
}
protected function updateSandResource(_arg1:Resource):void{
var _local2:int;
var _local3:int;
var _local4:List;
var _local5:int;
var _local6:*;
var _local7:Tower;
var _local8:int;
_local2 = Lib.resourceToIndex(_arg1);
_local3 = this.countNeeds(_arg1);
_local4 = this.getSandLinks(_arg1);
if (_local3 > 0){
this.sand[_local2] = (this.reduce(this.sand[_local2]) + _local3);
} else {
_local5 = this.reduce(this.sand[_local2]);
_local6 = _local4.iterator();
while (_local6.hasNext()) {
_local7 = _local6.next();
_local8 = this.reduce(this.reduce(_local7.countSand(_arg1)));
if (_local8 > _local5){
_local5 = _local8;
};
};
this.sand[_local2] = _local5;
};
}
override public function getTruckSpeed():int{
return ((Option.depotTruckSpeedMin[this.level] + Lib.rand(Option.depotTruckSpeedRange[this.level])));
}
override public function countSand(_arg1:Resource):int{
var _local2:int;
_local2 = Lib.resourceToIndex(_arg1);
return (this.sand[_local2]);
}
protected function tryOverflowTower(_arg1:Tower):ResourceCount{
var _local2:ResourceCount;
var _local3:List;
var _local4:*;
var _local5:ResourceCount;
var _local6:int;
var _local7:int;
var _local8:Boolean;
_local2 = null;
_local3 = _arg1.getOverflow();
_local4 = _local3.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local6 = Lib.resourceToIndex(_local5.resource);
_local7 = (((this.stuff.count(_local5.resource) + this.stuff.incoming(_local5.resource)) - this.stuff.reserve(_local5.resource)) - this.buildReserve[_local6]);
_local8 = (((((_local7 > _local5.count)) && ((_local7 >= Lib.truckLoad(_local5.resource))))) && ((this.countSand(_local5.resource) < _arg1.countSand(_local5.resource))));
if (((((_local8) && ((this.stuff.count(_local5.resource) >= Lib.truckLoad(_local5.resource))))) && ((((_local2 == null)) || ((this.getWeight(_local5) < this.getWeight(_local2))))))){
_local2 = _local5;
};
};
return (_local2);
}
override public function reserveBuildResource(_arg1:int):void{
var _local2:int;
_local2 = (Tower.getBuildCost(_arg1) * Lib.truckLoad(Resource.BOARDS));
this.buildReserve[boardIndex] = _local2;
this.buildReserve[survivorIndex] = Lib.truckLoad(Resource.SURVIVORS);
}
override public function shouldUseFood():Boolean{
return (this.useFood);
}
protected function reduce(_arg1:int):int{
return (Math.floor((_arg1 * sandFactor)));
}
override public function usesSand():Boolean{
return (true);
}
override public function normalizeLevel():void{
super.normalizeLevel();
if (this.useFood){
this.speed = (this.speed * 2);
};
}
override public function saveTower(){
return ({parent:super.saveTowerGeneric(), useFood:this.useFood, sand:this.sand.copy(), buildReserve:this.buildReserve.copy()});
}
override public function freeBuildResource():void{
this.buildReserve[boardIndex] = 0;
this.buildReserve[survivorIndex] = 0;
}
protected function sendTrucks():void{
var _local1:Boolean;
if ((this.countResource(Resource.SURVIVORS) - this.buildReserve[survivorIndex]) > 0){
_local1 = this.tryNeed();
if (!_local1){
_local1 = this.tryOverflow();
};
};
}
protected function tryNeedTower(_arg1:Tower):ResourceCount{
var _local2:ResourceCount;
var _local3:List;
var _local4:*;
var _local5:ResourceCount;
var _local6:int;
var _local7:int;
_local2 = null;
_local3 = _arg1.getNeeds();
_local4 = _local3.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local6 = Lib.resourceToIndex(_local5.resource);
_local7 = ((this.stuff.count(_local5.resource) + this.stuff.incoming(_local5.resource)) - this.buildReserve[_local6]);
if (_arg1.getType() == Tower.DEPOT){
_local7 = (_local7 - this.stuff.reserve(_local5.resource));
};
if ((((((_local7 > 0)) && ((this.stuff.count(_local5.resource) > 0)))) && ((((_local2 == null)) || ((this.getWeight(_local5) > this.getWeight(_local2))))))){
_local2 = _local5;
};
};
return (_local2);
}
override public function getType():int{
return (Tower.DEPOT);
}
override public function addSand(_arg1:ResourceCount):void{
var _local2:int;
_local2 = Lib.resourceToIndex(_arg1.resource);
this.sand[_local2] = (this.sand[_local2] + _arg1.count);
}
override public function step(_arg1:int):void{
this.wait();
this.sendTrucks();
this.updateSand();
Game.map.noise(this.mapPos.x, this.mapPos.y, Option.towerNoise, this.zombieGuide);
}
protected function countNeeds(_arg1:Resource):int{
var _local2:int;
_local2 = ((this.stuff.reserve(_arg1) - this.stuff.count(_arg1)) - this.stuff.incoming(_arg1));
if (_local2 > 0){
return (this.getWeight(new ResourceCount(_arg1, _local2)));
};
return (0);
}
override public function toggleFood():void{
this.useFood = !(this.useFood);
}
protected function getSandLinks(_arg1:Resource):List{
var _local2:List;
var _local3:*;
var _local4:Route;
var _local5:Tower;
_local2 = new List();
_local3 = this.links.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
_local5 = Game.map.getCell(_local4.dest.x, _local4.dest.y).getTower();
if (((!((_local5 == null))) && (_local5.usesSand()))){
_local2.add(_local5);
};
};
return (_local2);
}
override public function load(_arg1):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
super.load(_arg1.parent);
this.useFood = _arg1.useFood;
_local2 = 0;
_local3 = Option.resourceCount;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local6 = _temp1;
this.sand[_local6] = _arg1.sand[_local6];
};
_local4 = 0;
_local5 = Option.resourceCount;
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local7 = _temp2;
this.buildReserve[_local7] = _arg1.buildReserve[_local7];
};
}
protected function updateSand():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:Resource;
_local1 = 0;
_local2 = Option.resourceCount;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = Lib.indexToResource(_local3);
this.updateSandResource(_local4);
};
}
protected function tryNeed():Boolean{
var _local1:Boolean;
var _local2:ResourceCount;
var _local3:Route;
var _local4:int;
var _local5:*;
var _local6:Route;
var _local7:Tower;
var _local8:ResourceCount;
var _local9:int;
var _local10:ResourceCount;
var _local11:int;
var _local12:int;
_local1 = false;
_local2 = null;
_local3 = null;
_local4 = 0;
_local5 = this.links.iterator();
while (_local5.hasNext()) {
_local6 = _local5.next();
_local7 = Game.map.getCell(_local6.dest.x, _local6.dest.y).getTower();
if (((!((_local7 == null))) && (_local6.shouldSend()))){
_local8 = this.tryNeedTower(_local7);
if (((!((_local8 == null))) && ((((_local2 == null)) || ((this.getWeight(_local8) > this.getWeight(_local2))))))){
_local2 = _local8;
_local3 = _local6;
_local4 = _local7.getType();
};
};
};
if (_local2 != null){
_local9 = this.stuff.count(_local2.resource);
if (_local4 == Tower.DEPOT){
_local11 = Lib.resourceToIndex(_local2.resource);
_local12 = (((this.stuff.count(_local2.resource) + this.stuff.incoming(_local2.resource)) - this.stuff.reserve(_local2.resource)) - this.buildReserve[_local11]);
_local9 = Math.floor(Math.min(_local9, _local12));
};
_local10 = new ResourceCount(_local2.resource, _local9);
this.createSupplyTruck(_local3.dest, _local10, _local3);
_local1 = true;
};
return (_local1);
}
protected function tryOverflow():Boolean{
var _local1:Boolean;
var _local2:ResourceCount;
var _local3:Route;
var _local4:*;
var _local5:Route;
var _local6:Tower;
var _local7:ResourceCount;
var _local8:ResourceCount;
_local1 = false;
_local2 = null;
_local3 = null;
_local4 = this.links.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local6 = Game.map.getCell(_local5.dest.x, _local5.dest.y).getTower();
if (((((!((_local6 == null))) && ((_local6.getType() == Tower.DEPOT)))) && (_local5.shouldSend()))){
_local7 = this.tryOverflowTower(_local6);
if (((!((_local7 == null))) && ((((_local2 == null)) || ((this.getWeight(_local7) < this.getWeight(_local2))))))){
_local2 = _local7;
_local3 = _local5;
};
};
};
if (_local2 != null){
_local8 = new ResourceCount(_local2.resource, Lib.truckLoad(_local2.resource));
this.createSupplyTruck(_local3.dest, _local8, _local3);
_local1 = true;
};
return (_local1);
}
}
}//package
Section 287
//DepotBuildScreen (DepotBuildScreen)
package {
import flash.display.*;
public dynamic class DepotBuildScreen extends MovieClip {
}
}//package
Section 288
//DepotMiscScreen (DepotMiscScreen)
package {
import flash.display.*;
public dynamic class DepotMiscScreen extends MovieClip {
}
}//package
Section 289
//DepotResourceScreen (DepotResourceScreen)
package {
import flash.display.*;
public dynamic class DepotResourceScreen extends MovieClip {
}
}//package
Section 290
//Direction (Direction)
package {
public class Direction extends enum {
public static const __isenum:Boolean = true;
public static var NORTH:Direction = new Direction("NORTH", 0);
;
public static var SOUTH:Direction = new Direction("SOUTH", 1);
;
public static var WEST:Direction = new Direction("WEST", 3);
;
public static var __constructs__:Array = ["NORTH", "SOUTH", "EAST", "WEST"];
public static var EAST:Direction = new Direction("EAST", 2);
;
public function Direction(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
}
}//package
Section 291
//DIterator (DIterator)
package {
import flash.*;
public class DIterator {
protected var current:DNode;
public function DIterator():void{
if (!Boot.skip_constructor){
this.current = null;
};
}
public function setNode(_arg1:DNode):void{
this.current = _arg1;
}
public function increment():void{
if (this.current != null){
this.current = this.current.next;
};
}
public function isValid():Boolean{
return (!((this.current == null)));
}
public function get(){
if (this.current == null){
return (null);
};
return (this.current.data);
}
public function getNode():DNode{
return (this.current);
}
public function decrement():void{
if (this.current != null){
this.current = this.current.prev;
};
}
public function copyFrom(_arg1:DIterator):void{
this.current = _arg1.current;
}
}
}//package
Section 292
//DList (DList)
package {
import flash.*;
public class DList {
protected var head:DNode;
protected var tail:DNode;
public function DList():void{
if (!Boot.skip_constructor){
this.head = null;
this.tail = null;
};
}
public function isEmpty():Boolean{
return ((this.head == null));
}
public function push_front(_arg1):void{
var _local2:DNode;
_local2 = new DNode();
_local2.data = _arg1;
if (this.head == null){
this.head = _local2;
this.tail = _local2;
} else {
this.head.prev = _local2;
_local2.next = this.head;
this.head = _local2;
};
}
public function erase(_arg1:DIterator):DIterator{
var _local2:DIterator;
_local2 = new DIterator();
if (_arg1.isValid()){
if (_arg1.getNode() == this.head){
this.pop_front();
_local2.setNode(this.head);
} else {
if (_arg1.getNode() == this.tail){
this.pop_back();
_local2.setNode(this.tail);
} else {
_arg1.getNode().prev.next = _arg1.getNode().next;
_arg1.getNode().next.prev = _arg1.getNode().prev;
_local2.setNode(_arg1.getNode().next);
};
};
};
return (_local2);
}
public function back(){
if (this.tail != null){
return (this.tail.data);
};
return (null);
}
public function front(){
if (this.head != null){
return (this.head.data);
};
return (null);
}
public function push_back(_arg1):void{
var _local2:DNode;
_local2 = new DNode();
_local2.data = _arg1;
if (this.tail == null){
this.head = _local2;
this.tail = _local2;
} else {
this.tail.next = _local2;
_local2.prev = this.tail;
this.tail = _local2;
};
}
public function backIterator():DIterator{
var _local1:DIterator;
_local1 = new DIterator();
_local1.setNode(this.tail);
return (_local1);
}
public function frontIterator():DIterator{
var _local1:DIterator;
_local1 = new DIterator();
_local1.setNode(this.head);
return (_local1);
}
public function insert(_arg1:DIterator, _arg2):DIterator{
var _local3:DIterator;
var _local4:DNode;
_local3 = new DIterator();
if (!_arg1.isValid()){
this.push_back(_arg2);
_local3.setNode(this.tail);
} else {
if (_arg1.getNode() == this.head){
this.push_front(_arg2);
_local3.setNode(this.head);
} else {
_local4 = new DNode();
_local4.data = _arg2;
_local4.prev = _arg1.getNode().prev;
_local4.next = _arg1.getNode();
_arg1.getNode().prev.next = _local4;
_arg1.getNode().prev = _local4;
_local3.setNode(_local4);
};
};
return (_local3);
}
public function pop_front():void{
if (this.head == this.tail){
this.head = null;
this.tail = null;
} else {
this.head.next.prev = null;
this.head = this.head.next;
};
}
public function pop_back():void{
if (this.head == this.tail){
this.head = null;
this.tail = null;
} else {
this.tail.prev.next = null;
this.tail = this.tail.prev;
};
}
}
}//package
Section 293
//DNode (DNode)
package {
import flash.*;
public class DNode {
public var prev:DNode;
public var next:DNode;
public var data;
public function DNode():void{
if (!Boot.skip_constructor){
this.next = null;
this.prev = null;
this.data = null;
};
}
}
}//package
Section 294
//enum (enum)
package {
public class enum {
public var index:int;
public var params:Array;
public var tag:String;
}
}//package
Section 295
//ExplosionLargeClip (ExplosionLargeClip)
package {
import flash.display.*;
public dynamic class ExplosionLargeClip extends MovieClip {
}
}//package
Section 296
//ExplosionSmallClip (ExplosionSmallClip)
package {
import flash.display.*;
public dynamic class ExplosionSmallClip extends MovieClip {
}
}//package
Section 297
//FeatureClip (FeatureClip)
package {
import flash.display.*;
public dynamic class FeatureClip extends MovieClip {
}
}//package
Section 298
//Field (Field)
package {
import flash.*;
public class Field {
public var steepBump:Bump;
public var shallowBump:Bump;
public var shallow:Line;
public var steep:Line;
public function Field():void{
if (!Boot.skip_constructor){
this.steep = new Line(new Offset(0, 0), new Offset(0, 0));
this.shallow = new Line(new Offset(0, 0), new Offset(0, 0));
this.steepBump = null;
this.shallowBump = null;
};
}
public function clone():Field{
var _local1:Field;
_local1 = new Field();
_local1.steep = new Line(this.steep.near, this.steep.far);
_local1.shallow = new Line(this.shallow.near, this.shallow.far);
_local1.steepBump = this.steepBump;
_local1.shallowBump = this.shallowBump;
return (_local1);
}
}
}//package
Section 299
//FloaterClip (FloaterClip)
package {
import flash.display.*;
public dynamic class FloaterClip extends MovieClip {
public function FloaterClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 300
//focusRectSkin (focusRectSkin)
package {
import flash.display.*;
public dynamic class focusRectSkin extends MovieClip {
}
}//package
Section 301
//FovState (FovState)
package {
import flash.*;
public class FovState {
public var isBlocked:Function;
public var extent:Offset;
public var visit:Function;
public var source:Offset;
public var quadrant:Offset;
public function FovState():void{
if (!Boot.skip_constructor){
this.source = null;
this.isBlocked = null;
this.visit = null;
this.quadrant = null;
this.extent = null;
};
}
}
}//package
Section 302
//Game (Game)
package {
import flash.display.*;
import flash.events.*;
import logic.*;
import ui.*;
import flash.net.*;
import mapgen.*;
import ui.menu.*;
public class Game {
public static var floater:MouseFloater;
public static var loadMap:String;
public static var settings:GameSettings;
protected static var mustSave:Boolean;
public static var view:View;
public static var progress:Progress;
public static var actorList:ActorList;
protected static var isFast:Boolean;
protected static var gameState:GameOver;
public static var tracker:ZombieTracker;
public static var update:Update;
public static var script:Script;
public static var sprites:SpriteDisplay;
public static var map:Map;
public static var pathPool:PathFinderPool;
public static var VERSION:int = 2;
public static var spawner:ZombieSpawner;
public static var editor:Editor;
public static var pause:Pause;
public static var select:Select;
public static var actions:ActionQueue;
public static function saveGame():void{
var _local1:SharedObject;
while (pathPool.isActive()) {
pathPool.step();
};
_local1 = Main.gameDisk;
_local1.clear();
_local1.data.done = false;
_local1.data.settings = settings.save();
_local1.data.explosions = Save.saveList(view.explosions, Explosion.saveS);
_local1.data.mainReplay = Main.replay.save();
_local1.data.windowOffset = view.window.getCenter().save();
_local1.data.actorList = actorList.save();
_local1.data.map = map.save();
_local1.data.tracker = tracker.save();
_local1.data.spawner = spawner.save();
_local1.data.pause = pause.save();
_local1.data.progress = progress.save();
_local1.data.script = script.save();
_local1.data.done = true;
_local1.data.version = VERSION;
_local1.flush(1000000);
view.centerMenu.changeState(CenterMenu.NONE);
}
public static function init(_arg1:GameSettings):void{
Lib.reseed(null);
Game.actorList = null;
Game.update = null;
Game.progress = null;
Game.sprites = null;
Game.select = null;
Game.floater = null;
Game.pause = null;
Game.map = null;
Game.actions = null;
Game.tracker = null;
Game.spawner = null;
Game.pathPool = null;
Game.view = null;
Game.loadMap = null;
Game.settings = _arg1.clone();
Game.view = new View(Main.getRoot());
Game.actorList = new ActorList();
Game.update = new Update();
Game.map = new Map(settings.getSize());
Game.sprites = new SpriteDisplay(view.window.getClip());
Game.progress = new Progress();
Game.select = new Select(Main.getRoot());
Game.floater = new MouseFloater(Main.getRoot());
Game.pause = new Pause(Main.getRoot());
Game.actions = new ActionQueue();
Game.pathPool = new PathFinderPool();
Game.tracker = new ZombieTracker();
Game.spawner = new ZombieSpawner(Main.getRoot(), settings);
view.initMenus(Main.getRoot());
if (settings.isEditor()){
Game.editor = new Editor(Main.getRoot());
} else {
Game.editor = null;
};
Game.script = new Script(view.scriptSprite);
ScriptParse.parse(settings.getScript(), script);
Main.getRoot().addEventListener(Event.ENTER_FRAME, Game.enterFrame);
Main.clearFirstGame();
Game.gameState = GameOver.CONTINUE;
Game.mustSave = false;
Game.isFast = false;
}
protected static function endEditMap(_arg1:int):void{
var _local2:GameSettings;
_local2 = new GameSettings();
_local2.beginLoadEdit(settings.saveMap(), settings.getWinText(), settings.getLoseText());
Main.endPlay(_arg1, _local2);
}
public static function cleanup():void{
Main.getRoot().removeEventListener(Event.ENTER_FRAME, Game.enterFrame);
if (Game.editor != null){
editor.cleanup();
Game.editor = null;
};
spawner.cleanup();
Game.spawner = null;
tracker.cleanup();
Game.tracker = null;
Game.pathPool = null;
Game.actions = null;
pause.cleanup();
Game.pause = null;
floater.cleanup();
Game.floater = null;
select.cleanup();
Game.select = null;
progress.cleanup();
Game.progress = null;
sprites.cleanup();
Game.sprites = null;
map.cleanup();
Game.map = null;
Game.update = null;
view.cleanup();
Game.view = null;
}
protected static function checkSave():void{
if (mustSave){
view.centerMenu.changeState(CenterMenu.SAVE_WAIT);
Game.mustSave = false;
};
}
public static function newGame(_arg1:GameSettings):void{
var _local2:MapGenerator;
var _local3:List;
init(_arg1);
_local2 = new MapGenerator(map, settings);
if (((settings.isCustom()) && (settings.isEditor()))){
Editor.createEdges();
editor.loadMap(settings.getMap());
} else {
if (settings.isEditor()){
Editor.createEdges();
editor.createBorders();
} else {
if (settings.isCustom()){
Editor.createEdges();
_local3 = new List();
EditLoader.loadMap(settings.getMap(), _local3);
tracker.addBuildings();
} else {
_local2.resetMap();
tracker.addBuildings();
view.window.fillBitmap();
};
};
};
view.window.moveWindowCenter(settings.getStart().x, settings.getStart().y);
view.mini.update();
Main.replay.addBeginPlay();
script.takeAction();
}
public static function resize():void{
var _local1:Stage;
var _local2:LayoutGame;
_local1 = Main.getRoot().stage;
view.layout = new LayoutGame(_local1.stageWidth, _local1.stageHeight, settings);
_local2 = view.layout;
sprites.resize(_local2);
select.resize(_local2);
view.resize();
pause.resize(_local2);
floater.resize(_local2);
}
protected static function checkEndGame():Boolean{
var _local1:Boolean;
var _local2:enum;
var _local3:GameSettings;
var _local4:GameSettings;
_local1 = true;
_local2 = gameState;
switch (_local2.index){
case 1:
Main.endPlay(MainMenu.GENERATE_MAP, settings.clone());
break;
case 2:
Main.endPlay(MainMenu.LOAD_WAIT, new GameSettings());
break;
case 3:
if (settings.isTesting()){
endEditMap(MainMenu.GENERATE_MAP);
} else {
Main.endPlay(MainMenu.START, new GameSettings());
};
break;
case 4:
if (settings.isTesting()){
endEditMap(MainMenu.STORY_WIN);
} else {
Main.replay.setState(MainMenu.WIN);
Main.endPlay(MainMenu.STORY_WIN, settings.clone());
};
break;
case 5:
if (settings.isTesting()){
endEditMap(MainMenu.STORY_LOSE);
} else {
Main.replay.setState(MainMenu.LOSE);
Main.endPlay(MainMenu.STORY_LOSE, settings.clone());
};
break;
case 6:
_local3 = new GameSettings();
_local3.beginLoadEdit(loadMap, "", "");
Main.endPlay(MainMenu.GENERATE_MAP, _local3);
break;
case 7:
_local4 = new GameSettings();
_local4.beginLoadTest(loadMap);
_local4.setStart(view.window.getCenter());
Main.endPlay(MainMenu.STORY_BRIEFING, _local4);
break;
case 8:
endEditMap(MainMenu.GENERATE_MAP);
break;
default:
_local1 = false;
break;
};
return (_local1);
}
public static function toggleFast():void{
Game.isFast = !(isFast);
}
public static function attemptSave():void{
Game.mustSave = true;
}
public static function endGame(_arg1:GameOver):void{
Game.gameState = _arg1;
}
protected static function enterFrame(_arg1:Event):void{
var _local2:int;
var _local3:int;
var _local4:int;
_local2 = 1;
if (isFast){
_local2 = Option.fastFrames;
};
_local3 = 0;
while (_local3 < _local2) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local4 = _temp1;
actions.runAll();
if (((!(pause.isPaused())) && (!(settings.isEditor())))){
actorList.enterFrame();
actions.runAll();
pathPool.step();
spawner.step();
settings.incrementPlayTime();
};
update.commit();
view.enterFrame();
if (checkEndGame()){
break;
};
checkSave();
};
}
public static function loadGame():void{
var _local1:SharedObject;
var _local2:GameSettings;
var _local3:List;
_local1 = Main.gameDisk;
if ((((_local1.data.done == true)) && ((_local1.data.version == VERSION)))){
_local2 = new GameSettings();
_local2.load(_local1.data.settings);
Main.replay.load(_local1.data.mainReplay);
init(_local2);
Util.seed(settings.getNormalName());
update.clear();
map.load(_local1.data.map);
actorList.load(_local1.data.actorList);
tracker.load(_local1.data.tracker);
spawner.load(_local1.data.spawner);
progress.load(_local1.data.progress);
script.load(_local1.data.script);
pause.load(_local1.data.pause);
view.window.fillBitmap();
view.window.moveWindowCenter(_local1.data.windowOffset.x, _local1.data.windowOffset.y);
_local3 = Load.loadList(_local1.data.explosions, Explosion.load);
view.mini.update();
update.buttons();
update.changeStatus();
};
}
}
}//package
Section 303
//GameOver (GameOver)
package {
public class GameOver extends enum {
public static const __isenum:Boolean = true;
public static var LOAD_MAP:GameOver = new GameOver("LOAD_MAP", 6);
;
public static var RESTART_LOAD:GameOver = new GameOver("RESTART_LOAD", 2);
;
public static var EDIT_MAP:GameOver = new GameOver("EDIT_MAP", 8);
;
public static var RESTART:GameOver = new GameOver("RESTART", 1);
;
public static var __constructs__:Array = ["CONTINUE", "RESTART", "RESTART_LOAD", "END", "WIN", "LOSE", "LOAD_MAP", "TRY_MAP", "EDIT_MAP"];
public static var LOSE:GameOver = new GameOver("LOSE", 5);
;
public static var TRY_MAP:GameOver = new GameOver("TRY_MAP", 7);
;
public static var END:GameOver = new GameOver("END", 3);
;
public static var WIN:GameOver = new GameOver("WIN", 4);
;
public static var CONTINUE:GameOver = new GameOver("CONTINUE", 0);
;
public function GameOver(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
}
}//package
Section 304
//Grid (Grid)
package {
import flash.*;
public class Grid {
protected var mSizeX:int;
protected var mSizeY:int;
protected var mBuffer:Array;
public function Grid(_arg1:int=0, _arg2:int=0):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
super();
if (!Boot.skip_constructor){
this.mBuffer = [];
this.mSizeX = _arg1;
this.mSizeY = _arg2;
_local3 = 0;
while (_local3 < _arg1) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local4 = _temp1;
_local5 = 0;
while (_local5 < _arg2) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp2;
this.mBuffer.push(null);
};
};
};
}
public function set(_arg1:int, _arg2:int, _arg3):void{
if ((((((((_arg1 < 0)) || ((_arg1 >= this.mSizeX)))) || ((_arg2 < 0)))) || ((_arg2 >= this.mSizeY)))){
throw (new Error((((("Grid out of bounds: (" + Std.string(_arg1)) + ", ") + Std.string(_arg2)) + ")")));
};
this.mBuffer[(_arg1 + (_arg2 * this.mSizeX))] = _arg3;
}
public function save(_arg1:Function){
return ({mBuffer:this.saveBuffer(_arg1), mSizeX:this.mSizeX, mSizeY:this.mSizeY});
}
public function get(_arg1:int, _arg2:int){
if ((((((((_arg1 < 0)) || ((_arg1 >= this.mSizeX)))) || ((_arg2 < 0)))) || ((_arg2 >= this.mSizeY)))){
throw (new Error((((("Grid out of bounds: (" + Std.string(_arg1)) + ", ") + Std.string(_arg2)) + ")")));
};
return (this.mBuffer[(_arg1 + (_arg2 * this.mSizeX))]);
}
public function sizeX():int{
return (this.mSizeX);
}
public function sizeY():int{
return (this.mSizeY);
}
public function saveBuffer(_arg1:Function):Array{
var _local2:Array;
var _local3:int;
var _local4:Array;
var _local5:*;
_local2 = new Array();
_local3 = 0;
_local4 = this.mBuffer;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local2.push(_arg1(_local5));
};
return (_local2);
}
public static function load(_arg1, _arg2:Function):Grid{
var _local3:int;
var _local4:int;
var _local5:Grid;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local3 = _arg1.mSizeX;
_local4 = _arg1.mSizeY;
_local5 = new Grid(_local3, _local4);
_local6 = 0;
while (_local6 < _local4) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local7 = _temp1;
_local8 = 0;
while (_local8 < _local3) {
var _temp2 = _local8;
_local8 = (_local8 + 1);
_local9 = _temp2;
_local5.set(_local9, _local7, _arg2(_arg1.mBuffer[(_local9 + (_local7 * _local3))]));
};
};
return (_local5);
}
}
}//package
Section 305
//gunCycle_1_gun1 (gunCycle_1_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_1_gun1 extends MovieClip {
public function gunCycle_1_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 306
//gunCycle_1_gun2 (gunCycle_1_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_1_gun2 extends MovieClip {
public function gunCycle_1_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 307
//gunCycle_10_gun1 (gunCycle_10_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_10_gun1 extends MovieClip {
public function gunCycle_10_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 308
//gunCycle_10_gun2 (gunCycle_10_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_10_gun2 extends MovieClip {
public function gunCycle_10_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 309
//gunCycle_11_gun1 (gunCycle_11_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_11_gun1 extends MovieClip {
public function gunCycle_11_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 310
//gunCycle_11_gun2 (gunCycle_11_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_11_gun2 extends MovieClip {
public function gunCycle_11_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 311
//gunCycle_13_gun1 (gunCycle_13_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_13_gun1 extends MovieClip {
public function gunCycle_13_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 312
//gunCycle_13_gun2 (gunCycle_13_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_13_gun2 extends MovieClip {
public function gunCycle_13_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 313
//gunCycle_13_idle2_pre (gunCycle_13_idle2_pre)
package {
import flash.display.*;
public dynamic class gunCycle_13_idle2_pre extends MovieClip {
public function gunCycle_13_idle2_pre(){
addFrameScript(125, frame126);
}
function frame126(){
gotoAndStop(1);
}
}
}//package
Section 314
//gunCycle_14_gun1 (gunCycle_14_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_14_gun1 extends MovieClip {
public function gunCycle_14_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 315
//gunCycle_14_gun2 (gunCycle_14_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_14_gun2 extends MovieClip {
public function gunCycle_14_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 316
//gunCycle_15_gun1 (gunCycle_15_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_15_gun1 extends MovieClip {
public function gunCycle_15_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 317
//gunCycle_15_gun2 (gunCycle_15_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_15_gun2 extends MovieClip {
public function gunCycle_15_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 318
//gunCycle_16_gun1 (gunCycle_16_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_16_gun1 extends MovieClip {
public function gunCycle_16_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 319
//gunCycle_16_gun2 (gunCycle_16_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_16_gun2 extends MovieClip {
public function gunCycle_16_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 320
//gunCycle_17_gun1 (gunCycle_17_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_17_gun1 extends MovieClip {
public function gunCycle_17_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 321
//gunCycle_17_gun2 (gunCycle_17_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_17_gun2 extends MovieClip {
public function gunCycle_17_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 322
//gunCycle_18_gun1 (gunCycle_18_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_18_gun1 extends MovieClip {
public function gunCycle_18_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 323
//gunCycle_18_gun2 (gunCycle_18_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_18_gun2 extends MovieClip {
public function gunCycle_18_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 324
//gunCycle_19_gun1 (gunCycle_19_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_19_gun1 extends MovieClip {
public function gunCycle_19_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 325
//gunCycle_19_gun2 (gunCycle_19_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_19_gun2 extends MovieClip {
public function gunCycle_19_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 326
//gunCycle_2_gun1 (gunCycle_2_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_2_gun1 extends MovieClip {
public function gunCycle_2_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 327
//gunCycle_2_gun2 (gunCycle_2_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_2_gun2 extends MovieClip {
public function gunCycle_2_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 328
//gunCycle_20_gun1 (gunCycle_20_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_20_gun1 extends MovieClip {
public function gunCycle_20_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 329
//gunCycle_20_gun2 (gunCycle_20_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_20_gun2 extends MovieClip {
public function gunCycle_20_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 330
//gunCycle_4_gun1 (gunCycle_4_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_4_gun1 extends MovieClip {
public function gunCycle_4_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 331
//gunCycle_4_gun2 (gunCycle_4_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_4_gun2 extends MovieClip {
public function gunCycle_4_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 332
//gunCycle_4_idle2_pre (gunCycle_4_idle2_pre)
package {
import flash.display.*;
public dynamic class gunCycle_4_idle2_pre extends MovieClip {
public function gunCycle_4_idle2_pre(){
addFrameScript(125, frame126);
}
function frame126(){
gotoAndStop(1);
}
}
}//package
Section 333
//gunCycle_5_gun1 (gunCycle_5_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_5_gun1 extends MovieClip {
public function gunCycle_5_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 334
//gunCycle_5_gun2 (gunCycle_5_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_5_gun2 extends MovieClip {
public function gunCycle_5_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 335
//gunCycle_7_gun1 (gunCycle_7_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_7_gun1 extends MovieClip {
public function gunCycle_7_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 336
//gunCycle_7_gun2 (gunCycle_7_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_7_gun2 extends MovieClip {
public function gunCycle_7_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 337
//gunCycle_8_gun1 (gunCycle_8_gun1)
package {
import flash.display.*;
public dynamic class gunCycle_8_gun1 extends MovieClip {
public function gunCycle_8_gun1(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 338
//gunCycle_8_gun2 (gunCycle_8_gun2)
package {
import flash.display.*;
public dynamic class gunCycle_8_gun2 extends MovieClip {
public function gunCycle_8_gun2(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 339
//gunCycle_8_idle1_pre (gunCycle_8_idle1_pre)
package {
import flash.display.*;
public dynamic class gunCycle_8_idle1_pre extends MovieClip {
public function gunCycle_8_idle1_pre(){
addFrameScript(125, frame126);
}
function frame126(){
gotoAndStop(1);
}
}
}//package
Section 340
//gunCycle_midlayer_1 (gunCycle_midlayer_1)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_1 extends MovieClip {
}
}//package
Section 341
//gunCycle_midlayer_10 (gunCycle_midlayer_10)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_10 extends MovieClip {
}
}//package
Section 342
//gunCycle_midlayer_11 (gunCycle_midlayer_11)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_11 extends MovieClip {
}
}//package
Section 343
//gunCycle_midlayer_13 (gunCycle_midlayer_13)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_13 extends MovieClip {
}
}//package
Section 344
//gunCycle_midlayer_14 (gunCycle_midlayer_14)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_14 extends MovieClip {
}
}//package
Section 345
//gunCycle_midlayer_15 (gunCycle_midlayer_15)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_15 extends MovieClip {
}
}//package
Section 346
//gunCycle_midlayer_16 (gunCycle_midlayer_16)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_16 extends MovieClip {
}
}//package
Section 347
//gunCycle_midlayer_17 (gunCycle_midlayer_17)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_17 extends MovieClip {
}
}//package
Section 348
//gunCycle_midlayer_18 (gunCycle_midlayer_18)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_18 extends MovieClip {
}
}//package
Section 349
//gunCycle_midlayer_19 (gunCycle_midlayer_19)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_19 extends MovieClip {
}
}//package
Section 350
//gunCycle_midlayer_2 (gunCycle_midlayer_2)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_2 extends MovieClip {
}
}//package
Section 351
//gunCycle_midlayer_20 (gunCycle_midlayer_20)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_20 extends MovieClip {
}
}//package
Section 352
//gunCycle_midlayer_4 (gunCycle_midlayer_4)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_4 extends MovieClip {
}
}//package
Section 353
//gunCycle_midlayer_5 (gunCycle_midlayer_5)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_5 extends MovieClip {
}
}//package
Section 354
//gunCycle_midlayer_7 (gunCycle_midlayer_7)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_7 extends MovieClip {
}
}//package
Section 355
//gunCycle_midlayer_8 (gunCycle_midlayer_8)
package {
import flash.display.*;
public dynamic class gunCycle_midlayer_8 extends MovieClip {
}
}//package
Section 356
//gunCycle_toplayer_1 (gunCycle_toplayer_1)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_1 extends MovieClip {
}
}//package
Section 357
//gunCycle_toplayer_10 (gunCycle_toplayer_10)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_10 extends MovieClip {
}
}//package
Section 358
//gunCycle_toplayer_11 (gunCycle_toplayer_11)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_11 extends MovieClip {
}
}//package
Section 359
//gunCycle_toplayer_13 (gunCycle_toplayer_13)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_13 extends MovieClip {
}
}//package
Section 360
//gunCycle_toplayer_14 (gunCycle_toplayer_14)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_14 extends MovieClip {
}
}//package
Section 361
//gunCycle_toplayer_15 (gunCycle_toplayer_15)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_15 extends MovieClip {
}
}//package
Section 362
//gunCycle_toplayer_16 (gunCycle_toplayer_16)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_16 extends MovieClip {
}
}//package
Section 363
//gunCycle_toplayer_17 (gunCycle_toplayer_17)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_17 extends MovieClip {
}
}//package
Section 364
//gunCycle_toplayer_18 (gunCycle_toplayer_18)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_18 extends MovieClip {
}
}//package
Section 365
//gunCycle_toplayer_19 (gunCycle_toplayer_19)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_19 extends MovieClip {
}
}//package
Section 366
//gunCycle_toplayer_2 (gunCycle_toplayer_2)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_2 extends MovieClip {
}
}//package
Section 367
//gunCycle_toplayer_20 (gunCycle_toplayer_20)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_20 extends MovieClip {
}
}//package
Section 368
//gunCycle_toplayer_4 (gunCycle_toplayer_4)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_4 extends MovieClip {
}
}//package
Section 369
//gunCycle_toplayer_5 (gunCycle_toplayer_5)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_5 extends MovieClip {
}
}//package
Section 370
//gunCycle_toplayer_7 (gunCycle_toplayer_7)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_7 extends MovieClip {
}
}//package
Section 371
//gunCycle_toplayer_8 (gunCycle_toplayer_8)
package {
import flash.display.*;
public dynamic class gunCycle_toplayer_8 extends MovieClip {
}
}//package
Section 372
//Hash (Hash)
package {
import flash.utils.*;
import flash.*;
public class Hash {
protected var h:Dictionary;
public function Hash():void{
if (!Boot.skip_constructor){
this.h = new Dictionary();
};
}
public function set(_arg1:String, _arg2):void{
this.h[("$" + _arg1)] = _arg2;
}
public function remove(_arg1:String):Boolean{
_arg1 = ("$" + _arg1);
if (!this.h.hasOwnProperty(_arg1)){
return (false);
};
delete this.h[_arg1];
return (true);
}
public function toString():String{
var _local1:StringBuf;
var _local2:*;
var _local3:*;
var _local4:String;
_local1 = new StringBuf();
_local1.add("{");
_local2 = this.keys();
_local3 = _local2;
while (_local3.hasNext()) {
_local4 = _local3.next();
_local1.add(_local4);
_local1.add(" => ");
_local1.add(Std.string(this.get(_local4)));
if (_local2.hasNext()){
_local1.add(", ");
};
};
_local1.add("}");
return (_local1.toString());
}
public function iterator(){
return ({ref:this.h, it:function (_arg1:Hash){
var _local2:*;
var _local3:*;
_local2 = new Array();
for (_local3 in _arg1.h) {
_local2.push(_local3);
};
return (_local2);
}(this).iterator(), hasNext:function (){
return (this.it.hasNext());
}, next:function (){
var _local1:*;
_local1 = this.it.next();
return (this.ref[_local1]);
}});
}
public function keys(){
return (function (_arg1:Hash){
var _local2:*;
var _local3:*;
_local2 = new Array();
for (_local3 in _arg1.h) {
_local2.push(_local3.substr(1));
};
return (_local2);
}(this).iterator());
}
public function get(_arg1:String){
return (this.h[("$" + _arg1)]);
}
public function exists(_arg1:String):Boolean{
return (this.h.hasOwnProperty(("$" + _arg1)));
}
}
}//package
Section 373
//IntHash (IntHash)
package {
import flash.utils.*;
import flash.*;
public class IntHash {
protected var h:Dictionary;
public function IntHash():void{
if (!Boot.skip_constructor){
this.h = new Dictionary();
};
}
public function set(_arg1:int, _arg2):void{
this.h[_arg1] = _arg2;
}
public function remove(_arg1:int):Boolean{
if (!this.h.hasOwnProperty(_arg1)){
return (false);
};
delete this.h[_arg1];
return (true);
}
public function toString():String{
var _local1:StringBuf;
var _local2:*;
var _local3:*;
var _local4:int;
_local1 = new StringBuf();
_local1.add("{");
_local2 = this.keys();
_local3 = _local2;
while (_local3.hasNext()) {
_local4 = _local3.next();
_local1.add(_local4);
_local1.add(" => ");
_local1.add(Std.string(this.get(_local4)));
if (_local2.hasNext()){
_local1.add(", ");
};
};
_local1.add("}");
return (_local1.toString());
}
public function iterator(){
return ({ref:this.h, it:this.keys(), hasNext:function (){
return (this.it.hasNext());
}, next:function (){
var _local1:*;
_local1 = this.it.next();
return (this.ref[_local1]);
}});
}
public function keys(){
return (function (_arg1:IntHash){
var _local2:*;
var _local3:*;
_local2 = new Array();
for (_local3 in _arg1.h) {
_local2.push(_local3);
};
return (_local2);
}(this).iterator());
}
public function get(_arg1:int){
return (this.h[_arg1]);
}
public function exists(_arg1:int):Boolean{
return (this.h.hasOwnProperty(_arg1));
}
}
}//package
Section 374
//Keyboard (Keyboard)
package {
import flash.display.*;
import flash.events.*;
import ui.*;
import flash.*;
public class Keyboard {
protected var shiftPressed:Boolean;
protected var hotkeyHandlers:List;
protected var repeat:int;
protected var stage:Stage;
public static var enterCode:uint = 13;
public static var deleteCode:uint = 46;
public static var backSpaceCode:uint = 8;
public static var escapeCode:uint = 27;
public function Keyboard(_arg1:Stage=null):void{
if (!Boot.skip_constructor){
this.stage = _arg1;
this.repeat = Option.repeatWait;
this.shiftPressed = false;
this.hotkeyHandlers = new List();
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, this.onKeyDown);
this.stage.addEventListener(KeyboardEvent.KEY_UP, this.onKeyUp);
this.stage.addEventListener(Event.ENTER_FRAME, this.step);
};
}
protected function onKeyDown(_arg1:KeyboardEvent):void{
var _local2:String;
var _local3:uint;
var _local4:*;
var _local5:Function;
if (this.repeat == Option.repeatWait){
this.repeat = 0;
_local2 = String.fromCharCode(_arg1.charCode);
_local3 = _arg1.keyCode;
if (_local3 == Workaround.SHIFT){
this.shiftPressed = true;
};
_local4 = this.hotkeyHandlers.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
if (_local5(_local2, _local3)){
break;
};
};
};
}
public function cleanup():void{
this.stage.removeEventListener(KeyboardEvent.KEY_DOWN, this.onKeyDown);
this.stage.removeEventListener(KeyboardEvent.KEY_UP, this.onKeyUp);
this.stage.removeEventListener(Event.ENTER_FRAME, this.step);
}
public function addHandler(_arg1:Function):void{
this.hotkeyHandlers.add(_arg1);
}
protected function step(_arg1:Event):void{
if (this.repeat < Option.repeatWait){
this.repeat++;
};
}
public function shift():Boolean{
return (this.shiftPressed);
}
public function clearHandlers():void{
this.hotkeyHandlers = new List();
}
protected function onKeyUp(_arg1:KeyboardEvent):void{
this.repeat = Option.repeatWait;
if (_arg1.keyCode == Workaround.SHIFT){
this.shiftPressed = false;
};
}
}
}//package
Section 375
//Lib (Lib)
package {
import ui.*;
import twister.*;
import native.*;
public class Lib {
public static var resource:Array = [Resource.AMMO, Resource.BOARDS, Resource.FOOD, Resource.SURVIVORS];
public static var resourceLoad:Array = [ammoLoad, boardLoad, foodLoad, survivorLoad];
public static var dirDeltas:Array = [new Point(0, -1), new Point(0, 1), new Point(1, 0), new Point(-1, 0)];
public static var delta:Array = [new Point(-1, 0), new Point(1, 0), new Point(0, -1), new Point(0, 1)];
protected static var generator:Twister = new Twister();
public static var ammoLoad:ResourceCount = new ResourceCount(Resource.AMMO, truckLoad(Resource.AMMO));
public static var directions:Array = [Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST];
public static var foodLoad:ResourceCount = new ResourceCount(Resource.FOOD, truckLoad(Resource.FOOD));
public static var boardLoad:ResourceCount = new ResourceCount(Resource.BOARDS, truckLoad(Resource.BOARDS));
public static var survivorLoad:ResourceCount = new ResourceCount(Resource.SURVIVORS, truckLoad(Resource.SURVIVORS));
public static function intAbs(_arg1:int):int{
if (_arg1 > 0){
return (_arg1);
};
return (-(_arg1));
}
public static function getLimit(_arg1:Point, _arg2:Point):Point{
return (new Point((Math.floor(Math.max(_arg1.x, _arg2.x)) + 1), (Math.floor(Math.max(_arg1.y, _arg2.y)) + 1)));
}
public static function adjacentZombie(_arg1:Point):Boolean{
var _local2:Boolean;
var _local3:int;
var _local4:Array;
var _local5:Point;
var _local6:Point;
_local2 = false;
_local2 = ((_local2) || (Game.map.getCell(_arg1.x, _arg1.y).hasZombies()));
_local3 = 0;
_local4 = delta;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
_local6 = new Point((_arg1.x + _local5.x), (_arg1.y + _local5.y));
if (!outsideMap(_local6)){
_local2 = ((_local2) || (Game.map.getCell(_local6.x, _local6.y).hasZombies()));
};
};
return (_local2);
}
public static function cellToPixel(_arg1:int):int{
return ((_arg1 * Option.cellPixels));
}
public static function directionToString(_arg1:Direction):String{
var _local2:String;
var _local3:enum;
_local2 = Text.northLabel;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = Text.northLabel;
break;
case 1:
_local2 = Text.southLabel;
break;
case 2:
_local2 = Text.eastLabel;
break;
case 3:
_local2 = Text.westLabel;
break;
};
return (_local2);
}
public static function rotateCW(_arg1:Direction):Direction{
var _local2:Direction;
var _local3:enum;
_local2 = Direction.NORTH;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = Direction.EAST;
break;
case 1:
_local2 = Direction.WEST;
break;
case 2:
_local2 = Direction.SOUTH;
break;
case 3:
_local2 = Direction.NORTH;
break;
};
return (_local2);
}
public static function getOffset(_arg1:Point, _arg2:Point):Point{
return (new Point(Math.floor(Math.min(_arg1.x, _arg2.x)), Math.floor(Math.min(_arg1.y, _arg2.y))));
}
public static function indexToDirection(_arg1:int):Direction{
var _local2:Direction;
_local2 = Direction.NORTH;
switch (_arg1){
case 0:
_local2 = Direction.NORTH;
break;
case 1:
_local2 = Direction.SOUTH;
break;
case 2:
_local2 = Direction.EAST;
break;
case 3:
_local2 = Direction.WEST;
break;
default:
_local2 = Direction.NORTH;
break;
};
return (_local2);
}
protected static function hasZombies(_arg1:Point):Boolean{
return (((!(outsideMap(_arg1))) && (Game.map.getCell(_arg1.x, _arg1.y).hasZombies())));
}
public static function directionToIndex(_arg1:Direction):int{
var _local2:int;
var _local3:enum;
_local2 = 0;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = 0;
break;
case 1:
_local2 = 1;
break;
case 2:
_local2 = 2;
break;
case 3:
_local2 = 3;
break;
};
return (_local2);
}
public static function directionToAngle(_arg1:Direction):int{
var _local2:int;
var _local3:enum;
_local2 = 0;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = 90;
break;
case 1:
_local2 = -90;
break;
case 2:
_local2 = 180;
break;
case 3:
_local2 = 0;
break;
};
return (_local2);
}
public static function resourceToString(_arg1:Resource):String{
var _local2:String;
var _local3:enum;
_local2 = Text.ammoLabel;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = Text.ammoLabel;
break;
case 1:
_local2 = Text.boardsLabel;
break;
case 2:
_local2 = Text.foodLabel;
break;
case 3:
_local2 = Text.survivorsLabel;
break;
};
return (_local2);
}
public static function indexToResource(_arg1:int):Resource{
var _local2:Resource;
_local2 = null;
if (_arg1 == 0){
_local2 = Resource.AMMO;
} else {
if (_arg1 == 1){
_local2 = Resource.BOARDS;
} else {
if (_arg1 == 2){
_local2 = Resource.FOOD;
} else {
if (_arg1 == 3){
_local2 = Resource.SURVIVORS;
};
};
};
};
return (_local2);
}
public static function getAngle(_arg1:Point, _arg2:Point):int{
var _local3:Number;
_local3 = Math.atan2((_arg1.y - _arg2.y), (_arg1.x - _arg2.x));
return (Math.round(((_local3 * 180) / Math.PI)));
}
public static function pixelToCell(_arg1:int):int{
return (Math.floor((_arg1 / Option.cellPixels)));
}
public static function reseed(_arg1:Array):void{
Lib.generator = new Twister(null, _arg1);
}
public static function rand(_arg1:int):int{
return ((generator.getPositiveInt() % _arg1));
}
public static function resourceToIndex(_arg1:Resource):int{
var _local2:int;
var _local3:enum;
_local2 = 0;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = 0;
break;
case 1:
_local2 = 1;
break;
case 2:
_local2 = 2;
break;
case 3:
_local2 = 3;
break;
};
return (_local2);
}
public static function newResourceArray():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
var _local4:int;
_local1 = [];
_local2 = 0;
_local3 = Option.resourceCount;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local1.push(0);
};
return (_local1);
}
public static function nearestZombie(_arg1:int, _arg2:int, _arg3:int):Point{
var _local4:Point;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
_local4 = new Point(0, 0);
_local5 = 1;
_local6 = (_arg3 + 1);
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp1;
_local8 = -(_local7);
_local9 = _local7;
while (_local8 < _local9) {
var _temp2 = _local8;
_local8 = (_local8 + 1);
_local10 = _temp2;
_local4.y = (_arg2 + _local10);
_local4.x = (_arg1 - _local7);
if (hasZombies(_local4)){
return (_local4);
};
_local4.x = (_arg1 + _local7);
if (hasZombies(_local4)){
return (_local4);
};
_local4.x = (_arg1 + _local10);
_local4.y = (_arg2 - _local7);
if (hasZombies(_local4)){
return (_local4);
};
_local4.y = (_arg2 + _local7);
if (hasZombies(_local4)){
return (_local4);
};
};
};
return (null);
}
public static function rotateCCW(_arg1:Direction):Direction{
var _local2:Direction;
var _local3:enum;
_local2 = Direction.NORTH;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = Direction.WEST;
break;
case 1:
_local2 = Direction.EAST;
break;
case 2:
_local2 = Direction.NORTH;
break;
case 3:
_local2 = Direction.SOUTH;
break;
};
return (_local2);
}
public static function trace(_arg1):void{
NativeBase.nativeTrace(_arg1);
}
public static function indexToBackgroundType(_arg1:int):BackgroundType{
var _local2:BackgroundType;
_local2 = BackgroundType.BUILDING;
switch (_arg1){
case 0:
_local2 = BackgroundType.BUILDING;
break;
case 1:
_local2 = BackgroundType.ENTRANCE;
break;
case 2:
_local2 = BackgroundType.PARK;
break;
case 3:
_local2 = BackgroundType.STREET;
break;
case 4:
_local2 = BackgroundType.ALLEY;
break;
case 5:
_local2 = BackgroundType.BRIDGE;
break;
case 6:
_local2 = BackgroundType.WATER;
break;
default:
_local2 = BackgroundType.STREET;
break;
};
return (_local2);
}
public static function randWeightedIndex(_arg1:Array, _arg2:Twister=null):int{
var _local3:Twister;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
_local3 = _arg2;
if (_local3 == null){
_local3 = generator;
};
_local4 = 0;
_local5 = 0;
while (_local5 < _arg1.length) {
_local7 = _arg1[_local5];
_local5++;
_local4 = (_local4 + _local7);
};
_local6 = (_local3.getPositiveInt() % _local4);
return (weightedIndex(_local6, _arg1));
}
public static function randDirection(_arg1:Twister=null):Direction{
var _local2:Twister;
var _local3:int;
_local2 = _arg1;
if (_local2 == null){
_local2 = generator;
};
_local3 = (_local2.getPositiveInt() % 4);
if (_local3 == 0){
return (Direction.NORTH);
};
if (_local3 == 1){
return (Direction.SOUTH);
};
if (_local3 == 2){
return (Direction.EAST);
};
return (Direction.WEST);
}
public static function zombieColor(_arg1:int):int{
var _local2:int;
var _local3:int;
_local2 = Option.emptyBuildingMiniColor;
if (_arg1 > 0){
_local3 = weightedIndex(_arg1, Option.zombieBuildingMiniWeights);
_local2 = Option.zombieBuildingMiniColor[_local3];
};
return (_local2);
}
public static function truckLoad(_arg1:Resource):int{
if (_arg1 == Resource.SURVIVORS){
return (1);
};
return (Option.truckLoad);
}
public static function slopeToAngle(_arg1:Number, _arg2:Number):int{
return (Math.round(((Math.atan2(_arg2, _arg1) * 180) / Math.PI)));
}
public static function backgroundTypeToIndex(_arg1:BackgroundType):int{
var _local2:int;
var _local3:enum;
_local2 = 0;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = 0;
break;
case 1:
_local2 = 1;
break;
case 2:
_local2 = 2;
break;
case 3:
_local2 = 3;
break;
case 4:
_local2 = 4;
break;
case 5:
_local2 = 5;
break;
case 6:
_local2 = 6;
break;
case 7:
_local2 = 7;
break;
};
return (_local2);
}
public static function shadowColorToIndex(_arg1:ShadowColor):int{
var _local2:int;
var _local3:enum;
_local2 = 0;
_local3 = _arg1;
switch (_local3.index){
case 0:
_local2 = 0;
break;
case 1:
_local2 = 1;
break;
case 2:
_local2 = 2;
break;
case 3:
_local2 = 3;
break;
};
return (_local2);
}
public static function indexToShadowColor(_arg1:int):ShadowColor{
var _local2:ShadowColor;
_local2 = ShadowColor.NORMAL;
switch (_arg1){
case 0:
_local2 = ShadowColor.NORMAL;
break;
case 1:
_local2 = ShadowColor.ALLOWED;
break;
case 2:
_local2 = ShadowColor.FORBIDDEN;
break;
case 3:
_local2 = ShadowColor.BUILD_SITE;
break;
default:
_local2 = ShadowColor.NORMAL;
break;
};
return (_local2);
}
public static function outsideMap(_arg1:Point):Boolean{
return ((((((((_arg1.x < 0)) || ((_arg1.x >= Game.map.sizeX())))) || ((_arg1.y < 0)))) || ((_arg1.y >= Game.map.sizeY()))));
}
public static function shuffle(_arg1:Array, _arg2:Twister=null):void{
var _local3:Twister;
var _local4:int;
var _local5:int;
var _local6:*;
_local3 = _arg2;
if (_local3 == null){
_local3 = generator;
};
_local4 = (_arg1.length - 1);
while (_local4 > 0) {
_local5 = (_local3.getPositiveInt() % (_local4 + 1));
_local6 = _arg1[_local4];
_arg1[_local4] = _arg1[_local5];
_arg1[_local5] = _local6;
_local4--;
};
}
public static function weightedIndex(_arg1:int, _arg2:Array):int{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local3 = 0;
_local4 = 0;
_local5 = _arg2.length;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_arg1 = (_arg1 - _arg2[_local6]);
if (_arg1 < 0){
_local3 = _local6;
break;
};
};
return (_local3);
}
public static function directionToDelta(_arg1:Direction):Point{
return (dirDeltas[directionToIndex(_arg1)]);
}
}
}//package
Section 376
//Line (Line)
package {
import flash.*;
public class Line {
public var near:Offset;
public var far:Offset;
public function Line(_arg1:Offset=null, _arg2:Offset=null):void{
if (!Boot.skip_constructor){
this.near = new Offset(_arg1.x, _arg1.y);
this.far = new Offset(_arg2.x, _arg2.y);
};
}
public function isBelow(_arg1:Offset):Boolean{
return ((this.relativeSlope(_arg1) > 0));
}
public function isBelowOrContains(_arg1:Offset):Boolean{
return ((this.relativeSlope(_arg1) >= 0));
}
public function isAboveOrContains(_arg1:Offset):Boolean{
return ((this.relativeSlope(_arg1) <= 0));
}
public function isAbove(_arg1:Offset):Boolean{
return ((this.relativeSlope(_arg1) < 0));
}
public function doesContain(_arg1:Offset):Boolean{
return ((this.relativeSlope(_arg1) == 0));
}
public function relativeSlope(_arg1:Offset):int{
return ((((this.far.y - this.near.y) * (this.far.x - _arg1.x)) - ((this.far.y - _arg1.y) * (this.far.x - this.near.x))));
}
}
}//package
Section 377
//List (List)
package {
import flash.*;
public class List {
public var length:int;
protected var h:Array;
protected var q:Array;
public function List():void{
if (!Boot.skip_constructor){
this.length = 0;
};
}
public function isEmpty():Boolean{
return ((this.h == null));
}
public function remove(_arg1):Boolean{
var _local2:Array;
var _local3:Array;
_local2 = null;
_local3 = this.h;
while (_local3 != null) {
if (_local3[0] == _arg1){
if (_local2 == null){
this.h = _local3[1];
} else {
_local2[1] = _local3[1];
};
if (this.q == _local3){
this.q = _local2;
};
this.length--;
return (true);
};
_local2 = _local3;
_local3 = _local3[1];
};
return (false);
}
public function join(_arg1:String):String{
var _local2:StringBuf;
var _local3:Boolean;
var _local4:Array;
_local2 = new StringBuf();
_local3 = true;
_local4 = this.h;
while (_local4 != null) {
if (_local3){
_local3 = false;
} else {
_local2.add(_arg1);
};
_local2.add(_local4[0]);
_local4 = _local4[1];
};
return (_local2.toString());
}
public function clear():void{
this.h = null;
this.q = null;
this.length = 0;
}
public function iterator(){
return ({h:this.h, hasNext:function (){
return (!((this.h == null)));
}, next:function (){
var _local1:*;
if (this.h == null){
return (null);
};
_local1 = this.h[0];
this.h = this.h[1];
return (_local1);
}});
}
public function last(){
return (((this.q == null)) ? null : this.q[0]);
}
public function first(){
return (((this.h == null)) ? null : this.h[0]);
}
public function pop(){
var _local1:*;
if (this.h == null){
return (null);
};
_local1 = this.h[0];
this.h = this.h[1];
if (this.h == null){
this.q = null;
};
this.length--;
return (_local1);
}
public function add(_arg1):void{
var _local2:Array;
_local2 = [_arg1];
if (this.h == null){
this.h = _local2;
} else {
this.q[1] = _local2;
};
this.q = _local2;
this.length++;
}
public function push(_arg1):void{
var _local2:Array;
_local2 = [_arg1, this.h];
this.h = _local2;
if (this.q == null){
this.q = _local2;
};
this.length++;
}
public function toString():String{
var _local1:StringBuf;
var _local2:Boolean;
var _local3:Array;
_local1 = new StringBuf();
_local2 = true;
_local3 = this.h;
_local1.add("{");
while (_local3 != null) {
if (_local2){
_local2 = false;
} else {
_local1.add(", ");
};
_local1.add(Std.string(_local3[0]));
_local3 = _local3[1];
};
_local1.add("}");
return (_local1.toString());
}
public function map(_arg1:Function):List{
var _local2:List;
var _local3:Array;
var _local4:*;
_local2 = new List();
_local3 = this.h;
while (_local3 != null) {
_local4 = _local3[0];
_local3 = _local3[1];
_local2.add(_arg1(_local4));
};
return (_local2);
}
public function filter(_arg1:Function):List{
var _local2:List;
var _local3:Array;
var _local4:*;
_local2 = new List();
_local3 = this.h;
while (_local3 != null) {
_local4 = _local3[0];
_local3 = _local3[1];
if (_arg1(_local4)){
_local2.add(_local4);
};
};
return (_local2);
}
}
}//package
Section 378
//List_skin (List_skin)
package {
import flash.display.*;
public dynamic class List_skin extends MovieClip {
}
}//package
Section 379
//Load (Load)
package {
public class Load {
public static function loadGridInt(_arg1):Grid{
return (Grid.load(_arg1, Load.loadInt));
}
public static function loadList(_arg1, _arg2:Function):List{
var _local3:List;
var _local4:int;
var _local5:*;
var _local6:int;
_local3 = new List();
_local4 = 0;
_local5 = _arg1.length;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local3.add(_arg2(_arg1[_local6]));
};
return (_local3);
}
public static function maybe(_arg1, _arg2:Function){
var _local3:*;
_local3 = null;
if (_arg1 != null){
_local3 = _arg2(_arg1);
};
return (_local3);
}
public static function loadInt(_arg1):int{
return (_arg1);
}
public static function loadArray(_arg1, _arg2:Function):Array{
var _local3:Array;
var _local4:int;
var _local5:*;
var _local6:int;
_local3 = new Array();
_local4 = 0;
_local5 = _arg1.length;
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local3.push(_arg2(_arg1[_local6]));
};
return (_local3);
}
public static function loadArrayInt(_arg1):Array{
var _local2:Array;
var _local3:int;
var _local4:*;
var _local5:int;
_local2 = [];
_local3 = 0;
_local4 = _arg1.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local2.push(_arg1[_local5]);
};
return (_local2);
}
public static function loadOtherList(_arg1, _arg2:Function, _arg3):List{
var _local4:List;
var _local5:Array;
_local4 = new List();
_local5 = _arg1.h;
while (_local5 != null) {
_local4.add(_arg2(_local5[0], _arg3));
_local5 = _local5[1];
};
return (_local4);
}
}
}//package
Section 380
//Main (Main)
package {
import flash.display.*;
import flash.events.*;
import logic.*;
import ui.*;
import flash.net.*;
import ui.menu.*;
import haxe.*;
import flash.*;
public class Main {
protected static var MENU:int = 0;
public static var error:String;
public static var config:Config;
public static var sound:SoundPlayer;
protected static var state:int;
public static var menu:MainMenu;
public static var music:MusicPlayer;
public static var replay:Replay;
protected static var layout:LayoutMain;
public static var theRoot:DisplayObjectContainer;
protected static var PLAY:int = 1;
public static var gameDisk:SharedObject;
public static var key:Keyboard;
protected static var REPLAY:int = 2;
public static var configDisk:SharedObject;
public function Main():void{
}
protected function init():void{
var _local1:Stage;
Main.error = "";
ScriptParse.init();
_local1 = Lib.current.stage;
_local1.scaleMode = StageScaleMode.NO_SCALE;
_local1.addEventListener(FullScreenEvent.FULL_SCREEN, this.fullScreenHandler);
_local1.addEventListener(Event.RESIZE, this.resizeHandler);
MouseScroller.trackMouse();
Main.theRoot = new Sprite();
theRoot.visible = true;
_local1.addChild(theRoot);
Log.setColor(0xFF0000);
Main.key = new Keyboard(_local1);
Main.replay = null;
Main.configDisk = SharedObject.getLocal(Label.configDisk);
configDisk.addEventListener(AsyncErrorEvent.ASYNC_ERROR, Main.asyncHandler);
configDisk.addEventListener(NetStatusEvent.NET_STATUS, Main.netStatusHandler);
configDisk.addEventListener(SyncEvent.SYNC, Main.syncHandler);
Main.gameDisk = SharedObject.getLocal(Label.gameDisk);
gameDisk.addEventListener(AsyncErrorEvent.ASYNC_ERROR, Main.asyncHandler);
gameDisk.addEventListener(NetStatusEvent.NET_STATUS, Main.netStatusHandler);
gameDisk.addEventListener(SyncEvent.SYNC, Main.syncHandler);
Main.config = new Config();
Main.layout = new LayoutMain(theRoot.stage.stageWidth, theRoot.stage.stageHeight);
Main.menu = new MainMenu(theRoot, layout);
Main.music = new MusicPlayer();
Main.sound = new SoundPlayer(getRoot());
BitstreamVeraSans.init();
Animation.init();
Main.state = MENU;
}
protected function resize():void{
Main.layout = new LayoutMain(theRoot.stage.stageWidth, theRoot.stage.stageHeight);
if (Main.state == PLAY){
Game.resize();
} else {
if (Main.state == MENU){
menu.resize(layout);
} else {
if (Main.state == REPLAY){
replay.resize(layout);
};
};
};
}
protected function resizeHandler(_arg1:Event):void{
this.resize();
}
protected function fullScreenHandler(_arg1:FullScreenEvent):void{
this.resize();
}
public static function firstGame():Boolean{
return (((!((Main.gameDisk == null))) && ((gameDisk.data.hasPlayed == null))));
}
protected static function syncHandler(_arg1:SyncEvent):void{
}
public static function canLoad():Boolean{
return (((((!((Main.gameDisk == null))) && ((gameDisk.data.done == true)))) && ((gameDisk.data.version == Game.VERSION))));
}
public static function getRoot():DisplayObjectContainer{
return (theRoot);
}
protected static function netStatusHandler(_arg1:NetStatusEvent):void{
}
public static function endReplay(_arg1:int, _arg2:GameSettings):void{
replay.cleanup();
Main.menu = new MainMenu(theRoot, layout);
menu.setSettings(_arg2);
menu.changeState(_arg1);
Main.state = MENU;
}
protected static function asyncHandler(_arg1:AsyncErrorEvent):void{
}
public static function endPlay(_arg1:int, _arg2:GameSettings):void{
Game.cleanup();
Main.menu = new MainMenu(theRoot, layout);
menu.setSettings(_arg2);
menu.changeState(_arg1);
if (_arg1 != MainMenu.GENERATE_MAP){
music.changeMusic(MusicPlayer.MAIN_INTRO, true);
};
Main.state = MENU;
}
public static function beginReplay():void{
var _local1:GameSettings;
_local1 = menu.getSettings();
menu.cleanup();
Main.menu = null;
replay.start(layout, _local1);
Main.state = REPLAY;
}
public static function clearFirstGame():void{
gameDisk.data.hasPlayed = true;
}
public static function loadGame():void{
menu.cleanup();
Main.menu = null;
Main.replay = new Replay();
Game.loadGame();
if (Game.spawner.getWaveCount() == 0){
music.changeMusic(MusicPlayer.QUIET, true);
} else {
music.changeMusic(MusicPlayer.randomWave(), true);
};
Main.state = PLAY;
}
public static function main():void{
var _local1:Main;
_local1 = new (Main);
_local1.init();
}
public static function beginPlay():void{
var _local1:GameSettings;
_local1 = menu.getSettings().clone();
menu.cleanup();
Main.menu = null;
Main.replay = new Replay();
Game.newGame(_local1);
if (_local1.isEditor()){
music.stop();
} else {
music.changeMusic(MusicPlayer.QUIET, true);
};
Main.state = PLAY;
}
}
}//package
Section 381
//Map (Map)
package {
import mapgen.*;
import flash.*;
public class Map {
protected var cellMap:Grid;
protected var blocked:List;
protected var cityLot:Section;
protected var buildings:List;
public function Map(_arg1:Point=null):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
super();
if (!Boot.skip_constructor){
this.blocked = new List();
this.buildings = new List();
this.cellMap = new Grid(_arg1.x, _arg1.y);
_local2 = 0;
_local3 = _arg1.y;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local5 = 0;
_local6 = _arg1.x;
while (_local5 < _local6) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp2;
this.cellMap.set(_local7, _local4, new MapCell());
};
};
this.cityLot = null;
};
}
public function size():Point{
return (new Point(this.sizeX(), this.sizeY()));
}
public function getBuildings():List{
return (this.buildings);
}
public function addBlocked(_arg1:Route):void{
}
public function clearBlocked():void{
}
public function noise(_arg1:int, _arg2:int, _arg3:int, _arg4:PathFinder):void{
var source:Point;
var minX:int;
var maxX:int;
var minY:int;
var maxY:int;
var _g:int;
var yPos:int;
var _g1:int;
var xPos:int;
var loudness:int;
var x = _arg1;
var y = _arg2;
var range = _arg3;
var guide = _arg4;
source = new Point(x, y);
minX = function (_arg1:Map):int{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = Math.max(0, (x - range));
$r = (Std._is(tmp, int)) ? tmp : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this);
maxX = function (_arg1:Map):int{
var $r3:*;
var tmp2:*;
var $this = _arg1;
tmp2 = Math.min($this.sizeX(), ((x + range) + 1));
$r3 = (Std._is(tmp2, int)) ? tmp2 : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r3);
}(this);
minY = function (_arg1:Map):int{
var $r5:*;
var tmp3:*;
var $this = _arg1;
tmp3 = Math.max(0, (y - range));
$r5 = (Std._is(tmp3, int)) ? tmp3 : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r5);
}(this);
maxY = function (_arg1:Map):int{
var $r7:*;
var tmp4:*;
var $this = _arg1;
tmp4 = Math.min($this.sizeY(), ((y + range) + 1));
$r7 = (Std._is(tmp4, int)) ? tmp4 : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r7);
}(this);
_g = minY;
while (_g < maxY) {
_g = (_g + 1);
yPos = _g;
_g1 = minX;
while (_g1 < maxX) {
_g1 = (_g1 + 1);
xPos = _g1;
loudness = range;
this.getCell(xPos, yPos).makeNoise(source, loudness, guide);
};
};
}
public function findTowers(_arg1:int, _arg2:int, _arg3:int):List{
var result:List;
var minX:int;
var maxX:int;
var minY:int;
var maxY:int;
var _g:int;
var yPos:int;
var _g1:int;
var xPos:int;
var x = _arg1;
var y = _arg2;
var range = _arg3;
result = new List();
minX = function (_arg1:Map):int{
var $r:*;
var tmp:*;
var $this = _arg1;
tmp = Math.max(0, (x - range));
$r = (Std._is(tmp, int)) ? tmp : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r);
}(this);
maxX = function (_arg1:Map):int{
var $r3:*;
var tmp2:*;
var $this = _arg1;
tmp2 = Math.min($this.sizeX(), ((x + range) + 1));
$r3 = (Std._is(tmp2, int)) ? tmp2 : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r3);
}(this);
minY = function (_arg1:Map):int{
var $r5:*;
var tmp3:*;
var $this = _arg1;
tmp3 = Math.max(0, (y - range));
$r5 = (Std._is(tmp3, int)) ? tmp3 : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r5);
}(this);
maxY = function (_arg1:Map):int{
var $r7:*;
var tmp4:*;
var $this = _arg1;
tmp4 = Math.min($this.sizeY(), ((y + range) + 1));
$r7 = (Std._is(tmp4, int)) ? tmp4 : function (_arg1:Map):Number{
var _local2:*;
throw ("Class cast error");
}($this);
return ($r7);
}(this);
_g = minY;
while (_g < maxY) {
_g = (_g + 1);
yPos = _g;
_g1 = minX;
while (_g1 < maxX) {
_g1 = (_g1 + 1);
xPos = _g1;
if (this.getCell(xPos, yPos).hasTower()){
result.push(new Point(xPos, yPos));
};
};
};
return (result);
}
public function cleanup():void{
this.cellMap = null;
this.blocked = null;
}
public function load(_arg1):void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:*;
_local2 = 0;
_local3 = this.sizeY();
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local5 = 0;
_local6 = this.sizeX();
while (_local5 < _local6) {
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local7 = _temp2;
_local8 = _arg1.cellMap.mBuffer[(_local7 + (_local4 * this.sizeX()))];
this.cellMap.get(_local7, _local4).load(_local8);
};
};
this.buildings = Load.loadList(_arg1.buildings, Building.load);
this.cityLot = Section.load(_arg1.cityLot);
}
public function getCell(_arg1:int, _arg2:int):MapCell{
return (this.cellMap.get(_arg1, _arg2));
}
public function setCityLot(_arg1:Section):void{
this.cityLot = new Section(_arg1.offset, _arg1.limit);
}
public function getCityLot():Section{
return (this.cityLot);
}
public function addBuilding(_arg1:Building):void{
this.buildings.add(_arg1);
}
public function sizeX():int{
return (this.cellMap.sizeX());
}
public function sizeY():int{
return (this.cellMap.sizeY());
}
public function save(){
return ({cellMap:this.cellMap.save(MapCell.save), buildings:Save.saveList(this.buildings, Building.saveS), cityLot:Section.save(this.cityLot)});
}
}
}//package
Section 382
//MapCell (MapCell)
package {
import logic.*;
import ui.*;
import action.*;
import mapgen.*;
import feature.*;
import flash.*;
public class MapCell {
public var edit:EditBox;
protected var obstacle;
protected var mTower:Tower;
protected var mBackground:BackgroundType;
public var feature:Root;
protected var mTrucks:List;
protected var mTile:List;
protected var mBuilding:Building;
protected var scent:Direction;
protected var mRubble:Rubble;
protected var mZombies:List;
protected var mShadow:TowerSprite;
protected var mIsBlocked:Boolean;
protected var x:int;
protected var y:int;
public function MapCell():void{
if (!Boot.skip_constructor){
this.mTile = new List();
this.mIsBlocked = false;
this.mTower = null;
this.x = 0;
this.y = 0;
this.mZombies = new List();
this.mTrucks = new List();
this.mShadow = null;
this.mRubble = null;
this.mBuilding = null;
this.mBackground = BackgroundType.STREET;
this.scent = null;
this.obstacle = null;
this.feature = null;
this.edit = null;
};
}
public function getObstacle(){
return (this.obstacle);
}
public function zombieCount():int{
return (this.mZombies.length);
}
public function attackZombie(_arg1:Point):void{
if (!this.mZombies.isEmpty()){
this.mZombies.first().kill(_arg1);
};
}
public function hasTower():Boolean{
return (!((this.mTower == null)));
}
public function init(_arg1:int, _arg2:int):void{
this.x = _arg1;
this.y = _arg2;
}
public function hasZombies():Boolean{
return (!(this.mZombies.isEmpty()));
}
public function destroyAllTrucks():void{
var _local1:Truck;
while (!(this.mTrucks.isEmpty())) {
_local1 = this.mTrucks.first();
this.removeTruck(_local1);
_local1.cleanup();
};
}
public function getZombie():Zombie{
if (!this.mZombies.isEmpty()){
return (this.mZombies.first());
};
return (null);
}
public function getShadow():TowerSprite{
return (this.mShadow);
}
public function attackTower():void{
var _local1:Boolean;
if (this.hasTower()){
_local1 = this.mTower.attack();
if (_local1){
this.fleeTower();
};
};
}
public function setShadow(_arg1:int):TowerSprite{
var _local2:ShadowColor;
if (this.mShadow != null){
this.clearShadow();
};
this.mShadow = new TowerSprite(new Point(this.x, this.y), _arg1, 0);
_local2 = ShadowColor.BUILD_SITE;
this.mShadow.changeColor(_local2);
this.mShadow.update();
return (this.mShadow);
}
public function getBackground():BackgroundType{
return (this.mBackground);
}
public function addZombie(_arg1:Zombie):void{
if (this.mZombies.isEmpty()){
Game.tracker.addCell(new Point(this.x, this.y));
};
this.mZombies.add(_arg1);
while (!(this.mTrucks.isEmpty())) {
Game.actions.push(new KillTruck(this.mTrucks.first()));
this.removeTruck(this.mTrucks.first());
};
Game.update.cellState(new Point(this.x, this.y));
}
public function clearRubble():void{
if (this.mRubble != null){
this.mRubble.cleanup();
this.mRubble = null;
};
}
public function getBuilding():Building{
return (this.mBuilding);
}
public function hasTrucks():Boolean{
return (!(this.mTrucks.isEmpty()));
}
public function destroyTower():void{
if (this.hasTower()){
Main.replay.addBox(new Point(this.x, this.y), new Point((this.x + 1), (this.y + 1)), Option.roadMiniColor);
if (this.mTower.getType() == Tower.DEPOT){
Game.progress.removeDepot(new Point(this.x, this.y));
Game.script.trigger(Script.DESTROY_DEPOT, new Point(this.x, this.y));
} else {
if (this.mTower.getType() == Tower.BARRICADE){
Game.script.trigger(Script.DESTROY_BARRICADE, new Point(this.x, this.y));
} else {
if (this.mTower.getType() == Tower.SNIPER){
Game.sprites.removeSniper(this.mTower);
Game.view.window.updateRanges();
Game.script.trigger(Script.DESTROY_SNIPER, new Point(this.x, this.y));
} else {
if (this.mTower.getType() == Tower.WORKSHOP){
Game.script.trigger(Script.DESTROY_WORKSHOP, new Point(this.x, this.y));
};
};
};
};
this.mTower.removeAllResources();
this.mTower.cleanup();
this.mTower = null;
Game.update.destroyTower(new Point(this.x, this.y));
Game.actions.push(new UpdateBlocked(new Point(this.x, this.y)));
};
}
public function setBackground(_arg1:BackgroundType):void{
this.mBackground = _arg1;
}
public function setBlocked():void{
this.mIsBlocked = true;
}
public function hasRubble():Boolean{
return (((!((this.mRubble == null))) || (((((!((this.mBuilding == null))) && ((this.mBackground == BackgroundType.ENTRANCE)))) && ((this.mBuilding.getSalvage().getTotalCount() > 0))))));
}
public function clearTiles():void{
this.mTile.clear();
}
protected function addScents():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Direction;
_local1 = 0;
_local2 = Lib.directions.length;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = (this.x + Lib.dirDeltas[_local3].x);
_local5 = (this.y + Lib.dirDeltas[_local3].y);
_local6 = Util.opposite(Lib.directions[_local3]);
Game.map.getCell(_local4, _local5).scent = _local6;
this.scent = null;
};
}
public function removeObstacle():void{
this.obstacle = null;
}
public function removeTruck(_arg1:Truck):void{
this.mTrucks.remove(_arg1);
Game.update.cellState(new Point(this.x, this.y));
}
public function getRubbleCount(_arg1:Resource):int{
var _local2:int;
_local2 = 0;
if (this.mRubble != null){
_local2 = (_local2 + this.mRubble.getSalvage().getResourceCount(_arg1));
};
if (((!((this.mBuilding == null))) && ((this.mBackground == BackgroundType.ENTRANCE)))){
_local2 = (_local2 + this.mBuilding.getSalvage().getResourceCount(_arg1));
};
return (_local2);
}
public function addTruck(_arg1:Truck):void{
this.addScents();
this.mTrucks.add(_arg1);
if (this.hasZombies()){
Game.actions.push(new KillTruck(_arg1));
this.removeTruck(_arg1);
};
Game.update.cellState(new Point(this.x, this.y));
}
public function fleeTower():void{
var _local1:int;
var _local2:int;
var _local3:Route;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:Truck;
var _local9:int;
var _local10:Resource;
var _local11:int;
if (this.hasTower()){
_local3 = this.getReturnRoute();
_local4 = this.mTower.countResource(Resource.SURVIVORS);
_local5 = 0;
while (_local5 < _local4) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp1;
_local7 = this.mTower.takeSurvivor();
if (_local3 != null){
_local8 = Truck.createFleeingTruck(_local7, _local3);
};
};
};
_local1 = 0;
_local2 = Option.resourceCount;
while (_local1 < _local2) {
var _temp2 = _local1;
_local1 = (_local1 + 1);
_local9 = _temp2;
_local10 = Lib.indexToResource(_local9);
_local11 = this.mTower.countResource(_local10);
if (_local11 > 0){
this.addRubble(_local10, _local11);
};
};
if (this.mTower.getType() != Tower.BARRICADE){
this.addRubble(Resource.BOARDS, (Option.truckLoad * this.mTower.getInfrastructureBoards()));
};
this.destroyTower();
}
public function loadAddTruck(_arg1:Truck):void{
this.mTrucks.add(_arg1);
}
public function setBuilding(_arg1:Building):void{
this.mBuilding = _arg1;
}
public function hasObstacle():Boolean{
return (!((this.obstacle == null)));
}
protected function getReturnRoute():Route{
var _local1:Route;
var _local2:Point;
_local1 = null;
if (!this.mTower.getTradeLinks().isEmpty()){
_local1 = this.mTower.getTradeLinks().first();
} else {
_local2 = Game.progress.getRandomDepot();
if (_local2 != null){
_local1 = new Route(new Point(this.x, this.y), _local2);
};
};
return (_local1);
}
public function makeNoise(_arg1:Point, _arg2:int, _arg3:PathFinder):void{
var _local4:*;
var _local5:Zombie;
_local4 = this.mZombies.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local5.makeNoise(_arg1, _arg2, _arg3);
};
if (this.mBuilding != null){
this.mBuilding.makeNoise(_arg1, _arg2, _arg3);
};
}
public function clearShadow():void{
if (this.mShadow != null){
this.mShadow.cleanup();
this.mShadow = null;
};
}
public function getTiles():List{
return (this.mTile);
}
public function addObstacle(_arg1:int):void{
this.obstacle = _arg1;
}
public function removeZombie(_arg1:Zombie):void{
this.mZombies.remove(_arg1);
if (this.mZombies.isEmpty()){
Game.tracker.removeCell(new Point(this.x, this.y));
};
Game.update.cellState(new Point(this.x, this.y));
}
public function getTower():Tower{
return (this.mTower);
}
public function hasShadow():Boolean{
return (!((this.mShadow == null)));
}
public function attackSurvivor():Point{
var _local1:Point;
_local1 = null;
if (!this.mTrucks.isEmpty()){
_local1 = this.mTrucks.first().getPixel();
Game.actions.push(new KillTruck(this.mTrucks.first()));
this.removeTruck(this.mTrucks.first());
Game.update.cellState(new Point(this.x, this.y));
};
return (_local1);
}
public function clearBlocked():void{
this.mIsBlocked = false;
}
public function loadAddZombie(_arg1:Zombie):void{
this.mZombies.add(_arg1);
}
public function isBlocked():Boolean{
return (this.mIsBlocked);
}
public function getScent():Direction{
return (this.scent);
}
public function load(_arg1):void{
this.mTile = Load.loadList(_arg1.mTile, Load.loadInt);
this.mIsBlocked = _arg1.mIsBlocked;
this.x = _arg1.x;
this.y = _arg1.y;
this.mShadow = Load.maybe(_arg1.mShadow, TowerSprite.load);
this.mRubble = Load.maybe(_arg1.mRubble, Rubble.load);
this.mBackground = Lib.indexToBackgroundType(_arg1.mBackground);
if (_arg1.scent != null){
this.scent = Lib.indexToDirection(_arg1.scent);
};
this.feature = Load.maybe(_arg1.feature, Root.loadS);
}
public function buildingHasZombies():Boolean{
return (((!((this.mBuilding == null))) && (this.mBuilding.hasZombies())));
}
public function getAllRubbleCounts():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
var _local4:int;
_local1 = Lib.newResourceArray();
_local2 = 0;
_local3 = Option.resourceCount;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local1[_local4] = this.getRubbleCount(Lib.indexToResource(_local4));
};
return (_local1);
}
public function createTower(_arg1:int):void{
var _local2:int;
if (!this.hasTower()){
_local2 = 0;
if (_arg1 == Tower.DEPOT){
this.mTower = new Depot(this.x, this.y);
_local2 = Color.depotReplay;
Game.progress.addDepot(new Point(this.x, this.y));
Game.script.trigger(Script.BUILD_DEPOT, new Point(this.x, this.y));
} else {
if (_arg1 == Tower.WORKSHOP){
this.mTower = new Workshop(this.x, this.y);
_local2 = Color.workshopReplay;
Game.script.trigger(Script.BUILD_WORKSHOP, new Point(this.x, this.y));
} else {
if (_arg1 == Tower.BARRICADE){
this.mTower = new Barricade(this.x, this.y);
_local2 = Color.barricadeReplay;
Game.script.trigger(Script.BUILD_BARRICADE, new Point(this.x, this.y));
} else {
if (_arg1 == Tower.SNIPER){
this.mTower = new Sniper(this.x, this.y);
_local2 = Color.sniperReplay;
Game.sprites.addSniper(this.mTower);
Game.script.trigger(Script.BUILD_SNIPER, new Point(this.x, this.y));
};
};
};
};
Main.replay.addBox(new Point(this.x, this.y), new Point((this.x + 1), (this.y + 1)), _local2);
Game.update.newTower(new Point(this.x, this.y));
Game.actions.push(new UpdateBlocked(new Point(this.x, this.y)));
};
}
public function loadAddTower(_arg1:Tower):void{
this.mTower = _arg1;
}
public function addTile(_arg1:int):void{
this.mTile.add(_arg1);
}
public function closeTower():void{
var _local1:Route;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Resource;
var _local7:Truck;
if (((this.hasTower()) && ((((this.mTower.getType() == Tower.WORKSHOP)) || ((this.mTower.getType() == Tower.BARRICADE)))))){
_local1 = this.getReturnRoute();
_local2 = this.mTower.countResource(Resource.SURVIVORS);
_local3 = 0;
while (_local3 < _local2) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local4 = _temp1;
_local5 = this.mTower.takeSurvivor();
if (_local1 != null){
_local6 = Resource.SURVIVORS;
if (this.mTower.canDowngrade()){
_local6 = Resource.BOARDS;
this.mTower.downgrade();
};
_local7 = Truck.createClosingTruck(_local5, _local1, Resource.SURVIVORS);
};
};
this.destroyTower();
};
}
public function getRubble(_arg1:List):Resource{
var _local2:Resource;
_local2 = null;
if (this.mRubble != null){
_local2 = this.mRubble.getSalvage().getResource(_arg1);
if (this.mRubble.getSalvage().getTotalCount() <= 0){
this.mRubble.cleanup();
this.mRubble = null;
};
};
if ((((((_local2 == null)) && (!((this.mBuilding == null))))) && ((this.mBackground == BackgroundType.ENTRANCE)))){
_local2 = this.mBuilding.getSalvage().getResource(_arg1);
};
return (_local2);
}
public function spawn(_arg1:Point, _arg2:PathFinder):void{
if (!this.mZombies.isEmpty()){
this.mZombies.first().makeNoise(_arg1, 0, _arg2);
this.mZombies.first().addToWave();
};
}
public function addRubble(_arg1:Resource, _arg2:int, _arg3=null):void{
if (this.mRubble == null){
this.mRubble = new Rubble(this.x, this.y);
};
this.mRubble.addResource(_arg1, _arg2, _arg3);
}
public static function save(_arg1:MapCell){
var _local2:*;
_local2 = null;
if (_arg1.scent != null){
_local2 = Lib.directionToIndex(_arg1.scent);
};
return ({mTile:Save.saveList(_arg1.mTile, Save.saveInt), mIsBlocked:_arg1.mIsBlocked, x:_arg1.x, y:_arg1.y, mShadow:Save.maybe(_arg1.mShadow, TowerSprite.saveS), mRubble:Save.maybe(_arg1.mRubble, Rubble.save), mBackground:Lib.backgroundTypeToIndex(_arg1.mBackground), scent:_local2, feature:Save.maybe(_arg1.feature, Root.saveS)});
}
}
}//package
Section 383
//MapGenerator (MapGenerator)
package {
import logic.*;
import ui.*;
import mapgen.*;
import feature.*;
import haxe.*;
import flash.*;
public class MapGenerator {
protected var map:Map;
protected var settings:GameSettings;
protected var biasRegions:Array;
protected static var beachTiles:Array = [Tile.nwBeach, Tile.nBeach, Tile.neBeach, Tile.wBeach, Tile.NO_TILE, Tile.eBeach, Tile.swBeach, Tile.sBeach, Tile.seBeach];
public static var waterCount:int = 8;
protected static var shallowWaterTiles:Array = [989, 989, 989, 989, 989, 989, 989, 989, 989];
protected static var deepWaterTiles:Array = [Tile.deepWater, Tile.deepWater, Tile.deepWater, Tile.deepWater, Tile.NO_TILE, Tile.deepWater, Tile.deepWater, Tile.deepWater, Tile.deepWater];
public function MapGenerator(_arg1:Map=null, _arg2:GameSettings=null):void{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
super();
if (!Boot.skip_constructor){
this.map = _arg1;
this.settings = _arg2;
this.biasRegions = [];
Util.seed(this.settings.getNormalName());
_local3 = 0;
_local4 = this.settings.getSize().y;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local6 = 0;
_local7 = this.settings.getSize().x;
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
this.map.getCell(_local8, _local5).init(_local8, _local5);
};
};
};
}
protected function getCenterHqPos(_arg1:Division, _arg2:Division):Point{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local3 = Math.floor(Math.min(_arg1.getLeft().limit.x, _arg2.getLeft().limit.x));
_local4 = Math.floor(Math.max(_arg1.getRight().offset.x, _arg2.getRight().offset.x));
_local5 = ((Math.floor(((_local3 + _local4) / 2)) - 1) + Util.rand(3));
_local6 = ((_arg1.getRight().limit.y + 1) + Util.rand(2));
return (new Point(_local5, _local6));
}
protected function placeBridges(_arg1:Division, _arg2:Division):void{
var _local3:Array;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:Section;
var _local9:Point;
var _local10:Direction;
var _local11:Boolean;
var _local12:Boolean;
_local3 = [Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST];
Util.shuffle(_local3);
_local4 = (4 - this.settings.getBridgeCount());
if ((((this.settings.getEasterEgg() == GameSettings.RACCOONCITY)) || ((this.settings.getEasterEgg() == GameSettings.FIDDLERSGREEN)))){
_local4 = 4;
};
_local5 = -1;
if ((((_local4 > 0)) && (!((this.settings.getEasterEgg() == GameSettings.FIDDLERSGREEN))))){
_local5 = Util.rand(_local4);
};
_local6 = 0;
while (_local6 < 4) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local7 = _temp1;
_local8 = this.getBridgeLot(_local3[_local7], _arg1, _arg2);
_local9 = null;
_local10 = _local3[_local7];
if (_local7 == _local5){
_local9 = this.getHqPos(_local10, _arg1, _arg2);
} else {
_local9 = this.getDynamitePos(_local10, _arg1, _arg2);
};
_local11 = (_local7 < _local4);
_local12 = (_local7 == _local5);
this.placeSingleBridge(_local8, _local9, Util.opposite(_local10), _local11, _local12);
};
if (_local5 == -1){
this.placeHq(this.getCenterHqPos(_arg1, _arg2));
};
}
protected function placeTutorial(_arg1:Point, _arg2:Point):void{
var _local3:Point;
var _local4:Point;
var _local5:int;
var _local6:int;
var _local7:Street;
var _local8:Section;
var _local9:Section;
var _local10:Section;
var _local11:Point;
var _local12:Section;
var _local13:Point;
_local3 = _arg1.clone();
_local4 = _arg2.clone();
this.box(_arg1, _arg2, Option.waterColor);
this.fillWith(_arg1, _arg2, Tile.deepWater, BackgroundType.WATER, true);
_local5 = 14;
_local6 = 34;
_arg1 = new Point((_arg1.x + Math.floor((((_arg2.x - _arg1.x) - _local5) / 2))), (_arg1.y + Math.floor((((_arg2.y - _arg1.y) - _local6) / 2))));
_arg2 = new Point((_arg1.x + _local5), (_arg1.y + _local6));
this.placeWater(_arg1, _arg2, 2);
this.box(_arg1, _arg2, Option.roadMiniColor);
_local7 = new Street(new Point((_arg1.x + 3), _arg1.y), 4, (_arg2.y - _arg1.y), true, null, null);
_local8 = new Section(_arg1, new Point((_arg1.x + 3), _arg2.y));
_local8.east = _local7;
_local9 = new Section(new Point((_arg1.x + 7), _arg1.y), new Point((_arg1.x + 10), _arg2.y));
_local9.west = _local7;
_local10 = new Section(new Point((_arg1.x + 2), _local3.y), new Point((_arg1.x + 8), _arg1.y));
_local11 = new Point((_arg1.x + 5), _arg1.y);
_local12 = new Section(new Point((_arg1.x + 2), _arg2.y), new Point((_arg1.x + 8), _local4.y));
_local13 = new Point((_arg1.x + 6), (_arg2.y - 1));
this.placeSingleBridge(_local10, _local11, Direction.NORTH, false, false);
this.placeSingleBridge(_local12, _local13, Direction.SOUTH, true, true);
this.placeBlock(_local8);
this.placeBlock(_local9);
this.biasRegions = [];
_local7.draw(this.map);
this.placeZombies();
this.placeSalvage();
}
protected function placeBlock(_arg1:Section):void{
var _local2:int;
var _local3:BlockRoot;
_local2 = 0;
if (_arg1.isNear(this.settings.getStart(), Option.hqInfluence)){
_local2 = Util.randWeightedIndex(Option.hqBlockDistribution);
} else {
if ((((_arg1.getSize().x >= 5)) && ((_arg1.getSize().y >= 5)))){
if (this.settings.getEasterEgg() == GameSettings.MONROEVILLE){
_local2 = 3;
} else {
_local2 = Util.randWeightedIndex(Option.largeBlockDistribution);
};
} else {
_local2 = Util.randWeightedIndex(Option.smallBlockDistribution);
};
};
_local3 = null;
if (_local2 == 1){
_local3 = new BlockPark();
} else {
if (_local2 == 2){
_local3 = new BlockChurch();
} else {
if (_local2 == 3){
_local3 = new BlockMall();
} else {
if (_local2 == 4){
_local3 = new BlockHouses();
} else {
if (_local2 == 5){
_local3 = new BlockApartment();
} else {
_local3 = new BlockStandard();
};
};
};
};
};
_local3.place(_arg1);
}
protected function getDynamitePos(_arg1:Direction, _arg2:Division, _arg3:Division):Point{
var _local4:Point;
var _local5:enum;
_local4 = null;
_local5 = _arg1;
switch (_local5.index){
case 0:
_local4 = new Point((_arg2.getLeft().limit.x + Util.rand(4)), (_arg2.getLeft().offset.y - 2));
break;
case 1:
_local4 = new Point((_arg3.getLeft().limit.x + Util.rand(4)), (_arg3.getLeft().limit.y + 1));
break;
case 2:
_local4 = new Point((_arg2.getRight().limit.x + 1), (_arg2.getRight().limit.y + Util.rand(4)));
break;
case 3:
_local4 = new Point((_arg2.getLeft().offset.x - 2), (_arg2.getLeft().limit.y + Util.rand(4)));
break;
};
return (_local4);
}
protected function findStreetWidth(_arg1:Point, _arg2:Point):int{
var _local3:int;
var _local4:int;
var _local5:int;
_local3 = 3;
_local4 = (_arg2.x - _arg1.x);
_local5 = (_arg2.y - _arg1.y);
if ((((_local4 < 10)) || ((_local5 < 10)))){
_local3 = 1;
} else {
if ((((_local4 < 20)) || ((_local5 < 20)))){
_local3 = 2;
};
};
return (_local3);
}
protected function box(_arg1:Point, _arg2:Point, _arg3:int):void{
Main.replay.addBox(_arg1, _arg2, _arg3);
}
protected function placeBuildingSalvage(_arg1:Point, _arg2:int, _arg3:Building):void{
var _local4:Resource;
var _local5:int;
var _local6:int;
var _local7:Boolean;
_local4 = this.findBiasResource(_arg1);
_local5 = 0;
while (_local5 < _arg2) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp1;
_local7 = true;
_local7 = false;
if (((((((_local7) && (!((_local4 == null))))) && ((Util.rand(100) < Option.biasSalvage)))) && ((((_arg3.getType() == Util.STANDARD)) || ((_arg3.getType() == Util.HOUSE)))))){
Util.placeSingleSalvage(this.map, _arg1.x, _arg1.y, _local4);
} else {
Util.placeSingleSalvage(this.map, _arg1.x, _arg1.y);
};
};
}
public function resetMap():void{
var _local1:Point;
var _local2:Point;
var _local3:*;
var _local4:Building;
this.box(new Point(0, 0), this.settings.getSize().clone(), Option.roadMiniColor);
_local1 = new Point(0, 0);
_local2 = this.settings.getSize().clone();
this.box(_local1, _local2, Option.waterColor);
this.placeWater(_local1, _local2, waterCount);
_local1 = new Point(waterCount, waterCount);
_local2 = new Point((this.settings.getSize().x - waterCount), (this.settings.getSize().y - waterCount));
if (this.settings.getNormalName().indexOf("tutorial") != -1){
this.placeTutorial(_local1, _local2);
} else {
this.placeIsland(_local1, _local2);
};
_local3 = this.map.getBuildings().iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
_local4.drawReplay();
};
}
protected function placeWater(_arg1:Point, _arg2:Point, _arg3:int):void{
var _local4:int;
var _local5:int;
var _local6:int;
_local4 = 0;
_local5 = (_arg3 - 2);
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
this.placeWithBorder(_arg1, _arg2, shallowWaterTiles, BackgroundType.WATER, true);
this.shrinkSize(_arg1, _arg2);
};
this.placeWithBorder(_arg1, _arg2, shallowWaterTiles, BackgroundType.WATER, true);
this.shrinkSize(_arg1, _arg2);
this.placeWithBorder(_arg1, _arg2, beachTiles, BackgroundType.WATER, true);
this.shrinkSize(_arg1, _arg2);
}
protected function nearHq(_arg1:List):Boolean{
var _local2:Boolean;
var _local3:*;
var _local4:Section;
_local2 = false;
_local3 = _arg1.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
if (_local4.isNear(this.settings.getStart(), Option.hqInfluence)){
_local2 = true;
break;
};
};
return (_local2);
}
protected function placeCity(_arg1:Section):void{
var _local2:Division;
var _local3:Division;
var _local4:Division;
_local2 = new Division(Option.minGenericSize);
_local2.split(_arg1, 4);
_local3 = new Division(Option.minGenericSize);
_local3.split(_local2.getTop(), 4);
_local4 = new Division(Option.minGenericSize);
_local4.split(_local2.getBottom(), 4);
this.placeBridges(_local3, _local4);
this.placeRegion(_local3.getLeft());
this.placeRegion(_local3.getRight());
this.placeRegion(_local4.getLeft());
this.placeRegion(_local4.getRight());
this.biasRegions = [_local3.getLeft(), _local3.getRight(), _local4.getLeft(), _local4.getRight()];
Util.shuffle(this.biasRegions);
_local3.getMiddle().draw(this.map);
_local4.getMiddle().draw(this.map);
_local2.getMiddle().draw(this.map);
if (this.settings.getEasterEgg() != GameSettings.FIDDLERSGREEN){
this.placeZombies();
};
this.placeSalvage();
}
protected function getHqPos(_arg1:Direction, _arg2:Division, _arg3:Division):Point{
var _local4:Point;
var _local5:enum;
_local4 = null;
_local5 = _arg1;
switch (_local5.index){
case 0:
_local4 = new Point((_arg2.getLeft().limit.x + Util.rand(4)), (_arg2.getLeft().offset.y - 1));
break;
case 1:
_local4 = new Point((_arg3.getLeft().limit.x + Util.rand(4)), _arg3.getLeft().limit.y);
break;
case 2:
_local4 = new Point(_arg2.getRight().limit.x, (_arg2.getRight().limit.y + Util.rand(4)));
break;
case 3:
_local4 = new Point((_arg2.getLeft().offset.x - 1), (_arg2.getRight().limit.y + Util.rand(4)));
break;
};
return (_local4);
}
protected function placeSingleBridge(_arg1:Section, _arg2:Point, _arg3:Direction, _arg4:Boolean, _arg5:Boolean):void{
var _local6:PlaceBridge;
var _local7:Bridge;
var _local8:Dynamite;
var _local9:Point;
_local6 = new PlaceBridge(_arg3, _arg4);
_local6.place(_arg1);
_local6.intersectStreet(_arg1);
_local7 = new Bridge(_arg3, _arg1, _arg4);
Game.progress.addBridge(_local7, _arg4);
if (!_arg4){
_local8 = new Dynamite(_arg2, Option.dynamiteWork, _local7);
};
if (_arg5){
if (!_arg4){
_local9 = new Point((_arg2.x + 1), _arg2.y);
this.placeHq(_local9);
} else {
this.placeHq(_arg2);
};
};
}
protected function getBridgeLot(_arg1:Direction, _arg2:Division, _arg3:Division):Section{
var _local4:Section;
var _local5:enum;
_local4 = null;
_local5 = _arg1;
switch (_local5.index){
case 0:
_local4 = new Section(new Point((_arg2.getLeft().limit.x - 1), ((_arg2.getLeft().offset.y - waterCount) - 2)), new Point((_arg2.getRight().offset.x + 1), (_arg2.getLeft().offset.y - 2)));
_local4.south = _arg2.getLeft().north;
break;
case 1:
_local4 = new Section(new Point((_arg3.getLeft().limit.x - 1), (_arg3.getLeft().limit.y + 2)), new Point((_arg3.getRight().offset.x + 1), ((_arg3.getLeft().limit.y + waterCount) + 2)));
_local4.north = _arg3.getLeft().south;
break;
case 2:
_local4 = new Section(new Point((_arg2.getRight().limit.x + 2), (_arg2.getRight().limit.y - 1)), new Point(((_arg2.getRight().limit.x + waterCount) + 2), (_arg3.getRight().offset.y + 1)));
_local4.west = _arg2.getRight().east;
break;
case 3:
_local4 = new Section(new Point(((_arg2.getLeft().offset.x - waterCount) - 2), (_arg2.getLeft().limit.y - 1)), new Point((_arg2.getLeft().offset.x - 2), (_arg3.getLeft().offset.y + 1)));
_local4.east = _arg2.getLeft().west;
break;
};
return (_local4);
}
protected function placeRegion(_arg1:Section):void{
var _local2:Division;
if (((((_arg1.limit.x - _arg1.offset.x) <= Option.blockThreshold)) && (((_arg1.limit.y - _arg1.offset.y) <= Option.blockThreshold)))){
this.placeBlock(_arg1);
} else {
_local2 = new Division(Option.minGenericSize);
_local2.split(_arg1, this.findStreetWidth(_arg1.offset, _arg1.limit));
this.placeRegion(_local2.getLeft());
this.placeRegion(_local2.getRight());
_local2.getMiddle().draw(this.map);
};
}
protected function placeZombies():void{
var _local1:*;
var _local2:Building;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = this.map.getBuildings().iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local3 = 0;
_local4 = 0;
_local5 = this.settings.getZombieMultiplier();
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local3 = (_local3 + Util.rand(Option.zombieChance[_local2.getType()]));
};
this.placeBuildingZombies(_local2, _local3);
};
}
protected function placeSalvage():void{
var _local1:*;
var _local2:Building;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = this.map.getBuildings().iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local3 = 0;
_local4 = 0;
_local5 = this.settings.getResourceMultiplier();
while (_local4 < _local5) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp1;
_local3 = (_local3 + Util.rand(Option.salvageChance[_local2.getType()]));
};
this.placeBuildingSalvage(_local2.getEntrance(), _local3, _local2);
};
}
protected function findBiasResource(_arg1:Point):Resource{
var _local2:int;
var _local3:int;
var _local4:int;
_local2 = 0;
_local3 = this.biasRegions.length;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
if (this.biasRegions[_local4] == null){
Log.trace(_local4, {fileName:"MapGenerator.hx", lineNumber:718, className:"MapGenerator", methodName:"findBiasResource"});
};
if (this.biasRegions[_local4].contains(_arg1)){
return (Lib.indexToResource(_local4));
};
};
return (null);
}
protected function fillRandom(_arg1:Point, _arg2:Point, _arg3:Array, _arg4:Array):void{
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
_local5 = Math.floor((((_arg2.x - _arg1.x) * (_arg2.y - _arg1.y)) / 3));
_local6 = 0;
while (_local6 < _local5) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local7 = _temp1;
_local8 = (Util.rand((_arg2.x - _arg1.x)) + _arg1.x);
_local9 = (Util.rand((_arg2.y - _arg1.y)) + _arg1.y);
if (this.map.getCell(_local8, _local9).getTiles().length <= 1){
this.map.getCell(_local8, _local9).setBlocked();
_local10 = Util.randWeightedIndex(_arg4);
this.map.getCell(_local8, _local9).addTile(_arg3[_local10]);
};
};
}
protected function fillWith(_arg1:Point, _arg2:Point, _arg3:int, _arg4:BackgroundType, _arg5:Boolean):void{
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
_local6 = _arg1.y;
_local7 = _arg2.y;
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp1;
_local9 = _arg1.x;
_local10 = _arg2.x;
while (_local9 < _local10) {
var _temp2 = _local9;
_local9 = (_local9 + 1);
_local11 = _temp2;
this.map.getCell(_local11, _local8).addTile(_arg3);
this.map.getCell(_local11, _local8).setBackground(_arg4);
if (_arg5){
this.map.getCell(_local11, _local8).setBlocked();
} else {
this.map.getCell(_local11, _local8).clearBlocked();
};
};
};
}
protected function shrinkSize(_arg1:Point, _arg2:Point):void{
_arg1.x++;
_arg1.y++;
_arg2.x--;
_arg2.y--;
}
protected function placeHq(_arg1:Point):void{
var _local2:Tower;
var _local3:Array;
var _local4:Array;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:Boolean;
var _local15:int;
var _local16:ResourceCount;
this.settings.setStart(_arg1);
this.map.getCell(this.settings.getStart().x, this.settings.getStart().y).createTower(Tower.DEPOT);
_local2 = this.map.getCell(this.settings.getStart().x, this.settings.getStart().y).getTower();
_local3 = [Resource.AMMO, Resource.BOARDS, Resource.SURVIVORS];
_local4 = [false, false, false];
_local5 = 0;
_local6 = this.settings.getScarceCount();
while (_local5 < _local6) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local9 = _temp1;
_local4[_local9] = true;
};
Util.shuffle(_local4);
_local7 = 0;
_local8 = Option.startingResources;
while (_local7 < _local8) {
var _temp2 = _local7;
_local7 = (_local7 + 1);
_local10 = _temp2;
_local11 = 0;
_local12 = _local3.length;
while (_local11 < _local12) {
var _temp3 = _local11;
_local11 = (_local11 + 1);
_local13 = _temp3;
_local14 = true;
if (_local4[_local13]){
_local14 = ((_local10 % 2) == 0);
};
if (_local14){
if (_local3[_local13] == Resource.SURVIVORS){
_local15 = Util.rand(Animation.carryAmmo.getTypeCount());
_local2.giveSurvivor(_local15);
} else {
_local16 = new ResourceCount(_local3[_local13], Lib.truckLoad(_local3[_local13]));
_local2.giveResource(_local16);
};
};
};
};
}
protected function placeBuildingZombies(_arg1:Building, _arg2:int):void{
if (!this.nearHq(_arg1.getLots())){
_arg1.addZombies(_arg2);
};
}
protected function placeStreetCorners(_arg1:Point, _arg2:Point):void{
var _local3:Array;
var _local4:Array;
var _local5:Array;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:MapCell;
var _local13:int;
_local3 = [_arg1.x, (_arg2.x - 2), _arg1.x, (_arg2.x - 2)];
_local4 = [_arg1.y, _arg1.y, (_arg2.y - 2), (_arg2.y - 2)];
_local5 = [Tile.nwCurve, Tile.neCurve, Tile.swCurve, Tile.seCurve];
_local6 = 0;
while (_local6 < 4) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local7 = _temp1;
_local8 = 0;
while (_local8 < 2) {
var _temp2 = _local8;
_local8 = (_local8 + 1);
_local9 = _temp2;
_local10 = 0;
while (_local10 < 2) {
var _temp3 = _local10;
_local10 = (_local10 + 1);
_local11 = _temp3;
_local12 = this.map.getCell((_local3[_local7] + _local9), (_local4[_local7] + _local11));
_local13 = ((_local5[_local7] + _local9) + (_local11 * Tile.X_COUNT));
_local12.clearTiles();
_local12.addTile(_local13);
_local12.setBackground(BackgroundType.STREET);
_local12.clearBlocked();
};
};
};
}
protected function placeWithBorder(_arg1:Point, _arg2:Point, _arg3:Array, _arg4:BackgroundType, _arg5:Boolean):void{
this.fillWith(_arg1, new Point((_arg1.x + 1), (_arg1.y + 1)), _arg3[0], _arg4, _arg5);
this.fillWith(new Point((_arg1.x + 1), _arg1.y), new Point((_arg2.x - 1), (_arg1.y + 1)), _arg3[1], _arg4, _arg5);
this.fillWith(new Point((_arg2.x - 1), _arg1.y), new Point(_arg2.x, (_arg1.y + 1)), _arg3[2], _arg4, _arg5);
this.fillWith(new Point(_arg1.x, (_arg1.y + 1)), new Point((_arg1.x + 1), (_arg2.y - 1)), _arg3[3], _arg4, _arg5);
if (_arg3[4] != Tile.NO_TILE){
this.fillWith(new Point((_arg1.x + 1), (_arg1.y + 1)), new Point((_arg2.x - 1), (_arg2.y - 1)), _arg3[4], _arg4, _arg5);
};
this.fillWith(new Point((_arg2.x - 1), (_arg1.y + 1)), new Point(_arg2.x, (_arg2.y - 1)), _arg3[5], _arg4, _arg5);
this.fillWith(new Point(_arg1.x, (_arg2.y - 1)), new Point((_arg1.x + 1), _arg2.y), _arg3[6], _arg4, _arg5);
this.fillWith(new Point((_arg1.x + 1), (_arg2.y - 1)), new Point((_arg2.x - 1), _arg2.y), _arg3[7], _arg4, _arg5);
this.fillWith(new Point((_arg2.x - 1), (_arg2.y - 1)), _arg2, _arg3[8], _arg4, _arg5);
}
protected function expandSize(_arg1:Point, _arg2:Point):void{
_arg1.x--;
_arg1.y--;
_arg2.x++;
_arg2.y++;
}
protected function placeIsland(_arg1:Point, _arg2:Point):void{
var _local3:Section;
this.placeStreetCorners(_arg1, _arg2);
this.box(_arg1, _arg2, Option.roadMiniColor);
Util.fillBackground(new Section(_arg1, _arg2), BackgroundType.STREET);
_local3 = new Section(_arg1, _arg2);
this.map.setCityLot(_local3);
_local3.west = new Street(new Point(_arg1.x, (_arg1.y + 2)), 2, ((_arg2.y - _arg1.y) - 4), true, null, null);
_local3.east = new Street(new Point((_arg2.x - 2), (_arg1.y + 2)), 2, ((_arg2.y - _arg1.y) - 4), true, null, null);
_local3.north = new Street(new Point((_arg1.x + 2), _arg1.y), 2, ((_arg2.x - _arg1.y) - 4), false, null, null);
_local3.south = new Street(new Point((_arg1.x + 2), (_arg2.y - 2)), 2, ((_arg2.x - _arg1.y) - 4), false, null, null);
this.shrinkSize(_local3.offset, _local3.limit);
this.shrinkSize(_local3.offset, _local3.limit);
this.placeCity(_local3);
_local3.west.draw(this.map);
_local3.east.draw(this.map);
_local3.north.draw(this.map);
_local3.south.draw(this.map);
}
}
}//package
Section 384
//Offset (Offset)
package {
import flash.*;
public class Offset {
public var x:int;
public var y:int;
public function Offset(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.x = _arg1;
this.y = _arg2;
};
}
}
}//package
Section 385
//Option (Option)
package {
public class Option {
public static var hqBuildingDistribution:Array = [98, 0, 0, 0, 0, 0, 0, 0, 0, 2];
public static var ammoBarColor:int = 0xCCCCCC;
public static var abandonButton:int = (Option.textButtonCount + buildButtonCount);
public static var truckSpeedMin:int = 300;
public static var survivorFoodBonus:int = 3;
public static var wanderingZombieBase:int = 10;
public static var rangeOpacity:Number = 0.3;
public static var disturbChance:int = 4;
public static var buildingThreshold:int = 5;
public static var roadMiniColor:int = 0;
public static var frameDelay:int = 75;
public static var depotTruckSpeedRange:Array = [50, 75, 150];
public static var hqStatusTextColor:int = 13399927;
public static var boardBarColor:int = 8864287;
public static var depotCost:Array = [0, 3, 3];
public static var fastFrames:int = 5;
public static var tutorialWanderingZombieDelay:int = (Option.fps * 130);
public static var moderateResource:int = 10;
public static var salvageBuildingOpacity:Number = 0.3;
public static var truckNoise:int = 2;
public static var halfCell:int = 16;
public static var hqIndustryFactor:int = truckLoad;
public static var supplyTargetThickness:int = 2;
public static var shootNoise:int = 10;
public static var depotTruckSpeedMin:Array = [300, 225, 450];
public static var rangeColor:int = 0xAAAA;
public static var menuButtonCount:int = (((Option.textButtonCount + buildButtonCount) + abandonButtonCount) + extraButtonCount);
public static var startDelay:int = (Option.fps * frameDelay);
public static var towerMiniColor:int = -16711936;
public static var countDownBackgroundColor:int = 0x330000;
public static var toolTipTitleColor:int = 0xFFFFFF;
public static var foodTime:int = 300;
public static var foodTruckSpeedMin:int = 750;
public static var zombieThreatTextColor:int = 16724787;
public static var spawnFrameCount:int = 50;
public static var towerShadowOpacity:Number = 0.7;
public static var blockThreshold:int = 12;
public static var foodBonus:int = 24;
public static var statusTextColor:int = 0xEEEEEE;
public static var backgroundBarColor:int = 0x333333;
public static var supplyTargetLength:int = 32;
public static var sniperMaxUpgrade:Array = [5, 0, 0, 0];
public static var statusBarSize:int = 110;
public static var barricadeMaxInit:Array = [0, 15, 0, 0];
public static var workshopSpeedFactor:int = 50;
public static var hitsBarColor:int = 0xCC00;
public static var depotSpeed:Array = [150, 150, 150];
public static var maxPathOperations:int = 100;
public static var hqCost:Array = [0, 0, 0];
public static var hqLevelLimit:int = 0;
public static var shootCost:int = 1;
public static var zombieBuildingColor:Array = [0xD5D500, 0xD58A00, 0xD50000];
public static var noBar:int = -1;
public static var waterColor:int = 102;
public static var supplyArrowAngle:Number = 0.628318530717959;
public static var hqBackgroundColor:int = 0;
public static var sniperSpeed:Array = [150, 150, 150];
public static var barThickness:int = 4;
public static var gardenTime:int = 10;
public static var sniperMaxInit:Array = [15, 0, 0, 1];
public static var zombieBuildingWeights:Array = [4, 6, 20000000];
public static var toggleViewButton:int = (Option.abandonButton + 1);
public static var biasSalvage:int = 20;
public static var cellPixels:int = 32;
public static var foodTruckSpeedRange:int = 75;
public static var returnTruckSpeedMin:int = 300;
public static var hqSpeed:Array = [200, 200, 200];
public static var fullBarColor:int = 3346705;
public static var barLeft:int = Math.floor(((Option.cellPixels - barLength) / 2));
public static var groundSalvageDistribution:Array = [50, 50, 0, 0];
public static var minGenericSize:int = 3;
public static var rotateStep:int = 5;
public static var barricadeHits:Array = [10, 15, 20];
public static var salvageBuildingColor:int = 11206570;
public static var shadowOpacity:Number = 0.3;
public static var survivorBonus:int = 7;
public static var shadowBuildColor:int = 0;
public static var mainTitleTextColor:int = 0xEEEEEE;
public static var foodTransportCost:int = 2;
public static var barLength:int = 25;
public static var shadowAllowColor:int = 0xFF00;
public static var extraButtonCount:int = 2;
public static var miniSupplyColor:int = 0xFFFFFF;
public static var barricadeMaxUpgrade:Array = [0, 10, 0, 0];
public static var countDownTextColor:int = 0xCCCC;
public static var sniperLevelLimit:int = 2;
public static var fps:int = 20;
public static var announceFrameCount:int = (Option.fps * 2);
public static var selectedMiniColor:int = -1;
public static var truckSpeedRange:int = 100;
public static var zombieChance:Array = [3, 5, 9, 9, 9, 9, 12, 10, 2, 1];
public static var workshopMaxUpgrade:Array = [0, 0, 0, 0];
public static var workshopSpeed:Array = [(4 * truckLoad), (4 * truckLoad), (8 * truckLoad)];
public static var rangeOpacityIncrement:Number = 0.08;
public static var sniperAccuracy:Array = [30, 30, 30];
public static var dynamiteWork:int = 100;
public static var workshopMaxInit:Array = [10, 10, 10, 2];
public static var waitDelay:int = (Option.fps * frameDelay);
public static var minHouseSize:int = 2;
public static var normalRecklessDistance:int = 3;
public static var wanderingZombieIncrement:int = 2;
public static var danceMoves:Array = [0, 360, 220, 80, -80, 80, -80, 80];
public static var noShootColor:int = 0xEE0000;
public static var emptyBuildingMiniColor:int = 0x333333;
public static var sniperBuildCost:int = 2;
public static var unknownColor:int = 9922895;
public static var soundCount:int = 8;
public static var spawnReplayColor:int = 0xCCCCCC;
public static var tileCells:int = 3;
public static var supplyThickness:int = 0;
public static var abandonButtonCount:int = 1;
public static var buildNoise:int = 4;
public static var shadowRangeOpacity:Number = 0.3;
public static var barricadeCost:Array = [0, 1, 1];
public static var buildingDistribution:Array = [70, 8, 0, 4, 4, 0, 4, 0, 0, 2];
public static var zombieBuildingMiniWeights:Array = [1];
public static var dancePeriod:int = 1200;
public static var barricadeLevelLimit:int = 0;
public static var sniperCost:Array = [0, 1, 1];
public static var shadowRangeColor:int = 0xAAAAAA;
public static var toolTipDelay:int = 5;
public static var smallBlockDistribution:Array = [70, 10, 0, 0, 20, 0];
public static var colorCount:int = 3;
public static var maxTruckWait:int = 50;
public static var barricadeMiniColor:int = -9615104;
public static var hqIndustryTime:int = 900;
public static var shadowDenyColor:int = 0xFF0000;
public static var depotMiniColor:int = -16776961;
public static var zombieBuildingMiniColor:Array = [0x770000];
public static var menuBackgroundColor:int = 0x202020;
public static var workshopLevelLimit:int = 0;
public static var greenMenuColor:int = 0x4000;
public static var lowResource:int = 5;
public static var depotMaxUpgrade:Array = [30, 30, 10, 3];
public static var workshopMiniColor:int = -8323073;
public static var supplyRange:int = 7;
public static var textButtonCount:int = 4;
public static var towerNoise:int = 3;
public static var sniperRange:Array = [4, 6, 9];
public static var sniperIdleRange:int = 500;
public static var truckLook:int = 2;
public static var jumpToDepotButton:int = (Option.toggleViewButton + 1);
public static var resourceCount:int = 4;
public static var toolTipTextColor:int = 0xDDDDDD;
public static var returnTruckSpeedRange:int = 225;
public static var foodBarColor:int = 204;
public static var wanderingZombieDelay:int = (Option.fps * 150);
public static var sniperHeadRotate:int = 15;
public static var accuracyMax:int = 100;
public static var truckMiniColor:int = -16742400;
public static var hqBlockDistribution:Array = [85, 5, 0, 0, 10, 0];
public static var redMenuColor:int = 0x400000;
public static var largeBlockDistribution:Array = [71, 5, 4, 4, 6, 6];
public static var vulnerableBonus:int = 49;
public static var salvageChance:Array = [4, 8, 16, 16, 16, 16, 4, 16, 3, 1];
public static var buildButtonCount:int = 4;
public static var depotMaxInit:Array = [40, 40, 30, 4];
public static var mainBodyTextColor:int = 0xAAAAAA;
public static var supplyColor:int = 0xFF;
public static var zombieNoThreatTextColor:int = 3407667;
public static var startingResources:int = 30;
public static var zombieMiniColor:int = -32640;
public static var repeatWait:int = 1;
public static var zombieBuildingOpacity:Array = [0.3, 0.3, 0.3];
public static var salvageDistribution:Array = [[28, 28, 0, 16], [28, 28, 0, 16], [2, 2, 0, 2], [94, 2, 0, 2], [2, 94, 0, 2], [2, 2, 0, 94], [33, 33, 0, 1], [28, 28, 0, 16], [35, 40, 0, 10], [1, 1, 0, 1]];
public static var foodShootCost:int = 2;
public static var barricadeHitCost:int = 1;
public static var supplyArrowLength:int = 8;
public static var supplyTargetColor:int = 238;
public static var survivorDeathFrameCount:int = 50;
public static var barricadeSpeed:Array = [50, 50, 50];
public static var newRangeOpacity:Number = 0.3;
public static var truckRetries:int = 3;
public static var selectColor:int = 0xAA00;
public static var depotLevelLimit:int = 0;
public static var sniperBodyRotate:int = 10;
public static var newRangeColor:int = 0xAAAA;
public static var miniSupplyThickness:int = 0;
public static var sniperIdleMin:int = 50;
public static var selectThickness:int = 5;
public static var hqInfluence:int = 11;
public static var workshopCost:Array = [0, 1, 0];
public static var zombieSpeedRange:int = 50;
public static var truckLoad:int = 10;
}
}//package
Section 386
//Path (Path)
package {
import flash.*;
public class Path {
protected var steps:Array;
protected var found:Boolean;
protected var generating:Boolean;
public function Path():void{
if (!Boot.skip_constructor){
this.generating = true;
this.steps = new Array();
this.reset();
};
}
public function succeed():void{
this.found = true;
this.generating = false;
this.steps.reverse();
}
public function getStep(_arg1:int):Point{
return (this.steps[_arg1]);
}
public function getStepCount():int{
return (this.steps.length);
}
public function addStep(_arg1:Point):void{
this.steps.push(_arg1);
}
public function reset():void{
this.generating = true;
this.found = false;
this.steps = [];
}
public function isFound():Boolean{
return (this.found);
}
public function isGenerating():Boolean{
return (this.generating);
}
public function save(){
var _local1:Array;
var _local2:int;
var _local3:Array;
var _local4:Point;
_local1 = null;
if (((!(this.generating)) && (this.found))){
_local1 = new Array();
_local2 = 0;
_local3 = this.steps;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
_local1.push(_local4.save());
};
};
return (_local1);
}
public function fail():void{
this.generating = false;
this.found = false;
}
public static function load(_arg1):Path{
var _local2:Path;
var _local3:int;
var _local4:*;
var _local5:int;
_local2 = new (Path);
_local2.generating = false;
_local2.found = true;
_local3 = 0;
_local4 = _arg1.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local2.steps.push(Point.load(_arg1[_local5]));
};
return (_local2);
}
public static function saveS(_arg1:Path){
return (_arg1.save());
}
}
}//package
Section 387
//PathFinder (PathFinder)
package {
import flash.*;
public class PathFinder {
protected var started:Boolean;
protected var visit:Grid;
protected var queue:List;
protected var source:Point;
protected var path:Path;
protected var zombie:Boolean;
protected var dest:Point;
protected static var next:Point = new Point(0, 0);
public function PathFinder(_arg1:Point=null, _arg2:Point=null, _arg3:Boolean=false, _arg4:Path=null):void{
if (!Boot.skip_constructor){
this.source = _arg1.clone();
this.dest = null;
if (_arg2 != null){
this.dest = _arg2.clone();
};
this.queue = new List();
this.visit = null;
this.zombie = _arg3;
this.started = false;
this.path = _arg4;
if (this.path != null){
this.path.reset();
};
};
}
public function step(_arg1:int):void{
var _local2:int;
var _local3:int;
_local2 = 0;
while (_local2 < _arg1) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local3 = _temp1;
this.stepOnce();
if (this.isDone()){
break;
};
};
}
public function startCalculation():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
_local1 = 0;
_local2 = this.visit.sizeY();
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = 0;
_local5 = this.visit.sizeX();
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp2;
this.visit.set(_local6, _local3, -1);
};
};
this.queue.add(this.source.clone());
this.visit.set(this.source.x, this.source.y, 0);
this.started = true;
}
public function isDone():Boolean{
return (((this.started) && (this.queue.isEmpty())));
}
public function setupVisit():void{
if (this.visit == null){
this.visit = new Grid(Game.map.sizeX(), Game.map.sizeY());
};
}
public function reset(_arg1:Point, _arg2:Point, _arg3:Boolean, _arg4:Path):void{
this.queue.clear();
this.source = _arg1.clone();
this.dest = null;
if (_arg2 != null){
this.dest = _arg2.clone();
};
this.zombie = _arg3;
this.started = false;
this.path = _arg4;
if (this.path != null){
this.path.reset();
};
}
public function isVisited(_arg1:Point):Boolean{
return (!((this.visit.get(_arg1.x, _arg1.y) == -1)));
}
protected function isBlocked(_arg1:Point):Boolean{
var _local2:MapCell;
var _local3:Boolean;
if (Lib.outsideMap(_arg1)){
return (true);
};
_local2 = Game.map.getCell(_arg1.x, _arg1.y);
if (this.zombie){
return (_local2.isBlocked());
};
_local3 = Lib.adjacentZombie(_arg1);
return (((((((_local2.isBlocked()) || (_local2.hasTower()))) || (_local3))) || ((_local2.getBackground() == BackgroundType.BRIDGE))));
}
public function getParent(_arg1:Point, _arg2:Point=null):Point{
var _local3:Point;
var _local4:int;
var _local5:Array;
var _local6:int;
var _local7:Array;
var _local8:Point;
var _local9:int;
var _local10:Point;
var _local11:int;
_local3 = null;
if (this.started){
_local4 = 1000000000;
_local5 = [];
_local6 = 0;
_local7 = Lib.delta;
while (_local6 < _local7.length) {
_local8 = _local7[_local6];
_local6++;
_local9 = this.visit.get((_arg1.x + _local8.x), (_arg1.y + _local8.y));
if (((!((_local9 == -1))) && ((_local9 <= _local4)))){
_local10 = new Point((_arg1.x + _local8.x), (_arg1.y + _local8.y));
if (_local9 == _local4){
_local5.push(_local10);
} else {
_local5 = [_local10];
};
_local4 = _local9;
};
};
if (((!((_arg2 == null))) && ((this.visit.get(_arg2.x, _arg2.y) == _local4)))){
_local3 = _arg2;
} else {
if (_local5.length > 0){
_local11 = Lib.rand(_local5.length);
_local3 = _local5[_local11];
};
};
};
return (_local3);
}
public function getPath():Path{
return (this.path);
}
protected function stepOnce():void{
var _local1:Boolean;
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:Array;
var _local6:Point;
var _local7:Boolean;
if (!this.queue.isEmpty()){
_local1 = false;
_local2 = this.queue.first();
_local3 = (this.visit.get(_local2.x, _local2.y) + 1);
this.queue.pop();
_local4 = 0;
_local5 = Lib.delta;
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
next.x = (_local2.x + _local6.x);
next.y = (_local2.y + _local6.y);
if (Lib.outsideMap(next)){
} else {
if (((!(this.isVisited(next))) || ((this.visit.get(next.x, next.y) > _local3)))){
if (!this.isBlocked(next)){
_local7 = !(this.isVisited(next));
this.visit.set(next.x, next.y, _local3);
if (_local7){
this.queue.add(next.clone());
};
};
};
if (((!(this.zombie)) && (((Point.isEqual(next, this.dest)) || ((((this.dest == null)) && (this.isTower(next)))))))){
this.dest = next.clone();
_local1 = true;
break;
};
};
};
if (_local1){
this.completePath();
} else {
if (((this.queue.isEmpty()) && (!((this.path == null))))){
this.path.fail();
};
};
};
}
public function isZombie():Boolean{
return (this.zombie);
}
public function save(){
if (!this.zombie){
throw (new Error("ERROR: Saving non-zombie path"));
};
return ({source:this.source.save(), dest:Save.maybe(this.dest, Point.saveS), queue:Save.saveList(this.queue, Point.saveS), visit:Save.maybe(this.visit, Save.saveGridInt), started:this.started});
}
protected function completePath():void{
var _local1:Point;
if (this.path != null){
_local1 = this.dest.clone();
while (!(Point.isEqual(_local1, this.source))) {
this.path.addStep(_local1);
_local1 = this.getParent(_local1);
};
this.queue.clear();
this.path.succeed();
};
}
protected function isTower(_arg1:Point):Boolean{
return (!((Game.map.getCell(_arg1.x, _arg1.y).getTower() == null)));
}
public static function load(_arg1):PathFinder{
var _local2:Point;
var _local3:Point;
var _local4:PathFinder;
_local2 = Point.load(_arg1.source);
_local3 = Point.load(_arg1.dest);
_local4 = new PathFinder(_local2, _local3, true, null);
_local4.queue = Load.loadList(_arg1.queue, Point.load);
_local4.visit = Load.maybe(_arg1.visit, Load.loadGridInt);
_local4.zombie = true;
_local4.started = _arg1.started;
_local4.path = null;
return (_local4);
}
public static function saveS(_arg1:PathFinder){
return (_arg1.save());
}
}
}//package
Section 388
//PathFinderPool (PathFinderPool)
package {
import flash.*;
public class PathFinderPool {
protected var activePaths:Array;
protected var unstartedPaths:Array;
protected var finishedPaths:List;
protected var newPaths:Array;
public static var HIGH:int = 0;
protected static var PRIORITY_COUNT:int = 2;
public static var LOW:int = 1;
public function PathFinderPool():void{
if (!Boot.skip_constructor){
this.newPaths = this.newArray();
this.unstartedPaths = this.newArray();
this.activePaths = this.newArray();
this.finishedPaths = new List();
};
}
public function getZombiePath(_arg1:Point, _arg2=null):PathFinder{
return (this.getGeneralPath(_arg1, new Point(0, 0), true, _arg2));
}
public function step():void{
var _local1:Boolean;
var _local2:int;
var _local3:int;
var _local4:int;
_local1 = false;
_local2 = 0;
_local3 = PRIORITY_COUNT;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local1 = ((_local1) || (this.stepNewPaths(_local4)));
_local1 = ((_local1) || (this.stepUnstartedPaths(_local4)));
_local1 = ((_local1) || (this.stepActivePaths(_local4)));
};
}
public function isActive():Boolean{
var _local1:Boolean;
var _local2:int;
var _local3:int;
var _local4:int;
_local1 = false;
_local2 = 0;
_local3 = PRIORITY_COUNT;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local1 = ((_local1) || (this.isActivePriority(_local4)));
};
return (_local1);
}
protected function stepUnstartedPaths(_arg1:int):Boolean{
var _local2:Boolean;
var _local3:PathFinder;
_local2 = false;
if (!this.unstartedPaths[_arg1].isEmpty()){
_local3 = this.unstartedPaths[_arg1].first();
this.unstartedPaths[_arg1].pop();
_local3.startCalculation();
this.activePaths[_arg1].add(_local3);
_local2 = true;
};
return (_local2);
}
public function isActivePriority(_arg1:int):Boolean{
return (!(((((this.newPaths[_arg1].isEmpty()) && (this.unstartedPaths[_arg1].isEmpty()))) && (this.activePaths[_arg1].isEmpty()))));
}
public function getGeneralPath(_arg1:Point, _arg2:Point, _arg3:Boolean, _arg4):PathFinder{
var _local5:int;
var _local6:PathFinder;
var _local7:Path;
_local5 = HIGH;
if (_arg4 != null){
_local5 = _arg4;
};
if (_local5 >= PRIORITY_COUNT){
_local5 = (PathFinderPool.PRIORITY_COUNT - 1);
};
if (_local5 < 0){
_local5 = 0;
};
_local6 = null;
_local7 = null;
if (!_arg3){
_local7 = new Path();
};
if (this.finishedPaths.isEmpty()){
_local6 = new PathFinder(_arg1, _arg2, _arg3, _local7);
this.newPaths[_local5].add(_local6);
} else {
_local6 = this.finishedPaths.first();
this.finishedPaths.pop();
_local6.reset(_arg1, _arg2, _arg3, _local7);
this.unstartedPaths[_local5].add(_local6);
};
return (_local6);
}
public function newArray():Array{
var _local1:Array;
var _local2:int;
var _local3:int;
var _local4:int;
_local1 = [];
_local2 = 0;
_local3 = PRIORITY_COUNT;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local1.push(new List());
};
return (_local1);
}
protected function stepNewPaths(_arg1:int):Boolean{
var _local2:Boolean;
var _local3:PathFinder;
_local2 = false;
if (!this.newPaths[_arg1].isEmpty()){
_local3 = this.newPaths[_arg1].first();
this.newPaths[_arg1].pop();
_local3.setupVisit();
this.unstartedPaths[_arg1].add(_local3);
_local2 = true;
};
return (_local2);
}
public function getPath(_arg1:Point, _arg2:Point, _arg3=null):Path{
var _local4:PathFinder;
_local4 = this.getGeneralPath(_arg1, _arg2, false, _arg3);
return (_local4.getPath());
}
protected function stepActivePaths(_arg1:int):Boolean{
var _local2:Boolean;
var _local3:int;
var _local4:List;
var _local5:*;
var _local6:*;
var _local7:PathFinder;
var _local8:int;
var _local9:PathFinder;
_local2 = false;
if (!this.activePaths[_arg1].isEmpty()){
_local3 = this.activePaths[_arg1].length;
_local4 = new List();
_local5 = this.activePaths[_arg1].iterator();
while (_local5.hasNext()) {
_local7 = _local5.next();
_local8 = Math.ceil((Option.maxPathOperations / this.activePaths[_arg1].length));
_local7.step(_local8);
if (_local7.isDone()){
_local4.add(_local7);
};
};
_local6 = _local4.iterator();
while (_local6.hasNext()) {
_local9 = _local6.next();
this.activePaths[_arg1].remove(_local9);
if (!_local9.isZombie()){
this.finishedPaths.add(_local9);
};
};
_local2 = true;
};
return (_local2);
}
}
}//package
Section 389
//Pause (Pause)
package {
import flash.display.*;
import ui.*;
import flash.*;
public class Pause {
protected var systemPaused:Boolean;
protected var clip:MovieClip;
protected var paused:Boolean;
protected var tutorialPaused:Boolean;
public function Pause(_arg1:DisplayObjectContainer=null):void{
var _local2:LayoutGame;
super();
if (!Boot.skip_constructor){
_local2 = Game.view.layout;
this.paused = false;
this.systemPaused = false;
this.tutorialPaused = false;
this.clip = Lib.attach(Label.pause);
_arg1.addChild(this.clip);
this.clip.visible = false;
this.clip.mouseChildren = false;
this.clip.mouseEnabled = false;
this.resize(_local2);
};
}
public function cleanup():void{
this.clip.parent.removeChild(this.clip);
this.clip = null;
}
public function load(_arg1):void{
this.paused = _arg1;
this.clip.visible = this.paused;
}
public function isSystemPaused():Boolean{
return (this.systemPaused);
}
public function systemPause():void{
this.systemPaused = true;
}
public function setText(_arg1:String):void{
}
public function resize(_arg1:LayoutGame):void{
Util.centerHorizontally(this.clip, _arg1.screenSize);
this.clip.y = (_arg1.screenSize.y - 130);
}
public function isPaused():Boolean{
return (((((this.paused) || (this.systemPaused))) || (this.tutorialPaused)));
}
public function toggle():void{
this.clip.visible = !(this.clip.visible);
this.paused = !(this.paused);
if (this.paused){
Game.view.spawner.setPause();
} else {
Game.view.spawner.setPlay();
};
}
public function systemResume():void{
this.systemPaused = false;
}
public function save(){
return (this.paused);
}
public function tutorialPause(_arg1:Boolean):void{
}
}
}//package
Section 390
//PauseClip (PauseClip)
package {
import flash.display.*;
public dynamic class PauseClip extends MovieClip {
public function PauseClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 391
//pedia_ammo (pedia_ammo)
package {
import flash.display.*;
public dynamic class pedia_ammo extends MovieClip {
}
}//package
Section 392
//pedia_apartment (pedia_apartment)
package {
import flash.display.*;
public dynamic class pedia_apartment extends MovieClip {
}
}//package
Section 393
//pedia_barricade (pedia_barricade)
package {
import flash.display.*;
public dynamic class pedia_barricade extends MovieClip {
}
}//package
Section 394
//pedia_boards (pedia_boards)
package {
import flash.display.*;
public dynamic class pedia_boards extends MovieClip {
}
}//package
Section 395
//pedia_charges (pedia_charges)
package {
import flash.display.*;
public dynamic class pedia_charges extends MovieClip {
}
}//package
Section 396
//pedia_church (pedia_church)
package {
import flash.display.*;
public dynamic class pedia_church extends MovieClip {
}
}//package
Section 397
//pedia_depot (pedia_depot)
package {
import flash.display.*;
public dynamic class pedia_depot extends MovieClip {
}
}//package
Section 398
//pedia_hardware_store (pedia_hardware_store)
package {
import flash.display.*;
public dynamic class pedia_hardware_store extends MovieClip {
}
}//package
Section 399
//pedia_hospital (pedia_hospital)
package {
import flash.display.*;
public dynamic class pedia_hospital extends MovieClip {
}
}//package
Section 400
//pedia_house (pedia_house)
package {
import flash.display.*;
public dynamic class pedia_house extends MovieClip {
}
}//package
Section 401
//pedia_mall (pedia_mall)
package {
import flash.display.*;
public dynamic class pedia_mall extends MovieClip {
}
}//package
Section 402
//pedia_office (pedia_office)
package {
import flash.display.*;
public dynamic class pedia_office extends MovieClip {
}
}//package
Section 403
//pedia_police_station (pedia_police_station)
package {
import flash.display.*;
public dynamic class pedia_police_station extends MovieClip {
}
}//package
Section 404
//pedia_rubble (pedia_rubble)
package {
import flash.display.*;
public dynamic class pedia_rubble extends MovieClip {
}
}//package
Section 405
//pedia_sniper (pedia_sniper)
package {
import flash.display.*;
public dynamic class pedia_sniper extends MovieClip {
}
}//package
Section 406
//pedia_survivors (pedia_survivors)
package {
import flash.display.*;
public dynamic class pedia_survivors extends MovieClip {
}
}//package
Section 407
//pedia_workshop (pedia_workshop)
package {
import flash.display.*;
public dynamic class pedia_workshop extends MovieClip {
}
}//package
Section 408
//pedia_zombies (pedia_zombies)
package {
import flash.display.*;
public dynamic class pedia_zombies extends MovieClip {
}
}//package
Section 409
//PermissiveFov (PermissiveFov)
package {
public class PermissiveFov {
protected static function addShallowBump(_arg1:Offset, _arg2:DIterator, _arg3:DList, _arg4:DList):void{
var _local5:Bump;
_arg2.get().shallow.far = new Offset(_arg1.x, _arg1.y);
_arg4.push_back(new Bump());
_arg4.back().location = new Offset(_arg1.x, _arg1.y);
_arg4.back().parent = _arg2.get().shallowBump;
_arg2.get().shallowBump = _arg4.back();
_local5 = _arg2.get().steepBump;
while (_local5 != null) {
if (_arg2.get().shallow.isAbove(_local5.location)){
_arg2.get().shallow.near = new Offset(_local5.location.x, _local5.location.y);
};
_local5 = _local5.parent;
};
}
protected static function checkField(_arg1:DIterator, _arg2:DList):DIterator{
var _local3:DIterator;
_local3 = _arg1;
if (((((_arg1.get().shallow.doesContain(_arg1.get().steep.near)) && (_arg1.get().shallow.doesContain(_arg1.get().steep.far)))) && (((_arg1.get().shallow.doesContain(new Offset(0, 1))) || (_arg1.get().shallow.doesContain(new Offset(1, 0))))))){
_local3 = _arg2.erase(_arg1);
};
return (_local3);
}
protected static function min(_arg1:int, _arg2:int):int{
if (_arg1 < _arg2){
return (_arg1);
};
return (_arg2);
}
protected static function calculateFovQuadrant(_arg1:FovState):void{
var _local2:DList;
var _local3:DList;
var _local4:DList;
var _local5:Offset;
var _local6:DIterator;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
_local2 = new DList();
_local3 = new DList();
_local4 = new DList();
_local4.push_back(new Field());
_local4.back().shallow.near = new Offset(0, 1);
_local4.back().shallow.far = new Offset(_arg1.extent.x, 0);
_local4.back().steep.near = new Offset(1, 0);
_local4.back().steep.far = new Offset(0, _arg1.extent.y);
_local5 = new Offset(0, 0);
if ((((_arg1.quadrant.x == 1)) && ((_arg1.quadrant.y == 1)))){
actIsBlocked(_arg1, _local5);
};
_local6 = new DIterator();
_local7 = 0;
_local8 = 0;
_local9 = (_arg1.extent.x + _arg1.extent.y);
_local7 = 1;
while ((((_local7 <= _local9)) && (!(_local4.isEmpty())))) {
_local6 = _local4.frontIterator();
_local10 = max(0, (_local7 - _arg1.extent.x));
_local11 = min(_local7, _arg1.extent.y);
_local8 = _local10;
while ((((_local8 <= _local11)) && (_local6.isValid()))) {
_local5.x = (_local7 - _local8);
_local5.y = _local8;
_local6 = visitSquare(_arg1, _local5, _local6, _local2, _local3, _local4);
_local8++;
};
_local7++;
};
}
protected static function max(_arg1:int, _arg2:int):int{
if (_arg1 > _arg2){
return (_arg1);
};
return (_arg2);
}
protected static function actIsBlocked(_arg1:FovState, _arg2:Offset):Boolean{
var _local3:Offset;
var _local4:Boolean;
_local3 = new Offset(((_arg2.x * _arg1.quadrant.x) + _arg1.source.x), ((_arg2.y * _arg1.quadrant.y) + _arg1.source.y));
_local4 = _arg1.isBlocked(_local3.x, _local3.y);
if (((((((((_arg1.quadrant.x * _arg1.quadrant.y) == 1)) && ((_arg2.x == 0)))) && (!((_arg2.y == 0))))) || (((((((_arg1.quadrant.x * _arg1.quadrant.y) == -1)) && ((_arg2.y == 0)))) && (!((_arg2.x == 0))))))){
return (_local4);
};
_arg1.visit(_local3.x, _local3.y);
return (_local4);
}
protected static function visitSquare(_arg1:FovState, _arg2:Offset, _arg3:DIterator, _arg4:DList, _arg5:DList, _arg6:DList):DIterator{
var _local7:Offset;
var _local8:Offset;
var _local9:Boolean;
var _local10:DIterator;
var _local11:DIterator;
_local7 = new Offset(_arg2.x, (_arg2.y + 1));
_local8 = new Offset((_arg2.x + 1), _arg2.y);
while (((_arg3.isValid()) && (_arg3.get().steep.isBelowOrContains(_local8)))) {
_arg3.increment();
};
if (!_arg3.isValid()){
return (_arg3);
};
if (_arg3.get().shallow.isAboveOrContains(_local7)){
return (_arg3);
};
_local9 = actIsBlocked(_arg1, _arg2);
if (!_local9){
return (_arg3);
};
if (((_arg3.get().shallow.isAbove(_local8)) && (_arg3.get().steep.isBelow(_local7)))){
_arg3 = _arg6.erase(_arg3);
} else {
if (_arg3.get().shallow.isAbove(_local8)){
addShallowBump(_local7, _arg3, _arg4, _arg5);
_arg3 = checkField(_arg3, _arg6);
} else {
if (_arg3.get().steep.isBelow(_local7)){
addSteepBump(_local8, _arg3, _arg4, _arg5);
_arg3 = checkField(_arg3, _arg6);
} else {
_local10 = new DIterator();
_local10.copyFrom(_arg3);
_local11 = _arg6.insert(_arg3, _arg3.get().clone());
addSteepBump(_local8, _local11, _arg4, _arg5);
checkField(_local11, _arg6);
addShallowBump(_local7, _local10, _arg4, _arg5);
_arg3 = checkField(_local10, _arg6);
};
};
};
return (_arg3);
}
protected static function addSteepBump(_arg1:Offset, _arg2:DIterator, _arg3:DList, _arg4:DList):void{
var _local5:Bump;
_arg2.get().steep.far = new Offset(_arg1.x, _arg1.y);
_arg3.push_back(new Bump());
_arg3.back().location = new Offset(_arg1.x, _arg1.y);
_arg3.back().parent = _arg2.get().steepBump;
_arg2.get().steepBump = _arg3.back();
_local5 = _arg2.get().shallowBump;
while (_local5 != null) {
if (_arg2.get().steep.isBelow(_local5.location)){
_arg2.get().steep.near = new Offset(_local5.location.x, _local5.location.y);
};
_local5 = _local5.parent;
};
}
public static function permissiveFov(_arg1:int, _arg2:int, _arg3:int, _arg4:Function, _arg5:Function):void{
var _local6:FovState;
var _local7:Array;
var _local8:Array;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
_local6 = new FovState();
_local6.source = new Offset(_arg1, _arg2);
_local6.isBlocked = _arg4;
_local6.visit = _arg5;
_local7 = [new Offset(1, 1), new Offset(-1, 1), new Offset(-1, -1), new Offset(1, -1)];
_local8 = [new Offset(_arg3, _arg3), new Offset(_arg3, _arg3), new Offset(_arg3, _arg3), new Offset(_arg3, _arg3)];
_local9 = 0;
_local10 = 0;
_local11 = _local7.length;
while (_local10 < _local11) {
var _temp1 = _local10;
_local10 = (_local10 + 1);
_local12 = _temp1;
_local6.quadrant = _local7[_local12];
_local6.extent = _local8[_local12];
calculateFovQuadrant(_local6);
};
}
}
}//package
Section 410
//Point (Point)
package {
import flash.*;
public class Point {
public var y:int;
public var x:int;
public function Point(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.x = _arg1;
this.y = _arg2;
};
}
public function clone():Point{
return (new Point(this.x, this.y));
}
public function toPixel():Point{
return (new Point(Lib.cellToPixel(this.x), Lib.cellToPixel(this.y)));
}
public function toString():String{
return ((((("(" + Std.string(this.x)) + ", ") + Std.string(this.y)) + ")"));
}
public function minus(_arg1:Point):Point{
return (new Point((this.x - _arg1.x), (this.y - _arg1.y)));
}
public function plusEquals(_arg1:Point):void{
this.x = (this.x + _arg1.x);
this.y = (this.y + _arg1.y);
}
public function plus(_arg1:Point):Point{
return (new Point((this.x + _arg1.x), (this.y + _arg1.y)));
}
public function save(){
return ({x:this.x, y:this.y});
}
public static function debug(_arg1:Point):String{
if (_arg1 == null){
return ("<NULL>");
};
return (_arg1.toString());
}
public static function load(_arg1):Point{
if (_arg1 != null){
return (new Point(_arg1.x, _arg1.y));
};
return (null);
}
public static function saveS(_arg1:Point){
return (_arg1.save());
}
public static function isEqual(_arg1:Point, _arg2:Point):Boolean{
return ((((((_arg1 == null)) && ((_arg2 == null)))) || (((((((!((_arg1 == null))) && (!((_arg2 == null))))) && ((_arg1.x == _arg2.x)))) && ((_arg1.y == _arg2.y))))));
}
public static function isAdjacent(_arg1:Point, _arg2:Point):Boolean{
var _local3:Boolean;
var _local4:int;
var _local5:int;
_local3 = false;
if ((((_arg1 == null)) && ((_arg2 == null)))){
_local3 = true;
} else {
if (((!((_arg1 == null))) && (!((_arg2 == null))))){
_local4 = Math.floor(Math.abs((_arg1.x - _arg2.x)));
_local5 = Math.floor(Math.abs((_arg1.y - _arg2.y)));
_local3 = (((((_local4 <= 1)) && ((_local5 == 0)))) || ((((_local5 <= 1)) && ((_local4 == 0)))));
};
};
return (_local3);
}
public static function isHorizontallyAdjacent(_arg1:Point, _arg2:Point):Boolean{
var _local3:Boolean;
var _local4:int;
var _local5:int;
_local3 = false;
if ((((_arg1 == null)) && ((_arg2 == null)))){
_local3 = true;
} else {
if (((!((_arg1 == null))) && (!((_arg2 == null))))){
_local4 = Math.floor(Math.abs((_arg1.x - _arg2.x)));
_local5 = Math.floor(Math.abs((_arg1.y - _arg2.y)));
_local3 = (((_local5 == 0)) && ((_local4 <= 1)));
};
};
return (_local3);
}
public static function isVerticallyAdjacent(_arg1:Point, _arg2:Point):Boolean{
var _local3:Boolean;
var _local4:int;
var _local5:int;
_local3 = false;
if ((((_arg1 == null)) && ((_arg2 == null)))){
_local3 = true;
} else {
if (((!((_arg1 == null))) && (!((_arg2 == null))))){
_local4 = Math.floor(Math.abs((_arg1.x - _arg2.x)));
_local5 = Math.floor(Math.abs((_arg1.y - _arg2.y)));
_local3 = (((_local4 == 0)) && ((_local5 <= 1)));
};
};
return (_local3);
}
}
}//package
Section 411
//PreloaderClip (PreloaderClip)
package {
import flash.display.*;
import flash.text.*;
public dynamic class PreloaderClip extends MovieClip {
public var progress:TextField;
public var gfree_btn:SimpleButton;
public function PreloaderClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 412
//Progress (Progress)
package {
import logic.*;
import ui.*;
import flash.*;
public class Progress {
protected var zombies:int;
protected var bridges:List;
protected var resources:Array;
protected var brokenBridges:List;
protected var depots:Array;
public function Progress():void{
if (!Boot.skip_constructor){
this.resources = Lib.newResourceArray();
this.zombies = 0;
this.bridges = new List();
this.brokenBridges = new List();
this.depots = new Array();
};
}
public function removeResources(_arg1:Resource, _arg2:int):void{
var _local3:int;
_local3 = Lib.resourceToIndex(_arg1);
this.resources[_local3] = (this.resources[_local3] - _arg2);
Game.update.progress();
}
protected function checkForWin():void{
}
public function addResources(_arg1:Resource, _arg2:int):void{
var _local3:int;
_local3 = Lib.resourceToIndex(_arg1);
this.resources[_local3] = (this.resources[_local3] + _arg2);
Game.update.progress();
}
protected function cleanupBridges():void{
var _local1:*;
var _local2:Bridge;
_local1 = this.bridges.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local2.cleanup();
};
}
public function addBridge(_arg1:Bridge, _arg2:Boolean):void{
if (_arg2){
this.brokenBridges.add(_arg1);
} else {
this.bridges.add(_arg1);
};
Game.update.progress();
}
public function getAllResourceCounts():Array{
return (this.resources);
}
public function removeDepot(_arg1:Point):void{
var _local2:Point;
var _local3:int;
var _local4:Array;
var _local5:Point;
_local2 = null;
_local3 = 0;
_local4 = this.depots;
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
if (Point.isEqual(_arg1, _local5)){
_local2 = _local5;
break;
};
};
if (_local2 != null){
this.depots.remove(_local2);
};
Game.update.progress();
if ((((this.depots.length == 0)) && (!(Game.settings.isEditor())))){
Game.settings.setLoseText(Text.mainLoseText);
Game.endGame(GameOver.LOSE);
};
}
public function getZombieCount():int{
return (this.zombies);
}
public function getBridgeCount():int{
return (this.bridges.length);
}
public function addDepot(_arg1:Point):void{
this.depots.push(_arg1);
Game.update.progress();
}
public function getRandomBridge():Bridge{
var _local1:Bridge;
var _local2:int;
var _local3:*;
var _local4:Bridge;
_local1 = null;
if (this.bridges.length > 0){
_local2 = Lib.rand(this.bridges.length);
_local3 = this.bridges.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
if (_local2 == 0){
_local1 = _local4;
break;
};
_local2--;
};
};
return (_local1);
}
public function destroyBridge(_arg1:Bridge):void{
this.bridges.remove(_arg1);
this.brokenBridges.add(_arg1);
Game.update.progress();
if (this.zombies <= 0){
Game.script.trigger(Script.ZOMBIE_CLEAR);
};
if (this.bridges.length <= 0){
Game.script.trigger(Script.BRIDGE_CLEAR);
};
this.checkForWin();
}
public function cleanup():void{
this.cleanupBridges();
this.cleanupBrokenBridges();
}
public function load(_arg1):void{
var _local2:int;
var _local3:int;
var _local4:int;
_local2 = 0;
_local3 = Option.resourceCount;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
this.resources[_local4] = _arg1.resources[_local4];
};
this.zombies = _arg1.zombies;
this.brokenBridges = Load.loadList(_arg1.brokenBridges, Bridge.load);
this.depots = Load.loadArray(_arg1.depots, Point.load);
}
public function removeZombies(_arg1:int):void{
this.zombies = (this.zombies - _arg1);
Game.update.progress();
if (this.zombies <= 0){
Game.script.trigger(Script.ZOMBIE_CLEAR);
};
if (this.bridges.length <= 0){
Game.script.trigger(Script.BRIDGE_CLEAR);
};
this.checkForWin();
}
public function getResourceCount(_arg1:Resource):int{
var _local2:int;
_local2 = Lib.resourceToIndex(_arg1);
return (this.resources[_local2]);
}
public function addZombies(_arg1:int):void{
this.zombies = (this.zombies + _arg1);
Game.update.progress();
}
protected function cleanupBrokenBridges():void{
var _local1:*;
var _local2:Bridge;
_local1 = this.brokenBridges.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local2.cleanup();
};
}
public function clearBridge(_arg1:Bridge):void{
if (_arg1 != null){
this.bridges.remove(_arg1);
this.brokenBridges.remove(_arg1);
_arg1.cleanup();
Game.update.progress();
};
}
public function getDepotCount():int{
return (this.depots.length);
}
public function getRandomDepot():Point{
var _local1:Point;
var _local2:int;
_local1 = null;
if (this.depots.length > 0){
_local2 = Lib.rand(this.depots.length);
_local1 = this.depots[_local2];
};
return (_local1);
}
public function save(){
return ({resources:this.resources.copy(), zombies:this.zombies, brokenBridges:Save.saveList(this.brokenBridges, Bridge.saveS), depots:Save.saveArray(this.depots, Point.saveS)});
}
}
}//package
Section 413
//Range (Range)
package {
import flash.display.*;
import ui.*;
import flash.*;
public class Range {
protected var color:int;
protected var clip:Shape;
protected var opacity:Number;
protected var changed:Boolean;
protected var squares:Grid;
public function Range(_arg1:DisplayObjectContainer=null, _arg2:int=0, _arg3:Number=NaN):void{
if (!Boot.skip_constructor){
this.clip = new Shape();
_arg1.addChild(this.clip);
this.clip.visible = false;
this.color = _arg2;
this.opacity = _arg3;
this.resize(Game.view.layout);
};
}
public function set(_arg1:int, _arg2:int):void{
var _local3:LayoutGame;
var _local4:Point;
_local3 = Game.view.layout;
this.changed = true;
_local4 = Game.view.window.toRelative(_arg1, _arg2);
if ((((((((_local4.x >= 0)) && ((_local4.x < _local3.windowSize.x)))) && ((_local4.y >= 0)))) && ((_local4.y < _local3.windowSize.y)))){
this.squares.set(_local4.x, _local4.y, (this.squares.get(_local4.x, _local4.y) + 1));
};
}
public function cleanup():void{
this.clip.parent.removeChild(this.clip);
this.clip = null;
this.squares = null;
}
public function draw():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Number;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:int;
this.clip.visible = true;
if (this.changed){
this.changed = false;
this.clip.graphics.clear();
_local1 = 0;
_local2 = this.squares.sizeY();
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = 0;
_local5 = this.squares.sizeX();
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp2;
if (this.squares.get(_local6, _local3) > 0){
_local7 = (this.opacity + ((this.squares.get(_local6, _local3) - 1) * Option.rangeOpacityIncrement));
this.clip.graphics.beginFill(this.color, _local7);
_local8 = Lib.cellToPixel(_local3);
_local9 = Lib.cellToPixel(_local6);
_local10 = (_local8 + Option.cellPixels);
_local11 = (_local9 + Option.cellPixels);
this.clip.graphics.moveTo(_local9, _local8);
this.clip.graphics.lineTo(_local11, _local8);
this.clip.graphics.lineTo(_local11, _local10);
this.clip.graphics.lineTo(_local9, _local10);
this.clip.graphics.lineTo(_local9, _local8);
this.clip.graphics.endFill();
};
};
};
};
}
public function clear():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
this.clip.graphics.clear();
this.clip.visible = false;
_local1 = 0;
_local2 = this.squares.sizeY();
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = 0;
_local5 = this.squares.sizeX();
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local6 = _temp2;
this.squares.set(_local6, _local3, 0);
};
};
this.changed = true;
}
public function resize(_arg1:LayoutGame):void{
this.clip.x = _arg1.mapOffset.x;
this.clip.y = _arg1.mapOffset.y;
this.squares = new Grid(_arg1.windowSize.x, _arg1.windowSize.y);
this.changed = true;
this.clear();
}
}
}//package
Section 414
//Reflect (Reflect)
package {
public class Reflect {
public static function hasField(_arg1, _arg2:String):Boolean{
return (_arg1.hasOwnProperty(_arg2));
}
public static function isFunction(_arg1):Boolean{
return ((typeof(_arg1) == "function"));
}
public static function compare(_arg1, _arg2):int{
return (((_arg1)==_arg2) ? 0 : ((_arg1)>_arg2) ? 1 : -1);
}
public static function compareMethods(_arg1, _arg2):Boolean{
if (_arg1 == _arg2){
return (true);
};
if (((!(isFunction(_arg1))) || (!(isFunction(_arg2))))){
return (false);
};
return (false);
}
public static function deleteField(_arg1, _arg2:String):Boolean{
if (_arg1.hasOwnProperty(_arg2) != true){
return (false);
};
delete _arg1[_arg2];
return (true);
}
public static function isObject(_arg1):Boolean{
var t:String;
var v = _arg1;
if (v == null){
return (false);
};
t = typeof(v);
if (t == "object"){
try {
if (v.__enum__ == true){
return (false);
};
} catch(e) {
};
return (true);
};
return ((t == "string"));
}
public static function copy(_arg1){
var _local2:*;
var _local3:int;
var _local4:Array;
var _local5:String;
_local2 = {};
_local3 = 0;
_local4 = fields(_arg1);
while (_local3 < _local4.length) {
_local5 = _local4[_local3];
_local3++;
setField(_local2, _local5, field(_arg1, _local5));
};
return (_local2);
}
public static function makeVarArgs(_arg1:Function){
var f = _arg1;
return (function (_arg1:Array){
return (f(_arg1));
});
}
public static function setField(_arg1, _arg2:String, _arg3):void{
_arg1[_arg2] = _arg3;
}
public static function fields(_arg1):Array{
var a:Array;
var i:int;
var o = _arg1;
if (o == null){
return (new Array());
};
a = function ():Array{
var _local1:*;
var _local2:*;
_local1 = new Array();
for (_local2 in o) {
_local1.push(_local2);
};
return (_local1);
}();
i = 0;
while (i < a.length) {
if (!o.hasOwnProperty(a[i])){
a.splice(i, 1);
} else {
i = (i + 1);
};
};
return (a);
}
public static function field(_arg1, _arg2:String){
return (((_arg1)==null) ? null : _arg1[_arg2]);
}
public static function callMethod(_arg1, _arg2, _arg3:Array){
return (_arg2.apply(_arg1, _arg3));
}
}
}//package
Section 415
//Replay (Replay)
package {
import flash.display.*;
import flash.events.*;
import logic.*;
import ui.*;
import ui.menu.*;
import flash.*;
public class Replay {
protected var boxClip:Shape;
protected var actions:List;
protected var currentLines:List;
protected var speed:int;
protected var buttons:ButtonList;
protected var pos;
protected var settings:GameSettings;
protected var frame:int;
protected var menu:ReplayMenuClip;
protected var menuState:int;
protected var lineClip:Shape;
protected static var speedAdd:Array = [0, 1, 2, 4, 8, 16];
protected static var startSpeed:int = 2;
protected static var ADD_BEGIN_PLAY:int = 3;
protected static var ADD_BOX:int = 0;
protected static var REMOVE_LINE:int = 2;
protected static var speedSub:int = 8;
protected static var ADD_LINE:int = 1;
public function Replay():void{
if (!Boot.skip_constructor){
this.pos = null;
this.currentLines = new List();
this.frame = 0;
this.lineClip = null;
this.boxClip = null;
this.actions = new List();
this.menuState = MainMenu.START;
this.settings = null;
this.speed = 1;
this.menu = null;
this.buttons = null;
};
}
protected function setSpeed(_arg1:int):void{
var _local2:Number;
if ((((_arg1 >= 0)) && ((_arg1 < speedAdd.length)))){
this.speed = _arg1;
_local2 = (this.speed / (speedAdd.length - 1));
this.menu.speed.bar.width = (_local2 * Option.statusBarSize);
Util.success();
} else {
Util.failure();
};
if (this.speed > 0){
this.buttons.setNormal(this.menu.slow);
} else {
this.buttons.setGhosted(this.menu.slow);
};
if (this.speed < (speedAdd.length - 1)){
this.buttons.setNormal(this.menu.fast);
} else {
this.buttons.setGhosted(this.menu.fast);
};
}
protected function click(_arg1:int):void{
if (_arg1 == 0){
this.setSpeed((this.speed - 1));
} else {
if (_arg1 == 1){
this.setSpeed((this.speed + 1));
} else {
if (_arg1 == 2){
Util.success();
Main.endReplay(this.menuState, this.settings);
};
};
};
}
protected function findLine(_arg1:ReplayStep):ReplayStep{
var _local2:ReplayStep;
var _local3:*;
var _local4:ReplayStep;
_local2 = null;
_local3 = this.currentLines.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
if (((Point.isEqual(_arg1.lower, _local4.lower)) && (Point.isEqual(_arg1.upper, _local4.upper)))){
_local2 = _local4;
break;
};
};
return (_local2);
}
public function setState(_arg1:int):void{
this.menuState = _arg1;
}
public function removeLine(_arg1:Point, _arg2:Point):void{
this.actions.add(new ReplayStep(_arg1, _arg2, 0, REMOVE_LINE));
}
public function addBeginPlay():void{
this.actions.add(new ReplayStep(null, null, 0, ADD_BEGIN_PLAY));
}
protected function drawLine(_arg1:ReplayStep):void{
this.lineClip.graphics.moveTo((_arg1.lower.x + 0.5), (_arg1.lower.y + 0.5));
this.lineClip.graphics.lineTo((_arg1.upper.x + 0.5), (_arg1.upper.y + 0.5));
}
public function start(_arg1:LayoutMain, _arg2:GameSettings):void{
this.settings = _arg2;
this.boxClip = new Shape();
Main.getRoot().addChild(this.boxClip);
this.boxClip.visible = true;
this.lineClip = new Shape();
Main.getRoot().addChild(this.lineClip);
this.lineClip.visible = true;
this.lineClip.graphics.lineStyle(Option.supplyThickness, Option.supplyColor);
this.menu = new ReplayMenuClip();
Main.getRoot().addChild(this.menu);
this.menu.mouseEnabled = false;
this.buttons = new ButtonList(this.click, null, [this.menu.slow, this.menu.fast, this.menu.back]);
this.resize(_arg1);
Main.getRoot().addEventListener(Event.ENTER_FRAME, this.onEnterFrame);
this.pos = this.actions.iterator();
this.currentLines.clear();
this.frame = 0;
this.menu.speed.barText.text = Text.replaySpeedBarLabel;
this.setSpeed(startSpeed);
}
public function cleanup():void{
if (this.boxClip != null){
Main.getRoot().removeEventListener(Event.ENTER_FRAME, this.onEnterFrame);
this.buttons.cleanup();
this.menu.parent.removeChild(this.menu);
this.menu = null;
this.lineClip.parent.removeChild(this.lineClip);
this.lineClip = null;
this.boxClip.parent.removeChild(this.boxClip);
this.boxClip = null;
};
}
public function load(_arg1):void{
this.actions = Load.loadList(_arg1, ReplayStep.load);
}
public function addBox(_arg1:Point, _arg2:Point, _arg3:int):void{
this.actions.add(new ReplayStep(_arg1, _arg2, _arg3, ADD_BOX));
}
protected function resizeClip(_arg1:DisplayObject, _arg2:Number, _arg3:int, _arg4:Number):void{
_arg1.scaleX = _arg4;
_arg1.scaleY = _arg4;
_arg1.x = (_arg3 - _arg2);
}
public function resize(_arg1:LayoutMain):void{
var _local2:Number;
var _local3:Number;
if (((!((this.lineClip == null))) && (!((this.boxClip == null))))){
_local2 = Math.min(_arg1.screenSize.x, _arg1.screenSize.y);
_local3 = Math.min((_arg1.screenSize.x / this.settings.getSize().x), (_arg1.screenSize.y / this.settings.getSize().y));
this.resizeClip(this.lineClip, _local2, _arg1.screenSize.x, _local3);
this.resizeClip(this.boxClip, _local2, _arg1.screenSize.x, _local3);
};
}
public function addLine(_arg1:Point, _arg2:Point):void{
this.actions.add(new ReplayStep(_arg1, _arg2, 0, ADD_LINE));
}
protected function onEnterFrame(_arg1:Event):void{
var _local2:ReplayStep;
var _local3:int;
var _local4:int;
var _local5:ReplayStep;
var _local6:*;
var _local7:ReplayStep;
this.frame = (this.frame + speedAdd[this.speed]);
while (((this.pos.hasNext()) && ((this.frame >= speedSub)))) {
this.frame = (this.frame - speedSub);
_local2 = this.pos.next();
if (_local2.type == ADD_BOX){
this.boxClip.graphics.beginFill(_local2.color);
_local3 = (_local2.upper.x - _local2.lower.x);
_local4 = (_local2.upper.y - _local2.lower.y);
this.boxClip.graphics.drawRect(_local2.lower.x, _local2.lower.y, _local3, _local4);
this.boxClip.graphics.endFill();
} else {
if (_local2.type == ADD_LINE){
this.drawLine(_local2);
this.currentLines.add(_local2);
} else {
if (_local2.type == REMOVE_LINE){
_local5 = this.findLine(_local2);
if (_local5 != null){
this.currentLines.remove(_local5);
this.lineClip.graphics.clear();
this.lineClip.graphics.lineStyle(Option.supplyThickness, Option.supplyColor);
_local6 = this.currentLines.iterator();
while (_local6.hasNext()) {
_local7 = _local6.next();
this.drawLine(_local7);
};
};
};
};
};
};
}
public function save(){
return (Save.saveList(this.actions, ReplayStep.saveS));
}
}
}//package
Section 416
//ReplayStep (ReplayStep)
package {
import flash.*;
public class ReplayStep {
public var lower:Point;
public var color:int;
public var upper:Point;
public var type:int;
public function ReplayStep(_arg1:Point=null, _arg2:Point=null, _arg3:int=0, _arg4:int=0):void{
if (!Boot.skip_constructor){
if (_arg1 != null){
this.lower = _arg1.clone();
} else {
this.lower = null;
};
if (_arg2 != null){
this.upper = _arg2.clone();
} else {
this.upper = null;
};
this.color = _arg3;
this.type = _arg4;
};
}
public function save(){
return ({lower:Save.maybe(this.lower, Point.saveS), upper:Save.maybe(this.upper, Point.saveS), color:this.color, type:this.type});
}
public static function load(_arg1):ReplayStep{
return (new ReplayStep(Load.maybe(_arg1.lower, Point.load), Load.maybe(_arg1.upper, Point.load), _arg1.color, _arg1.type));
}
public static function saveS(_arg1:ReplayStep){
return (_arg1.save());
}
}
}//package
Section 417
//Resource (Resource)
package {
public class Resource extends enum {
public static const __isenum:Boolean = true;
public static var __constructs__:Array = ["AMMO", "BOARDS", "FOOD", "SURVIVORS"];
public static var BOARDS:Resource = new Resource("BOARDS", 1);
;
public static var AMMO:Resource = new Resource("AMMO", 0);
;
public static var SURVIVORS:Resource = new Resource("SURVIVORS", 3);
;
public static var FOOD:Resource = new Resource("FOOD", 2);
;
public function Resource(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
}
}//package
Section 418
//ResourceCount (ResourceCount)
package {
import flash.*;
public class ResourceCount {
public var count:int;
public var resource:Resource;
public function ResourceCount(_arg1:Resource=null, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.resource = _arg1;
this.count = _arg2;
};
}
}
}//package
Section 419
//resourcetiles (resourcetiles)
package {
import flash.display.*;
public dynamic class resourcetiles extends MovieClip {
}
}//package
Section 420
//Route (Route)
package {
import flash.*;
public class Route {
public var source:Point;
public var path:Path;
public var dest:Point;
public function Route(_arg1:Point=null, _arg2:Point=null):void{
if (!Boot.skip_constructor){
this.source = null;
this.dest = null;
this.path = null;
if (_arg1 != null){
this.source = _arg1.clone();
this.dest = _arg2.clone();
this.path = Game.pathPool.getPath(this.source, this.dest);
};
};
}
public function shouldSend():Boolean{
if (((!(this.path.isGenerating())) && (!(this.path.isFound())))){
this.path = Game.pathPool.getPath(this.source, this.dest, PathFinderPool.LOW);
};
return (((!(this.path.isGenerating())) && (this.path.isFound())));
}
public function save(){
return ({source:this.source.save(), dest:this.dest.save(), path:this.path.save()});
}
public static function load(_arg1):Route{
var _local2:Route;
_local2 = new Route(null, null);
_local2.source = Point.load(_arg1.source);
_local2.dest = Point.load(_arg1.dest);
_local2.path = Load.maybe(_arg1.path, Path.load);
if (_local2.path == null){
_local2.path = Game.pathPool.getPath(_local2.source, _local2.dest);
};
return (_local2);
}
public static function saveS(_arg1:Route){
return (_arg1.save());
}
}
}//package
Section 421
//Rubble (Rubble)
package {
import ui.*;
import mapgen.*;
import flash.*;
public class Rubble {
protected var sprite:Sprite;
protected var salvage:Salvage;
protected var x:int;
protected var y:int;
public static var rubbleCount:int = 19;
public function Rubble(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.x = _arg1;
this.y = _arg2;
this.sprite = null;
this.salvage = new Salvage();
};
}
public function cleanup():void{
if (this.sprite != null){
this.sprite.cleanup();
};
}
protected function addSprite(_arg1):void{
var _local2:int;
var _local3:Direction;
if (this.sprite == null){
this.sprite = new Sprite(new Point(this.x, this.y).toPixel(), 0, 0, Animation.rubble);
};
_local2 = 0;
if (_arg1 != null){
_local2 = _arg1;
} else {
_local2 = 1;
if ((((this.salvage.getResourceCount(Resource.AMMO) > 0)) && ((this.salvage.getResourceCount(Resource.BOARDS) > 0)))){
_local2 = 3;
} else {
if (this.salvage.getResourceCount(Resource.AMMO) > 0){
_local2 = 2;
};
};
};
if (_local2 > 3){
_local3 = Lib.indexToDirection(Util.rand(4));
this.sprite.setRotationOffset(Lib.directionToAngle(_local3));
};
this.sprite.setFrame(_local2);
this.sprite.update();
}
public function addResource(_arg1:Resource, _arg2:int, _arg3):void{
this.salvage.addResource(_arg1, _arg2);
this.addSprite(_arg3);
}
public function getSalvage():Salvage{
return (this.salvage);
}
public static function save(_arg1:Rubble){
return ({x:_arg1.x, y:_arg1.y, sprite:Save.maybe(_arg1.sprite, Sprite.saveS), salvage:_arg1.salvage.save()});
}
public static function load(_arg1):Rubble{
var _local2:Rubble;
_local2 = new Rubble(_arg1.x, _arg1.y);
_local2.salvage = Salvage.load(_arg1.salvage);
_local2.sprite = Load.maybe(_arg1.sprite, Sprite.load);
return (_local2);
}
}
}//package
Section 422
//RubbleClip (RubbleClip)
package {
import flash.display.*;
public dynamic class RubbleClip extends MovieClip {
}
}//package
Section 423
//Salvage (Salvage)
package {
import flash.*;
public class Salvage {
protected var resource:Array;
public function Salvage():void{
var _local1:int;
var _local2:int;
var _local3:int;
super();
if (!Boot.skip_constructor){
this.resource = [];
_local1 = 0;
_local2 = Option.resourceCount;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
this.resource.push(0);
};
};
}
public function getResource(_arg1:List):Resource{
var _local2:Resource;
var _local3:Array;
var _local4:int;
_local2 = null;
_local3 = this.pruneNeeds(_arg1);
if ((((this.getTotalCount() > 0)) && ((_local3.length > 0)))){
_local4 = this.randIndex(_local3);
_local2 = Lib.indexToResource(_local4);
var _local5 = this.resource;
var _local6 = _local4;
var _local7 = (_local5[_local6] - 1);
_local5[_local6] = _local7;
};
return (_local2);
}
public function getTotalCount():int{
var _local1:int;
var _local2:int;
var _local3:Array;
var _local4:int;
_local1 = 0;
_local2 = 0;
_local3 = this.resource;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
_local1 = (_local1 + _local4);
};
return (_local1);
}
public function getResourceCount(_arg1:Resource):int{
var _local2:int;
_local2 = Lib.resourceToIndex(_arg1);
return (this.resource[_local2]);
}
protected function randIndex(_arg1:Array):int{
var _local2:int;
var _local3:Array;
var _local4:int;
var _local5:int;
var _local6:Resource;
_local2 = 0;
_local3 = [];
_local4 = 0;
while (_local4 < _arg1.length) {
_local6 = _arg1[_local4];
_local4++;
if (_local6 == Resource.SURVIVORS){
_local3.push((this.resource[Lib.resourceToIndex(_local6)] * Option.truckLoad));
} else {
_local3.push(this.resource[Lib.resourceToIndex(_local6)]);
};
};
_local5 = Lib.randWeightedIndex(_local3);
return (Lib.resourceToIndex(_arg1[_local5]));
}
protected function pruneNeeds(_arg1:List):Array{
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:int;
_local2 = [];
_local3 = 0;
_local4 = this.resource.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
if (this.resource[_local5] > 0){
_local2.push(Lib.indexToResource(_local5));
};
};
return (_local2);
}
public function addResource(_arg1:Resource, _arg2:int):void{
var _local3:int;
_local3 = Lib.resourceToIndex(_arg1);
this.resource[_local3] = (this.resource[_local3] + _arg2);
if (this.resource[_local3] < 0){
this.resource[_local3] = 0;
};
if (Game.settings.isEditor()){
Game.view.window.refresh();
};
}
public function save(){
return (this.resource.copy());
}
public static function load(_arg1):Salvage{
var _local2:Salvage;
var _local3:int;
var _local4:*;
var _local5:int;
_local2 = new (Salvage);
_local3 = 0;
_local4 = _arg1.length;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
_local2.resource[_local5] = _arg1[_local5];
};
return (_local2);
}
}
}//package
Section 424
//Save (Save)
package {
public class Save {
public static function maybe(_arg1, _arg2:Function){
var _local3:*;
_local3 = _arg1;
if (_arg1 != null){
_local3 = _arg2(_arg1);
};
return (_local3);
}
public static function saveInt(_arg1:int){
return (_arg1);
}
public static function saveList(_arg1:List, _arg2:Function){
var _local3:Array;
var _local4:*;
var _local5:*;
var _local6:*;
_local3 = new Array();
_local4 = _arg1.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local6 = _arg2(_local5);
if (_local6 != null){
_local3.push(_local6);
};
};
return (_local3);
}
public static function saveArray(_arg1:Array, _arg2:Function){
var _local3:Array;
var _local4:int;
var _local5:*;
var _local6:*;
_local3 = [];
_local4 = 0;
while (_local4 < _arg1.length) {
_local5 = _arg1[_local4];
_local4++;
_local6 = _arg2(_local5);
if (_local6 != null){
_local3.push(_local6);
};
};
return (_local3);
}
public static function saveGridInt(_arg1:Grid){
return (_arg1.save(Save.saveInt));
}
}
}//package
Section 425
//ScrollArrowDown_disabledSkin (ScrollArrowDown_disabledSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowDown_disabledSkin extends MovieClip {
}
}//package
Section 426
//ScrollArrowDown_downSkin (ScrollArrowDown_downSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowDown_downSkin extends MovieClip {
}
}//package
Section 427
//ScrollArrowDown_overSkin (ScrollArrowDown_overSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowDown_overSkin extends MovieClip {
}
}//package
Section 428
//ScrollArrowDown_upSkin (ScrollArrowDown_upSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowDown_upSkin extends MovieClip {
}
}//package
Section 429
//ScrollArrowUp_disabledSkin (ScrollArrowUp_disabledSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowUp_disabledSkin extends MovieClip {
}
}//package
Section 430
//ScrollArrowUp_downSkin (ScrollArrowUp_downSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowUp_downSkin extends MovieClip {
}
}//package
Section 431
//ScrollArrowUp_overSkin (ScrollArrowUp_overSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowUp_overSkin extends MovieClip {
}
}//package
Section 432
//ScrollArrowUp_upSkin (ScrollArrowUp_upSkin)
package {
import flash.display.*;
public dynamic class ScrollArrowUp_upSkin extends MovieClip {
}
}//package
Section 433
//ScrollBar_thumbIcon (ScrollBar_thumbIcon)
package {
import flash.display.*;
public dynamic class ScrollBar_thumbIcon extends MovieClip {
}
}//package
Section 434
//ScrollThumb_downSkin (ScrollThumb_downSkin)
package {
import flash.display.*;
public dynamic class ScrollThumb_downSkin extends MovieClip {
}
}//package
Section 435
//ScrollThumb_overSkin (ScrollThumb_overSkin)
package {
import flash.display.*;
public dynamic class ScrollThumb_overSkin extends MovieClip {
}
}//package
Section 436
//ScrollThumb_upSkin (ScrollThumb_upSkin)
package {
import flash.display.*;
public dynamic class ScrollThumb_upSkin extends MovieClip {
}
}//package
Section 437
//ScrollTrack_skin (ScrollTrack_skin)
package {
import flash.display.*;
public dynamic class ScrollTrack_skin extends MovieClip {
}
}//package
Section 438
//Select (Select)
package {
import flash.display.*;
import logic.*;
import ui.*;
import flash.*;
public class Select {
protected var range:Range;
protected var select:MovieClip;
protected var selectedCell:Point;
public function Select(_arg1:DisplayObjectContainer=null):void{
if (!Boot.skip_constructor){
this.selectedCell = null;
this.range = new Range(_arg1, Option.rangeColor, Option.rangeOpacity);
this.select = Workaround.attach(Label.select);
_arg1.addChild(this.select);
this.select.visible = false;
this.select.stop();
this.select.mouseEnabled = false;
this.select.mouseChildren = false;
};
}
protected function updateRange(_arg1:int, _arg2:int, _arg3:int):void{
this.range.clear();
if (_arg3 > 0){
Game.map.getCell(_arg1, _arg2).getTower().showVisibility(this.range);
};
this.range.draw();
}
public function cleanup():void{
this.select.parent.removeChild(this.select);
this.select = null;
this.range.cleanup();
this.range = null;
}
protected function updateSelect(_arg1:Point):void{
if ((((((((_arg1.x >= 0)) && ((_arg1.x < Game.view.layout.mapSize.x)))) && ((_arg1.y >= 0)))) && ((_arg1.y < Game.view.layout.mapSize.y)))){
this.select.x = (_arg1.x + Math.floor((Option.cellPixels / 2)));
this.select.y = (_arg1.y + Math.floor((Option.cellPixels / 2)));
this.select.visible = true;
this.select.play();
} else {
this.select.visible = false;
this.select.stop();
};
}
public function update():void{
var _local1:Point;
var _local2:Tower;
if (this.selectedCell != null){
_local1 = Game.view.window.toRelative(this.selectedCell.x, this.selectedCell.y);
_local1.x = (Lib.cellToPixel(_local1.x) + Game.view.layout.mapOffset.x);
_local1.y = (Lib.cellToPixel(_local1.y) + Game.view.layout.mapOffset.y);
_local2 = Game.map.getCell(this.selectedCell.x, this.selectedCell.y).getTower();
this.updateSelect(_local1);
if (_local2 != null){
this.updateRange(this.selectedCell.x, this.selectedCell.y, _local2.getRange());
};
} else {
this.clear();
};
}
public function isSelected():Boolean{
return (!((this.selectedCell == null)));
}
public function clear():void{
this.range.clear();
this.select.visible = false;
this.select.stop();
}
public function changeSelect(_arg1:Point):void{
var _local2:int;
if (_arg1 != null){
this.selectedCell = _arg1.clone();
_local2 = Game.map.getCell(this.selectedCell.x, this.selectedCell.y).getTower().getType();
if (_local2 == Tower.SNIPER){
Game.script.trigger(Script.SELECT_SNIPER, this.selectedCell);
} else {
if (_local2 == Tower.BARRICADE){
Game.script.trigger(Script.SELECT_BARRICADE, this.selectedCell);
} else {
if (_local2 == Tower.DEPOT){
Game.script.trigger(Script.SELECT_DEPOT, this.selectedCell);
} else {
if (_local2 == Tower.WORKSHOP){
Game.script.trigger(Script.SELECT_WORKSHOP, this.selectedCell);
};
};
};
};
} else {
this.selectedCell = null;
Game.script.trigger(Script.SELECT_NOTHING);
};
this.update();
}
public function rangeBlocked(_arg1:int, _arg2:int):Boolean{
var _local3:MapCell;
_local3 = Game.map.getCell(_arg1, _arg2);
return (((_local3.isBlocked()) || (((_local3.hasTower()) && ((_local3.getTower().getType() == Tower.WORKSHOP))))));
}
public function getSelected():Point{
return (this.selectedCell);
}
public function resize(_arg1:LayoutGame):void{
this.range.resize(_arg1);
this.update();
}
public function setRange(_arg1:int, _arg2:int):void{
this.range.set(_arg1, _arg2);
}
}
}//package
Section 439
//SelectClip (SelectClip)
package {
import flash.display.*;
public dynamic class SelectClip extends MovieClip {
}
}//package
Section 440
//ShadowColor (ShadowColor)
package {
public class ShadowColor extends enum {
public static const __isenum:Boolean = true;
public static var NORMAL:ShadowColor = new ShadowColor("NORMAL", 0);
;
public static var ALLOWED:ShadowColor = new ShadowColor("ALLOWED", 1);
;
public static var BUILD_SITE:ShadowColor = new ShadowColor("BUILD_SITE", 3);
;
public static var FORBIDDEN:ShadowColor = new ShadowColor("FORBIDDEN", 2);
;
public static var __constructs__:Array = ["NORMAL", "ALLOWED", "FORBIDDEN", "BUILD_SITE"];
public function ShadowColor(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
}
}//package
Section 441
//Sniper (Sniper)
package {
import ui.*;
import flash.*;
public class Sniper extends Tower implements AbstractFrame {
protected var shooter:SniperSprite;
protected var visibleSquares:Array;
protected var range:int;
protected var idleAngle:int;
protected var idleCount:int;
protected var isShooting:Boolean;
protected var holdFire:Boolean;
protected var shootType:int;
protected static var BOARDS:Resource = Resource.BOARDS;
protected static var FOOD:Resource = Resource.FOOD;
public static var maxSurvivors:int = 11;
protected static var SURVIVORS:Resource = Resource.SURVIVORS;
protected static var AMMO:Resource = Resource.AMMO;
public function Sniper(_arg1:int=0, _arg2:int=0):void{
var _local3:int;
var _local4:int;
var _local5:int;
if (!Boot.skip_constructor){
this.type = Tower.SNIPER;
this.shooter = null;
this.holdFire = false;
this.isShooting = false;
this.idleCount = 0;
this.idleAngle = Lib.rand(360);
this.range = 0;
this.visibleSquares = [];
this.shootType = (SoundPlayer.SNIPER_SHOOT + Lib.rand(SoundPlayer.sniperShootCount));
super(new Point(_arg1, _arg2), Option.sniperLevelLimit, Option.sniperSpeed, Option.sniperCost);
this.addReserve(Lib.ammoLoad);
this.addReserve(Lib.survivorLoad);
_local3 = 0;
_local4 = Option.sniperBuildCost;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
this.addReserve(Lib.boardLoad);
};
this.updateCanShoot();
this.updateBlocked();
};
}
override public function toggleHoldFire():void{
this.holdFire = !(this.holdFire);
this.updateCanShoot();
}
protected function updateShooter():void{
var _local1:int;
if ((((this.shooter == null)) && ((this.countResource(Resource.SURVIVORS) > 0)))){
_local1 = this.getSurvivorType(0);
this.shooter = new SniperSprite(this.mapPos, _local1);
} else {
if (((!((this.shooter == null))) && ((this.countResource(Resource.SURVIVORS) == 0)))){
Game.view.frameAdvance.remove(this);
this.shooter.cleanup();
this.shooter = null;
this.isShooting = false;
};
};
}
protected function addVisibleSquare(_arg1:int, _arg2:int):void{
if (!isBlocked(_arg1, _arg2)){
this.visibleSquares.push(new Point(_arg1, _arg2));
};
}
override public function isHoldingFire():Boolean{
return (this.holdFire);
}
protected function updateCanShoot():void{
this.sprite.changeCanOperate(((this.canWasteShot()) && (!(this.holdFire))));
this.sprite.update();
}
override public function wasteShot():void{
if (this.canWasteShot()){
this.shootSideEffect();
};
}
override public function canWasteShot():Boolean{
return ((((((this.countResource(AMMO) >= Option.shootCost)) && ((this.countResource(SURVIVORS) >= Lib.truckLoad(SURVIVORS))))) && ((this.countResource(BOARDS) >= (Lib.truckLoad(BOARDS) * Option.sniperBuildCost)))));
}
protected function shootSideEffect():void{
Main.sound.play(this.shootType);
Game.map.noise(this.mapPos.x, this.mapPos.y, Option.shootNoise, this.zombieGuide);
this.takeResource(new ResourceCount(AMMO, Option.shootCost));
this.updateCanShoot();
Game.update.resourceChange(this.mapPos);
if (this.shooter != null){
this.shooter.startShooting();
Game.view.frameAdvance.add(this);
this.isShooting = true;
};
}
override public function giveResource(_arg1:ResourceCount):void{
super.giveResource(_arg1);
this.updateShooter();
this.updateCanShoot();
}
public function fixedStep():void{
}
protected function getDistance(_arg1:Point):int{
return (Math.floor((Math.abs((this.mapPos.x - _arg1.x)) + Math.abs((this.mapPos.y - _arg1.y)))));
}
override public function getAccuracy(_arg1:Zombie=null):int{
var _local2:int;
var _local3:int;
var _local4:int;
_local2 = Option.sniperAccuracy[this.level];
_local3 = this.countResource(SURVIVORS);
_local4 = this.countResource(FOOD);
if (_local3 == 0){
_local2 = 0;
} else {
_local2 = (_local2 + ((_local3 - 1) * Option.survivorBonus));
if (_local4 >= Option.foodShootCost){
_local2 = (_local2 + Option.foodBonus);
_local2 = (_local2 + ((_local3 - 1) * Option.survivorFoodBonus));
};
};
if (((!((_arg1 == null))) && (_arg1.isVulnerable()))){
_local2 = (_local2 + Option.vulnerableBonus);
};
if (_local2 > 100){
_local2 = 100;
};
return (_local2);
}
override public function normalizeLevel():void{
super.normalizeLevel();
this.range = Option.sniperRange[this.level];
Game.update.changeRange(this.mapPos);
this.updateVisibility();
}
protected function attemptShot(_arg1:Point, _arg2:Zombie):void{
var _local3:int;
var _local4:int;
if (((this.canWasteShot()) && (!(this.holdFire)))){
_local3 = this.getAccuracy(_arg2);
if (this.countResource(FOOD) >= Option.foodShootCost){
this.takeResource(new ResourceCount(FOOD, Option.foodShootCost));
};
this.shootSideEffect();
_local4 = Lib.rand(Option.accuracyMax);
if (_local4 < _local3){
Game.map.getCell(_arg1.x, _arg1.y).attackZombie(this.mapPos);
};
};
}
override public function getRange():int{
return (this.range);
}
override public function saveTower(){
return ({parent:super.saveTowerGeneric(), shooter:Save.maybe(this.shooter, SniperSprite.saveS), holdFire:this.holdFire, isShooting:this.isShooting, idleCount:this.idleCount, idleAngle:this.idleAngle, shootType:this.shootType});
}
override public function cleanup():void{
if (this.shooter != null){
Game.view.frameAdvance.remove(this);
this.shooter.cleanup();
};
super.cleanup();
}
protected function sortByDistance(_arg1:Point, _arg2:Point):int{
return ((this.getDistance(_arg1) - this.getDistance(_arg2)));
}
protected function findTarget():Point{
var _local1:Point;
var _local2:int;
var _local3:Array;
var _local4:Point;
_local1 = null;
_local2 = 0;
_local3 = this.visibleSquares;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
if (Game.map.getCell(_local4.x, _local4.y).hasZombies()){
_local1 = _local4;
break;
};
};
return (_local1);
}
override public function takeResource(_arg1:ResourceCount):void{
super.takeResource(_arg1);
this.updateShooter();
this.updateCanShoot();
}
override public function getType():int{
return (Tower.SNIPER);
}
override public function updateVisibility():void{
this.visibleSquares = [];
if (this.range > 0){
PermissiveFov.permissiveFov(this.mapPos.x, this.mapPos.y, this.range, Sniper.isBlocked, this.addVisibleSquare);
this.visibleSquares.sort(this.sortByDistance);
};
Game.view.window.updateRanges();
}
override public function step(_arg1:int):void{
var _local2:int;
var _local3:Point;
var _local4:Zombie;
var _local5:Point;
var _local6:Point;
var _local7:int;
var _local8:int;
var _local9:int;
if (this.isShooting){
_local2 = this.shooter.shootStep(_arg1);
if (_local2 < _arg1){
this.isShooting = false;
this.shooter.stopShooting();
Game.view.frameAdvance.remove(this);
};
} else {
if (((!(this.isShooting)) && (!((this.shooter == null))))){
_local3 = this.findTarget();
if (_local3 != null){
_local4 = Game.map.getCell(_local3.x, _local3.y).getZombie();
_local5 = this.mapPos.toPixel();
_local6 = _local4.getPixel();
_local7 = (Lib.getAngle(_local5, _local6) + 90);
_local8 = this.shooter.rotateStep(_arg1, _local7);
if (_local8 == 0){
this.attemptShot(_local3, _local4);
};
} else {
if (this.idleCount == 0){
_local9 = this.shooter.rotateStep(_arg1, this.idleAngle);
if (_local9 == 0){
this.idleCount = (Lib.rand(Option.sniperIdleRange) + Option.sniperIdleMin);
};
} else {
this.sendToDepot(true);
this.idleCount--;
if (this.idleCount == 0){
this.idleAngle = Lib.rand(360);
};
};
};
};
};
Game.map.noise(this.mapPos.x, this.mapPos.y, Option.towerNoise, this.zombieGuide);
}
override public function updateBlocked():void{
var _local1:int;
var _local2:int;
var _local3:Point;
var _local4:int;
var _local5:Array;
var _local6:Point;
var _local7:MapCell;
_local1 = 0;
_local2 = 1;
_local3 = new Point(0, 0);
_local4 = 0;
_local5 = Lib.dirDeltas;
while (_local4 < _local5.length) {
_local6 = _local5[_local4];
_local4++;
_local3.x = (this.mapPos.x + _local6.x);
_local3.y = (this.mapPos.y + _local6.y);
_local7 = Game.map.getCell(_local3.x, _local3.y);
if (((_local7.isBlocked()) || (_local7.hasTower()))){
_local1 = (_local1 + _local2);
};
_local2 = (_local2 * 2);
};
this.sprite.changeUpgrade(_local1);
}
override public function load(_arg1):void{
super.load(_arg1.parent);
this.shooter = Load.maybe(_arg1.shooter, SniperSprite.load);
this.holdFire = _arg1.holdFire;
this.isShooting = _arg1.isShooting;
this.idleCount = _arg1.idleCount;
this.idleAngle = _arg1.idleAngle;
this.shootType = _arg1.shootType;
if (this.isShooting){
Game.view.frameAdvance.add(this);
};
Game.sprites.addSniper(this);
}
override public function showVisibility(_arg1:Range):void{
var _local2:int;
var _local3:Array;
var _local4:Point;
_local2 = 0;
_local3 = this.visibleSquares;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
_arg1.set(_local4.x, _local4.y);
};
}
public static function isBlocked(_arg1:int, _arg2:int):Boolean{
var _local3:Boolean;
var _local4:MapCell;
_local3 = true;
if (!Lib.outsideMap(new Point(_arg1, _arg2))){
_local4 = Game.map.getCell(_arg1, _arg2);
_local3 = ((((_local4.isBlocked()) && (!((_local4.getBackground() == BackgroundType.WATER))))) && (!((_local4.getBackground() == BackgroundType.BRIDGE))));
};
return (_local3);
}
}
}//package
Section 442
//SniperScreen (SniperScreen)
package {
import flash.display.*;
public dynamic class SniperScreen extends MovieClip {
}
}//package
Section 443
//SniperShoot1Sound (SniperShoot1Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class SniperShoot1Sound extends Sound {
public function SniperShoot1Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 444
//SniperShoot2Sound (SniperShoot2Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class SniperShoot2Sound extends Sound {
public function SniperShoot2Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 445
//SniperShoot3Sound (SniperShoot3Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class SniperShoot3Sound extends Sound {
public function SniperShoot3Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 446
//SoundPlayer (SoundPlayer)
package {
import flash.display.*;
import flash.media.*;
import flash.*;
public class SoundPlayer {
protected var sounds:Array;
protected var transform:SoundTransform;
public static var soundCount:int = 25;
public static var ZOMBIE_CROWD_MOAN:int = 19;
public static var TOWER_DESTROY:int = 9;
public static var TOWER_SUPPLY:int = 10;
public static var TOWER_ABANDON:int = 7;
protected static var zombieMoanCount:int = 4;
public static var sniperShootCount:int = 3;
public static var ZOMBIE_MOAN:int = 20;
protected static var zombieBashCount:int = 6;
public static var BUTTON_SUCCESS:int = 2;
public static var ZOMBIE_BASH:int = 12;
public static var TIMER_PIP:int = 6;
public static var TOWER_UPGRADE:int = 11;
public static var BUTTON_FAILED:int = 1;
public static var SNIPER_SHOOT:int = 3;
public static var TOWER_BUILD:int = 8;
public static var ZOMBIE_DEATH:int = 18;
public static var BRIDGE_EXPLOSION:int = 0;
public function SoundPlayer(_arg1:DisplayObjectContainer=null):void{
if (!Boot.skip_constructor){
this.sounds = [];
this.sounds.push(new BridgeExplosionSound());
this.sounds.push(new ButtonFailedSound());
this.sounds.push(new ButtonSuccessSound());
this.sounds.push(new SniperShoot1Sound());
this.sounds.push(new SniperShoot2Sound());
this.sounds.push(new SniperShoot3Sound());
this.sounds.push(new TimerPipSound());
this.sounds.push(new TowerAbandonSound());
this.sounds.push(new TowerBuildSound());
this.sounds.push(new TowerDestroySound());
this.sounds.push(new TowerSupplySound());
this.sounds.push(new TowerUpgradeSound());
this.sounds.push(new ZombieBash1Sound());
this.sounds.push(new ZombieBash2Sound());
this.sounds.push(new ZombieBash3Sound());
this.sounds.push(new ZombieBash4Sound());
this.sounds.push(new ZombieBash5Sound());
this.sounds.push(new ZombieBash6Sound());
this.sounds.push(new ZombieDeathSound());
this.sounds.push(new ZombieMoanCrowdSound());
this.sounds.push(new ZombieMoan1Sound());
this.sounds.push(new ZombieMoan2Sound());
this.sounds.push(new ZombieMoan3Sound());
this.sounds.push(new ZombieMoan4Sound());
this.transform = new SoundTransform();
};
}
public function cleanup():void{
this.sounds = null;
}
public function play(_arg1:int):void{
if ((((_arg1 >= 0)) && ((_arg1 < soundCount)))){
if (_arg1 == ZOMBIE_BASH){
_arg1 = (_arg1 + Lib.rand(zombieBashCount));
} else {
if (_arg1 == ZOMBIE_MOAN){
_arg1 = (_arg1 + Lib.rand(zombieMoanCount));
};
};
this.transform.volume = Main.config.getProportion(Config.SOUND);
this.sounds[_arg1].play(0, 0, this.transform);
};
}
public function setVolume(_arg1:Number):void{
}
}
}//package
Section 447
//SpriteDisplay (SpriteDisplay)
package {
import flash.display.*;
import ui.*;
import flash.*;
public class SpriteDisplay {
protected var snipers:List;
protected var layerClips:Array;
protected var maxFreeClips:Array;
protected var freeSpriteClips:Array;
protected var showingRange:Boolean;
protected var shadowRange:Range;
public static var SNIPER_LAYER:int = 6;
public static var FLOOR_LAYER:int = 2;
public static var EXPLOSION_LAYER:int = 9;
public static var SURVIVOR_LAYER:int = 3;
public static var BRIDGE_LAYER:int = 1;
public static var SMALL_EXPLOSION_LAYER:int = 0;
public static var OVERLAY_LAYER:int = 7;
public static var BODY_LAYER:int = 5;
public static var CREATURE_LAYER:int = 8;
public static var LAYER_COUNT:int = 10;
public static var TOWER_LAYER:int = 4;
public function SpriteDisplay(_arg1:DisplayObjectContainer=null):void{
var _local2:LayoutGame;
var _local3:int;
var _local4:int;
var _local5:int;
super();
if (!Boot.skip_constructor){
this.layerClips = [];
this.maxFreeClips = [];
this.freeSpriteClips = [];
_local2 = Game.view.layout;
_local3 = 0;
_local4 = LAYER_COUNT;
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
this.layerClips.push(new Sprite());
_arg1.addChild(this.layerClips[_local5]);
this.layerClips[_local5].x = _local2.mapOffset.x;
this.layerClips[_local5].y = _local2.mapOffset.y;
this.layerClips[_local5].visible = true;
this.maxFreeClips.push(0);
this.freeSpriteClips.push(new List());
};
this.shadowRange = new Range(_arg1, Option.shadowRangeColor, Option.shadowRangeOpacity);
this.snipers = new List();
this.showingRange = false;
};
}
protected function normalizeLayer(_arg1:int):int{
var _local2:int;
_local2 = _arg1;
if (_local2 < 0){
_local2 = 0;
};
if (_local2 >= LAYER_COUNT){
_local2 = (SpriteDisplay.LAYER_COUNT - 1);
};
return (_local2);
}
public function clearAllVisibility():void{
this.showingRange = false;
this.shadowRange.clear();
}
public function recalculateFov():void{
var _local1:*;
var _local2:Tower;
_local1 = this.snipers.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local2.updateVisibility();
};
if (Game.view.window.isShowingRanges()){
this.showAllVisibility();
Game.select.update();
};
}
public function showAllVisibility():void{
var _local1:*;
var _local2:Tower;
this.showingRange = true;
this.shadowRange.clear();
_local1 = this.snipers.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local2.showVisibility(this.shadowRange);
};
this.shadowRange.draw();
}
public function removeSniper(_arg1:Tower):void{
this.snipers.remove(_arg1);
}
public function getLayer(_arg1:int):DisplayObjectContainer{
return (this.layerClips[_arg1]);
}
public function releaseSpriteClip(_arg1:CenteredImage, _arg2:int):void{
_arg2 = this.normalizeLayer(_arg2);
_arg1.cleanup();
}
public function cleanup():void{
var _local1:int;
var _local2:int;
var _local3:int;
this.shadowRange.cleanup();
_local1 = 0;
_local2 = LAYER_COUNT;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
while (!(this.freeSpriteClips[_local3].isEmpty())) {
this.freeSpriteClips[_local3].first().cleanup();
this.freeSpriteClips[_local3].pop();
};
this.layerClips[_local3].parent.removeChild(this.layerClips[_local3]);
};
this.layerClips = null;
}
public function getSpriteClip(_arg1:int, _arg2:String):CenteredImage{
var _local3:CenteredImage;
_arg1 = this.normalizeLayer(_arg1);
_local3 = new CenteredImage(this.layerClips[_arg1], _arg2);
return (_local3);
}
public function addSniper(_arg1:Tower):void{
this.snipers.add(_arg1);
}
public function resize(_arg1:LayoutGame):void{
this.shadowRange.resize(_arg1);
}
}
}//package
Section 448
//Std (Std)
package {
import flash.*;
public class Std {
public static function _int(_arg1:Number):int{
return (int(_arg1));
}
public static function string(_arg1):String{
return (Boot.__string_rec(_arg1, ""));
}
public static function random(_arg1:int):int{
return (Math.floor((Math.random() * _arg1)));
}
public static function _parseFloat(_arg1:String):Number{
return (parseFloat(_arg1));
}
public static function _is(_arg1, _arg2):Boolean{
return (Boot.__instanceof(_arg1, _arg2));
}
public static function _parseInt(_arg1:String){
var _local2:*;
_local2 = parseInt(_arg1);
if (isNaN(_local2)){
return (null);
};
return (_local2);
}
}
}//package
Section 449
//Storage (Storage)
package {
import flash.utils.*;
import mapgen.*;
import flash.*;
public class Storage {
protected var stock:Array;
protected var incomingList:Array;
protected var reserveList:Array;
public function Storage():void{
if (!Boot.skip_constructor){
this.stock = Lib.newResourceArray();
this.incomingList = Lib.newResourceArray();
this.reserveList = Lib.newResourceArray();
};
}
public function saveEditResources(_arg1:ByteArray):void{
EditLoader.saveResources(this.stock, _arg1);
EditLoader.saveResources(this.reserveList, _arg1);
}
public function incoming(_arg1:Resource):int{
return (countList(_arg1, this.incomingList));
}
public function take(_arg1:ResourceCount):void{
removeList(_arg1, this.stock);
}
public function removeIncoming(_arg1:ResourceCount):void{
removeList(_arg1, this.incomingList);
}
public function load(_arg1):void{
var _local2:int;
var _local3:int;
var _local4:int;
_local2 = 0;
_local3 = Option.resourceCount;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
this.stock[_local4] = _arg1.stock[_local4];
this.incomingList[_local4] = _arg1.incomingList[_local4];
this.reserveList[_local4] = _arg1.reserveList[_local4];
};
}
public function addIncoming(_arg1:ResourceCount):void{
addList(_arg1, this.incomingList);
}
public function count(_arg1:Resource):int{
return (countList(_arg1, this.stock));
}
public function give(_arg1:ResourceCount):void{
addList(_arg1, this.stock);
}
public function removeReserve(_arg1:ResourceCount):void{
removeList(_arg1, this.reserveList);
}
public function addReserve(_arg1:ResourceCount):void{
addList(_arg1, this.reserveList);
}
public function reserve(_arg1:Resource):int{
return (countList(_arg1, this.reserveList));
}
public function save(){
return ({stock:this.stock.copy(), incomingList:this.incomingList.copy(), reserveList:this.reserveList.copy()});
}
protected static function removeList(_arg1:ResourceCount, _arg2:Array):void{
var _local3:int;
_local3 = Lib.resourceToIndex(_arg1.resource);
_arg2[_local3] = (_arg2[_local3] - _arg1.count);
}
protected static function countList(_arg1:Resource, _arg2:Array):int{
var _local3:int;
_local3 = Lib.resourceToIndex(_arg1);
return (_arg2[_local3]);
}
protected static function addList(_arg1:ResourceCount, _arg2:Array):void{
var _local3:int;
_local3 = Lib.resourceToIndex(_arg1.resource);
_arg2[_local3] = (_arg2[_local3] + _arg1.count);
}
}
}//package
Section 450
//StringBuf (StringBuf)
package {
import flash.*;
public class StringBuf {
protected var b:String;
public function StringBuf():void{
if (!Boot.skip_constructor){
this.b = "";
};
}
public function add(_arg1=null):void{
this.b = (this.b + _arg1);
}
public function toString():String{
return (this.b);
}
public function addChar(_arg1:int):void{
this.b = (this.b + String.fromCharCode(_arg1));
}
public function addSub(_arg1:String, _arg2:int, _arg3=null):void{
if (_arg3 == null){
this.b = (this.b + _arg1.substr(_arg2));
} else {
this.b = (this.b + _arg1.substr(_arg2, _arg3));
};
}
}
}//package
Section 451
//StringTools (StringTools)
package {
public class StringTools {
public static function rpad(_arg1:String, _arg2:String, _arg3:int):String{
var _local4:int;
var _local5:int;
_local4 = _arg1.length;
_local5 = _arg2.length;
while (_local4 < _arg3) {
if ((_arg3 - _local4) < _local5){
_arg1 = (_arg1 + _arg2.substr(0, (_arg3 - _local4)));
_local4 = _arg3;
} else {
_arg1 = (_arg1 + _arg2);
_local4 = (_local4 + _local5);
};
};
return (_arg1);
}
public static function htmlUnescape(_arg1:String):String{
return (_arg1.split(">").join(">").split("<").join("<").split("&").join("&"));
}
public static function lpad(_arg1:String, _arg2:String, _arg3:int):String{
var _local4:String;
var _local5:int;
var _local6:int;
_local4 = "";
_local5 = _arg1.length;
if (_local5 >= _arg3){
return (_arg1);
};
_local6 = _arg2.length;
while (_local5 < _arg3) {
if ((_arg3 - _local5) < _local6){
_local4 = (_local4 + _arg2.substr(0, (_arg3 - _local5)));
_local5 = _arg3;
} else {
_local4 = (_local4 + _arg2);
_local5 = (_local5 + _local6);
};
};
return ((_local4 + _arg1));
}
public static function trim(_arg1:String):String{
return (ltrim(rtrim(_arg1)));
}
public static function hex(_arg1:int, _arg2=null):String{
var _local3:Boolean;
var _local4:String;
_local3 = false;
if (_arg1 < 0){
_local3 = true;
_arg1 = -(_arg1);
};
_local4 = _arg1.toString(16);
_local4 = _local4.toUpperCase();
if (_arg2 != null){
while (_local4.length < _arg2) {
_local4 = ("0" + _local4);
};
};
if (_local3){
_local4 = ("-" + _local4);
};
return (_local4);
}
public static function urlEncode(_arg1:String):String{
return (encodeURIComponent(_arg1));
}
public static function ltrim(_arg1:String):String{
var _local2:int;
var _local3:int;
_local2 = _arg1.length;
_local3 = 0;
while ((((_local3 < _local2)) && (isSpace(_arg1, _local3)))) {
_local3++;
};
if (_local3 > 0){
return (_arg1.substr(_local3, (_local2 - _local3)));
};
return (_arg1);
}
public static function htmlEscape(_arg1:String):String{
return (_arg1.split("&").join("&").split("<").join("<").split(">").join(">"));
}
public static function rtrim(_arg1:String):String{
var _local2:int;
var _local3:int;
_local2 = _arg1.length;
_local3 = 0;
while ((((_local3 < _local2)) && (isSpace(_arg1, ((_local2 - _local3) - 1))))) {
_local3++;
};
if (_local3 > 0){
return (_arg1.substr(0, (_local2 - _local3)));
};
return (_arg1);
}
public static function startsWith(_arg1:String, _arg2:String):Boolean{
return ((((_arg1.length >= _arg2.length)) && ((_arg1.substr(0, _arg2.length) == _arg2))));
}
public static function replace(_arg1:String, _arg2:String, _arg3:String):String{
return (_arg1.split(_arg2).join(_arg3));
}
public static function isSpace(_arg1:String, _arg2:int):Boolean{
var _local3:*;
_local3 = _arg1["charCodeAt"](_arg2);
return ((((((_local3 >= 9)) && ((_local3 <= 13)))) || ((_local3 == 32))));
}
public static function urlDecode(_arg1:String):String{
return (decodeURIComponent(_arg1.split("+").join(" ")));
}
public static function endsWith(_arg1:String, _arg2:String):Boolean{
var _local3:int;
var _local4:int;
_local3 = _arg2.length;
_local4 = _arg1.length;
return ((((_local4 >= _local3)) && ((_arg1.substr((_local4 - _local3), _local3) == _arg2))));
}
}
}//package
Section 452
//Survivor_0_1 (Survivor_0_1)
package {
import flash.display.*;
public dynamic class Survivor_0_1 extends MovieClip {
}
}//package
Section 453
//Survivor_0_10 (Survivor_0_10)
package {
import flash.display.*;
public dynamic class Survivor_0_10 extends MovieClip {
}
}//package
Section 454
//Survivor_0_11 (Survivor_0_11)
package {
import flash.display.*;
public dynamic class Survivor_0_11 extends MovieClip {
}
}//package
Section 455
//Survivor_0_12 (Survivor_0_12)
package {
import flash.display.*;
public dynamic class Survivor_0_12 extends MovieClip {
}
}//package
Section 456
//Survivor_0_13 (Survivor_0_13)
package {
import flash.display.*;
public dynamic class Survivor_0_13 extends MovieClip {
}
}//package
Section 457
//Survivor_0_14 (Survivor_0_14)
package {
import flash.display.*;
public dynamic class Survivor_0_14 extends MovieClip {
}
}//package
Section 458
//Survivor_0_15 (Survivor_0_15)
package {
import flash.display.*;
public dynamic class Survivor_0_15 extends MovieClip {
}
}//package
Section 459
//Survivor_0_16 (Survivor_0_16)
package {
import flash.display.*;
public dynamic class Survivor_0_16 extends MovieClip {
}
}//package
Section 460
//Survivor_0_17 (Survivor_0_17)
package {
import flash.display.*;
public dynamic class Survivor_0_17 extends MovieClip {
}
}//package
Section 461
//Survivor_0_18 (Survivor_0_18)
package {
import flash.display.*;
public dynamic class Survivor_0_18 extends MovieClip {
}
}//package
Section 462
//Survivor_0_19 (Survivor_0_19)
package {
import flash.display.*;
public dynamic class Survivor_0_19 extends MovieClip {
}
}//package
Section 463
//Survivor_0_2 (Survivor_0_2)
package {
import flash.display.*;
public dynamic class Survivor_0_2 extends MovieClip {
}
}//package
Section 464
//Survivor_0_20 (Survivor_0_20)
package {
import flash.display.*;
public dynamic class Survivor_0_20 extends MovieClip {
}
}//package
Section 465
//Survivor_0_3 (Survivor_0_3)
package {
import flash.display.*;
public dynamic class Survivor_0_3 extends MovieClip {
}
}//package
Section 466
//Survivor_0_4 (Survivor_0_4)
package {
import flash.display.*;
public dynamic class Survivor_0_4 extends MovieClip {
}
}//package
Section 467
//Survivor_0_5 (Survivor_0_5)
package {
import flash.display.*;
public dynamic class Survivor_0_5 extends MovieClip {
}
}//package
Section 468
//Survivor_0_6 (Survivor_0_6)
package {
import flash.display.*;
public dynamic class Survivor_0_6 extends MovieClip {
}
}//package
Section 469
//Survivor_0_7 (Survivor_0_7)
package {
import flash.display.*;
public dynamic class Survivor_0_7 extends MovieClip {
}
}//package
Section 470
//Survivor_0_8 (Survivor_0_8)
package {
import flash.display.*;
public dynamic class Survivor_0_8 extends MovieClip {
}
}//package
Section 471
//Survivor_0_9 (Survivor_0_9)
package {
import flash.display.*;
public dynamic class Survivor_0_9 extends MovieClip {
}
}//package
Section 472
//Survivor_1_1 (Survivor_1_1)
package {
import flash.display.*;
public dynamic class Survivor_1_1 extends MovieClip {
}
}//package
Section 473
//Survivor_1_10 (Survivor_1_10)
package {
import flash.display.*;
public dynamic class Survivor_1_10 extends MovieClip {
}
}//package
Section 474
//Survivor_1_11 (Survivor_1_11)
package {
import flash.display.*;
public dynamic class Survivor_1_11 extends MovieClip {
}
}//package
Section 475
//Survivor_1_12 (Survivor_1_12)
package {
import flash.display.*;
public dynamic class Survivor_1_12 extends MovieClip {
}
}//package
Section 476
//Survivor_1_13 (Survivor_1_13)
package {
import flash.display.*;
public dynamic class Survivor_1_13 extends MovieClip {
}
}//package
Section 477
//Survivor_1_14 (Survivor_1_14)
package {
import flash.display.*;
public dynamic class Survivor_1_14 extends MovieClip {
}
}//package
Section 478
//Survivor_1_15 (Survivor_1_15)
package {
import flash.display.*;
public dynamic class Survivor_1_15 extends MovieClip {
}
}//package
Section 479
//Survivor_1_16 (Survivor_1_16)
package {
import flash.display.*;
public dynamic class Survivor_1_16 extends MovieClip {
}
}//package
Section 480
//Survivor_1_17 (Survivor_1_17)
package {
import flash.display.*;
public dynamic class Survivor_1_17 extends MovieClip {
}
}//package
Section 481
//Survivor_1_18 (Survivor_1_18)
package {
import flash.display.*;
public dynamic class Survivor_1_18 extends MovieClip {
}
}//package
Section 482
//Survivor_1_19 (Survivor_1_19)
package {
import flash.display.*;
public dynamic class Survivor_1_19 extends MovieClip {
}
}//package
Section 483
//Survivor_1_2 (Survivor_1_2)
package {
import flash.display.*;
public dynamic class Survivor_1_2 extends MovieClip {
}
}//package
Section 484
//Survivor_1_20 (Survivor_1_20)
package {
import flash.display.*;
public dynamic class Survivor_1_20 extends MovieClip {
}
}//package
Section 485
//Survivor_1_3 (Survivor_1_3)
package {
import flash.display.*;
public dynamic class Survivor_1_3 extends MovieClip {
}
}//package
Section 486
//Survivor_1_4 (Survivor_1_4)
package {
import flash.display.*;
public dynamic class Survivor_1_4 extends MovieClip {
}
}//package
Section 487
//Survivor_1_5 (Survivor_1_5)
package {
import flash.display.*;
public dynamic class Survivor_1_5 extends MovieClip {
}
}//package
Section 488
//Survivor_1_6 (Survivor_1_6)
package {
import flash.display.*;
public dynamic class Survivor_1_6 extends MovieClip {
}
}//package
Section 489
//Survivor_1_7 (Survivor_1_7)
package {
import flash.display.*;
public dynamic class Survivor_1_7 extends MovieClip {
}
}//package
Section 490
//Survivor_1_8 (Survivor_1_8)
package {
import flash.display.*;
public dynamic class Survivor_1_8 extends MovieClip {
}
}//package
Section 491
//Survivor_1_9 (Survivor_1_9)
package {
import flash.display.*;
public dynamic class Survivor_1_9 extends MovieClip {
}
}//package
Section 492
//Survivor_2_1 (Survivor_2_1)
package {
import flash.display.*;
public dynamic class Survivor_2_1 extends MovieClip {
}
}//package
Section 493
//Survivor_2_10 (Survivor_2_10)
package {
import flash.display.*;
public dynamic class Survivor_2_10 extends MovieClip {
}
}//package
Section 494
//Survivor_2_11 (Survivor_2_11)
package {
import flash.display.*;
public dynamic class Survivor_2_11 extends MovieClip {
}
}//package
Section 495
//Survivor_2_12 (Survivor_2_12)
package {
import flash.display.*;
public dynamic class Survivor_2_12 extends MovieClip {
}
}//package
Section 496
//Survivor_2_13 (Survivor_2_13)
package {
import flash.display.*;
public dynamic class Survivor_2_13 extends MovieClip {
}
}//package
Section 497
//Survivor_2_14 (Survivor_2_14)
package {
import flash.display.*;
public dynamic class Survivor_2_14 extends MovieClip {
}
}//package
Section 498
//Survivor_2_15 (Survivor_2_15)
package {
import flash.display.*;
public dynamic class Survivor_2_15 extends MovieClip {
}
}//package
Section 499
//Survivor_2_16 (Survivor_2_16)
package {
import flash.display.*;
public dynamic class Survivor_2_16 extends MovieClip {
}
}//package
Section 500
//Survivor_2_17 (Survivor_2_17)
package {
import flash.display.*;
public dynamic class Survivor_2_17 extends MovieClip {
}
}//package
Section 501
//Survivor_2_18 (Survivor_2_18)
package {
import flash.display.*;
public dynamic class Survivor_2_18 extends MovieClip {
}
}//package
Section 502
//Survivor_2_19 (Survivor_2_19)
package {
import flash.display.*;
public dynamic class Survivor_2_19 extends MovieClip {
}
}//package
Section 503
//Survivor_2_2 (Survivor_2_2)
package {
import flash.display.*;
public dynamic class Survivor_2_2 extends MovieClip {
}
}//package
Section 504
//Survivor_2_20 (Survivor_2_20)
package {
import flash.display.*;
public dynamic class Survivor_2_20 extends MovieClip {
}
}//package
Section 505
//Survivor_2_3 (Survivor_2_3)
package {
import flash.display.*;
public dynamic class Survivor_2_3 extends MovieClip {
}
}//package
Section 506
//Survivor_2_4 (Survivor_2_4)
package {
import flash.display.*;
public dynamic class Survivor_2_4 extends MovieClip {
}
}//package
Section 507
//Survivor_2_5 (Survivor_2_5)
package {
import flash.display.*;
public dynamic class Survivor_2_5 extends MovieClip {
}
}//package
Section 508
//Survivor_2_6 (Survivor_2_6)
package {
import flash.display.*;
public dynamic class Survivor_2_6 extends MovieClip {
}
}//package
Section 509
//Survivor_2_7 (Survivor_2_7)
package {
import flash.display.*;
public dynamic class Survivor_2_7 extends MovieClip {
}
}//package
Section 510
//Survivor_2_8 (Survivor_2_8)
package {
import flash.display.*;
public dynamic class Survivor_2_8 extends MovieClip {
}
}//package
Section 511
//Survivor_2_9 (Survivor_2_9)
package {
import flash.display.*;
public dynamic class Survivor_2_9 extends MovieClip {
}
}//package
Section 512
//Survivor_3_1 (Survivor_3_1)
package {
import flash.display.*;
public dynamic class Survivor_3_1 extends MovieClip {
}
}//package
Section 513
//Survivor_3_10 (Survivor_3_10)
package {
import flash.display.*;
public dynamic class Survivor_3_10 extends MovieClip {
}
}//package
Section 514
//Survivor_3_11 (Survivor_3_11)
package {
import flash.display.*;
public dynamic class Survivor_3_11 extends MovieClip {
}
}//package
Section 515
//Survivor_3_12 (Survivor_3_12)
package {
import flash.display.*;
public dynamic class Survivor_3_12 extends MovieClip {
}
}//package
Section 516
//Survivor_3_13 (Survivor_3_13)
package {
import flash.display.*;
public dynamic class Survivor_3_13 extends MovieClip {
}
}//package
Section 517
//Survivor_3_14 (Survivor_3_14)
package {
import flash.display.*;
public dynamic class Survivor_3_14 extends MovieClip {
}
}//package
Section 518
//Survivor_3_15 (Survivor_3_15)
package {
import flash.display.*;
public dynamic class Survivor_3_15 extends MovieClip {
}
}//package
Section 519
//Survivor_3_16 (Survivor_3_16)
package {
import flash.display.*;
public dynamic class Survivor_3_16 extends MovieClip {
}
}//package
Section 520
//Survivor_3_17 (Survivor_3_17)
package {
import flash.display.*;
public dynamic class Survivor_3_17 extends MovieClip {
}
}//package
Section 521
//Survivor_3_18 (Survivor_3_18)
package {
import flash.display.*;
public dynamic class Survivor_3_18 extends MovieClip {
}
}//package
Section 522
//Survivor_3_19 (Survivor_3_19)
package {
import flash.display.*;
public dynamic class Survivor_3_19 extends MovieClip {
}
}//package
Section 523
//Survivor_3_2 (Survivor_3_2)
package {
import flash.display.*;
public dynamic class Survivor_3_2 extends MovieClip {
}
}//package
Section 524
//Survivor_3_20 (Survivor_3_20)
package {
import flash.display.*;
public dynamic class Survivor_3_20 extends MovieClip {
}
}//package
Section 525
//Survivor_3_3 (Survivor_3_3)
package {
import flash.display.*;
public dynamic class Survivor_3_3 extends MovieClip {
}
}//package
Section 526
//Survivor_3_4 (Survivor_3_4)
package {
import flash.display.*;
public dynamic class Survivor_3_4 extends MovieClip {
}
}//package
Section 527
//Survivor_3_5 (Survivor_3_5)
package {
import flash.display.*;
public dynamic class Survivor_3_5 extends MovieClip {
}
}//package
Section 528
//Survivor_3_6 (Survivor_3_6)
package {
import flash.display.*;
public dynamic class Survivor_3_6 extends MovieClip {
}
}//package
Section 529
//Survivor_3_7 (Survivor_3_7)
package {
import flash.display.*;
public dynamic class Survivor_3_7 extends MovieClip {
}
}//package
Section 530
//Survivor_3_8 (Survivor_3_8)
package {
import flash.display.*;
public dynamic class Survivor_3_8 extends MovieClip {
}
}//package
Section 531
//Survivor_3_9 (Survivor_3_9)
package {
import flash.display.*;
public dynamic class Survivor_3_9 extends MovieClip {
}
}//package
Section 532
//TextInput_disabledSkin (TextInput_disabledSkin)
package {
import flash.display.*;
public dynamic class TextInput_disabledSkin extends MovieClip {
}
}//package
Section 533
//TextInput_upSkin (TextInput_upSkin)
package {
import flash.display.*;
public dynamic class TextInput_upSkin extends MovieClip {
}
}//package
Section 534
//Tile (Tile)
package {
public class Tile {
public static var fadeSouthAlleyEast:int = 116;
public static var nwCornerFadeNorth:int = 133;
public static var alley:int = 0;
public static var alleyHorizontal:Array = [17, 18, 19];
public static var multiLaneA:int = 3;
public static var multiLaneB:int = 4;
public static var multiLaneC:int = 5;
public static var multiLaneD:int = 6;
public static var multiLaneE:int = 7;
public static var multiLaneF:int = 8;
public static var multiLaneG:int = 9;
public static var fadeEastWalkNorth:int = 99;
public static var fadeNorthWalkWest:int = 73;
public static var eBeachToDark:int = 85;
public static var nePark:int = 68;
public static var nShallowShore:int = 188;
public static var X_COUNT:int = 20;
public static var sBeachDark:int = 163;
public static var fadeEastAlleySouth:int = 159;
public static var neCornerFadeNorth:int = 134;
public static var fadeFromNorth:int = 178;
public static var nBridgeGreater:int = 187;
public static var eShallows:int = 148;
public static var verticalFactor:int = 1;
public static var seBeach:int = 165;
public static var NO_TILE:int = -1;
public static var eBeachFromDark:int = 125;
public static var fadeNorthWalkEast:int = 74;
public static var sShallows:int = 167;
public static var swPark:int = 106;
public static var wShallows:int = 146;
public static var edgeRoof:Array = [[1021, 0x0400, 1025, 1026, 1027, 1029, 1043, 1047, 1048, 1049, 1050, 1051, 1060, 1061, 1080, 1081], [1023, 0x0400, 1025, 1026, 1027, 1031, 1041, 1045, 1048, 1049, 1050, 1051, 1060, 1061, 1080, 1081], [1022, 0x0400, 1025, 1026, 1027, 1030, 1040, 1044, 1048, 1049, 1050, 1051, 1060, 1061, 1080, 1081], [1020, 0x0400, 1025, 1026, 1027, 0x0404, 1042, 1046, 1048, 1049, 1050, 1051, 1060, 1061, 1080, 1081]];
public static var twoLaneLeft:int = 1;
public static var seCornerFadeBoth:int = 219;
public static var sBridgeGreater:int = 207;
public static var nBeachToDark:int = 61;
public static var BEGIN:int = 0;
public static var OBSTACLE_START:int = 0;
public static var horizontalFactor:int = 20;
public static var eBeachDark:int = 105;
public static var trees:Array = [440, 441, 445, 446, 580, 581, 585, 586];
public static var wBridgeLess:int = 293;
public static var fadeWestAlleyNorth:int = 137;
public static var twoLaneRight:int = 2;
public static var nwCurve:int = 81;
public static var alleyVertical:Array = [13, 33, 53];
public static var sBeach:int = 161;
public static var fadeWestWalkNorth:int = 97;
public static var nBeachDark:int = 62;
public static var roadVertical:Array = [0, 20, 40];
public static var alleySouth:int = 158;
public static var END:int = 2;
public static var walkNorth:int = 98;
public static var wBeachDark:int = 120;
public static var lakes:Array = [69, 89, 109, 129];
public static var alleyCrossTwoLeft:int = 0;
public static var wShallowShore:int = 175;
public static var sShallowShore:int = 208;
public static var swCornerFadeSouth:int = 153;
public static var eBrokenBridge:int = 174;
public static var wBeachToDark:int = 100;
public static var cornerRoof:Array = [0x0400, 1025, 1026, 1027, 1048, 1049, 1050, 1051, 1060, 1061, 1080, 1081];
public static var fadeSouthWalkWest:int = 113;
public static var swCurve:int = 121;
public static var nBeachFromDark:int = 63;
public static var fadeEastWalkSouth:int = 119;
public static var sPark:int = 107;
public static var seCornerFadeEast:int = 156;
public static var wPark:int = 86;
public static var centerRoof:Array = [1020, 1021, 1022, 1023, 0x0400, 1025, 1026, 1027, 0x0404, 1029, 1030, 1031, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1060, 1061, 1080, 1081];
public static var eBridgeLess:int = 294;
public static var wBridgeGreater:int = 313;
public static var sBeachFromDark:int = 164;
public static var fadeFromWest:int = 197;
public static var swCornerFadeBoth:int = 217;
public static var walkWest:int = 93;
public static var nwBeach:int = 60;
public static var centerRoad:int = 198;
public static var fadeFromSouth:int = 218;
public static var neCornerFadeBoth:int = 179;
public static var wBeach:int = 80;
public static var seCornerFadeSouth:int = 154;
public static var fadeSouthWalkEast:int = 114;
public static var OBSTACLE_LAKE:int = 2;
public static var swCornerFadeWest:int = 155;
public static var seShallows:int = 168;
public static var nwPark:int = 66;
public static var nBrokenBridge:int = 180;
public static var sePark:int = 108;
public static var swBeach:int = 160;
public static var sBeachToDark:int = 162;
public static var fadeFromEast:int = 199;
public static var roadHorizontal:Array = [10, 11, 12];
public static var walkEast:int = 94;
public static var fadeEastAlleyNorth:int = 139;
public static var fadeWestAlleySouth:int = 157;
public static var alleyWest:int = 95;
public static var swShallows:int = 166;
public static var nShallows:int = 127;
public static var neCurve:int = 83;
public static var fadeWestWalkSouth:int = 117;
public static var fadeNorthAlleyWest:int = 75;
public static var alleyCrossTwoRight:int = 1;
public static var walkSouth:int = 118;
public static var nPark:int = 67;
public static var Y_COUNT:int = 65;
public static var wBeachFromDark:int = 140;
public static var MIDDLE:int = 1;
public static var deepWater:int = 147;
public static var nBeach:int = 64;
public static var sBridgeLess:int = 206;
public static var neCornerFadeEast:int = 136;
public static var rocks:Array = [149, 169, 189, 209];
public static var alleyEast:int = 96;
public static var fadeSouthAlleyWest:int = 115;
public static var neShallows:int = 128;
public static var nwCornerFadeBoth:int = 177;
public static var seCurve:int = 123;
public static var parkTiles:Array = [nwPark, nPark, nePark, wPark, centerPark, ePark, swPark, sPark, sePark];
public static var obstacles:Array = [trees, rocks, lakes];
public static var eShallowShore:int = 176;
public static var nwShallows:int = 126;
public static var fadeNorthAlleyEast:int = 76;
public static var eBridgeGreater:int = 314;
public static var nBridgeLess:int = 186;
public static var sBrokenBridge:int = 200;
public static var wBrokenBridge:int = 173;
public static var centerPark:int = 87;
public static var nwCornerFadeWest:int = 135;
public static var neBeach:int = 65;
public static var alleyCrossMultiRight:int = 3;
public static var ePark:int = 88;
public static var alleyNorth:int = 138;
public static var alleyCrossMultiLeft:int = 2;
public static var EDGE:int = 1066;
public static var eBeach:int = 145;
}
}//package
Section 535
//TimerPipSound (TimerPipSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class TimerPipSound extends Sound {
public function TimerPipSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 536
//TimerScreen (TimerScreen)
package {
import flash.display.*;
public dynamic class TimerScreen extends MovieClip {
}
}//package
Section 537
//Tower (Tower)
package {
import logic.*;
import flash.utils.*;
import ui.*;
import flash.*;
public class Tower extends Actor {
protected var committedUpgrade:int;
protected var survivors:Array;
protected var type:int;
protected var upgradeCostTable:Array;
protected var mapPos:Point;
protected var zombieGuide:PathFinder;
protected var level:int;
protected var levelLimit:int;
protected var links:List;
protected var speedTable:Array;
protected var sprite:TowerSprite;
protected var incomingSurvivors:Array;
protected var reservedUpgrade:int;
protected var stuff:Storage;
public static var WORKSHOP:int = 3;
public static var BARRICADE:int = 0;
public static var DEPOT:int = 2;
public static var SNIPER:int = 1;
public function Tower(_arg1:Point=null, _arg2:int=0, _arg3:Array=null, _arg4:Array=null):void{
if (!Boot.skip_constructor){
super(_arg3[0]);
this.mapPos = _arg1.clone();
this.sprite = new TowerSprite(this.mapPos, this.type, 0);
this.stuff = new Storage();
this.survivors = [];
this.incomingSurvivors = [];
this.level = 0;
this.reservedUpgrade = 0;
this.committedUpgrade = 0;
this.links = new List();
this.zombieGuide = Game.pathPool.getZombiePath(this.mapPos);
this.levelLimit = _arg2;
this.speedTable = _arg3;
this.upgradeCostTable = _arg4;
this.normalizeLevel();
};
}
public function toggleHoldFire():void{
}
public function giveBuildResource(_arg1:int):void{
var _local2:int;
_local2 = (getBuildCost(_arg1) * Lib.truckLoad(Resource.BOARDS));
this.giveResource(new ResourceCount(Resource.BOARDS, _local2));
this.giveResource(Lib.survivorLoad);
}
public function getUpgradeLeft():int{
return ((this.getUpgradeCost() - this.committedUpgrade));
}
public function freeUpgrade():void{
if (this.reservedUpgrade > 0){
this.reservedUpgrade--;
};
}
protected function createSupplyTruck(_arg1:Point, _arg2:ResourceCount, _arg3:Route):void{
var _local4:int;
var _local5:Truck;
_local4 = Math.floor(Math.min(_arg2.count, Lib.truckLoad(_arg2.resource)));
_local5 = Truck.createSupplyTruck(this.mapPos, _arg1, _arg2.resource, _local4, _arg3);
}
public function isHoldingFire():Boolean{
return (false);
}
public function upgrade():void{
if (this.canUpgrade()){
this.committedUpgrade++;
if (this.committedUpgrade >= this.upgradeCostTable[(this.level + 1)]){
Main.sound.play(SoundPlayer.TOWER_UPGRADE);
this.upgradeLevel();
};
Game.update.changeStatus();
};
}
public function getTruckSpeed():int{
return ((Option.truckSpeedMin + Lib.rand(Option.truckSpeedRange)));
}
public function hasBuildResource(_arg1:int):Boolean{
var _local2:int;
_local2 = (getBuildCost(_arg1) * Lib.truckLoad(Resource.BOARDS));
return (((this.hasResource(new ResourceCount(Resource.BOARDS, _local2))) && (this.hasResource(Lib.survivorLoad))));
}
public function startUpgradeTruck():Boolean{
var _local1:Boolean;
var _local2:Point;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Truck;
var _local10:Tower;
var _local11:Route;
_local1 = false;
_local2 = this.getUpgradeSupplier();
if (((((((!((_local2 == null))) && (Point.isEqual(_local2, this.mapPos)))) && (this.canUpgrade()))) && (!(this.isUpgrading())))){
_local3 = 0;
_local4 = this.getUpgradeCost();
while (_local3 < _local4) {
var _temp1 = _local3;
_local3 = (_local3 + 1);
_local5 = _temp1;
this.takeResource(Lib.boardLoad);
this.upgrade();
};
_local1 = true;
} else {
if (((((this.canUpgrade()) && (!(this.isUpgrading())))) && (!((_local2 == null))))){
_local6 = 0;
_local7 = this.getUpgradeCost();
while (_local6 < _local7) {
var _temp2 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp2;
_local9 = null;
if (this.getType() == WORKSHOP){
_local9 = Truck.createWorkshopUpgradeTruck(new Point(_local2.x, _local2.y), this.mapPos);
} else {
_local10 = Game.map.getCell(_local2.x, _local2.y).getTower();
_local11 = _local10.getRoute(this.mapPos);
_local9 = Truck.createUpgradeTruck(_local11);
};
};
_local1 = true;
};
};
return (_local1);
}
public function giveSurvivor(_arg1:int):void{
this.survivors.push(_arg1);
this.giveResource(Lib.survivorLoad);
}
public function removeAllResources():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:Resource;
var _local5:int;
_local1 = 0;
_local2 = Option.resourceCount;
while (_local1 < _local2) {
var _temp1 = _local1;
_local1 = (_local1 + 1);
_local3 = _temp1;
_local4 = Lib.indexToResource(_local3);
_local5 = this.stuff.count(_local4);
Game.progress.removeResources(_local4, _local5);
_local5 = this.stuff.incoming(_local4);
Game.progress.removeResources(_local4, _local5);
_local5 = this.stuff.reserve(_local4);
Game.progress.addResources(_local4, _local5);
};
}
public function canUpgrade():Boolean{
return ((this.level < this.levelLimit));
}
public function wasteShot():void{
}
public function removeTarget():void{
this.sprite.changeSupplyTarget(false);
this.sprite.update();
}
public function countSand(_arg1:Resource):int{
return (0);
}
public function giveResource(_arg1:ResourceCount):void{
this.stuff.give(_arg1);
this.updateLow(_arg1.resource);
Game.progress.addResources(_arg1.resource, _arg1.count);
Game.update.resourceChange(this.mapPos);
}
public function getZombieGuide():PathFinder{
return (this.zombieGuide);
}
public function buildGarden():void{
}
public function countResource(_arg1:Resource):int{
return (this.stuff.count(_arg1));
}
public function getInfrastructureBoards():int{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
_local1 = 0;
_local2 = 0;
_local3 = (this.level + 1);
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local1 = (_local1 + this.upgradeCostTable[_local4]);
};
return (_local1);
}
public function attack():Boolean{
Main.sound.play(SoundPlayer.TOWER_DESTROY);
return (true);
}
public function canWasteShot():Boolean{
return (false);
}
public function getMapPos():Point{
return (this.mapPos.clone());
}
public function reserveBuildResource(_arg1:int):void{
}
public function shouldUseFood():Boolean{
return (false);
}
public function canBuildGarden():Boolean{
return (false);
}
public function countIncoming(_arg1:Resource):int{
return (this.stuff.incoming(_arg1));
}
public function addTradeTargets():void{
var _local1:*;
var _local2:Route;
var _local3:Tower;
_local1 = this.links.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local3 = Game.map.getCell(_local2.dest.x, _local2.dest.y).getTower();
_local3.sprite.changeSupplyTarget(true);
_local3.sprite.update();
};
}
public function removeTradeLink(_arg1:Point):void{
var _local2:Tower;
Main.replay.removeLine(this.mapPos, _arg1);
Main.replay.removeLine(_arg1, this.mapPos);
this.removeHalfLink(_arg1);
this.sprite.changeSupplyTarget(false);
_local2 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
if (_local2 != null){
_local2.removeHalfLink(this.mapPos);
_local2.sprite.changeSupplyTarget(false);
};
Game.update.supplyLine(this.mapPos, _arg1);
}
public function takeBuildResource(_arg1:int):void{
var _local2:int;
_local2 = (getBuildCost(_arg1) * Lib.truckLoad(Resource.BOARDS));
this.takeResource(new ResourceCount(Resource.BOARDS, _local2));
this.takeResource(Lib.survivorLoad);
}
protected function getWeight(_arg1:ResourceCount):int{
if (_arg1.resource == Resource.SURVIVORS){
return ((_arg1.count * Option.truckLoad));
};
return (_arg1.count);
}
public function getAccuracy(_arg1:Zombie=null):int{
return (0);
}
public function usesSand():Boolean{
return (false);
}
protected function removeHalfLink(_arg1:Point):void{
var _local2:Route;
_local2 = this.getRoute(_arg1);
if (_local2 != null){
this.links.remove(_local2);
};
}
public function normalizeLevel():void{
this.speed = this.speedTable[this.level];
}
public function getOverflow():List{
var _local1:List;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:Resource;
var _local6:int;
_local1 = new List();
_local2 = 0;
_local3 = Option.resourceCount;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local5 = Lib.indexToResource(_local4);
_local6 = ((this.stuff.count(_local5) + this.stuff.incoming(_local5)) - this.stuff.reserve(_local5));
if (_local6 >= 0){
_local1.add(new ResourceCount(_local5, _local6));
};
};
return (_local1);
}
public function downgrade():void{
if (this.canDowngrade()){
this.level = (this.level - 1);
this.normalizeLevel();
Game.update.changeStatus();
};
}
public function canDowngrade():Boolean{
return ((this.level > 0));
}
public function getRange():int{
return (0);
}
public function freeBuildResource():void{
}
public function getRoute(_arg1:Point):Route{
var _local2:Route;
var _local3:*;
var _local4:Route;
_local2 = null;
_local3 = this.links.iterator();
while (_local3.hasNext()) {
_local4 = _local3.next();
if (Point.isEqual(_local4.dest, _arg1)){
_local2 = _local4;
};
};
return (_local2);
}
public function removeReserve(_arg1:ResourceCount):void{
if (this.stuff.reserve(_arg1.resource) >= _arg1.count){
this.stuff.removeReserve(_arg1);
this.updateLow(_arg1.resource);
Game.update.resourceChange(this.mapPos);
Game.progress.addResources(_arg1.resource, _arg1.count);
};
}
public function takeSurvivor():int{
this.takeResource(Lib.survivorLoad);
return (this.survivors.pop());
}
public function removeTradeTargets():void{
var _local1:*;
var _local2:Route;
var _local3:Tower;
_local1 = this.links.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
_local3 = Game.map.getCell(_local2.dest.x, _local2.dest.y).getTower();
_local3.sprite.changeSupplyTarget(false);
_local3.sprite.update();
};
}
override public function cleanup():void{
this.removeAllTrade();
this.sprite.cleanup();
super.cleanup();
}
public function getTradeLinks():List{
return (this.links);
}
public function countReserve(_arg1:Resource):int{
return (this.stuff.reserve(_arg1));
}
public function getType():int{
return (DEPOT);
}
public function saveTowerGeneric(){
return ({parent:super.save(), sprite:TowerSprite.saveS(this.sprite), mapPos:this.mapPos.save(), stuff:this.stuff.save(), survivors:this.survivors.copy(), incomingSurvivors:this.incomingSurvivors.copy(), level:this.level, reservedUpgrade:this.reservedUpgrade, committedUpgrade:this.committedUpgrade, links:Save.saveList(this.links, Route.saveS), type:this.type, zombieGuide:this.zombieGuide.save()});
}
public function takeResource(_arg1:ResourceCount):void{
this.stuff.take(_arg1);
this.updateLow(_arg1.resource);
Game.progress.removeResources(_arg1.resource, _arg1.count);
Game.update.resourceChange(this.mapPos);
}
public function updateVisibility():void{
}
public function saveEditResources(_arg1:ByteArray):void{
this.stuff.saveEditResources(_arg1);
}
public function reserveUpgrade():void{
if (((this.canUpgrade()) && (((this.reservedUpgrade + this.committedUpgrade) < this.getUpgradeCost())))){
this.reservedUpgrade++;
};
}
public function getFoodCost():int{
return (Option.foodTransportCost);
}
public function addSand(_arg1:ResourceCount):void{
}
public function getSurvivorType(_arg1:int):int{
if (_arg1 < this.survivors.length){
return (this.survivors[_arg1]);
};
if (_arg1 < (this.survivors.length + this.incomingSurvivors.length)){
return (this.incomingSurvivors[(_arg1 - this.survivors.length)]);
};
return (0);
}
public function upgradeLevel():void{
if (this.canUpgrade()){
this.committedUpgrade = 0;
this.level = (this.level + 1);
this.normalizeLevel();
};
}
public function removeIncoming(_arg1:ResourceCount):void{
this.stuff.removeIncoming(_arg1);
this.updateLow(_arg1.resource);
Game.progress.removeResources(_arg1.resource, _arg1.count);
Game.update.resourceChange(this.mapPos);
}
protected function updateLow(_arg1:Resource):void{
if (this.countReserve(_arg1) > (this.countResource(_arg1) + this.countIncoming(_arg1))){
this.sprite.addNeed(_arg1);
} else {
this.sprite.removeNeed(_arg1);
};
}
public function getLevel():int{
return (this.level);
}
public function isUpgrading():Boolean{
return ((this.reservedUpgrade > 0));
}
protected function sendToDepot(_arg1:Boolean):void{
var _local2:Point;
var _local3:Route;
var _local4:*;
var _local5:ResourceCount;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Route;
var _local10:Tower;
var _local11:int;
var _local12:Resource;
var _local13:int;
var _local14:ResourceCount;
_local2 = null;
_local3 = null;
_local4 = this.links.iterator();
while (_local4.hasNext()) {
_local9 = _local4.next();
_local10 = Game.map.getCell(_local9.dest.x, _local9.dest.y).getTower();
if (((((!((_local10 == null))) && ((_local10.getType() == DEPOT)))) && (_local9.shouldSend()))){
_local2 = _local9.dest;
_local3 = _local9;
break;
};
};
_local5 = null;
_local6 = 0;
_local7 = 0;
_local8 = Option.resourceCount;
while (_local7 < _local8) {
var _temp1 = _local7;
_local7 = (_local7 + 1);
_local11 = _temp1;
_local12 = Lib.indexToResource(_local11);
_local13 = (this.stuff.count(_local12) - this.stuff.reserve(_local12));
if (_local13 > 0){
_local14 = new ResourceCount(_local12, _local13);
if (this.getWeight(_local14) > _local6){
_local5 = _local14;
_local6 = this.getWeight(_local5);
};
};
};
if (((((((((!((_local2 == null))) && (!((_local5 == null))))) && (!((_local3 == null))))) && (((!(_arg1)) || ((_local5.count >= Lib.truckLoad(_local5.resource))))))) && ((this.stuff.count(Resource.SURVIVORS) >= Lib.truckLoad(Resource.SURVIVORS))))){
this.createSupplyTruck(_local2, _local5, _local3);
};
}
public function getUpgradeSupplier():Point{
var _local1:Point;
var _local2:int;
var _local3:int;
var _local4:*;
var _local5:Route;
var _local6:Tower;
var _local7:int;
var _local8:int;
_local1 = null;
_local2 = (this.getUpgradeCost() * Lib.truckLoad(Resource.BOARDS));
_local3 = (this.getUpgradeCost() * Lib.truckLoad(Resource.SURVIVORS));
_local4 = this.links.iterator();
while (_local4.hasNext()) {
_local5 = _local4.next();
_local6 = Game.map.getCell(_local5.dest.x, _local5.dest.y).getTower();
_local7 = _local6.countResource(Resource.BOARDS);
_local8 = _local6.countResource(Resource.SURVIVORS);
if (((((!((_local6 == null))) && ((_local7 >= _local2)))) && ((_local8 >= _local3)))){
_local1 = _local5.dest;
break;
};
};
if (_local1 != null){
return (_local1.clone());
};
return (_local1);
}
public function getUpgradeCost():int{
return (this.upgradeCostTable[(this.level + 1)]);
}
public function hasResource(_arg1:ResourceCount):Boolean{
return ((this.stuff.count(_arg1.resource) >= _arg1.count));
}
public function toggleFood():void{
}
public function getUpgradeLeftText():String{
return (Std.string((this.getUpgradeLeft() * Lib.truckLoad(Resource.BOARDS))));
}
public function addReserve(_arg1:ResourceCount):void{
this.stuff.addReserve(_arg1);
this.updateLow(_arg1.resource);
Game.update.resourceChange(this.mapPos);
Game.progress.removeResources(_arg1.resource, _arg1.count);
}
public function addTradeLink(_arg1:Point):void{
var _local2:Route;
var _local3:Tower;
var _local4:Route;
var _local5:Route;
_local2 = this.getRoute(_arg1);
_local3 = Game.map.getCell(_arg1.x, _arg1.y).getTower();
if ((((((_local2 == null)) && (!((_local3 == null))))) && (((!((this.mapPos.x == _arg1.x))) || (!((this.mapPos.y == _arg1.y))))))){
Game.script.trigger(Script.CREATE_TRADE_SOURCE, this.mapPos);
Game.script.trigger(Script.CREATE_TRADE_DEST, _arg1);
Main.replay.addLine(this.mapPos, _arg1);
_local4 = new Route(this.mapPos, _arg1);
this.links.add(_local4);
_local5 = new Route(_arg1, this.mapPos);
_local3.links.add(_local5);
Game.update.supplyLine(this.mapPos, _arg1);
};
}
public function removeIncomingSurvivor(_arg1:int):void{
this.removeIncoming(Lib.survivorLoad);
this.incomingSurvivors.remove(_arg1);
}
public function updateBlocked():void{
}
override public function load(_arg1):void{
super.load(_arg1.parent);
this.sprite.cleanup();
this.sprite = TowerSprite.load(_arg1.sprite);
this.mapPos = Point.load(_arg1.mapPos);
this.stuff.load(_arg1.stuff);
this.survivors = Load.loadArrayInt(_arg1.survivors);
this.incomingSurvivors = Load.loadArrayInt(_arg1.incomingSurvivors);
this.level = _arg1.level;
this.reservedUpgrade = _arg1.reservedUpgrade;
this.committedUpgrade = _arg1.committedUpgrade;
this.links = Load.loadList(_arg1.links, Route.load);
this.zombieGuide = PathFinder.load(_arg1.zombieGuide);
}
public function removeAllTrade():void{
while (!(this.links.isEmpty())) {
this.removeTradeLink(this.links.first().dest);
};
}
public function getBuildShortage(_arg1:int):Resource{
var _local2:int;
_local2 = (getBuildCost(_arg1) * Lib.truckLoad(Resource.BOARDS));
if (!this.hasResource(Lib.survivorLoad)){
return (Resource.SURVIVORS);
};
if (!this.hasResource(new ResourceCount(Resource.BOARDS, _local2))){
return (Resource.BOARDS);
};
return (null);
}
public function addIncoming(_arg1:ResourceCount):void{
this.stuff.addIncoming(_arg1);
this.updateLow(_arg1.resource);
Game.progress.addResources(_arg1.resource, _arg1.count);
Game.update.resourceChange(this.mapPos);
}
public function showVisibility(_arg1:Range):void{
}
public function getNeeds():List{
var _local1:List;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:Resource;
var _local6:int;
_local1 = new List();
_local2 = 0;
_local3 = Option.resourceCount;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp1;
_local5 = Lib.indexToResource(_local4);
_local6 = (this.stuff.reserve(_local5) - (this.stuff.count(_local5) + this.stuff.incoming(_local5)));
if (_local6 > 0){
_local1.add(new ResourceCount(_local5, _local6));
};
};
return (_local1);
}
public function addIncomingSurvivor(_arg1:int):void{
this.addIncoming(Lib.survivorLoad);
this.incomingSurvivors.push(_arg1);
}
public static function getBuildCost(_arg1:int):int{
if (_arg1 == BARRICADE){
return (Option.barricadeCost[0]);
};
if (_arg1 == SNIPER){
return (Option.sniperCost[0]);
};
if (_arg1 == DEPOT){
return (Option.depotCost[0]);
};
return (Option.workshopCost[0]);
}
public static function isSupplied(_arg1:int, _arg2:int):Boolean{
var _local3:Boolean;
var _local4:List;
var _local5:*;
var _local6:Point;
var _local7:Tower;
_local3 = false;
_local4 = Game.map.findTowers(_arg1, _arg2, Option.supplyRange);
_local5 = _local4.iterator();
while (_local5.hasNext()) {
_local6 = _local5.next();
_local7 = Game.map.getCell(_local6.x, _local6.y).getTower();
if (_local7.getType() == DEPOT){
_local3 = true;
break;
};
};
return (_local3);
}
public static function loadS(_arg1):Tower{
var _local2:Tower;
_local2 = null;
if (_arg1.parent.type == BARRICADE){
_local2 = new Barricade(_arg1.parent.mapPos.x, _arg1.parent.mapPos.y);
} else {
if (_arg1.parent.type == SNIPER){
_local2 = new Sniper(_arg1.parent.mapPos.x, _arg1.parent.mapPos.y);
} else {
if (_arg1.parent.type == DEPOT){
_local2 = new Depot(_arg1.parent.mapPos.x, _arg1.parent.mapPos.y);
} else {
_local2 = new Workshop(_arg1.parent.mapPos.x, _arg1.parent.mapPos.y);
};
};
};
_local2.load(_arg1);
_local2.normalizeLevel();
Game.map.getCell(_local2.mapPos.x, _local2.mapPos.y).loadAddTower(_local2);
return (_local2);
}
public static function canPlace(_arg1:int, _arg2:int, _arg3:int, _arg4=null):Boolean{
var _local5:BackgroundType;
var _local6:BackgroundType;
var _local7:BackgroundType;
var _local8:Boolean;
var _local9:MapCell;
_local5 = BackgroundType.BRIDGE;
_local6 = BackgroundType.BUILDING;
_local7 = BackgroundType.ENTRANCE;
_local8 = false;
_local9 = Game.map.getCell(_arg2, _arg3);
if (((((((((((!(_local9.hasTower())) && (!(_local9.hasShadow())))) && (!(_local9.hasZombies())))) && (!(_local9.isBlocked())))) && (!((_local9.getBackground() == _local5))))) && ((((((_arg4 == true)) || (isSupplied(_arg2, _arg3)))) || (Game.settings.isEditor()))))){
if ((((((_arg1 == WORKSHOP)) && (((_local9.hasRubble()) || (!((_local9.feature == null))))))) && ((((_local9.getBuilding() == null)) || (!(_local9.getBuilding().hasZombies())))))){
_local8 = true;
} else {
if (((((((((!((_arg1 == WORKSHOP))) && (!(_local9.hasRubble())))) && ((_local9.feature == null)))) && (!((_local9.getBackground() == _local6))))) && (!((_local9.getBackground() == _local7))))){
_local8 = true;
};
};
};
return (_local8);
}
public static function save(_arg1:Tower){
return (_arg1.save());
}
}
}//package
Section 538
//TowerAbandonSound (TowerAbandonSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class TowerAbandonSound extends Sound {
public function TowerAbandonSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 539
//TowerBuildSound (TowerBuildSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class TowerBuildSound extends Sound {
public function TowerBuildSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 540
//towerclip (towerclip)
package {
import flash.display.*;
public dynamic class towerclip extends MovieClip {
public function towerclip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 541
//TowerDestroySound (TowerDestroySound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class TowerDestroySound extends Sound {
public function TowerDestroySound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 542
//TowerNeedClip (TowerNeedClip)
package {
import flash.display.*;
public dynamic class TowerNeedClip extends MovieClip {
public function TowerNeedClip(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package
Section 543
//TowerSupplySound (TowerSupplySound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class TowerSupplySound extends Sound {
public function TowerSupplySound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 544
//TowerUpgradeSound (TowerUpgradeSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class TowerUpgradeSound extends Sound {
public function TowerUpgradeSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 545
//Truck (Truck)
package {
import ui.*;
import logic.mission.*;
import flash.*;
public class Truck extends Actor implements AbstractFrame {
protected var goal:Mission;
protected var path:Path;
protected var pathIndex:int;
protected var isDead:Boolean;
protected var sprite:Sprite;
protected var retries:int;
protected var route:Route;
protected var waitCounter:int;
protected var deathFrame:int;
protected var current:Point;
public function Truck(_arg1:Mission=null, _arg2:Route=null):void{
var _local3:int;
if (!Boot.skip_constructor){
_local3 = 100;
if (_arg1 != null){
_local3 = _arg1.takeFood();
};
super(_local3);
this.retries = 0;
this.waitCounter = 0;
this.goal = _arg1;
this.current = null;
this.path = null;
this.pathIndex = 0;
this.route = null;
this.isDead = false;
this.deathFrame = Option.survivorDeathFrameCount;
if (this.goal != null){
this.current = this.goal.getSource().clone();
this.sprite = new Sprite(this.current.toPixel(), 0, this.goal.getSurvivorType(), Animation.carry(this.goal.getPayload()));
this.sprite.update();
this.route = _arg2;
this.resetPath();
Game.map.getCell(this.current.x, this.current.y).addTruck(this);
};
};
}
public function spawnZombie():void{
var _local1:Zombie;
var _local2:Tower;
if (!this.isDead){
_local1 = new Zombie(this.current.x, this.current.y, this.sprite.getRotation(), this.current.x, this.current.y, Zombie.ATTACK_SPAWN);
_local1.setPixel(this.sprite.getPos());
if (((!((this.goal.getDest() == null))) && (!(Point.isEqual(this.goal.getDest(), this.current))))){
_local2 = Game.map.getCell(this.goal.getDest().x, this.goal.getDest().y).getTower();
if (_local2 != null){
_local1.makeNoise(this.goal.getDest(), 0, _local2.getZombieGuide());
};
};
this.isDead = true;
Game.view.frameAdvance.add(this);
Main.sound.play(SoundPlayer.ZOMBIE_MOAN);
};
}
protected function completeMission():void{
this.goal = this.goal.complete();
if (this.goal == null){
this.cleanup();
} else {
this.resetPath();
this.displayPayload(this.goal.getPayload());
};
}
protected function resetPath():void{
var _local1:Tower;
if (((((!((this.route == null))) && (Point.isEqual(this.route.source, this.goal.getDest())))) && (Point.isEqual(this.route.dest, this.current)))){
_local1 = Game.map.getCell(this.current.x, this.current.y).getTower();
if (_local1 != null){
this.route = _local1.getRoute(this.goal.getDest());
};
};
if (((((!((this.route == null))) && (Point.isEqual(this.route.source, this.current)))) && (Point.isEqual(this.route.dest, this.goal.getDest())))){
this.path = this.route.path;
} else {
this.path = Game.pathPool.getPath(this.current, this.goal.getDest());
};
this.pathIndex = 0;
}
override public function cleanup():void{
super.cleanup();
this.sprite.cleanup();
if (this.goal != null){
this.goal.cleanup();
};
Game.map.getCell(this.current.x, this.current.y).removeTruck(this);
if (this.isDead){
Game.view.frameAdvance.remove(this);
};
}
protected function movePanic():void{
var _local1:Array;
var _local2:Array;
var _local3:int;
var _local4:Point;
var _local5:Point;
var _local6:MapCell;
var _local7:int;
_local1 = [new Point(0, 1), new Point(1, 0), new Point(0, -1), new Point(-1, 0)];
_local2 = [];
_local3 = 0;
while (_local3 < _local1.length) {
_local4 = _local1[_local3];
_local3++;
_local5 = this.current.clone();
_local5.plusEquals(_local4);
_local6 = Game.map.getCell(_local5.x, _local5.y);
if (((((((!(_local6.hasZombies())) && (!(_local6.isBlocked())))) && (!(_local6.hasTower())))) && (!((_local6.getBackground() == BackgroundType.BRIDGE))))){
_local2.push(_local5);
};
};
if (_local2.length > 0){
_local7 = Lib.rand(_local2.length);
this.move(_local2[_local7], null);
};
if (!this.isPanic()){
this.resetPath();
};
}
public function retryMission():void{
if (this.route != null){
this.route.path = Game.pathPool.getPath(this.route.source, this.route.dest);
};
if (this.retries >= Option.truckRetries){
this.retries = 0;
this.goal = this.goal.fail();
if (this.goal == null){
this.cleanup();
} else {
this.resetPath();
this.displayPayload(this.goal.getPayload());
};
} else {
this.resetPath();
this.wait();
this.retries++;
};
}
protected function isPathGood():Boolean{
var _local1:Boolean;
var _local2:Point;
var _local3:Boolean;
var _local4:Boolean;
_local1 = true;
if (this.pathIndex >= this.path.getStepCount()){
_local1 = false;
} else {
if (((!(this.path.isGenerating())) && (!(this.path.isFound())))){
_local1 = false;
} else {
if ((((this.goal == null)) || (!(this.goal.canSucceed())))){
_local1 = false;
} else {
_local2 = this.path.getStep(this.pathIndex);
_local3 = ((!(Point.isEqual(_local2, this.goal.getDest()))) && (Game.map.getCell(_local2.x, _local2.y).hasTower()));
_local4 = ((((Lib.adjacentZombie(_local2)) && (!(Point.isEqual(_local2, this.goal.getDest()))))) || (Game.map.getCell(_local2.x, _local2.y).hasZombies()));
if (((_local3) || (_local4))){
_local1 = false;
};
};
};
};
return (_local1);
}
public function getPixel():Point{
return (this.sprite.getPos());
}
protected function move(_arg1:Point, _arg2:Point):Boolean{
var _local3:Boolean;
_local3 = this.sprite.travelCurve(this.current.toPixel(), _arg1.toPixel(), _arg2);
if (_local3){
Game.map.getCell(this.current.x, this.current.y).removeTruck(this);
this.current = _arg1;
Game.map.getCell(this.current.x, this.current.y).addTruck(this);
};
this.waitCounter = 0;
return (_local3);
}
override public function step(_arg1:int):void{
var _local2:int;
if (!this.isDead){
_local2 = this.sprite.step(_arg1);
if (_local2 < _arg1){
if (Point.isEqual(this.current, this.goal.getDest())){
this.completeMission();
} else {
if (this.isPanic()){
this.movePanic();
} else {
this.continueMission();
};
};
};
};
}
public function fixedStep():void{
var _local1:Number;
if (this.deathFrame > 0){
_local1 = (this.deathFrame / Option.survivorDeathFrameCount);
this.sprite.setAlpha(_local1);
this.sprite.update();
this.deathFrame--;
} else {
this.cleanup();
};
}
override public function saveTruck(){
return ({parent:super.save(), waitCounter:this.waitCounter, goal:this.goal.save(), current:this.current.save(), path:Save.maybe(this.path, Path.saveS), pathIndex:this.pathIndex, route:Save.maybe(this.route, Route.saveS), retries:this.retries, isDead:this.isDead, deathFrame:this.deathFrame, sprite:this.sprite.save()});
}
protected function continueMission():void{
var _local1:Point;
var _local2:Point;
var _local3:Boolean;
if (this.path.isGenerating()){
this.wait();
} else {
if (!this.isPathGood()){
this.retryMission();
} else {
_local1 = this.path.getStep(this.pathIndex);
_local2 = null;
if (this.pathIndex < (this.path.getStepCount() - 1)){
_local2 = this.path.getStep((this.pathIndex + 1)).toPixel();
};
_local3 = this.move(_local1, _local2);
if (_local3){
this.pathIndex++;
};
};
};
}
override public function load(_arg1):void{
var _local2:Point;
var _local3:Tower;
var _local4:Point;
super.load(_arg1.parent);
this.waitCounter = _arg1.waitCounter;
this.goal = Mission.loadMission(_arg1.goal);
this.current = Point.load(_arg1.current);
this.pathIndex = _arg1.pathIndex;
if (_arg1.route == null){
this.route = null;
this.path = Load.maybe(_arg1.path, Path.load);
} else {
_local2 = Point.load(_arg1.route.source);
_local3 = Game.map.getCell(_local2.x, _local2.y).getTower();
_local4 = Point.load(_arg1.route.dest);
if (_local3 != null){
this.route = _local3.getRoute(_local4);
if (this.route != null){
this.path = this.route.path;
} else {
this.path = Path.load(_arg1.path);
};
};
};
if (this.path == null){
this.path = Game.pathPool.getPath(this.current, this.goal.getDest());
this.pathIndex = 0;
};
this.retries = _arg1.retries;
this.isDead = _arg1.isDead;
this.deathFrame = _arg1.deathFrame;
this.sprite = Sprite.load(_arg1.sprite);
if (this.isDead){
Game.view.frameAdvance.add(this);
} else {
Game.map.getCell(this.current.x, this.current.y).loadAddTruck(this);
};
}
protected function displayPayload(_arg1:Resource):void{
this.sprite.changeAnimation(Animation.carry(_arg1));
}
protected function isPanic():Boolean{
return (Lib.adjacentZombie(this.current));
}
public function dropLoad():void{
if (this.goal != null){
this.goal.dropLoad(this.current.x, this.current.y);
};
}
public static function createSupplyTruck(_arg1:Point, _arg2:Point, _arg3:Resource, _arg4:int, _arg5:Route):Truck{
var _local6:Mission;
_local6 = SupplyMission.create(_arg1, _arg2, _arg3, _arg4);
if (_local6 != null){
return (new Truck(_local6, _arg5));
};
Lib.trace("New Supply Mission Failed");
return (null);
}
public static function createClosingTruck(_arg1:int, _arg2:Route, _arg3:Resource):Truck{
var _local4:int;
var _local5:MapCell;
var _local6:Mission;
_local4 = Option.truckLoad;
if (_arg3 == Resource.SURVIVORS){
_local4 = 1;
};
_local5 = Game.map.getCell(_arg2.source.x, _arg2.source.y);
_local6 = ReturnMission.create(_arg2.source, _arg2.dest, _arg3, _local4, _arg1);
if (_local6 != null){
return (new Truck(_local6, _arg2));
};
return (null);
}
public static function createWorkshopUpgradeTruck(_arg1:Point, _arg2:Point):Truck{
var _local3:Mission;
_local3 = UpgradeMission.create(_arg1, _arg2, Resource.BOARDS);
if (_local3 != null){
return (new Truck(_local3, null));
};
Lib.trace("New Upgrade Workshop Mission Failed");
return (null);
}
public static function loadS(_arg1):Truck{
var _local2:Truck;
_local2 = new Truck(null, null);
_local2.load(_arg1);
return (_local2);
}
public static function createBuildTruck(_arg1:Point, _arg2:Point, _arg3:int):Truck{
var _local4:Mission;
_local4 = null;
if (Tower.getBuildCost(_arg3) == 0){
_local4 = BuildMission.create(_arg1, _arg2, Resource.SURVIVORS, _arg3);
} else {
_local4 = BuildMission.create(_arg1, _arg2, Resource.BOARDS, _arg3);
};
if (_local4 != null){
return (new Truck(_local4, null));
};
Lib.trace("New Build Mission Failed");
return (null);
}
public static function createUpgradeTruck(_arg1:Route):Truck{
var _local2:Mission;
_local2 = UpgradeMission.create(_arg1.source, _arg1.dest, Resource.BOARDS);
if (_local2 != null){
return (new Truck(_local2, _arg1));
};
Lib.trace("New Upgrade Mission Failed");
return (null);
}
public static function createFleeingTruck(_arg1:int, _arg2:Route):Truck{
var _local3:MapCell;
var _local4:Mission;
_local3 = Game.map.getCell(_arg2.source.x, _arg2.source.y);
_local4 = ReturnMission.create(_arg2.source, _arg2.dest, Resource.SURVIVORS, 1, _arg1);
if (_local4 != null){
return (new Truck(_local4, _arg2));
};
return (null);
}
}
}//package
Section 546
//Type (Type)
package {
import flash.utils.*;
import flash.*;
public class Type {
public static function getEnumConstructs(_arg1:Class):Array{
return (_arg1.__constructs__);
}
public static function getEnumName(_arg1:Class):String{
return (getClassName(_arg1));
}
public static function getInstanceFields(_arg1:Class):Array{
return (describe(_arg1, true));
}
public static function createEmptyInstance(_arg1:Class){
var i:*;
var cl = _arg1;
try {
Boot.skip_constructor = true;
i = new (cl);
Boot.skip_constructor = false;
return (i);
} catch(e) {
Boot.skip_constructor = false;
throw (e);
};
return (null);
}
public static function getClass(_arg1):Class{
var _local2:String;
var _local3:*;
_local2 = getQualifiedClassName(_arg1);
if ((((((((((_local2 == "null")) || ((_local2 == "Object")))) || ((_local2 == "int")))) || ((_local2 == "Number")))) || ((_local2 == "Boolean")))){
return (null);
};
if (_arg1.hasOwnProperty("prototype")){
return (null);
};
_local3 = (getDefinitionByName(_local2) as Class);
if (_local3.__isenum){
return (null);
};
return (_local3);
}
protected static function describe(_arg1, _arg2:Boolean):Array{
var _local3:Array;
var _local4:XML;
var _local5:XMLList;
var _local6:int;
var _local7:int;
var _local8:XMLList;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
_local3 = new Array();
_local4 = describeType(_arg1);
if (_arg2){
_local4 = _local4.factory[0];
};
_local5 = _local4.child("method");
_local6 = 0;
_local7 = _local5.length();
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local11 = _temp1;
_local3.push(Std.string(_local5[_local11].attribute("name")));
};
_local8 = _local4.child("variable");
_local9 = 0;
_local10 = _local8.length();
while (_local9 < _local10) {
var _temp2 = _local9;
_local9 = (_local9 + 1);
_local12 = _temp2;
_local3.push(Std.string(_local8[_local12].attribute("name")));
};
return (_local3);
}
public static function resolveClass(_arg1:String):Class{
var cl:Class;
var name = _arg1;
try {
cl = (getDefinitionByName(name) as Class);
if (cl.__isenum){
return (null);
};
return (cl);
} catch(e) {
switch (name){
case "Int":
return (int);
break;
case "Float":
return (Number);
break;
};
return (null);
};
if ((((cl == null)) || ((cl.__name__ == null)))){
return (null);
};
return (cl);
}
public static function resolveEnum(_arg1:String):Class{
var e:*;
var name = _arg1;
try {
e = getDefinitionByName(name);
if (!e.__isenum){
return (null);
};
return (e);
} catch(e1) {
if (name == "Bool"){
return (Boolean);
};
return (null);
};
if ((((e == null)) || ((e.__ename__ == null)))){
return (null);
};
return (e);
}
public static function _typeof(_arg1):ValueType{
var cname:String;
var c:*;
var v = _arg1;
cname = getQualifiedClassName(v);
switch (cname){
case "null":
return (ValueType.TNull);
case "void":
return (ValueType.TNull);
case "int":
return (ValueType.TInt);
case "Number":
return (ValueType.TFloat);
case "Boolean":
return (ValueType.TBool);
case "Object":
return (ValueType.TObject);
default:
c = null;
try {
c = getDefinitionByName(cname);
if (v.hasOwnProperty("prototype")){
return (ValueType.TObject);
};
if (c.__isenum){
return (ValueType.TEnum(c));
};
return (ValueType.TClass(c));
} catch(e) {
if ((((cname == "builtin.as$0::MethodClosure")) || (!((cname.indexOf("-") == -1))))){
return (ValueType.TFunction);
};
return (((c == null)) ? ValueType.TFunction : ValueType.TClass(c));
};
break;
};
return (null);
}
public static function createInstance(_arg1:Class, _arg2:Array){
var cl = _arg1;
var args = _arg2;
return (function (){
var $r:*;
switch (args.length){
case 0:
$r = new cl();
break;
case 1:
$r = new cl(args[0]);
break;
case 2:
$r = new cl(args[0], args[1]);
break;
case 3:
$r = new cl(args[0], args[1], args[2]);
break;
case 4:
$r = new cl(args[0], args[1], args[2], args[3]);
break;
case 5:
$r = new cl(args[0], args[1], args[2], args[3], args[4]);
break;
case 6:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5]);
break;
case 7:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
break;
case 8:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
break;
case 9:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
break;
case 10:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
break;
case 11:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]);
break;
case 12:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]);
break;
case 13:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12]);
break;
case 14:
$r = new cl(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13]);
break;
default:
$r = function (){
var _local1:*;
throw ("Too many arguments");
}();
break;
};
return ($r);
}());
}
public static function enumParameters(_arg1):Array{
return (((_arg1.params == null)) ? [] : _arg1.params);
}
public static function getSuperClass(_arg1:Class):Class{
var _local2:String;
_local2 = getQualifiedSuperclassName(_arg1);
if (_local2 == "Object"){
return (null);
};
return ((getDefinitionByName(_local2) as Class));
}
public static function getClassName(_arg1:Class):String{
var _local2:String;
if (_arg1 == null){
return (null);
};
_local2 = getQualifiedClassName(_arg1);
switch (_local2){
case "int":
return ("Int");
case "Number":
return ("Float");
case "Boolean":
return ("Bool");
default:
break;
};
return (_local2.split("::").join("."));
}
public static function createEnumIndex(_arg1:Class, _arg2:int, _arg3:Array=null){
var _local4:String;
_local4 = getEnumConstructs(_arg1)[_arg2];
if (_local4 == null){
throw ((_arg2 + " is not a valid enum constructor index"));
};
return (createEnum(_arg1, _local4, _arg3));
}
public static function getEnum(_arg1):Class{
var _local2:String;
var _local3:*;
_local2 = getQualifiedClassName(_arg1);
if ((((_local2 == "null")) || ((_local2.substr(0, 8) == "builtin.")))){
return (null);
};
if (_arg1.hasOwnProperty("prototype")){
return (null);
};
_local3 = (getDefinitionByName(_local2) as Class);
if (!_local3.__isenum){
return (null);
};
return (_local3);
}
public static function enumIndex(_arg1):int{
return (_arg1.index);
}
public static function enumConstructor(_arg1):String{
return (_arg1.tag);
}
public static function getClassFields(_arg1:Class):Array{
var _local2:Array;
_local2 = describe(_arg1, false);
_local2.remove("__construct__");
return (_local2);
}
public static function enumEq(_arg1, _arg2):Boolean{
var ap:Array;
var bp:Array;
var _g1:int;
var _g:int;
var i:int;
var a = _arg1;
var b = _arg2;
if (a == b){
return (true);
};
try {
if (a.index != b.index){
return (false);
};
ap = a.params;
bp = b.params;
_g1 = 0;
_g = ap.length;
while (_g1 < _g) {
_g1 = (_g1 + 1);
i = _g1;
if (!enumEq(ap[i], bp[i])){
return (false);
};
};
} catch(e) {
return (false);
};
return (true);
}
public static function createEnum(_arg1:Class, _arg2:String, _arg3:Array=null){
var _local4:*;
_local4 = Reflect.field(_arg1, _arg2);
if (_local4 == null){
throw (("No such constructor " + _arg2));
};
if (Reflect.isFunction(_local4)){
if (_arg3 == null){
throw ((("Constructor " + _arg2) + " need parameters"));
};
return (Reflect.callMethod(_arg1, _local4, _arg3));
};
if (((!((_arg3 == null))) && (!((_arg3.length == 0))))){
throw ((("Constructor " + _arg2) + " does not need parameters"));
};
return (_local4);
}
}
}//package
Section 547
//Update (Update)
package {
import flash.*;
public class Update {
protected var supplierList:List;
protected var newTowerList:List;
protected var cellUpdates:List;
protected var resourceChangeList:List;
protected var customerList:List;
protected var destroyedTowerList:List;
protected var changeButtons:Boolean;
protected var newSelect:Point;
protected var statusCount:int;
protected var selectIsChanging:Boolean;
protected var hasProgress:Boolean;
protected var rangeList:List;
public function Update():void{
if (!Boot.skip_constructor){
this.statusCount = 0;
this.changeButtons = false;
this.cellUpdates = new List();
this.newTowerList = new List();
this.destroyedTowerList = new List();
this.resourceChangeList = new List();
this.supplierList = new List();
this.customerList = new List();
this.selectIsChanging = false;
this.newSelect = null;
this.hasProgress = false;
this.rangeList = new List();
};
}
public function supplyLine(_arg1:Point, _arg2:Point):void{
if (_arg1 != null){
this.supplierList.add(_arg1);
};
if (_arg2 != null){
this.customerList.add(_arg2);
};
}
protected function commitProgress():void{
if (this.hasProgress){
this.changeStatus();
Game.view.totals.update(Game.progress.getAllResourceCounts());
};
}
public function buttons():void{
this.changeButtons = true;
}
protected function commitStatus():void{
if (this.statusCount > 0){
Game.view.sideMenu.show();
};
}
protected function commitChangeSelect():void{
var _local1:Point;
var _local2:Tower;
var _local3:Tower;
if (this.selectIsChanging){
_local1 = Game.select.getSelected();
this.changeStatus();
this.buttons();
Game.select.changeSelect(this.newSelect);
Game.view.mini.updateSupply();
if (_local1 != null){
this.cellState(_local1);
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
if (_local2 != null){
_local2.removeTradeTargets();
};
};
if (this.newSelect != null){
this.cellState(this.newSelect);
_local3 = Game.map.getCell(this.newSelect.x, this.newSelect.y).getTower();
if (_local3 != null){
_local3.addTradeTargets();
};
};
Game.view.sideMenu.changeSelect();
};
}
public function progress():void{
this.hasProgress = true;
}
public function destroyTower(_arg1:Point):void{
if (_arg1 != null){
this.destroyedTowerList.add(_arg1);
};
}
public function commit():void{
this.commitNewTowerList();
this.commitDestroyedTowerList();
this.commitRange();
this.commitChangeSelect();
this.commitCellUpdates();
this.commitResourceChangeList();
this.commitSupplierList();
this.commitCustomerList();
this.commitProgress();
this.commitStatus();
this.commitButtons();
this.clear();
}
protected function commitResourceChangeList():void{
if (!this.resourceChangeList.isEmpty()){
this.changeStatus();
this.buttons();
};
}
public function changeStatus():void{
this.statusCount++;
}
protected function commitDestroyedTowerList():void{
var _local1:Point;
var _local2:*;
var _local3:Point;
_local1 = Game.select.getSelected();
_local2 = this.destroyedTowerList.iterator();
while (_local2.hasNext()) {
_local3 = _local2.next();
this.cellState(_local3);
if (((((this.selectIsChanging) && (Point.isEqual(_local3, this.newSelect)))) || (((!(this.selectIsChanging)) && (Point.isEqual(_local3, _local1)))))){
this.changeSelect(null);
};
};
if (!this.destroyedTowerList.isEmpty()){
Game.view.window.updateRanges();
};
}
protected function commitRange():void{
var _local1:Boolean;
var _local2:*;
var _local3:Point;
if ((((this.rangeList.length > 0)) && (!(this.selectIsChanging)))){
_local1 = false;
_local2 = this.rangeList.iterator();
while (_local2.hasNext()) {
_local3 = _local2.next();
if (Point.isEqual(_local3, Game.select.getSelected())){
_local1 = true;
break;
};
};
if (_local1){
Game.select.update();
};
};
}
public function newTower(_arg1:Point):void{
if (_arg1 != null){
this.newTowerList.add(_arg1);
};
}
protected function commitButtons():void{
if (this.changeButtons){
Game.view.sideMenu.show();
};
}
public function changeSelect(_arg1:Point):void{
this.selectIsChanging = true;
this.newSelect = _arg1;
}
public function clear():void{
this.statusCount = 0;
this.changeButtons = false;
this.cellUpdates.clear();
this.newTowerList.clear();
this.destroyedTowerList.clear();
this.resourceChangeList.clear();
this.supplierList.clear();
this.customerList.clear();
this.selectIsChanging = false;
this.newSelect = null;
this.hasProgress = false;
this.rangeList.clear();
}
public function cellState(_arg1:Point):void{
if (_arg1 != null){
this.cellUpdates.add(_arg1);
};
}
protected function commitCellUpdates():void{
var _local1:*;
var _local2:Point;
_local1 = this.cellUpdates.iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
Game.view.mini.updateCell(_local2.x, _local2.y);
};
}
protected function commitNewTowerList():void{
var _local1:Point;
var _local2:*;
var _local3:Point;
_local1 = Game.select.getSelected();
_local2 = this.newTowerList.iterator();
while (_local2.hasNext()) {
_local3 = _local2.next();
this.cellState(_local3);
if (((((this.selectIsChanging) && (Point.isEqual(_local3, this.newSelect)))) || (((!(this.selectIsChanging)) && (Point.isEqual(_local3, _local1)))))){
this.changeSelect(_local3);
};
};
if (!this.newTowerList.isEmpty()){
Game.view.window.updateRanges();
};
}
protected function commitSupplierList():void{
}
public function resourceChange(_arg1:Point):void{
if (_arg1 != null){
this.resourceChangeList.add(_arg1);
};
}
public function changeRange(_arg1:Point):void{
this.rangeList.add(_arg1);
}
protected function commitCustomerList():void{
var _local1:Point;
var _local2:Tower;
this.clearTargets(this.supplierList);
this.clearTargets(this.customerList);
_local1 = Game.select.getSelected();
if (((!((_local1 == null))) && (((!(this.supplierList.isEmpty())) || (!(this.customerList.isEmpty())))))){
_local2 = Game.map.getCell(_local1.x, _local1.y).getTower();
if (_local2 != null){
_local2.removeTradeTargets();
_local2.addTradeTargets();
Game.view.mini.updateSupply();
};
};
}
protected function clearTargets(_arg1:List):void{
var _local2:*;
var _local3:Point;
var _local4:Tower;
_local2 = _arg1.iterator();
while (_local2.hasNext()) {
_local3 = _local2.next();
_local4 = Game.map.getCell(_local3.x, _local3.y).getTower();
if (_local4 != null){
_local4.removeTarget();
};
};
}
public function undoStatus():void{
this.statusCount--;
}
}
}//package
Section 548
//ValueType (ValueType)
package {
public class ValueType extends enum {
public static const __isenum:Boolean = true;
public static var __constructs__:Array = ["TNull", "TInt", "TFloat", "TBool", "TObject", "TFunction", "TClass", "TEnum", "TUnknown"];
public static var TFloat:ValueType = new ValueType("TFloat", 2);
;
public static var TNull:ValueType = new ValueType("TNull", 0);
;
public static var TFunction:ValueType = new ValueType("TFunction", 5);
;
public static var TUnknown:ValueType = new ValueType("TUnknown", 8);
;
public static var TObject:ValueType = new ValueType("TObject", 4);
;
public static var TInt:ValueType = new ValueType("TInt", 1);
;
public static var TBool:ValueType = new ValueType("TBool", 3);
;
public function ValueType(_arg1:String, _arg2:int, _arg3:Array=null):void{
this.tag = _arg1;
this.index = _arg2;
this.params = _arg3;
}
public static function TClass(_arg1:Class):ValueType{
return (new ValueType("TClass", 6, [_arg1]));
}
public static function TEnum(_arg1:Class):ValueType{
return (new ValueType("TEnum", 7, [_arg1]));
}
}
}//package
Section 549
//Workshop (Workshop)
package {
import ui.*;
import action.*;
import flash.*;
public class Workshop extends Tower {
public function Workshop(_arg1:int=0, _arg2:int=0):void{
if (!Boot.skip_constructor){
this.type = Tower.WORKSHOP;
super(new Point(_arg1, _arg2), Option.workshopLevelLimit, Option.workshopSpeed, Option.workshopCost);
this.addReserve(Lib.survivorLoad);
};
}
override public function giveResource(_arg1:ResourceCount):void{
super.giveResource(_arg1);
this.normalizeLevel();
}
override public function normalizeLevel():void{
super.normalizeLevel();
this.speed = (this.stuff.count(Resource.SURVIVORS) * Option.workshopSpeedFactor);
}
override public function saveTower(){
return ({parent:super.saveTowerGeneric()});
}
override public function takeResource(_arg1:ResourceCount):void{
super.takeResource(_arg1);
this.normalizeLevel();
}
override public function getType():int{
return (Tower.WORKSHOP);
}
override public function step(_arg1:int):void{
var _local2:MapCell;
var _local3:Resource;
var _local4:int;
this.wait();
_local2 = Game.map.getCell(this.mapPos.x, this.mapPos.y);
this.sendToDepot(_local2.hasRubble());
if (this.countResource(Resource.SURVIVORS) > 0){
_local3 = _local2.getRubble(null);
if (_local3 != null){
if (_local3 == Resource.SURVIVORS){
_local4 = Lib.rand(Animation.carryAmmo.getTypeCount());
this.giveSurvivor(this.type);
} else {
this.giveResource(new ResourceCount(_local3, 1));
};
} else {
if (_local2.feature != null){
_local2.feature.doWork();
Game.update.changeStatus();
};
};
if (((((((((!(_local2.hasRubble())) && ((_local2.feature == null)))) && ((this.countResource(Resource.AMMO) == 0)))) && ((this.countResource(Resource.BOARDS) == 0)))) && ((this.countResource(Resource.FOOD) == 0)))){
Game.view.window.refresh();
if (_local2.getBuilding() != null){
_local2.getBuilding().refreshMinimap();
};
Game.actions.push(new CloseTower(this.mapPos.x, this.mapPos.y));
};
};
Game.map.noise(this.mapPos.x, this.mapPos.y, Option.towerNoise, this.zombieGuide);
}
override public function load(_arg1):void{
super.load(_arg1.parent);
}
}
}//package
Section 550
//WorkshopScreen (WorkshopScreen)
package {
import flash.display.*;
public dynamic class WorkshopScreen extends MovieClip {
}
}//package
Section 551
//Zombie (Zombie)
package {
import logic.*;
import ui.*;
import mapgen.*;
import flash.*;
public class Zombie extends Actor implements AbstractFrame {
protected var isAttacking:Boolean;
protected var guide:PathFinder;
protected var dest:Point;
protected var isDead:Boolean;
protected var spawnFrame:int;
protected var type:int;
protected var inWave:Boolean;
protected var sprite:Sprite;
protected var deathFrame:int;
protected var lastPos:Point;
protected var destLoudness:int;
protected var current:Point;
protected var headShot:Sprite;
public static var BUILDING_SPAWN:int = 1;
public static var ATTACK_SPAWN:int = 3;
public static var WAVE_SPAWN:int = 2;
public static var START_SPAWN:int = 0;
public function Zombie(_arg1:int=0, _arg2:int=0, _arg3=null, _arg4:int=0, _arg5:int=0, _arg6:int=0, _arg7=null):void{
var _local8:int;
var _local9:int;
var _local10:Animation;
var _local11:int;
if (!Boot.skip_constructor){
_local8 = (Game.settings.getZombieSpeed() + Util.rand(Option.zombieSpeedRange));
super(_local8);
if ((((_arg7 == null)) || ((_arg7 == false)))){
_local9 = Lib.directionToAngle(Util.randDirection());
if (_arg3 != null){
_local9 = _arg3;
};
this.isDead = false;
this.current = new Point(_arg1, _arg2);
this.dest = new Point(_arg4, _arg5);
this.destLoudness = 0;
this.isAttacking = false;
_local10 = Animation.zombieShamble;
if (Game.settings.getEasterEgg() != GameSettings.EASTLOSANGELES){
_local11 = (_local10.getTypeCount() - 1);
this.type = Util.rand(_local11);
} else {
this.type = (_local10.getTypeCount() - 1);
};
this.sprite = new Sprite(this.current.toPixel(), _local9, this.type, _local10);
this.sprite.setRotationOffset(90);
this.headShot = null;
this.inWave = false;
this.guide = null;
this.lastPos = this.current.clone();
this.deathFrame = Animation.zombieDeathWait;
if (_arg6 == START_SPAWN){
this.spawnFrame = -1;
Game.map.getCell(this.current.x, this.current.y).addZombie(this);
this.sprite.setAlpha(1);
this.sprite.update();
} else {
this.sprite.setAlpha(0);
this.spawnFrame = Option.spawnFrameCount;
};
if (_arg6 != BUILDING_SPAWN){
Game.progress.addZombies(1);
};
};
};
}
override public function saveZombie(){
var _local1:PathFinder;
_local1 = null;
if (Game.map.getCell(this.dest.x, this.dest.y).getTower() == null){
_local1 = this.guide;
};
return ({parent:super.save(), sprite:this.sprite.save(), headShot:Save.maybe(this.headShot, Sprite.saveS), type:this.type, isDead:this.isDead, current:this.current.save(), dest:this.dest.save(), destLoudness:this.destLoudness, isAttacking:this.isAttacking, inWave:this.inWave, guide:Save.maybe(_local1, PathFinder.saveS), lastPos:this.lastPos.save(), deathFrame:this.deathFrame, spawnFrame:this.spawnFrame});
}
public function isInWave():Boolean{
return (this.inWave);
}
public function isVulnerable():Boolean{
return (this.isAttacking);
}
public function addToWave():void{
if (!this.inWave){
this.inWave = true;
Game.spawner.addToWave();
};
}
public function getDest():Point{
return (this.dest);
}
override public function cleanup():void{
super.cleanup();
this.sprite.cleanup();
if (this.headShot != null){
this.headShot.cleanup();
};
if (this.isDead){
Game.view.frameAdvance.remove(this);
};
}
protected function plan():void{
var _local1:Direction;
var _local2:int;
if (this.isAttacking){
this.isAttacking = false;
this.wait();
} else {
_local1 = Game.map.getCell(this.current.x, this.current.y).getScent();
if (((Point.isEqual(this.current, this.dest)) && (!((_local1 == null))))){
_local2 = Lib.directionToIndex(_local1);
this.dest = new Point((this.current.x + Lib.dirDeltas[_local2].x), (this.current.y + Lib.dirDeltas[_local2].y));
this.destLoudness = 0;
this.guide = null;
};
if (Point.isEqual(this.current, this.dest)){
this.wait();
this.destLoudness = 0;
this.guide = null;
this.removeFromWave();
} else {
this.moveToNext();
};
};
}
override public function dance(_arg1:Boolean):void{
if (((((!(this.isAttacking)) && (!(this.isDead)))) && ((this.spawnFrame <= 0)))){
this.sprite.dance(_arg1);
};
}
public function removeFromMap():void{
var _local1:MapCell;
var _local2:Point;
var _local3:int;
if (!this.isDead){
_local1 = Game.map.getCell(this.current.x, this.current.y);
_local1.removeZombie(this);
this.removeFromWave();
Game.progress.removeZombies(1);
this.isDead = true;
_local2 = new Point((this.current.x + 1), (this.current.y + 1));
Main.replay.addBox(this.current, _local2, Option.zombieMiniColor);
if (_local1.getBuilding() != null){
_local3 = _local1.getBuilding().getZombieCount();
Main.replay.addBox(this.current, _local2, Lib.zombieColor(_local3));
} else {
Main.replay.addBox(this.current, _local2, Option.roadMiniColor);
};
};
}
protected function moveToNext():void{
var _local1:Point;
var _local2:MapCell;
var _local3:Point;
_local1 = this.getNext();
if (_local1 == null){
this.wait();
} else {
_local2 = Game.map.getCell(_local1.x, _local1.y);
if (_local2.hasTower()){
this.isAttacking = true;
this.sprite.changeAnimation(Animation.attackTower);
this.sprite.travelSimple(this.current.toPixel(), _local1.toPixel());
_local2.attackTower();
} else {
if (_local2.hasTrucks()){
this.isAttacking = true;
_local3 = _local2.attackSurvivor();
this.sprite.changeAnimation(Animation.attackSurvivor);
this.sprite.travelSimple(this.sprite.getPos(), _local3);
} else {
this.sprite.changeAnimation(Animation.zombieShamble);
this.sprite.travelSimple(_local1.toPixel());
Game.map.getCell(this.current.x, this.current.y).removeZombie(this);
_local2.addZombie(this);
this.lastPos = this.current;
this.current = _local1;
};
};
};
}
public function setPixel(_arg1:Point):void{
this.sprite.setPos(_arg1);
}
protected function getForwardPos(_arg1:Point, _arg2:Point):Point{
var _local3:Point;
_local3 = null;
if (_arg1.x > _arg2.x){
_local3 = new Point((_arg1.x + 1), _arg1.y);
} else {
if (_arg1.x < _arg2.x){
_local3 = new Point((_arg1.x - 1), _arg1.y);
} else {
if (_arg1.y > _arg2.y){
_local3 = new Point(_arg1.x, (_arg1.y + 1));
} else {
if (_arg1.y < _arg2.y){
_local3 = new Point(_arg1.x, (_arg1.y - 1));
};
};
};
};
return (_local3);
}
override public function step(_arg1:int):void{
var _local2:Number;
var _local3:int;
if (this.spawnFrame == 0){
Game.map.getCell(this.current.x, this.current.y).addZombie(this);
this.sprite.setAlpha(1);
this.sprite.update();
this.spawnFrame--;
} else {
if (this.spawnFrame > 0){
_local2 = (1 - (this.spawnFrame / Option.spawnFrameCount));
this.sprite.setAlpha(_local2);
this.sprite.update();
this.spawnFrame--;
} else {
if (!this.isDead){
_local3 = this.sprite.step(_arg1);
if (_local3 < _arg1){
this.plan();
};
};
};
};
}
public function getPixel():Point{
return (this.sprite.getPos());
}
public function makeNoise(_arg1:Point, _arg2:int, _arg3:PathFinder):void{
if (((((Point.isEqual(this.current, this.dest)) || ((_arg2 > this.destLoudness)))) || ((this.destLoudness == 0)))){
this.dest = _arg1.clone();
this.destLoudness = _arg2;
this.guide = _arg3;
};
}
public function kill(_arg1:Point):void{
var _local2:int;
if (!this.isDead){
this.removeFromMap();
this.sprite.changeAnimation(Animation.zombieDeath);
Game.view.frameAdvance.add(this);
_local2 = (Lib.getAngle(this.getPixel(), _arg1.toPixel()) - 90);
this.headShot = new Sprite(this.getPixel(), _local2, 0, Animation.headShot);
};
}
public function fixedStep():void{
var _local1:int;
var _local2:int;
var _local3:Number;
_local1 = this.sprite.step(1);
_local2 = this.headShot.step(1);
if (this.deathFrame == 0){
Main.sound.play(SoundPlayer.ZOMBIE_DEATH);
};
if (this.deathFrame < 0){
_local3 = (1 + (this.deathFrame * 0.01));
this.sprite.setAlpha(_local3);
this.sprite.update();
};
this.deathFrame--;
if (this.deathFrame < -100){
this.cleanup();
};
}
override public function load(_arg1):void{
var _local2:Tower;
super.load(_arg1.parent);
this.sprite = Sprite.load(_arg1.sprite);
this.headShot = Load.maybe(_arg1.headShot, Sprite.load);
this.type = _arg1.type;
this.isDead = _arg1.isDead;
this.current = Point.load(_arg1.current);
this.dest = Point.load(_arg1.dest);
this.destLoudness = _arg1.destLoudness;
this.isAttacking = _arg1.isAttacking;
this.inWave = _arg1.inWave;
_local2 = Game.map.getCell(this.dest.x, this.dest.y).getTower();
if (_local2 == null){
this.guide = Load.maybe(_arg1.guide, PathFinder.load);
} else {
this.guide = _local2.getZombieGuide();
};
this.lastPos = Point.load(_arg1.lastPos);
this.deathFrame = _arg1.deathFrame;
this.spawnFrame = _arg1.spawnFrame;
if (this.isDead){
Game.view.frameAdvance.add(this);
} else {
if (this.spawnFrame < 0){
Game.map.getCell(this.current.x, this.current.y).loadAddZombie(this);
};
};
}
protected function getNext():Point{
var _local1:Point;
var _local2:Point;
var _local3:Direction;
_local1 = null;
if (this.guide != null){
_local2 = null;
_local3 = Game.map.getCell(this.current.x, this.current.y).getScent();
if (_local3 != null){
_local2 = this.current.clone();
_local2.plusEquals(Lib.dirDeltas[Lib.directionToIndex(_local3)]);
} else {
_local2 = this.getForwardPos(this.current, this.lastPos);
};
_local1 = this.guide.getParent(this.current, _local2);
} else {
if (Point.isAdjacent(this.current, this.dest)){
_local1 = this.dest;
};
};
return (_local1);
}
protected function removeFromWave():void{
if (this.inWave){
this.inWave = false;
Game.spawner.removeFromWave();
};
}
public static function loadS(_arg1):Zombie{
var _local2:Zombie;
_local2 = new Zombie(_arg1.current.x, _arg1.current.y, 0, _arg1.dest.x, _arg1.dest.y, 0, true);
_local2.load(_arg1);
return (_local2);
}
}
}//package
Section 552
//zombie_headshot (zombie_headshot)
package {
import flash.display.*;
public dynamic class zombie_headshot extends MovieClip {
}
}//package
Section 553
//ZombieBash1Sound (ZombieBash1Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieBash1Sound extends Sound {
public function ZombieBash1Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 554
//ZombieBash2Sound (ZombieBash2Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieBash2Sound extends Sound {
public function ZombieBash2Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 555
//ZombieBash3Sound (ZombieBash3Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieBash3Sound extends Sound {
public function ZombieBash3Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 556
//ZombieBash4Sound (ZombieBash4Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieBash4Sound extends Sound {
public function ZombieBash4Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 557
//ZombieBash5Sound (ZombieBash5Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieBash5Sound extends Sound {
public function ZombieBash5Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 558
//ZombieBash6Sound (ZombieBash6Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieBash6Sound extends Sound {
public function ZombieBash6Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 559
//zombieCycle_attack_1 (zombieCycle_attack_1)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_1 extends MovieClip {
}
}//package
Section 560
//zombieCycle_attack_10 (zombieCycle_attack_10)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_10 extends MovieClip {
}
}//package
Section 561
//zombieCycle_attack_11 (zombieCycle_attack_11)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_11 extends MovieClip {
}
}//package
Section 562
//zombieCycle_attack_12 (zombieCycle_attack_12)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_12 extends MovieClip {
}
}//package
Section 563
//zombieCycle_attack_2 (zombieCycle_attack_2)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_2 extends MovieClip {
}
}//package
Section 564
//zombieCycle_attack_3 (zombieCycle_attack_3)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_3 extends MovieClip {
}
}//package
Section 565
//zombieCycle_attack_4 (zombieCycle_attack_4)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_4 extends MovieClip {
}
}//package
Section 566
//zombieCycle_attack_5 (zombieCycle_attack_5)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_5 extends MovieClip {
}
}//package
Section 567
//zombieCycle_attack_6 (zombieCycle_attack_6)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_6 extends MovieClip {
}
}//package
Section 568
//zombieCycle_attack_7 (zombieCycle_attack_7)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_7 extends MovieClip {
}
}//package
Section 569
//zombieCycle_attack_8 (zombieCycle_attack_8)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_8 extends MovieClip {
}
}//package
Section 570
//zombieCycle_attack_9 (zombieCycle_attack_9)
package {
import flash.display.*;
public dynamic class zombieCycle_attack_9 extends MovieClip {
}
}//package
Section 571
//zombieCycle_death_1 (zombieCycle_death_1)
package {
import flash.display.*;
public dynamic class zombieCycle_death_1 extends MovieClip {
}
}//package
Section 572
//zombieCycle_death_10 (zombieCycle_death_10)
package {
import flash.display.*;
public dynamic class zombieCycle_death_10 extends MovieClip {
}
}//package
Section 573
//zombieCycle_death_11 (zombieCycle_death_11)
package {
import flash.display.*;
public dynamic class zombieCycle_death_11 extends MovieClip {
}
}//package
Section 574
//zombieCycle_death_12 (zombieCycle_death_12)
package {
import flash.display.*;
public dynamic class zombieCycle_death_12 extends MovieClip {
}
}//package
Section 575
//zombieCycle_death_2 (zombieCycle_death_2)
package {
import flash.display.*;
public dynamic class zombieCycle_death_2 extends MovieClip {
}
}//package
Section 576
//zombieCycle_death_3 (zombieCycle_death_3)
package {
import flash.display.*;
public dynamic class zombieCycle_death_3 extends MovieClip {
}
}//package
Section 577
//zombieCycle_death_4 (zombieCycle_death_4)
package {
import flash.display.*;
public dynamic class zombieCycle_death_4 extends MovieClip {
}
}//package
Section 578
//zombieCycle_death_5 (zombieCycle_death_5)
package {
import flash.display.*;
public dynamic class zombieCycle_death_5 extends MovieClip {
}
}//package
Section 579
//zombieCycle_death_6 (zombieCycle_death_6)
package {
import flash.display.*;
public dynamic class zombieCycle_death_6 extends MovieClip {
}
}//package
Section 580
//zombieCycle_death_7 (zombieCycle_death_7)
package {
import flash.display.*;
public dynamic class zombieCycle_death_7 extends MovieClip {
}
}//package
Section 581
//zombieCycle_death_8 (zombieCycle_death_8)
package {
import flash.display.*;
public dynamic class zombieCycle_death_8 extends MovieClip {
}
}//package
Section 582
//zombieCycle_death_9 (zombieCycle_death_9)
package {
import flash.display.*;
public dynamic class zombieCycle_death_9 extends MovieClip {
}
}//package
Section 583
//zombieCycle_shamble_1 (zombieCycle_shamble_1)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_1 extends MovieClip {
}
}//package
Section 584
//zombieCycle_shamble_10 (zombieCycle_shamble_10)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_10 extends MovieClip {
}
}//package
Section 585
//zombieCycle_shamble_11 (zombieCycle_shamble_11)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_11 extends MovieClip {
}
}//package
Section 586
//zombieCycle_shamble_12 (zombieCycle_shamble_12)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_12 extends MovieClip {
}
}//package
Section 587
//zombieCycle_shamble_2 (zombieCycle_shamble_2)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_2 extends MovieClip {
}
}//package
Section 588
//zombieCycle_shamble_3 (zombieCycle_shamble_3)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_3 extends MovieClip {
}
}//package
Section 589
//zombieCycle_shamble_4 (zombieCycle_shamble_4)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_4 extends MovieClip {
}
}//package
Section 590
//zombieCycle_shamble_5 (zombieCycle_shamble_5)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_5 extends MovieClip {
}
}//package
Section 591
//zombieCycle_shamble_6 (zombieCycle_shamble_6)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_6 extends MovieClip {
}
}//package
Section 592
//zombieCycle_shamble_7 (zombieCycle_shamble_7)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_7 extends MovieClip {
}
}//package
Section 593
//zombieCycle_shamble_8 (zombieCycle_shamble_8)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_8 extends MovieClip {
}
}//package
Section 594
//zombieCycle_shamble_9 (zombieCycle_shamble_9)
package {
import flash.display.*;
public dynamic class zombieCycle_shamble_9 extends MovieClip {
}
}//package
Section 595
//ZombieDeathSound (ZombieDeathSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieDeathSound extends Sound {
public function ZombieDeathSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 596
//ZombieMoan1Sound (ZombieMoan1Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieMoan1Sound extends Sound {
public function ZombieMoan1Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 597
//ZombieMoan2Sound (ZombieMoan2Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieMoan2Sound extends Sound {
public function ZombieMoan2Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 598
//ZombieMoan3Sound (ZombieMoan3Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieMoan3Sound extends Sound {
public function ZombieMoan3Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 599
//ZombieMoan4Sound (ZombieMoan4Sound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieMoan4Sound extends Sound {
public function ZombieMoan4Sound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 600
//ZombieMoanCrowdSound (ZombieMoanCrowdSound)
package {
import flash.net.*;
import flash.media.*;
import flash.*;
public class ZombieMoanCrowdSound extends Sound {
public function ZombieMoanCrowdSound(_arg1:URLRequest=null, _arg2:SoundLoaderContext=null):void{
if (!Boot.skip_constructor){
super(_arg1, _arg2);
};
}
}
}//package
Section 601
//ZombieSpawner (ZombieSpawner)
package {
import flash.display.*;
import logic.*;
import ui.*;
import mapgen.*;
import flash.*;
public class ZombieSpawner {
protected var isCounting:Boolean;
protected var wandering:int;
protected var extraZombies:int;
protected var hordeCount:int;
protected var currentWaveCount:int;
protected var settings:GameSettings;
public function ZombieSpawner(_arg1:DisplayObjectContainer=null, _arg2:GameSettings=null):void{
if (!Boot.skip_constructor){
this.extraZombies = 0;
this.hordeCount = 0;
this.wandering = 0;
this.currentWaveCount = 0;
this.isCounting = false;
this.settings = _arg2;
};
}
public function getFramesLeft():int{
return (this.wandering);
}
protected function spawnZombie(_arg1:int, _arg2:Bridge, _arg3:Point):void{
var _local4:Point;
var _local5:PathFinder;
var _local6:Zombie;
var _local7:int;
var _local8:Building;
var _local9:Point;
var _local10:Point;
var _local11:Direction;
_local4 = Game.progress.getRandomDepot();
_local5 = Game.map.getCell(_local4.x, _local4.y).getTower().getZombieGuide();
_local6 = null;
if (_arg3 != null){
this.spawnSingleZombie(_arg3, _local4, _local5, Lib.randDirection());
} else {
if (_arg1 == 0){
_local7 = Lib.rand(2);
if (_local7 == 0){
_local8 = Game.tracker.getBuilding();
if (_local8 != null){
_local8.spawn(_local4, _local5);
};
} else {
_local9 = Game.tracker.getCell();
if (_local9 != null){
Game.map.getCell(_local9.x, _local9.y).spawn(_local4, _local5);
};
};
} else {
if (_arg2 != null){
_local10 = _arg2.spawnPos();
_local11 = _arg2.spawnDir();
this.spawnSingleZombie(_local10, _local4, _local5, _local11);
};
};
};
}
public function startHorde(_arg1=null, _arg2:Point=null):void{
var _local3:int;
var _local4:int;
var _local5:Bridge;
var _local6:int;
var _local7:int;
var _local8:int;
Game.script.trigger(Script.ZOMBIE_HORDE_BEGIN);
_local3 = this.getNextWaveSize();
if (_arg1 != null){
_local3 = _arg1;
};
_local4 = Lib.rand((1 + Game.progress.getBridgeCount()));
if ((((Game.progress.getZombieCount() == 0)) || (!((_arg1 == null))))){
_local4 = (Lib.rand(Game.progress.getBridgeCount()) + 1);
};
if (this.settings.getEasterEgg() != GameSettings.FIDDLERSGREEN){
_local5 = Game.progress.getRandomBridge();
this.extraZombies = Math.floor((this.extraZombies / 2));
_local6 = 0;
_local7 = Math.floor(_local3);
while (_local6 < _local7) {
var _temp1 = _local6;
_local6 = (_local6 + 1);
_local8 = _temp1;
this.spawnZombie(_local4, _local5, _arg2);
};
} else {
this.spawnZombiesFromWater(_local3);
};
if (_arg1 == null){
this.hordeCount++;
};
Main.sound.play(SoundPlayer.ZOMBIE_CROWD_MOAN);
Main.music.changeMusic(MusicPlayer.randomWave(), true);
}
public function step():void{
if (((((this.isCounting) && ((this.currentWaveCount == 0)))) && (!(Game.pause.isPaused())))){
this.wandering--;
if (this.wandering <= 0){
this.wandering = 0;
this.isCounting = false;
Game.script.trigger(Script.COUNTDOWN_COMPLETE);
};
};
}
public function reduceZombies():void{
this.hordeCount = Math.floor((this.hordeCount / 2));
}
public function addToWave():void{
this.currentWaveCount = (this.currentWaveCount + 1);
}
public function startCountDown(_arg1=null):void{
if ((((_arg1 == null)) || ((_arg1 <= 0)))){
this.isCounting = false;
} else {
this.isCounting = true;
this.wandering = (_arg1 * Option.fps);
};
}
protected function spawnZombiesFromWater(_arg1:int):void{
var _local2:Direction;
var _local3:Section;
var _local4:Point;
var _local5:int;
var _local6:int;
var _local7:Point;
var _local8:PathFinder;
var _local9:Point;
_local2 = Lib.randDirection();
_local3 = Game.map.getCityLot().slice(_local2, 1);
_local4 = _local3.getSize();
_local5 = 0;
while (_local5 < _arg1) {
var _temp1 = _local5;
_local5 = (_local5 + 1);
_local6 = _temp1;
_local7 = Game.progress.getRandomDepot();
_local8 = Game.map.getCell(_local7.x, _local7.y).getTower().getZombieGuide();
_local9 = new Point((Lib.rand(_local4.x) + _local3.offset.x), (Lib.rand(_local4.y) + _local3.offset.y));
this.spawnSingleZombie(_local9, _local7, _local8, Util.opposite(_local2));
};
}
public function getWaveCount():int{
return (this.currentWaveCount);
}
public function cleanup():void{
}
public function load(_arg1):void{
this.extraZombies = _arg1.extraZombies;
this.hordeCount = _arg1.hordeCount;
this.wandering = _arg1.wandering;
this.currentWaveCount = _arg1.currentWaveCount;
this.isCounting = _arg1.isCounting;
}
public function removeFromWave():void{
this.currentWaveCount = (this.currentWaveCount - 1);
if (this.currentWaveCount == 0){
Main.music.changeMusic(MusicPlayer.WAVE_END, false);
Game.script.trigger(Script.ZOMBIE_HORDE_END);
};
}
protected function spawnSingleZombie(_arg1:Point, _arg2:Point, _arg3:PathFinder, _arg4:Direction):void{
var _local5:Zombie;
_local5 = new Zombie(_arg1.x, _arg1.y, Lib.directionToAngle(_arg4), _arg2.x, _arg2.y, Zombie.WAVE_SPAWN);
_local5.makeNoise(_arg2, 0, _arg3);
_local5.addToWave();
}
public function getNextWaveSize():int{
var _local1:int;
var _local2:int;
_local1 = (Game.progress.getBridgeCount() + 1);
if ((((this.settings.getEasterEgg() == GameSettings.RACCOONCITY)) || ((this.settings.getEasterEgg() == GameSettings.FIDDLERSGREEN)))){
_local1 = this.settings.getBridgeCount();
};
_local2 = ((Option.wanderingZombieIncrement * this.hordeCount) * _local1);
return ((Option.wanderingZombieBase + _local2));
}
public function addZombie():void{
this.extraZombies++;
}
public function getIsCounting():Boolean{
return (this.isCounting);
}
public function save(){
return ({extraZombies:this.extraZombies, hordeCount:this.hordeCount, wandering:this.wandering, currentWaveCount:this.currentWaveCount, isCounting:this.isCounting});
}
}
}//package
Section 602
//ZombieTracker (ZombieTracker)
package {
import flash.*;
public class ZombieTracker {
protected var cellList:Array;
protected var buildingList:Array;
protected var cellToIndex:IntHash;
public function ZombieTracker():void{
if (!Boot.skip_constructor){
this.cellList = [];
this.cellToIndex = new IntHash();
this.buildingList = [];
};
}
protected function saveEntrances():Array{
var _local1:Array;
var _local2:int;
var _local3:Array;
var _local4:Building;
_local1 = new Array();
_local2 = 0;
_local3 = this.buildingList;
while (_local2 < _local3.length) {
_local4 = _local3[_local2];
_local2++;
_local1.push(_local4.getEntrance().save());
};
return (_local1);
}
public function addCell(_arg1:Point):void{
var _local2:int;
var _local3:int;
_local2 = (_arg1.x + (_arg1.y * Game.map.sizeX()));
if (!this.cellToIndex.exists(_local2)){
this.cellList.push(_local2);
this.cellToIndex.set(_local2, (this.cellList.length - 1));
_local3 = Lib.rand(this.cellList.length);
this.swapCell((this.cellList.length - 1), _local3);
};
}
public function cleanup():void{
}
public function removeCell(_arg1:Point):void{
var _local2:int;
var _local3:*;
_local2 = (_arg1.x + (_arg1.y * Game.map.sizeX()));
if (this.cellToIndex.exists(_local2)){
_local3 = this.cellToIndex.get(_local2);
this.swapCell((this.cellList.length - 1), _local3);
this.cellToIndex.remove(_local2);
this.cellList.pop();
};
}
protected function swapBuilding(_arg1:int, _arg2:int):void{
var _local3:Building;
_local3 = this.buildingList[_arg1];
this.buildingList[_arg1] = this.buildingList[_arg2];
this.buildingList[_arg2] = _local3;
}
public function getBuilding():Building{
var _local1:Building;
var _local2:Building;
var _local3:int;
_local1 = null;
while ((((_local1 == null)) && ((this.buildingList.length > 0)))) {
_local2 = this.buildingList[(this.buildingList.length - 1)];
if (_local2.hasZombies()){
_local1 = this.buildingList[(this.buildingList.length - 1)];
_local3 = Lib.rand(this.buildingList.length);
this.swapBuilding((this.buildingList.length - 1), _local3);
} else {
this.buildingList.pop();
};
};
return (_local1);
}
public function load(_arg1):void{
var _local2:int;
var _local3:*;
var _local4:int;
var _local5:*;
var _local6:int;
var _local7:int;
var _local8:Point;
var _local9:Building;
this.cellList = [];
this.cellToIndex = new IntHash();
this.buildingList = [];
_local2 = 0;
_local3 = _arg1.cellList.length;
while (_local2 < _local3) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
_local6 = _temp1;
this.cellList.push(_arg1.cellList[_local6]);
this.cellToIndex.set(_arg1.cellList[_local6], _local6);
};
_local4 = 0;
_local5 = _arg1.entrances.length;
while (_local4 < _local5) {
var _temp2 = _local4;
_local4 = (_local4 + 1);
_local7 = _temp2;
_local8 = Point.load(_arg1.entrances[_local7]);
_local9 = Game.map.getCell(_local8.x, _local8.y).getBuilding();
this.buildingList.push(_local9);
};
}
protected function swapCell(_arg1:int, _arg2:int):void{
var _local3:int;
this.cellToIndex.set(this.cellList[_arg1], _arg2);
this.cellToIndex.set(this.cellList[_arg2], _arg1);
_local3 = this.cellList[_arg1];
this.cellList[_arg1] = this.cellList[_arg2];
this.cellList[_arg2] = _local3;
}
public function getCell():Point{
var _local1:Point;
var _local2:int;
var _local3:int;
_local1 = null;
if (this.cellList.length > 0){
_local2 = this.cellList[(this.cellList.length - 1)];
_local1 = new Point((_local2 % Game.map.sizeX()), Math.floor((_local2 / Game.map.sizeX())));
_local3 = Lib.rand(this.cellList.length);
this.swapCell((this.cellList.length - 1), _local3);
};
return (_local1);
}
public function save(){
return ({cellList:this.cellList.copy(), entrances:this.saveEntrances()});
}
public function addBuildings():void{
var _local1:*;
var _local2:Building;
var _local3:int;
_local1 = Game.map.getBuildings().iterator();
while (_local1.hasNext()) {
_local2 = _local1.next();
this.buildingList.push(_local2);
_local3 = Lib.rand(this.buildingList.length);
this.swapBuilding((this.buildingList.length - 1), _local3);
};
}
}
}//package