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

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

Exploit.swf

This is the info page for
Flash #57351

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


Text
www.kongregate.com

ActionScript [AS3]

Section 1
//ActivatorBlock (Blocks.ActivatorBlock) package Blocks { import Interface.*; import flash.display.*; import Util.*; public class ActivatorBlock extends Block { public static const bmSphere:Bitmap = new clsSphere(); private static var clsSphere:Class = ActivatorBlock_clsSphere; public function ActivatorBlock(_arg1:int, _arg2:int, _arg3:int, _arg4:Level){ super(_arg1, _arg2, _arg4); codechar = "A"; xmlType = "activator"; SugarGraphics.drawSprite(graphics, bmSphere.bitmapData, 0, 0); this.target = _arg3; } public function activate():void{ var _local1:Block = myLevel.myBlocks[target]; if ((_local1 is BlockerBlock)){ BlockerBlock(_local1).deactivate(); }; } } }//package Blocks
Section 2
//ActivatorBlock_clsSphere (Blocks.ActivatorBlock_clsSphere) package Blocks { import mx.core.*; public class ActivatorBlock_clsSphere extends BitmapAsset { } }//package Blocks
Section 3
//Block (Blocks.Block) package Blocks { import Interface.*; import flash.display.*; public class Block extends Sprite { public var xmlType:String; public var codechar:String; public var target:int;// = -1 public var gridx:int; public var gridy:int; protected var myLevel:Level; public function Block(_arg1:int, _arg2:int, _arg3:Level){ myLevel = _arg3; gridx = _arg1; gridy = _arg2; this.x = (Level.gridSize * _arg1); this.y = (Level.gridSize * _arg2); mouseEnabled = false; } public function step():void{ } } }//package Blocks
Section 4
//BlockerBlock (Blocks.BlockerBlock) package Blocks { import Interface.*; import flash.display.*; import Util.*; public class BlockerBlock extends Block { public static const bmDiamond:Bitmap = new clsDiamond(); private static var clsDiamond:Class = BlockerBlock_clsDiamond; public function BlockerBlock(_arg1:int, _arg2:int, _arg3:Level){ super(_arg1, _arg2, _arg3); codechar = "B"; xmlType = "blocker"; SugarGraphics.drawSprite(graphics, bmDiamond.bitmapData, 0, 0); } override public function step():void{ if (alpha < 0.75){ alpha = (alpha + 0.005); } else { if ((((alpha < 1)) && ((alpha >= 0.75)))){ alpha = 1; SFX.blockrecover(); }; }; } public function deactivate():void{ alpha = 0.25; } } }//package Blocks
Section 5
//BlockerBlock_clsDiamond (Blocks.BlockerBlock_clsDiamond) package Blocks { import mx.core.*; public class BlockerBlock_clsDiamond extends BitmapAsset { } }//package Blocks
Section 6
//DirectoryBlock (Blocks.DirectoryBlock) package Blocks { import Interface.*; import flash.display.*; import Util.*; public class DirectoryBlock extends Block { public static const bmEye:Bitmap = new clsEye(); private static var clsEye:Class = DirectoryBlock_clsEye; public function DirectoryBlock(_arg1:int, _arg2:int, _arg3:Level){ super(_arg1, _arg2, _arg3); codechar = "R"; xmlType = "directory"; SugarGraphics.drawSprite(graphics, bmEye.bitmapData, 0, 0); } } }//package Blocks
Section 7
//DirectoryBlock_clsEye (Blocks.DirectoryBlock_clsEye) package Blocks { import mx.core.*; public class DirectoryBlock_clsEye extends BitmapAsset { } }//package Blocks
Section 8
//DividerBlock (Blocks.DividerBlock) package Blocks { import Interface.*; import flash.display.*; import Util.*; public class DividerBlock extends Block { public static const bmCube:Bitmap = new clsCube(); private static var clsCube:Class = DividerBlock_clsCube; public function DividerBlock(_arg1:int, _arg2:int, _arg3:Level){ super(_arg1, _arg2, _arg3); codechar = "D"; xmlType = "divider"; SugarGraphics.drawSprite(graphics, bmCube.bitmapData, 0, 0); } } }//package Blocks
Section 9
//DividerBlock_clsCube (Blocks.DividerBlock_clsCube) package Blocks { import mx.core.*; public class DividerBlock_clsCube extends BitmapAsset { } }//package Blocks
Section 10
//GoalBlock (Blocks.GoalBlock) package Blocks { import Interface.*; import flash.display.*; import Util.*; public class GoalBlock extends Block { public static const bmPyramid:Bitmap = new clsPyramid(); private static var clsPyramid:Class = GoalBlock_clsPyramid; public function GoalBlock(_arg1:int, _arg2:int, _arg3:Level){ super(_arg1, _arg2, _arg3); codechar = "G"; xmlType = "goal"; SugarGraphics.drawSprite(graphics, bmPyramid.bitmapData, 0, 0); } } }//package Blocks
Section 11
//GoalBlock_clsPyramid (Blocks.GoalBlock_clsPyramid) package Blocks { import mx.core.*; public class GoalBlock_clsPyramid extends BitmapAsset { } }//package Blocks
Section 12
//KeyBlock (Blocks.KeyBlock) package Blocks { import Interface.*; import flash.display.*; import Util.*; public class KeyBlock extends Block { public static const bmKey:Bitmap = new clsKey(); private static var clsKey:Class = KeyBlock_clsKey; public function KeyBlock(_arg1:int, _arg2:int, _arg3:int, _arg4:Level){ super(_arg1, _arg2, _arg4); codechar = "K"; xmlType = "key"; this.target = _arg3; SugarGraphics.drawSprite(graphics, bmKey.bitmapData, 0, 0); } } }//package Blocks
Section 13
//KeyBlock_clsKey (Blocks.KeyBlock_clsKey) package Blocks { import mx.core.*; public class KeyBlock_clsKey extends BitmapAsset { } }//package Blocks
Section 14
//LatchBlock (Blocks.LatchBlock) package Blocks { import Interface.*; import flash.display.*; import Util.*; public class LatchBlock extends Block { public static const bmColumn:Bitmap = new clsColumn(); private static var clsColumn:Class = LatchBlock_clsColumn; public function LatchBlock(_arg1:int, _arg2:int, _arg3:Level){ super(_arg1, _arg2, _arg3); codechar = "L"; xmlType = "latch"; SugarGraphics.drawSprite(graphics, bmColumn.bitmapData, 0, 0); } override public function step():void{ if (alpha < 0.75){ alpha = (alpha + 0.005); } else { if ((((alpha < 1)) && ((alpha >= 0.75)))){ alpha = 1; SFX.latchrecover(); }; }; } public function deactivate():void{ alpha = 0.25; } } }//package Blocks
Section 15
//LatchBlock_clsColumn (Blocks.LatchBlock_clsColumn) package Blocks { import mx.core.*; public class LatchBlock_clsColumn extends BitmapAsset { } }//package Blocks
Section 16
//KongregateEvent (com.kongregate.as3.client.events.KongregateEvent) package com.kongregate.as3.client.events { import flash.events.*; public class KongregateEvent extends Event { public static const COMPLETE:String = "component_api_available"; public function KongregateEvent(_arg1:String){ super(_arg1); } } }//package com.kongregate.as3.client.events
Section 17
//AbstractShadowService (com.kongregate.as3.client.services.AbstractShadowService) package com.kongregate.as3.client.services { import flash.events.*; public class AbstractShadowService extends EventDispatcher { protected function alert(_arg1:String, _arg2:String, _arg3="", _arg4:String=""):void{ trace(((((((("Kongregate API: " + _arg1) + ".") + _arg2) + "(") + _arg3) + ") ") + _arg4)); } } }//package com.kongregate.as3.client.services
Section 18
//HighScoreServiceShadow (com.kongregate.as3.client.services.HighScoreServiceShadow) package com.kongregate.as3.client.services { public class HighScoreServiceShadow extends AbstractShadowService implements IHighScoreServices { private var mode:String; public function HighScoreServiceShadow(){ mode = ""; } public function submit(_arg1:Number, _arg2:String=null):void{ alert("IHighScoreServices", "submit", arguments); } public function connect():Boolean{ alert("IKongregateServices", "connect"); return (true); } public function requestList(_arg1:Function):void{ alert("IHighScoreServices", "requestList", "", (("[Mode: " + mode) + "]")); _arg1({success:false}); } public function setMode(_arg1:String):void{ alert("IHighScoreServices", "setMode", arguments); this.mode = _arg1; } } }//package com.kongregate.as3.client.services
Section 19
//IHighScoreServices (com.kongregate.as3.client.services.IHighScoreServices) package com.kongregate.as3.client.services { public interface IHighScoreServices { function setMode(_arg1:String):void; function submit(_arg1:Number, _arg2:String=null):void; function requestList(_arg1:Function):void; } }//package com.kongregate.as3.client.services
Section 20
//IKongregateServices (com.kongregate.as3.client.services.IKongregateServices) package com.kongregate.as3.client.services { import flash.events.*; public interface IKongregateServices extends IEventDispatcher { function getPlayerInfo(_arg1:Function):void; function connect(_arg1:Number=-1):Boolean; } }//package com.kongregate.as3.client.services
Section 21
//IStatServices (com.kongregate.as3.client.services.IStatServices) package com.kongregate.as3.client.services { public interface IStatServices { function submitArray(_arg1:Array):void; function submit(_arg1:String, _arg2:Number):void; } }//package com.kongregate.as3.client.services
Section 22
//IUserServices (com.kongregate.as3.client.services.IUserServices) package com.kongregate.as3.client.services { public interface IUserServices { function getName():String; function getPlayerInfo(_arg1:Function):void; } }//package com.kongregate.as3.client.services
Section 23
//KongregateServiceShadow (com.kongregate.as3.client.services.KongregateServiceShadow) package com.kongregate.as3.client.services { public class KongregateServiceShadow extends AbstractShadowService implements IKongregateServices { public function getName():String{ alert("IKongregateServices", "getName"); return ("Guest"); } public function connect(_arg1:Number=-1):Boolean{ alert("IKongregateServices", "connect", arguments); return (true); } public function getPlayerInfo(_arg1:Function):void{ alert("IKongregateServices", "getPlayerInfo"); _arg1(new Object()); } } }//package com.kongregate.as3.client.services
Section 24
//StatServiceShadow (com.kongregate.as3.client.services.StatServiceShadow) package com.kongregate.as3.client.services { public class StatServiceShadow extends AbstractShadowService implements IStatServices { public function submitArray(_arg1:Array):void{ alert("IStatServices", "submitArray", arguments); } public function submit(_arg1:String, _arg2:Number):void{ alert("IStatServices", "submitStat", arguments); } } }//package com.kongregate.as3.client.services
Section 25
//UserServiceShadow (com.kongregate.as3.client.services.UserServiceShadow) package com.kongregate.as3.client.services { public class UserServiceShadow extends AbstractShadowService implements IUserServices { public function getName():String{ alert("UserService", "getName"); return ("Guest"); } public function getPlayerInfo(_arg1:Function):void{ alert("UserService", "getPlayerInfo"); _arg1({isGuest:true, name:"Guest", points:0, level:0, isMode:false, isAdmin:false, isDeveloper:false, avatarPath:"", chatAvatarPath:""}); } } }//package com.kongregate.as3.client.services
Section 26
//IAPIBootstrap (com.kongregate.as3.client.IAPIBootstrap) package com.kongregate.as3.client { import flash.events.*; import flash.display.*; public interface IAPIBootstrap { function init(_arg1:Event=null, _arg2:Stage=null):void; function hideLog():void; function showLog(_arg1:int=0):void; } }//package com.kongregate.as3.client
Section 27
//KongregateAPI (com.kongregate.as3.client.KongregateAPI) package com.kongregate.as3.client { import flash.events.*; import flash.display.*; import com.kongregate.as3.client.services.*; import flash.system.*; import com.kongregate.as3.client.events.*; import flash.net.*; import flash.utils.*; import flash.errors.*; public class KongregateAPI extends Sprite { private const VERSION:Number = 1; private var loader:Loader; private var loadedDomain:ApplicationDomain; private static const CLASS_USER:String = "com.kongregate.as3.client.services.UserServices"; private static const CLASS_STATS:String = "com.kongregate.as3.client.services.StatServices"; private static const CLASS_SERVICES:String = "com.kongregate.as3.client.services.KongregateServices"; private static const CLASS_SCORES:String = "com.kongregate.as3.client.services.HighScoreServices"; private static const DEBUG_API_URL:String = "//Linuxpc/kongregate/public/flash/API_AS3.swf"; private static var _connected:Boolean; private static var kUser:IUserServices; private static var _loaded:Boolean; private static var kServices:IKongregateServices; private static var kScores:IHighScoreServices; private static var mInstance:KongregateAPI; private static var kStats:IStatServices; private static var kAPI:IAPIBootstrap; public function KongregateAPI(){ if (mInstance != null){ throw (new Error("Warning: KongregateAPI has been added to stage more than once or accessed improperly. Use getInstance() or a stage reference to access.")); }; mInstance = this; this.addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true); } public function get loaded():Boolean{ return (_loaded); } public function get connected():Boolean{ return (_connected); } private function alertConnected(_arg1:TimerEvent=null):void{ var _local2:KongregateEvent; var _local3:Boolean; _local2 = new KongregateEvent(KongregateEvent.COMPLETE); _local3 = this.dispatchEvent(_local2); } private function init(_arg1:Event):void{ var _local2:Object; var _local3:String; var _local4:URLRequest; var _local5:LoaderContext; this.removeEventListener(Event.ADDED_TO_STAGE, init); _loaded = false; _connected = false; _local2 = LoaderInfo(root.loaderInfo).parameters; _local3 = _local2.api_path; if (_local3 == null){ trace("Alert: Kongregate API could not be loaded, due to local testing. API will load when the game is uploaded."); createShadowServices(); return; }; Security.allowDomain("*.kongregate.com"); Security.allowDomain("kongregatetrunk.com"); _local4 = new URLRequest(_local3); _local5 = new LoaderContext(false); _local5.applicationDomain = ApplicationDomain.currentDomain; _local5.securityDomain = SecurityDomain.currentDomain; loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); loader.load(_local4, _local5); } public function get api():IAPIBootstrap{ return (kAPI); } private function loadComplete(_arg1:Event):void{ getServices(); } public function get scores():IHighScoreServices{ return (kScores); } private function ioErrorHandler(_arg1:IOErrorEvent):void{ throw (new IOError(("API file not found. " + _arg1))); } public function get services():IKongregateServices{ return (kServices); } public function get stats():IStatServices{ return (kStats); } private function createShadowServices():void{ var _local1:Timer; trace(">>> Kongregate Shadow Services instantiated for local development.."); kServices = new KongregateServiceShadow(); kScores = new HighScoreServiceShadow(); kStats = new StatServiceShadow(); kUser = new UserServiceShadow(); _local1 = new Timer(200, 1); _local1.addEventListener(TimerEvent.TIMER_COMPLETE, alertConnected); _local1.start(); _connected = true; } public function get user():IUserServices{ return (kUser); } private function getServices():void{ var _local1:ApplicationDomain; var _local2:*; var _local3:*; var _local4:*; var _local5:*; _local1 = ApplicationDomain.currentDomain; kAPI = IAPIBootstrap(loader.getChildAt(0)); this.addChild(loader); _local2 = _local1.getDefinition(CLASS_SERVICES); trace(_local2); kServices = _local2.getInstance(); _local3 = _local1.getDefinition(CLASS_SCORES); kScores = _local3.getInstance(); _local4 = _local1.getDefinition(CLASS_STATS); kStats = _local4.getInstance(); _local5 = _local1.getDefinition(CLASS_USER); kUser = _local5.getInstance(); kServices.connect(VERSION); _loaded = true; _connected = true; alertConnected(); } public static function getInstance():KongregateAPI{ if (!mInstance){ throw (new IllegalOperationError("You must add the Kongregate API component to the stage before attempting to access it.")); }; return (mInstance); } } }//package com.kongregate.as3.client
Section 28
//LevelData (Data.LevelData) package Data { public class LevelData { public static const PostBB:String = (((((((((((((("-----------------------------------\n" + "Sent: Aug. 24, 2010 15:42:49 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: good news, sort of\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? Yeah, so, my bad; I didn't think about how the whole private board would be in Lochan and stuff. But I've got good news! I've got this friend, Charlie, and his mom just sent him these awesome pastries; they've got, like, persimmon or something in them. I don't know. And I asked him where they came from, and... but you don't want to hear the whole boring story, I bet. I'll sum up.\n\n") + "Charlie's parents are from Locha. They got out during the last big revolution attempt in '99. Charlie was just a kid, but he still speaks Lochan pretty good. I had him take a look at the saved board files you sent me. You're gonna freak out.\n\n") + "Turns out there's this guy, Li Yolei, who posts on the board all the time. He writes this blog about Lochan politics. He's a big believer in freedom, democracy, all that awesome comic-book stuff. The thing is, a week ago, he gets arrested by the government. For treason and inciting rebellion. He's under house arrest right now, but the folks on the board think he's gonna get executed pretty frickin' soon.\n\n") + "You gotta help him out. Charlie was able to find out some info on the local police system. You gotta get in there and set up something that'll help you get Yolei free.\n\n") + "Oh, and Charlie totally got the pastry recipe from his mom, so you should try it. I attached it. These things are totally awesome. :)\n\n") + "peace,\n") + "sk3tch\n\n") + "(1 attached file: \"Lochan Persimmon Pastries.doc\")\n"); public static const PostPolice:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 24, 2010 21:05:38 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: the plan\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I've been working with Charlie, and we put something together. Here's the plan: once you've got the police under control, you should be able to help Li Yolei get out from his house arrest. Charlie got a message translated into Lochan that explains what's going on; we don't know how good Yolei's English is. Assuming he's willing to make the attempt, all you have to do is get him some plane tickets to the US, which should be child's play.\n\n") + "We don't know if Yolei will go along with the whole thing, but we figure if he's gonna be executed, he'll probably be willing to try anything. All you have to do is get the message through; I figure the best place to make sure he sees it is his home computer.\n\n") + "Be careful on this one. This dude's life is at stake, you know?\n\n") + "peace,\n") + "sk3tch\n"); public static const Databank:XML = <level size="5" title="Prisoner Databank"> <summary>Most detainees at Camp Zulu are rightfully imprisoned, as far as you know. To make sure you're helping the right prisoners escape, you'll need access to the prisoner databank.</summary> <block type="key" x="2" y="0" target="7"/> <block type="goal" x="2" y="2"/> <block type="latch" x="1" y="0"/> <block type="blocker" x="4" y="0"/> <block type="activator" x="3" y="0" target="5"/> <block type="blocker" x="0" y="0"/> <block type="blocker" x="0" y="1"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="4" y="1"/> <block type="latch" x="0" y="2"/> <block type="activator" x="1" y="2" target="13"/> <block type="blocker" x="2" y="3"/> <block type="divider" x="3" y="2"/> <block type="activator" x="1" y="4" target="16"/> <block type="blocker" x="0" y="3"/> <block type="activator" x="3" y="4" target="18"/> <block type="blocker" x="2" y="4"/> <block type="activator" x="4" y="3" target="20"/> <block type="blocker" x="4" y="2"/> <path> <point x="3" y="0"/> <point x="3" y="0.25"/> <point x="0" y="0.25"/> <point x="0" y="0"/> </path> <path> <point x="1" y="2"/> <point x="1" y="3"/> <point x="2" y="3"/> </path> <path> <point x="1" y="4"/> <point x="0" y="4"/> <point x="0" y="3"/> </path> <path> <point x="3" y="4"/> <point x="3" y="4.25"/> <point x="2" y="4.25"/> <point x="2" y="4"/> </path> <path> <point x="4" y="3"/> <point x="4.25" y="3"/> <point x="4.25" y="2"/> <point x="4" y="2"/> </path> <port x="1" y="-1"/> <port x="3" y="-1"/> <port x="5" y="0"/> <port x="-1" y="0"/> <port x="-1" y="2"/> <port x="5" y="2"/> <port x="1" y="5"/> <port x="2" y="5" locked="true"/> <port x="0" y="5"/> <port x="-1" y="3"/> </level> ; public static const Courier:XML = <level size="5" title="Swifty Couriers"> <summary>Gadao Koi has a uniform of a courier that hand-delivers important packages to uptown Charlotte locations. Earlier, he called the Swifty Couriers company. Crack into their scheduling and inventory system to find out what's going on.</summary> <block type="blocker" x="0" y="1"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="4" y="3"/> <block type="blocker" x="0" y="3"/> <block type="blocker" x="2" y="3"/> <block type="goal" x="4" y="2"/> <block type="latch" x="3" y="4"/> <block type="activator" x="0" y="0" target="9"/> <block type="blocker" x="1" y="3"/> <block type="activator" x="3" y="3" target="11"/> <block type="blocker" x="1" y="1"/> <block type="directory" x="3" y="1"/> <block type="latch" x="3" y="0"/> <block type="activator" x="2" y="4" target="15"/> <block type="blocker" x="2" y="2"/> <block type="activator" x="1" y="4" target="17"/> <block type="blocker" x="0" y="2"/> <path> <point x="0" y="0"/> <point x="0" y="0.25"/> <point x="0.5" y="0.25"/> <point x="0.5" y="3"/> <point x="1" y="3"/> </path> <path> <point x="3" y="3"/> <point x="2.5" y="3"/> <point x="2.5" y="1.25"/> <point x="1" y="1.25"/> <point x="1" y="1"/> </path> <path> <point x="2" y="4"/> <point x="1.5" y="4"/> <point x="1.5" y="2"/> <point x="2" y="2"/> </path> <path> <point x="1" y="4"/> <point x="-0.25" y="4"/> <point x="-0.25" y="2"/> <point x="0" y="2"/> </path> <port x="-1" y="2"/> <port x="5" y="0"/> <port x="5" y="4"/> <port x="1" y="-1"/> <port x="3" y="5"/> <port x="3" y="-1"/> </level> ; public static const MotorPool:XML = <level size="7" title="Motor Pool"> <summary>In order for the escapees to get from Camp Zulu to the mainland, you'll need to crack into the base's motor pool and requisition a small boat to be waiting at a nearby pier.</summary> <block type="latch" x="1" y="0"/> <block type="activator" x="2" y="0" target="2"/> <block type="blocker" x="0" y="4"/> <block type="blocker" x="3" y="0"/> <block type="blocker" x="4" y="0"/> <block type="blocker" x="5" y="0"/> <block type="blocker" x="6" y="0"/> <block type="blocker" x="0" y="1"/> <block type="blocker" x="0" y="2"/> <block type="blocker" x="0" y="3"/> <block type="blocker" x="0" y="5"/> <block type="blocker" x="1" y="6"/> <block type="blocker" x="2" y="6"/> <block type="blocker" x="3" y="6"/> <block type="blocker" x="5" y="6"/> <block type="blocker" x="4" y="6"/> <block type="blocker" x="6" y="6"/> <block type="blocker" x="6" y="5"/> <block type="latch" x="1" y="4"/> <block type="key" x="1" y="5" target="0"/> <block type="divider" x="6" y="1"/> <block type="latch" x="6" y="2"/> <block type="latch" x="6" y="3"/> <block type="latch" x="6" y="4"/> <block type="goal" x="3" y="3"/> <path> <point x="2" y="0"/> <point x="2" y="0.5"/> <point x="0.5" y="0.5"/> <point x="0.5" y="4"/> <point x="0" y="4"/> </path> <port x="7" y="1" locked="true"/> <port x="7" y="2"/> <port x="7" y="3"/> <port x="7" y="4"/> <port x="-1" y="0"/> <port x="1" y="-1"/> <port x="-1" y="4"/> </level> ; public static const CellPhone:XML = <level size="9" title="Sk3tch's Cell Phone"> <summary>By gaining access to Sk3tch's stolen cell phone, you will be able to locate Gadao Koi and possibly get photos of his recent activities.</summary> <block type="blocker" x="2" y="1"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="4" y="0"/> <block type="blocker" x="6" y="0"/> <block type="blocker" x="6" y="1"/> <block type="blocker" x="6" y="2"/> <block type="blocker" x="6" y="3"/> <block type="blocker" x="6" y="4"/> <block type="blocker" x="6" y="6"/> <block type="blocker" x="6" y="7"/> <block type="blocker" x="6" y="8"/> <block type="blocker" x="2" y="8"/> <block type="blocker" x="2" y="6"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="2" y="2"/> <block type="goal" x="4" y="3"/> <block type="divider" x="5" y="4"/> <block type="divider" x="3" y="4"/> <block type="divider" x="3" y="2"/> <block type="divider" x="4" y="2"/> <block type="blocker" x="4" y="8"/> <block type="activator" x="6" y="5" target="24"/> <block type="blocker" x="2" y="5"/> <block type="latch" x="3" y="7"/> <block type="activator" x="3" y="5" target="27"/> <block type="blocker" x="2" y="7"/> <block type="activator" x="5" y="8" target="29"/> <block type="blocker" x="3" y="8"/> <block type="key" x="5" y="7" target="5"/> <path> <point x="6" y="5"/> <point x="6" y="4.25"/> <point x="2" y="4.25"/> <point x="2" y="5"/> </path> <path> <point x="3" y="5"/> <point x="2.5" y="5"/> <point x="2.5" y="7"/> <point x="2" y="7"/> </path> <path> <point x="5" y="8"/> <point x="5" y="8.25"/> <point x="3" y="8.25"/> <point x="3" y="8"/> </path> <port x="5" y="9"/> <port x="9" y="5"/> <port x="3" y="9"/> <port x="-1" y="7"/> <port x="-1" y="5"/> <port x="5" y="-1" locked="true"/> </level> ; public static const Bonus1:XML = <level size="9" title="Bonus 1: Musical Packets"> <summary>Experimental computer music. Fire a single packet, sit back, and listen!</summary> <block type="divider" x="2" y="4"/> <block type="divider" x="2" y="6"/> <block type="divider" x="4" y="6"/> <block type="divider" x="4" y="4"/> <block type="divider" x="4" y="8"/> <block type="divider" x="2" y="2"/> <block type="divider" x="8" y="8"/> <block type="activator" x="3" y="2" target="8"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="1" y="6"/> <block type="latch" x="6" y="8"/> <block type="goal" x="3" y="5"/> <block type="latch" x="3" y="8"/> <block type="latch" x="1" y="8"/> <block type="latch" x="2" y="8"/> <block type="divider" x="8" y="0"/> <block type="activator" x="0" y="0" target="17"/> <block type="blocker" x="5" y="4"/> <block type="latch" x="4" y="0"/> <block type="key" x="7" y="4" target="1"/> <block type="key" x="0" y="8" target="2"/> <path> <point x="3" y="2"/> <point x="3" y="2.5"/> <point x="1" y="2.5"/> <point x="1" y="2"/> </path> <path> <point x="0" y="0"/> <point x="0" y="0.5"/> <point x="4.5" y="0.5"/> <point x="4.5" y="4"/> <point x="5" y="4"/> </path> <port x="9" y="6"/> <port x="1" y="9" locked="true"/> <port x="9" y="5" locked="true"/> </level> ; public static const PostVOIPEmail:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 11:33:53 GMT\n") + "From: newsbot (noreply@news.crk)\n") + "To: me\n") + "Subject: Article Search Result\n") + "-----------------------------------\n") + "\n") + "(Results of search for string: Camp Zulu. 1 new article found.)\n\n") + "WASHINGTON, DC\n\n") + "Congress entered its second day of hearings today on the subject of Camp Zulu, the government's controversial replacement for the Guantanamo Bay detention facility. The hearings were called to address concerns over the administration's arrest of terrorism suspects with insufficient evidence and their reluctance to allow prisoners access to proper legal counsel.\n\n") + "Representatives of the Department of Homeland Security testified that the criticized practices are necessary in \"these dangerous times.\" They cited the August 25 arrest of two Lochan suspects as an example of a necessary action to preserve the security of the United States.\n\n") + "(This is an automated message. Please do not reply to this message.)\n"); public static const Bonus3:XML = <level size="9" title="Bonus 3: I Fell In Love"> <summary>Seven colors. Computer security is love.</summary> <block type="goal" x="4" y="2"/> <block type="goal" x="4" y="3"/> <block type="goal" x="4" y="4"/> <block type="goal" x="4" y="5"/> <block type="goal" x="4" y="6"/> <block type="latch" x="5" y="2"/> <block type="latch" x="5" y="3"/> <block type="latch" x="5" y="4"/> <block type="latch" x="5" y="5"/> <block type="latch" x="5" y="6"/> <block type="directory" x="6" y="2"/> <block type="directory" x="6" y="3"/> <block type="directory" x="6" y="4"/> <block type="directory" x="6" y="5"/> <block type="directory" x="6" y="6"/> <block type="divider" x="7" y="2"/> <block type="divider" x="7" y="3"/> <block type="divider" x="7" y="4"/> <block type="divider" x="7" y="5"/> <block type="divider" x="7" y="6"/> <block type="goal" x="4" y="1"/> <block type="latch" x="5" y="1"/> <block type="latch" x="5" y="7"/> <block type="goal" x="4" y="7"/> <block type="directory" x="6" y="1"/> <block type="directory" x="6" y="7"/> <block type="divider" x="7" y="7"/> <block type="divider" x="7" y="1"/> <block type="activator" x="3" y="1" target="29"/> <block type="blocker" x="1" y="1"/> <block type="activator" x="3" y="2" target="31"/> <block type="blocker" x="1" y="2"/> <block type="activator" x="3" y="3" target="33"/> <block type="blocker" x="1" y="3"/> <block type="activator" x="3" y="4" target="35"/> <block type="blocker" x="1" y="4"/> <block type="activator" x="3" y="5" target="37"/> <block type="blocker" x="1" y="5"/> <block type="activator" x="3" y="6" target="39"/> <block type="blocker" x="1" y="6"/> <block type="activator" x="3" y="7" target="41"/> <block type="blocker" x="1" y="7"/> <path> <point x="1" y="1"/> <point x="1" y="1.25"/> <point x="3" y="1.25"/> <point x="3" y="1"/> </path> <path> <point x="3" y="2"/> <point x="3" y="2.25"/> <point x="1" y="2.25"/> <point x="1" y="2"/> </path> <path> <point x="1" y="3"/> <point x="1" y="3.25"/> <point x="3" y="3.25"/> <point x="3" y="3"/> </path> <path> <point x="3" y="4"/> <point x="3" y="4.25"/> <point x="1" y="4.25"/> <point x="1" y="4"/> </path> <path> <point x="1" y="5"/> <point x="1" y="5.25"/> <point x="3" y="5.25"/> <point x="3" y="5"/> </path> <path> <point x="3" y="6"/> <point x="3" y="6.25"/> <point x="1" y="6.25"/> <point x="1" y="6"/> </path> <path> <point x="3" y="7"/> <point x="3" y="7.25"/> <point x="1" y="7.25"/> <point x="1" y="7"/> </path> <port x="9" y="1"/> <port x="9" y="7"/> <port x="2" y="9"/> <port x="2" y="-1"/> <port x="7" y="-1"/> <port x="7" y="9"/> <port x="9" y="4"/> <port x="5" y="-1"/> <port x="5" y="9"/> </level> ; public static const PostPower:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 09:21:36 GMT\n") + "From: newsbot (noreply@news.crk)\n") + "To: me\n") + "Subject: Article Search Result\n") + "-----------------------------------\n") + "\n") + "(Results of search for string: Camp Zulu. 1 new article found.)\n\n") + "KEY WEST, FL\n\n") + "Twelve protesters were arrested today on Boca Chica Key in Florida, where they were protesting at the gates of Naval Air Station Key West. NAS Key West is the last stop for supplies before they are sent to Camp Zulu, the United States' new controversial detention camp for suspected terrorists and enemy combatants, built to replace the Guantanamo Bay detention camp.\n\n") + "The protesters were members of a larger group protesting the treatment of prisoners at Camp Zulu, including allegations of torture and suspension of detainees' habeas corpus rights. The protesters were arrested for trespassing when they crossed the ropes set up by the air station to contain the demonstration.\n\n") + "(This is an automated message. Please do not reply to this message.)\n"); public static const Bonus2:XML = <level size="7" title="Bonus 2: Deceit"> <summary>This system is lying to you. It's nothing personal; it just has trouble trusting people.</summary> <block type="goal" x="3" y="3"/> <block type="activator" x="4" y="0" target="2"/> <block type="blocker" x="4" y="3"/> <block type="activator" x="0" y="4" target="4"/> <block type="blocker" x="5" y="3"/> <block type="activator" x="0" y="2" target="6"/> <block type="blocker" x="2" y="4"/> <block type="activator" x="2" y="0" target="8"/> <block type="blocker" x="4" y="4"/> <block type="activator" x="2" y="6" target="10"/> <block type="blocker" x="3" y="5"/> <block type="activator" x="4" y="6" target="12"/> <block type="blocker" x="2" y="3"/> <block type="activator" x="6" y="2" target="14"/> <block type="blocker" x="3" y="1"/> <block type="activator" x="6" y="0" target="16"/> <block type="blocker" x="4" y="2"/> <block type="activator" x="6" y="6" target="18"/> <block type="blocker" x="1" y="4"/> <block type="activator" x="0" y="6" target="20"/> <block type="blocker" x="5" y="5"/> <block type="activator" x="0" y="0" target="22"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="5" y="1"/> <block type="blocker" x="5" y="2"/> <block type="blocker" x="3" y="2"/> <block type="activator" x="6" y="4" target="28"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="1" y="3"/> <block type="blocker" x="1" y="5"/> <block type="blocker" x="2" y="5"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="4" y="5"/> <block type="blocker" x="5" y="4"/> <path> <point x="6" y="6"/> <point x="5" y="6"/> <point x="5" y="5"/> </path> <path> <point x="6" y="4"/> <point x="6" y="4.25"/> <point x="4.5" y="4.25"/> <point x="4.5" y="3.25"/> <point x="4" y="3.25"/> <point x="4" y="3"/> </path> <path> <point x="6" y="2"/> <point x="6" y="2.25"/> <point x="3" y="2.25"/> <point x="3" y="2"/> </path> <path> <point x="6" y="0"/> <point x="5.5" y="0"/> <point x="5.5" y="3.25"/> <point x="5" y="3.25"/> <point x="5" y="3"/> </path> <path> <point x="4" y="0"/> <point x="3.5" y="0"/> <point x="3.5" y="1"/> <point x="3" y="1"/> </path> <path> <point x="2" y="0"/> <point x="1.5" y="0"/> <point x="1.5" y="3"/> <point x="2" y="3"/> </path> <path> <point x="0" y="0"/> <point x="0" y="1"/> <point x="1" y="1"/> </path> <path> <point x="0" y="2"/> <point x="0" y="2.25"/> <point x="1" y="2.25"/> <point x="1" y="3"/> </path> <path> <point x="0" y="4"/> <point x="0" y="4.25"/> <point x="3" y="4.25"/> <point x="3" y="4"/> </path> <path> <point x="4" y="6"/> <point x="4" y="6.25"/> <point x="3" y="6.25"/> <point x="3" y="5"/> </path> <path> <point x="2" y="6"/> <point x="1.5" y="6"/> <point x="1.5" y="5"/> <point x="2" y="5"/> </path> <path> <point x="1" y="5"/> <point x="1" y="6"/> <point x="0" y="6"/> </path> <port x="7" y="3"/> <port x="7" y="2"/> <port x="7" y="0"/> <port x="7" y="4"/> <port x="7" y="6"/> <port x="-1" y="0"/> <port x="-1" y="4"/> <port x="-1" y="6"/> <port x="-1" y="2"/> <port x="-1" y="3"/> <port x="0" y="-1"/> <port x="0" y="7"/> <port x="2" y="7"/> <port x="4" y="7"/> <port x="3" y="7"/> <port x="6" y="7"/> <port x="6" y="-1"/> <port x="4" y="-1"/> <port x="3" y="-1"/> <port x="2" y="-1"/> </level> ; public static const Bonus4:XML = <level size="0" title="Bonus 4: Charlie's Mom's Recipe"> <summary><![CDATA[Ingredients: 2 ripe persimmons, sliced thin 4 sheets puff pastry, thawed 2 tbsp ground cinnamon 2 tbsp ground ginger 4 tbsp sugar 3 tbsp butter, melted Preparation: Preheat oven to 250 degrees F. Place pastry sheets on greased baking trays. Brush the puff pastry with melted butter and sprinkle with half the cinnamon, ginger, and sugar. Lay out the persimmon slices on the pastry, leaving a margin around the edge of the sheet for a crust. Sprinkle on the remaining cinnamon, ginger, and sugar. Bake for 15 minutes, or until golden brown and carmelized.]]></summary> </level> ; public static const Chap1Intro:String = ((((((((((((("-----------------------------------\n" + "Sent: Aug. 23, 2010 05:34:09 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: proper use of your skillz\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I got an idea for you. You're like a genius when it comes to cracking computer security, right? Well, I totally know what you should do.\n\n") + "You know Locha? That dictatorship or whatever in the middle of the ocean? They've got this big-ass firewall keeping their people from seeing stuff on the internet about how they're oppressed and junk.\n\n") + "You should totally crack into it, look around, spread some freedom up in there. Screwing up people's websites and stealing Facebook passwords is for kids. You got to fight the power! That's what a real white-hat computer cracker does. Dispense some good old American freedom.\n\n") + "Just try not to bomb anyone or anything. :)\n\n") + "peace,\n") + "sk3tch\n\n") + "P.S.: By the way, I talked to a friend of mine who runs a zombie bot net. He's willing to run one Distributed Denial of Service on a system. So if you have a ton of trouble cracking a system, just use your DDOS. But you only get one, so use it wisely, all right?\n"); public static const PostPerimeter:String = (((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 09:21:26 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: keeping secrets\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I've been doing some poking around with some people I know, trying to figure out how much the g-men have been able to figure out about you. Don't worry; the two of us have been talking through 256-bit elliptic curve cryptography, so I'm not gonna give you away. From what I can tell, the Lochans haven't been at all helpful to the US, and our government still thinks the Lochans masterminded this whole thing.\n\n") + "Regardless, I got a bunch of folks going over any tracks you might have left, and a bunch of other places just to throw people off the scent. They don't, you know, know exactly what they're covering up or for who, but they're pretty good at what they do. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const Police:XML = <level size="7" title="Lioa City Police Dispatch System"> <summary>The police network of the capital city, Lioa, is susceptible to a virus that will circulate through the dispatch system and let you control radio to officers in the field. With control over police communication, you will be able to help Li Yolei escape.</summary> <block type="goal" x="6" y="3"/> <block type="blocker" x="1" y="3"/> <block type="blocker" x="5" y="3"/> <block type="activator" x="1" y="0" target="2"/> <block type="activator" x="5" y="6" target="1"/> <block type="divider" x="2" y="1"/> <block type="divider" x="2" y="2"/> <block type="divider" x="2" y="4"/> <block type="divider" x="2" y="6"/> <block type="divider" x="4" y="0"/> <block type="divider" x="4" y="2"/> <block type="divider" x="4" y="4"/> <block type="divider" x="4" y="5"/> <block type="latch" x="3" y="1"/> <block type="latch" x="3" y="3"/> <block type="latch" x="3" y="5"/> <path> <point x="1" y="0"/> <point x="3.5" y="0"/> <point x="3.5" y="3"/> <point x="5" y="3"/> </path> <path> <point x="5" y="6"/> <point x="2.5" y="6"/> <point x="2.5" y="3"/> <point x="1" y="3"/> </path> <port x="-1" y="3"/> <port x="-1" y="4"/> <port x="3" y="-1"/> <port x="3" y="7"/> <port x="7" y="4"/> </level> ; public static const BB:XML = <level size="7" title="LChan Bulletin Board"> <summary>The LChan bulletin board is an independent online forum for all of Locha. It's the most permissive site allowed by the government; some say they allow it to exist to identify dissidents. It is difficult for outsiders to access the private boards.</summary> <block type="goal" x="3" y="2"/> <block type="blocker" x="0" y="1"/> <block type="blocker" x="0" y="6"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="2" y="6"/> <block type="blocker" x="3" y="3"/> <block type="blocker" x="3" y="5"/> <block type="blocker" x="3" y="6"/> <block type="blocker" x="4" y="0"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="4" y="2"/> <block type="activator" x="0" y="5" target="1"/> <block type="activator" x="1" y="1" target="9"/> <block type="activator" x="1" y="5" target="6"/> <block type="activator" x="2" y="5" target="2"/> <block type="activator" x="5" y="1" target="8"/> <block type="key" x="3" y="4" target="0"/> <block type="divider" x="4" y="3"/> <block type="divider" x="5" y="5"/> <block type="latch" x="4" y="5"/> <block type="latch" x="6" y="1"/> <block type="latch" x="6" y="3"/> <block type="latch" x="6" y="5"/> <path> <point x="0" y="1"/> <point x="0" y="5"/> </path> <path> <point x="0" y="6"/> <point x="0.5" y="6"/> <point x="0.5" y="4.5"/> <point x="2" y="4.5"/> <point x="2" y="5"/> </path> <path> <point x="1" y="1"/> <point x="1" y="4"/> <point x="2.5" y="4"/> <point x="2.5" y="6"/> <point x="3" y="6"/> </path> <path> <point x="1" y="5"/> <point x="1" y="6"/> <point x="2" y="6"/> </path> <path> <point x="5" y="1"/> <point x="5" y="4"/> <point x="3.5" y="4"/> <point x="3.5" y="5"/> <point x="3" y="5"/> </path> <port x="3" y="-1" locked="true"/> <port x="-1" y="1"/> <port x="7" y="1"/> <port x="0" y="7"/> <port x="1" y="7"/> <port x="2" y="7"/> <port x="3" y="7"/> <port x="4" y="7"/> <port x="5" y="7"/> <port x="6" y="7"/> </level> ; public static const CentralControl:XML = <level size="7" title="Central Control"> <summary>With control of all of the major systems of Camp Zulu, you will be able to engineer the escape of Li Yolei and Gadao Koi. All that remains is to gain access to the facility's central control server to coordinate the pair's release.</summary> <block type="blocker" x="0" y="0"/> <block type="blocker" x="6" y="0"/> <block type="blocker" x="6" y="6"/> <block type="blocker" x="0" y="6"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="4" y="4"/> <block type="blocker" x="6" y="3"/> <block type="blocker" x="5" y="3"/> <block type="blocker" x="3" y="0"/> <block type="blocker" x="3" y="6"/> <block type="activator" x="3" y="1" target="13"/> <block type="blocker" x="3" y="2"/> <block type="activator" x="0" y="3" target="15"/> <block type="blocker" x="1" y="1"/> <block type="activator" x="5" y="5" target="17"/> <block type="blocker" x="1" y="3"/> <block type="latch" x="1" y="5"/> <block type="latch" x="2" y="2"/> <block type="divider" x="4" y="2"/> <block type="divider" x="4" y="3"/> <block type="goal" x="3" y="3"/> <block type="latch" x="5" y="1"/> <block type="key" x="3" y="5" target="0"/> <path> <point x="3" y="1"/> <point x="3" y="2"/> </path> <path> <point x="0" y="3"/> <point x="0" y="2.25"/> <point x="1.5" y="2.25"/> <point x="1.5" y="1"/> <point x="1" y="1"/> </path> <path> <point x="5" y="5"/> <point x="4.5" y="5"/> <point x="4.5" y="3.25"/> <point x="1" y="3.25"/> <point x="1" y="3"/> </path> <port x="5" y="-1" locked="true"/> <port x="1" y="-1"/> <port x="2" y="-1"/> <port x="-1" y="2"/> <port x="-1" y="3"/> <port x="-1" y="5"/> <port x="5" y="7"/> <port x="7" y="1"/> </level> ; public static const PostCellPhone:String = (((((((((((("-----------------------------------\n" + "Sent: Sep. 1, 2010 20:28:26 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: on his trail\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I knew you'd come through for me. I've got remote access to my phone. I've been looking through the the call logs and the photos, and it's not making much sense. Gadao Koi's called a junkyard, a delivery company... it doesn't fit together with what I'd expect a terrorist or a spy to do. He's been doing some sort of chemistry; one of the pictures the phone automatically took seems to be of a blender full of a gray powder, with some aluminum foil nearby...\n\n") + "Holy crap. I just realized what he's making. Thermite. Rust from old metal, aluminum powder from foil... and, yeah, one of the pictures shows what could be a fireworks package, for ignition. This is really bad. Thermite's easy to make -- I mean, I made some when I was, like, twelve -- and it burns hot enough to melt, like, anything. He could weld metal, set fire to stuff, open a jail cell...\n\n") + "We gotta figure out what he's planning to do with the thermite. According to the GPS locator in my phone, he's at the main Charlotte library. The last photo my cell took shows the public computer area. If you act quickly, you can crack into their internal network and figure out what he's doing.\n\n") + "See if you can clear my overdue fines while you're in there. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const PostCourier:String = (((((((((((("-----------------------------------\n" + "Sent: Sep. 1, 2010 22:23:12 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: holy crap\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I've taken a look through the courier service's scheduling system. Looks like they had a courier that went out on a gig and never came back yesterday. They probably didn't think it was weird; I've had some friends that worked for companies like that, and they were all slackers and stuff. It's like being a pizza delivery guy, except you can't eat the pizza if you get lost and hungry. Not that I ever did that or anything when I was doing pizza delivery. That'd be uncool.\n\n") + "So, anyway, the last address the guy was supposed to deliver to was a cheap-ass hotel room. Probably where Gadao spent the night. Jump the courier, steal his outfit, do a little forgery to put Gadao's photo on his ID badge. Easy. I just hope our friend tied him up in the closet instead of killing him.\n\n") + "But we can't worry about that right now. With a uniform and a badge from a real courier service, Gadao's not gonna raise an eyebrow even if he wheels a whole handcart of stuff into the Ameribank Building downtown. Even if they test for explosives, they won't notice anything; since he's using thermite, all they'll see is rust, aluminum, and magnesium. And none of those'll trip any alarms.\n\n") + "We don't know exactly what he's going to do, but he's probably going to do it soon. You've got to crack into the Ameribank Building's security system once you're sure you've totally fixed whatever Gadao did to the fire department computers. Hopefully, we can get him on camera and stay one step ahead of him. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const PostMotorPool:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 14:01:05 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: our new friends\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I thought you might wanna know what Charlie and I have been able to dig up about our two new friends, what with you breaking them out of jail and all. Li Yolei's a political blogger, but his day job was working at the Historical Museum in Liao. Seems he was born just after the big 1974 coup, and his parents were a pair of college professors back before all the colleges got shut down. The BBC did a story on Li's museum a few years ago. Seems the guys in charge of the country replaced all the stuff having to do with kings and stuff with soldiery stuff, instead. Swords and junk. Anyway, I figure if you work in a history museum full of fake history, you'll want to bitch about it to someone.\n\n") + "As for his friend, Gadao Koi, I don't really know much. His parents were caught up in the failed 1999 revolution, but they were never anything big. The only thing I could find on Gadao himself was his arrest report in the local propaganda rag. He was arrested last month for loitering and sedition, which probably meant he was hanging out in a bar and said the wrong things to the wrong people. Regardless, he's Li's friend or something, and for some reason he was allowed to visit Li during the whole house arrest thing. Maybe they figured there wasn't any harm in it, or something. Anyway, seems Gadao speaks pretty good English and is sort of an American culture buff. We managed to grab one of his suitcases at the baggage claim in Charlotte, and he had tourist stuff in it, American clothes, that sort of thing. I bet he'll be happy to be free!\n\n") + "Good luck with the rest of the cracking. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const AmElevators:XML = <level size="9" title="Ameribank Building Elevators"> <summary>Gadao Koi is attempting to escape via a service elevator that will take him directly to the parking deck of the building and bypass the approaching police. You must stop the elevator and trap Koi.</summary> <block type="blocker" x="3" y="3"/> <block type="blocker" x="3" y="5"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="4" y="5"/> <block type="blocker" x="5" y="5"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="5" y="3"/> <block type="blocker" x="4" y="3"/> <block type="goal" x="4" y="2"/> <block type="latch" x="4" y="1"/> <block type="latch" x="4" y="0"/> <block type="key" x="4" y="8" target="0"/> <block type="key" x="8" y="6" target="1"/> <block type="key" x="0" y="6" target="2"/> <block type="latch" x="8" y="8"/> <block type="latch" x="8" y="7"/> <block type="divider" x="7" y="8"/> <block type="divider" x="8" y="3"/> <block type="divider" x="7" y="4"/> <block type="latch" x="8" y="4"/> <block type="blocker" x="8" y="5"/> <block type="activator" x="1" y="4" target="22"/> <block type="blocker" x="0" y="7"/> <block type="activator" x="1" y="5" target="24"/> <block type="blocker" x="0" y="4"/> <block type="activator" x="0" y="3" target="26"/> <block type="blocker" x="1" y="6"/> <block type="activator" x="2" y="8" target="28"/> <block type="blocker" x="0" y="8"/> <block type="divider" x="5" y="7"/> <block type="divider" x="4" y="7"/> <block type="latch" x="3" y="7"/> <block type="activator" x="3" y="6" target="33"/> <block type="blocker" x="5" y="8"/> <path> <point x="1" y="4"/> <point x="0.5" y="4"/> <point x="0.5" y="7"/> <point x="0" y="7"/> </path> <path> <point x="0" y="4"/> <point x="0" y="5"/> <point x="1" y="5"/> </path> <path> <point x="0" y="3"/> <point x="0" y="3.25"/> <point x="1.5" y="3.25"/> <point x="1.5" y="6"/> <point x="1" y="6"/> </path> <path> <point x="2" y="8"/> <point x="2" y="8.25"/> <point x="0" y="8.25"/> <point x="0" y="8"/> </path> <path> <point x="3" y="6"/> <point x="3" y="6.25"/> <point x="4.5" y="6.25"/> <point x="4.5" y="8"/> <point x="5" y="8"/> </path> <port x="4" y="-1" locked="true"/> <port x="9" y="1" locked="true"/> <port x="-1" y="0" locked="true"/> <port x="8" y="9"/> <port x="9" y="7"/> <port x="9" y="4"/> <port x="9" y="3"/> <port x="2" y="9"/> <port x="1" y="9"/> <port x="-1" y="3"/> <port x="-1" y="4"/> <port x="-1" y="7"/> <port x="5" y="9"/> <port x="3" y="9"/> <port x="0" y="9"/> </level> ; public static const T0:XML = <level size="5" title="The Root of the Problem"> <summary>Click an orange Port to fire a packet. Hit the green Root Node in the center to crack the security and proceed.</summary> <block type="goal" x="2" y="2"/> <port x="-1" y="1"/> <port x="5" y="2"/> </level> ; public static const T2:XML = <level size="5" title="Misalignment"> <summary>The Root Node is not always in the center. There can be any number of Ports. Purple Divider Nodes duplicate packets, sending two new packets in opposite directions.</summary> <block type="goal" x="2" y="1"/> <block type="blocker" x="1" y="1"/> <block type="divider" x="4" y="4"/> <block type="divider" x="2" y="4"/> <block type="divider" x="3" y="1"/> <port x="-1" y="1"/> <port x="5" y="1"/> <port x="4" y="5"/> </level> ; public static const T3:XML = <level size="5" title="Buffer Overflow"> <summary>The yellow sphere is a Buffer Node. Hit it with a packet to overflow and disable the connected Blocker Node. It will only stay disabled for a limited time, so plan ahead and think fast.</summary> <block type="divider" x="0" y="2"/> <block type="activator" x="3" y="2" target="2"/> <block type="blocker" x="1" y="2"/> <block type="goal" x="2" y="2"/> <path> <point x="3" y="2"/> <point x="3" y="3"/> <point x="1" y="3"/> <point x="1" y="2"/> </path> <port x="5" y="2"/> <port x="0" y="-1"/> </level> ; public static const T4:XML = <level size="5" title="Lack of Direction"> <summary>Not all Buffer Nodes can be overflowed. Not all Blocker Nodes can be disabled. Sometimes the paths connecting nodes are hidden. By hitting a blue Directory Node, you can make them appear.</summary> <block type="goal" x="2" y="2"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="2" y="3"/> <block type="activator" x="4" y="0" target="3"/> <block type="activator" x="1" y="1" target="1"/> <block type="activator" x="1" y="3" target="4"/> <block type="activator" x="3" y="4" target="2"/> <block type="directory" x="0" y="4"/> <path> <point x="1" y="1"/> <point x="1" y="2"/> </path> <path> <point x="1" y="3"/> <point x="1" y="3.75"/> <point x="2" y="3.75"/> <point x="2" y="3"/> </path> <path> <point x="3" y="4"/> <point x="3" y="2"/> </path> <path> <point x="4" y="0"/> <point x="4" y="4.25"/> <point x="0.5" y="4.25"/> <point x="0.5" y="0"/> <point x="2" y="0"/> <point x="2" y="1"/> </path> <port x="2" y="-1"/> <port x="4" y="5"/> <port x="0" y="-1"/> <port x="5" y="4"/> </level> ; public static const T5:XML = <level size="5" title="Simple Algorithm"> <summary>Sometimes you must take several steps to gain access to the Root Node.</summary> <block type="goal" x="2" y="2"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="1" y="2"/> <block type="activator" x="4" y="2" target="1"/> <block type="activator" x="3" y="4" target="2"/> <block type="divider" x="3" y="0"/> <path> <point x="3" y="1"/> <point x="4" y="1"/> <point x="4" y="2"/> </path> <path> <point x="1" y="2"/> <point x="1" y="4"/> <point x="3" y="4"/> </path> <port x="-1" y="2"/> <port x="5" y="2"/> <port x="-1" y="0"/> </level> ; public static const T6:XML = <level size="5" title="Flip the Flag"> <summary>Cyan Latch Nodes can be crashed with a packet, but will quickly recover.</summary> <block type="goal" x="2" y="2"/> <block type="latch" x="1" y="2"/> <block type="latch" x="0" y="2"/> <block type="activator" x="3" y="1" target="4"/> <block type="blocker" x="1" y="1"/> <block type="latch" x="4" y="1"/> <path> <point x="3" y="1"/> <point x="3" y="1.25"/> <point x="1" y="1.25"/> <point x="1" y="1"/> </path> <port x="-1" y="2"/> <port x="1" y="-1"/> <port x="0" y="5"/> <port x="5" y="1"/> <port x="4" y="-1"/> </level> ; public static const T7:XML = <level size="5" title="Knocking on Heaven's Door"> <summary>Some ports are hidden. By hitting a white Port Knock Key, you can discover their location.</summary> <block type="goal" x="1" y="3"/> <block type="key" x="3" y="1" target="0"/> <block type="latch" x="2" y="1"/> <block type="activator" x="2" y="4" target="4"/> <block type="blocker" x="2" y="3"/> <path> <point x="2" y="4"/> <point x="2.5" y="4"/> <point x="2.5" y="3"/> <point x="2" y="3"/> </path> <port x="5" y="3" locked="true"/> <port x="-1" y="1"/> <port x="2" y="-1"/> <port x="-1" y="4"/> </level> ; public static const T1:XML = <level size="5" title="Blocking the Way"> <summary>Red Blocker Nodes prevent packets from passing. You will need to find a way around them.</summary> <block type="goal" x="2" y="2"/> <block type="blocker" x="1" y="2"/> <port x="-1" y="2"/> <port x="5" y="2"/> </level> ; public static const PostAmFire:String = (((((((((((("-----------------------------------\n" + "Sent: Sep. 1, 2010 23:24:36 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: he's on the run\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? We've got a runner! The security folks found the first pack that Gadao dropped off, and they've sounded an evacuation order. From the chatter on the radios, it sounds like Gadao has a timer set on each of the packages, and the rent-a-cops thought the one they found was a bomb. Well, I guess they're not too far off.\n\n") + "Anyway, that means that Gadao knows they're on to him. I've been following him on the cameras. He's still got half his packages, and he's gone back into a maintenance area that's off-limits during an evacuation. He's heading for a service elevator that heads right for the parking garage that's attached to the building.\n\n") + "From what I can see of the security, they're not going to check that area until it's waaaaay too late. So you've gotta stop him, or he's gonna get away.\n\n") + "The security system has a connection to the elevator routing computer. You can crack into that and stop his elevator between floors. That way, he'll be stuck until the cops get there. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const PostF0:String = ((((((((((((("-----------------------------------\n" + "Sent: Aug. 24, 2010 12:39:45 GMT\n") + "From: newsbot (noreply@news.crk)\n") + "To: me\n") + "Subject: Article Search Result\n") + "-----------------------------------\n") + "\n") + "(Results of search for string: Locha. 1 new article found.)\n\n") + "WASHINGTON, D.C.\n\n") + "In a press conference at the White House today, the U.S. Department of State announced that it has added the island nation of Locha to its list of State Sponsors of Terrorism. State Department representatives cited the 2009 hijacking of the oil tanker Hiigara and last month's car bombing in Bangaluru, India as specific incidents in which the Lochan government is believed to have been directly involved.\n\n") + "\"The Lochan government does not act with the will of its people when it assists in these deplorable acts,\" said State Department representative Chell Johnson. \"The government in Lioa has repeatedly refused to cooperate in investigations of these events, and has publicly announced approval of the acts, which it claims were perpetuated by independent agents unaffiliated with the Lochan government.\"\n\n") + "The State Department has long maintained that the Lochan government should be replaced in a free and open democratic election. The current ruling party has been in control since the 1974 coup that overthrew the last King of Locha, Tio IV.\n\n") + "The Lochan government has yet to issue a public response to this announcement. As a consequence of the designation, several financial and diplomatic restrictions will be placed upon U.S. trade and communication with the nation.\n\n") + "(This is an automated message. Please do not reply to this message.)\n"); public static const T8:XML = <level size="5" title="Memory Check"> <summary>This system contains all concepts introduced so far. When you have reached the root node, you are ready to go through the Story and Challenge modes!</summary> <block type="goal" x="2" y="2"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="2" y="3"/> <block type="divider" x="0" y="1"/> <block type="divider" x="4" y="1"/> <block type="divider" x="4" y="2"/> <block type="divider" x="0" y="3"/> <block type="divider" x="1" y="3"/> <block type="divider" x="1" y="4"/> <block type="divider" x="2" y="4"/> <block type="activator" x="4" y="4" target="4"/> <block type="activator" x="3" y="4" target="2"/> <block type="latch" x="3" y="0"/> <block type="key" x="1" y="0" target="5"/> <block type="directory" x="4" y="0"/> <path> <point x="1" y="1"/> <point x="3" y="1"/> <point x="3" y="4"/> </path> <path> <point x="2" y="3"/> <point x="4" y="3"/> <point x="4" y="4"/> </path> <port x="-1" y="2"/> <port x="2" y="-1"/> <port x="3" y="-1"/> <port x="5" y="2"/> <port x="1" y="-1"/> <port x="5" y="0" locked="true"/> </level> ; public static const PostF2:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 24, 2010 14:03:11 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: w00t! you're in!\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I got your message! Gratz! Now that you're inside the Lochan firewall, you can access any of the sites they don't let the rest of the world see. Don't just go messing around with stuff randomly, though.\n\n") + "From what I can figure out from looking around on the internet, you should check out a site called LChan. It's Locha's version of a certain famous online bulletin board, and it's the best place to find out some choice information on what's going on.\n\n") + "One problem, though. All the really interesting stuff is gonna be on the private political discussion boards. The government only lets registered users view and post on those, so that it can keep tabs on anyone who causes trouble. No worries, though. It just means you'll have to hack their account system. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const Chap3Intro:String = ((((((((((((("-----------------------------------\n" + "Sent: Sep. 1, 2010 11:59:02 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: here's the plan\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I sorta haven't slept since Gadao ditched us. Li swears he had no idea his \"friend\" was working for the man, and I believe him. That's the Lochan man, not the American man, just to be clear.\n\n") + "In the meanwhile, a bunch of folks in the local hacker circle have noticed some weird stuff going down. Someone's been busy poking around at a bunch of important systems in town, checking them for vulnerabilities. It looks like Gadao's a security cracker, too. But I've got a way to find him.\n\n") + "I lost my cell phone. When we got home the night we picked up Li, I realized it wasn't in the outside pocket of my bag where I always keep it. I'm also missing a few bills from my wallet. I figure Gadao lifted the phone and the cash to get himself started. The thing is that I hacked my phone, got a neat little install of Linux going. Also got it to make a little photo diary; the phone snaps a picture every hour. What you gotta do is crack into the phone and get access to the photos and to the GPS system. That way, we can figure out where he is and what he's been doing.\n\n") + "Oh, and I told my friend with the zombie bot net that it was a matter of national security, and he said he'd give you one more DDOS in case you run into trouble.\n\n") + "We might clean up this mess after all. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const PostF1:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 24, 2010 13:20:14 GMT\n") + "From: spamobliterator\n") + "To: me\n") + "Subject: Spam Quarantine Summary\n") + "-----------------------------------\n") + "\n") + "This is your daily report from Spam Obliterator, the most ruthless anti-spam filter permitted for civilian use by the NSA. Today, Spam Obliterator has blocked one message. Summary follows.\n\n") + "Message dated 8/24/2010 08:54:00 from daphne9976@yipee.crk with subject \"Your asistince reqd\":\n") + "Good MORNIN. I am pleased Mrs. AI KAILYU, late wife to GENERAL LUO KAILYU of Lochan Army Forces. I am with writing you for rqeuest of your help. Before husband death in 1999 revolution, he hide away money in sum of $20.1 MILLION AMERICAN DOLLORS. My and me family were exiled to MADAGASCAR, where we resided today. Because you has american Band Account, you are in unique proposition to help me and family.\n\n") + "I will share money with you, 50 and 50, giving you $12.3 AMERICAN DOLORES. You simple have to present me with your bank information and account numbres. I will transf(...character limit reached)\n\n") + "(If you would like to review the remainder of this message, go to your Spam Obliterator dashboard. This e-mail will be automatically deleted from the quarantine folder in 30 days.)\n"); public static const PostAmSecurity:String = (((((((((((("-----------------------------------\n" + "Sent: Sep. 1, 2010 22:58:43 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: we're onto him\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I'm connected to the cameras, and I just spotted Gadao coming into the building with a big-ass bag. He's gotta have at least twenty pounds of thermite in there, and it looks like he's got it split up into totally not-suspicious packages.\n\n") + "Chances are, he's got strategic places he's gonna deliver them. Maybe high-profile companies and departments, maybe just really flammable areas. Hell, if he wanted to he could probably melt right through an elevator cable or a steel door. I'm gonna try and keep an eye on him with the cameras, and use the security communication system to report the packages as suspicious as soon as he drops each one off. We don't want to tip him off, or he might do something crazy.\n\n") + "I've got a different job for you, though. I had a hunch, and checked on the status log that the security system gets from the fire suppression system. It looks like when he cracked into their servers, he put a virus in the system. If one of those packs of incendiaries goes off, it'll burn unchecked. No water, no foam, not even some guy blowing on it really hard.\n\n") + "Get into that fire supression system and get it working again. I think we've almost got him beat! :)\n\n") + "peace,\n") + "sk3tch\n"); public static const PostFireDept:String = (((((((((((("-----------------------------------\n" + "Sent: Sep. 1, 2010 22:17:04 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: ok, awesome\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? Nicely done on that cleanup. Looks like Gadao tried to mess with the fire department's dispatch service, to screw up any calls they had in the uptown area. I think you fixed it, but if there had been a fire in central Charlotte, the trucks never would have gotten there in time.\n\n") + "It's kind of weird, actually. A lot of the tricks he used were the same tricks you used to crack into the Lochan police system a week ago. Either he's copying what you did, or he's just got a pretty similar style. It might help keep the feds' attention off of you when this is all over.\n\n") + "With the fire department back online, we've got a little margin for error in case things go wrong. We still need to figure out just what Gadao's planning to do with Ameribank, but it's got to be something at their uptown headquarters.\n\n") + "We should be able to use the information from the courier service's computers to plan our next move. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const C00:XML = <level size="7" title="Cool Blue"> <summary>Nothing but latch blocks.</summary> <block type="goal" x="3" y="3"/> <block type="latch" x="3" y="2"/> <block type="latch" x="4" y="3"/> <block type="latch" x="2" y="3"/> <block type="latch" x="3" y="4"/> <block type="latch" x="2" y="5"/> <block type="latch" x="1" y="4"/> <block type="latch" x="1" y="2"/> <block type="latch" x="2" y="1"/> <block type="latch" x="4" y="1"/> <block type="latch" x="5" y="2"/> <block type="latch" x="4" y="5"/> <block type="latch" x="5" y="4"/> <block type="latch" x="6" y="5"/> <block type="latch" x="5" y="6"/> <block type="latch" x="3" y="6"/> <block type="latch" x="1" y="6"/> <block type="latch" x="0" y="5"/> <block type="latch" x="0" y="3"/> <block type="latch" x="0" y="1"/> <block type="latch" x="1" y="0"/> <block type="latch" x="3" y="0"/> <block type="latch" x="5" y="0"/> <block type="latch" x="6" y="1"/> <block type="latch" x="6" y="3"/> <port x="7" y="3"/> <port x="7" y="1"/> <port x="6" y="-1"/> <port x="4" y="-1"/> <port x="7" y="5"/> <port x="6" y="7"/> <port x="4" y="7"/> <port x="2" y="7"/> <port x="2" y="-1"/> <port x="0" y="-1"/> <port x="0" y="7"/> <port x="-1" y="5"/> <port x="-1" y="3"/> <port x="-1" y="1"/> </level> ; public static const C01:XML = <level size="7" title="Branches"> <summary>All you need is more ports.</summary> <block type="goal" x="3" y="3"/> <block type="divider" x="3" y="1"/> <block type="divider" x="5" y="1"/> <block type="key" x="5" y="5" target="0"/> <block type="divider" x="6" y="5"/> <block type="divider" x="6" y="2"/> <block type="key" x="1" y="4" target="1"/> <block type="divider" x="2" y="6"/> <block type="divider" x="1" y="6"/> <block type="key" x="0" y="1" target="2"/> <block type="divider" x="0" y="0"/> <block type="divider" x="2" y="0"/> <block type="key" x="4" y="2" target="3"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="5" y="4"/> <block type="key" x="4" y="6" target="9"/> <block type="divider" x="0" y="3"/> <block type="blocker" x="2" y="2"/> <block type="key" x="4" y="0" target="10"/> <block type="key" x="0" y="6" target="11"/> <block type="blocker" x="4" y="5"/> <block type="divider" x="3" y="5"/> <block type="latch" x="3" y="4"/> <block type="divider" x="0" y="2"/> <block type="key" x="1" y="2" target="12"/> <block type="latch" x="5" y="6"/> <port x="5" y="-1" locked="true"/> <port x="7" y="2" locked="true"/> <port x="2" y="7" locked="true"/> <port x="2" y="-1" locked="true"/> <port x="6" y="-1"/> <port x="1" y="7"/> <port x="0" y="-1"/> <port x="3" y="-1"/> <port x="7" y="1"/> <port x="-1" y="0" locked="true"/> <port x="-1" y="3" locked="true"/> <port x="-1" y="5" locked="true"/> <port x="7" y="6" locked="true"/> </level> ; public static const C02:XML = <level size="9" title="Mysteries of the Ancients"> <summary>This puzzle was found in 1874, etched into the ground at Nazca in a diagram a mile wide.</summary> <block type="divider" x="6" y="4"/> <block type="divider" x="2" y="4"/> <block type="divider" x="6" y="0"/> <block type="divider" x="2" y="0"/> <block type="divider" x="2" y="8"/> <block type="divider" x="6" y="8"/> <block type="activator" x="7" y="8" target="7"/> <block type="blocker" x="6" y="6"/> <block type="activator" x="8" y="0" target="9"/> <block type="blocker" x="6" y="2"/> <block type="activator" x="1" y="8" target="11"/> <block type="blocker" x="2" y="6"/> <block type="activator" x="0" y="0" target="13"/> <block type="blocker" x="2" y="2"/> <block type="divider" x="4" y="0"/> <block type="divider" x="4" y="8"/> <block type="latch" x="4" y="2"/> <block type="blocker" x="5" y="1"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="3" y="3"/> <block type="blocker" x="5" y="2"/> <block type="blocker" x="5" y="3"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="3" y="5"/> <block type="blocker" x="3" y="6"/> <block type="blocker" x="5" y="5"/> <block type="blocker" x="5" y="6"/> <block type="key" x="4" y="6" target="6"/> <block type="blocker" x="3" y="7"/> <block type="blocker" x="5" y="7"/> <block type="latch" x="4" y="1"/> <block type="goal" x="4" y="3"/> <block type="key" x="4" y="7" target="7"/> <block type="latch" x="4" y="4"/> <block type="latch" x="4" y="5"/> <path> <point x="0" y="0"/> <point x="0" y="2"/> <point x="2" y="2"/> </path> <path> <point x="1" y="8"/> <point x="1" y="6"/> <point x="2" y="6"/> </path> <path> <point x="8" y="0"/> <point x="8" y="2"/> <point x="6" y="2"/> </path> <path> <point x="7" y="8"/> <point x="7" y="6"/> <point x="6" y="6"/> </path> <port x="8" y="9"/> <port x="7" y="-1"/> <port x="1" y="-1"/> <port x="0" y="9"/> <port x="-1" y="4"/> <port x="9" y="4"/> <port x="2" y="-1" locked="true"/> <port x="6" y="-1" locked="true"/> </level> ; public static const C03:XML = <level size="7" title="F You"> <summary>Please excuse my language.</summary> <block type="blocker" x="3" y="1"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="2" y="5"/> <block type="blocker" x="3" y="3"/> <block type="goal" x="1" y="3"/> <block type="activator" x="3" y="2" target="9"/> <block type="blocker" x="4" y="1"/> <block type="divider" x="4" y="0"/> <block type="divider" x="1" y="0"/> <block type="latch" x="6" y="5"/> <block type="latch" x="6" y="4"/> <block type="latch" x="5" y="2"/> <block type="key" x="3" y="5" target="3"/> <block type="key" x="6" y="3" target="4"/> <path> <point x="3" y="2"/> <point x="2.5" y="2"/> <point x="2.5" y="1.25"/> <point x="4" y="1.25"/> <point x="4" y="1"/> </path> <port x="7" y="2"/> <port x="6" y="7"/> <port x="4" y="7"/> <port x="7" y="4" locked="true"/> <port x="5" y="7" locked="true"/> <port x="7" y="5"/> </level> ; public static const C04:XML = <level size="9" title="Invaders from Space"> <summary>The UFO at the top is worth a whole lot of points. Plus, you get to save the world.</summary> <block type="blocker" x="7" y="7"/> <block type="blocker" x="4" y="7"/> <block type="blocker" x="1" y="7"/> <block type="latch" x="4" y="4"/> <block type="latch" x="0" y="4"/> <block type="divider" x="7" y="3"/> <block type="divider" x="5" y="3"/> <block type="divider" x="3" y="3"/> <block type="divider" x="1" y="3"/> <block type="divider" x="2" y="2"/> <block type="divider" x="4" y="2"/> <block type="divider" x="6" y="2"/> <block type="divider" x="8" y="2"/> <block type="divider" x="0" y="2"/> <block type="goal" x="5" y="0"/> <block type="latch" x="5" y="2"/> <block type="latch" x="7" y="2"/> <block type="latch" x="3" y="2"/> <block type="latch" x="1" y="2"/> <block type="latch" x="8" y="4"/> <block type="activator" x="0" y="1" target="21"/> <block type="blocker" x="5" y="1"/> <path> <point x="0" y="1"/> <point x="0" y="1.25"/> <point x="5" y="1.25"/> <point x="5" y="1"/> </path> <port x="6" y="9"/> <port x="5" y="9"/> <port x="3" y="9"/> <port x="2" y="9"/> <port x="0" y="9"/> <port x="8" y="9"/> </level> ; public static const Locks:XML = <level size="7" title="Lock and Door Control"> <summary>Cracking the Lock and Door Control server will allow you to unlock any doors along the escapees' path while trapping guards who might attempt to prevent the escape.</summary> <block type="goal" x="3" y="3"/> <block type="activator" x="0" y="0" target="2"/> <block type="blocker" x="1" y="0"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="4" y="0"/> <block type="latch" x="6" y="0"/> <block type="divider" x="0" y="1"/> <block type="key" x="1" y="1" target="0"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="0" y="2"/> <block type="blocker" x="0" y="4"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="2" y="5"/> <block type="blocker" x="2" y="6"/> <block type="blocker" x="4" y="6"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="6" y="4"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="6" y="2"/> <block type="key" x="5" y="1" target="1"/> <block type="latch" x="6" y="1"/> <block type="latch" x="4" y="3"/> <block type="latch" x="0" y="5"/> <block type="latch" x="6" y="5"/> <block type="activator" x="2" y="3" target="26"/> <block type="blocker" x="3" y="1"/> <block type="activator" x="3" y="4" target="28"/> <block type="blocker" x="1" y="3"/> <block type="divider" x="3" y="2"/> <block type="blocker" x="5" y="2"/> <block type="divider" x="4" y="2"/> <block type="divider" x="0" y="6"/> <block type="divider" x="1" y="6"/> <block type="key" x="1" y="5" target="2"/> <block type="activator" x="5" y="6" target="36"/> <block type="blocker" x="5" y="5"/> <block type="divider" x="6" y="6"/> <block type="key" x="4" y="5" target="3"/> <path> <point x="0" y="0"/> <point x="1" y="0"/> </path> <path> <point x="2" y="3"/> <point x="2" y="1.5"/> <point x="3" y="1.5"/> <point x="3" y="1"/> </path> <path> <point x="1" y="3"/> <point x="1.5" y="3"/> <point x="1.5" y="4"/> <point x="3" y="4"/> </path> <path> <point x="5" y="6"/> <point x="5" y="5"/> </path> <port x="7" y="3" locked="true"/> <port x="-1" y="3" locked="true"/> <port x="3" y="-1" locked="true"/> <port x="3" y="7" locked="true"/> <port x="6" y="-1"/> <port x="7" y="0"/> <port x="7" y="1"/> <port x="7" y="5"/> <port x="7" y="6"/> <port x="6" y="7"/> <port x="1" y="7"/> <port x="-1" y="5"/> <port x="-1" y="1"/> <port x="1" y="-1"/> </level> ; public static const C06:XML = <level size="7" title="Cyberquilt"> <summary>Lovingly crafted by twelve old ladies with masters' degrees in computer security.</summary> <block type="blocker" x="6" y="0"/> <block type="blocker" x="4" y="0"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="0" y="0"/> <block type="blocker" x="0" y="2"/> <block type="blocker" x="0" y="4"/> <block type="blocker" x="0" y="6"/> <block type="blocker" x="2" y="6"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="4" y="2"/> <block type="blocker" x="4" y="4"/> <block type="blocker" x="4" y="6"/> <block type="blocker" x="6" y="6"/> <block type="blocker" x="6" y="4"/> <block type="blocker" x="6" y="2"/> <block type="goal" x="3" y="3"/> <block type="latch" x="3" y="5"/> <block type="latch" x="5" y="5"/> <block type="latch" x="5" y="3"/> <block type="latch" x="5" y="1"/> <block type="latch" x="3" y="1"/> <block type="latch" x="1" y="1"/> <block type="latch" x="1" y="3"/> <block type="latch" x="1" y="5"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="5" y="4"/> <port x="7" y="3"/> <port x="-1" y="1"/> <port x="-1" y="3"/> <port x="7" y="5"/> <port x="5" y="-1"/> <port x="3" y="-1"/> <port x="1" y="7"/> <port x="3" y="7"/> <port x="5" y="7"/> </level> ; public static const C07:XML = <level size="9" title="Neutral Zone"> <summary>The sad thing is that neither side remembers what they're fighting about anymore.</summary> <block type="divider" x="4" y="8"/> <block type="divider" x="5" y="8"/> <block type="divider" x="3" y="8"/> <block type="divider" x="5" y="0"/> <block type="divider" x="3" y="0"/> <block type="latch" x="4" y="0"/> <block type="goal" x="4" y="4"/> <block type="key" x="2" y="3" target="0"/> <block type="key" x="6" y="3" target="1"/> <block type="blocker" x="6" y="4"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="6" y="0"/> <block type="blocker" x="6" y="1"/> <block type="blocker" x="6" y="2"/> <block type="blocker" x="6" y="5"/> <block type="blocker" x="6" y="6"/> <block type="blocker" x="6" y="7"/> <block type="blocker" x="6" y="8"/> <block type="blocker" x="2" y="8"/> <block type="blocker" x="2" y="7"/> <block type="blocker" x="2" y="6"/> <block type="blocker" x="2" y="5"/> <block type="blocker" x="4" y="7"/> <block type="latch" x="8" y="3"/> <block type="activator" x="7" y="6" target="28"/> <block type="blocker" x="7" y="3"/> <block type="activator" x="7" y="7" target="30"/> <block type="blocker" x="8" y="6"/> <block type="latch" x="8" y="8"/> <block type="latch" x="7" y="8"/> <block type="divider" x="7" y="0"/> <block type="activator" x="7" y="2" target="35"/> <block type="blocker" x="8" y="2"/> <block type="divider" x="0" y="3"/> <block type="divider" x="0" y="0"/> <block type="divider" x="1" y="0"/> <block type="latch" x="1" y="3"/> <block type="activator" x="0" y="7" target="41"/> <block type="blocker" x="0" y="2"/> <block type="activator" x="1" y="7" target="43"/> <block type="blocker" x="1" y="2"/> <block type="latch" x="1" y="8"/> <block type="latch" x="0" y="8"/> <path> <point x="8" y="6"/> <point x="8" y="7"/> <point x="7" y="7"/> </path> <path> <point x="7" y="6"/> <point x="6.5" y="6"/> <point x="6.5" y="3"/> <point x="7" y="3"/> </path> <path> <point x="7" y="2"/> <point x="7" y="2.25"/> <point x="8" y="2.25"/> <point x="8" y="2"/> </path> <path> <point x="0" y="7"/> <point x="0" y="7.25"/> <point x="0.5" y="7.25"/> <point x="0.5" y="2"/> <point x="0" y="2"/> </path> <path> <point x="1" y="7"/> <point x="1" y="7.25"/> <point x="1.5" y="7.25"/> <point x="1.5" y="2"/> <point x="1" y="2"/> </path> <port x="4" y="-1" locked="true"/> <port x="4" y="9" locked="true"/> <port x="9" y="3"/> <port x="-1" y="3"/> <port x="8" y="-1"/> <port x="7" y="9"/> <port x="8" y="9"/> <port x="9" y="8"/> <port x="9" y="0"/> <port x="1" y="-1"/> <port x="-1" y="7"/> <port x="-1" y="8"/> <port x="0" y="9"/> <port x="1" y="9"/> <port x="9" y="6"/> </level> ; public static const C08:XML = <level size="9" title="Barrier Firewall 2.0"> <summary>After your attack, the Lochans updated their firewall. 3/4 familiar, 1/4 new, and it's all one system now.</summary> <block type="blocker" x="0" y="0"/> <block type="blocker" x="0" y="3"/> <block type="activator" x="1" y="3" target="3"/> <block type="blocker" x="0" y="1"/> <block type="latch" x="1" y="2"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="3" y="3"/> <block type="divider" x="3" y="1"/> <block type="divider" x="3" y="2"/> <block type="divider" x="4" y="3"/> <block type="activator" x="0" y="4" target="13"/> <block type="blocker" x="2" y="4"/> <block type="divider" x="1" y="4"/> <block type="divider" x="3" y="4"/> <block type="activator" x="4" y="4" target="17"/> <block type="blocker" x="2" y="7"/> <block type="blocker" x="0" y="5"/> <block type="blocker" x="2" y="5"/> <block type="divider" x="1" y="6"/> <block type="activator" x="1" y="8" target="22"/> <block type="blocker" x="0" y="7"/> <block type="activator" x="4" y="7" target="24"/> <block type="blocker" x="2" y="6"/> <block type="blocker" x="2" y="8"/> <block type="blocker" x="0" y="8"/> <block type="key" x="4" y="6" target="5"/> <block type="goal" x="6" y="5"/> <block type="activator" x="7" y="5" target="30"/> <block type="blocker" x="6" y="6"/> <block type="latch" x="8" y="5"/> <block type="latch" x="8" y="8"/> <block type="activator" x="7" y="7" target="34"/> <block type="blocker" x="7" y="8"/> <block type="divider" x="5" y="8"/> <block type="key" x="8" y="2" target="10"/> <block type="divider" x="8" y="1"/> <block type="blocker" x="8" y="0"/> <block type="blocker" x="8" y="3"/> <block type="blocker" x="8" y="4"/> <block type="divider" x="7" y="3"/> <block type="activator" x="7" y="4" target="43"/> <block type="blocker" x="6" y="1"/> <block type="blocker" x="6" y="0"/> <block type="blocker" x="6" y="2"/> <block type="blocker" x="6" y="4"/> <block type="divider" x="5" y="2"/> <block type="latch" x="5" y="3"/> <block type="activator" x="5" y="0" target="50"/> <block type="blocker" x="6" y="3"/> <block type="latch" x="7" y="1"/> <path> <point x="1" y="3"/> <point x="0.5" y="3"/> <point x="0.5" y="1"/> <point x="0" y="1"/> </path> <path> <point x="0" y="4"/> <point x="0" y="4.25"/> <point x="2" y="4.25"/> <point x="2" y="4"/> </path> <path> <point x="4" y="4"/> <point x="4" y="4.25"/> <point x="4.5" y="4.25"/> <point x="4.5" y="7.25"/> <point x="2" y="7.25"/> <point x="2" y="7"/> </path> <path> <point x="1" y="8"/> <point x="0.5" y="8"/> <point x="0.5" y="7"/> <point x="0" y="7"/> </path> <path> <point x="4" y="7"/> <point x="3.5" y="7"/> <point x="3.5" y="6"/> <point x="2" y="6"/> </path> <path> <point x="7" y="5"/> <point x="7" y="6"/> <point x="6" y="6"/> </path> <path> <point x="7" y="7"/> <point x="7" y="8"/> </path> <path> <point x="7" y="4"/> <point x="6.5" y="4"/> <point x="6.5" y="1"/> <point x="6" y="1"/> </path> <path> <point x="5" y="0"/> <point x="5.5" y="0"/> <point x="5.5" y="3"/> <point x="6" y="3"/> </path> <port x="-1" y="1"/> <port x="-1" y="2"/> <port x="3" y="-1"/> <port x="4" y="-1"/> <port x="-1" y="7"/> <port x="6" y="9" locked="true"/> <port x="9" y="5"/> <port x="8" y="9"/> <port x="5" y="9"/> <port x="9" y="7"/> <port x="-1" y="6" locked="true"/> <port x="1" y="-1"/> <port x="3" y="9"/> </level> ; public static const C05:XML = <level size="9" title="Timing Is Everything"> <summary>Buffers don't stay overflowed forever.</summary> <block type="divider" x="8" y="0"/> <block type="divider" x="8" y="8"/> <block type="divider" x="1" y="8"/> <block type="divider" x="1" y="1"/> <block type="divider" x="7" y="1"/> <block type="divider" x="7" y="7"/> <block type="divider" x="2" y="7"/> <block type="divider" x="2" y="2"/> <block type="divider" x="6" y="2"/> <block type="divider" x="6" y="6"/> <block type="divider" x="3" y="6"/> <block type="divider" x="3" y="3"/> <block type="divider" x="5" y="3"/> <block type="divider" x="5" y="5"/> <block type="divider" x="4" y="5"/> <block type="goal" x="4" y="4"/> <block type="activator" x="0" y="4" target="17"/> <block type="blocker" x="1" y="4"/> <block type="activator" x="0" y="5" target="19"/> <block type="blocker" x="3" y="5"/> <block type="activator" x="0" y="3" target="21"/> <block type="blocker" x="2" y="3"/> <block type="activator" x="0" y="6" target="23"/> <block type="blocker" x="7" y="6"/> <block type="activator" x="0" y="7" target="25"/> <block type="blocker" x="4" y="7"/> <block type="activator" x="0" y="2" target="27"/> <block type="blocker" x="8" y="2"/> <path> <point x="0" y="4"/> <point x="0" y="4.25"/> <point x="1" y="4.25"/> <point x="1" y="4"/> </path> <path> <point x="0" y="5"/> <point x="0" y="5.25"/> <point x="3" y="5.25"/> <point x="3" y="5"/> </path> <path> <point x="0" y="3"/> </path> <path> <point x="0" y="3"/> <point x="0" y="3.25"/> <point x="2" y="3.25"/> <point x="2" y="3"/> </path> <path> <point x="0" y="6"/> <point x="0" y="6.25"/> <point x="7" y="6.25"/> <point x="7" y="6"/> </path> <path> <point x="0" y="7"/> <point x="0" y="7.25"/> <point x="4" y="7.25"/> <point x="4" y="7"/> </path> <path> <point x="0" y="2"/> <point x="0" y="2.25"/> <point x="8" y="2.25"/> <point x="8" y="2"/> </path> <port x="-1" y="0"/> <port x="-1" y="2"/> <port x="-1" y="3"/> <port x="-1" y="4"/> <port x="-1" y="5"/> <port x="-1" y="6"/> <port x="-1" y="7"/> </level> ; public static const C09:XML = <level size="9" title="Broken Entropy Machine"> <summary>This system can get quite noisy when it's working right, but it requires a certain amount of upkeep.</summary> <block type="divider" x="1" y="1"/> <block type="divider" x="3" y="1"/> <block type="divider" x="3" y="3"/> <block type="divider" x="1" y="3"/> <block type="divider" x="5" y="1"/> <block type="divider" x="5" y="3"/> <block type="divider" x="7" y="3"/> <block type="divider" x="7" y="1"/> <block type="divider" x="7" y="5"/> <block type="divider" x="5" y="5"/> <block type="divider" x="5" y="7"/> <block type="divider" x="7" y="7"/> <block type="divider" x="3" y="5"/> <block type="divider" x="3" y="7"/> <block type="divider" x="1" y="7"/> <block type="divider" x="1" y="5"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="4" y="4"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="6" y="4"/> <block type="blocker" x="7" y="4"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="4" y="2"/> <block type="blocker" x="4" y="3"/> <block type="blocker" x="4" y="5"/> <block type="blocker" x="4" y="6"/> <block type="blocker" x="4" y="7"/> <block type="latch" x="0" y="5"/> <block type="latch" x="1" y="8"/> <block type="goal" x="8" y="8"/> <block type="activator" x="3" y="0" target="33"/> <block type="blocker" x="5" y="2"/> <block type="activator" x="8" y="3" target="35"/> <block type="blocker" x="7" y="6"/> <block type="divider" x="0" y="8"/> <block type="activator" x="8" y="5" target="38"/> <block type="blocker" x="2" y="7"/> <block type="latch" x="6" y="5"/> <path> <point x="3" y="0"/> <point x="4.5" y="0"/> <point x="4.5" y="2"/> <point x="5" y="2"/> </path> <path> <point x="8" y="3"/> <point x="7.5" y="3"/> <point x="7.5" y="6"/> <point x="7" y="6"/> </path> <path> <point x="8" y="5"/> <point x="8" y="7.25"/> <point x="2" y="7.25"/> <point x="2" y="7"/> </path> <port x="-1" y="3"/> <port x="0" y="-1"/> <port x="5" y="-1"/> <port x="5" y="9"/> <port x="6" y="9"/> <port x="3" y="9"/> </level> ; public static const PostCentral:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 31, 2010 09:35:47 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: this is bad\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? Charlie and me are freaking out here. Li and Gadao got out okay, and we met them at the bus station. Li's at my place now -- he's an awesome guy -- but Gadao ditched us. Like, totally. He disappeared at the bus station, and we couldn't find him. I didn't want to make too huge of a fuss, considering the whole breaking federal laws thing we were doing. But he's gone. I haven't heard from him or anything. I'm totally freaking.\n\n") + "We dug a little deeper on Gadao last night after we got back to my place. His parents were involved in the '99 revolution, all right... on the government side. They double-crossed the rebels, actually were kinda the reason the revolution failed. Charlie says Yolei had no clue his friend was true-blue loyalist.\n\n") + "But that's where we are. Screwed. We got a Lochan agent wandering around Charlotte. We already covered up all the evidence about his escape. And we can't tell the FBI or whatever because they won't believe us unless we turn over Li Yolei, which I am so not doing. We are so totally hosed. :(\n\n") + "peace,\n") + "sk3tch\n"); public static const PostAmElevators:String = (((((((((((((("-----------------------------------\n" + "Sent: Sep. 2, 2010 12:20:13 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: hey\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? In case you haven't been watching the news, I figured I'd let you know how things turned out after you trapped Gadao last night.\n\n") + "The news said that folks got out all right. A couple of the packages went off before the firemen could get to them, but no one was hurt too bad. Apparently, one of them burned a hole through the floor of some lawyer company's lobby, and another actually took out a room full of web servers. No big losses, though.\n\n") + "Good news for us: seems Gadao sent off a little manifesto to the papers just before his escapades, ranting about how we Americans are all evil and stuff. Anyway, he specifically dissed Li Yolei, saying he was a traitor to Locha and how Li was just a tool that Gadao used to strike at the U.S. It looks like the U.S. government is believing it, too; they've said that they're looking for Li to grant him asylum. Charlie and I should be able to work out a way to turn him over without them suspecting us.\n\n") + "As for Gadao himself, well... it seems that he didn't want to be caught by the feds. They say he tried to cut his way out of the elevator using the thermite, and it... didn't work. The whole elevator was filled with flames. They say there was nothing left of him but charred bones. Hardcore. I almost feel bad for him.\n\n") + "Anyway, this whole thing goes to show you that you totally shouldn't listen to any suggestions I make. Except one. Try those persimmon pastries, really. They're awesome. :)\n\n") + "Talk to you later.\n\n") + "peace,\n") + "sk3tch\n"); public static const Library:XML = <level size="5" title="Charlotte Library, Main Branch"> <summary>Gadao Koi is currently using the computers at Charlotte's uptown library. Cracking their network will let you figure out what he's doing.</summary> <block type="goal" x="4" y="0"/> <block type="activator" x="3" y="0" target="2"/> <block type="blocker" x="4" y="1"/> <block type="latch" x="2" y="0"/> <block type="blocker" x="2" y="1"/> <block type="divider" x="3" y="2"/> <block type="latch" x="4" y="2"/> <block type="latch" x="3" y="3"/> <block type="key" x="0" y="4" target="4"/> <block type="divider" x="2" y="4"/> <block type="activator" x="0" y="2" target="11"/> <block type="blocker" x="1" y="4"/> <block type="divider" x="0" y="1"/> <block type="blocker" x="2" y="2"/> <path> <point x="3" y="0"/> <point x="3" y="1"/> <point x="4" y="1"/> </path> <path> <point x="0" y="2"/> <point x="0" y="2.25"/> <point x="1" y="2.25"/> <point x="1" y="4"/> </path> <port x="4" y="5"/> <port x="-1" y="0"/> <port x="3" y="5"/> <port x="-1" y="3"/> <port x="2" y="-1" locked="true"/> <port x="2" y="5"/> <port x="-1" y="1"/> </level> ; public static const Schedules:XML = <level size="9" title="Schedules and Policies"> <summary>The patrol schedules for guards are recorded and controlled from a special system. By cracking it, you can predict their movements and arrange their schedule to ease the escape.</summary> <block type="divider" x="6" y="0"/> <block type="divider" x="2" y="0"/> <block type="divider" x="4" y="0"/> <block type="divider" x="4" y="8"/> <block type="divider" x="8" y="8"/> <block type="latch" x="2" y="2"/> <block type="key" x="6" y="2" target="2"/> <block type="activator" x="6" y="4" target="8"/> <block type="blocker" x="2" y="6"/> <block type="goal" x="2" y="8"/> <block type="blocker" x="3" y="8"/> <block type="blocker" x="3" y="7"/> <block type="blocker" x="3" y="6"/> <block type="blocker" x="3" y="5"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="3" y="3"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="5" y="1"/> <block type="blocker" x="5" y="2"/> <block type="blocker" x="5" y="3"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="5" y="5"/> <block type="blocker" x="5" y="6"/> <block type="blocker" x="5" y="7"/> <block type="blocker" x="7" y="7"/> <block type="blocker" x="7" y="6"/> <block type="blocker" x="7" y="5"/> <block type="blocker" x="7" y="4"/> <block type="blocker" x="7" y="3"/> <block type="blocker" x="7" y="2"/> <block type="blocker" x="7" y="1"/> <block type="blocker" x="7" y="0"/> <block type="blocker" x="6" y="7"/> <block type="blocker" x="1" y="8"/> <block type="blocker" x="1" y="7"/> <block type="blocker" x="1" y="6"/> <block type="blocker" x="1" y="5"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="1" y="3"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="1" y="0"/> <block type="divider" x="8" y="3"/> <block type="activator" x="8" y="2" target="44"/> <block type="blocker" x="4" y="1"/> <block type="latch" x="4" y="2"/> <block type="latch" x="4" y="4"/> <path> <point x="6" y="4"/> <point x="6" y="6.25"/> <point x="2" y="6.25"/> <point x="2" y="6"/> </path> <path> <point x="8" y="2"/> <point x="7.5" y="2"/> <point x="7.5" y="1.25"/> <point x="4" y="1.25"/> <point x="4" y="1"/> </path> <port x="6" y="-1"/> <port x="2" y="-1"/> <port x="-1" y="2" locked="true"/> <port x="9" y="3"/> </level> ; public static const C12:XML = <level size="9" title="Tutorial"> <summary>Through advancements in the science of game design, what once took nine puzzles can now be done in one.</summary> <block type="key" x="1" y="1" target="1"/> <block type="blocker" x="3" y="1"/> <block type="key" x="4" y="1" target="2"/> <block type="divider" x="6" y="2"/> <block type="divider" x="6" y="1"/> <block type="divider" x="6" y="0"/> <block type="key" x="7" y="1" target="4"/> <block type="activator" x="1" y="5" target="8"/> <block type="blocker" x="0" y="4"/> <block type="key" x="1" y="4" target="6"/> <block type="directory" x="4" y="3"/> <block type="key" x="5" y="3" target="7"/> <block type="activator" x="8" y="3" target="13"/> <block type="blocker" x="8" y="5"/> <block type="activator" x="7" y="4" target="15"/> <block type="blocker" x="7" y="5"/> <block type="blocker" x="6" y="3"/> <block type="key" x="6" y="5" target="10"/> <block type="latch" x="1" y="7"/> <block type="latch" x="1" y="8"/> <block type="latch" x="0" y="6"/> <block type="key" x="1" y="6" target="14"/> <block type="key" x="3" y="7" target="15"/> <block type="latch" x="7" y="6"/> <block type="divider" x="8" y="7"/> <block type="divider" x="8" y="6"/> <block type="key" x="5" y="7" target="16"/> <block type="goal" x="6" y="8"/> <block type="activator" x="8" y="8" target="29"/> <block type="blocker" x="6" y="7"/> <block type="divider" x="6" y="6"/> <path> <point x="1" y="5"/> <point x="0" y="5"/> <point x="0" y="4"/> </path> <path> <point x="8" y="3"/> <point x="7.5" y="3"/> <point x="7.5" y="5"/> <point x="8" y="5"/> </path> <path> <point x="7" y="4"/> <point x="6.5" y="4"/> <point x="6.5" y="5"/> <point x="7" y="5"/> </path> <path> <point x="8" y="8"/> <point x="7" y="8"/> <point x="7" y="7"/> <point x="6" y="7"/> </path> <port x="1" y="-1"/> <port x="4" y="-1" locked="true"/> <port x="9" y="2" locked="true"/> <port x="6" y="-1"/> <port x="-1" y="5" locked="true"/> <port x="-1" y="4"/> <port x="-1" y="3" locked="true"/> <port x="9" y="3" locked="true"/> <port x="9" y="4"/> <port x="9" y="5"/> <port x="-1" y="6" locked="true"/> <port x="1" y="9"/> <port x="-1" y="7"/> <port x="0" y="9"/> <port x="3" y="9" locked="true"/> <port x="5" y="9" locked="true"/> <port x="9" y="7" locked="true"/> <port x="7" y="9"/> </level> ; public static const C13:XML = <level size="7" title="Cardinal"> <summary>Work your way around to the goal.</summary> <block type="goal" x="3" y="3"/> <block type="key" x="3" y="1" target="0"/> <block type="divider" x="4" y="1"/> <block type="activator" x="2" y="1" target="4"/> <block type="blocker" x="4" y="0"/> <block type="latch" x="2" y="0"/> <block type="blocker" x="3" y="0"/> <block type="key" x="5" y="3" target="4"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="4" y="3"/> <block type="blocker" x="3" y="4"/> <block type="activator" x="5" y="2" target="12"/> <block type="blocker" x="6" y="3"/> <block type="activator" x="5" y="4" target="14"/> <block type="blocker" x="6" y="2"/> <block type="latch" x="6" y="4"/> <block type="key" x="4" y="6" target="7"/> <block type="divider" x="4" y="5"/> <block type="divider" x="2" y="5"/> <block type="activator" x="3" y="6" target="20"/> <block type="blocker" x="3" y="5"/> <block type="latch" x="2" y="6"/> <block type="latch" x="1" y="3"/> <block type="latch" x="1" y="4"/> <block type="activator" x="1" y="2" target="25"/> <block type="blocker" x="0" y="4"/> <block type="latch" x="0" y="2"/> <block type="latch" x="0" y="3"/> <path> <point x="2" y="1"/> <point x="2.5" y="1"/> <point x="2.5" y="0.25"/> <point x="4" y="0.25"/> <point x="4" y="0"/> </path> <path> <point x="5" y="2"/> <point x="5.5" y="2"/> <point x="5.5" y="3"/> <point x="6" y="3"/> </path> <path> <point x="5" y="4"/> <point x="5" y="4.25"/> <point x="6.5" y="4.25"/> <point x="6.5" y="2"/> <point x="6" y="2"/> </path> <path> <point x="3" y="6"/> <point x="2.5" y="6"/> <point x="2.5" y="5"/> <point x="3" y="5"/> </path> <path> <point x="1" y="2"/> <point x="0.5" y="2"/> <point x="0.5" y="4"/> <point x="0" y="4"/> </path> <port x="7" y="3" locked="true"/> <port x="2" y="-1"/> <port x="4" y="-1"/> <port x="-1" y="0"/> <port x="3" y="7" locked="true"/> <port x="6" y="7"/> <port x="7" y="2"/> <port x="-1" y="3" locked="true"/> <port x="2" y="7"/> <port x="7" y="4"/> <port x="0" y="-1"/> <port x="-1" y="2"/> <port x="1" y="7"/> <port x="-1" y="4"/> <port x="-1" y="6"/> </level> ; public static const C14:XML = <level size="7" title="Multicore"> <summary>Hit any of those root nodes and you beat the system. If only they were more conveniently placed...</summary> <block type="goal" x="0" y="0"/> <block type="goal" x="2" y="0"/> <block type="goal" x="4" y="0"/> <block type="goal" x="6" y="0"/> <block type="goal" x="6" y="2"/> <block type="goal" x="4" y="2"/> <block type="goal" x="2" y="2"/> <block type="goal" x="0" y="2"/> <block type="goal" x="0" y="4"/> <block type="goal" x="2" y="4"/> <block type="goal" x="2" y="6"/> <block type="goal" x="0" y="6"/> <block type="goal" x="4" y="4"/> <block type="goal" x="4" y="6"/> <block type="goal" x="6" y="6"/> <block type="goal" x="6" y="4"/> <block type="divider" x="4" y="3"/> <block type="latch" x="6" y="3"/> <block type="activator" x="2" y="1" target="19"/> <block type="blocker" x="2" y="3"/> <block type="activator" x="2" y="5" target="21"/> <block type="blocker" x="0" y="1"/> <block type="activator" x="5" y="5" target="23"/> <block type="blocker" x="0" y="5"/> <block type="latch" x="5" y="1"/> <block type="blocker" x="4" y="1"/> <block type="key" x="3" y="4" target="9"/> <block type="activator" x="3" y="6" target="28"/> <block type="blocker" x="3" y="2"/> <path> <point x="2" y="1"/> <point x="2.5" y="1"/> <point x="2.5" y="3"/> <point x="2" y="3"/> </path> <path> <point x="2" y="5"/> <point x="1" y="5"/> <point x="1" y="1"/> <point x="0" y="1"/> </path> <path> <point x="5" y="5"/> <point x="5" y="5.25"/> <point x="0" y="5.25"/> <point x="0" y="5"/> </path> <path> <point x="3" y="6"/> <point x="3.5" y="6"/> <point x="3.5" y="2"/> <point x="3" y="2"/> </path> <port x="5" y="-1"/> <port x="3" y="-1"/> <port x="1" y="-1"/> <port x="-1" y="1"/> <port x="-1" y="3"/> <port x="1" y="7"/> <port x="3" y="7"/> <port x="7" y="3"/> <port x="7" y="1"/> <port x="-1" y="5" locked="true"/> </level> ; public static const C15:XML = <level size="5" title="Five By Five"> <summary>Back to basics for this final system. Did you find any of the bonus puzzles?</summary> <block type="goal" x="2" y="2"/> <block type="activator" x="2" y="1" target="2"/> <block type="blocker" x="3" y="2"/> <block type="activator" x="2" y="3" target="4"/> <block type="blocker" x="4" y="2"/> <block type="divider" x="0" y="1"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="0" y="2"/> <block type="divider" x="0" y="0"/> <block type="activator" x="4" y="0" target="10"/> <block type="blocker" x="3" y="1"/> <block type="latch" x="2" y="0"/> <block type="latch" x="1" y="3"/> <block type="latch" x="0" y="3"/> <block type="latch" x="0" y="4"/> <block type="latch" x="1" y="4"/> <block type="activator" x="3" y="3" target="17"/> <block type="blocker" x="3" y="4"/> <block type="latch" x="4" y="3"/> <block type="latch" x="4" y="4"/> <path> <point x="2" y="1"/> <point x="2.5" y="1"/> <point x="2.5" y="2"/> <point x="3" y="2"/> </path> <path> <point x="2" y="3"/> <point x="2.5" y="3"/> <point x="2.5" y="2.25"/> <point x="4" y="2.25"/> <point x="4" y="2"/> </path> <path> <point x="4" y="0"/> <point x="3.5" y="0"/> <point x="3.5" y="1"/> <point x="3" y="1"/> </path> <path> <point x="3" y="3"/> <point x="3.5" y="3"/> <point x="3.5" y="4"/> <point x="3" y="4"/> </path> <port x="5" y="2"/> <port x="-1" y="1"/> <port x="-1" y="3"/> <port x="5" y="1"/> <port x="2" y="-1"/> <port x="0" y="5"/> <port x="-1" y="4"/> <port x="1" y="5"/> <port x="5" y="4"/> <port x="4" y="5"/> <port x="5" y="3"/> </level> ; public static const AmFire:XML = <level size="7" title="Ameribank Fire Suppression"> <summary>Gadao Koi has infected the Ameribank Building fire suppression system with a virus that will prevent the sprinklers, fire doors, and alarms from functioning properly. You must get through the virus's security to restart the system.</summary> <block type="goal" x="3" y="3"/> <block type="blocker" x="5" y="2"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="2" y="5"/> <block type="blocker" x="4" y="5"/> <block type="activator" x="3" y="2" target="10"/> <block type="blocker" x="6" y="3"/> <block type="divider" x="0" y="3"/> <block type="activator" x="0" y="0" target="13"/> <block type="blocker" x="3" y="1"/> <block type="latch" x="0" y="5"/> <block type="divider" x="1" y="5"/> <block type="divider" x="0" y="6"/> <block type="latch" x="3" y="6"/> <block type="activator" x="3" y="4" target="19"/> <block type="blocker" x="6" y="5"/> <block type="activator" x="6" y="4" target="21"/> <block type="blocker" x="6" y="1"/> <block type="activator" x="5" y="1" target="23"/> <block type="blocker" x="3" y="0"/> <path> <point x="6" y="3"/> <point x="5.5" y="3"/> <point x="5.5" y="2.25"/> <point x="4.5" y="2.25"/> <point x="4.5" y="0.5"/> <point x="3.5" y="0.5"/> <point x="3.5" y="2"/> <point x="3" y="2"/> </path> <path> <point x="0" y="0"/> <point x="0" y="0.25"/> <point x="0.5" y="0.25"/> <point x="0.5" y="2.25"/> <point x="1.5" y="2.25"/> <point x="1.5" y="0.5"/> <point x="2.5" y="0.5"/> <point x="2.5" y="1"/> <point x="3" y="1"/> </path> <path> <point x="3" y="4"/> <point x="3" y="4.25"/> <point x="3.5" y="4.25"/> <point x="3.5" y="5.25"/> <point x="4.5" y="5.25"/> <point x="4.5" y="3.5"/> <point x="5.5" y="3.5"/> <point x="5.5" y="5"/> <point x="6" y="5"/> </path> <path> <point x="6" y="4"/> <point x="6" y="4.25"/> <point x="6.5" y="4.25"/> <point x="6.5" y="1.25"/> <point x="6" y="1.25"/> <point x="6" y="1"/> </path> <path> <point x="5" y="1"/> <point x="5.5" y="1"/> <point x="5.5" y="0.25"/> <point x="3" y="0.25"/> <point x="3" y="0"/> </path> <port x="7" y="3"/> <port x="3" y="-1"/> <port x="3" y="7"/> <port x="-1" y="3"/> <port x="7" y="1"/> <port x="6" y="7"/> <port x="1" y="7"/> </level> ; public static const F0:XML = <level size="5" title="Barrier Firewall Tier 0"> <summary>The island nation of Locha is cut off from much of the Internet by the "Barrier Firewall," a government-mandated censor designed to curtail any online political dissent.</summary> <block type="goal" x="4" y="2"/> <block type="blocker" x="1" y="0"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="1" y="3"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="3" y="0"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="3" y="3"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="4" y="0"/> <block type="blocker" x="4" y="4"/> <block type="latch" x="2" y="2"/> <block type="activator" x="2" y="4" target="2"/> <block type="divider" x="4" y="1"/> <path> <point x="1" y="1"/> <point x="1.5" y="1"/> <point x="1.5" y="4"/> <point x="2" y="4"/> </path> <port x="-1" y="1"/> <port x="-1" y="2"/> <port x="2" y="-1"/> </level> ; public static const Airport:XML = <level size="7" title="Sochao Airport Ticketing System"> <summary>Now that Li Yolei has escaped his house arrest, you will need to crack the security of the Sochao Airport's passenger record system to provide him and his companion with tickets and permission to fly.</summary> <block type="goal" x="6" y="3"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="0" y="2"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="4" y="2"/> <block type="blocker" x="5" y="2"/> <block type="blocker" x="0" y="4"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="4" y="4"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="2" y="6"/> <block type="key" x="2" y="1" target="0"/> <block type="key" x="2" y="5" target="1"/> <block type="divider" x="3" y="3"/> <block type="activator" x="3" y="1" target="17"/> <block type="blocker" x="0" y="1"/> <block type="activator" x="3" y="5" target="19"/> <block type="blocker" x="0" y="5"/> <path> <point x="3" y="1"/> <point x="3" y="1.25"/> <point x="0" y="1.25"/> <point x="0" y="1"/> </path> <path> <point x="0" y="4.5"/> <point x="0" y="4.25"/> <point x="3" y="4.25"/> <point x="3" y="4.5"/> </path> <port x="6" y="-1" locked="true"/> <port x="6" y="7" locked="true"/> <port x="-1" y="1"/> <port x="-1" y="3"/> <port x="-1" y="5"/> </level> ; public static const F2:XML = <level size="5" title="Barrier Firewall Tier 2"> <summary>A common rite of passage among free-minded security crackers is to break through the Barrier Firewall and visit the Lochan servers that are hidden from the rest of the world.</summary> <block type="goal" x="4" y="2"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="0" y="0"/> <block type="blocker" x="0" y="1"/> <block type="blocker" x="0" y="3"/> <block type="activator" x="4" y="1" target="3"/> <block type="activator" x="4" y="4" target="2"/> <block type="activator" x="1" y="0" target="7"/> <block type="activator" x="0" y="4" target="5"/> <block type="divider" x="1" y="2"/> <block type="divider" x="3" y="4"/> <block type="divider" x="1" y="4"/> <path> <point x="1" y="0"/> <point x="1" y="1"/> <point x="0" y="1"/> </path> <path> <point x="4" y="1"/> <point x="3.5" y="1"/> <point x="3.5" y="2"/> <point x="2" y="2"/> </path> <path> <point x="4" y="4"/> <point x="4.5" y="4"/> <point x="4.5" y=".5"/> <point x="2" y=".5"/> <point x="2" y="1"/> </path> <path> <point x="0" y="4"/> <point x="0" y="4.25"/> <point x="2" y="4.25"/> <point x="2" y="4"/> </path> <port x="3" y="-1"/> <port x="-1" y="1"/> <port x="-1" y="2"/> </level> ; public static const C10:XML = <level size="7" title="Taking Turns"> <summary>Only two ports, but more complicated than you'd think.</summary> <block type="divider" x="0" y="3"/> <block type="activator" x="0" y="1" target="2"/> <block type="blocker" x="6" y="1"/> <block type="divider" x="6" y="3"/> <block type="divider" x="6" y="0"/> <block type="divider" x="5" y="0"/> <block type="activator" x="5" y="5" target="7"/> <block type="blocker" x="0" y="5"/> <block type="divider" x="0" y="6"/> <block type="divider" x="1" y="6"/> <block type="divider" x="6" y="6"/> <block type="divider" x="4" y="6"/> <block type="activator" x="2" y="4" target="13"/> <block type="blocker" x="4" y="4"/> <block type="divider" x="4" y="0"/> <block type="divider" x="3" y="0"/> <block type="divider" x="2" y="0"/> <block type="latch" x="3" y="1"/> <block type="goal" x="3" y="3"/> <block type="divider" x="1" y="2"/> <block type="divider" x="2" y="2"/> <path> <point x="0" y="1"/> <point x="0" y="1.25"/> <point x="6" y="1.25"/> <point x="6" y="1"/> </path> <path> <point x="5" y="5"/> <point x="5" y="5.25"/> <point x="0" y="5.25"/> <point x="0" y="5"/> </path> <path> <point x="2" y="4"/> <point x="2" y="4.25"/> <point x="4" y="4.25"/> <point x="4" y="4"/> </path> <port x="7" y="3"/> <port x="-1" y="3"/> </level> ; public static const F1:XML = <level size="5" title="Barrier Firewall Tier 1"> <summary>Using the Barrier Firewall, the totalitarian government of Locha cuts off its citizens from foreign journalism and political discussion, which helps it to spread anti-Western propaganda among the Locha people.</summary> <block type="goal" x="4" y="2"/> <block type="blocker" x="0" y="0"/> <block type="blocker" x="0" y="1"/> <block type="blocker" x="0" y="3"/> <block type="blocker" x="0" y="4"/> <block type="blocker" x="2" y="0"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="2" y="2"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="4" y="0"/> <block type="blocker" x="4" y="3"/> <block type="blocker" x="4" y="4"/> <block type="activator" x="1" y="0" target="8"/> <block type="activator" x="1" y="4" target="3"/> <block type="activator" x="3" y="0" target="2"/> <block type="activator" x="3" y="4" target="6"/> <block type="divider" x="1" y="2"/> <block type="divider" x="3" y="3"/> <block type="divider" x="4" y="1"/> <path> <point x="0" y="1"/> <point x="0" y="0.5"/> <point x="3" y="0.5"/> <point x="3" y="0"/> </path> <path> <point x="1" y="0"/> <point x="1.5" y="0"/> <point x="1.5" y="3"/> <point x="2" y="3"/> </path> <path> <point x="2" y="1"/> <point x="2.5" y="1"/> <point x="2.5" y="4"/> <point x="3" y="4"/> </path> <path> <point x="0" y="3"/> <point x="1" y="3"/> <point x="1" y="4"/> </path> <port x="-1" y="1"/> <port x="-1" y="2"/> <port x="-1" y="3"/> </level> ; public static const AmSecurity:XML = <level size="7" title="Ameribank Security System"> <summary>With the fire department back online and the routing information from Swifty Couriers, you know that Gadao's planning to attack the headquarters of Ameribank. Crack their security system to track Gadao on their security cameras.</summary> <block type="divider" x="6" y="3"/> <block type="divider" x="6" y="0"/> <block type="divider" x="0" y="0"/> <block type="divider" x="0" y="6"/> <block type="divider" x="6" y="6"/> <block type="latch" x="0" y="3"/> <block type="goal" x="3" y="3"/> <block type="activator" x="2" y="2" target="8"/> <block type="blocker" x="3" y="0"/> <block type="activator" x="4" y="1" target="10"/> <block type="blocker" x="2" y="1"/> <block type="activator" x="1" y="5" target="12"/> <block type="blocker" x="3" y="6"/> <block type="divider" x="4" y="5"/> <block type="latch" x="2" y="5"/> <block type="activator" x="1" y="4" target="16"/> <block type="blocker" x="4" y="3"/> <block type="directory" x="1" y="2"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="5" y="5"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="5" y="2"/> <block type="blocker" x="5" y="1"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="4" y="4"/> <block type="blocker" x="4" y="2"/> <block type="blocker" x="3" y="2"/> <path> <point x="2" y="2"/> <point x="2.5" y="2"/> <point x="2.5" y="0"/> <point x="3" y="0"/> </path> <path> <point x="4" y="1"/> <point x="4" y="1.25"/> <point x="2" y="1.25"/> <point x="2" y="1"/> </path> <path> <point x="1" y="5"/> <point x="1" y="5.25"/> <point x="3" y="5.25"/> <point x="3" y="6"/> </path> <path> <point x="1" y="4"/> <point x="1.5" y="4"/> <point x="1.5" y="3.5"/> <point x="4" y="3.5"/> <point x="4" y="3"/> </path> <port x="7" y="3"/> <port x="4" y="-1"/> <port x="2" y="-1"/> <port x="4" y="7"/> <port x="2" y="7"/> <port x="-1" y="2"/> <port x="-1" y="4"/> </level> ; public static const FireDept:XML = <level size="9" title="Fire Department Dispatch System"> <summary>Gadao Koi has cracked the Charlotte Fire Department's servers. You must crack in and fix whatever he's done.</summary> <block type="blocker" x="4" y="0"/> <block type="blocker" x="5" y="1"/> <block type="blocker" x="7" y="1"/> <block type="blocker" x="8" y="0"/> <block type="blocker" x="8" y="1"/> <block type="blocker" x="0" y="1"/> <block type="blocker" x="0" y="0"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="0" y="2"/> <block type="blocker" x="0" y="3"/> <block type="blocker" x="0" y="4"/> <block type="blocker" x="1" y="6"/> <block type="blocker" x="2" y="7"/> <block type="blocker" x="3" y="8"/> <block type="blocker" x="5" y="8"/> <block type="blocker" x="6" y="7"/> <block type="blocker" x="7" y="6"/> <block type="blocker" x="7" y="5"/> <block type="blocker" x="8" y="4"/> <block type="blocker" x="8" y="3"/> <block type="blocker" x="8" y="2"/> <block type="activator" x="8" y="8" target="23"/> <block type="blocker" x="4" y="8"/> <block type="activator" x="0" y="8" target="25"/> <block type="blocker" x="1" y="5"/> <block type="activator" x="7" y="0" target="27"/> <block type="blocker" x="6" y="1"/> <block type="divider" x="2" y="8"/> <block type="latch" x="1" y="8"/> <block type="divider" x="5" y="5"/> <block type="divider" x="5" y="2"/> <block type="key" x="7" y="2" target="5"/> <block type="goal" x="4" y="1"/> <block type="activator" x="1" y="0" target="35"/> <block type="blocker" x="2" y="1"/> <block type="latch" x="2" y="5"/> <block type="key" x="2" y="6" target="8"/> <block type="latch" x="4" y="2"/> <block type="latch" x="6" y="2"/> <path> <point x="8" y="8"/> <point x="8" y="8.25"/> <point x="4" y="8.25"/> <point x="4" y="8"/> </path> <path> <point x="0" y="8"/> <point x="0.5" y="8"/> <point x="0.5" y="5"/> <point x="1" y="5"/> </path> <path> <point x="7" y="0"/> <point x="7" y="0.25"/> <point x="6.5" y="0.25"/> <point x="6.5" y="1"/> <point x="6" y="1"/> </path> <path> <point x="1" y="0"/> <point x="1" y="0.25"/> <point x="1.5" y="0.25"/> <point x="1.5" y="1"/> <point x="2" y="1"/> </path> <port x="7" y="-1"/> <port x="6" y="-1"/> <port x="2" y="9"/> <port x="1" y="9"/> <port x="-1" y="5"/> <port x="8" y="9" locked="true"/> <port x="1" y="-1"/> <port x="2" y="-1"/> <port x="4" y="9" locked="true"/> </level> ; public static const C11:XML = <level size="7" title="One Hand Clapping"> <summary>Only one port, but more complicated than you'd think.</summary> <block type="divider" x="0" y="3"/> <block type="activator" x="6" y="6" target="2"/> <block type="blocker" x="0" y="2"/> <block type="divider" x="0" y="6"/> <block type="divider" x="0" y="0"/> <block type="divider" x="2" y="0"/> <block type="divider" x="2" y="3"/> <block type="divider" x="3" y="3"/> <block type="divider" x="3" y="5"/> <block type="blocker" x="1" y="3"/> <block type="divider" x="6" y="5"/> <block type="activator" x="6" y="2" target="12"/> <block type="blocker" x="3" y="2"/> <block type="divider" x="3" y="1"/> <block type="divider" x="5" y="1"/> <block type="goal" x="5" y="3"/> <block type="latch" x="5" y="2"/> <block type="divider" x="5" y="0"/> <block type="divider" x="6" y="0"/> <block type="divider" x="6" y="1"/> <path> <point x="6" y="6"/> <point x="6" y="6.25"/> <point x="0.5" y="6.25"/> <point x="0.5" y="2"/> <point x="0" y="2"/> </path> <path> <point x="6" y="2"/> <point x="6" y="2.25"/> <point x="3" y="2.25"/> <point x="3" y="2"/> </path> <port x="-1" y="3"/> </level> ; public static const PostHome:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 24, 2010 23:42:27 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: a response!\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? We got a message back from Li Yolei. According to Charlie, he says he's willing to try, but he needs to bring along a friend, Gadao Koi, who's been arrested along with him. So you need to get two tickets. As soon as you're done, you'll use the virus you planted in the police system to help them get out undetected.\n\n") + "You want to get two tickets from the city of Sochao to Los Angeles, with a connecting flight to Charlotte, North Carolina. That's where Charlie and me are. We'll meet them at the airport and they can crash on my couch. Or something.\n\n") + "Be careful. If the Lochan government hears about this, they'll be royally ticked off. No worries, though, right? :)\n\n") + "peace,\n") + "sk3tch\n"); public static const Chap2Intro:String = ((((((((((((("-----------------------------------\n" + "Sent: Aug. 29, 2010 10:35:49 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: our little problem\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I know I haven't been in touch, but I wanted to make sure you weren't, like, taken away by the Freedom Gestapo or anything before I left more of an e-mail trail.\n\n") + "So, yeah, Charlie and me were pretty puzzled when Yolei and Koi didn't show up. Then we read the news. I've been doing a little searching, and it looks like the two of them were sent to Camp Zulu. It's a detainment camp on one of the Florida Keys that they opened up when they closed down Guantanamo Bay.\n\n") + "I know you probably don't want to stick your nose out any further. But I kinda feel like we owe these guys. We got them out of the frying pan and into the fire. Or something. And I think you have the skillz to get them out of Camp Zulu.\n\n") + "I got some info on the camp. Looks like there are eight major systems you'll need to crack into in order to get the guys out. They can take a boat to Key West, and then take a bus to my place in Charlotte. The TSA doesn't give a crap about busses.\n\n") + "Hey, I know you don't want to get into trouble with DHS and Uncle Sugar, but if you're game, I'm game. I got my friend to give the okay for another DDOS, too, so you can use it if you run into too much trouble with a system. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const PostLocks:String = (((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 11:08:47 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: on my end\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I've got the futon all set up for Yolei and Koi. They're kinda going to have to bunk together until we can figure out something more permanent.\n\n") + "I've got two tickets ordered and waiting at the Grayhound station in Key West, under the names Dade Murphy and David Lightman. When we were talking, Yolei said Koi was fluent in English, so that should be fine. All you gotta do when you're ready is to use the internal PA system to give the info just to our friends. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const PostRadios:String = (((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 09:21:26 GMT\n") + "From: Mom (mommydear@freemail.crk)\n") + "To: me\n") + "Subject: Thinking of you!\n") + "-----------------------------------\n") + "\n") + "Hi, sweetheart! I'm just writing to see how you're doing! Your father and I are fine. We are thinking about remulching the garden! We'd like to talk to you sometime. Maybe you could give us a call this weekend?\n\n") + "I hope you're good! Stay out of trouble, all right?\n\n") + "Love,\n") + "Mom\n"); public static const PostDatabank:String = ((((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 13:01:24 GMT\n") + "From: spamobliterator\n") + "To: me\n") + "Subject: Spam Quarantine Summary\n") + "-----------------------------------\n") + "\n") + "This is your daily report from Spam Obliterator, the most ruthless anti-spam filter permitted for civilian use by the NSA. Today, Spam Obliterator has blocked one message. Summary follows.\n\n") + "Message dated 8/30/2010 09:18:30 from mayberrybreeeze@warmmail.crk with subject \"IMPORTANT ACCOUNT INFO\":\n") + "Ameribank: Your Money Is Safe With Us.\n\n") + "Attention, Ameribank Customer! Because of a recent power outage at our home offices in Charlotte, NC, some customer account information has become out of sync. In order to ensure the continued security of your funds, please visit our website (link scrubbed by Spam Obliterator) and enter your account information. REMEMBER: Beware phishing e-mails, and onl(...character limit reached)\n\n") + "(If you would like to review the remainder of this message, go to your Spam Obliterator dashboard. This e-mail will be automatically deleted from the quarantine folder in 30 days.)\n"); public static const PostLibrary:String = (((((((((((("-----------------------------------\n" + "Sent: Sep. 1, 2010 21:03:49 GMT\n") + "From: sk3tch (sk3tch@010fate.crk)\n") + "To: me\n") + "Subject: omg\n") + "-----------------------------------\n") + "\n") + "Hey, what's up? I've got good news, and I've got bad news. The good news is that I think we know what Gadao's up to now. He's deactivated the library's firewall and has secure connections open to a bunch of different servers around town. Looks like our friend's a security cracker, too. I'm seeing intrusions at the Charlotte Fire Department and a major server for Ameribank.\n\n") + "You can figure out what sort of trouble he could cause at the fire department. And Ameribank's a big deal, too. It's the biggest bank in Charlotte, and its headquarters are downtown. Part of Locha's propaganda has always been that we have corrupt capitalistic ways, so Ameribank's corporate headquarters would be a perfect place for one of their agents to strike.\n\n") + "Now for the bad news. My cell phone finally ran out of batteries. We won't be able to track him as easily from now on. I did manage to get one last photo before the phone died. It's out of focus and really badly framed, but it looks like Gadao's in some sort of uniform. I'm guessing he's gotten a hold of a courier's uniform from the company he called yesterday.\n\n") + "You've got to do two things. First, crack into the fire department and see if you can undo whatever Gadao did. Second, crack into the Swifty Couriers computer and see if you can find any unusual activity there. There might be evidence of cracking, or just signs that Gadao got a uniform the old-fashioned way. Maybe off of some guy's clothesline. :)\n\n") + "peace,\n") + "sk3tch\n"); public static const VOIPEmail:XML = <level size="7" title="VOIP and E-mail Distribution"> <summary>To give your targets the best possible chance of escape, you'll have to selectively disable the camp's communication with the outside world by taking out their e-mail and Voice Over IP phone system.</summary> <block type="goal" x="3" y="3"/> <block type="blocker" x="4" y="2"/> <block type="blocker" x="5" y="1"/> <block type="blocker" x="6" y="0"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="1" y="5"/> <block type="blocker" x="0" y="6"/> <block type="latch" x="1" y="0"/> <block type="latch" x="0" y="1"/> <block type="latch" x="2" y="2"/> <block type="latch" x="3" y="2"/> <block type="latch" x="1" y="4"/> <block type="divider" x="1" y="1"/> <block type="divider" x="3" y="1"/> <block type="divider" x="1" y="6"/> <block type="divider" x="3" y="6"/> <block type="divider" x="4" y="6"/> <block type="divider" x="3" y="5"/> <block type="divider" x="6" y="4"/> <block type="divider" x="6" y="2"/> <block type="divider" x="4" y="3"/> <block type="activator" x="5" y="4" target="22"/> <block type="blocker" x="4" y="5"/> <block type="latch" x="3" y="0"/> <path> <point x="5" y="4"/> <point x="5" y="5"/> <point x="4" y="5"/> </path> <port x="0" y="-1"/> <port x="1" y="-1"/> <port x="2" y="-1"/> <port x="3" y="-1"/> <port x="-1" y="1"/> <port x="-1" y="2"/> <port x="-1" y="4"/> <port x="7" y="2"/> <port x="7" y="3"/> <port x="7" y="6"/> <port x="4" y="7"/> <port x="3" y="7"/> <port x="1" y="7"/> </level> ; public static const PostSchedules:String = (((((((((((("-----------------------------------\n" + "Sent: Aug. 30, 2010 14:57:21 GMT\n") + "From: newsbot (noreply@news.crk)\n") + "To: me\n") + "Subject: Article Search Result\n") + "-----------------------------------\n") + "\n") + "(Results of search for string: Locha. 1 new article found.)\n\n") + "LIOA, LOCHA\n\n") + "36 prisoners were executed today in a public exhibition by the Lochan government. The event, which took place in Lioa Football Stadium, was attended by 20,000 people, according to the Lochan Public Information Department. The prisoners were accused of various crimes, ranging from treason and sedition to violation of the People's Secrets Act and inciting a riot.\n\n") + "The US State Department condemned the event in a public statement, claiming that \"27 of the 36 prisoners were prisoners of conscience, imprisoned for speaking out against a corrupt and immoral government. None of the prisoners,\" read the statement, \"were provided with fair trials, and [the US State Department] has evidence that the prisoners were treated in a way which violates the United Nations' Declaration of Human Rights.\"\n\n") + "The Lochan government responded with a speech by General Ko, one of the ruling council of Locha. In his public address, he accused the US government of \"believing themselves to be exempt from their own criticism\" and ominously declared that \"the corrupt and decadent United States will grow to regret their attempts to exert control on other sovereign nations.\" The US Department of Homeland Security is currently holding two Lochan citizens under suspicion of conspiracy to commit acts of terror.\n\n") + "(This is an automated message. Please do not reply to this message.)\n"); public static const Power:XML = <level size="5" title="Power Distribution"> <summary>Certain key systems of Camp Zulu will need to have their power cut to enable Yolei and Koi's escape. The power system is controlled by an embedded microcontroller that should be vulnerable.</summary> <block type="blocker" x="0" y="0"/> <block type="blocker" x="1" y="0"/> <block type="activator" x="3" y="1" target="3"/> <block type="blocker" x="2" y="0"/> <block type="activator" x="3" y="0" target="5"/> <block type="blocker" x="4" y="3"/> <block type="activator" x="4" y="0" target="7"/> <block type="blocker" x="4" y="2"/> <block type="activator" x="1" y="4" target="9"/> <block type="blocker" x="0" y="1"/> <block type="activator" x="1" y="1" target="11"/> <block type="blocker" x="0" y="3"/> <block type="activator" x="1" y="3" target="13"/> <block type="blocker" x="2" y="1"/> <block type="activator" x="3" y="3" target="15"/> <block type="blocker" x="4" y="1"/> <block type="activator" x="0" y="4" target="17"/> <block type="blocker" x="0" y="2"/> <block type="blocker" x="1" y="2"/> <block type="goal" x="2" y="2"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="2" y="3"/> <block type="activator" x="4" y="4" target="23"/> <block type="blocker" x="2" y="4"/> <block type="blocker" x="3" y="4"/> <path> <point x="3" y="1"/> <point x="2.5" y="1"/> <point x="2.5" y="0"/> <point x="2" y="0"/> </path> <path> <point x="3" y="0"/> <point x="3.5" y="0"/> <point x="3.5" y="3"/> <point x="4" y="3"/> </path> <path> <point x="4" y="0"/> <point x="3.75" y="0"/> <point x="3.75" y="2"/> <point x="4" y="2"/> </path> <path> <point x="1" y="4"/> <point x="0.5" y="4"/> <point x="0.5" y="1"/> <point x="0" y="1"/> </path> <path> <point x="1" y="3"/> <point x="1.5" y="3"/> <point x="1.5" y="1"/> <point x="2" y="1"/> </path> <path> <point x="3" y="3"/> <point x="3" y="3.25"/> <point x="4.5" y="3.25"/> <point x="4.5" y="1"/> <point x="4" y="1"/> </path> <path> <point x="1" y="1"/> <point x="1" y="0.25"/> <point x="-0.25" y="0.25"/> <point x="-0.25" y="3"/> <point x="0" y="3"/> </path> <path> <point x="0" y="4"/> <point x="-0.5" y="4"/> <point x="-0.5" y="2"/> <point x="0" y="2"/> </path> <path> <point x="4" y="4"/> <point x="4" y="4.25"/> <point x="2" y="4.25"/> <point x="2" y="4"/> </path> <port x="0" y="-1"/> <port x="1" y="-1"/> <port x="2" y="-1"/> <port x="3" y="-1"/> <port x="4" y="-1"/> <port x="5" y="0"/> <port x="5" y="1"/> <port x="5" y="2"/> <port x="5" y="3"/> <port x="5" y="4"/> <port x="4" y="5"/> <port x="3" y="5"/> <port x="2" y="5"/> <port x="1" y="5"/> <port x="0" y="5"/> <port x="-1" y="4"/> <port x="-1" y="3"/> <port x="-1" y="2"/> <port x="-1" y="1"/> <port x="-1" y="0"/> </level> ; public static const PostAirport:String = (((((((((((("-----------------------------------\n" + "Sent: Aug. 25, 2010 09:21:36 GMT\n") + "From: newsbot (noreply@news.crk)\n") + "To: me\n") + "Subject: Article Search Result\n") + "-----------------------------------\n") + "\n") + "(Results of search for string: Locha. 1 new article found.)\n\n") + "LOS ANGELES\n\n") + "Representatives of the California branch of the Department of Homeland Security announced this morning that they have apprehended two suspected terrorists entering LAX airport. The two men, Li Yolei and Gadao Koi, arrived on an international flight from the totalitarian island nation of Locha. They had tickets for a connecting flight to Charlotte, North Carolina, the second-largest banking center in the United States. DHS officials would not comment on any suspected plans to commit terrorist acts.\n\n") + "Only yesterday, the U.S. State Department added Locha to their list of State Sponsors of Terrorism. The nation has been associated with previous acts of political and economic terrorism. According to representatives of the Transportation Security Administration, officials became suspicious when it was discovered that the two men's tickets had been fraudulently ordered. The computer hacker responsible for acquiring the tickets has so far eluded identification.\n\n") + "There has been no change in the Homeland Security Terror Alert Level in response to the arrests.\n\n") + "(This is an automated message. Please do not reply to this message.)\n"); public static const Radios:XML = <level size="9" title="Security Radio Network"> <summary>In case a guard gets suspicious, you will need control of the security radio network. It will let you silence any unwanted communication between guards.</summary> <block type="goal" x="4" y="4"/> <block type="divider" x="6" y="3"/> <block type="divider" x="3" y="3"/> <block type="divider" x="3" y="6"/> <block type="divider" x="5" y="6"/> <block type="divider" x="5" y="4"/> <block type="divider" x="6" y="5"/> <block type="divider" x="2" y="4"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="5" y="1"/> <block type="blocker" x="7" y="1"/> <block type="blocker" x="7" y="2"/> <block type="blocker" x="7" y="3"/> <block type="blocker" x="7" y="4"/> <block type="blocker" x="7" y="5"/> <block type="blocker" x="7" y="6"/> <block type="blocker" x="7" y="7"/> <block type="blocker" x="6" y="7"/> <block type="blocker" x="4" y="7"/> <block type="blocker" x="3" y="7"/> <block type="blocker" x="2" y="7"/> <block type="blocker" x="1" y="7"/> <block type="blocker" x="1" y="6"/> <block type="blocker" x="1" y="5"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="1" y="3"/> <block type="blocker" x="1" y="2"/> <block type="activator" x="8" y="1" target="30"/> <block type="blocker" x="6" y="1"/> <block type="activator" x="4" y="0" target="32"/> <block type="blocker" x="4" y="3"/> <block type="activator" x="7" y="8" target="34"/> <block type="blocker" x="5" y="7"/> <block type="activator" x="0" y="5" target="36"/> <block type="blocker" x="3" y="5"/> <block type="activator" x="4" y="8" target="38"/> <block type="blocker" x="4" y="6"/> <block type="activator" x="8" y="4" target="40"/> <block type="blocker" x="6" y="4"/> <block type="divider" x="2" y="2"/> <block type="activator" x="0" y="3" target="43"/> <block type="blocker" x="2" y="3"/> <block type="activator" x="0" y="0" target="45"/> <block type="blocker" x="2" y="1"/> <block type="activator" x="8" y="6" target="47"/> <block type="blocker" x="6" y="6"/> <block type="activator" x="2" y="8" target="49"/> <block type="blocker" x="2" y="6"/> <block type="latch" x="0" y="8"/> <block type="directory" x="0" y="6"/> <block type="latch" x="0" y="7"/> <block type="divider" x="1" y="8"/> <block type="blocker" x="5" y="2"/> <path> <point x="8" y="1"/> <point x="8" y="1.25"/> <point x="6" y="1.25"/> <point x="6" y="1"/> </path> <path> <point x="4" y="0"/> <point x="4.5" y="0"/> <point x="4.5" y="3"/> <point x="4" y="3"/> </path> <path> <point x="7" y="8"/> <point x="6.5" y="8"/> <point x="6.5" y="7.25"/> <point x="5" y="7.25"/> <point x="5" y="7"/> </path> <path> <point x="0" y="5"/> <point x="0" y="5.25"/> <point x="3" y="5.25"/> <point x="3" y="5"/> </path> <path> <point x="4" y="8"/> <point x="3.5" y="8"/> <point x="3.5" y="6"/> <point x="4" y="6"/> </path> <path> <point x="8" y="4"/> <point x="8" y="4.25"/> <point x="6" y="4.25"/> <point x="6" y="4"/> </path> <path> <point x="0" y="3"/> <point x="0" y="3.25"/> <point x="2" y="3.25"/> <point x="2" y="3"/> </path> <path> <point x="0" y="0"/> <point x="0" y="0.25"/> <point x="1.5" y="0.25"/> <point x="1.5" y="1"/> <point x="2" y="1"/> </path> <path> <point x="8" y="6"/> <point x="8" y="6.25"/> <point x="6" y="6.25"/> <point x="6" y="6"/> </path> <path> <point x="2" y="8"/> <point x="1.5" y="8"/> <point x="1.5" y="6"/> <point x="2" y="6"/> </path> <port x="6" y="-1"/> <port x="9" y="1"/> <port x="5" y="9"/> <port x="-1" y="5"/> <port x="7" y="9"/> <port x="4" y="-1"/> <port x="4" y="9"/> <port x="-1" y="3"/> <port x="2" y="-1"/> <port x="-1" y="0"/> <port x="9" y="4"/> <port x="9" y="6"/> <port x="2" y="9"/> <port x="0" y="9"/> <port x="-1" y="7"/> <port x="1" y="9"/> </level> ; public static const Perimeter:XML = <level size="9" title="Perimeter Control"> <summary>The perimeter of Camp Zulu is protected by an elaborate system of sensors and barriers. By cracking the control server, you can deactivate the security long enough to effect an escape.</summary> <block type="latch" x="1" y="0"/> <block type="blocker" x="2" y="0"/> <block type="activator" x="3" y="0" target="3"/> <block type="blocker" x="1" y="1"/> <block type="blocker" x="4" y="0"/> <block type="latch" x="5" y="0"/> <block type="divider" x="6" y="0"/> <block type="divider" x="7" y="0"/> <block type="activator" x="0" y="1" target="9"/> <block type="blocker" x="0" y="2"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="3" y="1"/> <block type="blocker" x="4" y="1"/> <block type="activator" x="6" y="1" target="14"/> <block type="blocker" x="5" y="1"/> <block type="divider" x="7" y="1"/> <block type="blocker" x="8" y="1"/> <block type="latch" x="1" y="2"/> <block type="blocker" x="7" y="2"/> <block type="blocker" x="8" y="2"/> <block type="activator" x="0" y="5" target="21"/> <block type="blocker" x="0" y="3"/> <block type="latch" x="1" y="3"/> <block type="activator" x="7" y="3" target="24"/> <block type="blocker" x="8" y="6"/> <block type="blocker" x="8" y="3"/> <block type="activator" x="2" y="7" target="27"/> <block type="blocker" x="0" y="4"/> <block type="activator" x="1" y="6" target="29"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="7" y="4"/> <block type="blocker" x="8" y="4"/> <block type="blocker" x="8" y="5"/> <block type="blocker" x="7" y="5"/> <block type="blocker" x="1" y="5"/> <block type="blocker" x="0" y="6"/> <block type="key" x="7" y="6" target="0"/> <block type="blocker" x="0" y="7"/> <block type="blocker" x="1" y="7"/> <block type="blocker" x="3" y="7"/> <block type="blocker" x="4" y="7"/> <block type="activator" x="5" y="7" target="42"/> <block type="blocker" x="2" y="8"/> <block type="blocker" x="6" y="7"/> <block type="directory" x="7" y="7"/> <block type="latch" x="8" y="7"/> <block type="blocker" x="1" y="8"/> <block type="blocker" x="3" y="8"/> <block type="blocker" x="4" y="8"/> <block type="blocker" x="5" y="8"/> <block type="blocker" x="6" y="8"/> <block type="blocker" x="7" y="8"/> <block type="goal" x="4" y="4"/> <path> <point x="3" y="0"/> <point x="3" y="0.25"/> <point x="1.5" y="0.25"/> <point x="1.5" y="1"/> <point x="1" y="1"/> </path> <path> <point x="0" y="1"/> <point x="0.25" y="1"/> <point x="0.25" y="2"/> <point x="0" y="2"/> </path> <path> <point x="6" y="1"/> <point x="6" y="1.25"/> <point x="5" y="1.25"/> <point x="5" y="1"/> </path> <path> <point x="0" y="5"/> <point x="0.5" y="5"/> <point x="0.5" y="3"/> <point x="0" y="3"/> </path> <path> <point x="7" y="3"/> <point x="7.5" y="3"/> <point x="7.5" y="6"/> <point x="8" y="6"/> </path> <path> <point x="0" y="4"/> <point x="-0.5" y="4"/> <point x="-0.5" y="7.25"/> <point x="2" y="7.25"/> <point x="2" y="7"/> </path> <path> <point x="1" y="6"/> <point x="1.5" y="6"/> <point x="1.5" y="4"/> <point x="1" y="4"/> </path> <path> <point x="2" y="8"/> <point x="2.5" y="8"/> <point x="2.5" y="7.25"/> <point x="5" y="7.25"/> <point x="5" y="7"/> </path> <port x="6" y="-1" locked="true"/> <port x="1" y="-1"/> <port x="3" y="-1"/> <port x="5" y="-1"/> <port x="-1" y="0"/> <port x="-1" y="1"/> <port x="-1" y="2"/> <port x="-1" y="3"/> <port x="-1" y="4"/> <port x="-1" y="5"/> <port x="2" y="9"/> <port x="9" y="6"/> <port x="9" y="7"/> <port x="8" y="9"/> </level> ; public static const Home:XML = <level size="7" title="House Arrest"> <summary>The political blogger Li Yolei is currently under house arrest. You can communicate with him by cracking into his home computer network. This will allow you to notify him of your intentions to help him escape to America.</summary> <block type="goal" x="3" y="3"/> <block type="blocker" x="0" y="1"/> <block type="blocker" x="0" y="5"/> <block type="blocker" x="1" y="0"/> <block type="blocker" x="1" y="2"/> <block type="blocker" x="1" y="4"/> <block type="blocker" x="1" y="6"/> <block type="blocker" x="2" y="1"/> <block type="blocker" x="2" y="3"/> <block type="blocker" x="2" y="5"/> <block type="blocker" x="3" y="2"/> <block type="blocker" x="3" y="4"/> <block type="blocker" x="4" y="1"/> <block type="blocker" x="4" y="3"/> <block type="blocker" x="4" y="5"/> <block type="blocker" x="5" y="0"/> <block type="blocker" x="5" y="2"/> <block type="blocker" x="5" y="4"/> <block type="blocker" x="5" y="6"/> <block type="blocker" x="6" y="1"/> <block type="blocker" x="6" y="5"/> <block type="activator" x="1" y="3" target="6"/> <block type="activator" x="1" y="5" target="18"/> <block type="activator" x="3" y="5" target="2"/> <block type="activator" x="4" y="2" target="10"/> <block type="activator" x="5" y="5" target="16"/> <block type="activator" x="6" y="0" target="19"/> <block type="latch" x="3" y="6"/> <block type="key" x="5" y="1" target="2"/> <path> <point x="0" y="5"/> <point x="0" y="4.25"/> <point x="3" y="4.25"/> <point x="3" y="5"/> </path> <path> <point x="1" y="3"/> <point x="0.5" y="3"/> <point x="0.5" y="6"/> <point x="1" y="6"/> </path> <path> <point x="1" y="5"/> <point x="1" y="5.25"/> <point x="5" y="5.25"/> <point x="5" y="6"/> </path> <path> <point x="3" y="2"/> <point x="4" y="2"/> </path> <path> <point x="5" y="2"/> <point x="5.5" y="2"/> <point x="5.5" y="5"/> <point x="5" y="5"/> </path> <path> <point x="6" y="0"/> <point x="6" y="1"/> </path> <port x="-1" y="3"/> <port x="-1" y="5"/> <port x="-1" y="6" locked="true"/> <port x="3" y="-1"/> <port x="3" y="7"/> <port x="5" y="7"/> <port x="6" y="-1"/> <port x="7" y="1"/> <port x="7" y="2"/> </level> ; } }//package Data
Section 29
//SaveData (Data.SaveData) package Data { import com.kongregate.as3.client.*; import flash.net.*; public class SaveData { private static const DDOSUSED:String = "DDOSUsed"; private static const CHAPSTARTED:String = "ChapterStarted"; private static const datastore:SharedObject = SharedObject.getLocal("Exploit", "/"); private static const COMPLETE:String = " Complete"; private static var kongregate:KongregateAPI = KongregateAPI.getInstance(); public static function completeLevelFromTitle(_arg1:String):void{ if (_arg1 != ""){ datastore.data[(_arg1 + COMPLETE)] = true; }; } public static function useDDOS(_arg1:int):void{ datastore.data[(DDOSUSED + _arg1)] = true; } public static function isDDOSAvailable(_arg1:int):Boolean{ if (datastore.data[(DDOSUSED + _arg1)]){ return (false); }; return (true); } public static function completeLevel(_arg1:XML):void{ datastore.data[(_arg1.@title + COMPLETE)] = true; } public static function clearSave():void{ datastore.clear(); } public static function isLevelComplete(_arg1:XML, _arg2:int=-1, _arg3:Array=null):Boolean{ if (datastore.data[(_arg1.@title + COMPLETE)]){ return (true); }; return (false); } public static function reportLevelLoaded():void{ kongregate.stats.submit("LevelLoaded", 1); } public static function startChapter(_arg1:int):void{ datastore.data[(CHAPSTARTED + _arg1)] = true; } public static function finishChapter(_arg1:int):void{ kongregate.stats.submit((("Chapter" + _arg1) + "Finished"), 1); } public static function reportChallengesComplete(_arg1:int):void{ kongregate.stats.submit("ChallengesComplete", _arg1); } public static function isChapterStarted(_arg1:int):Boolean{ if (datastore.data[(CHAPSTARTED + _arg1)]){ return (true); }; return (false); } public static function reportLevelCreated():void{ kongregate.stats.submit("LevelCreated", 1); } } }//package Data
Section 30
//DDOSWindow (Interface.DDOSWindow) package Interface { import flash.events.*; import Screens.*; import flash.text.*; import Util.*; import Data.*; public class DDOSWindow extends Screen { private var myLevel:Level; private var chapter:int; private static const WINDOW_HEIGHT:int = 100; private static const WINDOW_WIDTH:int = 400; public function DDOSWindow(_arg1:int, _arg2:Level){ var _local3:TextField; super(); this.myLevel = _arg2; this.chapter = _arg1; this.x = ((Main.GAME_SIZE - WINDOW_WIDTH) / 2); this.y = ((Main.GAME_SIZE - WINDOW_HEIGHT) / 2); graphics.lineStyle(2, 0xFF7F00); graphics.beginFill(0); graphics.drawRect(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); _local3 = new TextField(); _local3.text = "You can skip one puzzle in each chapter with a DDOS attack.\nSkip this puzzle?"; _local3.textColor = 0xFF7F00; _local3.setTextFormat(Fonts.PixelCentered); _local3.width = (WINDOW_WIDTH - 10); _local3.height = 60; _local3.x = 5; _local3.y = 4; _local3.selectable = false; _local3.mouseEnabled = false; _local3.embedFonts = true; _local3.wordWrap = true; this.addChild(_local3); var _local4:TextButton = new TextButton("Skip", 70); _local4.x = (WINDOW_WIDTH - 80); _local4.y = 70; _local4.addEventListener(MouseEvent.CLICK, skipClick); this.addChild(_local4); var _local5:TextButton = new TextButton("Cancel", 70); _local5.x = 10; _local5.y = 70; _local5.addEventListener(MouseEvent.CLICK, cancelClick); this.addChild(_local5); } private function skipClick(_arg1:MouseEvent):void{ SaveData.useDDOS(chapter); Main.theMain.popScreen(); myLevel.completeLevel(); } private function cancelClick(_arg1:MouseEvent):void{ Main.theMain.popScreen(); } } }//package Interface
Section 31
//EditButton (Interface.EditButton) package Interface { import Blocks.*; import flash.display.*; import Util.*; public class EditButton extends Sprite { private var _mode:int; private var _active:Boolean; public var helpText:String; public static const MODE_LINKEDBLOCKER:int = 11; public static const MODE_LATCH:int = 4; public static const MODE_DELETEBLOCK:int = 8; public static const bmPath:Bitmap = new clsPath(); public static const bmDelete:Bitmap = new clsDelete(); public static const MODE_ACTIVATOR:int = 2; public static const MODE_PORT:int = 7; public static const MODE_KEY:int = 5; public static const MODE_DIVIDER:int = 3; public static const MODE_CONTINUEPATH:int = 13; public static const MODE_PATH:int = 9; public static const MODE_DIRECTORY:int = 6; public static const MODE_DELETEPATH:int = 10; public static const MODE_GOAL:int = 0; public static const MODE_LINKEDPORT:int = 12; public static const MODE_BLOCKER:int = 1; private static var clsPath:Class = EditButton_clsPath; private static var clsDelete:Class = EditButton_clsDelete; public function EditButton(_arg1:int){ buttonMode = true; this._mode = _arg1; this.alpha = 0.5; graphics.lineStyle(1, 0xFFFFFF); graphics.beginFill(0x333333); graphics.drawRect(0, 0, 32, 32); switch (_arg1){ case MODE_GOAL: SugarGraphics.drawSprite(graphics, GoalBlock.bmPyramid.bitmapData, 0, 0); helpText = "Click to place a Root (goal) node."; break; case MODE_BLOCKER: SugarGraphics.drawSprite(graphics, BlockerBlock.bmDiamond.bitmapData, 0, 0); helpText = "Click to place a Blocker node."; break; case MODE_ACTIVATOR: SugarGraphics.drawSprite(graphics, ActivatorBlock.bmSphere.bitmapData, 0, 0); helpText = "Click to place a Buffer node."; break; case MODE_DIVIDER: SugarGraphics.drawSprite(graphics, DividerBlock.bmCube.bitmapData, 0, 0); helpText = "Click to place a Divider node."; break; case MODE_LATCH: SugarGraphics.drawSprite(graphics, LatchBlock.bmColumn.bitmapData, 0, 0); helpText = "Click to place a Latch node."; break; case MODE_KEY: SugarGraphics.drawSprite(graphics, KeyBlock.bmKey.bitmapData, 0, 0); helpText = "Click to place a Port Knock Key."; break; case MODE_DIRECTORY: SugarGraphics.drawSprite(graphics, DirectoryBlock.bmEye.bitmapData, 0, 0); helpText = "Click to place a Directory node. If any Directory nodes exist, all Paths will start out invisible."; break; case MODE_PORT: SugarGraphics.drawSprite(graphics, Port.bmPort.bitmapData, 0, 0); helpText = "Click to place a Port."; break; case MODE_DELETEBLOCK: SugarGraphics.drawSprite(graphics, bmDelete.bitmapData, 0, 0); helpText = "Click to delete an existing block or port."; break; case MODE_PATH: SugarGraphics.drawSprite(graphics, bmPath.bitmapData, 0, 0); helpText = "Click to begin a path. This is just to help the player figure out which Buffer is connected to which Blocker."; break; case MODE_DELETEPATH: SugarGraphics.drawSprite(graphics, bmPath.bitmapData, 0, 0); SugarGraphics.drawSprite(graphics, bmDelete.bitmapData, 0, 0); helpText = "Click to delete an existing path."; break; }; } public function get mode():int{ return (_mode); } public function get active():Boolean{ return (_active); } public function set active(_arg1:Boolean):void{ _active = _arg1; if (_arg1){ this.alpha = 1; } else { this.alpha = 0.5; }; } } }//package Interface
Section 32
//EditButton_clsDelete (Interface.EditButton_clsDelete) package Interface { import mx.core.*; public class EditButton_clsDelete extends BitmapAsset { } }//package Interface
Section 33
//EditButton_clsPath (Interface.EditButton_clsPath) package Interface { import mx.core.*; public class EditButton_clsPath extends BitmapAsset { } }//package Interface
Section 34
//InfoButton (Interface.InfoButton) package Interface { import flash.events.*; import flash.display.*; public class InfoButton extends Sprite { private var myText:String; public function InfoButton(_arg1:int, _arg2:int, _arg3:String){ this.x = _arg1; this.y = _arg2; this.myText = _arg3; buttonMode = true; graphics.lineStyle(2, 0xFFFF); graphics.beginFill(0, 0); graphics.drawCircle(10, 10, 10); graphics.drawCircle(10, 5, 1); graphics.endFill(); graphics.lineStyle(4, 0xFFFF); graphics.moveTo(10, 10); graphics.lineTo(10, 16); this.addEventListener(MouseEvent.MOUSE_MOVE, onHover); this.addEventListener(MouseEvent.MOUSE_OUT, onOut); this.addEventListener(MouseEvent.CLICK, onClick); onOut(null); } private function onClick(_arg1:MouseEvent):void{ Main.theMain.pushScreen(new TextWindow(myText)); } private function onHover(_arg1:MouseEvent):void{ alpha = 1; } private function onOut(_arg1:MouseEvent):void{ alpha = 0.5; } } }//package Interface
Section 35
//Level (Interface.Level) package Interface { import flash.events.*; import Blocks.*; import flash.geom.*; import flash.display.*; import Util.*; import Data.*; public class Level extends Sprite { public var size:int; public var myPorts:Array; public var done:Boolean; public var myBlocks:Array; private var _title:String;// = "" public var endOfChapter:Boolean;// = false public var myPaths:Array; public var summary:String;// = "" public var pathLayer:Sprite; public var postText:String; public var myPackets:Array; private static const bmGrid:Bitmap = new clsGrid(); public static const gridSize:int = 32; private static var clsGrid:Class = Level_clsGrid; public function Level(_arg1:int){ this.size = _arg1; pathLayer = new Sprite(); this.addChild(pathLayer); myPaths = new Array(); myBlocks = new Array(); myPorts = new Array(); myPackets = new Array(); drawGrid(); } public function insertPath(_arg1:Path):void{ myPaths.push(_arg1); this.pathLayer.addChild(_arg1); } public function enlarge():void{ var _local1:Block; var _local2:Path; var _local3:Port; var _local4:Point; if (size >= 9){ return; }; size = (size + 2); for each (_local1 in myBlocks) { _local1.x = (_local1.x + gridSize); _local1.gridx++; _local1.y = (_local1.y + gridSize); _local1.gridy++; }; for each (_local2 in myPaths) { for each (_local4 in _local2.points) { _local4.x++; _local4.y++; }; _local2.draw(); }; for each (_local3 in myPorts) { if (_local3.gridx == (size - 2)){ _local3.gridx = (_local3.gridx + 2); _local3.x = (_local3.x + (gridSize * 2)); }; if (_local3.gridy == (size - 2)){ _local3.gridy = (_local3.gridy + 2); _local3.y = (_local3.y + (gridSize * 2)); }; if ((((_local3.gridx == -1)) || ((_local3.gridx == size)))){ _local3.gridy++; _local3.y = (_local3.y + gridSize); }; if ((((_local3.gridy == -1)) || ((_local3.gridy == size)))){ _local3.gridx++; _local3.x = (_local3.x + gridSize); }; }; drawGrid(); } public function removePath(_arg1:Path):void{ var _local2:int = myPaths.indexOf(_arg1); myPaths.splice(_local2, 1); this.pathLayer.removeChild(_arg1); } public function addPacket(_arg1:Packet):void{ this.addChild(_arg1); myPackets.push(_arg1); } public function insertBlock(_arg1:Block):Boolean{ if ((((((((_arg1.gridx >= 0)) && ((_arg1.gridy >= 0)))) && ((_arg1.gridx < size)))) && ((_arg1.gridy < size)))){ removeBlockAt(_arg1.gridx, _arg1.gridy); myBlocks.push(_arg1); this.addChild(_arg1); return (true); }; return (false); } private function drawGrid():void{ graphics.clear(); graphics.beginFill(0, 0); graphics.drawRect(-(gridSize), -(gridSize), ((size + 2) * gridSize), ((size + 2) * gridSize)); SugarGraphics.fillTexture(graphics, bmGrid.bitmapData, 0, 0, (size * gridSize), (size * gridSize)); } public function get title():String{ return (_title); } public function removePathAt(_arg1:Number, _arg2:Number):void{ var _local3:Path; for each (_local3 in myPaths) { if (_local3.hitTestPoint(_arg1, _arg2, true)){ removePath(_local3); }; }; } public function shrink():void{ var _local1:Block; var _local2:int; var _local3:Path; var _local4:Port; var _local5:Point; if (size <= 5){ return; }; size = (size - 2); for each (_local1 in myBlocks) { _local1.x = (_local1.x - gridSize); _local1.gridx--; _local1.y = (_local1.y - gridSize); _local1.gridy--; }; _local2 = 0; while (_local2 < myBlocks.length) { _local1 = myBlocks[_local2]; if ((((((((_local1.gridx < 0)) || ((_local1.gridx >= size)))) || ((_local1.gridy < 0)))) || ((_local1.gridy >= size)))){ removeBlock(_local1); _local2--; }; _local2++; }; for each (_local3 in myPaths) { for each (_local5 in _local3.points) { _local5.x--; _local5.y--; }; _local3.draw(); }; for each (_local4 in myPorts) { if (_local4.facing == Main.DIR_LEFT){ _local4.gridx = (_local4.gridx - 2); _local4.x = (_local4.x - (gridSize * 2)); } else { if (_local4.facing == Main.DIR_UP){ _local4.gridy = (_local4.gridy - 2); _local4.y = (_local4.y - (gridSize * 2)); }; }; if ((((_local4.facing == Main.DIR_LEFT)) || ((_local4.facing == Main.DIR_RIGHT)))){ _local4.gridy--; _local4.y = (_local4.y - gridSize); } else { if ((((_local4.facing == Main.DIR_DOWN)) || ((_local4.facing == Main.DIR_UP)))){ _local4.gridx--; _local4.x = (_local4.x - gridSize); }; }; }; _local2 = 0; while (_local2 < myPorts.length) { _local4 = myPorts[_local2]; if ((((_local4.facing == Main.DIR_LEFT)) || ((_local4.facing == Main.DIR_RIGHT)))){ if ((((_local4.gridy < 0)) || ((_local4.gridy >= size)))){ removePort(_local4); _local2--; }; } else { if ((((_local4.facing == Main.DIR_DOWN)) || ((_local4.facing == Main.DIR_UP)))){ if ((((_local4.gridx < 0)) || ((_local4.gridx >= size)))){ removePort(_local4); _local2--; }; }; }; _local2++; }; _local2 = 0; while (_local2 < myPaths.length) { _local3 = myPaths[_local2]; if (!_local3.points.every(pathPointInBounds)){ removePath(_local3); _local2--; }; _local2++; }; drawGrid(); } public function insertPort(_arg1:Port):void{ if ((((((((((_arg1.gridx == -1)) || ((_arg1.gridx == size)))) && ((_arg1.gridy >= 0)))) && ((_arg1.gridy < size)))) || ((((((((_arg1.gridy == -1)) || ((_arg1.gridy == size)))) && ((_arg1.gridx >= 0)))) && ((_arg1.gridx < size)))))){ removePortAt(_arg1.gridx, _arg1.gridy); myPorts.push(_arg1); this.addChild(_arg1); }; } public function completeLevel(_arg1:Event=null):void{ if (done){ return; }; done = true; SaveData.completeLevelFromTitle(title); Main.theMain.popScreen(); if (endOfChapter){ Main.theMain.popScreen(); }; if (postText){ Main.theMain.pushScreen(new TextWindow(postText)); }; } public function removePort(_arg1:Port):void{ var _local2:int = myPorts.indexOf(_arg1); myPorts.splice(_local2, 1); var _local3:Block; var _local4:int; while (_local4 < myBlocks.length) { if ((myBlocks[_local4] is KeyBlock)){ if (myBlocks[_local4].target > _local2){ myBlocks[_local4].target--; } else { if (myBlocks[_local4].target == _local2){ _local3 = myBlocks[_local4]; }; }; }; _local4++; }; this.removeChild(_arg1); if (_local3){ _local3.target = -1; removeBlock(_local3); }; } private function pathPointInBounds(_arg1:Point, _arg2:int=-1, _arg3:Array=null):Boolean{ return (!((((((((_arg1.x < -0.5)) || ((_arg1.x > (size - 0.5))))) || ((_arg1.y < -0.5)))) || ((_arg1.y > (size - 0.5)))))); } public function getLevelXML():XML{ var _local2:Block; var _local3:Path; var _local4:Port; var _local5:Point; var _local1 = (("<level size=\"" + this.size.toString()) + "\">\n"); for each (_local2 in myBlocks) { _local1 = (_local1 + (((((("\t<block type=\"" + _local2.xmlType) + "\" x=\"") + _local2.gridx) + "\" y=\"") + _local2.gridy) + "\"")); if ((((_local2 is ActivatorBlock)) || ((_local2 is KeyBlock)))){ _local1 = (_local1 + ((" target=\"" + _local2.target) + "\"")); }; _local1 = (_local1 + " />\n"); }; for each (_local3 in myPaths) { _local1 = (_local1 + "\t<path>\n"); for each (_local5 in _local3.points) { _local1 = (_local1 + (((("\t\t<point x=\"" + _local5.x) + "\" y=\"") + _local5.y) + "\" />\n")); }; _local1 = (_local1 + "\t</path>\n"); }; for each (_local4 in myPorts) { _local1 = (_local1 + (((("\t<port x=\"" + _local4.gridx) + "\" y=\"") + _local4.gridy) + "\" ")); if (_local4.startsLocked){ _local1 = (_local1 + "locked=\"true\" "); }; _local1 = (_local1 + "/>\n"); }; _local1 = (_local1 + "</level>"); return (new XML(_local1)); } public function getLevelCode():String{ var _local2:Block; var _local3:Path; var _local4:Port; var _local5:Point; var _local1:String = this.size.toString(); for each (_local2 in myBlocks) { _local1 = (_local1 + (((_local2.codechar + _local2.gridx) + ",") + _local2.gridy)); if ((((_local2 is ActivatorBlock)) || ((_local2 is KeyBlock)))){ _local1 = (_local1 + (">" + _local2.target)); }; }; for each (_local3 in myPaths) { _local1 = (_local1 + "T"); for each (_local5 in _local3.points) { _local1 = (_local1 + (((_local5.x + ",") + _local5.y) + ";")); }; }; for each (_local4 in myPorts) { _local1 = (_local1 + ((("P" + _local4.gridx) + ",") + _local4.gridy)); if (_local4.startsLocked){ _local1 = (_local1 + "x"); }; }; return (_local1); } private function pushItemFromCode(_arg1:String):void{ var _local2:Array; var _local3:Block; var _local4:Path; var _local5:Boolean; var _local6:Port; _local2 = _arg1.match(/[BDGLR](?P<x>[\d\-\.]+),(?P<y>[\d\-\.]+)/); if (_local2){ switch (_arg1.charAt(0)){ case "B": _local3 = new BlockerBlock(_local2.x, _local2.y, this); break; case "D": _local3 = new DividerBlock(_local2.x, _local2.y, this); break; case "G": _local3 = new GoalBlock(_local2.x, _local2.y, this); break; case "L": _local3 = new LatchBlock(_local2.x, _local2.y, this); break; case "R": _local3 = new DirectoryBlock(_local2.x, _local2.y, this); break; default: throw (new Error((("Parse error on item \"" + _arg1) + "\"."))); }; this.myBlocks.push(_local3); return; }; _local2 = _arg1.match(/[AK](?P<x>[\d\-\.]+),(?P<y>[\d\-\.]+)>(?P<target>\d+)/); if (_local2){ switch (_arg1.charAt(0)){ case "K": _local3 = new KeyBlock(_local2.x, _local2.y, _local2.target, this); break; case "A": _local3 = new ActivatorBlock(_local2.x, _local2.y, _local2.target, this); break; }; this.myBlocks.push(_local3); return; }; _local2 = _arg1.match(/T([\d\-\.]+,[\d\-\.]+;)+/); if (_local2){ _local4 = Path.getPathFromPathCodeArray(_arg1.match(/[\d\-\.]+,[\d\-\.]+;/g)); this.myPaths.push(_local4); return; }; _local2 = _arg1.match(/P(?P<x>[\d\-\.]+),(?P<y>[\d\-\.]+)x?/); if (_local2){ _local5 = (_arg1.charAt((_arg1.length - 1)) == "x"); _local6 = new Port(_local2.x, _local2.y, this, _local5); this.myPorts.push(_local6); return; }; throw (new Error((("Parse error on item \"" + _arg1) + "\"."))); } public function removeBlock(_arg1:Block):void{ var _local2:int = myBlocks.indexOf(_arg1); myBlocks.splice(_local2, 1); var _local3:Block; var _local4:int; while (_local4 < myBlocks.length) { if ((myBlocks[_local4] is ActivatorBlock)){ if (myBlocks[_local4].target > _local2){ myBlocks[_local4].target--; } else { if (myBlocks[_local4].target == _local2){ _local3 = myBlocks[_local4]; }; }; }; _local4++; }; this.removeChild(_arg1); if (_local3){ removeBlock(_local3); }; if ((((_arg1 is KeyBlock)) && ((_arg1.target >= 0)))){ removePort(myPorts[_arg1.target]); return; }; } public function destroyPacket(_arg1:Packet):void{ if (myPackets.indexOf(_arg1) == -1){ return; }; this.removeChild(_arg1); myPackets.splice(myPackets.indexOf(_arg1), 1); } public function removePortAt(_arg1:int, _arg2:int):Boolean{ var _local3:Port; for each (_local3 in myPorts) { if ((((_local3.gridx == _arg1)) && ((_local3.gridy == _arg2)))){ this.removePort(_local3); return (true); }; }; return (false); } public function step():void{ var _local1:Packet; var _local2:Block; var _local3:Port; if (done){ return; }; for each (_local1 in myPackets) { _local1.step(); if (done){ return; }; }; for each (_local2 in myBlocks) { _local2.step(); }; for each (_local3 in myPorts) { _local3.step(); }; } public function removeBlockAt(_arg1:int, _arg2:int):Boolean{ var _local3:Block; for each (_local3 in myBlocks) { if ((((_local3.gridx == _arg1)) && ((_local3.gridy == _arg2)))){ this.removeBlock(_local3); return (true); }; }; return (false); } public static function getLevelFromCode(_arg1:String, _arg2:Boolean=false):Level{ var _local7:String; var _local8:Path; var _local9:Block; var _local10:Port; var _local3:Array = _arg1.match(/(?P<size>\d+)(?P<data>.*)/); if ((((((_local3 == null)) || ((_local3.size == null)))) || ((_local3.data == null)))){ throw (new Error("Level code was improperly formed.")); }; var _local4:Level = new Level(_local3.size); var _local5:RegExp = /[ABDGKLTPR][\d,>;\-\.]+x?/g; var _local6:Array = _local3.data.match(_local5); for each (_local7 in _local6) { _local4.pushItemFromCode(_local7); }; for each (_local8 in _local4.myPaths) { _local4.pathLayer.addChild(_local8); }; for each (_local9 in _local4.myBlocks) { _local4.addChild(_local9); if ((((_local9 is DirectoryBlock)) && (!(_arg2)))){ _local4.pathLayer.visible = false; }; }; for each (_local10 in _local4.myPorts) { if (_arg2){ if (_local10.startsLocked){ _local10.visible = true; _local10.alpha = 0.5; } else { _local10.alpha = 1; }; }; _local4.addChild(_local10); }; return (_local4); } public static function getLevelFromXML(_arg1:XML, _arg2:String, _arg3:Boolean=false):Level{ var _local6:Path; var _local8:Block; var _local9:int; var _local11:Port; var _local4:Level = new Level(_arg1.@size); _local4._title = _arg1.@title; _local4.postText = _arg2; _local4.endOfChapter = _arg3; _local4.summary = _arg1.summary.toString(); var _local5:XMLList = _arg1.path; _local9 = 0; while (_local9 < _local5.length()) { _local6 = Path.getPathFromXMLList(_local5[_local9].point); _local4.pathLayer.addChild(_local6); _local4.myPaths.push(_local6); _local9++; }; var _local7:XMLList = _arg1.block; _local9 = 0; while (_local9 < _local7.length()) { switch (_local7[_local9].@type.toString()){ case "goal": _local8 = new GoalBlock(_local7[_local9].@x, _local7[_local9].@y, _local4); break; case "blocker": _local8 = new BlockerBlock(_local7[_local9].@x, _local7[_local9].@y, _local4); break; case "activator": _local8 = new ActivatorBlock(_local7[_local9].@x, _local7[_local9].@y, _local7[_local9].@target, _local4); break; case "divider": _local8 = new DividerBlock(_local7[_local9].@x, _local7[_local9].@y, _local4); break; case "latch": _local8 = new LatchBlock(_local7[_local9].@x, _local7[_local9].@y, _local4); break; case "key": _local8 = new KeyBlock(_local7[_local9].@x, _local7[_local9].@y, _local7[_local9].@target, _local4); break; case "directory": _local8 = new DirectoryBlock(_local7[_local9].@x, _local7[_local9].@y, _local4); _local4.pathLayer.visible = false; break; }; _local4.addChild(_local8); _local4.myBlocks.push(_local8); _local9++; }; var _local10:XMLList = _arg1.port; _local9 = 0; while (_local9 < _local10.length()) { _local11 = new Port(_local10[_local9].@x, _local10[_local9].@y, _local4, (_local10[_local9].@locked == "true")); _local4.myPorts.push(_local11); _local4.addChild(_local11); _local9++; }; return (_local4); } } }//package Interface
Section 36
//Level_clsGrid (Interface.Level_clsGrid) package Interface { import mx.core.*; public class Level_clsGrid extends BitmapAsset { } }//package Interface
Section 37
//LevelButton (Interface.LevelButton) package Interface { import flash.events.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; public class LevelButton extends Sprite { private var fading:Boolean;// = true private var level:XML; private var check:Sprite; private var currAlpha:Number;// = 1 private var textField:TextField; private var chapter:int; private var mouseOver:Boolean; private var endOfChapter:Boolean; public var title:String; private var postText:String; private var preLevels:Array; public function LevelButton(_arg1:int, _arg2:int, _arg3:String, _arg4:XML, _arg5:int=0, _arg6:Array=null, _arg7:String=null, _arg8:Boolean=false){ this.chapter = _arg5; buttonMode = true; this.x = _arg1; this.y = _arg2; this.level = _arg4; this.preLevels = _arg6; this.postText = _arg7; this.endOfChapter = _arg8; title = _arg4.@title; textField = new TextField(); textField.text = _arg3; textField.textColor = 0xFF7F00; textField.setTextFormat(Fonts.PixelSmall); textField.width = 24; textField.height = 20; textField.x = -12; textField.y = -8; textField.selectable = false; textField.mouseEnabled = false; textField.embedFonts = true; this.addChild(textField); graphics.lineStyle(2, 0xFF7F00, 1, true); graphics.beginFill(0); graphics.drawCircle(0, 0, 14); graphics.endFill(); check = new Sprite(); check.graphics.lineStyle(3, 0xFF00); check.graphics.moveTo(0, 5); check.graphics.lineTo(5, 10); check.graphics.lineTo(10, 0); check.x = 12; check.mouseEnabled = false; check.visible = SaveData.isLevelComplete(_arg4); this.addChild(check); this.addEventListener(MouseEvent.CLICK, startLevel); this.addEventListener(MouseEvent.MOUSE_MOVE, onHover); this.addEventListener(MouseEvent.MOUSE_OUT, onOut); onOut(null); if (((_arg6) && (!(_arg6.every(SaveData.isLevelComplete))))){ this.visible = false; }; currAlpha = 1; } private function startLevel(_arg1:MouseEvent):void{ Main.theMain.showPuzzle(level, postText, chapter, endOfChapter); } public function get isComplete():Boolean{ return (check.visible); } public function step():void{ if (mouseOver){ alpha = 1; } else { if (((!(check.visible)) && ((chapter >= 0)))){ if (fading){ if (currAlpha > 0.5){ currAlpha = (currAlpha - 0.05); } else { fading = false; }; } else { if (currAlpha < 1){ currAlpha = (currAlpha + 0.05); } else { fading = true; }; }; alpha = currAlpha; } else { alpha = 0.5; }; }; } private function onHover(_arg1:MouseEvent):void{ mouseOver = true; } public function refresh():void{ check.visible = SaveData.isLevelComplete(level); if (preLevels){ this.visible = preLevels.every(SaveData.isLevelComplete); }; } private function onOut(_arg1:MouseEvent):void{ mouseOver = false; } } }//package Interface
Section 38
//LoadCodePopup (Interface.LoadCodePopup) package Interface { import flash.events.*; import Screens.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; public class LoadCodePopup extends Screen { private var loadField:TextField; private static const WINDOW_HEIGHT:int = 50; private static const WINDOW_WIDTH:int = 400; public function LoadCodePopup(){ var close:Sprite; var loadText:String; super(); this.x = ((Main.GAME_SIZE - WINDOW_WIDTH) / 2); this.y = ((Main.GAME_SIZE - WINDOW_HEIGHT) / 2); graphics.beginFill(0, 0); graphics.drawRect(-(this.x), -(this.y), Main.GAME_SIZE, Main.GAME_SIZE); graphics.endFill(); graphics.lineStyle(2, 0xFF7F00); graphics.beginFill(0); graphics.drawRect(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); close = new Sprite(); close.graphics.beginFill(0); close.graphics.lineStyle(1, 0xFF7F00); close.graphics.drawRect(0, 0, 12, 12); close.graphics.endFill(); close.graphics.moveTo(3, 3); close.graphics.lineTo(10, 10); close.graphics.moveTo(10, 3); close.graphics.lineTo(3, 10); close.buttonMode = true; close.x = (WINDOW_WIDTH - 16); close.y = 4; close.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.popScreen(); }); this.addChild(close); var title:TextField = new TextField(); title.text = "LOAD LEVEL CODE"; title.textColor = 0xFF7F00; title.setTextFormat(Fonts.PixelSmall); title.width = (WINDOW_WIDTH - 10); title.height = 20; title.x = 5; title.y = 4; title.selectable = false; title.mouseEnabled = false; title.embedFonts = true; this.addChild(title); loadText = "(paste level code to load here with CTRL-V or Command-V)"; loadField = new TextField(); loadField.border = true; loadField.borderColor = 0xFF7F00; loadField.background = true; loadField.backgroundColor = 0x442200; loadField.textColor = 0xFFFFFF; loadField.type = TextFieldType.INPUT; loadField.text = loadText; loadField.width = (WINDOW_WIDTH - 65); loadField.height = 20; loadField.x = 5; loadField.y = 25; loadField.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ if (loadField.text == loadText){ loadField.text = ""; }; }); this.addChild(loadField); var loadCodeButton:TextButton = new TextButton("Load", 50); loadCodeButton.x = (WINDOW_WIDTH - 55); loadCodeButton.y = 25; loadCodeButton.addEventListener(MouseEvent.CLICK, loadCode); this.addChild(loadCodeButton); } private function loadCode(_arg1:MouseEvent):void{ var newLevel:Level; var e = _arg1; var code:String = loadField.text; loadField.text = ""; try { newLevel = Level.getLevelFromCode(code); } catch(e:Error) { loadField.text = ("ERROR: " + e.message); return; }; Main.theMain.popScreen(); Main.theMain.pushScreen(new PlayScreen(newLevel)); SaveData.reportLevelLoaded(); } } }//package Interface
Section 39
//MusicButton (Interface.MusicButton) package Interface { import flash.events.*; import flash.display.*; import Util.*; public class MusicButton extends Sprite { private static const musicIconBitmap:Bitmap = new musicIcon(); private static var musicIcon:Class = MusicButton_musicIcon; public function MusicButton(){ this.addChild(musicIconBitmap); this.x = (Main.GAME_SIZE - 24); this.y = 24; this.buttonMode = true; this.addEventListener(MouseEvent.CLICK, toggleMusic); } private function toggleMusic(_arg1:MouseEvent):void{ Music.musicActive = !(Music.musicActive); if (Music.musicActive){ this.alpha = 1; } else { this.alpha = 0.5; }; } } }//package Interface
Section 40
//MusicButton_musicIcon (Interface.MusicButton_musicIcon) package Interface { import mx.core.*; public class MusicButton_musicIcon extends BitmapAsset { } }//package Interface
Section 41
//Packet (Interface.Packet) package Interface { import Screens.*; import Blocks.*; import flash.display.*; import Util.*; public class Packet extends Sprite { private var myLevel:Level; private var facing:int; private static const bmPacket:Bitmap = new clsPacket(); private static const SPEED:int = 4; private static var clsPacket:Class = Packet_clsPacket; public function Packet(_arg1:int, _arg2:int, _arg3:int, _arg4:Level){ this.x = _arg1; this.y = _arg2; this.facing = _arg3; this.myLevel = _arg4; this.mouseEnabled = false; SugarGraphics.drawSprite(graphics, bmPacket.bitmapData, -21, -2); this.rotation = (90 * facing); SFX.ping(); } private function hitBlock(_arg1:Block):void{ var _local2:int; var _local3:int; if ((_arg1 is BlockerBlock)){ if (_arg1.alpha == 1){ myLevel.destroyPacket(this); SFX.block(); }; } else { if ((_arg1 is DividerBlock)){ myLevel.destroyPacket(this); _local2 = (_arg1.x + (Level.gridSize / 2)); _local3 = (_arg1.y + (Level.gridSize / 2)); if (myLevel.myPackets.length >= 50){ return; }; switch (facing){ case Main.DIR_RIGHT: case Main.DIR_LEFT: myLevel.addPacket(new Packet(_local2, _local3, Main.DIR_DOWN, myLevel)); myLevel.addPacket(new Packet(_local2, _local3, Main.DIR_UP, myLevel)); break; case Main.DIR_DOWN: case Main.DIR_UP: myLevel.addPacket(new Packet(_local2, _local3, Main.DIR_LEFT, myLevel)); myLevel.addPacket(new Packet(_local2, _local3, Main.DIR_RIGHT, myLevel)); break; }; } else { if ((_arg1 is ActivatorBlock)){ SFX.sswitch(); ActivatorBlock(_arg1).activate(); myLevel.destroyPacket(this); } else { if ((_arg1 is LatchBlock)){ if (_arg1.alpha == 1){ SFX.latch(); LatchBlock(_arg1).deactivate(); myLevel.destroyPacket(this); }; } else { if ((_arg1 is GoalBlock)){ PlayScreen(myLevel.parent).backButton.mouseEnabled = false; myLevel.destroyPacket(this); SFX.success(myLevel.completeLevel); } else { if ((((_arg1 is KeyBlock)) && (_arg1.visible))){ SFX.key(); myLevel.myPorts[KeyBlock(_arg1).target].visible = true; _arg1.visible = false; myLevel.destroyPacket(this); } else { if ((((_arg1 is DirectoryBlock)) && (_arg1.visible))){ SFX.reveal(); myLevel.pathLayer.visible = true; _arg1.visible = false; myLevel.destroyPacket(this); }; }; }; }; }; }; }; } public function step():void{ var _local1:int; var _local2:int; var _local3:Block; switch (facing){ case Main.DIR_RIGHT: x = (x + SPEED); break; case Main.DIR_DOWN: y = (y + SPEED); break; case Main.DIR_LEFT: x = (x - SPEED); break; case Main.DIR_UP: y = (y - SPEED); break; }; if ((((((((x < (-(myLevel.x) - 30))) || ((x > (Main.GAME_SIZE - myLevel.x))))) || ((y < (-(myLevel.y) - 30))))) || ((y > (Main.GAME_SIZE - myLevel.y))))){ myLevel.destroyPacket(this); }; for each (_local3 in myLevel.myBlocks) { _local1 = (_local3.x + (Level.gridSize / 2)); _local2 = (_local3.y + (Level.gridSize / 2)); if ((((Math.abs((x - _local1)) < 1)) && ((Math.abs((y - _local2)) < 1)))){ hitBlock(_local3); }; }; } } }//package Interface
Section 42
//Packet_clsPacket (Interface.Packet_clsPacket) package Interface { import mx.core.*; public class Packet_clsPacket extends BitmapAsset { } }//package Interface
Section 43
//Path (Interface.Path) package Interface { import flash.geom.*; import flash.display.*; public class Path extends Sprite { public var points:Array; public function Path(){ points = new Array(); } public function draw():void{ graphics.clear(); graphics.lineStyle(3, 0x666666); graphics.moveTo((Level.gridSize * (0.5 + Number(points[0].x))), (Level.gridSize * (0.5 + Number(points[0].y)))); var _local1 = 1; while (_local1 < points.length) { graphics.lineTo((Level.gridSize * (0.5 + Number(points[_local1].x))), (Level.gridSize * (0.5 + Number(points[_local1].y)))); _local1++; }; graphics.lineStyle(1, 0x999999); graphics.moveTo((Level.gridSize * (0.5 + Number(points[0].x))), (Level.gridSize * (0.5 + Number(points[0].y)))); _local1 = 1; while (_local1 < points.length) { graphics.lineTo((Level.gridSize * (0.5 + Number(points[_local1].x))), (Level.gridSize * (0.5 + Number(points[_local1].y)))); _local1++; }; } public function endsAt(_arg1:Number, _arg2:Number):Boolean{ var _local3:Point = points[(points.length - 1)]; return ((((_arg1 == _local3.x)) && ((_arg2 == _local3.y)))); } public function addPoint(_arg1:Number, _arg2:Number):void{ points.push(new Point(_arg1, _arg2)); draw(); } public static function getPathFromXMLList(_arg1:XMLList):Path{ var _local2:Path = new (Path); var _local3:int; while (_local3 < _arg1.length()) { _local2.points.push(new Point(_arg1[_local3].@x, _arg1[_local3].@y)); _local3++; }; _local2.draw(); return (_local2); } public static function getPathFromPathCodeArray(_arg1:Array):Path{ var _local3:Array; var _local2:Path = new (Path); var _local4:int; while (_local4 < _arg1.length) { _local3 = _arg1[_local4].match(/(?P<x>[\d\-\.]+),(?P<y>[\d\-\.]+);/); if (_local3 == null){ throw (new Error((("Could not parse path coordinate \"" + _arg1[_local4]) + "\"."))); }; _local2.points.push(new Point(_local3.x, _local3.y)); _local4++; }; _local2.draw(); return (_local2); } public static function makePathStartingAt(_arg1:Number, _arg2:Number):Path{ var _local3:Path = new (Path); _local3.points.push(new Point(_arg1, _arg2)); return (_local3); } } }//package Interface
Section 44
//Port (Interface.Port) package Interface { import flash.events.*; import flash.geom.*; import flash.display.*; import Util.*; public class Port extends Sprite { private var hovering:Boolean;// = false private var baseAlpha:Number;// = 1 public var gridx:int; public var gridy:int; private var myLevel:Level; public var facing:int; public var startsLocked:Boolean; public static const bmPort:Bitmap = new clsPort(); private static var clsPort:Class = Port_clsPort; public function Port(_arg1:int, _arg2:int, _arg3:Level, _arg4:Boolean){ buttonMode = true; myLevel = _arg3; if (_arg4){ this.visible = false; startsLocked = true; }; gridx = _arg1; gridy = _arg2; this.x = (Level.gridSize * _arg1); this.y = (Level.gridSize * _arg2); if (_arg1 == -1){ facing = Main.DIR_RIGHT; } else { if (_arg1 == myLevel.size){ facing = Main.DIR_LEFT; } else { if (_arg2 == -1){ facing = Main.DIR_DOWN; } else { if (_arg2 == myLevel.size){ facing = Main.DIR_UP; }; }; }; }; var _local5:Matrix = new Matrix(); _local5.rotate(((Math.PI / 2) * facing)); SugarGraphics.drawSprite(graphics, bmPort.bitmapData, 0, 0, _local5); this.alpha = 0.5; this.addEventListener(MouseEvent.CLICK, spawnPacket); this.addEventListener(MouseEvent.MOUSE_MOVE, onHover); this.addEventListener(MouseEvent.MOUSE_OUT, onOut); } private function spawnPacket(_arg1:MouseEvent):void{ if (this.baseAlpha == 1){ myLevel.addPacket(new Packet((this.x + (Level.gridSize / 2)), (this.y + (Level.gridSize / 2)), facing, myLevel)); this.baseAlpha = 0; }; } public function step():void{ if (baseAlpha < 0.75){ baseAlpha = (baseAlpha + 0.005); } else { if ((((baseAlpha < 1)) && ((baseAlpha >= 0.75)))){ baseAlpha = 1; SFX.pingrecover(); }; }; if (hovering){ alpha = baseAlpha; } else { alpha = (0.5 * baseAlpha); }; } private function onOut(_arg1:MouseEvent):void{ hovering = false; } private function onHover(_arg1:MouseEvent):void{ hovering = true; } public static function validLocation(_arg1:int, _arg2:int, _arg3:int):Boolean{ if ((((_arg1 == -1)) || ((_arg1 == _arg3)))){ if ((((_arg2 <= -1)) || ((_arg2 >= _arg3)))){ return (false); }; return (true); }; if ((((_arg2 == -1)) || ((_arg2 == _arg3)))){ if ((((_arg1 <= -1)) || ((_arg1 >= _arg3)))){ return (false); }; return (true); }; return (false); } } }//package Interface
Section 45
//Port_clsPort (Interface.Port_clsPort) package Interface { import mx.core.*; public class Port_clsPort extends BitmapAsset { } }//package Interface
Section 46
//ScrollBar (Interface.ScrollBar) package Interface { import flash.events.*; import flash.geom.*; import flash.display.*; import flash.text.*; public class ScrollBar extends Sprite { private var myTextfield:TextField; private var thumbDragging:Boolean; private var thumb:Sprite; private var scroll_bottomy:int; private static const SCROLL_TOPY:int = 20; public function ScrollBar(_arg1:TextField){ var _local3:Sprite; super(); myTextfield = _arg1; myTextfield.getCharBoundaries(0); myTextfield.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel); var _local2:Sprite = new Sprite(); _local2.graphics.beginFill(0xFF7F00); _local2.graphics.moveTo(0, 15); _local2.graphics.lineTo(7, 0); _local2.graphics.lineTo(8, 0); _local2.graphics.lineTo(15, 15); _local2.graphics.lineTo(0, 15); _local2.graphics.endFill(); _local2.addEventListener(MouseEvent.CLICK, scrollUp); _local2.buttonMode = true; this.addChild(_local2); _local3 = new Sprite(); _local3.graphics.beginFill(0xFF7F00); _local3.graphics.moveTo(0, 0); _local3.graphics.lineTo(7, 15); _local3.graphics.lineTo(8, 15); _local3.graphics.lineTo(15, 0); _local3.graphics.lineTo(0, 0); _local3.graphics.endFill(); _local3.y = (_arg1.height - 15); _local3.addEventListener(MouseEvent.CLICK, scrollDown); _local3.buttonMode = true; this.addChild(_local3); scroll_bottomy = (height - 20); thumb = new Sprite(); var _local4:int = (myTextfield.bottomScrollV - (myTextfield.scrollV - 1)); var _local5:int = (((scroll_bottomy - SCROLL_TOPY) / myTextfield.numLines) * _local4); thumb.graphics.beginFill(0x883300); thumb.graphics.drawRect(0, 0, 15, _local5); thumb.graphics.endFill(); thumb.buttonMode = true; this.addChild(thumb); thumb.addEventListener(MouseEvent.MOUSE_DOWN, thumbDown); moveThumb(); } private function onWheel(_arg1:MouseEvent):void{ var _local2:int; if (_arg1.delta > 0){ _local2 = 0; while (_local2 < _arg1.delta) { scrollUp(null); _local2++; }; } else { _local2 = 0; while (_local2 > _arg1.delta) { scrollDown(null); _local2--; }; }; } private function thumbMove(_arg1:MouseEvent):void{ if (thumbDragging){ myTextfield.scrollV = ((((thumb.y - SCROLL_TOPY) / (scroll_bottomy - SCROLL_TOPY)) * myTextfield.numLines) + 1); }; } private function scrollUp(_arg1:MouseEvent):void{ if (myTextfield.scrollV > 1){ myTextfield.scrollV--; moveThumb(); }; } private function scrollDown(_arg1:MouseEvent):void{ if (myTextfield.scrollV < myTextfield.maxScrollV){ myTextfield.scrollV++; moveThumb(); }; } private function thumbUp(_arg1:MouseEvent):void{ thumb.stopDrag(); thumbDragging = false; Main.theMain.removeEventListener(MouseEvent.MOUSE_UP, thumbUp, true); Main.theMain.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMove); } private function moveThumb():void{ thumb.y = (SCROLL_TOPY + (((scroll_bottomy - SCROLL_TOPY) / myTextfield.numLines) * (myTextfield.scrollV - 1))); } private function thumbDown(_arg1:MouseEvent):void{ thumb.startDrag(false, new Rectangle(thumb.x, SCROLL_TOPY, 0, ((scroll_bottomy - SCROLL_TOPY) - thumb.height))); thumbDragging = true; Main.theMain.addEventListener(MouseEvent.MOUSE_UP, thumbUp, true); Main.theMain.addEventListener(MouseEvent.MOUSE_MOVE, thumbMove); } } }//package Interface
Section 47
//SoundButton (Interface.SoundButton) package Interface { import flash.events.*; import flash.display.*; import Util.*; public class SoundButton extends Sprite { private static const soundIconBitmap:Bitmap = new soundIcon(); private static var soundIcon:Class = SoundButton_soundIcon; public function SoundButton(){ this.addChild(soundIconBitmap); this.x = (Main.GAME_SIZE - 24); this.y = 8; this.buttonMode = true; this.addEventListener(MouseEvent.CLICK, toggleSound); } private function toggleSound(_arg1:MouseEvent):void{ SFX.soundActive = !(SFX.soundActive); if (SFX.soundActive){ this.alpha = 1; } else { this.alpha = 0.5; }; } } }//package Interface
Section 48
//SoundButton_soundIcon (Interface.SoundButton_soundIcon) package Interface { import mx.core.*; public class SoundButton_soundIcon extends BitmapAsset { } }//package Interface
Section 49
//TextButton (Interface.TextButton) package Interface { import flash.events.*; import flash.display.*; import flash.text.*; import Util.*; public class TextButton extends Sprite { private var textField:TextField; public function TextButton(_arg1:String, _arg2:int){ buttonMode = true; textField = new TextField(); textField.text = _arg1; textField.textColor = 0xFF7F00; textField.setTextFormat(Fonts.PixelSmall); textField.width = _arg2; textField.height = 18; textField.x = 2; textField.y = 2; textField.selectable = false; textField.mouseEnabled = false; textField.embedFonts = true; this.addChild(textField); graphics.lineStyle(2, 0xFF7F00); graphics.drawRoundRect(0, 0, textField.width, (textField.height + 2), 4); } public static function makeDDOSButton(_arg1:int, _arg2:Level):TextButton{ var chapter = _arg1; var level = _arg2; var DDOSButton:TextButton = new TextButton("DDOS", 50); DDOSButton.x = (Main.GAME_SIZE - 65); DDOSButton.y = 475; DDOSButton.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new DDOSWindow(chapter, level)); }); return (DDOSButton); } public static function makeBackButton():TextButton{ var backButton:TextButton = new TextButton("< Back", 70); backButton.x = 15; backButton.y = 475; backButton.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.popScreen(); }); return (backButton); } } }//package Interface
Section 50
//TextWindow (Interface.TextWindow) package Interface { import flash.events.*; import Screens.*; import flash.text.*; import Util.*; public class TextWindow extends Screen { private var textField:TextField; private static const WINDOW_SIZE:int = 400; public function TextWindow(_arg1:String){ var content = _arg1; super(); this.x = ((Main.GAME_SIZE - WINDOW_SIZE) / 2); this.y = ((Main.GAME_SIZE - WINDOW_SIZE) / 2); graphics.beginFill(0, 0); graphics.drawRect(-(this.x), -(this.y), Main.GAME_SIZE, Main.GAME_SIZE); graphics.endFill(); graphics.lineStyle(2, 0xFF7F00); graphics.beginFill(0); graphics.drawRect(0, 0, WINDOW_SIZE, WINDOW_SIZE); var title:TextField = new TextField(); title.text = "MESSAGE RECEIVED"; title.textColor = 0xFF7F00; title.setTextFormat(Fonts.PixelSmall); title.width = (WINDOW_SIZE - 10); title.height = 20; title.x = 5; title.y = 4; title.selectable = false; title.mouseEnabled = false; title.embedFonts = true; this.addChild(title); textField = new TextField(); textField.text = content; textField.textColor = 0xFF00; textField.setTextFormat(Fonts.PixelSmall); textField.width = (WINDOW_SIZE - 30); textField.height = (WINDOW_SIZE - 75); textField.x = 5; textField.y = 25; textField.borderColor = 0xFF7F00; textField.border = true; textField.selectable = false; textField.wordWrap = true; textField.embedFonts = true; textField.mouseWheelEnabled = false; this.addChild(textField); var scrollBar:ScrollBar = new ScrollBar(textField); scrollBar.x = (WINDOW_SIZE - 20); scrollBar.y = 25; this.addChild(scrollBar); var closeButton:TextButton = new TextButton("Continue", 90); closeButton.x = ((WINDOW_SIZE - closeButton.width) / 2); closeButton.y = (WINDOW_SIZE - 35); closeButton.addEventListener(MouseEvent.CLICK, function (_arg1:MouseEvent):void{ Main.theMain.popScreen(); }); this.addChild(closeButton); } } }//package Interface
Section 51
//BitmapAsset (mx.core.BitmapAsset) package mx.core { import flash.display.*; public class BitmapAsset extends FlexBitmap implements IFlexAsset, IFlexDisplayObject { mx_internal static const VERSION:String = "3.0.0.0"; public function BitmapAsset(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); } public function get measuredWidth():Number{ if (bitmapData){ return (bitmapData.width); }; return (0); } public function get measuredHeight():Number{ if (bitmapData){ return (bitmapData.height); }; return (0); } public function setActualSize(_arg1:Number, _arg2:Number):void{ width = _arg1; height = _arg2; } public function move(_arg1:Number, _arg2:Number):void{ this.x = _arg1; this.y = _arg2; } } }//package mx.core
Section 52
//FlexBitmap (mx.core.FlexBitmap) package mx.core { import flash.display.*; import mx.utils.*; public class FlexBitmap extends Bitmap { mx_internal static const VERSION:String = "3.0.0.0"; public function FlexBitmap(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){ var bitmapData = _arg1; var pixelSnapping = _arg2; var smoothing = _arg3; super(bitmapData, pixelSnapping, smoothing); try { name = NameUtil.createUniqueName(this); } catch(e:Error) { }; } override public function toString():String{ return (NameUtil.displayObjectToString(this)); } } }//package mx.core
Section 53
//FontAsset (mx.core.FontAsset) package mx.core { import flash.text.*; public class FontAsset extends Font implements IFlexAsset { mx_internal static const VERSION:String = "3.0.0.0"; } }//package mx.core
Section 54
//IFlexAsset (mx.core.IFlexAsset) package mx.core { public interface IFlexAsset { } }//package mx.core
Section 55
//IFlexDisplayObject (mx.core.IFlexDisplayObject) package mx.core { import flash.events.*; import flash.geom.*; import flash.display.*; import flash.accessibility.*; public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher { function get visible():Boolean; function get rotation():Number; function localToGlobal(_arg1:Point):Point; function get name():String; function set width(_arg1:Number):void; function get measuredHeight():Number; function get blendMode():String; function get scale9Grid():Rectangle; function set name(_arg1:String):void; function set scaleX(_arg1:Number):void; function set scaleY(_arg1:Number):void; function get measuredWidth():Number; function get accessibilityProperties():AccessibilityProperties; function set scrollRect(_arg1:Rectangle):void; function get cacheAsBitmap():Boolean; function globalToLocal(_arg1:Point):Point; function get height():Number; function set blendMode(_arg1:String):void; function get parent():DisplayObjectContainer; function getBounds(_arg1:DisplayObject):Rectangle; function get opaqueBackground():Object; function set scale9Grid(_arg1:Rectangle):void; function setActualSize(_arg1:Number, _arg2:Number):void; function set alpha(_arg1:Number):void; function set accessibilityProperties(_arg1:AccessibilityProperties):void; function get width():Number; function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean; function set cacheAsBitmap(_arg1:Boolean):void; function get scaleX():Number; function get scaleY():Number; function get scrollRect():Rectangle; function get mouseX():Number; function get mouseY():Number; function set height(_arg1:Number):void; function set mask(_arg1:DisplayObject):void; function getRect(_arg1:DisplayObject):Rectangle; function get alpha():Number; function set transform(_arg1:Transform):void; function move(_arg1:Number, _arg2:Number):void; function get loaderInfo():LoaderInfo; function get root():DisplayObject; function hitTestObject(_arg1:DisplayObject):Boolean; function set opaqueBackground(_arg1:Object):void; function set visible(_arg1:Boolean):void; function get mask():DisplayObject; function set x(_arg1:Number):void; function set y(_arg1:Number):void; function get transform():Transform; function set filters(_arg1:Array):void; function get x():Number; function get y():Number; function get filters():Array; function set rotation(_arg1:Number):void; function get stage():Stage; } }//package mx.core
Section 56
//IRepeaterClient (mx.core.IRepeaterClient) package mx.core { public interface IRepeaterClient { function get instanceIndices():Array; function set instanceIndices(_arg1:Array):void; function get isDocument():Boolean; function set repeaters(_arg1:Array):void; function initializeRepeaterArrays(_arg1:IRepeaterClient):void; function get repeaters():Array; function set repeaterIndices(_arg1:Array):void; function get repeaterIndices():Array; } }//package mx.core
Section 57
//mx_internal (mx.core.mx_internal) package mx.core { public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal"; }//package mx.core
Section 58
//SoundAsset (mx.core.SoundAsset) package mx.core { import flash.media.*; public class SoundAsset extends Sound implements IFlexAsset { mx_internal static const VERSION:String = "3.0.0.0"; } }//package mx.core
Section 59
//NameUtil (mx.utils.NameUtil) package mx.utils { import flash.display.*; import mx.core.*; import flash.utils.*; public class NameUtil { mx_internal static const VERSION:String = "3.0.0.0"; private static var counter:int = 0; public static function displayObjectToString(_arg1:DisplayObject):String{ var _local2:String; var _local4:String; var _local5:Array; var _local3:DisplayObject = _arg1; while (_local3 != null) { if (((((_local3.parent) && (_local3.stage))) && ((_local3.parent == _local3.stage)))){ break; }; _local4 = _local3.name; if ((_local3 is IRepeaterClient)){ _local5 = IRepeaterClient(_local3).instanceIndices; if (_local5){ _local4 = (_local4 + (("[" + _local5.join("][")) + "]")); }; }; _local2 = ((_local2 == null)) ? _local4 : ((_local4 + ".") + _local2); _local3 = _local3.parent; }; return (_local2); } public static function createUniqueName(_arg1:Object):String{ if (!_arg1){ return (null); }; var _local2:String = getQualifiedClassName(_arg1); var _local3:int = _local2.indexOf("::"); if (_local3 != -1){ _local2 = _local2.substr((_local3 + 2)); }; var _local4:int = _local2.charCodeAt((_local2.length - 1)); if ((((_local4 >= 48)) && ((_local4 <= 57)))){ _local2 = (_local2 + "_"); }; return ((_local2 + counter++)); } } }//package mx.utils
Section 60
//ChallengeScreen (Screens.ChallengeScreen) package Screens { import flash.events.*; import Interface.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; import flash.net.*; public class ChallengeScreen extends PuzzleSelectScreen { public function ChallengeScreen(){ var badge:Sprite; super(); this.addButton(new LevelButton(100, 50, "00", LevelData.C00, -1)); this.addButton(new LevelButton(200, 50, "01", LevelData.C01, -1)); this.addButton(new LevelButton(300, 50, "02", LevelData.C02, -1)); this.addButton(new LevelButton(400, 50, "03", LevelData.C03, -1)); this.addButton(new LevelButton(100, 150, "04", LevelData.C04, -1)); this.addButton(new LevelButton(200, 150, "05", LevelData.C05, -1)); this.addButton(new LevelButton(300, 150, "06", LevelData.C06, -1)); this.addButton(new LevelButton(400, 150, "07", LevelData.C07, -1)); this.addButton(new LevelButton(100, 250, "08", LevelData.C08, -1)); this.addButton(new LevelButton(200, 250, "09", LevelData.C09, -1)); this.addButton(new LevelButton(300, 250, "10", LevelData.C10, -1)); this.addButton(new LevelButton(400, 250, "11", LevelData.C11, -1)); this.addButton(new LevelButton(100, 350, "12", LevelData.C12, -1)); this.addButton(new LevelButton(200, 350, "13", LevelData.C13, -1)); this.addButton(new LevelButton(300, 350, "14", LevelData.C14, -1)); this.addButton(new LevelButton(400, 350, "15", LevelData.C15, -1)); this.addButton(new LevelButton(100, 450, "B1", LevelData.Bonus1, -1, [LevelData.C00, LevelData.C04, LevelData.C08, LevelData.C12])); this.addButton(new LevelButton(200, 450, "B2", LevelData.Bonus2, -1, [LevelData.C01, LevelData.C05, LevelData.C09, LevelData.C13])); this.addButton(new LevelButton(300, 450, "B3", LevelData.Bonus3, -1, [LevelData.C02, LevelData.C06, LevelData.C10, LevelData.C14])); var recipe:LevelButton = new LevelButton(400, 450, "B4", LevelData.Bonus4, -1, [LevelData.C03, LevelData.C07, LevelData.C11, LevelData.C15]); recipe.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ SaveData.completeLevel(LevelData.Bonus4); }); this.addButton(recipe); var kongText:TextField = new TextField(); kongText.htmlText = "<a href=\"http://www.kongregate.com/?gamereferral=exploit\" target=\"_blank\">Play more games at</a>"; kongText.textColor = 0xFFFFFF; kongText.y = (Main.GAME_SIZE - 50); kongText.width = ((Main.GAME_SIZE / 2) - 5); kongText.height = 10; kongText.x = (Main.GAME_SIZE / 2); kongText.setTextFormat(Fonts.PixelRightTiny); kongText.embedFonts = true; this.addChild(kongText); badge = new Sprite(); badge.addChild(new TitleScreen.KongBadge()); badge.x = (Main.GAME_SIZE - 93); badge.y = (Main.GAME_SIZE - 35); badge.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=exploit"), "_blank"); }); badge.buttonMode = true; this.addChild(badge); refresh(); } override public function refresh():void{ var _local1:LevelButton; super.refresh(); var _local2:int; var _local3:int; while (_local3 < this.numChildren) { if ((this.getChildAt(_local3) is LevelButton)){ _local1 = LevelButton(this.getChildAt(_local3)); if (_local1.isComplete){ _local2++; }; }; _local3++; }; SaveData.reportChallengesComplete(_local2); } } }//package Screens
Section 61
//ChapterOneScreen (Screens.ChapterOneScreen) package Screens { import flash.events.*; import Interface.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; import flash.net.*; public class ChapterOneScreen extends PuzzleSelectScreen { private static const ChapOneBackgroundBitmap:Bitmap = new ChapOneBackground(); private static var ChapOneBackground:Class = ChapterOneScreen_ChapOneBackground; public function ChapterOneScreen(){ var badge:Sprite; this.addChild(ChapOneBackgroundBitmap); super(); this.addButton(new LevelButton(30, 220, "F0", LevelData.F0, 1, null, LevelData.PostF0)); this.addButton(new LevelButton(60, 245, "F1", LevelData.F1, 1, [LevelData.F0], LevelData.PostF1)); this.addButton(new LevelButton(90, 270, "F2", LevelData.F2, 1, [LevelData.F1], LevelData.PostF2)); this.addButton(new LevelButton(230, 170, "BB", LevelData.BB, 1, [LevelData.F2], LevelData.PostBB)); this.addButton(new LevelButton(300, 315, "PD", LevelData.Police, 1, [LevelData.BB], LevelData.PostPolice)); this.addButton(new LevelButton(340, 315, "HA", LevelData.Home, 1, [LevelData.Police], LevelData.PostHome)); this.addButton(new LevelButton(430, 0x0100, "AP", LevelData.Airport, 1, [LevelData.Home], LevelData.PostAirport, true)); this.addChild(new InfoButton(115, 475, LevelData.Chap1Intro)); var kongText:TextField = new TextField(); kongText.htmlText = "<a href=\"http://www.kongregate.com/?gamereferral=exploit\" target=\"_blank\">Play more games at</a>"; kongText.textColor = 0xFFFFFF; kongText.y = (Main.GAME_SIZE - 50); kongText.width = ((Main.GAME_SIZE / 2) - 5); kongText.height = 10; kongText.x = (Main.GAME_SIZE / 2); kongText.setTextFormat(Fonts.PixelRightTiny); kongText.embedFonts = true; this.addChild(kongText); badge = new Sprite(); badge.addChild(new TitleScreen.KongBadge()); badge.x = (Main.GAME_SIZE - 93); badge.y = (Main.GAME_SIZE - 35); badge.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=exploit"), "_blank"); }); badge.buttonMode = true; this.addChild(badge); Music.startMusic(Music.sndChap1); } } }//package Screens
Section 62
//ChapterOneScreen_ChapOneBackground (Screens.ChapterOneScreen_ChapOneBackground) package Screens { import mx.core.*; public class ChapterOneScreen_ChapOneBackground extends BitmapAsset { } }//package Screens
Section 63
//ChapterSelectScreen (Screens.ChapterSelectScreen) package Screens { import flash.events.*; import Interface.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; import flash.net.*; public class ChapterSelectScreen extends Screen { private var clearAllData:TextButton; private var yesClear:TextButton; private var chapterThree:TextButton; private var cancelClear:TextButton; private var completeText:TextField; private var chapterOne:TextButton; private var chapterTwo:TextButton; public function ChapterSelectScreen(){ super(); chapterOne = new TextButton("Chapter One: The Escape", 275); chapterOne.x = 125; chapterOne.y = 100; chapterOne.addEventListener(MouseEvent.CLICK, chapOneClick); this.addChild(chapterOne); chapterTwo = new TextButton("Chapter Two: The Mistake", 275); chapterTwo.x = 125; chapterTwo.y = 200; chapterTwo.addEventListener(MouseEvent.CLICK, chapTwoClick); this.addChild(chapterTwo); chapterThree = new TextButton("Chapter Three: The Inferno", 275); chapterThree.x = 125; chapterThree.y = 300; chapterThree.addEventListener(MouseEvent.CLICK, chapThreeClick); this.addChild(chapterThree); completeText = new TextField(); completeText.x = 25; completeText.y = 355; completeText.width = (Main.GAME_SIZE - 50); completeText.height = 20; completeText.selectable = false; completeText.mouseEnabled = false; completeText.textColor = 0xFFFFFF; completeText.embedFonts = true; completeText.defaultTextFormat = Fonts.PixelCentered; completeText.text = "CONGRATULATIONS: STORY MODE COMPLETE."; completeText.visible = false; this.addChild(completeText); clearAllData = new TextButton("Clear All Saved Data", 225); clearAllData.x = 150; clearAllData.y = 415; clearAllData.addEventListener(MouseEvent.CLICK, clearClick); this.addChild(clearAllData); yesClear = new TextButton("Clear", 75); yesClear.x = 300; yesClear.y = 415; yesClear.addEventListener(MouseEvent.CLICK, yesClearClick); yesClear.visible = false; this.addChild(yesClear); cancelClear = new TextButton("Cancel", 75); cancelClear.x = 150; cancelClear.y = 415; cancelClear.addEventListener(MouseEvent.CLICK, cancelClearClick); cancelClear.visible = false; this.addChild(cancelClear); this.addChild(TextButton.makeBackButton()); var kongText:TextField = new TextField(); kongText.htmlText = "<a href=\"http://www.kongregate.com/?gamereferral=exploit\" target=\"_blank\">Play more games at</a>"; kongText.textColor = 0xFFFFFF; kongText.y = (Main.GAME_SIZE - 50); kongText.width = ((Main.GAME_SIZE / 2) - 5); kongText.height = 10; kongText.x = (Main.GAME_SIZE / 2); kongText.setTextFormat(Fonts.PixelRightTiny); kongText.embedFonts = true; this.addChild(kongText); var badge:Sprite = new Sprite(); badge.addChild(new TitleScreen.KongBadge()); badge.x = (Main.GAME_SIZE - 93); badge.y = (Main.GAME_SIZE - 35); badge.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=exploit"), "_blank"); }); badge.buttonMode = true; this.addChild(badge); refresh(); } private function chapThreeClick(_arg1:MouseEvent):void{ Main.theMain.pushScreen(new ChapterThreeScreen()); if (!SaveData.isChapterStarted(3)){ Main.theMain.pushScreen(new TextWindow(LevelData.Chap3Intro)); SaveData.startChapter(3); }; } private function cancelClearClick(_arg1:MouseEvent):void{ clearAllData.visible = true; yesClear.visible = false; cancelClear.visible = false; } private function yesClearClick(_arg1:MouseEvent):void{ SaveData.clearSave(); clearAllData.visible = true; yesClear.visible = false; cancelClear.visible = false; refresh(); } private function clearClick(_arg1:MouseEvent):void{ clearAllData.visible = false; yesClear.visible = true; cancelClear.visible = true; } private function chapTwoClick(_arg1:MouseEvent):void{ Main.theMain.pushScreen(new ChapterTwoScreen()); if (!SaveData.isChapterStarted(2)){ Main.theMain.pushScreen(new TextWindow(LevelData.Chap2Intro)); SaveData.startChapter(2); }; } private function chapOneClick(_arg1:MouseEvent):void{ Main.theMain.pushScreen(new ChapterOneScreen()); if (!SaveData.isChapterStarted(1)){ Main.theMain.pushScreen(new TextWindow(LevelData.Chap1Intro)); SaveData.startChapter(1); }; } override public function refresh():void{ if (SaveData.isLevelComplete(LevelData.Airport)){ chapterTwo.mouseEnabled = true; SaveData.finishChapter(1); } else { chapterTwo.mouseEnabled = false; }; chapterTwo.alpha = (chapterTwo.mouseEnabled) ? 1 : 0.5; if (SaveData.isLevelComplete(LevelData.CentralControl)){ chapterThree.mouseEnabled = true; SaveData.finishChapter(2); } else { chapterThree.mouseEnabled = false; }; chapterThree.alpha = (chapterThree.mouseEnabled) ? 1 : 0.5; if (SaveData.isLevelComplete(LevelData.AmElevators)){ SaveData.finishChapter(3); }; completeText.visible = SaveData.isLevelComplete(LevelData.AmElevators); super.refresh(); Music.startMusic(Music.sndTheme); } } }//package Screens
Section 64
//ChapterThreeScreen (Screens.ChapterThreeScreen) package Screens { import flash.events.*; import Interface.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; import flash.net.*; public class ChapterThreeScreen extends PuzzleSelectScreen { private static const ChapThreeBackgroundBitmap:Bitmap = new ChapThreeBackground(); private static var ChapThreeBackground:Class = ChapterThreeScreen_ChapThreeBackground; public function ChapterThreeScreen(){ var badge:Sprite; this.addChild(ChapThreeBackgroundBitmap); super(); this.addButton(new LevelButton(145, 130, "CP", LevelData.CellPhone, 3, null, LevelData.PostCellPhone)); this.addButton(new LevelButton(300, 325, "CL", LevelData.Library, 3, [LevelData.CellPhone], LevelData.PostLibrary)); this.addButton(new LevelButton(425, 275, "FD", LevelData.FireDept, 3, [LevelData.Library], LevelData.PostFireDept)); this.addButton(new LevelButton(100, 400, "SC", LevelData.Courier, 3, [LevelData.Library], LevelData.PostCourier)); this.addButton(new LevelButton(275, 225, "AS", LevelData.AmSecurity, 3, [LevelData.FireDept, LevelData.Courier], LevelData.PostAmSecurity)); this.addButton(new LevelButton(275, 175, "AF", LevelData.AmFire, 3, [LevelData.AmSecurity], LevelData.PostAmFire)); this.addButton(new LevelButton(275, 125, "AE", LevelData.AmElevators, 3, [LevelData.AmFire], LevelData.PostAmElevators, true)); this.addChild(new InfoButton(115, 475, LevelData.Chap3Intro)); var kongText:TextField = new TextField(); kongText.htmlText = "<a href=\"http://www.kongregate.com/?gamereferral=exploit\" target=\"_blank\">Play more games at</a>"; kongText.textColor = 0xFFFFFF; kongText.y = (Main.GAME_SIZE - 50); kongText.width = ((Main.GAME_SIZE / 2) - 5); kongText.height = 10; kongText.x = (Main.GAME_SIZE / 2); kongText.setTextFormat(Fonts.PixelRightTiny); kongText.embedFonts = true; this.addChild(kongText); badge = new Sprite(); badge.addChild(new TitleScreen.KongBadge()); badge.x = (Main.GAME_SIZE - 93); badge.y = (Main.GAME_SIZE - 35); badge.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=exploit"), "_blank"); }); badge.buttonMode = true; this.addChild(badge); Music.startMusic(Music.sndChap3); } } }//package Screens
Section 65
//ChapterThreeScreen_ChapThreeBackground (Screens.ChapterThreeScreen_ChapThreeBackground) package Screens { import mx.core.*; public class ChapterThreeScreen_ChapThreeBackground extends BitmapAsset { } }//package Screens
Section 66
//ChapterTwoScreen (Screens.ChapterTwoScreen) package Screens { import flash.events.*; import Interface.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; import flash.net.*; public class ChapterTwoScreen extends PuzzleSelectScreen { private static const ChapTwoBackgroundBitmap:Bitmap = new ChapTwoBackground(); private static var ChapTwoBackground:Class = ChapterTwoScreen_ChapTwoBackground; public function ChapterTwoScreen(){ var badge:Sprite; this.addChild(ChapTwoBackgroundBitmap); super(); this.addButton(new LevelButton(100, 100, "LC", LevelData.Locks, 2, null, LevelData.PostLocks)); this.addButton(new LevelButton(250, 100, "PD", LevelData.Power, 2, null, LevelData.PostPower)); this.addButton(new LevelButton(400, 100, "VE", LevelData.VOIPEmail, 2, null, LevelData.PostVOIPEmail)); this.addButton(new LevelButton(100, 250, "SP", LevelData.Schedules, 2, null, LevelData.PostSchedules)); this.addButton(new LevelButton(250, 250, "CC", LevelData.CentralControl, 2, [LevelData.Locks, LevelData.Power, LevelData.VOIPEmail, LevelData.Schedules, LevelData.Perimeter, LevelData.Databank, LevelData.MotorPool, LevelData.Radios], LevelData.PostCentral, true)); this.addButton(new LevelButton(400, 250, "PC", LevelData.Perimeter, 2, null, LevelData.PostPerimeter)); this.addButton(new LevelButton(100, 400, "RN", LevelData.Radios, 2, null, LevelData.PostRadios)); this.addButton(new LevelButton(250, 400, "DB", LevelData.Databank, 2, null, LevelData.PostDatabank)); this.addButton(new LevelButton(400, 400, "MP", LevelData.MotorPool, 2, null, LevelData.PostMotorPool)); this.addChild(new InfoButton(115, 475, LevelData.Chap2Intro)); var kongText:TextField = new TextField(); kongText.htmlText = "<a href=\"http://www.kongregate.com/?gamereferral=exploit\" target=\"_blank\">Play more games at</a>"; kongText.textColor = 0xFFFFFF; kongText.y = (Main.GAME_SIZE - 50); kongText.width = ((Main.GAME_SIZE / 2) - 5); kongText.height = 10; kongText.x = (Main.GAME_SIZE / 2); kongText.setTextFormat(Fonts.PixelRightTiny); kongText.embedFonts = true; this.addChild(kongText); badge = new Sprite(); badge.addChild(new TitleScreen.KongBadge()); badge.x = (Main.GAME_SIZE - 93); badge.y = (Main.GAME_SIZE - 35); badge.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=exploit"), "_blank"); }); badge.buttonMode = true; this.addChild(badge); Music.startMusic(Music.sndChap2); } } }//package Screens
Section 67
//ChapterTwoScreen_ChapTwoBackground (Screens.ChapterTwoScreen_ChapTwoBackground) package Screens { import mx.core.*; public class ChapterTwoScreen_ChapTwoBackground extends BitmapAsset { } }//package Screens
Section 68
//CreditScreen (Screens.CreditScreen) package Screens { import Interface.*; import flash.text.*; import Util.*; public class CreditScreen extends Screen { public function CreditScreen(){ this.addChild(TextButton.makeBackButton()); var _local1:TextField = new TextField(); _local1.htmlText = ((((((("<i>Exploit</i> was developed by Gregory Weir.\n\n" + "The music was written by Evan Merz.\n\n") + "It uses the White Rabbit font by Matthew Welch.\n\n") + "Tools used during development include FlashDevelop, The GIMP, Audacity, and Tomas Pettersson's sfxr.\n\n") + "Thanks to my testers, Melissa Avery, Zach Johnson, and Michael Stewart.\n\n") + "Sponsored by Kongregate.\n\n") + "For more stuff by Gregory Weir, visit <a href=\"http://ludusnovus.net\">http://ludusnovus.net</a>.\n\n") + "For more stuff by Evan Merz, visit <a href=\"http://thisisnotalabel.com\">http://thisisnotalabel.com</a>."); _local1.textColor = 0xFFFFFF; _local1.setTextFormat(Fonts.PixelSmall); _local1.width = (Main.GAME_SIZE - 50); _local1.height = (Main.GAME_SIZE - 75); _local1.x = 25; _local1.y = 25; _local1.wordWrap = true; _local1.embedFonts = true; this.addChild(_local1); } } }//package Screens
Section 69
//EditScreen (Screens.EditScreen) package Screens { import flash.events.*; import Interface.*; import Blocks.*; import flash.text.*; import flash.system.*; import Util.*; import Data.*; public class EditScreen extends Screen { private var editmode:int;// = 0 private var helpText:TextField; private var offset:Number; private var loadField:TextField; private var myLevel:Level; private var currBlock:Block; private var currPath:Path; private var activeButton:EditButton; public function EditScreen(){ var button:EditButton; var loadText:String; super(); myLevel = new Level(5); offset = ((Main.GAME_SIZE - (myLevel.size * Level.gridSize)) / 2); myLevel.x = (offset - (Level.gridSize * 2)); myLevel.y = (offset - 15); this.addChild(myLevel); var i:int; while (i < 11) { button = new EditButton(i); button.x = ((offset + (Level.gridSize * myLevel.size)) + ((Level.gridSize + 8) * Math.floor((i / 6)))); button.y = ((offset + ((Level.gridSize + 8) * (i % 6))) - 25); if (i == 0){ button.active = true; activeButton = button; }; this.addChild(button); button.addEventListener(MouseEvent.CLICK, clickEditButton); i = (i + 1); }; helpText = new TextField(); helpText.x = 10; helpText.y = 10; helpText.width = (Main.GAME_SIZE - 110); helpText.height = 75; helpText.wordWrap = true; helpText.selectable = false; helpText.textColor = 0xFFFFFF; helpText.embedFonts = true; helpText.defaultTextFormat = Fonts.PixelSmall; helpText.text = activeButton.helpText; helpText.mouseEnabled = false; this.addChild(helpText); var smallerButton:TextButton = new TextButton("Size--", 70); smallerButton.x = 413; smallerButton.y = 14; smallerButton.addEventListener(MouseEvent.CLICK, shrinkLevel); this.addChild(smallerButton); var biggerButton:TextButton = new TextButton("Size++", 70); biggerButton.x = 413; biggerButton.y = 39; biggerButton.addEventListener(MouseEvent.CLICK, enlargeLevel); this.addChild(biggerButton); var copyCodeButton:TextButton = new TextButton("Copy Level Code to Clipboard", 300); copyCodeButton.x = 25; copyCodeButton.y = 425; copyCodeButton.addEventListener(MouseEvent.CLICK, copyCode); this.addChild(copyCodeButton); loadText = "(paste level code to load here with CTRL-V or Command-V)"; loadField = new TextField(); loadField.border = true; loadField.borderColor = 0xFF7F00; loadField.background = true; loadField.backgroundColor = 0x442200; loadField.textColor = 0xFFFFFF; loadField.type = TextFieldType.INPUT; loadField.text = loadText; loadField.width = 405; loadField.height = 20; loadField.x = 25; loadField.y = 449; loadField.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ if (loadField.text == loadText){ loadField.text = ""; }; }); this.addChild(loadField); var loadCodeButton:TextButton = new TextButton("Load", 50); loadCodeButton.x = 435; loadCodeButton.y = 450; loadCodeButton.addEventListener(MouseEvent.CLICK, loadCode); this.addChild(loadCodeButton); this.addChild(TextButton.makeBackButton()); var testButton:TextButton = new TextButton("Test Level >", 130); testButton.x = 355; testButton.y = 475; testButton.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new PlayScreen(Level.getLevelFromCode(myLevel.getLevelCode()))); }); this.addChild(testButton); myLevel.mouseChildren = false; myLevel.addEventListener(MouseEvent.CLICK, clickLevel); } private function clickLevel(_arg1:MouseEvent):void{ var _local6:Port; var _local2:int = Math.floor((_arg1.localX / Level.gridSize)); var _local3:int = Math.floor((_arg1.localY / Level.gridSize)); var _local4:Number = ((Math.round(((_arg1.localX / Level.gridSize) * 4)) / 4) - 0.5); var _local5:Number = ((Math.round(((_arg1.localY / Level.gridSize) * 4)) / 4) - 0.5); if ((((_local2 <= myLevel.size)) && ((_local3 <= myLevel.size)))){ switch (editmode){ case EditButton.MODE_BLOCKER: myLevel.insertBlock(new BlockerBlock(_local2, _local3, myLevel)); break; case EditButton.MODE_DIVIDER: myLevel.insertBlock(new DividerBlock(_local2, _local3, myLevel)); break; case EditButton.MODE_LATCH: myLevel.insertBlock(new LatchBlock(_local2, _local3, myLevel)); break; case EditButton.MODE_GOAL: myLevel.insertBlock(new GoalBlock(_local2, _local3, myLevel)); break; case EditButton.MODE_DIRECTORY: myLevel.insertBlock(new DirectoryBlock(_local2, _local3, myLevel)); break; case EditButton.MODE_DELETEBLOCK: if ((((((((_local2 == -1)) || ((_local3 == -1)))) || ((_local2 == myLevel.size)))) || ((_local3 == myLevel.size)))){ myLevel.removePortAt(_local2, _local3); } else { myLevel.removeBlockAt(_local2, _local3); }; break; case EditButton.MODE_DELETEPATH: myLevel.removePathAt(_arg1.stageX, _arg1.stageY); break; case EditButton.MODE_PATH: currPath = Path.makePathStartingAt(_local4, _local5); myLevel.insertPath(currPath); editmode = EditButton.MODE_CONTINUEPATH; helpText.text = "Click to add more points to the path. Double-click the endpoint or click another tool to finish the path."; break; case EditButton.MODE_CONTINUEPATH: if (currPath.endsAt(_local4, _local5)){ currPath = null; editmode = EditButton.MODE_PATH; helpText.text = "Click to begin a path. This is just to help the player figure out which Buffer is connected to which Blocker."; } else { currPath.addPoint(_local4, _local5); }; break; case EditButton.MODE_ACTIVATOR: currBlock = new ActivatorBlock(_local2, _local3, -1, myLevel); if (myLevel.insertBlock(currBlock)){ editmode = EditButton.MODE_LINKEDBLOCKER; helpText.text = "Click to place a linked Blocker node, or click a tool to cancel this Buffer."; }; break; case EditButton.MODE_KEY: currBlock = new KeyBlock(_local2, _local3, -1, myLevel); if (myLevel.insertBlock(currBlock)){ editmode = EditButton.MODE_LINKEDPORT; helpText.text = "Click to place a linked Port, or click a tool to cancel this Key."; }; break; case EditButton.MODE_LINKEDBLOCKER: if (myLevel.insertBlock(new BlockerBlock(_local2, _local3, myLevel))){ currBlock.target = (myLevel.myBlocks.length - 1); currBlock = null; editmode = EditButton.MODE_ACTIVATOR; helpText.text = "Click to place a Buffer node."; }; break; case EditButton.MODE_PORT: _local6 = new Port(_local2, _local3, myLevel, false); _local6.alpha = 1; myLevel.insertPort(_local6); break; case EditButton.MODE_LINKEDPORT: if (Port.validLocation(_local2, _local3, myLevel.size)){ _local6 = new Port(_local2, _local3, myLevel, true); _local6.visible = true; _local6.alpha = 0.5; myLevel.insertPort(_local6); currBlock.target = (myLevel.myPorts.length - 1); } else { myLevel.removeBlock(currBlock); }; currBlock = null; editmode = EditButton.MODE_KEY; helpText.text = "Click to place a Port Knock Key."; break; }; }; } private function clickEditButton(_arg1:MouseEvent):void{ if ((((editmode == EditButton.MODE_LINKEDBLOCKER)) || ((editmode == EditButton.MODE_LINKEDPORT)))){ myLevel.removeBlock(currBlock); currBlock = null; }; if (editmode == EditButton.MODE_CONTINUEPATH){ if (currPath.points.length == 1){ myLevel.removePath(currPath); }; currPath = null; }; var _local2:EditButton = EditButton(_arg1.target); activeButton.active = false; activeButton = _local2; activeButton.active = true; editmode = activeButton.mode; helpText.text = activeButton.helpText; } private function copyCode(_arg1:MouseEvent):void{ SFX.success(); System.setClipboard(myLevel.getLevelCode()); SaveData.reportLevelCreated(); } private function rearrangeLayout():void{ var _local1:EditButton; offset = ((Main.GAME_SIZE - (myLevel.size * Level.gridSize)) / 2); myLevel.x = (offset - (Level.gridSize * 2)); myLevel.y = (offset - 15); var _local2:int; var _local3:int; while (_local3 < this.numChildren) { if ((this.getChildAt(_local3) is EditButton)){ _local1 = EditButton(this.getChildAt(_local3)); _local1.x = ((offset + (Level.gridSize * myLevel.size)) + ((Level.gridSize + 8) * Math.floor((_local2 / 6)))); _local1.y = ((offset + ((Level.gridSize + 8) * (_local2 % 6))) - 25); _local2++; }; _local3++; }; } private function loadCode(_arg1:MouseEvent):void{ var newLevel:Level; var e = _arg1; var code:String = loadField.text; loadField.text = ""; try { newLevel = Level.getLevelFromCode(code, true); } catch(e:Error) { loadField.text = ("ERROR: " + e.message); return; }; this.removeChild(myLevel); myLevel = newLevel; this.addChild(myLevel); myLevel.mouseChildren = false; myLevel.addEventListener(MouseEvent.CLICK, clickLevel); rearrangeLayout(); } private function copyXML(_arg1:MouseEvent):void{ SFX.success(); System.setClipboard(myLevel.getLevelXML()); } private function enlargeLevel(_arg1:MouseEvent):void{ myLevel.enlarge(); rearrangeLayout(); } private function shrinkLevel(_arg1:MouseEvent):void{ myLevel.shrink(); rearrangeLayout(); } } }//package Screens
Section 70
//IntroScreen (Screens.IntroScreen) package Screens { import flash.events.*; import flash.text.*; import Util.*; public class IntroScreen extends Screen { private var introtext:TextField; private var introtext2:TextField; private var counter:int;// = 0 public function IntroScreen(){ super(); graphics.beginFill(0); graphics.drawRect(0, 0, Main.GAME_SIZE, Main.GAME_SIZE); graphics.endFill(); introtext = new TextField(); introtext.x = 25; introtext.y = 225; introtext.width = (Main.GAME_SIZE - 50); introtext.height = 40; introtext.selectable = false; introtext.mouseEnabled = false; introtext.textColor = 0xFFFFFF; introtext.embedFonts = true; introtext.wordWrap = true; introtext.defaultTextFormat = Fonts.PixelCentered; introtext.text = "The events depicted in this game are fictional..."; introtext.alpha = 0; this.addChild(introtext); introtext2 = new TextField(); introtext2.x = 25; introtext2.y = 260; introtext2.width = (Main.GAME_SIZE - 50); introtext2.height = 20; introtext2.selectable = false; introtext2.mouseEnabled = false; introtext2.textColor = 0xFFFFFF; introtext2.embedFonts = true; introtext2.defaultTextFormat = Fonts.PixelCentered; introtext2.text = "But they could happen tomorrow."; introtext2.alpha = 0; this.addChild(introtext2); var clicktoskip:TextField = new TextField(); clicktoskip.x = 350; clicktoskip.y = 492; clicktoskip.width = 160; clicktoskip.height = 20; clicktoskip.selectable = false; clicktoskip.mouseEnabled = false; clicktoskip.textColor = 0xFFFFFF; clicktoskip.embedFonts = true; clicktoskip.defaultTextFormat = Fonts.PixelSmall; clicktoskip.text = "(click to skip)"; this.addChild(clicktoskip); this.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ if (parent){ Main.theMain.popScreen(); }; }); } override public function step():void{ if (introtext.alpha < 1){ introtext.alpha = (introtext.alpha + 0.01); } else { if (introtext2.alpha < 1){ introtext2.alpha = (introtext2.alpha + 0.01); } else { if (this.counter < Main.STEP_RATE){ this.counter++; } else { if (this.alpha > 0){ this.alpha = (this.alpha - 0.01); } else { Main.theMain.popScreen(); }; }; }; }; } } }//package Screens
Section 71
//PlayScreen (Screens.PlayScreen) package Screens { import Interface.*; import flash.text.*; import Util.*; import Data.*; public class PlayScreen extends Screen { private var offset:Number; private var myLevel:Level; public var backButton:TextButton; public function PlayScreen(_arg1:Level, _arg2:int=0){ var _local4:TextField; super(); var _local3:TextField = new TextField(); _local3.x = 90; _local3.y = 475; _local3.width = (Main.GAME_SIZE - 180); _local3.height = 20; _local3.selectable = false; _local3.textColor = 0xFFFFFF; _local3.embedFonts = true; _local3.defaultTextFormat = Fonts.PixelCentered; _local3.text = _arg1.title; this.addChild(_local3); _local4 = new TextField(); _local4.x = 15; _local4.y = 10; _local4.width = (Main.GAME_SIZE - 30); _local4.height = 502; _local4.wordWrap = true; _local4.selectable = false; _local4.textColor = 0xFFFFFF; _local4.embedFonts = true; _local4.defaultTextFormat = Fonts.PixelSmall; _local4.text = _arg1.summary; this.addChild(_local4); this.myLevel = _arg1; offset = ((Main.GAME_SIZE - (myLevel.size * Level.gridSize)) / 2); myLevel.x = offset; myLevel.y = offset; this.addChild(myLevel); if ((((_arg2 > 0)) && (SaveData.isDDOSAvailable(_arg2)))){ this.addChild(TextButton.makeDDOSButton(_arg2, _arg1)); }; backButton = TextButton.makeBackButton(); this.addChild(backButton); } override public function step():void{ myLevel.step(); } } }//package Screens
Section 72
//PuzzleSelectScreen (Screens.PuzzleSelectScreen) package Screens { import flash.events.*; import Interface.*; import flash.text.*; import Util.*; public class PuzzleSelectScreen extends Screen { private var levelTitleText:TextField; protected var backButton:TextButton; public function PuzzleSelectScreen(){ levelTitleText = new TextField(); levelTitleText.x = 25; levelTitleText.y = 10; levelTitleText.width = (Main.GAME_SIZE - 50); levelTitleText.height = 100; levelTitleText.selectable = false; levelTitleText.textColor = 0xFFFFFF; levelTitleText.defaultTextFormat = Fonts.PixelCentered; levelTitleText.embedFonts = true; this.addChild(levelTitleText); backButton = TextButton.makeBackButton(); this.addChild(backButton); } protected function addButton(_arg1:LevelButton):void{ this.addChild(_arg1); _arg1.addEventListener(MouseEvent.MOUSE_OVER, updateTitle); _arg1.addEventListener(MouseEvent.MOUSE_OUT, clearTitle); } protected function clearTitle(_arg1:MouseEvent):void{ levelTitleText.text = ""; } override public function step():void{ var _local1:LevelButton; var _local2:int; while (_local2 < this.numChildren) { if ((this.getChildAt(_local2) is LevelButton)){ _local1 = LevelButton(this.getChildAt(_local2)); _local1.step(); }; _local2++; }; } protected function updateTitle(_arg1:MouseEvent):void{ levelTitleText.text = _arg1.target.title; } } }//package Screens
Section 73
//Screen (Screens.Screen) package Screens { import Interface.*; import flash.display.*; public class Screen extends Sprite { public function refresh():void{ var _local1:LevelButton; var _local2:int; while (_local2 < this.numChildren) { if ((this.getChildAt(_local2) is LevelButton)){ _local1 = LevelButton(this.getChildAt(_local2)); _local1.refresh(); }; _local2++; }; } public function step():void{ } } }//package Screens
Section 74
//TitleScreen (Screens.TitleScreen) package Screens { import flash.events.*; import Interface.*; import flash.display.*; import flash.text.*; import Util.*; import flash.net.*; public class TitleScreen extends Screen { private static const ExploitLogoBitmap:Bitmap = new ExploitLogo(); public static var KongBadge:Class = TitleScreen_KongBadge; private static var ExploitLogo:Class = TitleScreen_ExploitLogo; public function TitleScreen(){ super(); ExploitLogoBitmap.x = ((Main.GAME_SIZE - ExploitLogoBitmap.width) / 2); ExploitLogoBitmap.y = 25; this.addChild(ExploitLogoBitmap); var subtitle:TextField = new TextField(); subtitle.x = 25; subtitle.y = 85; subtitle.width = (Main.GAME_SIZE - 50); subtitle.height = 20; subtitle.selectable = false; subtitle.mouseEnabled = false; subtitle.textColor = 0xFFFFFF; subtitle.embedFonts = true; subtitle.defaultTextFormat = Fonts.PixelCentered; subtitle.text = "Information is Freedom."; this.addChild(subtitle); var buttonx:int = ((Main.GAME_SIZE - 150) / 2); var tutorial:TextButton = new TextButton("Tutorial", 150); tutorial.x = buttonx; tutorial.y = 150; tutorial.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new TutorialScreen()); }); this.addChild(tutorial); var story:TextButton = new TextButton("Story Mode", 150); story.x = buttonx; story.y = 200; story.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new ChapterSelectScreen()); }); this.addChild(story); var extrapuzzles:TextButton = new TextButton("Challenge Mode", 150); extrapuzzles.x = buttonx; extrapuzzles.y = 250; extrapuzzles.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new ChallengeScreen()); }); this.addChild(extrapuzzles); var load:TextButton = new TextButton("Load Puzzle", 150); load.x = buttonx; load.y = 300; load.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new LoadCodePopup()); }); this.addChild(load); var editor:TextButton = new TextButton("Puzzle Editor", 150); editor.x = buttonx; editor.y = 375; editor.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new EditScreen()); }); this.addChild(editor); var credits:TextButton = new TextButton("Credits", 150); credits.x = buttonx; credits.y = 425; credits.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ Main.theMain.pushScreen(new CreditScreen()); }); this.addChild(credits); var byMe:TextField = new TextField(); byMe.htmlText = "<a href=\"http://ludusnovus.net\" target=\"_blank\">Developed by Gregory Weir\nhttp://ludusnovus.net</a>"; byMe.textColor = 0xFFFFFF; byMe.x = 5; byMe.y = (Main.GAME_SIZE - 50); byMe.width = (Main.GAME_SIZE / 2); byMe.setTextFormat(Fonts.PixelLeftTiny); byMe.embedFonts = true; this.addChild(byMe); var kongText:TextField = new TextField(); kongText.htmlText = "<a href=\"http://www.kongregate.com/?gamereferral=exploit\" target=\"_blank\">Play more games at</a>"; kongText.textColor = 0xFFFFFF; kongText.y = (Main.GAME_SIZE - 50); kongText.width = ((Main.GAME_SIZE / 2) - 5); kongText.height = 10; kongText.x = (Main.GAME_SIZE / 2); kongText.setTextFormat(Fonts.PixelRightTiny); kongText.embedFonts = true; this.addChild(kongText); var badge:Sprite = new Sprite(); badge.addChild(new KongBadge()); badge.x = (Main.GAME_SIZE - 93); badge.y = (Main.GAME_SIZE - 35); badge.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=exploit"), "_blank"); }); badge.buttonMode = true; this.addChild(badge); Music.startMusic(Music.sndTheme); } } }//package Screens
Section 75
//TitleScreen_ExploitLogo (Screens.TitleScreen_ExploitLogo) package Screens { import mx.core.*; public class TitleScreen_ExploitLogo extends BitmapAsset { } }//package Screens
Section 76
//TitleScreen_KongBadge (Screens.TitleScreen_KongBadge) package Screens { import mx.core.*; public class TitleScreen_KongBadge extends BitmapAsset { } }//package Screens
Section 77
//TutorialScreen (Screens.TutorialScreen) package Screens { import flash.events.*; import Interface.*; import flash.display.*; import flash.text.*; import Util.*; import Data.*; import flash.net.*; public class TutorialScreen extends PuzzleSelectScreen { private static const TutorialBGBitmap:Bitmap = new tutorialbg(); private static var tutorialbg:Class = TutorialScreen_tutorialbg; public function TutorialScreen(){ var badge:Sprite; this.addChild(TutorialBGBitmap); super(); this.addButton(new LevelButton(75, 125, "T0", LevelData.T0, 0)); this.addButton(new LevelButton(75, 195, "T1", LevelData.T1, 0, [LevelData.T0])); this.addButton(new LevelButton(75, 265, "T2", LevelData.T2, 0, [LevelData.T1])); this.addButton(new LevelButton(75, 335, "T3", LevelData.T3, 0, [LevelData.T2])); this.addButton(new LevelButton(75, 405, "T4", LevelData.T4, 0, [LevelData.T3])); this.addButton(new LevelButton(330, 125, "T5", LevelData.T5, 0, [LevelData.T4])); this.addButton(new LevelButton(330, 195, "T6", LevelData.T6, 0, [LevelData.T5])); this.addButton(new LevelButton(330, 265, "T7", LevelData.T7, 0, [LevelData.T6])); this.addButton(new LevelButton(330, 335, "T8", LevelData.T8, 0, [LevelData.T7])); var kongText:TextField = new TextField(); kongText.htmlText = "<a href=\"http://www.kongregate.com/?gamereferral=exploit\" target=\"_blank\">Play more games at</a>"; kongText.textColor = 0xFFFFFF; kongText.y = (Main.GAME_SIZE - 50); kongText.width = ((Main.GAME_SIZE / 2) - 5); kongText.height = 10; kongText.x = (Main.GAME_SIZE / 2); kongText.setTextFormat(Fonts.PixelRightTiny); kongText.embedFonts = true; this.addChild(kongText); badge = new Sprite(); badge.addChild(new TitleScreen.KongBadge()); badge.x = (Main.GAME_SIZE - 93); badge.y = (Main.GAME_SIZE - 35); badge.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{ navigateToURL(new URLRequest("http://www.kongregate.com/?gamereferral=exploit"), "_blank"); }); badge.buttonMode = true; this.addChild(badge); } } }//package Screens
Section 78
//TutorialScreen_tutorialbg (Screens.TutorialScreen_tutorialbg) package Screens { import mx.core.*; public class TutorialScreen_tutorialbg extends BitmapAsset { } }//package Screens
Section 79
//Fonts (Util.Fonts) package Util { import flash.text.*; public class Fonts { public static const PixelSmall:TextFormat = new TextFormat(PIXEL, 18, null, null, null, null, null, null, TextFormatAlign.LEFT, null, null, null, 2); private static const PIXEL:String = "Pixel"; public static const PixelLeftTiny:TextFormat = new TextFormat(PIXEL, 12, null, null, null, null, null, null, TextFormatAlign.LEFT, null, null, null, 2); public static const PixelCentered:TextFormat = new TextFormat(PIXEL, 18, null, null, null, null, null, null, TextFormatAlign.CENTER, null, null, null, 2); public static const PixelRightTiny:TextFormat = new TextFormat(PIXEL, 12, null, null, null, null, null, null, TextFormatAlign.RIGHT, null, null, null, 2); public static const PixelCenteredTiny:TextFormat = new TextFormat(PIXEL, 12, null, null, null, null, null, null, TextFormatAlign.CENTER, null, null, null, 2); private static var pixel:String = "Fonts_pixel"; } }//package Util
Section 80
//Fonts_pixel (Util.Fonts_pixel) package Util { import mx.core.*; public class Fonts_pixel extends FontAsset { } }//package Util
Section 81
//Music (Util.Music) package Util { import flash.events.*; import flash.media.*; import flash.utils.*; public class Music { public static const sndTheme:Sound = new clsTheme(); public static const sndChap1:Sound = new clsChap1(); public static const sndChap2:Sound = new clsChap2(); public static const sndChap3:Sound = new clsChap3(); private static var timer:Timer; private static var _musicActive:Boolean = true; private static var clsChap1:Class = Music_clsChap1; private static var clsChap2:Class = Music_clsChap2; private static var clsChap3:Class = Music_clsChap3; private static var inactiveChannel:SoundChannel; private static var activeChannel:SoundChannel; private static var activeSong:Sound; private static var clsTheme:Class = Music_clsTheme; private static function fadeOutInactive(_arg1:TimerEvent):void{ if (inactiveChannel){ if (inactiveChannel.soundTransform.volume <= 0.1){ inactiveChannel.stop(); inactiveChannel = null; timer.removeEventListener(TimerEvent.TIMER, fadeOutInactive); } else { inactiveChannel.soundTransform = new SoundTransform((inactiveChannel.soundTransform.volume - 0.1)); }; }; } public static function get musicActive():Boolean{ return (_musicActive); } private static function loopActive(_arg1:Event):void{ if (_musicActive){ activeChannel = activeSong.play(0, 0, new SoundTransform(1)); } else { activeChannel = activeSong.play(0, 0, new SoundTransform(0)); }; activeChannel.addEventListener(Event.SOUND_COMPLETE, loopActive, false, 0, true); } public static function set musicActive(_arg1:Boolean):void{ _musicActive = _arg1; if (activeChannel){ if (_musicActive){ activeChannel.soundTransform = new SoundTransform(1); } else { activeChannel.soundTransform = new SoundTransform(0); if (inactiveChannel){ inactiveChannel.soundTransform = new SoundTransform(0); }; }; }; } public static function startMusic(_arg1:Sound):void{ if (activeSong == _arg1){ return; }; if (activeChannel){ activeChannel.removeEventListener(Event.SOUND_COMPLETE, loopActive); if (inactiveChannel){ inactiveChannel.stop(); timer.removeEventListener(TimerEvent.TIMER, fadeOutInactive); }; inactiveChannel = activeChannel; timer = new Timer(100); timer.addEventListener(TimerEvent.TIMER, fadeOutInactive, false, 0, true); timer.start(); }; activeSong = _arg1; if (_musicActive){ activeChannel = _arg1.play(0, 0, new SoundTransform(1)); } else { activeChannel = _arg1.play(0, 0, new SoundTransform(0)); }; activeChannel.addEventListener(Event.SOUND_COMPLETE, loopActive, false, 0, true); } } }//package Util
Section 82
//Music_clsChap1 (Util.Music_clsChap1) package Util { import mx.core.*; public class Music_clsChap1 extends SoundAsset { } }//package Util
Section 83
//Music_clsChap2 (Util.Music_clsChap2) package Util { import mx.core.*; public class Music_clsChap2 extends SoundAsset { } }//package Util
Section 84
//Music_clsChap3 (Util.Music_clsChap3) package Util { import mx.core.*; public class Music_clsChap3 extends SoundAsset { } }//package Util
Section 85
//Music_clsTheme (Util.Music_clsTheme) package Util { import mx.core.*; public class Music_clsTheme extends SoundAsset { } }//package Util
Section 86
//SFX (Util.SFX) package Util { import flash.events.*; import flash.media.*; public class SFX { private static const sndLatchRecover:Sound = new clsLatchRecover(); private static const sndReveal:Sound = new clsReveal(); private static const sndBlockRecover:Sound = new clsBlockRecover(); private static const sndBlock:Sound = new clsBlock(); private static const sndKey:Sound = new clsKey(); private static const sndSuccess:Sound = new clsSuccess(); private static const sndLatch:Sound = new clsLatch(); private static const sndPingRecover:Sound = new clsPingRecover(); private static const sndPing:Sound = new clsPing(); private static const sndSwitch:Sound = new clsSwitch(); private static var clsSuccess:Class = SFX_clsSuccess; private static var clsBlock:Class = SFX_clsBlock; private static var clsPingRecover:Class = SFX_clsPingRecover; private static var clsReveal:Class = SFX_clsReveal; private static var _soundActive:Boolean = true; private static var clsLatch:Class = SFX_clsLatch; private static var clsPing:Class = SFX_clsPing; private static var clsLatchRecover:Class = SFX_clsLatchRecover; private static var clsKey:Class = SFX_clsKey; private static var clsBlockRecover:Class = SFX_clsBlockRecover; private static var clsSwitch:Class = SFX_clsSwitch; public static function success(_arg1:Function=null):void{ var _local2:SoundChannel; if (soundActive){ _local2 = sndSuccess.play(); if (_arg1 != null){ _local2.addEventListener(Event.SOUND_COMPLETE, _arg1); }; } else { if (_arg1 != null){ _arg1(); }; }; } public static function block():void{ playSound(sndBlock); } public static function latchrecover():void{ playSound(sndLatchRecover); } public static function pingrecover():void{ playSound(sndPingRecover); } public static function blockrecover():void{ playSound(sndBlockRecover); } private static function playSound(_arg1:Sound):void{ if (soundActive){ _arg1.play(); }; } public static function latch():void{ playSound(sndLatch); } public static function reveal():void{ playSound(sndReveal); } public static function key():void{ playSound(sndKey); } public static function sswitch():void{ playSound(sndSwitch); } public static function set soundActive(_arg1:Boolean):void{ _soundActive = _arg1; } public static function ping():void{ playSound(sndPing); } public static function get soundActive():Boolean{ return (_soundActive); } } }//package Util
Section 87
//SFX_clsBlock (Util.SFX_clsBlock) package Util { import mx.core.*; public class SFX_clsBlock extends SoundAsset { } }//package Util
Section 88
//SFX_clsBlockRecover (Util.SFX_clsBlockRecover) package Util { import mx.core.*; public class SFX_clsBlockRecover extends SoundAsset { } }//package Util
Section 89
//SFX_clsKey (Util.SFX_clsKey) package Util { import mx.core.*; public class SFX_clsKey extends SoundAsset { } }//package Util
Section 90
//SFX_clsLatch (Util.SFX_clsLatch) package Util { import mx.core.*; public class SFX_clsLatch extends SoundAsset { } }//package Util
Section 91
//SFX_clsLatchRecover (Util.SFX_clsLatchRecover) package Util { import mx.core.*; public class SFX_clsLatchRecover extends SoundAsset { } }//package Util
Section 92
//SFX_clsPing (Util.SFX_clsPing) package Util { import mx.core.*; public class SFX_clsPing extends SoundAsset { } }//package Util
Section 93
//SFX_clsPingRecover (Util.SFX_clsPingRecover) package Util { import mx.core.*; public class SFX_clsPingRecover extends SoundAsset { } }//package Util
Section 94
//SFX_clsReveal (Util.SFX_clsReveal) package Util { import mx.core.*; public class SFX_clsReveal extends SoundAsset { } }//package Util
Section 95
//SFX_clsSuccess (Util.SFX_clsSuccess) package Util { import mx.core.*; public class SFX_clsSuccess extends SoundAsset { } }//package Util
Section 96
//SFX_clsSwitch (Util.SFX_clsSwitch) package Util { import mx.core.*; public class SFX_clsSwitch extends SoundAsset { } }//package Util
Section 97
//SugarGraphics (Util.SugarGraphics) package Util { import flash.geom.*; import flash.display.*; public class SugarGraphics { public static function fillTexture(_arg1:Graphics, _arg2:BitmapData, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):void{ _arg1.beginBitmapFill(_arg2, new Matrix(1, 0, 0, 1, _arg3, _arg4)); _arg1.drawRect(_arg3, _arg4, _arg5, _arg6); _arg1.endFill(); } public static function drawSprite(_arg1:Graphics, _arg2:BitmapData, _arg3:Number, _arg4:Number, _arg5:Matrix=null, _arg6:Number=1):void{ if (_arg5 == null){ _arg5 = new Matrix(); }; _arg5.scale(_arg6, _arg6); _arg5.translate(_arg3, _arg4); _arg1.beginBitmapFill(_arg2, _arg5); _arg1.drawRect(_arg3, _arg4, (_arg2.width * _arg6), (_arg2.height * _arg6)); _arg1.endFill(); } } }//package Util
Section 98
//KONG_30FPS (KONG_30FPS) package { import flash.display.*; public dynamic class KONG_30FPS extends MovieClip { } }//package
Section 99
//Main (Main) package { import flash.events.*; import Screens.*; import Interface.*; import flash.display.*; import com.kongregate.as3.client.*; import flash.utils.*; public class Main extends Sprite { private var scrollingBackground:Sprite; private var screenStack:Array; private static const BinaryBGBitmap:Bitmap = new BinaryBG(); public static const DIR_RIGHT:int = 0; public static const DIR_UP:int = 3; public static const GAME_SIZE:int = 0x0200; public static const STEP_RATE:int = 30; public static const DIR_LEFT:int = 2; public static const DIR_DOWN:int = 1; public static var theMain:Main; private static var BinaryBG:Class = Main_BinaryBG; public function Main():void{ if (stage){ init(); } else { addEventListener(Event.ADDED_TO_STAGE, init); }; } private function init(_arg1:Event=null):void{ removeEventListener(Event.ADDED_TO_STAGE, init); var _local2:Sprite = new Sprite(); _local2.graphics.beginFill(0); _local2.graphics.drawRect(0, 0, GAME_SIZE, GAME_SIZE); _local2.graphics.endFill(); this.addChild(_local2); this.mask = _local2; MochiBot.track(this, "b33d18c2"); var _local3:KongregateAPI = new KongregateAPI(); this.addChild(_local3); scrollingBackground = new Sprite(); scrollingBackground.graphics.clear(); scrollingBackground.graphics.beginBitmapFill(BinaryBGBitmap.bitmapData); scrollingBackground.graphics.drawRect(-(BinaryBGBitmap.width), 0, (GAME_SIZE + BinaryBGBitmap.width), GAME_SIZE); scrollingBackground.mouseEnabled = false; this.addChild(scrollingBackground); theMain = this; screenStack = new Array(); var _local4:TitleScreen = new TitleScreen(); _local4.visible = false; pushScreen(_local4); pushScreen(new IntroScreen()); _local4.visible = true; stage.addChild(new SoundButton()); stage.addChild(new MusicButton()); var _local5:Timer = new Timer((1000 / STEP_RATE)); _local5.addEventListener(TimerEvent.TIMER, frameLoop); _local5.start(); } public function frameLoop(_arg1:TimerEvent):void{ if (screenStack.length > 0){ screenStack[(screenStack.length - 1)].step(); }; redrawBackground(); } public function popScreen():void{ this.removeChild(screenStack.pop()); if (screenStack.length > 0){ screenStack[(screenStack.length - 1)].visible = true; screenStack[(screenStack.length - 1)].mouseEnabled = true; screenStack[(screenStack.length - 1)].mouseChildren = true; screenStack[(screenStack.length - 1)].refresh(); }; } private function redrawBackground():void{ scrollingBackground.x = ((scrollingBackground.x + 1) % BinaryBGBitmap.width); } public function showPuzzle(_arg1:XML, _arg2:String, _arg3:int, _arg4:Boolean=false):void{ pushScreen(new PlayScreen(Level.getLevelFromXML(_arg1, _arg2, _arg4), _arg3)); } public function pushScreen(_arg1:Screen):void{ if (screenStack.length > 0){ if ((((((((_arg1 is TextWindow)) || ((_arg1 is DDOSWindow)))) || ((_arg1 is LoadCodePopup)))) || ((_arg1 is IntroScreen)))){ screenStack[(screenStack.length - 1)].mouseEnabled = false; screenStack[(screenStack.length - 1)].mouseChildren = false; } else { screenStack[(screenStack.length - 1)].visible = false; }; }; screenStack.push(_arg1); this.addChild(_arg1); } } }//package
Section 100
//Main_BinaryBG (Main_BinaryBG) package { import mx.core.*; public class Main_BinaryBG extends BitmapAsset { } }//package
Section 101
//MochiAd (MochiAd) package { import flash.events.*; import flash.display.*; import flash.utils.*; import flash.system.*; import flash.net.*; public class MochiAd { public static function getVersion():String{ return ("2.7"); } public static function showClickAwayAd(_arg1:Object):void{ var clip:Object; var mc:MovieClip; var chk:MovieClip; var options = _arg1; var DEFAULTS:Object = {ad_timeout:2000, regpt:"o", method:"showClickAwayAd", res:"300x250", no_bg:true, ad_started:function ():void{ }, ad_finished:function ():void{ }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }}; options = MochiAd._parseOptions(options, DEFAULTS); clip = options.clip; var ad_timeout:Number = options.ad_timeout; delete options.ad_timeout; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ MochiAd._cleanup(mc); options.ad_finished(); }; var wh:Array = MochiAd._getRes(options, clip); var w:Number = wh[0]; var h:Number = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; mc.unloadAd = function ():void{ MochiAd.unload(clip); }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; var sendHostProgress:Boolean; mc.regContLC = function (_arg1:String):void{ mc._containerLCName = _arg1; }; chk["onEnterFrame"] = function ():void{ var _local4:Number; if (!this.parent){ delete this.onEnterFrame; return; }; var _local1:Object = this.parent._mochiad_ctr; var _local2:Number = (getTimer() - this.started); var _local3:Boolean; if (!chk.showing){ _local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local4 > 0){ chk.showing = true; _local3 = true; chk.started = getTimer(); } else { if (_local2 > chk.ad_timeout){ options.ad_failed(); _local3 = true; }; }; }; if (this.root == null){ _local3 = true; }; if (_local3){ delete this.onEnterFrame; }; }; doOnEnterFrame(chk); } public static function _isNetworkAvailable():Boolean{ return (!((Security.sandboxType == "localWithFile"))); } public static function _allowDomains(_arg1:String):String{ var _local2:String = _arg1.split("/")[2].split(":")[0]; Security.allowDomain("*"); Security.allowDomain(_local2); Security.allowInsecureDomain("*"); Security.allowInsecureDomain(_local2); return (_local2); } public static function unload(_arg1:Object):Boolean{ if (((_arg1.clip) && (_arg1.clip._mochiad))){ _arg1 = _arg1.clip; }; if (_arg1.origFrameRate != undefined){ _arg1.stage.frameRate = _arg1.origFrameRate; }; if (!_arg1._mochiad){ return (false); }; if (_arg1._mochiad._containerLCName != undefined){ _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "notify", {id:"unload"}); }; if (_arg1._mochiad.onUnload){ _arg1._mochiad.onUnload(); }; delete _arg1._mochiad_loaded; delete _arg1._mochiad; return (true); } public static function showInterLevelAd(_arg1:Object):void{ var clip:Object; var mc:MovieClip; var chk:MovieClip; var options = _arg1; var DEFAULTS:Object = {ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function ():void{ if ((this.clip is MovieClip)){ this.clip.stop(); } else { throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_finished:function ():void{ if ((this.clip is MovieClip)){ this.clip.play(); } else { throw (new Error("MochiAd.showInterLevelAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }}; options = MochiAd._parseOptions(options, DEFAULTS); clip = options.clip; var ad_msec:Number = 11000; var ad_timeout:Number = options.ad_timeout; delete options.ad_timeout; var fadeout_time:Number = options.fadeout_time; delete options.fadeout_time; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ MochiAd._cleanup(mc); options.ad_finished(); }; var wh:Array = MochiAd._getRes(options, clip); var w:Number = wh[0]; var h:Number = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.ad_msec = ad_msec; chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; chk.fadeout_time = fadeout_time; chk.fadeFunction = function ():void{ if (!this.parent){ delete this.onEnterFrame; delete this.fadeFunction; return; }; var _local1:Number = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time))); if (_local1 > 0){ this.parent.alpha = (_local1 * 0.01); } else { MochiAd.unload(clip); delete this["onEnterFrame"]; }; }; mc.unloadAd = function ():void{ MochiAd.unload(clip); }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.adjustProgress = function (_arg1:Number):void{ var _local2:Object = mc._mochiad_wait; _local2.server_control = true; _local2.showing = true; _local2.started = getTimer(); _local2.ad_msec = (_arg1 - 250); }; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; chk["onEnterFrame"] = function ():void{ var _local4:Number; if (!this.parent){ delete this.onEnterFrame; delete this.fadeFunction; return; }; var _local1:Object = this.parent._mochiad_ctr; var _local2:Number = (getTimer() - this.started); var _local3:Boolean; if (!chk.showing){ _local4 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local4 > 0){ chk.showing = true; chk.started = getTimer(); MochiAd.adShowing(clip); } else { if (_local2 > chk.ad_timeout){ options.ad_failed(); _local3 = true; }; }; }; if (_local2 > chk.ad_msec){ _local3 = true; }; if (_local3){ if (this.server_control){ delete this.onEnterFrame; } else { this.fadeout_start = getTimer(); this.onEnterFrame = this.fadeFunction; }; }; }; doOnEnterFrame(chk); } public static function _parseOptions(_arg1:Object, _arg2:Object):Object{ var _local4:String; var _local5:Array; var _local6:Number; var _local7:Array; var _local3:Object = {}; for (_local4 in _arg2) { _local3[_local4] = _arg2[_local4]; }; if (_arg1){ for (_local4 in _arg1) { _local3[_local4] = _arg1[_local4]; }; }; if (_local3.clip == undefined){ throw (new Error("MochiAd is missing the 'clip' parameter. This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite.")); }; _arg1 = _local3.clip.loaderInfo.parameters.mochiad_options; if (_arg1){ _local5 = _arg1.split("&"); _local6 = 0; while (_local6 < _local5.length) { _local7 = _local5[_local6].split("="); _local3[unescape(_local7[0])] = unescape(_local7[1]); _local6++; }; }; if (_local3.id == "test"){ trace("[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!"); }; return (_local3); } public static function _cleanup(_arg1:Object):void{ var k:String; var lc:LocalConnection; var f:Function; var mc = _arg1; if (("lc" in mc)){ lc = mc.lc; f = function ():void{ try { lc.client = null; lc.close(); } catch(e:Error) { }; }; setTimeout(f, 0); }; var idx:Number = DisplayObjectContainer(mc).numChildren; while (idx > 0) { idx = (idx - 1); DisplayObjectContainer(mc).removeChildAt(idx); }; for (k in mc) { delete mc[k]; }; } public static function load(_arg1:Object):MovieClip{ var clip:Object; var k:String; var server:String; var hostname:String; var lc:LocalConnection; var name:String; var loader:Loader; var g:Function; var req:URLRequest; var v:Object; var options = _arg1; var DEFAULTS:Object = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"}; options = MochiAd._parseOptions(options, DEFAULTS); options.swfv = 9; options.mav = MochiAd.getVersion(); clip = options.clip; if (!MochiAd._isNetworkAvailable()){ return (null); }; try { if (clip._mochiad_loaded){ return (null); }; } catch(e:Error) { throw (new Error("MochiAd requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic.")); }; var depth:Number = options.depth; delete options.depth; var mc:MovieClip = createEmptyMovieClip(clip, "_mochiad", depth); var wh:Array = MochiAd._getRes(options, clip); options.res = ((wh[0] + "x") + wh[1]); options.server = (options.server + options.id); delete options.id; clip._mochiad_loaded = true; if (clip.loaderInfo.loaderURL.indexOf("http") == 0){ options.as3_swf = clip.loaderInfo.loaderURL; }; var lv:URLVariables = new URLVariables(); for (k in options) { v = options[k]; if (!(v is Function)){ lv[k] = v; }; }; server = lv.server; delete lv.server; hostname = _allowDomains(server); lc = new LocalConnection(); lc.client = mc; name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_"); lc.allowDomain("*", "localhost"); lc.allowInsecureDomain("*", "localhost"); lc.connect(name); mc.lc = lc; mc.lcName = name; lv.lc = name; lv.st = getTimer(); loader = new Loader(); g = function (_arg1:Object):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); MochiAd.unload(clip); }; loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g); req = new URLRequest(((server + ".swf?cacheBust=") + new Date().getTime())); req.contentType = "application/x-www-form-urlencoded"; req.method = URLRequestMethod.POST; req.data = lv; loader.load(req); mc.addChild(loader); mc._mochiad_ctr = loader; return (mc); } public static function runMethod(_arg1:Object, _arg2:String, _arg3:Array):Object{ var _local4:Array = _arg2.split("."); var _local5:Number = 0; while (_local5 < (_local4.length - 1)) { if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){ return (undefined); }; _arg1 = _arg1[_local4[_local5]]; _local5++; }; if (typeof(_arg1[_local4[_local5]]) == "function"){ return (_arg1[_local4[_local5]].apply(_arg1, _arg3)); }; return (undefined); } public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number):MovieClip{ var _local4:MovieClip = new MovieClip(); if (((false) && (_arg3))){ _arg1.addChildAt(_local4, _arg3); } else { _arg1.addChild(_local4); }; _arg1[_arg2] = _local4; _local4["_name"] = _arg2; return (_local4); } public static function _getRes(_arg1:Object, _arg2:Object):Array{ var _local6:Array; var _local3:Object = _arg2.getBounds(_arg2.root); var _local4:Number = 0; var _local5:Number = 0; if (typeof(_arg1.res) != "undefined"){ _local6 = _arg1.res.split("x"); _local4 = parseFloat(_local6[0]); _local5 = parseFloat(_local6[1]); } else { _local4 = (_local3.xMax - _local3.xMin); _local5 = (_local3.yMax - _local3.yMin); }; if ((((_local4 == 0)) || ((_local5 == 0)))){ _local4 = _arg2.stage.stageWidth; _local5 = _arg2.stage.stageHeight; }; return ([_local4, _local5]); } public static function adShowing(_arg1:Object):void{ _arg1.origFrameRate = _arg1.stage.frameRate; _arg1.stage.frameRate = 30; } public static function getValue(_arg1:Object, _arg2:String):Object{ var _local3:Array = _arg2.split("."); var _local4:Number = 0; while (_local4 < (_local3.length - 1)) { if ((((_arg1[_local3[_local4]] == undefined)) || ((_arg1[_local3[_local4]] == null)))){ return (undefined); }; _arg1 = _arg1[_local3[_local4]]; _local4++; }; return (_arg1[_local3[_local4]]); } public static function rpc(_arg1:Object, _arg2:Number, _arg3:Object):void{ var _local4:Object; var _local5:Object; switch (_arg3.id){ case "setValue": MochiAd.setValue(_arg1, _arg3.objectName, _arg3.value); break; case "getValue": _local4 = MochiAd.getValue(_arg1, _arg3.objectName); _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local4); break; case "runMethod": _local5 = MochiAd.runMethod(_arg1, _arg3.method, _arg3.args); _arg1._mochiad.lc.send(_arg1._mochiad._containerLCName, "rpcResult", _arg2, _local5); break; default: trace(("[mochiads rpc] unknown rpc id: " + _arg3.id)); }; } public static function setValue(_arg1:Object, _arg2:String, _arg3:Object):void{ var _local4:Array = _arg2.split("."); var _local5:Number = 0; while (_local5 < (_local4.length - 1)) { if ((((_arg1[_local4[_local5]] == undefined)) || ((_arg1[_local4[_local5]] == null)))){ return; }; _arg1 = _arg1[_local4[_local5]]; _local5++; }; _arg1[_local4[_local5]] = _arg3; } public static function showPreGameAd(_arg1:Object):void{ var clip:Object; var mc:MovieClip; var chk:MovieClip; var complete:Boolean; var unloaded:Boolean; var sendHostProgress:Boolean; var fn:Function; var r:MovieClip; var options = _arg1; var DEFAULTS:Object = {ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:0xFF8A00, background:16777161, outline:13994812, no_progress_bar:false, ad_started:function ():void{ if ((this.clip is MovieClip)){ this.clip.stop(); } else { throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_finished:function ():void{ if ((this.clip is MovieClip)){ this.clip.play(); } else { throw (new Error("MochiAd.showPreGameAd requires a clip that is a MovieClip or is an instance of a class that extends MovieClip. If your clip is a Sprite, then you must provide custom ad_started and ad_finished handlers.")); }; }, ad_loaded:function (_arg1:Number, _arg2:Number):void{ }, ad_failed:function ():void{ trace("[MochiAd] Couldn't load an ad, make sure your game's local security sandbox is configured for Access Network Only and that you are not using ad blocking software"); }, ad_skipped:function ():void{ }, ad_progress:function (_arg1:Number):void{ }}; options = MochiAd._parseOptions(options, DEFAULTS); if ("c862232051e0a94e1c3609b3916ddb17".substr(0) == "dfeada81ac97cde83665f81c12da7def"){ options.ad_started(); fn = function ():void{ options.ad_finished(); }; setTimeout(fn, 100); return; }; clip = options.clip; var ad_msec:Number = 11000; var ad_timeout:Number = options.ad_timeout; delete options.ad_timeout; var fadeout_time:Number = options.fadeout_time; delete options.fadeout_time; if (!MochiAd.load(options)){ options.ad_failed(); options.ad_finished(); return; }; options.ad_started(); mc = clip._mochiad; mc["onUnload"] = function ():void{ MochiAd._cleanup(mc); var fn:Function = function ():void{ options.ad_finished(); }; setTimeout(fn, 100); }; var wh:Array = MochiAd._getRes(options, clip); var w:Number = wh[0]; var h:Number = wh[1]; mc.x = (w * 0.5); mc.y = (h * 0.5); chk = createEmptyMovieClip(mc, "_mochiad_wait", 3); chk.x = (w * -0.5); chk.y = (h * -0.5); var bar:MovieClip = createEmptyMovieClip(chk, "_mochiad_bar", 4); if (options.no_progress_bar){ bar.visible = false; delete options.no_progress_bar; } else { bar.x = 10; bar.y = (h - 20); }; var bar_color:Number = options.color; delete options.color; var bar_background:Number = options.background; delete options.background; var bar_outline:Number = options.outline; delete options.outline; var backing_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 1); var backing:Object = backing_mc.graphics; backing.beginFill(bar_background); backing.moveTo(0, 0); backing.lineTo((w - 20), 0); backing.lineTo((w - 20), 10); backing.lineTo(0, 10); backing.lineTo(0, 0); backing.endFill(); var inside_mc:MovieClip = createEmptyMovieClip(bar, "_inside", 2); var inside:Object = inside_mc.graphics; inside.beginFill(bar_color); inside.moveTo(0, 0); inside.lineTo((w - 20), 0); inside.lineTo((w - 20), 10); inside.lineTo(0, 10); inside.lineTo(0, 0); inside.endFill(); inside_mc.scaleX = 0; var outline_mc:MovieClip = createEmptyMovieClip(bar, "_outline", 3); var outline:Object = outline_mc.graphics; outline.lineStyle(0, bar_outline, 100); outline.moveTo(0, 0); outline.lineTo((w - 20), 0); outline.lineTo((w - 20), 10); outline.lineTo(0, 10); outline.lineTo(0, 0); chk.ad_msec = ad_msec; chk.ad_timeout = ad_timeout; chk.started = getTimer(); chk.showing = false; chk.last_pcnt = 0; chk.fadeout_time = fadeout_time; chk.fadeFunction = function ():void{ var _local1:Number = (100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time))); if (_local1 > 0){ this.parent.alpha = (_local1 * 0.01); } else { MochiAd.unload(clip); delete this["onEnterFrame"]; }; }; complete = false; unloaded = false; var f:Function = function (_arg1:Event):void{ _arg1.target.removeEventListener(_arg1.type, arguments.callee); complete = true; if (unloaded){ MochiAd.unload(clip); }; }; clip.loaderInfo.addEventListener(Event.COMPLETE, f); if ((clip.root is MovieClip)){ r = (clip.root as MovieClip); if (r.framesLoaded >= r.totalFrames){ complete = true; }; }; mc.unloadAd = function ():void{ unloaded = true; if (complete){ MochiAd.unload(clip); }; }; mc.adLoaded = options.ad_loaded; mc.adSkipped = options.ad_skipped; mc.adjustProgress = function (_arg1:Number):void{ var _local2:Object = mc._mochiad_wait; _local2.server_control = true; _local2.showing = true; _local2.started = getTimer(); _local2.ad_msec = _arg1; }; mc.rpc = function (_arg1:Number, _arg2:Object):void{ MochiAd.rpc(clip, _arg1, _arg2); }; mc.rpcTestFn = function (_arg1:String):Object{ trace(("[MOCHIAD rpcTestFn] " + _arg1)); return (_arg1); }; mc.regContLC = function (_arg1:String):void{ mc._containerLCName = _arg1; }; sendHostProgress = false; mc.sendHostLoadProgress = function (_arg1:String):void{ sendHostProgress = true; }; chk["onEnterFrame"] = function ():void{ var _local11:Number; if (((!(this.parent)) || (!(this.parent.parent)))){ delete this["onEnterFrame"]; return; }; var _local1:Object = this.parent.parent.root; var _local2:Object = this.parent._mochiad_ctr; var _local3:Number = (getTimer() - this.started); var _local4:Boolean; var _local5:Number = _local1.loaderInfo.bytesTotal; var _local6:Number = _local1.loaderInfo.bytesLoaded; if (complete){ _local6 = Math.max(1, _local6); _local5 = _local6; }; var _local7:Number = ((100 * _local6) / _local5); var _local8:Number = ((100 * _local3) / chk.ad_msec); var _local9:Object = this._mochiad_bar._inside; var _local10:Number = Math.min(100, Math.min(((_local7) || (0)), _local8)); _local10 = Math.max(this.last_pcnt, _local10); this.last_pcnt = _local10; _local9.scaleX = (_local10 * 0.01); options.ad_progress(_local10); if (sendHostProgress){ clip._mochiad.lc.send(clip._mochiad._containerLCName, "notify", {id:"hostLoadPcnt", pcnt:_local7}); if (_local7 == 100){ sendHostProgress = false; }; }; if (!chk.showing){ _local11 = this.parent._mochiad_ctr.contentLoaderInfo.bytesTotal; if (_local11 > 0){ chk.showing = true; chk.started = getTimer(); MochiAd.adShowing(clip); } else { if ((((_local3 > chk.ad_timeout)) && ((_local7 == 100)))){ options.ad_failed(); _local4 = true; }; }; }; if (_local3 > chk.ad_msec){ _local4 = true; }; if (((complete) && (_local4))){ if (this.server_control){ delete this.onEnterFrame; } else { this.fadeout_start = getTimer(); this.onEnterFrame = chk.fadeFunction; }; }; }; doOnEnterFrame(chk); } public static function showPreloaderAd(_arg1:Object):void{ trace("[MochiAd] DEPRECATED: showPreloaderAd was renamed to showPreGameAd in 2.0"); MochiAd.showPreGameAd(_arg1); } public static function showTimedAd(_arg1:Object):void{ trace("[MochiAd] DEPRECATED: showTimedAd was renamed to showInterLevelAd in 2.0"); MochiAd.showInterLevelAd(_arg1); } public static function doOnEnterFrame(_arg1:MovieClip):void{ var mc = _arg1; var f:Function = function (_arg1:Object):void{ if (((("onEnterFrame" in mc)) && (mc.onEnterFrame))){ mc.onEnterFrame(); } else { _arg1.target.removeEventListener(_arg1.type, arguments.callee); }; }; mc.addEventListener(Event.ENTER_FRAME, f); } } }//package
Section 102
//MochiBot (MochiBot) package { import flash.display.*; import flash.system.*; import flash.net.*; public dynamic class MochiBot extends Sprite { public static function track(_arg1:Sprite, _arg2:String):MochiBot{ if (Security.sandboxType == "localWithFile"){ return (null); }; var _local3:MochiBot = new (MochiBot); _arg1.addChild(_local3); Security.allowDomain("*"); Security.allowInsecureDomain("*"); var _local4 = "http://core.mochibot.com/my/core.swf"; var _local5:URLVariables = new URLVariables(); _local5["sb"] = Security.sandboxType; _local5["v"] = Capabilities.version; _local5["swfid"] = _arg2; _local5["mv"] = "8"; _local5["fv"] = "9"; var _local6:String = _local3.root.loaderInfo.loaderURL; if (_local6.indexOf("http") == 0){ _local5["url"] = _local6; } else { _local5["url"] = "local"; }; var _local7:URLRequest = new URLRequest(_local4); _local7.contentType = "application/x-www-form-urlencoded"; _local7.method = URLRequestMethod.POST; _local7.data = _local5; var _local8:Loader = new Loader(); _local3.addChild(_local8); _local8.load(_local7); return (_local3); } } }//package
Section 103
//Preloader (Preloader) package { import flash.events.*; import flash.display.*; import flash.utils.*; public dynamic class Preloader extends MovieClip { private var loader:KONG_30FPS; private var maxLoaderFrame:int;// = 0 private var loaderPlaying:Boolean;// = true public static const GAME_SIZE:int = 0x0200; public function Preloader(){ stage.stageWidth = GAME_SIZE; stage.stageHeight = GAME_SIZE; stage.scaleMode = StageScaleMode.NO_SCALE; MochiAd.showPreGameAd({clip:root, id:"9cdf7d941ebceaa7", res:"512x512", ad_started:adStarted, ad_finished:init}); } private function init():void{ addEventListener(Event.ENTER_FRAME, checkFrame); this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, checkProgress); loader = new KONG_30FPS(); loader.x = (GAME_SIZE / 2); loader.y = (GAME_SIZE / 2); this.addChild(loader); loader.gotoAndPlay(0); } private function checkProgress(_arg1:ProgressEvent):void{ if (loader.currentFrame > maxLoaderFrame){ maxLoaderFrame = loader.currentFrame; }; if ((_arg1.bytesLoaded / _arg1.bytesTotal) < (loader.currentFrame / loader.totalFrames)){ loader.stop(); loaderPlaying = false; } else { if (!loaderPlaying){ loaderPlaying = true; loader.play(); }; }; } private function checkFrame(_arg1:Event):void{ if ((((currentFrame == totalFrames)) && ((((loader.currentFrame >= (loader.totalFrames - 5))) || ((maxLoaderFrame > loader.currentFrame)))))){ removeEventListener(Event.ENTER_FRAME, checkFrame); this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, checkProgress); startup(); }; } public function adStarted():void{ } private function startup():void{ this.removeChild(loader); loader.stop(); loader = null; stop(); var _local1:Class = (getDefinitionByName("Main") as Class); addChild((new (_local1) as DisplayObject)); } } }//package

