Section 1
//ADInjector (com.flashrelax.utils.ADInjector)
package com.flashrelax.utils {
import flash.events.*;
import flash.display.*;
import mochi.*;
public dynamic class ADInjector extends Sprite {
private var adOptions:Object;
public static const AD_FINISHED:String = "adFinished";
public function ADInjector(_arg1:Object){
var _local2:String;
adOptions = {};
super();
addEventListener(Event.ADDED_TO_STAGE, addedToStageListener, false, 0, true);
addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageListener, false, 0, true);
adOptions = {};
adOptions["clip"] = this;
adOptions["ad_started"] = this.ADStarted;
adOptions["ad_finished"] = this.ADFinished;
adOptions["no_bg"] = true;
if (_arg1){
for (_local2 in _arg1) {
adOptions[_local2] = _arg1[_local2];
};
};
}
private function ADFinished():void{
dispatchEvent(new Event(AD_FINISHED, false, false));
}
private function addedToStageListener(_arg1:Event):void{
MochiAd.showPreGameAd(adOptions);
}
private function removedFromStageListener(_arg1:Event):void{
}
private function ADStarted():void{
}
}
}//package com.flashrelax.utils
Section 2
//ProgressBar (com.flashrelax.utils.ProgressBar)
package com.flashrelax.utils {
import flash.display.*;
import flash.geom.*;
public class ProgressBar extends Sprite {
private var mBarWidth:int;
private var mProgress:Number;
private var mMin:Number;
private var mMax:Number;
private var mBarHeight:int;
private static const barRatios:Array = [0, 111, 128, 0xFF];
private static const highlightColors:Array = [0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF];
private static const cornerRadius:int = 2;
private static const backgroundBorderColor:uint = 0xB2B2B2;
private static const barAlphas:Array = [1, 1, 1, 1];
private static const backgroundShadowRatios:Array = [0, 7, 247, 0xFF];
private static const barShadowAlphas:Array = [0.2, 0, 0, 0.2];
private static const backgroundColor:uint = 0xC9C9C9;
private static const barColors:Array = [12961279, 9807595, 5323, 4808175];
private static const highlightAlphas:Array = [0.7, 0.1, 0, 0];
private static const barShadowColors:Array = [0x444444, 0x444444, 0x444444, 0x444444];
private static const highlightRatios:Array = [0, 48, 63, 0xFF];
private static const backgroundShadowAlphas:Array = [0.2, 0, 0, 0.2];
private static const borderWidth:int = 1;
private static const barShadowRatios:Array = [0, 7, 247, 0xFF];
private static const backgroundShadowColors:Array = [0x444444, 0x444444, 0x444444, 0x444444];
public function ProgressBar(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:Number=0, _arg6:Number=100){
mMin = _arg5;
mMax = _arg6;
x = _arg1;
y = _arg2;
mBarWidth = _arg3;
mBarHeight = _arg4;
}
public function Update(_arg1:Number=NaN):void{
if (!isNaN(_arg1)){
mProgress = _arg1;
};
var _local2:Matrix = new Matrix();
graphics.clear();
graphics.beginFill(backgroundColor, 1);
graphics.lineStyle(borderWidth, backgroundBorderColor, 1);
graphics.drawRoundRect(0, 0, mBarWidth, mBarHeight, cornerRadius, cornerRadius);
graphics.endFill();
graphics.lineStyle(0, 0, 0);
_local2.createGradientBox(mBarWidth, mBarHeight, ((0 / 180) * Math.PI), 0, 0);
graphics.beginGradientFill(GradientType.LINEAR, backgroundShadowColors, backgroundShadowAlphas, backgroundShadowRatios, _local2, SpreadMethod.PAD);
graphics.drawRect(1, 1, (mBarWidth - 2), (mBarHeight - 2));
graphics.endFill();
graphics.lineStyle(1, 0xFFFFFF, 0.5);
graphics.drawRect(1, 1, (mBarWidth - 2), (mBarHeight - 2));
var _local3:int = Math.min((((mBarWidth - 2) / (mMax - mMin)) * mProgress), mBarWidth);
_local2.createGradientBox(mBarWidth, mBarHeight, ((90 / 180) * Math.PI), 0, 0);
graphics.lineStyle(0, 0, 0);
graphics.beginGradientFill(GradientType.LINEAR, barColors, barAlphas, barRatios, _local2, SpreadMethod.PAD);
graphics.drawRect(1, 1, _local3, (mBarHeight - 2));
graphics.endFill();
graphics.lineStyle(0, 0, 0);
_local2.createGradientBox(_local3, mBarHeight, ((0 / 180) * Math.PI), 0, 0);
graphics.beginGradientFill(GradientType.LINEAR, barShadowColors, barShadowAlphas, barRatios, _local2, SpreadMethod.PAD);
graphics.drawRect(1, 1, _local3, (mBarHeight - 2));
graphics.endFill();
graphics.lineStyle(0, 0, 0);
_local2.createGradientBox(mBarWidth, mBarHeight, ((90 / 180) * Math.PI), 0, 0);
graphics.beginGradientFill(GradientType.LINEAR, highlightColors, highlightAlphas, highlightRatios, _local2, SpreadMethod.PAD);
graphics.drawRect(1, 1, (mBarWidth - 2), (mBarHeight - 2));
graphics.endFill();
}
}
}//package com.flashrelax.utils
Section 3
//QuickText (com.flashrelax.utils.QuickText)
package com.flashrelax.utils {
import flash.text.*;
public class QuickText extends TextField {
private static var mDefaultFont:String;
private static var mAlign:String;
private static var mColor:uint;
private static var mSize:int;
public function QuickText(_arg1:int=12, _arg2:String="left", _arg3:uint=0xFFFFFF){
mSize = _arg1;
mAlign = _arg2;
mColor = _arg3;
changeSettings();
embedFonts = true;
selectable = false;
mouseEnabled = false;
}
public function set align(_arg1:String):void{
mAlign = _arg1;
changeSettings();
}
public function set size(_arg1:int):void{
mSize = _arg1;
changeSettings();
}
public function changeSettings():void{
var _local1:TextFormat = getTextFormat();
_local1.font = mDefaultFont;
_local1.size = mSize;
_local1.align = mAlign;
_local1.color = mColor;
defaultTextFormat = _local1;
}
public function set color(_arg1:uint):void{
mColor = _arg1;
changeSettings();
}
public function setText(_arg1:String):void{
text = "";
appendText(_arg1);
}
public static function setDefaultFont(_arg1:String):void{
mDefaultFont = _arg1;
}
}
}//package com.flashrelax.utils
Section 4
//VisualButton (com.flashrelax.utils.VisualButton)
package com.flashrelax.utils {
import flash.display.*;
import flash.text.*;
public class VisualButton extends Sprite {
private var mVisText:QuickText;
private var mButMC:MovieClip;
private var mText:String;
private var mFontSize:int;
public static var mButtonsSWFClass:Class = VisualButton_mButtonsSWFClass;
public function VisualButton(_arg1:String, _arg2:Number=1, _arg3:Number=1, _arg4:int=12){
mButMC = (new mButtonsSWFClass() as MovieClip);
mButMC.gotoAndStop(1);
mButMC.x = 0;
mButMC.y = 0;
mButMC.scaleX = _arg2;
mButMC.scaleY = _arg3;
addChild(mButMC);
mText = _arg1;
mFontSize = _arg4;
if (_arg1.length == 2){
mFontSize--;
};
if (_arg1.length == 3){
mFontSize = (mFontSize - 3);
};
mVisText = new QuickText(mFontSize, TextFormatAlign.CENTER, 0);
mVisText.width = (mButMC.width * 0.8);
mVisText.x = 2;
mVisText.y = 0;
mVisText.setText(mText);
addChild(mVisText);
}
}
}//package com.flashrelax.utils
Section 5
//VisualButton_mButtonsSWFClass (com.flashrelax.utils.VisualButton_mButtonsSWFClass)
package com.flashrelax.utils {
import mx.core.*;
public class VisualButton_mButtonsSWFClass extends MovieClipAsset {
}
}//package com.flashrelax.utils
Section 6
//Ball (com.recolor.Ball)
package com.recolor {
import flash.display.*;
import flash.events.*;
public class Ball extends Sprite {
private var mState:int;
private var mPos:int;
private var mDestX:int;
private var mDestY:int;
private var mUseBmp:Bitmap;
private var mId:int;
private var mBigBall:BigBall;
private var mColor:int;
private static const STATE_MOVE_EXCHANGE_CENTER:int = 3;
private static const STATE_MOVE_EXCHANGE_BACK:int = 4;
private static const STATE_NORMAL:int = 0;
private static const STATE_MOVE_TO:int = 2;
private static const STATE_MOVE_AWAY:int = 1;
public function Ball(){
mState = STATE_NORMAL;
mColor = Math.floor((Math.random() * GameState.mColors));
var _local1:Bitmap = new Bitmap(DataCollection.mSmallBalls[mColor]);
addChild(_local1);
mUseBmp = _local1;
this.mouseEnabled = false;
}
public function exchangeColor(_arg1:BigBall):void{
mBigBall = _arg1;
mBigBall.wait = true;
if (mState == STATE_NORMAL){
addEventListener(Event.ENTER_FRAME, onFrame);
};
mState = STATE_MOVE_EXCHANGE_CENTER;
mDestX = x;
mDestY = y;
if (mId < 8){
mDestY = (7 * Settings.BOARD_SECTION_HEIGHT);
} else {
mDestX = (8 * Settings.BOARD_SECTION_WIDTH);
};
}
public function get color():int{
return (mColor);
}
public function setCoordsFromId(_arg1:int, _arg2:int, _arg3:Boolean=false):void{
mId = _arg1;
mPos = _arg2;
var _local4:int = x;
var _local5:int = y;
x = 0;
y = 0;
if (_arg1 < 8){
x = (6 + (_arg1 % 4));
if (_arg1 < 4){
y = (_arg2 - 1);
} else {
y = (((5 + 4) + 5) - _arg2);
};
} else {
y = (5 + (_arg1 % 4));
if (_arg1 < 12){
x = (_arg2 - 1);
} else {
x = (((6 + 4) + 6) - _arg2);
};
};
x = (Settings.BALL_OFFSET_DX + (x * Settings.BOARD_SECTION_WIDTH));
y = (Settings.BALL_OFFSET_DY + (y * Settings.BOARD_SECTION_HEIGHT));
if (_arg3){
if (mState != STATE_MOVE_EXCHANGE_CENTER){
mDestX = x;
mDestY = y;
};
x = _local4;
y = _local5;
if (mState == STATE_NORMAL){
addEventListener(Event.ENTER_FRAME, onFrame);
mState = STATE_MOVE_TO;
};
};
}
public function set color(_arg1:int):void{
if (mColor != _arg1){
mColor = _arg1;
mUseBmp.bitmapData = DataCollection.mSmallBalls[mColor];
};
}
public function onFrame(_arg1:Event):void{
var _local2:int;
var _local3:int;
if (mState != STATE_NORMAL){
if ((Math.abs((x - mDestX)) + Math.abs((y - mDestY))) < 30){
x = mDestX;
y = mDestY;
switch (mState){
case STATE_MOVE_AWAY:
removeEventListener(Event.ENTER_FRAME, onFrame);
parent.removeChild(this);
break;
case STATE_MOVE_TO:
case STATE_MOVE_EXCHANGE_BACK:
removeEventListener(Event.ENTER_FRAME, onFrame);
mState = STATE_NORMAL;
break;
case STATE_MOVE_EXCHANGE_CENTER:
if (UserSettings.mSound){
DataCollection.mSfxColorSwap.play();
};
mState = STATE_MOVE_EXCHANGE_BACK;
setCoordsFromId(mId, mPos, true);
_local3 = color;
color = mBigBall.color;
mBigBall.color = _local3;
mBigBall.wait = false;
break;
};
return;
};
_local2 = Settings.BALL_MOVE_AWAY_SPEED;
if (mState == STATE_MOVE_TO){
_local2 = Settings.BALL_MOVE_AWAY_SPEED;
};
if (x < mDestX){
x = (x + _local2);
} else {
if (x > mDestX){
x = (x - _local2);
};
};
if (y < mDestY){
y = (y + _local2);
} else {
if (y > mDestY){
y = (y - _local2);
};
};
};
}
public function moveAway():void{
if (mState == STATE_NORMAL){
addEventListener(Event.ENTER_FRAME, onFrame);
};
mState = STATE_MOVE_AWAY;
mDestX = x;
mDestY = y;
if (mId < 8){
mDestY = (7 * Settings.BOARD_SECTION_HEIGHT);
} else {
mDestX = (8 * Settings.BOARD_SECTION_WIDTH);
};
}
}
}//package com.recolor
Section 7
//BigBall (com.recolor.BigBall)
package com.recolor {
import flash.display.*;
public class BigBall extends Sprite {
private var mWait:Boolean;
private var mUseBmp:Bitmap;
private var mColor:int;
public function BigBall(){
mColor = 0;
x = ((6 * Settings.BOARD_SECTION_WIDTH) + Settings.BIG_BALL_OFFSET_DX);
y = ((5 * Settings.BOARD_SECTION_HEIGHT) + Settings.BIG_BALL_OFFSET_DY);
mColor = Math.floor((Math.random() * GameState.mColors));
var _local1:Bitmap = new Bitmap(DataCollection.mBigBalls[mColor]);
mUseBmp = _local1;
addChild(mUseBmp);
}
public function set wait(_arg1:Boolean):void{
mWait = _arg1;
}
public function set color(_arg1:int):void{
if (_arg1 != mColor){
mColor = _arg1;
mUseBmp.bitmapData = DataCollection.mBigBalls[mColor];
};
}
public function get wait():Boolean{
return (mWait);
}
public function get color():int{
return (mColor);
}
}
}//package com.recolor
Section 8
//Button (com.recolor.Button)
package com.recolor {
import flash.display.*;
import flash.text.*;
import flash.filters.*;
public class Button extends SimpleButton {
private var mText:String;
public function Button(_arg1:String, _arg2:int=24){
mText = _arg1;
var _local3:TextField = createLabel(4294901760, _arg2);
var _local4:int = _local3.width;
var _local5:int = _local3.height;
var _local6:Sprite = new Sprite();
_local6.addChild(_local3);
var _local7:Sprite = new Sprite();
_local7.addChild(createLabel(0xFF7F00, _arg2));
var _local8:Sprite = new Sprite();
_local8.addChild(createLabel(0xEFEF00, _arg2));
upState = _local7;
overState = _local8;
downState = _local6;
useHandCursor = true;
hitTestState = _local7;
}
public function createLabel(_arg1:uint, _arg2:int):TextField{
var _local3:TextField;
_local3 = new TextField();
_local3.type = TextFieldType.DYNAMIC;
_local3.selectable = false;
_local3.textColor = _arg1;
var _local4:TextFormat = _local3.getTextFormat();
_local4.font = Settings.GAME_FONT;
_local4.size = _arg2;
_local4.align = TextFormatAlign.CENTER;
_local3.defaultTextFormat = _local4;
_local3.embedFonts = true;
_local3.appendText(mText);
_local3.y = 0;
_local3.x = 0;
var _local5:Array = new Array(1);
_local5[0] = new GlowFilter(0x1F1F00, 1, 6, 6, 3, 1, false, false);
_local3.filters = _local5;
var _local6:int = _local3.getLineMetrics(0).width;
var _local7:int = _local3.getLineMetrics(0).height;
_local3.width = (_local6 + 10);
_local3.height = (_local7 + 5);
return (_local3);
}
}
}//package com.recolor
Section 9
//DataCollection (com.recolor.DataCollection)
package com.recolor {
import flash.display.*;
import flash.text.*;
import com.flashrelax.utils.*;
import mx.core.*;
import flash.geom.*;
public class DataCollection {
public static var mBigBalls:Array;
private static var mBigBoardSectionClass:Class = DataCollection_mBigBoardSectionClass;
public static var mBoardSectionH:BitmapData;
public static var mSfxLose:SoundAsset;
public static var mSfxMenu:SoundAsset;
public static var mBigBoardSection:BitmapData;
public static var mSmallBalls:Array;
public static var mSfxColorSwap:SoundAsset;
private static var mMusicClass:Class = DataCollection_mMusicClass;
private static var mSfxMenuClass:Class = DataCollection_mSfxMenuClass;
public static var mMusic:SoundAsset;
public static var mSfxAway:SoundAsset;
public static var mInGameLogoClass:Class = DataCollection_mInGameLogoClass;
private static var mSfxLoseClass:Class = DataCollection_mSfxLoseClass;
private static var mBoardSectionClass:Class = DataCollection_mBoardSectionClass;
private static var mGameFont:Class = DataCollection_mGameFont;
private static var mSfxAwayClass:Class = DataCollection_mSfxAwayClass;
public static var mBoardSection:BitmapData;
public static var mLogoSWFClass:Class = DataCollection_mLogoSWFClass;
private static var mBigBallsClass:Class = DataCollection_mBigBallsClass;
private static var mSfxColorSwapClass:Class = DataCollection_mSfxColorSwapClass;
private static var mBoardSectionHClass:Class = DataCollection_mBoardSectionHClass;
private static var mSmallBallsClass:Class = DataCollection_mSmallBallsClass;
public static function init():void{
var _local1:int;
var _local3:Rectangle;
var _local4:Point;
Font.registerFont(mGameFont);
QuickText.setDefaultFont(Settings.GAME_FONT);
var _local2:BitmapAsset = (new mBoardSectionClass() as BitmapAsset);
mBoardSection = _local2.bitmapData;
_local2 = (new mBoardSectionHClass() as BitmapAsset);
mBoardSectionH = _local2.bitmapData;
_local2 = (new mBigBoardSectionClass() as BitmapAsset);
mBigBoardSection = _local2.bitmapData;
_local2 = (new mSmallBallsClass() as BitmapAsset);
mSmallBalls = new Array(Settings.BALL_COLOR_COUNT);
_local1 = 0;
while (_local1 < Settings.BALL_COLOR_COUNT) {
mSmallBalls[_local1] = new BitmapData(Settings.BALL_WIDTH, Settings.BALL_HEIGHT);
_local3 = new Rectangle(0, (_local1 * Settings.BALL_HEIGHT), Settings.BALL_WIDTH, Settings.BALL_HEIGHT);
_local4 = new Point(0, 0);
mSmallBalls[_local1].copyPixels(_local2.bitmapData, _local3, _local4);
_local1++;
};
_local2 = (new mBigBallsClass() as BitmapAsset);
mBigBalls = new Array(Settings.BALL_COLOR_COUNT);
_local1 = 0;
while (_local1 < Settings.BALL_COLOR_COUNT) {
mBigBalls[_local1] = new BitmapData(Settings.BIG_BALL_WIDTH, Settings.BIG_BALL_HEIGHT);
_local3 = new Rectangle(0, (_local1 * Settings.BIG_BALL_HEIGHT), Settings.BIG_BALL_WIDTH, Settings.BIG_BALL_HEIGHT);
_local4 = new Point(0, 0);
mBigBalls[_local1].copyPixels(_local2.bitmapData, _local3, _local4);
_local1++;
};
mSfxColorSwap = (new mSfxColorSwapClass() as SoundAsset);
mSfxAway = (new mSfxAwayClass() as SoundAsset);
mSfxMenu = (new mSfxMenuClass() as SoundAsset);
mSfxLose = (new mSfxLoseClass() as SoundAsset);
mMusic = (new mMusicClass() as SoundAsset);
}
init();
}
}//package com.recolor
Section 10
//DataCollection_mBigBallsClass (com.recolor.DataCollection_mBigBallsClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mBigBallsClass extends BitmapAsset {
}
}//package com.recolor
Section 11
//DataCollection_mBigBoardSectionClass (com.recolor.DataCollection_mBigBoardSectionClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mBigBoardSectionClass extends BitmapAsset {
}
}//package com.recolor
Section 12
//DataCollection_mBoardSectionClass (com.recolor.DataCollection_mBoardSectionClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mBoardSectionClass extends BitmapAsset {
}
}//package com.recolor
Section 13
//DataCollection_mBoardSectionHClass (com.recolor.DataCollection_mBoardSectionHClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mBoardSectionHClass extends BitmapAsset {
}
}//package com.recolor
Section 14
//DataCollection_mGameFont (com.recolor.DataCollection_mGameFont)
package com.recolor {
import mx.core.*;
public class DataCollection_mGameFont extends FontAsset {
}
}//package com.recolor
Section 15
//DataCollection_mInGameLogoClass (com.recolor.DataCollection_mInGameLogoClass)
package com.recolor {
import flash.utils.*;
import mx.core.*;
public class DataCollection_mInGameLogoClass extends MovieClipLoaderAsset {
public var dataClass:Class;
private static var bytes:ByteArray = null;
public function DataCollection_mInGameLogoClass(){
dataClass = DataCollection_mInGameLogoClass_dataClass;
super();
initialWidth = (3900 / 20);
initialHeight = (3000 / 20);
}
override public function get movieClipData():ByteArray{
if (bytes == null){
bytes = ByteArray(new dataClass());
};
return (bytes);
}
}
}//package com.recolor
Section 16
//DataCollection_mInGameLogoClass_dataClass (com.recolor.DataCollection_mInGameLogoClass_dataClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mInGameLogoClass_dataClass extends ByteArrayAsset {
}
}//package com.recolor
Section 17
//DataCollection_mLogoSWFClass (com.recolor.DataCollection_mLogoSWFClass)
package com.recolor {
import flash.utils.*;
import mx.core.*;
public class DataCollection_mLogoSWFClass extends MovieClipLoaderAsset {
public var dataClass:Class;
private static var bytes:ByteArray = null;
public function DataCollection_mLogoSWFClass(){
dataClass = DataCollection_mLogoSWFClass_dataClass;
super();
initialWidth = (11000 / 20);
initialHeight = (8000 / 20);
}
override public function get movieClipData():ByteArray{
if (bytes == null){
bytes = ByteArray(new dataClass());
};
return (bytes);
}
}
}//package com.recolor
Section 18
//DataCollection_mLogoSWFClass_dataClass (com.recolor.DataCollection_mLogoSWFClass_dataClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mLogoSWFClass_dataClass extends ByteArrayAsset {
}
}//package com.recolor
Section 19
//DataCollection_mMusicClass (com.recolor.DataCollection_mMusicClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mMusicClass extends SoundAsset {
}
}//package com.recolor
Section 20
//DataCollection_mSfxAwayClass (com.recolor.DataCollection_mSfxAwayClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mSfxAwayClass extends SoundAsset {
}
}//package com.recolor
Section 21
//DataCollection_mSfxColorSwapClass (com.recolor.DataCollection_mSfxColorSwapClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mSfxColorSwapClass extends SoundAsset {
}
}//package com.recolor
Section 22
//DataCollection_mSfxLoseClass (com.recolor.DataCollection_mSfxLoseClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mSfxLoseClass extends SoundAsset {
}
}//package com.recolor
Section 23
//DataCollection_mSfxMenuClass (com.recolor.DataCollection_mSfxMenuClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mSfxMenuClass extends SoundAsset {
}
}//package com.recolor
Section 24
//DataCollection_mSmallBallsClass (com.recolor.DataCollection_mSmallBallsClass)
package com.recolor {
import mx.core.*;
public class DataCollection_mSmallBallsClass extends BitmapAsset {
}
}//package com.recolor
Section 25
//Field (com.recolor.Field)
package com.recolor {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.ui.*;
public class Field extends Sprite {
private var mHUD:HUD;
private var mPreviewCnt:int;
private var mPreview:Array;
private var mSelectedId:int;
private var mSelected:Sprite;
private var mAppearFrame:int;
private var mMenu:Sprite;
private var mSelectionOrder:int;
private var mBigBall:BigBall;
private var mDelayFrame:int;
private var mBoard:Array;
private static const NEW_BALL_PRIORITY_FIX:int = 2;
public function Field(){
var _local1:Bitmap;
super();
GameState.mMode = GameState.MODE_TURN;
addChild(new StarField(0x0200, 448));
y = 0;
while (y < ((5 + 4) + 5)) {
x = 0;
while (x < ((6 + 4) + 6)) {
if ((((((((((x < 6)) && ((y < 5)))) || ((((x >= (6 + 4))) && ((y < 5)))))) || ((((x < 6)) && ((y >= (5 + 4))))))) || ((((x >= (6 + 4))) && ((y >= (5 + 4))))))){
} else {
if ((((((((x >= 6)) && ((x < (6 + 4))))) && ((y >= 5)))) && ((y < (5 + 4))))){
if ((((x == 6)) && ((y == 5)))){
_local1 = new Bitmap(DataCollection.mBigBoardSection);
_local1.x = (x * Settings.BOARD_SECTION_WIDTH);
_local1.y = (y * Settings.BOARD_SECTION_HEIGHT);
addChild(_local1);
};
} else {
_local1 = new Bitmap(DataCollection.mBoardSection);
_local1.x = (x * Settings.BOARD_SECTION_WIDTH);
_local1.y = (y * Settings.BOARD_SECTION_HEIGHT);
addChild(_local1);
};
};
x++;
};
y++;
};
mSelectionOrder = numChildren;
mBoard = new Array(16);
var _local2:int;
while (_local2 < 16) {
mBoard[_local2] = new Array(8);
mBoard[_local2][0] = 0;
_local2++;
};
mHUD = new HUD();
addChild(mHUD);
mBigBall = new BigBall();
addChild(mBigBall);
mSelected = null;
mPreview = new Array(25);
mPreviewCnt = 0;
mMenu = new MainMenu();
addChild(mMenu);
GameState.mState = GameState.STATE_MAIN_MENU;
addEventListener(Event.ENTER_FRAME, onFrame);
addEventListener(MouseEvent.CLICK, onClick);
addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function onKey(_arg1:KeyboardEvent):void{
if (GameState.mState == GameState.STATE_GAME){
if ((((_arg1.charCode == Keyboard.ESCAPE)) || ((String.fromCharCode(_arg1.charCode).toLowerCase() == "p")))){
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
GameState.mState = GameState.STATE_MAIN_MENU;
addChild(new PauseMenu());
};
if (String.fromCharCode(_arg1.charCode).toLowerCase() == "i"){
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
GameState.mState = GameState.STATE_MAIN_MENU;
addChild(new InstructionsWindow());
};
};
}
public function generatePreview():void{
var _local1:PreviewBall = new PreviewBall(GameState.mColors);
addChild(_local1);
mPreview[mPreviewCnt] = _local1;
mPreviewCnt++;
}
public function onFrame(_arg1:Event):void{
if (((!((GameState.mState == GameState.STATE_GAME_OVER))) && (!((GameState.root.stage.focus is TextField))))){
GameState.root.stage.focus = GameState.root.stage;
};
if (GameState.mState != GameState.STATE_GAME){
return;
};
if (GameState.mMode == GameState.MODE_TURN){
return;
};
GameState.mTime++;
if ((GameState.mTime % 25) == 0){
mHUD.draw();
};
mDelayFrame++;
if (mDelayFrame > Settings.DELAY_CHANGE){
mDelayFrame = 0;
GameState.mCurDelay--;
if (GameState.mCurDelay < Settings.DELAY_MINIMUM){
GameState.mCurDelay = Settings.DELAY_MINIMUM;
};
};
mAppearFrame++;
if (mAppearFrame > GameState.mCurDelay){
mAppearFrame = 0;
generatePreview();
};
updatePreview();
}
public function localCoordsToId(_arg1:int, _arg2:int):int{
_arg1 = (_arg1 / Settings.BOARD_SECTION_WIDTH);
_arg2 = (_arg2 / Settings.BOARD_SECTION_HEIGHT);
var _local3 = -1;
if ((((((((_arg1 >= 6)) && ((_arg1 < (6 + 4))))) && ((_arg2 >= 0)))) && ((_arg2 < 5)))){
_local3 = (_arg1 - 6);
};
if ((((((((_arg1 >= 6)) && ((_arg1 < (6 + 4))))) && ((_arg2 >= (5 + 4))))) && ((_arg2 < ((5 + 4) + 5))))){
_local3 = ((_arg1 - 6) + 4);
};
if ((((((((_arg1 >= 0)) && ((_arg1 < 6)))) && ((_arg2 >= 5)))) && ((_arg2 < (5 + 4))))){
_local3 = ((_arg2 - 5) + 8);
};
if ((((((((_arg1 >= (6 + 4))) && ((_arg1 < ((6 + 4) + 6))))) && ((_arg2 >= 5)))) && ((_arg2 < (5 + 4))))){
_local3 = ((_arg2 - 5) + 12);
};
return (_local3);
}
public function removeSelection():void{
if (mSelected != null){
removeChild(mSelected);
mSelected = null;
};
}
public function onClick(_arg1:MouseEvent):void{
var _local3:int;
var _local4:Boolean;
if (GameState.mState != GameState.STATE_GAME){
return;
};
if (mBigBall.wait){
return;
};
var _local2:int = localCoordsToId(_arg1.localX, _arg1.localY);
if (_local2 != -1){
_local3 = 0;
while ((((mBoard[_local2][0] > 0)) && ((mBoard[_local2][mBoard[_local2][0]].color == mBigBall.color)))) {
mBoard[_local2][mBoard[_local2][0]].moveAway();
mBoard[_local2][mBoard[_local2][0]] = null;
var _local5 = mBoard[_local2];
var _local6:int;
var _local7 = (_local5[_local6] - 1);
_local5[_local6] = _local7;
_local3++;
};
if (_local3 > 0){
GameState.mScore = (GameState.mScore + Settings.SCORE_REMOVE[(_local3 - 1)]);
mHUD.draw();
};
_local4 = false;
if (mBoard[_local2][0] > 0){
mBoard[_local2][mBoard[_local2][0]].exchangeColor(mBigBall);
_local3++;
_local4 = true;
};
if ((((_local3 > 0)) && (UserSettings.mSound))){
DataCollection.mSfxAway.play();
};
if ((((GameState.mMode == GameState.MODE_TURN)) && ((_local3 > 0)))){
GameState.mTurns++;
mHUD.draw();
updatePreview();
if (GameState.mState != GameState.STATE_GAME_OVER){
generatePreview();
};
};
if (GameState.mScore >= Settings.SCORE_LIMIT){
if (UserSettings.mSound){
DataCollection.mSfxLose.play();
};
GameState.mState = GameState.STATE_GAME_OVER;
addChild(new GameOverWindow());
};
};
}
public function startGame():void{
var _local2:int;
mAppearFrame = 0;
mDelayFrame = 0;
mBigBall.wait = false;
removeSelection();
GameState.initGame();
mHUD.draw();
var _local1:int;
while (_local1 < 16) {
_local2 = 1;
while (_local2 <= mBoard[_local1][0]) {
removeChild(mBoard[_local1][_local2]);
mBoard[_local1][_local2] = null;
_local2++;
};
mBoard[_local1][0] = 0;
_local1++;
};
_local1 = 0;
while (_local1 < mPreviewCnt) {
removeChild(mPreview[_local1]);
mPreview[_local1] = null;
_local1++;
};
mPreviewCnt = 0;
if (GameState.mMode == GameState.MODE_TURN){
_local1 = 0;
while (_local1 < Settings.BALL_INIT_CNT) {
generatePreview();
_local1++;
};
updatePreview();
generatePreview();
};
if (!UserSettings.mTutorialShown){
UserSettings.mTutorialShown = true;
UserSettings.save();
GameState.mState = GameState.STATE_MAIN_MENU;
addChild(new InstructionsWindow());
};
}
public function onMouseMove(_arg1:MouseEvent):void{
var _local2:int;
var _local3:int;
var _local4:Bitmap;
if (((!((GameState.mState == GameState.STATE_GAME))) || (mBigBall.wait))){
removeSelection();
return;
};
_local2 = localCoordsToId(_arg1.localX, _arg1.localY);
if (_local2 == -1){
removeSelection();
return;
};
if (((!((mSelected == null))) && ((mSelectedId == _local2)))){
return;
};
mSelectedId = _local2;
removeSelection();
mSelected = new Sprite();
mSelected.mouseEnabled = false;
if (_local2 < 8){
_local3 = 0;
while (_local3 < 5) {
_local4 = new Bitmap(DataCollection.mBoardSectionH);
_local4.x = 0;
_local4.y = (_local3 * Settings.BOARD_SECTION_HEIGHT);
mSelected.addChild(_local4);
_local3++;
};
mSelected.x = (((_local2 % 4) + 6) * Settings.BOARD_SECTION_WIDTH);
mSelected.y = ((Math.floor((_local2 / 4)) * (5 + 4)) * Settings.BOARD_SECTION_HEIGHT);
} else {
_local3 = 0;
while (_local3 < 6) {
_local4 = new Bitmap(DataCollection.mBoardSectionH);
_local4.y = 0;
_local4.x = (_local3 * Settings.BOARD_SECTION_WIDTH);
mSelected.addChild(_local4);
_local3++;
};
mSelected.y = (((_local2 % 4) + 5) * Settings.BOARD_SECTION_HEIGHT);
mSelected.x = ((Math.floor(((_local2 - 8) / 4)) * (6 + 4)) * Settings.BOARD_SECTION_WIDTH);
};
addChildAt(mSelected, mSelectionOrder);
}
public function updatePreview():void{
var _local2:int;
var _local3:int;
var _local4:int;
var _local1:int;
while (_local1 < mPreviewCnt) {
if (mPreview[_local1].advanceTime()){
_local2 = mPreview[_local1].id;
_local3 = mBoard[_local2][0];
_local4 = _local3;
while (_local4 > 0) {
mBoard[_local2][(_local4 + 1)] = mBoard[_local2][_local4];
mBoard[_local2][(_local4 + 1)].setCoordsFromId(_local2, (_local4 + 1), true);
_local4--;
};
mBoard[_local2][1] = new Ball();
mBoard[_local2][1].setCoordsFromId(_local2, 0);
mBoard[_local2][1].setCoordsFromId(_local2, 1, true);
var _local5 = mBoard[_local2];
var _local6:int;
var _local7 = (_local5[_local6] + 1);
_local5[_local6] = _local7;
addChildAt(mBoard[_local2][1], (numChildren - NEW_BALL_PRIORITY_FIX));
if ((((((_local2 < 8)) && ((_local3 == 5)))) || ((((_local2 >= 8)) && ((_local3 == 6)))))){
if (UserSettings.mSound){
DataCollection.mSfxLose.play();
};
GameState.mState = GameState.STATE_GAME_OVER;
addChild(new GameOverWindow());
};
removeChild(mPreview[_local1]);
mPreviewCnt--;
mPreview[_local1] = mPreview[mPreviewCnt];
mPreview[mPreviewCnt] = null;
_local1--;
};
_local1++;
};
}
}
}//package com.recolor
Section 26
//GameModeMenu (com.recolor.GameModeMenu)
package com.recolor {
import flash.events.*;
import flash.ui.*;
public class GameModeMenu extends Window {
private var mButton:Array;
private static const BUTTON_COUNT:int = 5;
private static const WINDOW_HEIGHT:int = 205;
private static const WINDOW_WIDTH:int = 400;
public static const BUTTON_TEXT:Array = ["Easy (6 Colors)", "Normal (8 Colors)", "Hard (10 Colors)", "Arcade Mode", "Back"];
public function GameModeMenu(){
super("Select Mode", WINDOW_WIDTH, WINDOW_HEIGHT);
y = 160;
mButton = new Array(BUTTON_COUNT);
var _local1:int;
while (_local1 < BUTTON_COUNT) {
mButton[_local1] = new Button(BUTTON_TEXT[_local1]);
mButton[_local1].y = (45 + (_local1 * 28));
mButton[_local1].x = ((WINDOW_WIDTH - mButton[_local1].width) / 2);
mButton[_local1].addEventListener(MouseEvent.CLICK, onClick);
addChild(mButton[_local1]);
_local1++;
};
mButton[4].y = (mButton[4].y + 10);
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function onKey(_arg1:KeyboardEvent):void{
if (_arg1.charCode == Keyboard.ESCAPE){
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
removeListeners();
parent.addChild(new MainMenu());
parent.removeChild(this);
};
}
public function onClick(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
removeListeners();
var _local2:int;
var _local3:int;
while (_local3 < mButton.length) {
if (_arg1.target == mButton[_local3]){
_local2 = _local3;
};
_local3++;
};
if (_local2 == 4){
parent.addChild(new MainMenu());
parent.removeChild(this);
return;
};
GameState.mMode = GameState.MODE_TURN;
if (_local2 == 3){
GameState.mMode = GameState.MODE_ARCADE;
};
switch (_local2){
case 0:
GameState.mColors = 6;
break;
case 1:
GameState.mColors = 8;
break;
case 2:
GameState.mColors = 10;
break;
case 3:
GameState.mColors = 4;
break;
};
(parent as Field).startGame();
parent.removeChild(this);
}
public function removeListeners():void{
var _local1:int;
while (_local1 < mButton.length) {
mButton[_local1].removeEventListener(MouseEvent.CLICK, onClick);
_local1++;
};
GameState.root.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
}
}//package com.recolor
Section 27
//GameOverWindow (com.recolor.GameOverWindow)
package com.recolor {
import flash.events.*;
import mochi.*;
import flash.text.*;
import com.flashrelax.utils.*;
public class GameOverWindow extends Window {
private var mScoreText:QuickText;
private var mLoadingText:QuickText;
private var mButton:Array;
private static const WINDOW_HEIGHT:int = 440;
private static const WINDOW_WIDTH:int = 500;
private static const BUTTON_COUNT:int = 2;
private static const BUTTON_TEXT:Array = ["Restart Game", "Quit to main menu"];
private static const BUTTON_Y:int = 380;
public function GameOverWindow(){
var _local1 = "Game Over!";
if (GameState.mScore >= Settings.SCORE_LIMIT){
_local1 = "You have won!";
};
super(_local1, WINDOW_WIDTH, WINDOW_HEIGHT);
}
public function onClick(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
var _local2:int;
var _local3:int;
while (_local3 < mButton.length) {
if (_arg1.target == mButton[_local3]){
_local2 = _local3;
};
_local3++;
};
removeListeners();
switch (_local2){
case 0:
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
(parent as Field).startGame();
break;
case 1:
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
GameState.mState = GameState.STATE_MAIN_MENU;
parent.addChild(new MainMenu());
break;
};
MochiScores.closeLeaderboard();
parent.removeChild(this);
}
public function loadError(_arg1:Object):void{
if (mLoadingText != null){
mLoadingText.setText("Loading error!\nCheck your internet connection!");
};
}
public function removeListeners():void{
var _local1:int;
while (_local1 < mButton.length) {
mButton[_local1].removeEventListener(MouseEvent.CLICK, onClick);
_local1++;
};
}
override public function draw():void{
var _local3:int;
var _local4:int;
var _local5:String;
super.draw();
mScoreText = new QuickText(24, TextFormatAlign.CENTER, 0xEFEF00);
mScoreText.x = 0;
mScoreText.y = 40;
mScoreText.width = WINDOW_WIDTH;
var _local1:int;
if (GameState.mScore < Settings.SCORE_LIMIT){
_local1 = GameState.mScore;
mScoreText.setText(("Your score: " + GameState.mScore));
} else {
if (GameState.mMode == GameState.MODE_ARCADE){
_local3 = Math.floor((GameState.mTime / 25));
_local1 = (_local3 * 1000);
_local4 = Math.floor((_local3 / 60));
_local3 = (_local3 % 60);
_local5 = "Elite Time: ";
if (_local4 < 10){
_local5 = (_local5 + "0");
};
_local5 = (_local5 + (_local4 + ":"));
if (_local3 < 10){
_local5 = (_local5 + "0");
};
_local5 = (_local5 + _local3);
mScoreText.setText(_local5);
} else {
_local1 = GameState.mTurns;
mScoreText.setText(("Elite Turns: " + GameState.mTurns));
};
};
addChild(mScoreText);
mButton = new Array(BUTTON_COUNT);
var _local2:int;
while (_local2 < BUTTON_COUNT) {
mButton[_local2] = new Button(BUTTON_TEXT[_local2]);
mButton[_local2].y = (BUTTON_Y + (_local2 * 28));
mButton[_local2].x = ((WINDOW_WIDTH - mButton[_local2].width) / 2);
mButton[_local2].addEventListener(MouseEvent.CLICK, onClick);
addChild(mButton[_local2]);
_local2++;
};
mLoadingText = new QuickText(36, TextFormatAlign.CENTER, 0xFFFF00);
mLoadingText.setText("Loading scoreboard.\nPlease wait...");
mLoadingText.x = 20;
mLoadingText.width = (WINDOW_WIDTH - 40);
mLoadingText.y = ((WINDOW_HEIGHT / 2) - 40);
mLoadingText.height = 200;
mLoadingText.wordWrap = true;
addChild(mLoadingText);
HighscoreTable.setBoardType();
MochiScores.showLeaderboard({score:_local1, clip:this, hideDoneButton:true, previewScores:true, onError:loadError});
}
}
}//package com.recolor
Section 28
//GameState (com.recolor.GameState)
package com.recolor {
import flash.display.*;
import flash.media.*;
public class GameState {
public static const STATE_GAME:int = 0;
public static const STATE_MAIN_MENU:int = 2;
public static const MODE_TURN:int = 1;
public static const MODE_ARCADE:int = 0;
public static const STATE_GAME_OVER:int = 1;
public static var mTime:uint;
public static var mState:int;
public static var mScore:int;
public static var root:Sprite;
public static var mMusicChannel:SoundChannel;
public static var mTurns:int;
public static var mMode:int;
public static var mColors:int;
public static var mCurDelay:int;
public static function initGame():void{
mState = STATE_GAME;
mScore = 0;
mTurns = 0;
mTime = 0;
mCurDelay = Settings.DELAY_INITIAL;
}
}
}//package com.recolor
Section 29
//HighscoreTable (com.recolor.HighscoreTable)
package com.recolor {
import flash.events.*;
import mochi.*;
import flash.text.*;
import com.flashrelax.utils.*;
import flash.ui.*;
public class HighscoreTable extends Window {
private var mLoadingText:QuickText;
private var mButton:Array;
private static const MODE_NORMAL:int = 1;
private static const MODE_HARD:int = 2;
private static const BUTTON_Y:int = 380;
private static const WINDOW_HEIGHT:int = 420;
private static const WINDOW_WIDTH:int = 500;
private static const BUTTON_TEXT:Array = ["Back"];
private static const MODE_EASY:int = 0;
private static const BUTTON_COUNT:int = 1;
private static const MODE_ARCADE:int = 3;
private static const TYPE_REGULAR:int = 0;
private static const BOARD_ID:Array = [["b3291a32c12c328f", "2a89fdcaae340c61"], ["914bd9b42d482250", "1bc5f46a85bad81d"], ["d78707095de1f252", "f4c8f356fb4578d7"], ["d77f8c5ce1e9ad33", "8a84d56592ccc979"]];
private static const TYPE_ELITE:int = 1;
public function HighscoreTable(){
super("High Scores", WINDOW_WIDTH, WINDOW_HEIGHT);
}
public function onKey(_arg1:KeyboardEvent):void{
if (_arg1.charCode == Keyboard.ESCAPE){
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
removeListeners();
parent.addChild(new HighscoreTypeMenu());
MochiScores.closeLeaderboard();
parent.removeChild(this);
};
}
public function loadError(_arg1:Object):void{
if (mLoadingText != null){
mLoadingText.setText("Loading error!\nCheck your internet connection!");
};
}
override public function draw():void{
super.draw();
mButton = new Array(BUTTON_COUNT);
var _local1:int;
while (_local1 < BUTTON_COUNT) {
mButton[_local1] = new Button(BUTTON_TEXT[_local1]);
mButton[_local1].y = (BUTTON_Y + (_local1 * 28));
mButton[_local1].x = ((WINDOW_WIDTH - mButton[_local1].width) / 2);
mButton[_local1].addEventListener(MouseEvent.CLICK, onClick);
addChild(mButton[_local1]);
_local1++;
};
mLoadingText = new QuickText(36, TextFormatAlign.CENTER, 0xFFFF00);
mLoadingText.setText("Loading scoreboard.\nPlease wait...");
mLoadingText.x = 20;
mLoadingText.width = (WINDOW_WIDTH - 40);
mLoadingText.y = ((WINDOW_HEIGHT / 2) - 40);
mLoadingText.height = 200;
mLoadingText.wordWrap = true;
addChild(mLoadingText);
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
MochiScores.showLeaderboard({clip:this, hideDoneButton:true, onError:loadError});
}
public function onClick(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
var _local2:int;
var _local3:int;
while (_local3 < mButton.length) {
if (_arg1.target == mButton[_local3]){
_local2 = _local3;
};
_local3++;
};
removeListeners();
switch (_local2){
case 0:
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
parent.addChild(new HighscoreTypeMenu());
break;
};
MochiScores.closeLeaderboard();
parent.removeChild(this);
}
public function removeListeners():void{
var _local1:int;
while (_local1 < mButton.length) {
mButton[_local1].removeEventListener(MouseEvent.CLICK, onClick);
_local1++;
};
GameState.root.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public static function setBoardType(_arg1:int=-1, _arg2:int=-1):void{
if (_arg1 == -1){
if (GameState.mMode == GameState.MODE_ARCADE){
_arg1 = MODE_ARCADE;
} else {
if (GameState.mColors == 6){
_arg1 = MODE_EASY;
} else {
if (GameState.mColors == 8){
_arg1 = MODE_NORMAL;
} else {
if (GameState.mColors == 10){
_arg1 = MODE_HARD;
};
};
};
};
};
if (_arg2 == -1){
_arg2 = TYPE_REGULAR;
if (GameState.mScore >= Settings.SCORE_LIMIT){
_arg2 = TYPE_ELITE;
};
};
MochiScores.setBoardID(BOARD_ID[_arg1][_arg2]);
}
}
}//package com.recolor
Section 30
//HighscoreTypeMenu (com.recolor.HighscoreTypeMenu)
package com.recolor {
import flash.events.*;
import flash.ui.*;
public class HighscoreTypeMenu extends Window {
private var mButton:Array;
private static const BUTTON_COUNT:int = 9;
private static const WINDOW_HEIGHT:int = 320;
private static const WINDOW_WIDTH:int = 400;
public static const BUTTON_TEXT:Array = ["Regular Easy", "Regular Normal", "Regular Hard", "Regular Arcade", "Elite Easy", "Elite Normal", "Elite Hard", "Elite Arcade", "Back"];
public function HighscoreTypeMenu(){
super("View High Score Mode", WINDOW_WIDTH, WINDOW_HEIGHT);
mButton = new Array(BUTTON_COUNT);
var _local1:int;
while (_local1 < BUTTON_COUNT) {
mButton[_local1] = new Button(BUTTON_TEXT[_local1]);
mButton[_local1].y = (45 + (_local1 * 28));
mButton[_local1].x = ((WINDOW_WIDTH - mButton[_local1].width) / 2);
mButton[_local1].addEventListener(MouseEvent.CLICK, onClick);
addChild(mButton[_local1]);
_local1++;
};
mButton[8].y = (mButton[8].y + 10);
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function onKey(_arg1:KeyboardEvent):void{
if (_arg1.charCode == Keyboard.ESCAPE){
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
removeListeners();
parent.addChild(new MainMenu());
parent.removeChild(this);
};
}
public function onClick(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
removeListeners();
var _local2:int;
var _local3:int;
while (_local3 < mButton.length) {
if (_arg1.target == mButton[_local3]){
_local2 = _local3;
};
_local3++;
};
if (_local2 == 8){
parent.addChild(new MainMenu());
parent.removeChild(this);
return;
};
HighscoreTable.setBoardType((_local2 % 4), Math.floor((_local2 / 4)));
parent.addChild(new HighscoreTable());
parent.removeChild(this);
}
public function removeListeners():void{
var _local1:int;
while (_local1 < mButton.length) {
mButton[_local1].removeEventListener(MouseEvent.CLICK, onClick);
_local1++;
};
GameState.root.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
}
}//package com.recolor
Section 31
//HUD (com.recolor.HUD)
package com.recolor {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import com.flashrelax.utils.*;
import flash.net.*;
public class HUD extends Sprite {
private var mScoreText:QuickText;
private var mScore2Text:QuickText;
private var mModeText:QuickText;
private static const BALLHINT_Y:uint = 300;
private static const KEY_HELP_COL:uint = 0xEFAF00;
private static const SCORE_Y:uint = 50;
private static const BALLHINT_DY:uint = 35;
private static const SCORE_HELP_COL:uint = 0xEFAF00;
private static const SCORE_DY:uint = 20;
private static const BUTTONS_DY:int = 28;
private static const BUTTONS_X:int = 325;
private static const BUTTONS_Y:int = 300;
public function HUD(){
var _local1:QuickText;
var _local2:int;
var _local5:QualityControl;
var _local8:Bitmap;
super();
x = 0;
y = 0;
mModeText = new QuickText(20, TextFormatAlign.CENTER, 0xEF2F00);
mModeText.x = 0;
mModeText.y = SCORE_Y;
mModeText.width = (6 * Settings.BOARD_SECTION_WIDTH);
addChild(mModeText);
mScoreText = new QuickText(20, TextFormatAlign.CENTER, 0xEF2F00);
mScoreText.x = 0;
mScoreText.y = (SCORE_Y + SCORE_DY);
mScoreText.width = (6 * Settings.BOARD_SECTION_WIDTH);
addChild(mScoreText);
mScore2Text = new QuickText(20, TextFormatAlign.CENTER, 0xEF2F00);
mScore2Text.x = 0;
mScore2Text.y = (SCORE_Y + (SCORE_DY * 2));
mScore2Text.width = (6 * Settings.BOARD_SECTION_WIDTH);
addChild(mScore2Text);
_local2 = 0;
while (_local2 < 6) {
_local8 = new Bitmap(DataCollection.mSmallBalls[0]);
_local8.x = (Math.floor((_local2 / 3)) * 95);
_local8.y = (BALLHINT_Y + ((_local2 % 3) * BALLHINT_DY));
addChild(_local8);
_local1 = new QuickText(14, TextFormatAlign.LEFT, SCORE_HELP_COL);
_local1.x = (_local8.x + 28);
_local1.y = (_local8.y + 4);
_local1.width = 70;
_local1.height = 32;
_local1.setText(((("x " + (_local2 + 1)) + " = ") + Settings.SCORE_REMOVE[_local2]));
addChild(_local1);
_local2++;
};
var _local3:MovieClip = (new DataCollection.mInGameLogoClass() as MovieClip);
_local3.x = 320;
_local3.y = 12;
addChild(_local3);
var _local4:VisualButton = new VisualButton("P");
_local4.x = BUTTONS_X;
_local4.y = BUTTONS_Y;
addChild(_local4);
_local1 = new QuickText(18, TextFormatAlign.LEFT, KEY_HELP_COL);
_local1.x = (BUTTONS_X + 30);
_local1.y = BUTTONS_Y;
_local1.setText(Strings.getText(Strings.PauseMenu));
addChild(_local1);
_local4 = new VisualButton("I");
_local4.x = BUTTONS_X;
_local4.y = (BUTTONS_Y + BUTTONS_DY);
addChild(_local4);
_local1 = new QuickText(18, TextFormatAlign.LEFT, KEY_HELP_COL);
_local1.width = 150;
_local1.x = (BUTTONS_X + 30);
_local1.y = (BUTTONS_Y + BUTTONS_DY);
_local1.setText(Strings.getText(Strings.Instructions));
addChild(_local1);
_local4 = new VisualButton("Q");
_local4.x = BUTTONS_X;
_local4.y = (BUTTONS_Y + (BUTTONS_DY * 2));
addChild(_local4);
_local1 = new QuickText(18, TextFormatAlign.LEFT, KEY_HELP_COL);
_local1.x = (BUTTONS_X + 30);
_local1.y = (BUTTONS_Y + (BUTTONS_DY * 2));
_local1.setText(Strings.getText(Strings.Quality));
addChild(_local1);
_local5 = new QualityControl(KEY_HELP_COL);
_local5.x = (BUTTONS_X + 95);
_local5.y = ((BUTTONS_Y + (BUTTONS_DY * 2)) + 5);
addChild(_local5);
_local4 = new VisualButton("S");
_local4.x = BUTTONS_X;
_local4.y = (BUTTONS_Y + (BUTTONS_DY * 3));
addChild(_local4);
_local1 = new QuickText(18, TextFormatAlign.LEFT, KEY_HELP_COL);
_local1.x = (BUTTONS_X + 30);
_local1.y = (BUTTONS_Y + (BUTTONS_DY * 3));
_local1.setText(Strings.getText(Strings.Sound));
addChild(_local1);
var _local6:SoundControl = new SoundControl(KEY_HELP_COL);
_local6.x = (BUTTONS_X + 95);
_local6.y = ((BUTTONS_Y + (BUTTONS_DY * 3)) + 5);
addChild(_local6);
_local4 = new VisualButton("M");
_local4.x = BUTTONS_X;
_local4.y = (BUTTONS_Y + (BUTTONS_DY * 4));
addChild(_local4);
_local1 = new QuickText(18, TextFormatAlign.LEFT, KEY_HELP_COL);
_local1.x = (BUTTONS_X + 30);
_local1.y = (BUTTONS_Y + (BUTTONS_DY * 4));
_local1.setText(Strings.getText(Strings.Music));
addChild(_local1);
_local6 = new SoundControl(KEY_HELP_COL, 1);
_local6.x = (BUTTONS_X + 95);
_local6.y = ((BUTTONS_Y + (BUTTONS_DY * 4)) + 5);
addChild(_local6);
var _local7:TextField = new TextField();
_local7.x = 0;
_local7.width = (6 * Settings.BOARD_SECTION_WIDTH);
_local7.htmlText = ((((("<P ALIGN=\"CENTER\"><FONT FACE=\"_RecolorFont\" " + "SIZE=\"13\" COLOR=\"#EFAF00\" LETTERSPACING=\"0\" KERNING=\"0\">") + Strings.getText(Strings.VisitUs)) + " <u><font color='#2F3FFF'>") + "<a href='event:my'>") + "www.flashrelax.com</a></font></u></FONT></P>");
_local7.y = (((5 + 4) + 4) * Settings.BOARD_SECTION_HEIGHT);
_local7.wordWrap = true;
_local7.mouseEnabled = true;
_local7.selectable = false;
_local7.embedFonts = true;
_local7.addEventListener(TextEvent.LINK, onLink);
addChild(_local7);
draw();
}
public function onLink(_arg1:TextEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
navigateToURL(new URLRequest("http://www.flashrelax.com"));
NewgroundsAPI.logCustomEvent("SiteVisitUs");
}
public function draw():void{
var _local1:int;
var _local2:int;
var _local3:String;
if (GameState.mState == GameState.STATE_MAIN_MENU){
mModeText.setText(Strings.getText(Strings.GameMode));
} else {
if (GameState.mMode == GameState.MODE_ARCADE){
mModeText.setText(GameModeMenu.BUTTON_TEXT[3]);
} else {
if (GameState.mColors == 6){
mModeText.setText(GameModeMenu.BUTTON_TEXT[0]);
} else {
if (GameState.mColors == 8){
mModeText.setText(GameModeMenu.BUTTON_TEXT[1]);
} else {
if (GameState.mColors == 10){
mModeText.setText(GameModeMenu.BUTTON_TEXT[2]);
} else {
mModeText.setText(Strings.getText(Strings.GameMode));
};
};
};
};
};
mScoreText.setText(((Strings.getText(Strings.Score) + " ") + GameState.mScore));
if (GameState.mMode == GameState.MODE_ARCADE){
_local1 = Math.floor((GameState.mTime / 25));
_local2 = (_local1 / 60);
_local1 = (_local1 % 60);
_local3 = (Strings.getText(Strings.Time) + " ");
if (_local2 < 10){
_local3 = (_local3 + "0");
};
_local3 = (_local3 + (_local2 + ":"));
if (_local1 < 10){
_local3 = (_local3 + "0");
};
_local3 = (_local3 + _local1);
mScore2Text.setText(_local3);
} else {
mScore2Text.setText(((Strings.getText(Strings.Turns) + " ") + GameState.mTurns));
};
}
}
}//package com.recolor
Section 32
//InstructionsWindow (com.recolor.InstructionsWindow)
package com.recolor {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import com.flashrelax.utils.*;
import flash.ui.*;
public class InstructionsWindow extends Window {
private var mPageCounter:QuickText;
private var mText:QuickText;
private var mCurPage:int;
private var mButtonNext:Button;
private var mButtonPrev:Button;
private var mPage:Sprite;
private var mButton1:Button;
private static const TEXTAREA_HEIGHT:int = 355;
private static const WINDOW_HEIGHT:int = 440;
private static const WINDOW_WIDTH:int = 500;
private static const PAGE_COUNT:int = 5;
public function InstructionsWindow(){
super("Instructions", WINDOW_WIDTH, WINDOW_HEIGHT);
mCurPage = 0;
mPageCounter = new QuickText(12, TextFormatAlign.RIGHT, 0xFFFFFF);
mPageCounter.x = 10;
mPageCounter.y = 10;
mPageCounter.width = (WINDOW_WIDTH - 20);
mPageCounter.height = 20;
addChild(mPageCounter);
mPage = new Sprite();
addChild(mPage);
mPage.graphics.lineStyle(1, 63, 0.95);
mPage.graphics.moveTo(1, TEXTAREA_HEIGHT);
mPage.graphics.lineTo((WINDOW_WIDTH - 1), TEXTAREA_HEIGHT);
mPage.x = 0;
mPage.y = 40;
createPage();
mButton1 = new Button("Resume Game");
mButton1.y = ((mPage.y + TEXTAREA_HEIGHT) + 15);
mButton1.x = ((WINDOW_WIDTH - mButton1.width) / 2);
mButton1.addEventListener(MouseEvent.CLICK, onResume);
addChild(mButton1);
mButtonNext = new Button("Next Page >>>");
mButtonNext.y = (mPage.y + TEXTAREA_HEIGHT);
mButtonNext.x = ((WINDOW_WIDTH - mButton1.width) - 10);
mButtonNext.addEventListener(MouseEvent.CLICK, onNext);
addChild(mButtonNext);
mButtonPrev = new Button("<<< Prev Page");
mButtonPrev.y = (mPage.y + TEXTAREA_HEIGHT);
mButtonPrev.x = 10;
mButtonPrev.addEventListener(MouseEvent.CLICK, onPrev);
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function onKey(_arg1:KeyboardEvent):void{
if (_arg1.keyCode == Keyboard.ESCAPE){
onResume(null);
};
if ((((((_arg1.keyCode == Keyboard.RIGHT)) || ((_arg1.keyCode == Keyboard.DOWN)))) || ((_arg1.keyCode == Keyboard.PAGE_DOWN)))){
onNext(null);
};
if ((((((_arg1.keyCode == Keyboard.LEFT)) || ((_arg1.keyCode == Keyboard.UP)))) || ((_arg1.keyCode == Keyboard.PAGE_UP)))){
onPrev(null);
};
}
public function createField(_arg1:int, _arg2:Array):Sprite{
var _local3:Sprite;
var _local4:Bitmap;
var _local6:int;
_local3 = new Sprite();
_local4 = new Bitmap(DataCollection.mBigBoardSection);
_local4.x = 0;
_local4.y = 0;
_local3.addChild(_local4);
var _local5:int;
while (_local5 < 4) {
_local6 = 0;
while (_local6 < 6) {
if (_local5 == 0){
_local4 = new Bitmap(DataCollection.mBoardSectionH);
} else {
_local4 = new Bitmap(DataCollection.mBoardSection);
};
_local4.x = ((_local6 + 4) * Settings.BOARD_SECTION_WIDTH);
_local4.y = (_local5 * Settings.BOARD_SECTION_HEIGHT);
_local3.addChild(_local4);
_local6++;
};
_local5++;
};
_local4 = new Bitmap(DataCollection.mBigBalls[_arg1]);
_local4.x = Settings.BIG_BALL_OFFSET_DX;
_local4.y = Settings.BIG_BALL_OFFSET_DY;
_local3.addChild(_local4);
_local6 = 0;
while (_local6 < _arg2.length) {
_local4 = new Bitmap(DataCollection.mSmallBalls[_arg2[_local6]]);
_local4.x = ((((4 + 5) - _local6) * Settings.BOARD_SECTION_WIDTH) + Settings.BALL_OFFSET_DX);
_local4.y = Settings.BALL_OFFSET_DY;
_local3.addChild(_local4);
_local6++;
};
return (_local3);
}
public function createPage1():void{
var _local1:Sprite;
_local1 = createField(0, [0, 0]);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 70;
mPage.addChild(_local1);
mPage.addChild(createArrow((WINDOW_WIDTH / 2), 201));
var _local2:QuickText = new QuickText(16, TextFormatAlign.LEFT, 0xFFFF00);
_local2.setText("+25 points");
_local2.x = ((WINDOW_WIDTH / 2) + 10);
_local2.y = 198;
mPage.addChild(_local2);
_local1 = createField(0, []);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 222;
mPage.addChild(_local1);
}
public function createPage2():void{
var _local1:Sprite = createField(0, [2]);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 70;
mPage.addChild(_local1);
mPage.addChild(createArrow((WINDOW_WIDTH / 2), 201));
_local1 = createField(2, [0]);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 222;
mPage.addChild(_local1);
}
public function createPage3():void{
var _local1:Sprite = createField(0, [3, 2, 0, 0, 0]);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 70;
var _local2:Sprite = new Sprite();
_local2.x = (4 * Settings.BOARD_SECTION_WIDTH);
_local2.y = Settings.BOARD_SECTION_HEIGHT;
_local1.addChild(_local2);
_local2.graphics.lineStyle(2, 0xEE6E00, 1);
var _local3:int;
while (_local3 < 4) {
_local2.graphics.moveTo((((0 + _local3) * Settings.BOARD_SECTION_WIDTH) + ((Settings.BOARD_SECTION_WIDTH * 3) / 4)), (0.5 * Settings.BOARD_SECTION_HEIGHT));
_local2.graphics.lineTo((((1 + _local3) * Settings.BOARD_SECTION_WIDTH) + (Settings.BOARD_SECTION_WIDTH / 2)), (0.5 * Settings.BOARD_SECTION_HEIGHT));
_local3++;
};
_local2.graphics.moveTo((Settings.BOARD_SECTION_WIDTH / 2), (Settings.BOARD_SECTION_HEIGHT / 2));
_local2.graphics.lineTo(4, (Settings.BOARD_SECTION_HEIGHT / 2));
_local2.graphics.lineTo(12, ((Settings.BOARD_SECTION_HEIGHT / 2) - 3));
_local2.graphics.moveTo(4, (Settings.BOARD_SECTION_HEIGHT / 2));
_local2.graphics.lineTo(12, ((Settings.BOARD_SECTION_HEIGHT / 2) + 3));
_local2.graphics.moveTo((4.5 * Settings.BOARD_SECTION_WIDTH), (Settings.BOARD_SECTION_HEIGHT / 2));
_local2.graphics.lineTo((4.5 * Settings.BOARD_SECTION_WIDTH), 2);
_local2.graphics.lineTo(((4.5 * Settings.BOARD_SECTION_WIDTH) + 3), 10);
_local2.graphics.moveTo((4.5 * Settings.BOARD_SECTION_WIDTH), 2);
_local2.graphics.lineTo(((4.5 * Settings.BOARD_SECTION_WIDTH) - 3), 10);
mPage.addChild(_local1);
mPage.addChild(createArrow((WINDOW_WIDTH / 2), 201));
var _local4:QuickText = new QuickText(16, TextFormatAlign.LEFT, 0xFFFF00);
_local4.setText("+50 points");
_local4.x = ((WINDOW_WIDTH / 2) + 10);
_local4.y = 198;
mPage.addChild(_local4);
_local1 = createField(2, [3, 0]);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 222;
mPage.addChild(_local1);
}
public function createPage4():void{
var _local2:int;
var _local4:int;
var _local1:Sprite = createField(0, [2, 2]);
_local2 = 2;
while (_local2 < 3) {
_local4 = 0;
while (_local4 < 3) {
bmp = new Bitmap(DataCollection.mSmallBalls[_local4]);
bmp.x = ((((4 + 5) - _local4) * Settings.BOARD_SECTION_WIDTH) + Settings.BALL_OFFSET_DX);
bmp.y = ((_local2 * Settings.BOARD_SECTION_HEIGHT) + Settings.BALL_OFFSET_DY);
_local1.addChild(bmp);
_local4++;
};
_local2++;
};
var _local3:Sprite = new Sprite();
_local3.x = (9 * Settings.BOARD_SECTION_WIDTH);
_local3.y = (2 * Settings.BOARD_SECTION_HEIGHT);
_local3.graphics.lineStyle(2, 0xBFFF00, 0.8);
_local3.graphics.drawRect(1, 1, (Settings.BOARD_SECTION_WIDTH - 2), (Settings.BOARD_SECTION_HEIGHT - 2));
_local1.addChild(_local3);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 70;
mPage.addChild(_local1);
mPage.addChild(createArrow((WINDOW_WIDTH / 2), 201));
_local1 = createField(2, [2, 0]);
_local1.x = ((WINDOW_WIDTH - _local1.width) / 2);
_local1.y = 222;
_local2 = 2;
while (_local2 < 3) {
_local4 = 0;
while (_local4 < 4) {
if ((((_local4 == 3)) && (!((_local2 == 2))))){
} else {
bmp = new Bitmap(DataCollection.mSmallBalls[_local4]);
bmp.x = ((((4 + 5) - _local4) * Settings.BOARD_SECTION_WIDTH) + Settings.BALL_OFFSET_DX);
if (_local2 == 2){
bmp.bitmapData = DataCollection.mSmallBalls[((_local4 + 3) % 4)];
};
bmp.y = ((_local2 * Settings.BOARD_SECTION_HEIGHT) + Settings.BALL_OFFSET_DY);
_local1.addChild(bmp);
};
_local4++;
};
_local2++;
};
mPage.addChild(_local1);
}
public function onResume(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
GameState.mState = GameState.STATE_GAME;
parent.removeChild(this);
mButton1.removeEventListener(MouseEvent.CLICK, onResume);
mButtonNext.removeEventListener(MouseEvent.CLICK, onNext);
mButtonPrev.removeEventListener(MouseEvent.CLICK, onPrev);
GameState.root.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function createArrow(_arg1:int, _arg2:int):Sprite{
var _local3:Sprite = new Sprite();
_local3.graphics.lineStyle(4, 0xFFFF00, 1);
_local3.graphics.moveTo(0, 0);
_local3.graphics.lineTo(0, 15);
_local3.graphics.lineStyle(2, 0xFFFF00, 1);
_local3.graphics.moveTo(0, 17);
_local3.graphics.lineTo(-5, 5);
_local3.graphics.moveTo(0, 17);
_local3.graphics.lineTo(5, 5);
_local3.x = _arg1;
_local3.y = _arg2;
return (_local3);
}
public function onNext(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
mCurPage++;
createPage();
if (mCurPage >= (PAGE_COUNT - 1)){
removeChild(mButtonNext);
};
if (mCurPage == 1){
addChild(mButtonPrev);
};
}
public function onPrev(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
mCurPage--;
createPage();
if (mCurPage <= 0){
removeChild(mButtonPrev);
};
if (mCurPage == (PAGE_COUNT - 2)){
addChild(mButtonNext);
};
}
public function createPage():void{
clearPage();
mPageCounter.setText(((("Page " + (mCurPage + 1)) + " / ") + PAGE_COUNT));
mText = new QuickText(18, TextFormatAlign.JUSTIFY, 0xFFFF00);
mPage.addChild(mText);
mText.wordWrap = true;
mText.setText(Strings.getText((Strings.InstructionsPage1 + mCurPage)));
mText.x = 4;
mText.y = 0;
mText.width = (WINDOW_WIDTH - 8);
mText.height = mPage.height;
switch (mCurPage){
case 0:
createPage1();
break;
case 1:
createPage2();
break;
case 2:
createPage3();
break;
case 3:
createPage4();
break;
};
}
public function clearPage():void{
while (mPage.numChildren > 0) {
mPage.removeChildAt((mPage.numChildren - 1));
};
}
}
}//package com.recolor
Section 33
//MainMenu (com.recolor.MainMenu)
package com.recolor {
import flash.events.*;
import flash.text.*;
import com.flashrelax.utils.*;
import flash.net.*;
public class MainMenu extends Window {
private var mButtonHiscore:Button;
private var mButtonStart:Button;
private var mButtonMoreGames:Button;
private static const WINDOW_HEIGHT:int = 205;
private static const WINDOW_WIDTH:int = 400;
public function MainMenu(){
var _local1:QuickText;
super(Strings.getText(Strings.MainMenu), WINDOW_WIDTH, WINDOW_HEIGHT);
y = 160;
mButtonStart = new Button(Strings.getText(Strings.StartGame), 40);
mButtonStart.y = 45;
mButtonStart.x = ((WINDOW_WIDTH - mButtonStart.width) / 2);
mButtonStart.addEventListener(MouseEvent.CLICK, onStartGame);
addChild(mButtonStart);
mButtonHiscore = new Button(Strings.getText(Strings.HighScores));
mButtonHiscore.y = 100;
mButtonHiscore.x = ((WINDOW_WIDTH - mButtonHiscore.width) / 2);
mButtonHiscore.addEventListener(MouseEvent.CLICK, onHiscore);
addChild(mButtonHiscore);
mButtonMoreGames = new Button(Strings.getText(Strings.MoreGames));
mButtonMoreGames.y = 130;
mButtonMoreGames.x = ((WINDOW_WIDTH - mButtonMoreGames.width) / 2);
mButtonMoreGames.addEventListener(MouseEvent.CLICK, onMoreGames);
addChild(mButtonMoreGames);
_local1 = new QuickText(12, TextFormatAlign.CENTER, 0xAFAF00);
_local1.setText(Strings.getText(Strings.MusicBy));
_local1.y = 170;
_local1.width = WINDOW_WIDTH;
_local1.height = 20;
addChild(_local1);
_local1 = new QuickText(12, TextFormatAlign.CENTER, 0xAFAF00);
_local1.setText(Strings.getText(Strings.FlashRelaxCopyright));
_local1.y = 185;
_local1.width = WINDOW_WIDTH;
_local1.height = 20;
addChild(_local1);
}
public function onStartGame(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
removeListeners();
parent.addChild(new GameModeMenu());
parent.removeChild(this);
}
public function removeListeners():void{
mButtonStart.removeEventListener(MouseEvent.CLICK, onStartGame);
mButtonHiscore.removeEventListener(MouseEvent.CLICK, onHiscore);
mButtonMoreGames.removeEventListener(MouseEvent.CLICK, onMoreGames);
}
public function onHiscore(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
removeListeners();
parent.addChild(new HighscoreTypeMenu());
parent.removeChild(this);
}
public function onMoreGames(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
navigateToURL(new URLRequest("http://www.flashrelax.com"));
NewgroundsAPI.logCustomEvent("SiteMoreGames");
}
}
}//package com.recolor
Section 34
//PauseMenu (com.recolor.PauseMenu)
package com.recolor {
import flash.events.*;
import flash.ui.*;
public class PauseMenu extends Window {
private var mButton:Array;
private static const BUTTON_COUNT:int = 3;
private static const WINDOW_HEIGHT:int = 150;
private static const WINDOW_WIDTH:int = 400;
private static const BUTTON_TEXT:Array = ["Resume", "Restart Game", "Quit to main menu"];
public function PauseMenu(){
super("Pause", WINDOW_WIDTH, WINDOW_HEIGHT);
y = 160;
}
public function onKey(_arg1:KeyboardEvent):void{
if (_arg1.charCode == Keyboard.ESCAPE){
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
GameState.mState = GameState.STATE_GAME;
removeListeners();
parent.removeChild(this);
};
}
override public function draw():void{
super.draw();
mButton = new Array(BUTTON_COUNT);
var _local1:int;
while (_local1 < BUTTON_COUNT) {
mButton[_local1] = new Button(BUTTON_TEXT[_local1]);
mButton[_local1].y = (45 + (_local1 * 28));
mButton[_local1].x = ((WINDOW_WIDTH - mButton[_local1].width) / 2);
mButton[_local1].addEventListener(MouseEvent.CLICK, onClick);
addChild(mButton[_local1]);
_local1++;
};
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function onClick(_arg1:MouseEvent):void{
if (UserSettings.mSound){
DataCollection.mSfxMenu.play();
};
var _local2:int;
var _local3:int;
while (_local3 < mButton.length) {
if (_arg1.target == mButton[_local3]){
_local2 = _local3;
};
_local3++;
};
removeListeners();
switch (_local2){
case 0:
GameState.mState = GameState.STATE_GAME;
break;
case 1:
(parent as Field).startGame();
break;
case 2:
GameState.mState = GameState.STATE_MAIN_MENU;
parent.addChild(new MainMenu());
break;
};
parent.removeChild(this);
}
public function removeListeners():void{
var _local1:int;
while (_local1 < mButton.length) {
mButton[_local1].removeEventListener(MouseEvent.CLICK, onClick);
_local1++;
};
GameState.root.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
}
}//package com.recolor
Section 35
//PreviewBall (com.recolor.PreviewBall)
package com.recolor {
import flash.display.*;
public class PreviewBall extends Sprite {
private var mId:int;
private var mColor:int;
private var mTime:int;
public function PreviewBall(_arg1:int){
mTime = Settings.DELAY_PREVIEW;
mColor = Math.floor((Math.random() * _arg1));
setCoordsFromId(Math.floor((Math.random() * 16)));
draw();
}
public function get color():int{
return (mColor);
}
public function draw():void{
graphics.lineStyle(2, 0xBFFF00, 0.8);
graphics.drawRect(1, 1, (Settings.BOARD_SECTION_WIDTH - 2), (Settings.BOARD_SECTION_HEIGHT - 2));
}
public function setCoordsFromId(_arg1:int):void{
mId = _arg1;
x = 0;
y = 0;
if (_arg1 < 8){
x = (6 + (_arg1 % 4));
if (_arg1 < 4){
y = 0;
} else {
y = (((5 + 4) + 5) - 1);
};
} else {
y = (5 + (_arg1 % 4));
if (_arg1 < 12){
x = 0;
} else {
x = (((6 + 4) + 6) - 1);
};
};
x = (x * Settings.BOARD_SECTION_WIDTH);
y = (y * Settings.BOARD_SECTION_HEIGHT);
}
public function get time():int{
return (mColor);
}
public function advanceTime():Boolean{
if ((((mTime == 0)) || ((GameState.mMode == GameState.MODE_TURN)))){
return (true);
};
mTime--;
return (false);
}
public function get id():int{
return (mId);
}
}
}//package com.recolor
Section 36
//QualityControl (com.recolor.QualityControl)
package com.recolor {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import com.flashrelax.utils.*;
public class QualityControl extends Sprite {
private var mHighlight:Sprite;
private var mTextMed:QuickText;
private var mCurQuality:int;
private var mTextLow:QuickText;
private var mTextHi:QuickText;
private var mColor:uint;
public function QualityControl(_arg1:uint){
mColor = _arg1;
mTextLow = new QuickText(12, TextFormatAlign.LEFT, mColor);
mTextLow.setText("Low");
mTextLow.x = 0;
mTextLow.y = 0;
addChild(mTextLow);
mTextMed = new QuickText(12, TextFormatAlign.LEFT, mColor);
mTextMed.setText("Med");
mTextMed.x = 30;
mTextMed.y = 0;
addChild(mTextMed);
mTextHi = new QuickText(12, TextFormatAlign.LEFT, mColor);
mTextHi.setText("High");
mTextHi.x = 60;
mTextHi.y = 0;
addChild(mTextHi);
mHighlight = new Sprite();
mHighlight.graphics.lineStyle(1, mColor);
mHighlight.graphics.drawRect(0, 0, 30, 17);
addChild(mHighlight);
getCurrentQuality();
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function onKey(_arg1:KeyboardEvent):void{
if (String.fromCharCode(_arg1.charCode).toLowerCase() == "q"){
mCurQuality = ((mCurQuality + 1) % 3);
setQuality();
};
}
public function updateHighlight():void{
mHighlight.x = (mCurQuality * 30);
}
public function setQuality():void{
UserSettings.mQuality = mCurQuality;
UserSettings.save();
setUserQuality();
updateHighlight();
}
public function getCurrentQuality():void{
mCurQuality = 2;
switch (GameState.root.stage.quality.toLowerCase()){
case StageQuality.LOW:
mCurQuality = 0;
break;
case StageQuality.MEDIUM:
mCurQuality = 1;
break;
case StageQuality.HIGH:
mCurQuality = 2;
break;
};
updateHighlight();
}
public static function setUserQuality():void{
switch (UserSettings.mQuality){
case 0:
GameState.root.stage.quality = StageQuality.LOW;
break;
case 1:
GameState.root.stage.quality = StageQuality.MEDIUM;
break;
case 2:
GameState.root.stage.quality = StageQuality.HIGH;
break;
};
}
}
}//package com.recolor
Section 37
//Settings (com.recolor.Settings)
package com.recolor {
public class Settings {
public static const BALL_OFFSET_DX:int = 1;
public static const BALL_OFFSET_DY:int = 1;
public static const BALL_MOVE_AWAY_SPEED:int = 40;
public static const BIG_BALL_HEIGHT:int = 120;
public static const BALL_COLOR_COUNT:int = 10;
public static const BALL_MOVE_SPEED:int = 5;
public static const DELAY_MINIMUM:int = 5;
public static const DELAY_CHANGE:int = 750;
public static const BIG_BOARD_SECTION_WIDTH:int = 128;
public static const SCORE_LIMIT:int = 10000;
public static const BIG_BALL_OFFSET_DY:int = 4;
public static const BALL_INIT_CNT:int = 5;
public static const DELAY_PREVIEW:int = 25;
public static const DELAY_INITIAL:int = 25;
public static const BIG_BALL_WIDTH:int = 120;
public static const BALL_HEIGHT:int = 30;
public static const BALL_WIDTH:int = 30;
public static const SCORE_REMOVE:Array = [10, 25, 50, 100, 250, 500];
public static const BOARD_SECTION_WIDTH:int = 32;
public static const BIG_BOARD_SECTION_HEIGHT:int = 128;
public static const BOARD_SECTION_HEIGHT:int = 32;
public static const GAME_FONT:String = "_RecolorFont";
public static const BIG_BALL_OFFSET_DX:int = 4;
}
}//package com.recolor
Section 38
//SoundControl (com.recolor.SoundControl)
package com.recolor {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import com.flashrelax.utils.*;
import flash.media.*;
public class SoundControl extends Sprite {
private var mHighlight:Sprite;
private var mTextOff:QuickText;
private var mColor:int;
private var mTextOn:QuickText;
private var mType:int;
public function SoundControl(_arg1:uint, _arg2:int=0){
mType = _arg2;
mColor = _arg1;
mTextOff = new QuickText(12, TextFormatAlign.LEFT, mColor);
mTextOff.setText("Off");
mTextOff.x = 0;
mTextOff.y = 0;
addChild(mTextOff);
mTextOn = new QuickText(12, TextFormatAlign.LEFT, mColor);
mTextOn.setText("On");
mTextOn.x = 30;
mTextOn.y = 0;
addChild(mTextOn);
mHighlight = new Sprite();
mHighlight.graphics.lineStyle(1, mColor);
mHighlight.graphics.drawRect(0, 0, 30, 17);
addChild(mHighlight);
updateHighlight();
GameState.root.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
}
public function onKey(_arg1:KeyboardEvent):void{
var _local2:String = String.fromCharCode(_arg1.charCode).toLowerCase();
if ((((_local2 == "s")) && ((mType == 0)))){
UserSettings.mSound = !(UserSettings.mSound);
UserSettings.save();
updateHighlight();
};
if ((((_local2 == "m")) && ((mType == 1)))){
UserSettings.mMusic = !(UserSettings.mMusic);
UserSettings.save();
if (UserSettings.mMusic){
GameState.mMusicChannel = DataCollection.mMusic.play(0, 10000);
GameState.mMusicChannel.soundTransform = new SoundTransform(0.4);
} else {
GameState.mMusicChannel.stop();
};
updateHighlight();
};
}
public function updateHighlight():void{
if (((((UserSettings.mSound) && ((mType == 0)))) || (((UserSettings.mMusic) && ((mType == 1)))))){
mHighlight.x = 30;
} else {
mHighlight.x = 0;
};
}
}
}//package com.recolor
Section 39
//StarField (com.recolor.StarField)
package com.recolor {
import flash.display.*;
import flash.events.*;
public class StarField extends Sprite {
private var mDx:Array;
private var mDy:Array;
private var mHeight:int;
private var mWidth:int;
private var mCnt:int;
private var mStar:Array;
private static const MAX_STAR:int = 1000;
public function StarField(_arg1:int, _arg2:int){
mWidth = _arg1;
mHeight = _arg2;
addChild(new Bitmap(new BitmapData(_arg1, _arg2, false, 0)));
init();
addEventListener(Event.ENTER_FRAME, onFrame);
}
public function onFrame(_arg1:Event):void{
var _local2:int;
if (stage.quality.toLowerCase() != StageQuality.HIGH){
if (mCnt > 0){
_local2 = 0;
while (_local2 < mCnt) {
removeChild(mStar[_local2]);
mStar[_local2] = null;
_local2++;
};
mCnt = 0;
};
return;
};
if ((((Math.random() < 0.5)) && ((mCnt < MAX_STAR)))){
mStar[mCnt] = new Bitmap(new BitmapData(2, 2, false, 0xAFAFAF));
mStar[mCnt].x = (((Math.random() * 10) + (width / 2)) - 5);
mStar[mCnt].y = (((Math.random() * 10) + (height / 2)) - 5);
addChild(mStar[mCnt]);
while (true) {
mDx[mCnt] = ((Math.random() * 8) - 4);
mDy[mCnt] = ((Math.random() * 8) - 4);
if (((mDx[mCnt] * mDx[mCnt]) + (mDy[mCnt] * mDy[mCnt])) > 4){
break;
};
};
mCnt++;
};
_local2 = 0;
while (_local2 < mCnt) {
mStar[_local2].x = (mStar[_local2].x + mDx[_local2]);
mStar[_local2].y = (mStar[_local2].y + mDy[_local2]);
if ((((((((mStar[_local2].x < 0)) || ((mStar[_local2].x > mWidth)))) || ((mStar[_local2].y < 0)))) || ((mStar[_local2].y > mHeight)))){
removeChild(mStar[_local2]);
mCnt--;
mStar[_local2] = mStar[mCnt];
mDx[_local2] = mDx[mCnt];
mDy[_local2] = mDy[mCnt];
mStar[mCnt] = null;
_local2--;
};
_local2++;
};
}
public function init():void{
mCnt = 0;
mDx = new Array(1000);
mDy = new Array(1000);
mStar = new Array(1000);
}
}
}//package com.recolor
Section 40
//Strings (com.recolor.Strings)
package com.recolor {
public class Strings {
public static const InstructionsPage4:int = 19;
public static const InstructionsPage5:int = 20;
public static const HighScores:int = 2;
public static const Instructions:int = 7;
public static const FlashRelaxCopyright:int = 5;
public static const MoreGames:int = 3;
public static const InstructionsPage2:int = 17;
public static const StartGame:int = 1;
public static const PauseMenu:int = 6;
public static const GameMode:int = 12;
public static const Music:int = 10;
public static const Quality:int = 8;
public static const MainMenu:int = 0;
public static const VisitUs:int = 11;
public static const Time:int = 14;
public static const Sound:int = 9;
public static const Score:int = 13;
private static const Texts:Array = [["Main Menu"], ["Start Game"], ["High Scores"], ["More Games"], ["Music by Eugene Dovgyj"], ["(c) 2008 Flash Relax"], ["Pause menu"], ["Instructions"], ["Quality:"], ["Sound:"], ["Music:"], ["Visit us at"], ["Game Mode"], ["Score:"], ["Time:"], ["Turns:"], [(("\tClick on any row or column with the top ball(s) of " + "the same color as the central big ball to remove them ") + "and earn points.")], [(("\tIf the top ball of the row (column) is of a different " + "color from the big ball, then clicking on this row (column) ") + "will swap colors of this ball and the big ball.")], [(("\tIf there are mixed colors, then all the top balls of the " + "same color as the big ball will be removed and the next ball ") + "will swap colors with the big one.")], [(("\tEach turn (or each second in arcade mode) a new ball appears. " + "The position where a new ball will appear is indicated by the ") + "highlighted square.")], [((((((((((("\n" + "\n") + "\n") + "\tYou win if you score 10.000 points or more. You lose if ") + "any row or column overflows.\n") + "\n") + "\tThere are two high score tables for each mode:\n") + "* regular table for usual players competing on ") + "reaching the highest score;\n") + "* elite table for those players who have reached ") + "10.000 points, they compete for the least number of ") + "turns it took to reach this score (or the best time in arcade mode).")]];
public static const Turns:int = 15;
public static const MusicBy:int = 4;
public static const InstructionsPage1:int = 16;
public static const InstructionsPage3:int = 18;
public static function getText(_arg1:int):String{
return (Texts[_arg1][0]);
}
}
}//package com.recolor
Section 41
//UserSettings (com.recolor.UserSettings)
package com.recolor {
import flash.net.*;
public class UserSettings {
private static const DATA_NAME:String = "RecolorSettings";
private static const VERSION:int = 10;
public static var mSound:Boolean;
public static var mTutorialShown:Boolean;
public static var mQuality:int;
public static var mMusic:Boolean;
public static function load():void{
var _local1:SharedObject = SharedObject.getLocal(DATA_NAME);
if (_local1.data.version != VERSION){
_local1.clear();
setDefault();
save();
} else {
mSound = _local1.data.sound;
mMusic = _local1.data.music;
mTutorialShown = _local1.data.tutorial;
mQuality = _local1.data.quality;
};
}
public static function setDefault():void{
mQuality = 2;
mSound = true;
mMusic = true;
mTutorialShown = false;
}
public static function save():void{
var _local1:SharedObject = SharedObject.getLocal(DATA_NAME);
_local1.data.version = VERSION;
_local1.data.sound = mSound;
_local1.data.music = mMusic;
_local1.data.tutorial = mTutorialShown;
_local1.data.quality = mQuality;
_local1.flush();
}
load();
}
}//package com.recolor
Section 42
//Window (com.recolor.Window)
package com.recolor {
import flash.display.*;
import flash.text.*;
public class Window extends Sprite {
protected var mHeight:int;
protected var mWidth:int;
protected var mHeader:String;
private static const HEADER_TEXT_COLOR:uint = 4294967295;
private static const BG_ALPHA:Number = 0.95;
private static const FG_COLOR:uint = 4278202266;
private static const HEADER_DY:int = 40;
private static const BG_COLOR:uint = 0;
private static const HEADER_COLOR:uint = 4278202362;
public function Window(_arg1:String, _arg2:int, _arg3:int){
mHeader = _arg1;
mWidth = _arg2;
mHeight = _arg3;
draw();
}
public function draw():void{
var _local1:TextField;
x = ((0x0200 - mWidth) / 2);
y = ((448 - mHeight) / 2);
graphics.lineStyle(1, BG_COLOR, BG_ALPHA);
graphics.beginFill(FG_COLOR, BG_ALPHA);
graphics.drawRoundRect(0, 0, mWidth, mHeight, 15, 15);
graphics.lineStyle(1, BG_COLOR, BG_ALPHA);
graphics.beginFill(HEADER_COLOR, BG_ALPHA);
graphics.drawRoundRect(0, 0, mWidth, HEADER_DY, 15, 15);
_local1 = new TextField();
_local1.type = TextFieldType.DYNAMIC;
_local1.selectable = false;
_local1.textColor = HEADER_TEXT_COLOR;
_local1.width = mWidth;
var _local2:TextFormat = _local1.getTextFormat();
_local2.font = Settings.GAME_FONT;
_local2.size = 30;
_local2.align = TextFormatAlign.CENTER;
_local1.defaultTextFormat = _local2;
_local1.embedFonts = true;
_local1.appendText(mHeader);
_local1.y = 0;
_local1.x = 0;
addChild(_local1);
}
}
}//package com.recolor
Section 43
//MochiAd (mochi.MochiAd)
package mochi {
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.3");
}
public static function showTimedAd(_arg1:Object):void{
trace("[MochiAd] DEPRECATED: showTimedAd was renamed to showInterLevelAd in 2.0");
_slot1.showInterLevelAd(_arg1);
}
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 load(_arg1:Object):MovieClip{
var clip:Object;
var mc:MovieClip;
var k:String;
var server:String;
var hostname:String;
var lc:LocalConnection;
var name:String;
var loader:Loader;
var f:Function;
var g:Function;
var req:URLRequest;
var v:Object;
var options = _arg1;
var DEFAULTS:Object = {server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"};
options = _slot1._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = _slot1.getVersion();
clip = options.clip;
if (!_slot1._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;
mc = createEmptyMovieClip(clip, "_mochiad", depth);
var wh:Array = _slot1._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;
lv.lc = name;
lv.st = getTimer();
loader = new Loader();
f = function (_arg1:Object):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
mc._mochiad_ctr_failed = true;
};
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
g = function (_arg1:Object):void{
_arg1.target.removeEventListener(_arg1.type, arguments.callee);
_slot1.unload(clip);
};
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, g);
req = new URLRequest((server + ".swf"));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader.load(req);
mc.addChild(loader);
mc._mochiad_ctr = loader;
return (mc);
}
public static function sendHighScore(_arg1:Object, _arg2:Object, _arg3:Object=null):Boolean{
var _local4:MovieClip = _slot1._loadCommunicator({clip:_arg1.clip, id:_arg1.id});
if (!_local4){
return (false);
};
_local4.doSend(["sendHighScore", _arg1], _arg2, _arg3);
return (true);
}
public static function _parseOptions(_arg1:Object, _arg2:Object):Object{
var _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 _isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
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 unload(_arg1:Object):Boolean{
if (((_arg1.clip) && (_arg1.clip._mochiad))){
_arg1 = _arg1.clip;
};
if (!_arg1._mochiad){
return (false);
};
if (_arg1._mochiad.onUnload){
_arg1._mochiad.onUnload();
};
delete _arg1._mochiad_loaded;
delete _arg1._mochiad;
return (true);
}
public static function showInterLevelAd(_arg1:Object):void{
var 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");
}};
options = _slot1._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 (!_slot1.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
_slot1._cleanup(mc);
options.ad_finished();
};
var wh:Array = _slot1._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 {
_slot1.unload(clip);
delete this["onEnterFrame"];
};
};
mc.unloadAd = function ():void{
_slot1.unload(clip);
};
mc.adLoaded = options.ad_loaded;
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);
};
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 = _local1.loaderInfo.bytesTotal;
if ((((_local4 > 0)) || (("number" == "undefined")))){
chk.showing = true;
chk.started = getTimer();
} else {
if (_local2 > chk.ad_timeout){
options.ad_failed();
_local3 = true;
};
};
};
if (this.parent._mochiad_ctr_failed){
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 _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 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 _loadCommunicator(_arg1:Object):MovieClip{
var mc:MovieClip;
var k:String;
var lc:LocalConnection;
var name:String;
var req:URLRequest;
var loader:Loader;
var options = _arg1;
var DEFAULTS:Object = {com_server:"http://x.mochiads.com/com/1/", method:"loadCommunicator", depth:10337, id:"_UNKNOWN_"};
options = _slot1._parseOptions(options, DEFAULTS);
options.swfv = 9;
options.mav = _slot1.getVersion();
var clip:Object = options.clip;
var clipname:String = ("_mochiad_com_" + options.id);
if (!_slot1._isNetworkAvailable()){
return (null);
};
if (clip[clipname]){
return (clip[clipname]);
};
var server:String = (options.com_server + options.id);
_slot1._allowDomains(server);
delete options.id;
delete options.com_server;
var depth:Number = options.depth;
delete options.depth;
mc = createEmptyMovieClip(clip, clipname, depth);
var lv:URLVariables = new URLVariables();
for (k in options) {
lv[k] = options[k];
};
lc = new LocalConnection();
lc.client = mc;
name = ["", Math.floor(new Date().getTime()), Math.floor((Math.random() * 999999))].join("_");
lc.allowDomain("*", "localhost");
lc.allowInsecureDomain("*", "localhost");
lc.connect(name);
mc.name = name;
mc.lc = lc;
lv.lc = name;
mc._id = 0;
mc._queue = [];
mc.rpcResult = function (_arg1:Object):void{
_arg1 = parseInt(_arg1.toString());
var _local3:Array = mc._callbacks[_arg1];
if (typeof(_local3) == "undefined"){
return;
};
delete mc._callbacks[_arg1];
var _local4:Array = [];
var _local5:Number = 2;
while (_local5 < _local3.length) {
_local4.push(_local3[_local5]);
_local5++;
};
_local5 = 1;
while (_local5 < arguments.length) {
_local4.push(arguments[_local5]);
_local5++;
};
var _local6:Object = _local3[1];
var _local7:Object = _local3[0];
if (((_local7) && ((typeof(_local6) == "string")))){
_local6 = _local7[_local6];
};
if (typeof(_local6) == "function"){
_local6.apply(_local7, _local4);
};
};
mc._didConnect = function (_arg1:String):void{
var _local5:Array;
mc._endpoint = _arg1;
var _local2:Array = mc._queue;
delete mc._queue;
var _local3:Function = mc.doSend;
var _local4:Number = 0;
while (_local4 < _local2.length) {
_local5 = _local2[_local4];
_local3.apply(this, _local5);
_local4++;
};
};
mc.doSend = function (_arg1:Array, _arg2:Object, _arg3:Object):void{
var _local7:Array;
var _local8:Number;
if (mc._endpoint == null){
_local7 = [];
_local8 = 0;
while (_local8 < arguments.length) {
_local7.push(arguments[_local8]);
_local8++;
};
mc._queue.push(_local7);
return;
};
mc._id = (mc._id + 1);
var _local5:Number = mc._id;
mc._callbacks[_local5] = [_arg2, ((_arg3) || (_arg2))];
var _local6:LocalConnection = new LocalConnection();
_local6.send(mc._endpoint, "rpc", _local5, _arg1);
};
mc._callbacks = {};
mc._callbacks[0] = [mc, "_didConnect"];
lv.st = getTimer();
req = new URLRequest((server + ".swf"));
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
loader = new Loader();
loader.load(req);
mc.addChild(loader);
mc._mochiad_com = loader;
return (mc);
}
public static function showPreGameAd(_arg1:Object):void{
var clip:Object;
var mc:MovieClip;
var chk:MovieClip;
var complete:Boolean;
var unloaded:Boolean;
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, 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");
}};
options = _slot1._parseOptions(options, DEFAULTS);
if ("5cc6f7dfb67f2f08341c831480f7c2a7".length == 0){
options.ad_started();
options.ad_finished();
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 (!_slot1.load(options)){
options.ad_failed();
options.ad_finished();
return;
};
options.ad_started();
mc = clip._mochiad;
mc["onUnload"] = function ():void{
_slot1._cleanup(mc);
var fn:Function = function ():void{
options.ad_finished();
};
setTimeout(fn, 100);
};
var wh:Array = _slot1._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);
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 {
_slot1.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){
_slot1.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){
_slot1.unload(clip);
};
};
mc.adLoaded = options.ad_loaded;
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;
};
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);
if (!chk.showing){
_local11 = _local2.loaderInfo.bytesTotal;
if ((((_local11 > 0)) || (("number" == "undefined")))){
chk.showing = true;
chk.started = getTimer();
} else {
if (_local3 > chk.ad_timeout){
options.ad_failed();
_local4 = true;
};
};
};
if (this.parent._mochiad_ctr_failed){
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");
_slot1.showPreGameAd(_arg1);
}
public static function fetchHighScores(_arg1:Object, _arg2:Object, _arg3:Object=null):Boolean{
var _local4:MovieClip = _slot1._loadCommunicator({clip:_arg1.clip, id:_arg1.id});
if (!_local4){
return (false);
};
_local4.doSend(["fetchHighScores", _arg1], _arg2, _arg3);
return (true);
}
public static function doOnEnterFrame(_arg1:MovieClip):void{
var 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 mochi
Section 44
//MochiBot (mochi.MochiBot)
package mochi {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.*;
public dynamic class MochiBot extends Sprite {
public static function track(_arg1:Sprite, _arg2:String):MochiBot{
var parent = _arg1;
var tag = _arg2;
var self:MochiBot = new (MochiBot);
parent.addChild(self);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
var server = "http://core.mochibot.com/my/core.swf";
var lv:URLVariables = new URLVariables();
lv["sb"] = Security.sandboxType;
lv["v"] = Capabilities.version;
lv["swfid"] = tag;
lv["mv"] = "8";
lv["fv"] = "9";
var url:String = self.root.loaderInfo.loaderURL;
if (url.indexOf("http") == 0){
lv["url"] = url;
} else {
lv["url"] = "local";
};
var req:URLRequest = new URLRequest(server);
req.contentType = "application/x-www-form-urlencoded";
req.method = URLRequestMethod.POST;
req.data = lv;
var loader:Loader = new Loader();
var f:Function = function (_arg1:Object):void{
};
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f, false, 0, true);
self.addChild(loader);
loader.load(req);
return (self);
}
}
}//package mochi
Section 45
//MochiScores (mochi.MochiScores)
package mochi {
import flash.display.*;
import flash.text.*;
public class MochiScores {
private static var boardID:String;
public static var onErrorHandler:Object;
public static var onCloseHandler:Object;
public static function showLeaderboard(_arg1:Object=null):void{
var options = _arg1;
if (options != null){
if (options.clip != null){
if ((options.clip is Sprite)){
MochiServices.setContainer(options.clip);
};
delete options.clip;
} else {
MochiServices.setContainer();
};
MochiServices.stayOnTop();
if (options.name != null){
if ((options.name is TextField)){
if (options.name.text.length > 0){
options.name = options.name.text;
};
};
};
if (options.score != null){
if ((options.score is TextField)){
if (options.score.text.length > 0){
options.score = options.score.text;
};
};
};
if (options.onDisplay != null){
options.onDisplay();
} else {
if (MochiServices.clip != null){
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
};
} else {
options = {};
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.stop();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onDisplay.");
};
};
if (options.onClose != null){
onCloseHandler = options.onClose;
} else {
onCloseHandler = function ():void{
if ((MochiServices.clip is MovieClip)){
MochiServices.clip.play();
} else {
trace("Warning: Container is not a MovieClip, cannot call default onClose.");
};
};
};
if (options.onError != null){
onErrorHandler = options.onError;
} else {
onErrorHandler = null;
};
if (options.boardID == null){
if (_slot1.boardID != null){
options.boardID = _slot1.boardID;
};
};
MochiServices.send("scores_showLeaderboard", {options:options}, null, onClose);
}
public static function closeLeaderboard():void{
MochiServices.send("scores_closeLeaderboard");
}
public static function getPlayerInfo(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_getPlayerInfo", null, _arg1, _arg2);
}
public static function requestList(_arg1:Object, _arg2:Object=null):void{
MochiServices.send("scores_requestList", null, _arg1, _arg2);
}
public static function scoresArrayToObjects(_arg1:Object):Object{
var _local3:Number;
var _local4:Number;
var _local5:Object;
var _local6:Object;
var _local7:String;
var _local8:String;
var _local2:Object = {};
for (_local7 in _arg1) {
if (typeof(_arg1[_local7]) == "object"){
if (((!((_arg1[_local7].cols == null))) && (!((_arg1[_local7].rows == null))))){
_local2[_local7] = [];
_local5 = _arg1[_local7];
_local4 = 0;
while (_local4 < _local5.rows.length) {
_local6 = {};
_local3 = 0;
while (_local3 < _local5.cols.length) {
_local6[_local5.cols[_local3]] = _local5.rows[_local4][_local3];
_local3++;
};
_local2[_local7].push(_local6);
_local4++;
};
} else {
_local2[_local7] = {};
for (_local8 in _arg1[_local7]) {
_local2[_local7][_local8] = _arg1[_local7][_local8];
};
};
} else {
_local2[_local7] = _arg1[_local7];
};
};
return (_local2);
}
public static function submit(_arg1:Number, _arg2:String, _arg3:Object=null, _arg4:Object=null):void{
MochiServices.send("scores_submit", {score:_arg1, name:_arg2}, _arg3, _arg4);
}
public static function onClose(_arg1:Object=null):void{
if (_arg1 != null){
if (_arg1.error != null){
if (_arg1.error == true){
if (onErrorHandler != null){
if (_arg1.errorCode == null){
_arg1.errorCode = "IOError";
};
onErrorHandler(_arg1.errorCode);
MochiServices.doClose();
return;
};
};
};
};
onCloseHandler();
MochiServices.doClose();
}
public static function setBoardID(_arg1:String):void{
_slot1.boardID = _arg1;
MochiServices.send("scores_setBoardID", {boardID:_arg1});
}
}
}//package mochi
Section 46
//MochiServices (mochi.MochiServices)
package mochi {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.net.*;
import flash.system.*;
public class MochiServices {
private static var _container:Object;
private static var _connected:Boolean = false;
private static var _swfVersion:String;
private static var _sendChannel:LocalConnection;
private static var _rcvChannelName:String;
private static var _gatewayURL:String = "http://www.mochiads.com/static/lib/services/services.swf";
private static var _clip:MovieClip;
private static var _loader:Loader;
private static var _id:String;
private static var _listenChannel:LocalConnection;
private static var _timer:Timer;
private static var _sendChannelName:String;
private static var _startTime:Number;
private static var _connecting:Boolean = false;
public static var onError:Object;
private static var _listenChannelName:String = "__mochiservices";
private static var _rcvChannel:LocalConnection;
public static function isNetworkAvailable():Boolean{
return (!((Security.sandboxType == "localWithFile")));
}
public static function send(_arg1:String, _arg2:Object=null, _arg3:Object=null, _arg4:Object=null):void{
if (_connected){
_sendChannel.send(_sendChannelName, "onReceive", {methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID});
} else {
if ((((_clip == null)) || (!(_connecting)))){
onError("NotConnected");
handleError(_arg2, _arg3, _arg4);
flush(true);
return;
};
_clip._queue.push({methodName:_arg1, args:_arg2, callbackID:_clip._nextcallbackID});
};
if (_clip != null){
if (((!((_clip._callbacks == null))) && (!((_clip._nextcallbackID == null))))){
_clip._callbacks[_clip._nextcallbackID] = {callbackObject:_arg3, callbackMethod:_arg4};
_clip._nextcallbackID++;
};
};
}
public static function get connected():Boolean{
return (_connected);
}
private static function flush(_arg1:Boolean):void{
var _local2:Object;
var _local3:Object;
if (_clip != null){
if (_clip._queue != null){
while (_clip._queue.length > 0) {
_local2 = _clip._queue.shift();
_local3 = null;
if (_local2 != null){
if (_local2.callbackID != null){
_local3 = _clip._callbacks[_local2.callbackID];
};
delete _clip._callbacks[_local2.callbackID];
if (((_arg1) && (!((_local3 == null))))){
handleError(_local2.args, _local3.callbackObject, _local3.callbackMethod);
};
};
};
};
};
}
private static function init(_arg1:String, _arg2:Object):void{
_id = _arg1;
if (_arg2 != null){
_container = _arg2;
loadCommunicator(_arg1, _container);
};
}
public static function get childClip():Object{
return (_clip);
}
public static function get id():String{
return (_id);
}
public static function stayOnTop():void{
_container.addEventListener(Event.ENTER_FRAME, _slot1.bringToTop, false, 0, true);
if (_clip != null){
_clip.visible = true;
};
}
public static function getVersion():String{
return ("1.31");
}
public static function disconnect():void{
if (((_connected) || (_connecting))){
if (_clip != null){
if (_clip.parent != null){
if ((_clip.parent is Sprite)){
Sprite(_clip.parent).removeChild(_clip);
_clip = null;
};
};
};
_connecting = (_connected = false);
flush(true);
try {
_listenChannel.close();
_rcvChannel.close();
} catch(error:Error) {
};
};
if (_timer != null){
try {
_timer.stop();
} catch(error:Error) {
};
};
}
public static function allowDomains(_arg1:String):String{
var _local2:String;
Security.allowDomain("*");
Security.allowInsecureDomain("*");
if (_arg1.indexOf("http://") != -1){
_local2 = _arg1.split("/")[2].split(":")[0];
Security.allowDomain(_local2);
Security.allowInsecureDomain(_local2);
};
return (_local2);
}
public static function doClose():void{
_container.removeEventListener(Event.ENTER_FRAME, _slot1.bringToTop);
if (_clip.parent != null){
Sprite(_clip.parent).removeChild(_clip);
};
}
public static function setContainer(_arg1:Object=null, _arg2:Boolean=true):void{
if (_arg1 != null){
if ((_arg1 is Sprite)){
_container = _arg1;
};
};
if (_arg2){
if ((_container is Sprite)){
Sprite(_container).addChild(_clip);
};
};
}
private static function onStatus(_arg1:StatusEvent):void{
switch (_arg1.level){
case "error":
_connected = false;
_listenChannel.connect(_listenChannelName);
break;
};
}
private static function initComChannels():void{
if (!_connected){
_sendChannel.addEventListener(StatusEvent.STATUS, _slot1.onStatus);
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"handshakeDone"});
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"registerGame", id:_id, clip:_container, version:getVersion()});
_rcvChannel.addEventListener(StatusEvent.STATUS, _slot1.onStatus);
_clip.onReceive = function (_arg1:Object):void{
var methodName:String;
var pkg = _arg1;
var cb:String = pkg.callbackID;
var cblst:Object = this.client._callbacks[cb];
if (!cblst){
return;
};
var method:* = cblst.callbackMethod;
methodName = "";
var obj:Object = cblst.callbackObject;
if (((obj) && ((typeof(method) == "string")))){
methodName = method;
if (obj[method] != null){
method = obj[method];
} else {
trace((("Error: Method " + method) + " does not exist."));
};
};
if (method != undefined){
try {
method.apply(obj, pkg.args);
} catch(error:Error) {
trace(((("Error invoking callback method '" + methodName) + "': ") + error.toString()));
};
} else {
if (obj != null){
try {
obj(pkg.args);
} catch(error:Error) {
trace(("Error invoking method on object: " + error.toString()));
};
};
};
delete this.client._callbacks[cb];
};
_clip.onError = function ():void{
_slot1.onError("IOError");
};
_rcvChannel.connect(_rcvChannelName);
trace("connected!");
_connecting = false;
_connected = true;
_listenChannel.close();
while (_clip._queue.length > 0) {
_sendChannel.send(_sendChannelName, "onReceive", _clip._queue.shift());
};
};
}
private static function listen():void{
_listenChannel = new LocalConnection();
_listenChannel.client = _clip;
_clip.handshake = function (_arg1:Object):void{
_slot1.comChannelName = _arg1.newChannel;
};
_listenChannel.allowDomain("*", "localhost");
_listenChannel.allowInsecureDomain("*", "localhost");
_listenChannel.connect(_listenChannelName);
trace("Waiting for MochiAds services to connect...");
}
private static function handleError(_arg1:Object, _arg2:Object, _arg3:Object):void{
var args = _arg1;
var callbackObject = _arg2;
var callbackMethod = _arg3;
if (args != null){
if (args.onError != null){
args.onError.apply(null, ["NotConnected"]);
};
};
if (callbackMethod != null){
args = {};
args.error = true;
args.errorCode = "NotConnected";
if (((!((callbackObject == null))) && ((callbackMethod is String)))){
try {
var _local5 = callbackObject;
_local5[callbackMethod](args);
} catch(error:Error) {
};
} else {
if (callbackMethod != null){
try {
callbackMethod.apply(args);
} catch(error:Error) {
};
};
};
};
}
public static function get clip():Object{
return (_container);
}
public static function set comChannelName(_arg1:String):void{
if (_arg1 != null){
if (_arg1.length > 3){
_sendChannelName = (_arg1 + "_fromgame");
_rcvChannelName = _arg1;
initComChannels();
};
};
}
private static function loadCommunicator(_arg1:String, _arg2:Object):MovieClip{
var id = _arg1;
var clip = _arg2;
var clipname:String = ("_mochiservices_com_" + id);
if (_clip != null){
return (_clip);
};
if (!_slot1.isNetworkAvailable()){
return (null);
};
_slot1.allowDomains(_gatewayURL);
_clip = createEmptyMovieClip(clip, clipname, 10336, false);
_loader = new Loader();
_timer = new Timer(1000, 0);
_startTime = getTimer();
_timer.addEventListener(TimerEvent.TIMER, connectWait);
_timer.start();
var f:Function = function (_arg1:Object):void{
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
_slot1.disconnect();
_slot1.onError("IOError");
};
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);
var req:URLRequest = new URLRequest(_gatewayURL);
_loader.load(req);
_clip.addChild(_loader);
_clip._mochiservices_com = _loader;
_sendChannel = new LocalConnection();
_clip._queue = [];
_rcvChannel = new LocalConnection();
_rcvChannel.allowDomain("*", "localhost");
_rcvChannel.allowInsecureDomain("*", "localhost");
_rcvChannel.client = _clip;
_clip._nextcallbackID = 0;
_clip._callbacks = {};
listen();
return (_clip);
}
public static function bringToTop(_arg1:Event):void{
var e = _arg1;
if (_slot1.clip != null){
if (_slot1.childClip != null){
try {
if (_slot1.clip.numChildren > 1){
_slot1.clip.setChildIndex(_slot1.childClip, (_slot1.clip.numChildren - 1));
};
} catch(errorObject:Error) {
trace("Warning: Depth sort error.");
_container.removeEventListener(Event.ENTER_FRAME, _slot1.bringToTop);
};
};
};
}
public static function connect(_arg1:String, _arg2:Object, _arg3:Object=null):void{
var id = _arg1;
var clip = _arg2;
var onError = _arg3;
if ((clip is DisplayObject)){
if (((!(_connected)) && ((_clip == null)))){
trace("MochiServices Connecting...");
_connecting = true;
init(id, clip);
};
} else {
trace("Error, MochiServices requires a Sprite, Movieclip or instance of the stage.");
};
if (onError != null){
_slot1.onError = onError;
} else {
if (_slot1.onError == null){
_slot1.onError = function (_arg1:String):void{
trace(_arg1);
};
};
};
}
public static function createEmptyMovieClip(_arg1:Object, _arg2:String, _arg3:Number, _arg4:Boolean=true):MovieClip{
var parent = _arg1;
var name = _arg2;
var depth = _arg3;
var doAdd = _arg4;
var mc:MovieClip = new MovieClip();
if (doAdd){
if (((false) && (depth))){
parent.addChildAt(mc, depth);
} else {
parent.addChild(mc);
};
};
try {
parent[name] = mc;
} catch(e:Error) {
throw (new Error("MochiServices requires a clip that is an instance of a dynamic class. If your class extends Sprite or MovieClip, you must make it dynamic."));
};
mc["_name"] = name;
return (mc);
}
public static function connectWait(_arg1:TimerEvent):void{
if ((getTimer() - _startTime) > 10000){
if (!_connected){
_clip._mochiad_ctr_failed = true;
trace("MochiServices could not load.");
_slot1.disconnect();
_slot1.onError("IOError");
};
_timer.stop();
};
}
}
}//package mochi
Section 47
//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 48
//ByteArrayAsset (mx.core.ByteArrayAsset)
package mx.core {
import flash.utils.*;
public class ByteArrayAsset extends ByteArray implements IFlexAsset {
mx_internal static const VERSION:String = "3.0.0.0";
}
}//package mx.core
Section 49
//EdgeMetrics (mx.core.EdgeMetrics)
package mx.core {
public class EdgeMetrics {
public var top:Number;
public var left:Number;
public var bottom:Number;
public var right:Number;
mx_internal static const VERSION:String = "3.0.0.0";
public static const EMPTY:EdgeMetrics = new EdgeMetrics(0, 0, 0, 0);
;
public function EdgeMetrics(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0){
this.left = _arg1;
this.top = _arg2;
this.right = _arg3;
this.bottom = _arg4;
}
public function clone():EdgeMetrics{
return (new EdgeMetrics(left, top, right, bottom));
}
}
}//package mx.core
Section 50
//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 51
//FlexMovieClip (mx.core.FlexMovieClip)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexMovieClip extends MovieClip {
mx_internal static const VERSION:String = "3.0.0.0";
public function FlexMovieClip(){
super();
try {
name = NameUtil.createUniqueName(this);
} catch(e:Error) {
};
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 52
//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 53
//IBorder (mx.core.IBorder)
package mx.core {
public interface IBorder {
function get borderMetrics():EdgeMetrics;
}
}//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.display.*;
import flash.geom.*;
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
//MovieClipAsset (mx.core.MovieClipAsset)
package mx.core {
public class MovieClipAsset extends FlexMovieClip implements IFlexAsset, IFlexDisplayObject, IBorder {
private var _measuredHeight:Number;
private var _measuredWidth:Number;
mx_internal static const VERSION:String = "3.0.0.0";
public function MovieClipAsset(){
_measuredWidth = width;
_measuredHeight = height;
}
public function get measuredWidth():Number{
return (_measuredWidth);
}
public function get measuredHeight():Number{
return (_measuredHeight);
}
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;
}
public function get borderMetrics():EdgeMetrics{
if (scale9Grid == null){
return (EdgeMetrics.EMPTY);
};
return (new EdgeMetrics(scale9Grid.left, scale9Grid.top, Math.ceil((measuredWidth - scale9Grid.right)), Math.ceil((measuredHeight - scale9Grid.bottom))));
}
}
}//package mx.core
Section 58
//MovieClipLoaderAsset (mx.core.MovieClipLoaderAsset)
package mx.core {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import flash.system.*;
public class MovieClipLoaderAsset extends MovieClipAsset implements IFlexAsset, IFlexDisplayObject {
protected var initialHeight:Number;// = 0
private var loader:Loader;// = null
private var initialized:Boolean;// = false
protected var initialWidth:Number;// = 0
private var requestedHeight:Number;
private var requestedWidth:Number;
mx_internal static const VERSION:String = "3.0.0.0";
public function MovieClipLoaderAsset(){
var _local1:LoaderContext = new LoaderContext();
_local1.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
if (("allowLoadBytesCodeExecution" in _local1)){
_local1["allowLoadBytesCodeExecution"] = true;
};
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.loadBytes(movieClipData, _local1);
addChild(loader);
}
override public function get width():Number{
if (!initialized){
return (initialWidth);
};
return (super.width);
}
override public function set width(_arg1:Number):void{
if (!initialized){
requestedWidth = _arg1;
} else {
loader.width = _arg1;
};
}
override public function get measuredHeight():Number{
return (initialHeight);
}
private function completeHandler(_arg1:Event):void{
initialized = true;
initialWidth = loader.width;
initialHeight = loader.height;
if (!isNaN(requestedWidth)){
loader.width = requestedWidth;
};
if (!isNaN(requestedHeight)){
loader.height = requestedHeight;
};
dispatchEvent(_arg1);
}
override public function set height(_arg1:Number):void{
if (!initialized){
requestedHeight = _arg1;
} else {
loader.height = _arg1;
};
}
override public function get measuredWidth():Number{
return (initialWidth);
}
override public function get height():Number{
if (!initialized){
return (initialHeight);
};
return (super.height);
}
public function get movieClipData():ByteArray{
return (null);
}
}
}//package mx.core
Section 59
//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 60
//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 61
//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 62
//ColorShift (ColorShift)
package {
import flash.events.*;
import flash.display.*;
import mx.core.*;
import flash.utils.*;
import com.flashrelax.utils.*;
import flash.system.*;
import flash.net.*;
public class ColorShift extends MovieClip {
private const MOCHI_ONLY_DOMAINS:Array;
private const NG_ONLY_DOMAINS:Array;
private const DOMAINS_ALLOWED:Array;
private const NEWGROUNDS_MOVIE_ID:int = 968;
private const MOCHI_ADS_DEFAULTS:Object;
private const GAME_VERSION:String = "1.0";
private const STARTUP_CLASS_NAME:String = "MainGame";
private var mPlayButton:DisplayObject;
private var mAdSprite:ADInjector;
private var mLoader:Loader;
private var mState:int;
private var mFrameLoaded:Boolean;
private var mProgressBar:ProgressBar;
private var mAdCompleted:Boolean;
private var mAdSystem:int;
private static const MOCHI_AD_Y:int = 88;
private static const PROGRESS_X:int = 56;
private static const PROGRESS_Y:int = 418;
private static const STATE_WAITING_LOAD:int = 0;
private static const PROGRESS_WIDTH:int = 400;
private static const AD_SYSTEM_NEWGROUNDS:int = 1;
private static const AD_SYSTEM_MOCHI:int = 0;
private static const PROGRESS_HEIGHT:int = 20;
private static const STATE_WAITING_PLAY_BUTTON:int = 1;
private static var mLogoByClass:Class = ColorShift_mLogoByClass;
private static var mNGAdSWFClass:Class = ColorShift_mNGAdSWFClass;
private static var mLogoClass:Class = ColorShift_mLogoClass;
public static var mWebsiteLogoClass:Class = ColorShift_mWebsiteLogoClass;
public function ColorShift(){
MOCHI_ADS_DEFAULTS = {id:"8c1cfbf6deac3fee", res:"512x360"};
DOMAINS_ALLOWED = [];
NG_ONLY_DOMAINS = ["uploads.ungrounded.net"];
MOCHI_ONLY_DOMAINS = [];
super();
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function onLogoClick(_arg1:MouseEvent):void{
navigateToURL(new URLRequest("http://www.flashrelax.com"));
NewgroundsAPI.logCustomEvent("SiteLoader");
}
private function adFinishedListener(_arg1:Event):void{
mAdSprite.removeEventListener(ADInjector.AD_FINISHED, adFinishedListener);
removeChild(mAdSprite);
mAdSprite = null;
mAdCompleted = true;
}
public function startMainGame():void{
mPlayButton = null;
var _local1:Class = Class(loaderInfo.applicationDomain.getDefinition(STARTUP_CLASS_NAME));
var _local2:DisplayObject = DisplayObject(new _local1(this));
if (_local2){
stage.addChild(_local2);
};
}
public function onAdLoaded(_arg1:Event):void{
mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onAdLoaded);
var _local2:Class = (mLoader.contentLoaderInfo.applicationDomain.getDefinition("NG_AD_OBJECT") as Class);
var _local3:MovieClip = new (_local2);
_local3.y = 260;
_local3.x = 0x0100;
addChild(_local3);
}
public function onFrame(_arg1:Event):void{
var _local2:Class;
var _local3:Boolean;
var _local4:Class;
graphics.clear();
switch (mState){
case STATE_WAITING_LOAD:
if (((mAdCompleted) && (mFrameLoaded))){
_local2 = Class(loaderInfo.applicationDomain.getDefinition(STARTUP_CLASS_NAME));
if (_local2){
removeEventListener(Event.ENTER_FRAME, onFrame);
if (mProgressBar != null){
removeChild(mProgressBar);
mProgressBar = null;
};
_local3 = true;
if (DOMAINS_ALLOWED.length > 0){
_local3 = inList(DOMAINS_ALLOWED);
};
if (!_local3){
return;
};
mState = STATE_WAITING_PLAY_BUTTON;
if (mAdSystem == AD_SYSTEM_NEWGROUNDS){
_local4 = Class(loaderInfo.applicationDomain.getDefinition("com.recolor.Button"));
mPlayButton = DisplayObject(new _local4("Play", 36));
addChild(mPlayButton);
mPlayButton.y = (PROGRESS_Y - 20);
mPlayButton.x = ((PROGRESS_X + (PROGRESS_WIDTH / 2)) - (mPlayButton.width / 2));
mPlayButton.addEventListener(MouseEvent.CLICK, onPlayClick);
} else {
startMainGame();
};
};
};
break;
};
}
public function onPlayClick(_arg1:MouseEvent):void{
mPlayButton.removeEventListener(MouseEvent.CLICK, onPlayClick);
startMainGame();
}
public function onAddedToStage(_arg1:Event):void{
var _local5:ByteArray;
stop();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var _local2:Bitmap = new Bitmap((new mLogoClass() as BitmapAsset).bitmapData);
_local2.y = 10;
addChild(_local2);
_local2 = new Bitmap((new mLogoByClass() as BitmapAsset).bitmapData);
_local2.x = 330;
_local2.y = 25;
addChild(_local2);
var _local3:Sprite = new Sprite();
var _local4:MovieClip = (new mWebsiteLogoClass() as MovieClip);
_local4.x = 410;
_local4.y = 10;
_local3.buttonMode = true;
_local3.addChild(_local4);
_local3.addEventListener(MouseEvent.CLICK, onLogoClick);
addChild(_local3);
if (inList(NG_ONLY_DOMAINS)){
mAdSystem = AD_SYSTEM_NEWGROUNDS;
} else {
if (inList(MOCHI_ONLY_DOMAINS)){
mAdSystem = AD_SYSTEM_MOCHI;
} else {
mAdSystem = Math.floor((Math.random() * 2));
};
};
NewgroundsAPI.linkAPI(stage);
NewgroundsAPI.setMovieVersion(GAME_VERSION);
NewgroundsAPI.connectMovie(NEWGROUNDS_MOVIE_ID);
NewgroundsAPI.addCustomEvent(1, "SiteLoader");
NewgroundsAPI.addCustomEvent(2, "SiteVisitUs");
NewgroundsAPI.addCustomEvent(3, "SiteMoreGames");
if (mAdSystem == AD_SYSTEM_NEWGROUNDS){
_local5 = (new mNGAdSWFClass() as ByteArray);
mLoader = new Loader();
mLoader.loadBytes(_local5, new LoaderContext(false, ApplicationDomain.currentDomain));
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onAdLoaded);
mAdCompleted = true;
mProgressBar = new ProgressBar(PROGRESS_X, PROGRESS_Y, PROGRESS_WIDTH, PROGRESS_HEIGHT);
addChild(mProgressBar);
root.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadingProgress);
} else {
mAdSprite = new ADInjector(MOCHI_ADS_DEFAULTS);
mAdSprite.y = MOCHI_AD_Y;
mAdSprite.addEventListener(ADInjector.AD_FINISHED, adFinishedListener);
addChild(mAdSprite);
mAdCompleted = false;
mProgressBar = null;
};
root.loaderInfo.addEventListener(Event.COMPLETE, onLoadingCompleted);
mFrameLoaded = false;
mState = STATE_WAITING_LOAD;
addEventListener(Event.ENTER_FRAME, onFrame);
}
public function inList(_arg1:Array):Boolean{
var _local4:String;
var _local5:int;
var _local2:Boolean;
var _local3:String = stage.loaderInfo.url.split("/")[2];
for (_local4 in _arg1) {
_local5 = _local3.indexOf(_arg1[_local4]);
if ((((_local5 > -1)) && ((_local5 == (_local3.length - _arg1[_local4].length))))){
_local2 = true;
break;
};
};
return (_local2);
}
private function onLoadingCompleted(_arg1:Event):void{
root.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onLoadingProgress);
root.loaderInfo.removeEventListener(Event.COMPLETE, onLoadingCompleted);
nextFrame();
mFrameLoaded = true;
}
private function onLoadingProgress(_arg1:Event):void{
var _local2:Number = ((root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal) * 100);
mProgressBar.Update(_local2);
}
}
}//package
Section 63
//ColorShift_mLogoByClass (ColorShift_mLogoByClass)
package {
import mx.core.*;
public class ColorShift_mLogoByClass extends BitmapAsset {
}
}//package
Section 64
//ColorShift_mLogoClass (ColorShift_mLogoClass)
package {
import mx.core.*;
public class ColorShift_mLogoClass extends BitmapAsset {
}
}//package
Section 65
//ColorShift_mNGAdSWFClass (ColorShift_mNGAdSWFClass)
package {
import mx.core.*;
public class ColorShift_mNGAdSWFClass extends ByteArrayAsset {
}
}//package
Section 66
//ColorShift_mWebsiteLogoClass (ColorShift_mWebsiteLogoClass)
package {
import mx.core.*;
import flash.utils.*;
public class ColorShift_mWebsiteLogoClass extends MovieClipLoaderAsset {
public var dataClass:Class;
private static var bytes:ByteArray = null;
public function ColorShift_mWebsiteLogoClass(){
dataClass = ColorShift_mWebsiteLogoClass_dataClass;
super();
initialWidth = (1960 / 20);
initialHeight = (1500 / 20);
}
override public function get movieClipData():ByteArray{
if (bytes == null){
bytes = ByteArray(new dataClass());
};
return (bytes);
}
}
}//package
Section 67
//ColorShift_mWebsiteLogoClass_dataClass (ColorShift_mWebsiteLogoClass_dataClass)
package {
import mx.core.*;
public class ColorShift_mWebsiteLogoClass_dataClass extends ByteArrayAsset {
}
}//package
Section 68
//MainGame (MainGame)
package {
import flash.display.*;
import flash.events.*;
import mochi.*;
import com.recolor.*;
import flash.media.*;
public dynamic class MainGame extends Sprite {
private var mState:int;
private var mLoaderSprite:Sprite;
private var mDir:int;
private var mTopBG:Bitmap;
private var mLogo:MovieClip;
private static const STATE_GAME_FADEIN:int = 4;
private static const INTRO_WAIT_TIME:int = 50;
private static const STATE_INIT_FADEOUT:int = 0;
private static const STATE_INTRO_WAIT:int = 2;
private static const STATE_INTRO_FADEOUT:int = 3;
private static const STATE_INTRO_FADEIN:int = 1;
public function MainGame(_arg1:Sprite){
mLoaderSprite = _arg1;
addEventListener(Event.ADDED_TO_STAGE, onAdded);
}
public function onAdded(_arg1:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAdded);
GameState.root = this;
if (UserSettings.mMusic){
GameState.mMusicChannel = DataCollection.mMusic.play(0, 10000);
GameState.mMusicChannel.soundTransform = new SoundTransform(0.4);
};
QualityControl.setUserQuality();
MochiBot.track(this, "c402d82c");
MochiServices.connect("8c1cfbf6deac3fee", this);
mTopBG = new Bitmap(new BitmapData(0x0200, 448, false, 0xFFFFFF));
mTopBG.x = 0;
mTopBG.y = 0;
mTopBG.alpha = 0;
addChild(mTopBG);
mDir = 1;
mState = STATE_INIT_FADEOUT;
addEventListener(Event.ENTER_FRAME, onFrame);
}
public function onFrame(_arg1:Event):void{
var _local2:Field;
if (mState == STATE_INTRO_WAIT){
if (mDir == 0){
mDir = 1;
mState = STATE_INTRO_FADEOUT;
} else {
mDir--;
return;
};
};
mTopBG.alpha = (mTopBG.alpha + (mDir * 0.1));
if (mTopBG.alpha <= 0){
mTopBG.alpha = 0;
if (mState == STATE_GAME_FADEIN){
removeChild(mTopBG);
mTopBG = null;
removeEventListener(Event.ENTER_FRAME, onFrame);
return;
};
mDir = INTRO_WAIT_TIME;
mState = STATE_INTRO_WAIT;
} else {
if (mTopBG.alpha >= 1){
mTopBG.alpha = 1;
if (mState == STATE_INIT_FADEOUT){
stage.removeChild(mLoaderSprite);
mLoaderSprite = null;
mLogo = (new DataCollection.mLogoSWFClass() as MovieClip);
mLogo.scaleX = 0.9;
mLogo.scaleY = 0.9;
addChildAt(mLogo, 0);
mState = STATE_INTRO_FADEIN;
} else {
removeChild(mLogo);
mLogo = null;
_local2 = new Field();
_local2.x = 0;
_local2.y = 0;
addChildAt(_local2, 0);
mState = STATE_GAME_FADEIN;
};
mDir = -1;
};
};
}
}
}//package
Section 69
//NewgroundsAPI (NewgroundsAPI)
package {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import flash.text.*;
public class NewgroundsAPI {
public static const ADS_APPROVED:Number = 3;
private static const STAT_NEW_VERSION:Number = 4;
private static const STAT_AUTHOR_SITE:Number = 2;
private static const GATEWAY_URL:String = "http://www.ngads.com/gateway.php";
private static const NEWGROUNDS_URL:String = "http://www.newgrounds.com";
private static const STAT_CUSTOM_STATS:Number = 50;
private static const STAT_MOVIE_VIEWS:Number = 1;
private static const STAT_NEWGROUNDS:Number = 3;
public static const NEW_VERSION:Number = 2;
public static const DENY_HOST:Number = 1;
private static var tracker_id:Number;
public static var bridge:Stage;
private static var movie_options:Object = new Object();
private static var connected:Boolean;
private static var custom_events:Object = new Object();
private static var host:String;
private static var linked:Boolean;
private static var events:Object = new Object();
private static var debug:Boolean;
private static var version:String;
private static var custom_links:Object = new Object();
public static function getNewVersionURL(){
return (((((((GATEWAY_URL + "?&id=") + tracker_id) + "&host=") + escape(host)) + "&stat=") + STAT_NEW_VERSION));
}
private static function ReadGatewayData(_arg1:Object){
var _local2:*;
var _local3:String;
var _local4:*;
var _local5:URLLoader;
for (_local2 in _arg1) {
_arg1[_local2] = unescape(_arg1[_local2]);
movie_options[_local2] = _arg1[_local2];
};
if (_arg1["settings_loaded"]){
SendMessage("You have successfully connected to the Newgrounds API gateway!");
SendMessage((("Movie Identified as '" + movie_options["movie_name"]) + "'"));
if (movie_options["message"]){
SendMessage(movie_options["message"]);
};
if (movie_options["ad_url"]){
SendMessage("Your movie has been approved to run Flash Ads");
if (events[ADS_APPROVED]){
var _local6 = events;
_local6[ADS_APPROVED](movie_options["ad_url"]);
} else {
onAdsApproved(movie_options["ad_url"]);
};
};
if (((movie_options["movie_version"]) && (!((String(movie_options["movie_version"]) == String(version)))))){
SendMessage("WARNING: The movie version configured in your API settings does not match this movie's version!");
if (events[NEW_VERSION]){
_local6 = events;
_local6[NEW_VERSION]({version:movie_options["movie_version"], real_url:getMovieURL(), redirect_url:getNewVersionURL()});
} else {
onNewVersionAvailable(movie_options["movie_version"], getMovieURL(), getNewVersionURL());
};
};
if (movie_options["deny_host"]){
SendMessage("You have blocked 'localHost' in your API settings.");
SendMessage("If you wish to test your movie you will need to remove this block.");
if (events[DENY_HOST]){
_local6 = events;
_local6[DENY_HOST]({host:host, real_url:getMovieURL(), redirect_url:getNewVersionURL()});
} else {
onDenyHost(host, getMovieURL(), getNewVersionURL());
};
};
if (movie_options["request_portal_url"]){
_local3 = bridge.root.loaderInfo.url;
_local4 = ((((GATEWAY_URL + "?&id=") + tracker_id) + "&portal_url=") + escape(_local3));
_local5 = new URLLoader(new URLRequest(_local4));
};
if (events[69]){
_local6 = events;
_local6[69]();
};
} else {
if (!movie_options["settings_loaded"]){
SendError("Could not establish connection to the API gateway.");
};
};
}
public static function setMovieVersion(_arg1){
if (!_arg1){
SendError("Missing required 'version' in NewgroundsAPI.setMovieVersion(version:String)");
} else {
version = String(_arg1);
};
}
public static function loadCustomLink(_arg1:String){
if (!_arg1){
SendError("Missing required 'link_name' parameter in NewgroundsAPI.loadCustomLink(link_name:String)");
} else {
if (!custom_links[_arg1]){
SendError(("Attempted to open undefined custom link: " + _arg1));
} else {
SendLink(custom_links[_arg1]);
};
};
}
public static function addCustomLink(_arg1:Number, _arg2:String){
if (!_arg1){
SendError("Missing required 'id' parameter in NewgroundsAPI.AddCustomLink(id:Number, link_name:String)");
} else {
if (!_arg2){
SendError("Missing required 'link_name' parameter in NewgroundsAPI.AddCustomLink(id:Number, link_name:String)");
} else {
custom_links[_arg2] = (STAT_CUSTOM_STATS + _arg1);
SendMessage(((("Created custom link " + _arg1) + ": ") + _arg2));
};
};
}
public static function getMovieURL(){
if (movie_options["movie_url"]){
return (movie_options["movie_url"]);
};
return ("Newgrounds.com");
}
public static function debugMode(){
debug = true;
}
public static function getAdURL(){
return (movie_options["ad_url"]);
}
private static function SendStat(_arg1:Number, _arg2:Boolean, _arg3=null){
var target_url:*;
var x:*;
var request:URLRequest;
var gateway_loader:URLLoader;
var stat_id = _arg1;
var open_in_browser = _arg2;
var extra = _arg3;
if (!tracker_id){
SendError("You must call NewgroundsAPI.connectMovie() with a valid movie id before using API features!");
} else {
var XML_Loaded:* = function (_arg1:Event){
var _local5:XML;
var _local6:*;
var _local7:*;
XML.ignoreWhitespace = true;
var _local2:XML = XML(_arg1.target.data);
var _local3:Object = new Object();
var _local4:XMLList = _local2.children();
for each (_local5 in _local4) {
_local6 = _local5.localName();
_local7 = _local5.attribute("value");
if (_local7 == Number(_local7)){
_local7 = Number(_local7);
};
_local3[_local6] = _local7;
};
ReadGatewayData(_local3);
};
target_url = (((((((GATEWAY_URL + "?&id=") + tracker_id) + "&host=") + escape(host)) + "&stat=") + stat_id) + addSeed());
if (extra){
for (x in extra) {
target_url = (target_url + ((("&" + escape(x)) + "=") + escape(extra[x])));
};
};
if (debug){
target_url = (target_url + "&debug=1");
};
if (open_in_browser){
request = new URLRequest((target_url + addSeed()));
navigateToURL(request, "_blank");
} else {
gateway_loader = new URLLoader(new URLRequest((target_url + addSeed())));
gateway_loader.addEventListener(Event.COMPLETE, XML_Loaded);
};
};
}
public static function onAdsApproved(_arg1:String){
}
public static function loadMySite(_arg1:Event=null){
SendLink(STAT_AUTHOR_SITE);
}
private static function SendMessage(_arg1:String){
trace(("[NEWGROUNDS API] :: " + _arg1));
}
public static function linkAPI(_arg1:Stage):void{
bridge = _arg1;
linked = true;
}
public static function loadNewgrounds(_arg1:Event=null, _arg2:String=null){
var _local3:URLRequest;
var _local4:*;
if (!tracker_id){
_local3 = new URLRequest(((NEWGROUNDS_URL + "/") + _arg2));
navigateToURL(_local3, "_blank");
} else {
_local4 = null;
if (_arg2){
_local4 = new Object();
_local4.page = _arg2;
};
SendLink(STAT_NEWGROUNDS, _local4);
};
}
private static function SendLink(_arg1, _arg2=null){
SendStat(_arg1, true, _arg2);
}
public static function logCustomEvent(_arg1:String){
if (!_arg1){
SendError("Missing required 'event_name' parameter in NewgroundsAPI.logCustomEvent(event_name:String)");
} else {
if (!custom_events[_arg1]){
SendError(("Attempted to log undefined custom event: " + _arg1));
} else {
SendEvent(custom_events[_arg1]);
};
};
}
private static function SendError(_arg1:String){
trace(("[NEWGROUNDS API ERROR] :: " + _arg1));
}
public static function addCustomEvent(_arg1:Number, _arg2:String):void{
if (!_arg1){
SendError("Missing required 'id' parameter in NewgroundsAPI.AddCustomEvent(id:Number, event_name:String)");
} else {
if (!_arg2){
SendError("Missing required 'event_name' parameter in NewgroundsAPI.AddCustomEvent(id:Number, event_name:String)");
} else {
custom_events[_arg2] = (STAT_CUSTOM_STATS + _arg1);
SendMessage(("Created custom event: " + _arg2));
};
};
}
private static function addSeed(){
return (("&seed=" + Math.random()));
}
public static function addEventListener(_arg1:Number, _arg2:Function){
events[_arg1] = _arg2;
}
private static function SendEvent(_arg1){
SendStat(_arg1, false);
}
public static function onNewVersionAvailable(_arg1:String, _arg2:String, _arg3:String){
var _root:*;
var overlay:MovieClip;
var version = _arg1;
var movie_url = _arg2;
var redirect_url = _arg3;
var sw:* = bridge.stageWidth;
var sh:* = bridge.stageHeight;
var tw:* = 350;
var th:* = 160;
var mg:* = 20;
_root = bridge.root;
overlay = new MovieClip();
overlay.graphics.beginFill(0, 0.6);
overlay.graphics.lineStyle(0, 0);
overlay.graphics.drawRect(0, 0, sw, sh);
overlay.graphics.endFill();
var overlay_x:* = Math.round(((sw - tw) / 2));
var overlay_y:* = Math.round(((sh - th) / 2));
overlay.graphics.beginFill(102);
overlay.graphics.lineStyle(10, 0);
overlay.graphics.drawRect((overlay_x - mg), (overlay_y - mg), (tw + mg), (th + mg));
overlay.graphics.endFill();
overlay.close = function (_arg1:Event){
_root.removeChild(overlay);
};
var close_x:* = new MovieClip();
close_x.graphics.beginFill(0, 0.1);
close_x.graphics.lineStyle(3, 22015);
close_x.graphics.drawRect(0, 0, 16, 16);
close_x.graphics.endFill();
close_x.graphics.moveTo(4, 4);
close_x.graphics.lineTo(13, 13);
close_x.graphics.moveTo(13, 4);
close_x.graphics.lineTo(4, 13);
close_x.x = ((overlay_x + tw) - 26);
close_x.y = (overlay_y - 10);
close_x.addEventListener(MouseEvent.CLICK, overlay.close);
var blankarea:TextField = new TextField();
blankarea.x = (overlay_x - mg);
blankarea.y = (overlay_y - mg);
blankarea.width = (tw + mg);
blankarea.height = (th + mg);
blankarea.selectable = false;
var header:TextField = new TextField();
header.width = tw;
header.x = overlay_x;
header.y = overlay_y;
header.height = 100;
header.selectable = false;
var header_format:TextFormat = new TextFormat();
header_format.font = "Arial Black";
header_format.color = 0xFFFFFF;
header_format.size = 20;
header.defaultTextFormat = header_format;
header.text = "New Version Available!";
var msgtext:TextField = new TextField();
msgtext.x = overlay_x;
msgtext.y = (overlay_y + 70);
msgtext.width = tw;
msgtext.height = 60;
msgtext.selectable = false;
var msgtext_format:TextFormat = new TextFormat();
msgtext_format.font = "Arial";
msgtext_format.color = 0xFFFFFF;
msgtext_format.size = 12;
msgtext_format.bold = true;
var msgtext_link:TextFormat = new TextFormat();
msgtext_link.font = "Arial";
msgtext_link.color = 0xFFFF00;
msgtext_link.size = 12;
msgtext_link.bold = true;
msgtext_link.url = redirect_url;
msgtext_link.target = "_blank";
if (version){
version = ("Version " + version);
} else {
version = "A new version";
};
msgtext.defaultTextFormat = msgtext_format;
msgtext.appendText((version + " is now available"));
if (movie_url){
msgtext.appendText(" at:\n");
msgtext.defaultTextFormat = msgtext_link;
msgtext.appendText(movie_url);
} else {
msgtext.appendText("!");
};
_root.addChild(overlay);
overlay.addChild(blankarea);
overlay.addChild(header);
overlay.addChild(msgtext);
overlay.addChild(close_x);
}
public static function onDenyHost(_arg1:String, _arg2:String, _arg3:String){
var _local4:* = bridge.stageWidth;
var _local5:* = bridge.stageHeight;
var _local6:* = 350;
var _local7:* = 160;
var _local8:* = bridge.root;
var _local9:MovieClip = new MovieClip();
_local9.graphics.beginFill(0x660000);
_local9.graphics.lineStyle(20, 0);
_local9.graphics.drawRect(0, 0, _local4, _local5);
_local9.graphics.endFill();
var _local10:TextField = new TextField();
_local10.x = 0;
_local10.y = 0;
_local10.width = _local4;
_local10.height = _local5;
_local10.selectable = false;
var _local11:TextField = new TextField();
_local11.x = Math.round(((_local4 - _local6) / 2));
_local11.y = Math.round(((_local5 - _local7) / 2.5));
_local11.width = _local6;
_local11.height = 100;
_local11.selectable = false;
var _local12:TextFormat = new TextFormat();
_local12.font = "Arial Black";
_local12.color = 0xFF0000;
_local12.size = 38;
_local11.defaultTextFormat = _local12;
_local11.text = "ERROR!";
var _local13:TextField = new TextField();
_local13.x = Math.round(((_local4 - _local6) / 2));
_local13.y = (Math.round(((_local5 - _local7) / 2.5)) + 80);
_local13.width = _local6;
_local13.height = 80;
_local13.selectable = false;
var _local14:TextFormat = new TextFormat();
_local14.font = "Arial";
_local14.color = 0xFFFFFF;
_local14.size = 12;
_local14.bold = true;
var _local15:TextFormat = new TextFormat();
_local15.font = "Arial";
_local15.color = 0xFFFF00;
_local15.size = 12;
_local15.bold = true;
_local15.url = _arg3;
_local15.target = "_blank";
_local13.defaultTextFormat = _local14;
_local13.appendText((("This movie has not been approved for use on " + _arg1) + "\n"));
_local13.appendText("For an approved copy, please visit:\n");
_local13.defaultTextFormat = _local15;
_local13.appendText(_arg2);
_local8.addChild(_local9);
_local9.addChild(_local10);
_local9.addChild(_local11);
_local9.addChild(_local13);
}
public static function connectMovie(_arg1:Number){
var _local2:String;
var _local3:*;
if (!_arg1){
SendError("Missing required 'id' parameter in NewgroundsAPI.connectMovie(id:Number)");
} else {
if (!linked){
SendError("Attempted to call MewgroundsAPI.connectMovie() without first calling NewgroundsAPI.linkAPI(this)");
} else {
if (!tracker_id){
SendMessage("Connecting to API gateway...");
tracker_id = _arg1;
_local2 = bridge.root.loaderInfo.url;
host = _local2.split("/")[2].toLowerCase();
if (host.length < 1){
host = "localhost";
};
_local3 = new Object();
SendEvent(STAT_MOVIE_VIEWS);
};
};
};
}
public static function isInstalled(){
return (true);
}
}
}//package