Library Items

Symbol 1 GraphicUsed by:2 31
Symbol 2 MovieClipUses:1Used by:31
Symbol 3 GraphicUsed by:4
Symbol 4 ButtonUses:3Used by:31
Symbol 5 GraphicUsed by:31
Symbol 6 GraphicUsed by:7
Symbol 7 MovieClipUses:6Used by:25 31
Symbol 8 GraphicUsed by:9
Symbol 9 MovieClipUses:8Used by:24 31
Symbol 10 GraphicUsed by:11
Symbol 11 MovieClipUses:10Used by:18 24 25 31
Symbol 12 GraphicUsed by:13
Symbol 13 MovieClipUses:12Used by:18 24 25 31
Symbol 14 GraphicUsed by:15
Symbol 15 MovieClipUses:14Used by:18 24 25 31
Symbol 16 GraphicUsed by:17
Symbol 17 MovieClipUses:16Used by:18 24 25 31
Symbol 18 MovieClipUses:11 13 15 17Used by:31
Symbol 19 GraphicUsed by:31
Symbol 20 GraphicUsed by:21 31
Symbol 21 MovieClipUses:20Used by:31
Symbol 22 GraphicUsed by:31
Symbol 23 GraphicUsed by:25
Symbol 24 MovieClipUses:9 11 13 15 17Used by:25
Symbol 25 MovieClipUses:23 7 24 11 13 15 17Used by:31
Symbol 26 GraphicUsed by:27
Symbol 27 MovieClipUses:26Used by:31
Symbol 28 FontUsed by:29
Symbol 29 TextUses:28Used by:30
Symbol 30 MovieClipUses:29Used by:31
Symbol 31 MovieClip {KONG_30FPS} [KONG_30FPS]Uses:1 2 4 5 7 9 18 19 21 22 11 13 15 17 25 27 20 30
Symbol 32 MovieClip {com.kongregate.as3.client.KongregateAPI} [com.kongregate.as3.client.KongregateAPI]
Symbol 33 Sound {Util.Music_clsTheme} [Util.Music_clsTheme]
Symbol 34 Sound {Util.Music_clsChap2} [Util.Music_clsChap2]
Symbol 35 Sound {Util.Music_clsChap3} [Util.Music_clsChap3]
Symbol 36 Sound {Util.Music_clsChap1} [Util.Music_clsChap1]
Symbol 37 Sound {Util.SFX_clsLatch} [Util.SFX_clsLatch]
Symbol 38 Sound {Util.SFX_clsBlock} [Util.SFX_clsBlock]
Symbol 39 Sound {Util.SFX_clsBlockRecover} [Util.SFX_clsBlockRecover]
Symbol 40 Sound {Util.SFX_clsKey} [Util.SFX_clsKey]
Symbol 41 Sound {Util.SFX_clsPing} [Util.SFX_clsPing]
Symbol 42 Sound {Util.SFX_clsSuccess} [Util.SFX_clsSuccess]
Symbol 43 Sound {Util.SFX_clsReveal} [Util.SFX_clsReveal]
Symbol 44 Sound {Util.SFX_clsLatchRecover} [Util.SFX_clsLatchRecover]
Symbol 45 Sound {Util.SFX_clsPingRecover} [Util.SFX_clsPingRecover]
Symbol 46 Sound {Util.SFX_clsSwitch} [Util.SFX_clsSwitch]
Symbol 47 Bitmap {Blocks.BlockerBlock_clsDiamond}
Symbol 48 Bitmap {Screens.ChapterThreeScreen_ChapThreeBackground}
Symbol 49 Bitmap {Screens.ChapterOneScreen_ChapOneBackground}
Symbol 50 Bitmap {Main_BinaryBG}
Symbol 51 Bitmap {Interface.Packet_clsPacket}
Symbol 52 Font {Util.Fonts_pixel}
Symbol 53 Bitmap {Blocks.KeyBlock_clsKey}
Symbol 54 Bitmap {Interface.EditButton_clsDelete}
Symbol 55 Bitmap {Interface.Port_clsPort}
Symbol 56 Bitmap {Blocks.DirectoryBlock_clsEye}
Symbol 57 Bitmap {Screens.TitleScreen_KongBadge}
Symbol 58 Bitmap {Interface.Level_clsGrid}
Symbol 59 Bitmap {Blocks.DividerBlock_clsCube}
Symbol 60 Bitmap {Screens.TutorialScreen_tutorialbg}
Symbol 61 Bitmap {Blocks.LatchBlock_clsColumn}
Symbol 62 Bitmap {Interface.SoundButton_soundIcon}
Symbol 63 Bitmap {Screens.TitleScreen_ExploitLogo}
Symbol 64 Bitmap {Screens.ChapterTwoScreen_ChapTwoBackground}
Symbol 65 Bitmap {Interface.MusicButton_musicIcon}
Symbol 66 Bitmap {Blocks.GoalBlock_clsPyramid}
Symbol 67 Bitmap {Blocks.ActivatorBlock_clsSphere}
Symbol 68 Bitmap {Interface.EditButton_clsPath}

Special Tags

FileAttributes (69)Timeline Frame 1Access network only, Metadata present, AS3.
SWFMetaData (77)Timeline Frame 1459 bytes "<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'><rdf:Description rdf:about='' xmlns ..."
ScriptLimits (65)Timeline Frame 1MaxRecursionDepth: 1000, ScriptTimeout: 60 seconds
ExportAssets (56)Timeline Frame 1Symbol 31 as "KONG_30FPS"
ExportAssets (56)Timeline Frame 2Symbol 32 as "com.kongregate.as3.client.KongregateAPI"
ExportAssets (56)Timeline Frame 2Symbol 33 as "Util.Music_clsTheme"
ExportAssets (56)Timeline Frame 2Symbol 34 as "Util.Music_clsChap2"
ExportAssets (56)Timeline Frame 2Symbol 35 as "Util.Music_clsChap3"
ExportAssets (56)Timeline Frame 2Symbol 36 as "Util.Music_clsChap1"
ExportAssets (56)Timeline Frame 2Symbol 37 as "Util.SFX_clsLatch"
ExportAssets (56)Timeline Frame 2Symbol 38 as "Util.SFX_clsBlock"
ExportAssets (56)Timeline Frame 2Symbol 39 as "Util.SFX_clsBlockRecover"
ExportAssets (56)Timeline Frame 2Symbol 40 as "Util.SFX_clsKey"
ExportAssets (56)Timeline Frame 2Symbol 41 as "Util.SFX_clsPing"
ExportAssets (56)Timeline Frame 2Symbol 42 as "Util.SFX_clsSuccess"
ExportAssets (56)Timeline Frame 2Symbol 43 as "Util.SFX_clsReveal"
ExportAssets (56)Timeline Frame 2Symbol 44 as "Util.SFX_clsLatchRecover"
ExportAssets (56)Timeline Frame 2Symbol 45 as "Util.SFX_clsPingRecover"
ExportAssets (56)Timeline Frame 2Symbol 46 as "Util.SFX_clsSwitch"
SerialNumber (41)Timeline Frame 1

Labels

"Preloader"Frame 1
"start"Frame 2




http://swfchan.com/12/57351/info.shtml
Created: 18/4 -2019 06:48:41 Last modified: 18/4 -2019 06:48:41 Server time: 22/12 -2024 23:16:00