Section 1
//ReplayControl (com.king.midasmahjong.notlive.ReplayControl)
package com.king.midasmahjong.notlive {
import flash.display.*;
import flash.text.*;
public class ReplayControl extends MovieClip {
public var playBtn:MovieClip;
public var stopTickTf:TextField;
public var speedTf:TextField;
}
}//package com.king.midasmahjong.notlive
Section 2
//App (com.king.midasmahjong.App)
package com.king.midasmahjong {
public class App {
public static const DEV_MODE:int = 0;
public static const MONEY_GAME:int = 1;
public static const PRACTICE_GAME:int = 2;
public static const GAME_TYPE:int = 1;
public static const NO_MORE_MOVES:int = 0;
public static const TIME_RAN_OUT:int = 1;
public static const SHORT_GAME_END:int = 2;
public static const USER_CHOSE_EXIT:int = 3;
public static const RELAX_0_SHUFFLES:int = 4;
public static const GUI_SHOW_ROLL_OVER:int = 0;
public static const GUI_HIDE_ROLL_OVER:int = 1;
public static const GUI_SHUFFLE_BTN_GLIDE_IN:int = 2;
public static const GUI_SHUFFLE_BTN_GLIDE_OUT:int = 3;
public static const GUI_SHOW_SHUFFLE_PRESSED:int = 4;
public static const GUI_SHOW_SHUFFLE_RELEASED:int = 5;
public static const GUI_START_SHUFFLE_ANIMATION:int = 8;
public static const GUI_START_LEVEL_ANIMATION:int = 9;
public static const GUI_START_NEW_LAYUP_ANIMATION:int = 10;
public static const GUI_SHOW_GAME_OVER:int = 12;
public static const GUI_CHANGE_SELECTED_TILE:int = 13;
public static const GUI_REMOVE_PAIR:int = 14;
public static const GUI_UPDATE_TIME:int = 15;
public static const GUI_SHOW_TIME_WARNING:int = 17;
public static const GUI_NOT_MATCH:int = 18;
public static const GUI_NOT_FREE:int = 19;
public static const GUI_SELECT_FROM_SCRATCH:int = 20;
public static const GUI_NEXT_LAYUP_START:int = 22;
public static const GUI_SET_GAME_RUNNING:int = 24;
public static const GUI_DISABLE_SHUFFLE:int = 25;
public static const GUI_RELAX_SHUFFLE_PENALTY:int = 26;
public static const INPUT_BRICK_CLICKED:int = 0;
public static const INPUT_SHUFFLE_CLICKED:int = 1;
public static const INPUT_EXIT:int = 2;
public static const INPUT_CHEAT:int = 3;
public static const SHUFFLE_ANIMATION_FINISHED:int = 4;
public static const LEVEL_ANIMATION_FINISHED:int = 5;
public static const INPUT_BRICK_ROLLED_OVER:int = 6;
public static const INPUT_BRICK_ROLLED_OUT:int = 7;
public static const INPUT_SHUFFLE_ROLL_OVER:int = 8;
public static const INPUT_SHUFFLE_ROLL_OUT:int = 9;
public static const INPUT_SHUFFLE_DOWN:int = 10;
public static const THE_END:int = 11;
public static const INPUT_STRINGS:Array = ["tileClick", "shuffleClick", "exit", "cheatAPair", "shuffleAnimEnd", "levelAnimEnd", "tileRollover", "tileRollout", "shuffleRollover", "shuffleRollout", "shuffleDown", "theEndFromGameCore"];
public static const TICKS_PER_SECOND:int = 60;
public static const COUNTDOWN_TICKS:int = 25200;
public static const TIME_WARNING_TICKS:int = 300;
public static const SHOW_A_POSSIBLE_MOVE_MS:Number = 1000;
public static const REDRAW_A_BRICK_MS:Number = 1;
public static const SECONDS_TO_DECREASE_BONUS_ONE_POINT:Number = 0.2;
public static const PENALTY_PER_BRICK_SECONDS:int = 5;
public static const INTRO_MILLISEC:int = 20500;
public static const START_DELAY_MILLISEC:int = 300;
public static const LOOP_SOUND_DELAY:int = 300;
public static const LOOP_SOUND_FADOUT:int = 300;
public static const OUTRO_SOUND_DELAY:int = 2000;
public static const MOVIE_CLIP_FRAME_RATE:int = 60;
public static const MOVIE_CLIP_FRAMES_PER_GAME_TICK:Number = 1;
public static const END_REASON_SHOW_MILLISEC:int = 4000;
public static const GAME_SUMMARY_SHOW_MILLISEC:int = 21300;
public static const MINIMAL_GAME_QUIT_DELAY:int = 2000;
public static const NEXT_LAYUP_START_DELAY_GAME_TICKS:int = 180;
public static const REMOVE_PAIR_POINTS:int = 25;
public static const REMOVE_PAIR_SPEED_BONUS:int = 25;
public static const RELAX_SHUFFLE_PENALTY:int = -100;
public static const STEREO_INTENSITY:Number = 0.7;
public static const VOLUME_CLICK:Number = 0.2;
public static const VOLUME_LAYUP_CLEARED:Number = 0.3;
public static const VOLUME_LAYUP_ANIMATION_BURNOUT:Number = 0.3;
public static const VOLUME_REMOVE_PAIR:Number = 0.2;
public static const VOLUME_NOT_FREE:Number = 0.15;
public static const VOLUME_NOT_MATCH:Number = 0.15;
public static const VOLUME_SHUFFLE_LOOSE_TIME:Number = 0.2;
public static const VOLUME_SHUFFLE:Number = 0.4;
public static const VOLUME_INTRO:Number = 0.3;
public static const VOLUME_LOOP:Number = 0.15;
public static const VOLUME_OUTRO:Number = 0.3;
public static const VOLUME_TIME_WARNING:Number = 0.3;
public static const VOLUME_GAME_OVER:Number = 0.3;
public static const STAGE_WIDTH:int = 755;
public static var toGui:Array;
public static var document:Document;
public function App(){
trace("App is static and should not be instantiated");
}
}
}//package com.king.midasmahjong
Section 3
//Brick (com.king.midasmahjong.Brick)
package com.king.midasmahjong {
import flash.events.*;
import flash.display.*;
public class Brick extends MovieClip {
public var gui:Gui;
public var rolledOver:MovieClip;
public var selected:MovieClip;
public var missed:MovieClip;
private var brickNr:int;
private var faceNr:int;
private var i_:int;
private var j_:int;
private var k_:int;
public static var X_STEP:int = 19;
public static var Y_STEP:int = 27;
public static var PERSPECTIVE_WIDTH:int = 8;
public static var PERSPECTIVE_HEIGHT:int = -8;
public function Brick(){
rolledOver.visible = false;
selected.visible = false;
missed.visible = false;
addEventListener(MouseEvent.MOUSE_DOWN, clicked);
addEventListener(MouseEvent.ROLL_OVER, rollOver);
addEventListener(MouseEvent.ROLL_OUT, rollOut);
}
private function clicked(_arg1:MouseEvent){
if (gui.getGameRunning()){
App.document.addGuiInput([App.INPUT_BRICK_CLICKED, brickNr]);
};
}
private function rollOver(_arg1:MouseEvent){
if (gui.getGameRunning()){
App.document.addGuiInput([App.INPUT_BRICK_ROLLED_OVER, brickNr]);
};
}
private function rollOut(_arg1:MouseEvent){
App.document.addGuiInput([App.INPUT_BRICK_ROLLED_OUT, brickNr]);
}
public function setPosition(_arg1:int, _arg2:int, _arg3:int):void{
i_ = _arg1;
j_ = _arg2;
k_ = _arg3;
this.x = (int(k_) * Brick.X_STEP);
this.y = (int(j_) * Brick.Y_STEP);
}
public function get i():int{
return (i_);
}
public function get j():int{
return (j_);
}
public function get k():int{
return (k_);
}
public function getFaceNr():int{
return (faceNr);
}
public function getBrickNr():int{
return (brickNr);
}
public static function createBrick(_arg1:int):Brick{
var _local2:Brick = new (Brick);
_local2.brickNr = _arg1;
_local2.faceNr = MahjongCore.getFaceNr(_arg1);
_local2.gotoAndStop((_local2.faceNr + 1));
return (_local2);
}
}
}//package com.king.midasmahjong
Section 4
//BrickShadow (com.king.midasmahjong.BrickShadow)
package com.king.midasmahjong {
import flash.display.*;
public class BrickShadow extends MovieClip {
public var top:MovieClip;
public var middle:MovieClip;
public var bottom:MovieClip;
public var brickNr:int;
public function BrickShadow():void{
mouseEnabled = false;
}
}
}//package com.king.midasmahjong
Section 5
//Coder (com.king.midasmahjong.Coder)
package com.king.midasmahjong {
public class Coder {
public static const KYODAI_DEPTH:int = 5;
public static const KYODAI_HEIGHT:int = 20;
public static const KYODAI_WIDTH:int = 34;
public static const LAYOUT_DEPTH:int = 5;
public static const LAYOUT_HEIGHT:int = 16;
public static const LAYOUT_WIDTH:int = 30;
public static const KEY:String = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#";
public static const CHUNK_LENGTH:int = 10;
public static const CODE_PART_LENGTH:int = 2;
public static const LAYOUT_SIZE:int = 2400;
public function Coder(){
trace("Static class not to be instantiated");
}
public static function decode(_arg1:String):String{
var _local5:int;
var _local6:String;
var _local2:int = (_arg1.length / Coder.CODE_PART_LENGTH);
var _local3 = "";
var _local4:int;
while (_local4 < _local2) {
_local5 = (_local4 * Coder.CODE_PART_LENGTH);
_local6 = _arg1.substring(_local5, (_local5 + Coder.CODE_PART_LENGTH));
_local3 = (_local3 + intToBitStr(codeToInt(_local6)));
_local4++;
};
return (_local3);
}
public static function codeToInt(_arg1:String):int{
var _local4:int;
_arg1 = Coder.reverseString(_arg1);
var _local2:int;
var _local3:int;
while (_local3 < Coder.CODE_PART_LENGTH) {
_local4 = (KEY.indexOf(_arg1.charAt(_local3)) * Math.pow(Coder.KEY.length, _local3));
_local2 = (_local2 + _local4);
_local3++;
};
return (_local2);
}
public static function intToBitStr(_arg1:int):String{
var _local4:int;
var _local5:int;
var _local2 = "";
var _local3:int = (Coder.CHUNK_LENGTH - 1);
while (_local3 >= 0) {
_local4 = (_arg1 / Math.pow(2, _local3));
_local5 = (_arg1 % Math.pow(2, _local3));
_arg1 = _local5;
_local2 = (_local2 + _local4);
_local3--;
};
return (_local2);
}
public static function reverseString(_arg1:String):String{
var _local2 = "";
var _local3:int;
while (_local3 < _arg1.length) {
_local2 = (_arg1.charAt(_local3) + _local2);
_local3++;
};
return (_local2);
}
}
}//package com.king.midasmahjong
Section 6
//Communicator (com.king.midasmahjong.Communicator)
package com.king.midasmahjong {
import flash.external.*;
import flash.system.*;
public class Communicator {
public function sendPlayData(_arg1:Array):void{
var _local2:String = ((String(_arg1[0]) + ",") + String(_arg1[1]));
var _local3:int = _arg1.length;
var _local4 = 2;
while (_local4 < _local3) {
_local2 = (_local2 + (" " + String(_arg1[_local4])));
_local4++;
};
_local2 = (_local2 + "=0");
ExternalInterface.call("playData", _local2);
}
public function send(_arg1:String, _arg2:String):void{
fscommand(_arg1, _arg2);
}
}
}//package com.king.midasmahjong
Section 7
//Document (com.king.midasmahjong.Document)
package com.king.midasmahjong {
import flash.events.*;
import flash.utils.*;
import flash.display.*;
import flash.external.*;
import flash.net.*;
public class Document extends MovieClip {
public var timer:GameTimer;
public var encodedLayouts:Array;
protected var gameCore:GameCore;
private var communicator:Communicator;
protected var currentTick:int;// = 0
public var gameLog:String;// = ""
protected var gameDataXml:XML;
private var gameQuitSent:Boolean;// = false
public var path:String;
public var gui:Gui;
public var relaxMode:Boolean;// = false
public function Document(){
var _local1:Boolean;
super();
if (App.GAME_TYPE == App.DEV_MODE){
fakeGameData();
} else {
_local1 = getGameData();
if (_local1){
gameDataLoaded();
} else {
log("Error: Could not load game Data!");
};
};
}
public function gameDataLoaded():void{
gui.setTextProperties(gameDataXml);
path = gameDataXml.@path;
App.toGui = new Array();
App.document = this;
encodedLayouts = new Array();
encodedLayouts.push(gameDataXml.layouts.layout[0]);
encodedLayouts.push(gameDataXml.layouts.layout[1]);
encodedLayouts.push(gameDataXml.layouts.layout[2]);
encodedLayouts.push(gameDataXml.layouts.layout[3]);
encodedLayouts.push(gameDataXml.layouts.layout[4]);
if (gameDataXml.@relaxMode == "true"){
relaxMode = true;
gui.timeDisplay.hideTime();
gui.timeDisplay.label.text = gameDataXml.text.(@id == "lamp_shuffles");
gui.introSign.introTf.text = gameDataXml.text.(@id == "intro_instruction_relax");
};
timer = new GameTimer(App.TICKS_PER_SECOND);
gameCore = new GameCore(gameDataXml.@seed, gameDataXml.@mode, App.COUNTDOWN_TICKS, this);
if (gameDataXml.@relax == "true"){
gui.timeDisplay.colon.text = ("" + gameCore.relaxShuffles);
};
gui.document = this;
gui.setTimeFunc(timer.getCurrentTime);
communicator = new Communicator();
addEventListener("enterFrame", onlyRender);
}
public function startGame():void{
communicator.send("gameStart", "");
gui.newSetup(gameCore.getBricksInDrawOrder());
removeEventListener("enterFrame", onlyRender);
addEventListener("enterFrame", advanceTime);
gui.setGameRunning(true);
}
private function getGameData():Boolean{
var _local1:Object = ExternalInterface.call("getGameData");
if (((!((_local1 == null))) && (_local1.success))){
gameDataXml = new XML(_local1.message);
return (true);
};
return (false);
}
private function fakeGameData():void{
var myLoader:URLLoader;
var xmlLoaded:Function;
xmlLoaded = function (_arg1:Event):void{
gameDataXml = XML(myLoader.data);
gameDataLoaded();
};
var XML_URL = "/com/king/midasmahjong/notlive/DevModeGameData.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
myLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
}
public function onlyRender(_arg1:Event):void{
gui.render(0, 0);
}
private function advanceTime(_arg1:Event):void{
var _local2:int = timer.advanceTime();
var _local3:* = 0;
while (_local3 < _local2) {
gameCore.tick(currentTick++);
_local3++;
};
gui.render(timer.alpha, currentTick);
}
public function addGuiInput(_arg1:Array):void{
var _local2:int = currentTick;
_arg1.splice(1, 0, _local2);
gameCore.addInput(_arg1);
var _local3:int = int(_arg1[0]);
if (((!((App.GAME_TYPE == App.PRACTICE_GAME))) && (!(relaxMode)))){
if (Document.isLogicInput(_local3)){
communicator.sendPlayData(_arg1);
};
};
}
public function addInputFromGameCore(_arg1:Array):void{
var _local2:int = currentTick;
_arg1.splice(1, 0, _local2);
var _local3:int = int(_arg1[0]);
if (App.GAME_TYPE != App.PRACTICE_GAME){
if (Document.isLogicInput(_local3)){
communicator.sendPlayData(_arg1);
};
};
}
public function gameOver(_arg1:int, _arg2:int):void{
log("gameEnd");
communicator.send("gameEnd", ("" + _arg1));
var _local3:int = App.END_REASON_SHOW_MILLISEC;
if (_arg2 == App.USER_CHOSE_EXIT){
_local3 = 0;
};
var _local4:Timer = new Timer((_local3 + App.GAME_SUMMARY_SHOW_MILLISEC), 1);
_local4.addEventListener("timer", gameQuit);
_local4.start();
}
public function gameQuit(_arg1:Event):void{
if (!gameQuitSent){
gameQuitSent = true;
log("gameQuit");
communicator.send("gameQuit", "");
trace(gameLog);
};
}
public function log(_arg1:String):void{
gameLog = (gameLog + (_arg1 + "\n"));
}
public static function isLogicInput(_arg1:int):Boolean{
if ((((((((((((_arg1 == App.INPUT_BRICK_CLICKED)) || ((_arg1 == App.INPUT_SHUFFLE_CLICKED)))) || ((_arg1 == App.SHUFFLE_ANIMATION_FINISHED)))) || ((_arg1 == App.LEVEL_ANIMATION_FINISHED)))) || ((_arg1 == App.INPUT_EXIT)))) || ((_arg1 == App.THE_END)))){
return (true);
};
return (false);
}
}
}//package com.king.midasmahjong
Section 8
//EndReasonSign (com.king.midasmahjong.EndReasonSign)
package com.king.midasmahjong {
import flash.display.*;
public class EndReasonSign extends MovieClip implements Renderable {
public var textMc:MovieClip;
public var openGameTextMc:MovieClip;
private var glideInFrames:int;// = 90
private var startY:int;
private var stopY:int;// = 250
private var ySpeed:Number;
private var yTemp:Number;
private var startTick:Number;// = -1
private var initialized:Boolean;// = false
public function render(_arg1:Number, _arg2:int):Boolean{
if (!initialized){
startTick = (_arg2 + _arg1);
initialized = true;
yTemp = y;
startY = y;
ySpeed = ((stopY - yTemp) / glideInFrames);
};
var _local3:Number = ((_arg2 + _arg1) - startTick);
var _local4:int = (_local3 * App.MOVIE_CLIP_FRAMES_PER_GAME_TICK);
var _local5:Boolean;
if (yTemp < stopY){
yTemp = (_local4 * ySpeed);
y = Math.floor(yTemp);
} else {
_local5 = true;
};
return (_local5);
}
}
}//package com.king.midasmahjong
Section 9
//GameCore (com.king.midasmahjong.GameCore)
package com.king.midasmahjong {
public class GameCore {
public var rand:Random;
public var fromGui:Array;
private var mahjongCore:MahjongCore;
private var currentTick:int;
private var countDownTicks:int;
private var countDownMinutes:int;
private var countDownSeconds:int;
private var countDownPaused:Boolean;// = false
private var gameIsOver:Boolean;// = false
private var layoutCounter:int;// = 0
private var remainingTimeWarnings:int;// = 2
private var continueTick:int;// = -1
private var document:Document;
private var lastRemoveTick:int;// = -1
private var totalBonus:int;// = 0
private var totalScore:int;// = 0
private var endReason:int;// = -1
private var endTick:int;// = -1
private var shortMode:Boolean;// = false
private var stopShortGame:Boolean;// = false
public var relaxShuffles:int;// = 0
public static var RELAX_SHUFFLES:int = 5;
public function GameCore(_arg1:int, _arg2:String, _arg3:int, _arg4:Document){
_arg4.log((("[seed " + _arg1) + "]"));
_arg4.log(("countDownTicks " + _arg3));
if (_arg2 == "short"){
shortMode = true;
};
if (_arg4.relaxMode){
relaxShuffles = GameCore.RELAX_SHUFFLES;
_arg4.gui.timeDisplay.colon.text = ("" + relaxShuffles);
};
this.countDownTicks = _arg3;
this.document = _arg4;
fromGui = new Array();
rand = new Random(_arg1);
nextLayout();
}
private function nextLayout():void{
var _local1:String = String(document.encodedLayouts[layoutCounter++]);
if (layoutCounter >= document.encodedLayouts.length){
layoutCounter = 0;
};
mahjongCore = new MahjongCore(this, _local1, document);
}
public function getBricksInDrawOrder():Array{
return (mahjongCore.getBricksInDrawOrder());
}
private function getTimeDisplayUpdate():Array{
var _local1:int = (App.TICKS_PER_SECOND * 60);
var _local2:int = (countDownTicks / _local1);
var _local3:int = (countDownTicks % _local1);
var _local4:int = (_local3 / App.TICKS_PER_SECOND);
if ((_local3 % App.TICKS_PER_SECOND) > 0){
_local4++;
if (_local4 == 60){
_local4 = 0;
_local2++;
};
};
return ([_local2, _local4]);
}
public function tick(_arg1:int):void{
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:Array;
var _local6:int;
var _local7:int;
var _local8:String;
var _local9:String;
var _local10:int;
this.currentTick = _arg1;
if (countDownPaused){
if (_arg1 == continueTick){
continueTick = -1;
continueGame();
if (!stopShortGame){
App.toGui.push([App.GUI_NEXT_LAYUP_START, null]);
};
};
};
if (((!(document.relaxMode)) && (!(countDownPaused)))){
countDownTicks--;
_local2 = getTimeDisplayUpdate();
_local3 = int(_local2[0]);
_local4 = int(_local2[1]);
if (((!((_local3 == countDownMinutes))) || (!((_local4 == countDownSeconds))))){
countDownMinutes = _local3;
countDownSeconds = _local4;
App.toGui.push([App.GUI_UPDATE_TIME, _local2]);
};
if ((((countDownTicks <= (App.TIME_WARNING_TICKS * 2))) && ((remainingTimeWarnings == 2)))){
if (countDownTicks == (App.TIME_WARNING_TICKS * 2)){
remainingTimeWarnings = 1;
} else {
remainingTimeWarnings = 0;
};
App.toGui.push([App.GUI_SHOW_TIME_WARNING, null]);
};
if ((((countDownTicks <= App.TIME_WARNING_TICKS)) && ((remainingTimeWarnings == 1)))){
remainingTimeWarnings = 0;
App.toGui.push([App.GUI_SHOW_TIME_WARNING, null]);
};
if (countDownTicks <= 0){
document.log(("TimeIsUp " + _arg1));
gameOver(App.TIME_RAN_OUT);
};
};
if (((!((endTick == -1))) && ((_arg1 == endTick)))){
theEnd();
};
while (fromGui.length > 0) {
_local5 = fromGui.shift();
_local6 = int(_local5[0]);
_local7 = int(_local5[1]);
_local8 = String(App.INPUT_STRINGS[_local6]);
_local9 = ((_local8 + " ") + _local7);
if (_local5.length > 2){
_local10 = int(_local5[2]);
_local9 = (_local9 + (" " + _local10));
};
if (Document.isLogicInput(_local6)){
document.log((("[" + _local9) + "]"));
};
switch (_local6){
case App.INPUT_BRICK_CLICKED:
brickClicked(_local10);
break;
case App.INPUT_SHUFFLE_CLICKED:
if (!((document.relaxMode) && ((relaxShuffles <= 0)))){
tryToShuffle(_arg1);
} else {
App.toGui.push([App.GUI_SET_GAME_RUNNING, true]);
};
break;
case App.SHUFFLE_ANIMATION_FINISHED:
continueGame();
break;
case App.LEVEL_ANIMATION_FINISHED:
levelAnimationFinished();
break;
case App.INPUT_EXIT:
exit();
break;
case App.THE_END:
break;
case App.INPUT_BRICK_ROLLED_OVER:
brickRollOver(_local10);
break;
case App.INPUT_BRICK_ROLLED_OUT:
brickRollOut(_local10);
break;
case App.INPUT_SHUFFLE_ROLL_OVER:
shuffleRollOver();
break;
case App.INPUT_SHUFFLE_ROLL_OUT:
shuffleRollOut();
break;
case App.INPUT_SHUFFLE_DOWN:
shuffleDown();
break;
default:
document.log(("**** Error in gameCore.tick(). Invalid inputType: " + _local6));
};
if (_local7 != _arg1){
document.log(((("**** Warning, bad sync! tickToExecute " + _local7) + " currentTick ") + _arg1));
};
};
}
private function brickClicked(_arg1:int):void{
if (!countDownPaused){
mahjongCore.brickClicked(_arg1);
};
}
private function tryToShuffle(_arg1:int):void{
var _local2:Array;
var _local3:Array;
var _local4:Array;
var _local5:Array;
var _local6:Array;
var _local7:int;
App.toGui.push([App.GUI_SHOW_SHUFFLE_RELEASED, null]);
if (!countDownPaused){
pauseGame();
document.log(("Shuffle " + _arg1));
lastRemoveTick = -1;
_local2 = mahjongCore.getAFreePair();
_local3 = null;
_local4 = null;
if (document.relaxMode){
relaxShuffles--;
document.gui.timeDisplay.colon.text = ("" + relaxShuffles);
if (_local2 != null){
totalScore = (totalScore + App.RELAX_SHUFFLE_PENALTY);
if (totalScore < 0){
totalScore = 0;
};
App.toGui.push([App.GUI_RELAX_SHUFFLE_PENALTY, [totalScore]]);
};
};
if (((!(document.relaxMode)) && (!((_local2 == null))))){
_local7 = (App.PENALTY_PER_BRICK_SECONDS * 2);
_local4 = [_local7];
document.log(("timePenaltySec " + _local7));
countDownTicks = (countDownTicks - (_local7 * App.TICKS_PER_SECOND));
if (countDownTicks < 0){
countDownTicks = 0;
};
_local3 = getTimeDisplayUpdate();
};
_local5 = new Array();
_local6 = new Array();
if (countDownTicks > 0){
document.log("reShuffle");
mahjongCore.reShuffle();
_local5 = mahjongCore.getBricksInDrawOrder();
_local6 = mahjongCore.getBricksInShowOrder();
};
App.toGui.push([App.GUI_START_SHUFFLE_ANIMATION, [_local2, _local3, _local4, _local5, _local6]]);
};
}
private function continueGame():void{
if (!gameIsOver){
document.log(("continueGame " + currentTick));
if (stopShortGame){
document.log("short game end ");
gameOver(App.SHORT_GAME_END);
} else {
if (((document.relaxMode) && ((relaxShuffles == 0)))){
document.log("relax shuffles game end ");
gameOver(App.RELAX_0_SHUFFLES);
} else {
if (countDownPaused){
countDownPaused = false;
App.toGui.push([App.GUI_SET_GAME_RUNNING, [true]]);
};
};
};
};
}
private function pauseGame():void{
document.log(("pauseGame " + currentTick));
App.toGui.push([App.GUI_SET_GAME_RUNNING, [false]]);
countDownPaused = true;
}
public function levelAnimationFinished():void{
nextLayout();
if (shortMode){
stopShortGame = true;
};
continueTick = (currentTick + App.NEXT_LAYUP_START_DELAY_GAME_TICKS);
var _local1:Array = mahjongCore.getBricksInDrawOrder();
App.toGui.push([App.GUI_START_NEW_LAYUP_ANIMATION, [_local1]]);
}
public function exit():void{
document.log("user chose exit");
gameOver(App.USER_CHOSE_EXIT);
}
private function brickRollOver(_arg1:int):void{
if (((!(countDownPaused)) && (mahjongCore.brickIsFreeToLift(_arg1)))){
App.toGui.push([App.GUI_SHOW_ROLL_OVER, [_arg1]]);
};
}
private function brickRollOut(_arg1:int):void{
App.toGui.push([App.GUI_HIDE_ROLL_OVER, [_arg1]]);
}
private function shuffleRollOver():void{
if (((!(((document.relaxMode) && ((relaxShuffles <= 0))))) || (!(countDownPaused)))){
App.toGui.push([App.GUI_SHUFFLE_BTN_GLIDE_IN, null]);
};
}
private function shuffleRollOut():void{
App.toGui.push([App.GUI_SHUFFLE_BTN_GLIDE_OUT, null]);
}
private function shuffleDown():void{
if (((!(((document.relaxMode) && ((relaxShuffles <= 0))))) || (!(countDownPaused)))){
App.toGui.push([App.GUI_SHOW_SHUFFLE_PRESSED, null]);
};
}
public function getCountDownTicks():int{
return (countDownTicks);
}
public function addInput(_arg1:Array):void{
fromGui.push(_arg1);
}
public function layupFinished():void{
document.log(((((("layupFinished bonus score total " + totalBonus) + " ") + totalScore) + " ") + (totalBonus + totalScore)));
pauseGame();
lastRemoveTick = -1;
App.toGui.push([App.GUI_START_LEVEL_ANIMATION, null]);
}
public function gameOver(_arg1:int):void{
this.endReason = _arg1;
if (!countDownPaused){
pauseGame();
};
gameIsOver = true;
endTick = (currentTick + 1);
App.toGui.push([App.GUI_SHOW_GAME_OVER, [totalBonus, totalScore, _arg1]]);
document.addInputFromGameCore([App.THE_END]);
}
public function theEnd():void{
document.addInputFromGameCore([App.THE_END]);
document.log("theEnd");
document.gameOver((totalScore + totalBonus), endReason);
}
public function changeSelectedBrick(_arg1:int, _arg2:int):void{
App.toGui.push([App.GUI_CHANGE_SELECTED_TILE, [_arg1, _arg2]]);
}
public function removePair(_arg1:int, _arg2:int):void{
var _local3:int = addPointsForRemovingPair();
App.toGui.push([App.GUI_REMOVE_PAIR, [_arg1, _arg2, _local3, (totalScore + totalBonus)]]);
document.log(((((("remove " + _arg1) + " ") + _arg2) + " points ") + _local3));
}
public function selectFromScratch():void{
App.toGui.push([App.GUI_SELECT_FROM_SCRATCH, null]);
}
public function notMatch():void{
App.toGui.push([App.GUI_NOT_MATCH, null]);
}
public function notFree():void{
App.toGui.push([App.GUI_NOT_FREE, null]);
}
public function addPointsForRemovingPair():int{
var _local3:int;
var _local4:Number;
var _local5:int;
var _local1:int = App.REMOVE_PAIR_POINTS;
this.totalScore = (this.totalScore + _local1);
var _local2:int;
if (((!(document.relaxMode)) && (!((lastRemoveTick == -1))))){
_local3 = (currentTick - lastRemoveTick);
_local4 = (App.SECONDS_TO_DECREASE_BONUS_ONE_POINT * App.TICKS_PER_SECOND);
_local5 = Math.floor((_local3 / _local4));
_local2 = (App.REMOVE_PAIR_SPEED_BONUS - _local5);
_local2 = Math.max(0, _local2);
totalBonus = (totalBonus + _local2);
};
lastRemoveTick = currentTick;
return ((_local1 + _local2));
}
}
}//package com.king.midasmahjong
Section 10
//GameTimer (com.king.midasmahjong.GameTimer)
package com.king.midasmahjong {
import flash.utils.*;
public class GameTimer {
private var lastTime:Number;// = -1
private var ticksPerSecond:Number;
private var msPerTick:Number;
private var unprocessedTime:Number;// = 0
public var alpha:Number;// = 0
public var timeScale:Number;// = 1
public var passedTime:Number;// = 0
public static var currentTime:Number = 0;
public function GameTimer(_arg1:Number){
this.ticksPerSecond = _arg1;
msPerTick = (1000 / _arg1);
}
public function advanceTime():int{
if (lastTime == -1){
lastTime = getTimer();
};
var _local1:int = getTimer();
passedTime = (_local1 - lastTime);
passedTime = (passedTime * timeScale);
currentTime = (currentTime + passedTime);
lastTime = _local1;
unprocessedTime = (unprocessedTime + passedTime);
var _local2:int = int((unprocessedTime / msPerTick));
unprocessedTime = (unprocessedTime - (_local2 * msPerTick));
alpha = (unprocessedTime / msPerTick);
return (_local2);
}
public function getCurrentTime():int{
return (Math.ceil(GameTimer.currentTime));
}
}
}//package com.king.midasmahjong
Section 11
//GlideInLabel (com.king.midasmahjong.GlideInLabel)
package com.king.midasmahjong {
import flash.display.*;
public class GlideInLabel extends MovieClip implements Renderable {
public var textMc:MovieClip;
public var directionLeft:Boolean;
private var rightX:int;
private var leftX:int;
private var glideDistance:int;
private var margin:int;// = 7
private var xSpeed:Number;// = -5
private var xTemp:Number;
private var startTick:Number;// = -1
private var initialized:Boolean;// = false
public function GlideInLabel(){
glideDistance = textMc.textField.getLineMetrics(0).width;
rightX = ((x - width) + glideDistance);
x = rightX;
leftX = ((rightX - glideDistance) - margin);
}
public function render(_arg1:Number, _arg2:int):Boolean{
var _local3:Boolean;
xTemp = x;
if (directionLeft){
xTemp = (xTemp + xSpeed);
if (xTemp < leftX){
x = leftX;
_local3 = true;
} else {
x = Math.floor(xTemp);
};
} else {
xTemp = (xTemp - xSpeed);
if (xTemp > rightX){
x = rightX;
visible = false;
_local3 = true;
} else {
x = Math.floor(xTemp);
};
};
return (_local3);
}
}
}//package com.king.midasmahjong
Section 12
//Gui (com.king.midasmahjong.Gui)
package com.king.midasmahjong {
import flash.events.*;
import flash.media.*;
import flash.utils.*;
import flash.display.*;
import flash.text.*;
public class Gui extends MovieClip {
private const NR_OF_LEVELS:int = 5;
public var pileOfBricks:MahjongTiles;
public var top:MovieClip;
public var timeDisplay:TimeDisplay;
public var scoreDisplay:MovieClip;
public var shuffle:ShuffleButton;
public var timePopup:TextField;
public var introSign:MovieClip;
public var endSign:MovieClip;
public var levelAnimation1:LevelAnimation;
public var levelAnimation2:LevelAnimation;
public var levelAnimation3:LevelAnimation;
public var levelAnimation4:LevelAnimation;
public var levelAnimation5:LevelAnimation;
public var transitionGlow:RenderableMc;
public var background0:MovieClip;
public var background1:MovieClip;
public var background2:MovieClip;
public var background3:MovieClip;
public var background4:MovieClip;
public var exitBtn:MovieClip;
public var buttonPanel:MovieClip;
public var soundToggleBtn:MovieClip;
public var musicToggleBtn:MovieClip;
public var gameEnding:EndReasonSign;
public var bigInvisibleButton:MovieClip;
public var exitGlideInLabel:GlideInLabel;
public var soundGlideInLabel:GlideInLabel;
public var musicGlideInLabel:GlideInLabel;
public var document:Document;
private var actionHandler:TimedActionHandler;
private var timeFunc:Function;
private var objectsToRender:Array;
private var introStart:Date;
private var startDelayStart:Date;
private var showOutroTimer:Timer;
private var soundOn:Boolean;// = true
private var musicOn:Boolean;// = true
private var introSound:Sound;
private var introSoundChannel:SoundChannel;
private var introSoundTransform:SoundTransform;
private var loopSound:Sound;
private var loopSoundChannel:SoundChannel;
private var loopSoundTransform:SoundTransform;
private var outroSoundTransform:SoundTransform;
private var outroSound:Sound;
private var outroSoundChannel:SoundChannel;
private var currentGuiLevel:int;// = 0
private var levelAnimations:Array;
private var levelLoader:LevelLoader;
private var notLoadedLevels:Array;
private var allLevelImageNames:Array;
private var bonus:int;
private var score:int;
private var endReasonTimeIsUp:String;// = "not set"
private var endReasonNoMoves:String;// = "not set"
private var endReasonOpenGame:String;// = "not set"
private var endReasonRelaxNoShuffles:String;// = "not set"
private var gameRunning:Boolean;// = false
public function Gui(){
notLoadedLevels = [1, 2, 3, 4];
allLevelImageNames = [["bg1.jpg", "white1.png", "color1.png"], ["bg2.jpg", "white2.png", "color2.png"], ["bg3.jpg", "white3.png", "color3.png"], ["bg4.jpg", "white4.png", "color4.png"]];
super();
top.stop();
scoreDisplay.stop();
scoreDisplay.score.text = "0";
exitBtn.stop();
exitBtn.visible = false;
exitGlideInLabel.visible = false;
soundGlideInLabel.visible = false;
musicGlideInLabel.visible = false;
buttonPanel.visible = false;
musicToggleBtn.stop();
soundToggleBtn.stop();
endSign.visible = false;
background1.visible = false;
background2.visible = false;
background3.visible = false;
background4.visible = false;
levelAnimation2.visible = false;
levelAnimation3.visible = false;
levelAnimation4.visible = false;
levelAnimation5.visible = false;
transitionGlow.visible = false;
gameEnding.visible = false;
bigInvisibleButton.visible = false;
introSign.startBtnTf.mouseEnabled = false;
objectsToRender = new Array();
pileOfBricks.gui = this;
pileOfBricks.fixLayers();
pileOfBricks.createBricks();
levelAnimations = [levelAnimation1, levelAnimation2, levelAnimation3, levelAnimation4, levelAnimation5];
shuffle.addEventListener(MouseEvent.MOUSE_DOWN, shuffleMouseDown);
shuffle.addEventListener(MouseEvent.CLICK, shuffleClicked);
shuffle.addEventListener(MouseEvent.ROLL_OVER, shuffleRollOver);
shuffle.addEventListener(MouseEvent.ROLL_OUT, shuffleRollOut);
introSign.startButton.addEventListener(MouseEvent.CLICK, startDelay);
exitBtn.addEventListener(MouseEvent.CLICK, exitClicked);
exitBtn.addEventListener(MouseEvent.ROLL_OVER, showExitLabel);
exitBtn.addEventListener(MouseEvent.ROLL_OUT, hideExitLabel);
soundToggleBtn.addEventListener(MouseEvent.CLICK, toggleSound);
soundToggleBtn.addEventListener(MouseEvent.ROLL_OVER, showSoundLabel);
soundToggleBtn.addEventListener(MouseEvent.ROLL_OUT, hideSoundLabel);
musicToggleBtn.addEventListener(MouseEvent.CLICK, toggleMusic);
musicToggleBtn.addEventListener(MouseEvent.ROLL_OVER, showMusicLabel);
musicToggleBtn.addEventListener(MouseEvent.ROLL_OUT, hideMusicLabel);
introStart = new Date();
addEventListener("enterFrame", countDownIntro);
var _local1:Number = App.VOLUME_INTRO;
if (((!(soundOn)) || (!(musicOn)))){
_local1 = 0;
};
introSoundTransform = new SoundTransform(_local1);
introSound = new IntroSound();
introSoundChannel = introSound.play(0, 0, introSoundTransform);
}
public function newSetup(_arg1:Array):void{
pileOfBricks.newSetup(_arg1);
var _local2:* = new Timer(App.LOOP_SOUND_DELAY, 1);
_local2.addEventListener("timer", startLoopSound);
_local2.start();
}
public function showTimePenaltyGlow():void{
addRenderable(timeDisplay);
}
public function showTimePenaltyPopup(_arg1:Array):void{
timePopup.text = ("" + _arg1);
}
public function hideTimePenaltyPopup():void{
timePopup.text = "";
}
public function levelAnimationIsFinished():void{
document.addGuiInput([App.LEVEL_ANIMATION_FINISHED]);
}
public function setTextProperties(_arg1:XML):void{
var _local2:String;
var _local3:String;
var _local4:String;
var _local5:String;
var _local6:int;
for (_local2 in _arg1.text) {
_local3 = _arg1.text[_local2].@id;
_local4 = _arg1.text[_local2];
_local4 = _local4.replace(/ö/g, "ô");
switch (_local3){
case "intro_instruction":
introSign.introTf.text = _local4;
break;
case "intro_instruction_relax":
break;
case "intro_start":
introSign.startBtnTf.text = _local4;
break;
case "intro_countdown_text_first":
introSign.countDownText1.text = _local4;
break;
case "intro_countdown_text_last":
introSign.countDownText2.text = _local4;
break;
case "outro_game_over":
endSign.gameOverTextFields.gameOverLblMc.gameOverLbl.text = _local4;
break;
case "outro_score":
endSign.gameOverTextFields.gameOverSmallerTexts.scoreLbl.text = _local4;
break;
case "outro_time_bonus":
endSign.gameOverTextFields.gameOverSmallerTexts.timeBonusLbl.text = _local4;
break;
case "outro_total_score":
endSign.gameOverTextFields.gameOverSmallerTexts.totalScoreLbl.text = _local4;
break;
case "end_reason_time":
endReasonTimeIsUp = _local4;
break;
case "end_reason_no_move":
endReasonNoMoves = _local4;
break;
case "end_reason_relax_no_shuffles":
endReasonRelaxNoShuffles = _local4;
break;
case "end_reason_open_game":
endReasonOpenGame = _local4;
break;
case "button_exit":
exitGlideInLabel.textMc.textField.text = _local4;
break;
case "button_sound":
soundGlideInLabel.textMc.textField.text = _local4;
break;
case "button_music":
musicGlideInLabel.textMc.textField.text = _local4;
break;
case "button_shuffle":
_local5 = "";
_local6 = 0;
while (_local6 < (_local4.length - 1)) {
_local5 = (_local5 + (_local4.charAt(_local6) + "\n"));
_local6++;
};
_local5 = (_local5 + _local4.charAt(_local6));
shuffle.textField.text = _local5;
break;
case "lamp_time":
timeDisplay.label.text = _local4;
break;
case "lamp_shuffles":
break;
case "lamp_score":
scoreDisplay.label.text = _local4;
break;
default:
trace(("Error in Gui.setTextProperties, id with no match: " + _local3));
};
};
}
public function changeBackground():void{
var _local3:SoundTransform;
var _local4:Sound;
var _local5:SoundChannel;
if (soundOn){
_local3 = new SoundTransform(App.VOLUME_LAYUP_ANIMATION_BURNOUT);
_local4 = new LayupCleared();
_local5 = _local4.play(0, 0, _local3);
};
currentGuiLevel++;
if (currentGuiLevel >= NR_OF_LEVELS){
currentGuiLevel = 0;
};
background0.visible = false;
background1.visible = false;
background2.visible = false;
background3.visible = false;
background4.visible = false;
var _local1:MovieClip = this[("background" + currentGuiLevel)];
_local1.visible = true;
top.gotoAndStop((currentGuiLevel + 1));
scoreDisplay.gotoAndStop((currentGuiLevel + 1));
timeDisplay.gotoAndStop((currentGuiLevel + 1));
var _local2:LevelAnimation = LevelAnimation(levelAnimations[currentGuiLevel]);
_local2.visible = true;
}
public function countDownIntro(_arg1:Event):void{
var _local2:Date;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Date;
var _local7:int;
var _local8:int;
if (startDelayStart == null){
_local2 = new Date();
_local3 = (_local2.time - introStart.time);
_local4 = (App.INTRO_MILLISEC - _local3);
_local5 = (_local4 / 1000);
introSign.countDownDigitTF.text = ("" + _local5);
if (_local4 <= 0){
startDelay(_arg1);
};
} else {
_local6 = new Date();
_local7 = (_local6.time - startDelayStart.time);
_local8 = (App.START_DELAY_MILLISEC - _local7);
if (_local8 < 0){
startGame(_arg1);
};
};
}
public function startDelay(_arg1:Event):void{
var _local2:SoundFader;
var _local3:SoundTransform;
var _local4:Sound;
var _local5:SoundChannel;
startDelayStart = new Date();
if (((soundOn) && (musicOn))){
_local2 = new SoundFader(introSoundChannel, 300, this);
} else {
introSoundChannel.stop();
};
if (soundOn){
_local3 = new SoundTransform(App.VOLUME_INTRO);
_local4 = new GongSnd();
_local5 = _local4.play(0, 0, _local3);
};
introSign.startButton.removeEventListener(MouseEvent.CLICK, startGame);
}
public function startGame(_arg1:Event):void{
introSign.visible = false;
exitBtn.visible = true;
buttonPanel.visible = true;
removeEventListener("enterFrame", countDownIntro);
document.startGame();
if (!document.relaxMode){
addRenderable(timeDisplay);
};
}
public function stopMusic():void{
if (loopSoundChannel != null){
loopSoundChannel.soundTransform = new SoundTransform(0);
};
if (introSoundChannel != null){
introSoundChannel.soundTransform = new SoundTransform(0);
};
if (outroSoundChannel != null){
outroSoundChannel.soundTransform = new SoundTransform(0);
};
}
public function startMusic():void{
if (((soundOn) && (musicOn))){
if (loopSoundChannel != null){
loopSoundChannel.soundTransform = new SoundTransform(App.VOLUME_LOOP);
};
if (introSoundChannel != null){
introSoundChannel.soundTransform = new SoundTransform(App.VOLUME_LOOP);
};
if (outroSoundChannel != null){
outroSoundChannel.soundTransform = new SoundTransform(App.VOLUME_LOOP);
};
};
}
public function getPanning():Number{
var _local1:int = (App.STAGE_WIDTH / 2);
var _local2:Number = (mouseX - _local1);
var _local3:* = App.STEREO_INTENSITY;
return (((_local2 / _local1) * _local3));
}
public function startLoopSound(_arg1:Event=null):void{
introSound = null;
var _local2:Number = App.VOLUME_LOOP;
if (((!(soundOn)) || (!(musicOn)))){
_local2 = 0;
};
loopSoundTransform = new SoundTransform(_local2);
loopSound = new LoopSnd();
loopSoundChannel = loopSound.play(0, int.MAX_VALUE, loopSoundTransform);
}
public function soundFaderCompleted(_arg1:SoundFader):void{
if (_arg1.soundChannel == loopSoundChannel){
loopSound = null;
loopSoundChannel = null;
};
}
private function shuffleMouseDown(_arg1:MouseEvent):void{
if (gameRunning){
document.addGuiInput([App.INPUT_SHUFFLE_DOWN]);
};
}
private function shuffleClicked(_arg1:MouseEvent):void{
if (gameRunning){
setGameRunning(false);
document.addGuiInput([App.INPUT_SHUFFLE_CLICKED]);
};
}
private function shuffleRollOver(_arg1:MouseEvent):void{
if (gameRunning){
document.addGuiInput([App.INPUT_SHUFFLE_ROLL_OVER]);
};
}
private function shuffleRollOut(_arg1:MouseEvent):void{
document.addGuiInput([App.INPUT_SHUFFLE_ROLL_OUT]);
}
private function exitClicked(_arg1:MouseEvent):void{
exitBtn.visible = false;
buttonPanel.visible = false;
document.addGuiInput([App.INPUT_EXIT]);
}
private function showExitLabel(_arg1:MouseEvent):void{
exitGlideInLabel.visible = true;
exitGlideInLabel.directionLeft = true;
addRenderable(exitGlideInLabel);
}
private function hideExitLabel(_arg1:MouseEvent):void{
exitGlideInLabel.directionLeft = false;
addRenderable(exitGlideInLabel);
}
private function showSoundLabel(_arg1:MouseEvent):void{
soundGlideInLabel.visible = true;
soundGlideInLabel.directionLeft = true;
addRenderable(soundGlideInLabel);
}
private function hideSoundLabel(_arg1:MouseEvent):void{
soundGlideInLabel.directionLeft = false;
addRenderable(soundGlideInLabel);
}
private function showMusicLabel(_arg1:MouseEvent):void{
musicGlideInLabel.visible = true;
musicGlideInLabel.directionLeft = true;
addRenderable(musicGlideInLabel);
}
private function hideMusicLabel(_arg1:MouseEvent):void{
musicGlideInLabel.directionLeft = false;
addRenderable(musicGlideInLabel);
}
private function toggleSound(_arg1:MouseEvent):void{
soundOn = !(soundOn);
if (soundOn){
soundToggleBtn.gotoAndStop("normal");
startMusic();
} else {
soundToggleBtn.gotoAndStop("off");
stopMusic();
};
}
private function toggleMusic(_arg1:MouseEvent):void{
musicOn = !(musicOn);
if (musicOn){
musicToggleBtn.gotoAndStop("normal");
startMusic();
} else {
musicToggleBtn.gotoAndStop("off");
stopMusic();
};
}
public function removeRenderable(_arg1:Renderable):void{
var _local2:int = objectsToRender.indexOf(_arg1, 0);
objectsToRender.splice(_local2, 1);
}
public function addRenderable(_arg1:Renderable):void{
var _local2:int = objectsToRender.indexOf(_arg1, 0);
if (_local2 == -1){
objectsToRender.push(_arg1);
};
}
public function setTimeFunc(_arg1:Function):void{
this.timeFunc = _arg1;
actionHandler = new TimedActionHandler(_arg1);
}
public function render(_arg1:Number, _arg2:int):void{
var _local4:Array;
var _local5:int;
var _local6:Array;
var _local7:Renderable;
var _local8:*;
actionHandler.update(timeFunc());
while (App.toGui.length > 0) {
_local4 = App.toGui.shift();
_local5 = int(_local4[0]);
_local6 = _local4[1];
switch (_local5){
case App.GUI_CHANGE_SELECTED_TILE:
changeSelectedBrick(_local6);
break;
case App.GUI_REMOVE_PAIR:
removePair(_local6);
break;
case App.GUI_HIDE_ROLL_OVER:
hideRollOver(_local6);
break;
case App.GUI_SHOW_ROLL_OVER:
showRollOver(_local6);
break;
case App.GUI_RELAX_SHUFFLE_PENALTY:
relaxShufflePenalty(_local6);
break;
case App.GUI_UPDATE_TIME:
timeDisplay.update(_local6);
break;
case App.GUI_SHOW_TIME_WARNING:
showTimeWarning();
break;
case App.GUI_SHOW_GAME_OVER:
showGameOver(_local6);
break;
case App.GUI_NEXT_LAYUP_START:
nextLayupStart();
break;
case App.GUI_SET_GAME_RUNNING:
setGameRunning(Boolean(_local6[0]));
break;
case App.GUI_SHOW_SHUFFLE_PRESSED:
showShufflePressed();
break;
case App.GUI_SHOW_SHUFFLE_RELEASED:
showShuffleReleased();
break;
case App.GUI_SHUFFLE_BTN_GLIDE_IN:
shuffleGlideIn();
break;
case App.GUI_SHUFFLE_BTN_GLIDE_OUT:
shuffleGlideOut();
break;
case App.GUI_DISABLE_SHUFFLE:
disableShuffle();
break;
case App.GUI_START_LEVEL_ANIMATION:
startLevelAnimation();
break;
case App.GUI_START_NEW_LAYUP_ANIMATION:
newLayup(_local6);
break;
case App.GUI_START_SHUFFLE_ANIMATION:
startShuffleAnimation(_local6);
break;
case App.GUI_NOT_MATCH:
notMatch();
break;
case App.GUI_NOT_FREE:
notFree();
break;
case App.GUI_SELECT_FROM_SCRATCH:
selectFromScratch();
break;
default:
trace(("Error in Gui.render: invalid type: " + _local5));
};
};
var _local3:int = (objectsToRender.length - 1);
while (_local3 >= 0) {
_local7 = Renderable(objectsToRender[_local3]);
_local8 = _local7.render(_arg1, _arg2);
if (_local8){
removeRenderable(_local7);
if ((_local7 is ScorePopup)){
removeChild(ScorePopup(_local7));
};
};
_local3--;
};
}
public function changeSelectedBrick(_arg1:Array):void{
pileOfBricks.changeSelectedBrick(_arg1);
}
public function removePair(_arg1:Array):void{
var _local5:SoundTransform;
var _local6:Sound;
var _local7:SoundChannel;
var _local2:int = int(_arg1.pop());
scoreDisplay.score.text = ("" + _local2);
var _local3:int = int(_arg1.pop());
var _local4:ScorePopup = new ScorePopup();
_local4.mouseEnabled = false;
_local4.textField.text = ("" + _local3);
_local4.x = mouseX;
_local4.y = mouseY;
addChild(_local4);
addRenderable(_local4);
pileOfBricks.removePair(_arg1);
if (soundOn){
_local5 = new SoundTransform(App.VOLUME_REMOVE_PAIR, getPanning());
_local6 = new RemovePair();
_local7 = _local6.play(0, 0, _local5);
};
}
public function hideRollOver(_arg1:Array):void{
var _local2:int = int(_arg1[0]);
pileOfBricks.hideRollOver(_local2);
}
public function showRollOver(_arg1:Array):void{
var _local2:int = int(_arg1[0]);
pileOfBricks.showRollOver(_local2);
}
public function relaxShufflePenalty(_arg1:Array):void{
var _local2:int = int(_arg1.pop());
scoreDisplay.score.text = ("" + _local2);
}
public function showTimeWarning():void{
var _local1:SoundTransform;
var _local2:Sound;
var _local3:SoundChannel;
if (soundOn){
_local1 = new SoundTransform(App.VOLUME_TIME_WARNING);
_local2 = new TimeWarningSnd();
_local3 = _local2.play(0, 0, _local1);
};
timeDisplay.glowRepeats = int.MAX_VALUE;
addRenderable(timeDisplay);
}
public function showGameOver(_arg1:Array):void{
var _local3:SoundFader;
var _local4:SoundTransform;
var _local5:Sound;
var _local6:SoundChannel;
exitBtn.visible = false;
bonus = int(_arg1[0]);
score = int(_arg1[1]);
var _local2:int = int(_arg1[2]);
if (loopSoundChannel != null){
if (((soundOn) && (musicOn))){
_local3 = new SoundFader(loopSoundChannel, App.LOOP_SOUND_FADOUT, this);
loopSound = null;
} else {
loopSoundChannel.stop();
};
};
if (_local2 == App.USER_CHOSE_EXIT){
showOutro(null);
} else {
if (soundOn){
_local4 = new SoundTransform(App.VOLUME_GAME_OVER);
_local5 = new GameOverSnd();
_local6 = _local5.play(0, 0, _local4);
_local6.addEventListener(Event.SOUND_COMPLETE, startOutroSound);
};
if (_local2 == App.NO_MORE_MOVES){
gameEnding.textMc.textField.text = endReasonNoMoves;
gameEnding.openGameTextMc.visible = false;
} else {
if (_local2 == App.TIME_RAN_OUT){
gameEnding.textMc.textField.text = endReasonTimeIsUp;
gameEnding.openGameTextMc.visible = false;
} else {
if (_local2 == App.SHORT_GAME_END){
gameEnding.openGameTextMc.textField.text = endReasonOpenGame;
gameEnding.textMc.visible = false;
} else {
if (_local2 == App.RELAX_0_SHUFFLES){
gameEnding.textMc.textField.text = endReasonRelaxNoShuffles;
gameEnding.openGameTextMc.visible = false;
};
};
};
};
gameEnding.visible = true;
addRenderable(gameEnding);
showOutroTimer = new Timer(App.END_REASON_SHOW_MILLISEC, 1);
showOutroTimer.addEventListener("timerComplete", showOutro);
showOutroTimer.start();
timeDisplay.glowRepeats = 0;
};
}
public function startOutroSound(_arg1:Event):void{
var _local2:Number;
if (outroSoundChannel == null){
_local2 = App.VOLUME_OUTRO;
if (((!(soundOn)) || (!(musicOn)))){
_local2 = 0;
};
outroSoundTransform = new SoundTransform(_local2);
outroSound = new OutroSnd();
outroSoundChannel = outroSound.play(0, 0, outroSoundTransform);
};
}
public function showOutro(_arg1:Event):void{
if (showOutroTimer != null){
showOutroTimer.stop();
};
var _local2:Timer = new Timer(App.MINIMAL_GAME_QUIT_DELAY, 1);
_local2.addEventListener("timerComplete", activateQuitButton);
_local2.start();
startOutroSound(null);
endSign.visible = true;
buttonPanel.visible = false;
endSign.gameOverTextFields.gameOverSmallerTexts.scoreDigitTf.text = ("" + score);
endSign.gameOverTextFields.gameOverSmallerTexts.timeBonusDigitTf.text = ("" + bonus);
endSign.gameOverTextFields.gameOverSmallerTexts.totalScoreDigitTf.text = ("" + (score + bonus));
endSign.addEventListener(MouseEvent.CLICK, document.gameQuit);
if (document.relaxMode){
endSign.gameOverTextFields.gameOverSmallerTexts.timeBonusDigitTf.visible = false;
endSign.gameOverTextFields.gameOverSmallerTexts.totalScoreDigitTf.visible = false;
endSign.gameOverTextFields.gameOverSmallerTexts.timeBonusLbl.visible = false;
endSign.gameOverTextFields.gameOverSmallerTexts.totalScoreLbl.visible = false;
endSign.gameOverTextFields.gameOverLblMc.gameOverLbl.y = (endSign.gameOverTextFields.gameOverLblMc.gameOverLbl.y + 70);
endSign.gameOverTextFields.gameOverSmallerTexts.scoreLbl.y = (endSign.gameOverTextFields.gameOverSmallerTexts.scoreLbl.y + 120);
endSign.gameOverTextFields.gameOverSmallerTexts.scoreDigitTf.y = (endSign.gameOverTextFields.gameOverSmallerTexts.scoreDigitTf.y + 120);
};
}
public function activateQuitButton(_arg1:Event):void{
bigInvisibleButton.visible = true;
bigInvisibleButton.addEventListener(MouseEvent.CLICK, document.gameQuit);
}
public function nextLayupStart():void{
if (!document.relaxMode){
timeDisplay.glowRepeats = 1;
addRenderable(timeDisplay);
};
startLoopSound();
}
public function setGameRunning(_arg1:Boolean):void{
gameRunning = _arg1;
}
public function showShufflePressed():void{
shuffle.gotoAndStop(2);
}
public function showShuffleReleased():void{
shuffle.gotoAndStop(1);
}
public function shuffleGlideIn():void{
shuffle.rolledOver = true;
addRenderable(shuffle);
}
public function shuffleGlideOut():void{
shuffle.rolledOver = false;
shuffle.gotoAndStop(1);
addRenderable(shuffle);
}
public function disableShuffle():void{
shuffle.removeEventListener(MouseEvent.MOUSE_DOWN, shuffleMouseDown);
shuffle.removeEventListener(MouseEvent.CLICK, shuffleClicked);
shuffle.removeEventListener(MouseEvent.ROLL_OVER, shuffleRollOver);
shuffle.removeEventListener(MouseEvent.ROLL_OUT, shuffleRollOut);
shuffleGlideOut();
}
public function startLevelAnimation():void{
var _local2:SoundFader;
var _local3:SoundTransform;
var _local4:Sound;
var _local5:SoundChannel;
var _local1:LevelAnimation = LevelAnimation(levelAnimations[currentGuiLevel]);
_local1.initialize(this);
addRenderable(_local1);
if (((soundOn) && (musicOn))){
_local2 = new SoundFader(loopSoundChannel, App.LOOP_SOUND_FADOUT, this);
};
if (soundOn){
_local3 = new SoundTransform(App.VOLUME_LAYUP_CLEARED);
_local4 = new LayupAnimationBurnoutSnd();
_local5 = _local4.play(0, 0, _local3);
};
transitionGlow.gotoAndStop(0);
transitionGlow.visible = true;
transitionGlow.alpha = 1;
transitionGlow.initialize();
addRenderable(transitionGlow);
}
public function newLayup(_arg1:Array):void{
var _local2:Array = _arg1[0];
pileOfBricks.shuffle(_local2);
}
public function startShuffleAnimation(_arg1:Array):void{
var _local10:TimedAction;
var _local11:int;
var _local12:SoundTransform;
var _local13:Sound;
var _local14:SoundChannel;
var _local15:SoundTransform;
var _local16:Sound;
var _local17:SoundChannel;
var _local18:int;
var _local19:int;
var _local20:int;
var _local21:int;
var _local2:Array = _arg1[0];
var _local3:Array = _arg1[1];
var _local4:Array = _arg1[2];
var _local5:Array = _arg1[3];
var _local6:Array = _arg1[4];
var _local7:int = timeFunc();
var _local8:Array = new Array();
var _local9:int;
if (_local2 != null){
if (soundOn){
_local12 = new SoundTransform(App.VOLUME_SHUFFLE_LOOSE_TIME);
_local13 = new ShuffleLooseTime();
_local14 = _local13.play(0, 0, _local12);
};
_local10 = new TimedAction(_local7, _local9, pileOfBricks.showPossibleMove, _local2, 1);
_local8.push(_local10);
if (!document.relaxMode){
_local10 = new TimedAction(_local7, _local9, showTimePenaltyGlow, null, 1);
_local8.push(_local10);
};
_local11 = Math.floor((App.SHOW_A_POSSIBLE_MOVE_MS / 3));
_local9 = (_local9 + _local11);
if (!document.relaxMode){
_local10 = new TimedAction(_local7, _local9, timeDisplay.timePenaltyUpdate, _local3, 1);
_local8.push(_local10);
};
_local9 = (_local9 + _local11);
if (!document.relaxMode){
_local10 = new TimedAction(_local7, _local9, timeDisplay.timePenaltyHide, null, 1);
_local8.push(_local10);
};
_local9 = (_local9 + _local11);
_local10 = new TimedAction(_local7, _local9, pileOfBricks.hidePossibleMove, _local2, 1);
_local8.push(_local10);
} else {
if (soundOn){
_local15 = new SoundTransform(App.VOLUME_SHUFFLE);
_local16 = new ShuffleSnd();
_local17 = _local16.play(0, 0, _local15);
};
};
if (_local5.length > 0){
_local10 = new TimedAction(_local7, _local9, pileOfBricks.shuffle, _local5, 1);
_local8.push(_local10);
_local18 = _local6.length;
_local19 = App.REDRAW_A_BRICK_MS;
_local20 = 0;
while (_local20 < _local18) {
_local9 = (_local9 + _local19);
_local21 = Number(_local6[_local20][0]);
_local10 = new TimedAction(_local7, _local9, pileOfBricks.showBrick, [_local21], 1);
_local8.push(_local10);
_local20++;
};
};
_local10 = new TimedAction(_local7, _local9, document.addGuiInput, [App.SHUFFLE_ANIMATION_FINISHED], 1);
_local8.push(_local10);
actionHandler.add(_local8);
}
public function notMatch():void{
var _local1:SoundTransform;
var _local2:Sound;
var _local3:SoundChannel;
if (soundOn){
_local1 = new SoundTransform(App.VOLUME_NOT_MATCH, getPanning());
_local2 = new NotMatch();
_local3 = _local2.play(0, 0, _local1);
};
}
public function notFree():void{
var _local1:SoundTransform;
var _local2:Sound;
var _local3:SoundChannel;
if (soundOn){
_local1 = new SoundTransform(App.VOLUME_NOT_FREE, getPanning());
_local2 = new NotFree();
_local3 = _local2.play(0, 0, _local1);
};
}
public function selectFromScratch():void{
var _local1:SoundTransform;
var _local2:Sound;
var _local3:SoundChannel;
if (soundOn){
_local1 = new SoundTransform(App.VOLUME_CLICK, getPanning());
_local2 = new ClickTile();
_local3 = _local2.play(0, 0, _local1);
};
}
public function getGameRunning():Boolean{
return (gameRunning);
}
}
}//package com.king.midasmahjong
Section 13
//Integer64 (com.king.midasmahjong.Integer64)
package com.king.midasmahjong {
import com.king.midasmahjong.*;
class Integer64 {
private var p:Array;
private var r:Array;
private var s:Array;
function Integer64(_arg1){
r = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]];
p = [0, 0, 0, 0, 0];
s = [0, 0, 0];
if (_arg1){
merge(_arg1);
};
}
public function init(_arg1:Integer64):void{
var _local2:* = 0;
while (_local2 < p.length) {
p[_local2] = _arg1.p[_local2];
_local2++;
};
}
public function init32(_arg1:Number):void{
p[0] = (_arg1 & 32767);
_arg1 = (_arg1 >>> 15);
p[1] = (_arg1 & 32767);
_arg1 = (_arg1 >>> 15);
p[2] = (_arg1 & 3);
p[3] = 0;
p[4] = 0;
}
public function get lsb():Number{
return (((p[0] | (p[1] << 15)) | ((p[2] & 3) << 30)));
}
public function get msb():Number{
return (((((p[2] >> 2) | ((p[3] << 15) >> 2)) | ((p[4] << (15 * 2)) >> 2)) & 2147483647));
}
public function binaryShiftLeft(_arg1:Number):void{
var _local2:* = 0;
while (_local2 < _arg1) {
shl();
_local2++;
};
}
public function binaryShiftRight(_arg1:Number):void{
var _local5:*;
var _local6:*;
var _local2:* = ((_arg1 / 15) >> 0);
var _local3:* = (_arg1 - (_local2 * 15));
var _local4:* = (p.length - 1);
while (_local4 > 0) {
_local5 = 0;
while (_local5 < _local2) {
p[_local5] = p[(_local5 + 1)];
_local5++;
};
var _temp1 = _local4;
_local4 = (_local4 - 1);
var _local7 = _temp1;
p[_local7] = 0;
};
if (_local3 > 0){
_local6 = 0;
while (_local6 < _local3) {
shr();
_local6++;
};
};
}
public function binaryNot(_arg1:Integer64):void{
p[0] = (p[0] ^ _arg1.p[0]);
p[1] = (p[1] ^ _arg1.p[1]);
p[2] = (p[2] ^ _arg1.p[2]);
p[3] = (p[3] ^ _arg1.p[3]);
p[4] = (p[4] ^ _arg1.p[4]);
}
public function add64(_arg1:Integer64):void{
var _local2:* = 0;
var _local3:* = 1;
var _local4:* = 0;
while ((((_local3 < p.length)) && (!((_arg1.p[_local4] == 0))))) {
_local3++;
};
_local4 = 0;
while (_local4 < _local3) {
_local2 = (_local2 + (p[_local4] + _arg1.p[_local4]));
p[_local4] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local4++;
};
}
public function add32(_arg1:Number):void{
var _local2:* = 0;
var _local3:* = (_arg1 & 32767);
_arg1 = (_arg1 >> 15);
var _local4:* = (_arg1 & 32767);
_arg1 = (_arg1 >> 15);
var _local5:* = (_arg1 & 3);
_local2 = (_local2 + (p[0] + _local3));
p[0] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (p[1] + _local4));
p[1] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (p[2] + _local5));
p[2] = (_local2 & 32767);
}
public function mulu32(_arg1:Number):void{
var _local4:*;
var _local2:* = 0;
s[0] = (_arg1 & 32767);
_arg1 = (_arg1 >>> 15);
s[1] = (_arg1 & 32767);
_arg1 = (_arg1 >>> 15);
s[2] = (_arg1 & 3);
var _local3:* = 0;
while (_local3 < 3) {
_local4 = s[_local3];
_local2 = (_local4 * p[0]);
r[_local3][0] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (_local4 * p[1]));
r[_local3][1] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (_local4 * p[2]));
r[_local3][2] = (_local2 & 3);
_local3++;
};
_local2 = r[0][0];
p[0] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (r[0][1] + r[1][0]));
p[1] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + ((r[0][2] + r[1][1]) + r[2][0]));
p[2] = (_local2 & 3);
p[3] = 0;
p[4] = 0;
}
public function mul64(_arg1:Integer64):void{
var _local4:*;
var _local2:* = 0;
var _local3:* = 0;
while (_local3 < 5) {
_local4 = _arg1.p[_local3];
_local2 = (_local4 * p[0]);
r[_local3][0] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (_local4 * p[1]));
r[_local3][1] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (_local4 * p[2]));
r[_local3][2] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (_local4 * p[3]));
r[_local3][3] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (_local4 * p[4]));
r[_local3][4] = (_local2 & 32767);
_local3++;
};
_local2 = r[0][0];
p[0] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (r[0][1] + r[1][0]));
p[1] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + ((r[0][2] + r[1][1]) + r[2][0]));
p[2] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + (((r[0][3] + r[1][2]) + r[2][1]) + r[3][0]));
p[3] = (_local2 & 32767);
_local2 = (_local2 >> 15);
_local2 = (_local2 + ((((r[0][4] + r[1][3]) + r[2][2]) + r[3][1]) + r[4][0]));
p[4] = (_local2 & 7);
}
public function mul32(_arg1:Number):void{
mul64(new Integer64(_arg1));
}
private function merge(_arg1:Number):Number{
var _local2:* = 0;
while (_local2 < 3) {
p[_local2] = (p[_local2] + (_arg1 & 32767));
_arg1 = (_arg1 >>> 15);
_local2++;
};
return (_arg1);
}
private function shl():void{
var _local1:* = 0;
var _local2:* = 0;
var _local3:* = 0;
var _local4:* = p.length;
while (_local3 < _local4) {
_local1 = ((p[_local3] & 0x4000) >> 14);
p[_local3] = (p[_local3] << 1);
p[_local3] = ((p[_local3] | _local2) & 32767);
_local3++;
_local2 = _local1;
};
}
private function shr():void{
var _local1:* = 0;
var _local2:* = 0;
var _local3:* = (p.length - 1);
while (_local3 >= 0) {
_local1 = ((p[_local3] & 1) << 14);
p[_local3] = (p[_local3] >> 1);
p[_local3] = ((p[_local3] | _local2) & 32767);
_local3--;
_local2 = _local1;
};
}
}
}//package com.king.midasmahjong
Section 14
//LevelAnimation (com.king.midasmahjong.LevelAnimation)
package com.king.midasmahjong {
import flash.display.*;
public class LevelAnimation extends MovieClip implements Renderable {
public var glow:MovieClip;
public var outline:MovieClip;
public var color:MovieClip;
private var colorAlphaStart:int;// = 22
private var colorAlphaEnd:int;// = 60
private var colorFadeInSpeed:Number;
private var glowStart:int;// = 60
private var glowEnd:int;// = 95
private var glowFadeInSpeed:Number;
private var gui:Gui;
private var backgroundChangeIsPassed:Boolean;// = false
private var backgroundChange:int;// = 105
private var startTick:Number;
public function LevelAnimation(){
colorFadeInSpeed = (1 / (colorAlphaEnd - colorAlphaStart));
color.visible = false;
glowFadeInSpeed = (1 / (glowEnd - glowStart));
glow.visible = false;
glow.blendMode = BlendMode.ADD;
}
public function initialize(_arg1:Gui){
this.gui = _arg1;
this.startTick = -1;
color.alpha = 0;
glow.alpha = 0;
color.visible = true;
glow.visible = true;
visible = true;
backgroundChangeIsPassed = false;
}
public function render(_arg1:Number, _arg2:int):Boolean{
if (startTick == -1){
startTick = (_arg2 + _arg1);
};
var _local3:Number = ((_arg2 + _arg1) - startTick);
var _local4:int = (_local3 * App.MOVIE_CLIP_FRAMES_PER_GAME_TICK);
var _local5:Boolean;
if (((!(backgroundChangeIsPassed)) && ((_local4 >= backgroundChange)))){
_local4 = backgroundChange;
backgroundChangeIsPassed = true;
};
if (_local4 > backgroundChange){
visible = false;
color.alpha = 0;
glow.alpha = 0;
gui.changeBackground();
backgroundChangeIsPassed = false;
gui.levelAnimationIsFinished();
_local5 = true;
};
animateGlow(_local4);
animateColor(_local4);
return (_local5);
}
public function animateGlow(_arg1:int):void{
var _local4:Number;
var _local2:int = (_arg1 - glowStart);
var _local3:int = (glowEnd - glowStart);
if ((((_local2 > 0)) && ((_local2 < (_local3 + 1))))){
_local4 = (_local2 * glowFadeInSpeed);
glow.alpha = Math.min(_local4, 1);
};
}
public function animateColor(_arg1:int):void{
var _local4:Number;
var _local2:int = (_arg1 - colorAlphaStart);
var _local3:int = (colorAlphaEnd - colorAlphaStart);
if ((((_local2 > 0)) && ((_local2 < (_local3 + 1))))){
_local4 = (_local2 * colorFadeInSpeed);
color.alpha = Math.min(_local4, 1);
};
}
}
}//package com.king.midasmahjong
Section 15
//LevelLoader (com.king.midasmahjong.LevelLoader)
package com.king.midasmahjong {
import flash.events.*;
import flash.utils.*;
import flash.display.*;
public class LevelLoader {
private var path:String;
private var imageNames:Array;
private var clips:Array;
private var completed:Boolean;// = false
private var retryLoader:RetryLoader;
private var loadTimer:Timer;
private static var TIMER_MILLISEC:int = 1000;
public function LevelLoader(_arg1:String, _arg2:Array, _arg3:Array):void{
this.path = _arg1;
this.imageNames = _arg2;
this.clips = _arg3;
if ((((_arg2.length > 0)) && ((_arg2.length == _arg3.length)))){
loadTimer = new Timer(200, int.MAX_VALUE);
loadTimer.addEventListener("timer", loadHandler);
loadNext();
} else {
trace("Error in LevelLoader");
};
}
private function loadNext():void{
var _local1:String = String(imageNames.shift());
if (((!((_local1 == null))) && (!((_local1 == "undefined"))))){
retryLoader = new RetryLoader((path + _local1));
retryLoader.load();
loadTimer.start();
} else {
completed = true;
};
}
public function loadHandler(_arg1:Event):void{
var _local2:Bitmap;
var _local3:Array;
var _local4:MovieClip;
var _local5:Bitmap;
if (retryLoader.failed){
loadTimer.stop();
trace(("LevelLoader, retryLoader Error: " + retryLoader.lastError));
} else {
if (retryLoader.progress == 100){
loadTimer.stop();
_local2 = Bitmap(retryLoader.loader.content);
_local3 = clips.shift();
while (_local3.length > 0) {
_local4 = MovieClip(_local3.shift());
_local5 = new Bitmap(_local2.bitmapData);
_local4.addChild(_local5);
};
loadNext();
};
};
}
public function isCompleted():Boolean{
return (completed);
}
}
}//package com.king.midasmahjong
Section 16
//MahjongCore (com.king.midasmahjong.MahjongCore)
package com.king.midasmahjong {
public class MahjongCore {
private var document:Document;
private var space:Array;
private var bricks:Array;
private var bricksInPlay:Array;
private var selectedBrick:int;// = -1
private var gameCore:GameCore;
public static const SPACE_WIDTH:int = 30;
public static const SPACE_HEIGHT:int = 16;
public static const SPACE_DEPTH:int = 5;
public static const NO_BRICKS:int = 144;
public static const EMPTY:int = -1;
public static const LAST_4_TUPLE:int = 135;
private static const MAX_SHUFFLE_ITERATIONS:int = 1000;
public function MahjongCore(_arg1:GameCore, _arg2:String, _arg3:Document){
this.gameCore = _arg1;
this.document = _arg3;
var _local4:Array = Coder.decode(_arg2).split("");
initBricksInPlay();
shuffle(_local4, MahjongCore.MAX_SHUFFLE_ITERATIONS);
}
private function initSpace():void{
var _local2:int;
var _local3:int;
space = new Array(MahjongCore.SPACE_DEPTH);
var _local1:int;
while (_local1 < MahjongCore.SPACE_DEPTH) {
space[_local1] = new Array(MahjongCore.SPACE_HEIGHT);
_local2 = 0;
while (_local2 < MahjongCore.SPACE_HEIGHT) {
space[_local1][_local2] = new Array(MahjongCore.SPACE_WIDTH);
_local3 = 0;
while (_local3 < MahjongCore.SPACE_WIDTH) {
space[_local1][_local2][_local3] = MahjongCore.EMPTY;
_local3++;
};
_local2++;
};
_local1++;
};
}
private function initBricksInPlay():void{
bricksInPlay = new Array(MahjongCore.NO_BRICKS);
var _local1:int;
while (_local1 < MahjongCore.NO_BRICKS) {
bricksInPlay[_local1] = _local1;
_local1++;
};
}
public function logBricksInPlay():void{
var _local1 = "";
var _local2:int;
while (_local2 < bricksInPlay.length) {
_local1 = (_local1 + (" " + bricksInPlay[_local2]));
_local2++;
};
document.log(_local1);
}
private function shuffle(_arg1:Array, _arg2:int):void{
var _local7:Array;
var _local8:int;
var _local9:int;
var _local10:int;
initSpace();
bricksInPlay = Util.randomizeArray(gameCore.rand, bricksInPlay);
document.log("shuffled:");
logBricksInPlay();
bricks = new Array(MahjongCore.NO_BRICKS);
var _local3:int;
while (_local3 < MahjongCore.NO_BRICKS) {
_local7 = [MahjongCore.EMPTY, MahjongCore.EMPTY, MahjongCore.EMPTY];
bricks[_local3] = _local7;
_local3++;
};
var _local4:int;
var _local5:int;
var _local6:int;
while (_local6 < MahjongCore.SPACE_DEPTH) {
_local8 = 0;
while (_local8 < MahjongCore.SPACE_HEIGHT) {
_local9 = 0;
while (_local9 < MahjongCore.SPACE_WIDTH) {
var _temp1 = _local4;
_local4 = (_local4 + 1);
if (String(_arg1[_temp1]) == "1"){
if (positionHasRoom(_local6, _local8, _local9)){
var _temp2 = _local5;
_local5 = (_local5 + 1);
_local10 = int(bricksInPlay[_temp2]);
putBrickInPosition(_local10, _local6, _local8, _local9);
} else {
trace(((((("error MajongCore.SetUpArrays position in layout was hindered!" + _local6) + " ") + _local8) + " ") + _local9));
};
};
_local9++;
};
_local8++;
};
_local6++;
};
if (!isValid()){
document.log("**** Error, MahjongCore is not valid ****");
};
if ((((getPossibleMoves().length == 0)) && ((_arg2 > 0)))){
--_arg2;
shuffle(_arg1, _arg2);
};
}
public function reShuffle():void{
setSelectedBrick(MahjongCore.EMPTY);
var _local1:Array = getLayoutFromRemainingBricks();
shuffle(_local1, MahjongCore.MAX_SHUFFLE_ITERATIONS);
}
private function getLayoutFromRemainingBricks():Array{
var _local4:int;
var _local5:int;
var _local6:int;
var _local1:Array = new Array(((MahjongCore.SPACE_DEPTH * MahjongCore.SPACE_HEIGHT) * MahjongCore.SPACE_WIDTH));
var _local2:int;
var _local3:int;
while (_local3 < MahjongCore.SPACE_DEPTH) {
_local4 = 0;
while (_local4 < MahjongCore.SPACE_HEIGHT) {
_local5 = 0;
while (_local5 < MahjongCore.SPACE_WIDTH) {
_local6 = int(space[_local3][_local4][_local5]);
if (_local6 != MahjongCore.EMPTY){
_local1[_local2] = "1";
} else {
_local1[_local2] = "0";
};
_local2++;
_local5++;
};
_local4++;
};
_local3++;
};
return (_local1);
}
private function positionHasRoom(_arg1:int, _arg2:int, _arg3:int):Boolean{
var _local5:int;
var _local4:int = (_arg2 - 1);
while (_local4 <= (_arg2 + 1)) {
_local5 = (_arg3 - 1);
while (_local5 <= (_arg3 + 1)) {
if (positionIsValid(_arg1, _local4, _local5)){
if (int(space[_arg1][_local4][_local5]) != MahjongCore.EMPTY){
return (false);
};
};
_local5++;
};
_local4++;
};
return (true);
}
private function positionIsValid(_arg1:int, _arg2:int, _arg3:int):Boolean{
if ((((((((((((_arg1 >= 0)) && ((_arg1 < MahjongCore.SPACE_DEPTH)))) && ((_arg2 >= 0)))) && ((_arg2 < MahjongCore.SPACE_HEIGHT)))) && ((_arg3 >= 0)))) && ((_arg3 < MahjongCore.SPACE_WIDTH)))){
return (true);
};
return (false);
}
private function positionIsFree(_arg1:int, _arg2:int, _arg3:int):Boolean{
return ((int(space[_arg1][_arg2][_arg3]) == MahjongCore.EMPTY));
}
public function brickIsFreeToLift(_arg1:int):Boolean{
var _local2:int = int(bricks[_arg1][0]);
var _local3:int = int(bricks[_arg1][1]);
var _local4:int = int(bricks[_arg1][2]);
return (((!(brickIsCovered(_local2, _local3, _local4))) && (brickHasAFreeSide(_local2, _local3, _local4))));
}
private function brickIsCovered(_arg1:int, _arg2:int, _arg3:int):Boolean{
var _local5:int;
var _local6:int;
var _local7:int;
_arg1 = (_arg1 + 1);
var _local4 = -1;
while (_local4 <= 1) {
_local5 = (_arg2 + _local4);
_local6 = -1;
while (_local6 <= 1) {
_local7 = (_arg3 + _local6);
if (((positionIsValid(_arg1, _local5, _local7)) && (!(positionIsFree(_arg1, _local5, _local7))))){
return (true);
};
_local6++;
};
_local4++;
};
return (false);
}
private function brickHasAFreeSide(_arg1:int, _arg2:int, _arg3:int):Boolean{
if (((sideIsFree(_arg1, _arg2, (_arg3 - 2))) || (sideIsFree(_arg1, _arg2, (_arg3 + 2))))){
return (true);
};
return (false);
}
private function sideIsFree(_arg1:int, _arg2:int, _arg3:int):Boolean{
var _local5:int;
var _local4 = -1;
while (_local4 <= 1) {
_local5 = (_arg2 + _local4);
if (positionIsValid(_arg1, _local5, _arg3)){
if (!positionIsFree(_arg1, _local5, _arg3)){
return (false);
};
};
_local4++;
};
return (true);
}
private function putBrickInPosition(_arg1:int, _arg2:int, _arg3:int, _arg4:int):void{
if (!positionHasRoom(_arg2, _arg3, _arg4)){
document.log("**** Error, trying to put tile in occupied position! ****");
};
space[_arg2][_arg3][_arg4] = _arg1;
bricks[_arg1] = [_arg2, _arg3, _arg4];
}
public function getBricksInShowOrder():Array{
var _local3:int;
var _local4:int;
var _local5:int;
var _local1:Array = new Array();
var _local2:int;
while (_local2 < MahjongCore.SPACE_DEPTH) {
_local3 = 0;
while (_local3 < MahjongCore.SPACE_HEIGHT) {
_local4 = 0;
while (_local4 < MahjongCore.SPACE_WIDTH) {
_local5 = int(space[_local2][_local3][_local4]);
if (_local5 != MahjongCore.EMPTY){
_local1.push([_local5, _local2, _local3, _local4]);
};
_local4++;
};
_local3++;
};
_local2++;
};
return (_local1);
}
public function getBricksInDrawOrder():Array{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Boolean;
var _local8:Boolean;
var _local9:int;
var _local1:Array = new Array();
var _local2:int;
while (_local2 < MahjongCore.SPACE_DEPTH) {
_local3 = 0;
_local4 = (MahjongCore.SPACE_WIDTH - 1);
_local5 = _local3;
_local6 = _local4;
_local7 = true;
_local8 = false;
while (!(_local8)) {
_local9 = int(space[_local2][_local5][_local6]);
if (_local9 != MahjongCore.EMPTY){
_local1.push([_local9, _local2, _local5, _local6]);
};
_local5++;
_local6++;
if ((((_local5 >= MahjongCore.SPACE_HEIGHT)) || ((_local6 >= MahjongCore.SPACE_WIDTH)))){
if (_local7){
_local5 = 0;
--_local4;
_local6 = _local4;
if (_local6 == 0){
_local7 = false;
};
} else {
_local3++;
if (_local3 >= MahjongCore.SPACE_HEIGHT){
_local8 = true;
};
_local5 = _local3;
_local6 = 0;
};
};
};
_local2++;
};
return (_local1);
}
private function removePair(_arg1:int, _arg2:int):void{
removeBrick(_arg1);
removeBrick(_arg2);
gameCore.removePair(_arg1, _arg2);
if ((((bricksInPlay.length > 0)) && ((getFreeBricks().length == 1)))){
document.log("No possible move");
logBricksInPlay();
gameCore.gameOver(App.NO_MORE_MOVES);
} else {
if (((document.relaxMode) && ((gameCore.relaxShuffles <= 0)))){
if (getPossibleMoves().length == 0){
document.log("No possible move");
logBricksInPlay();
gameCore.gameOver(App.NO_MORE_MOVES);
};
};
};
}
private function removeBrick(_arg1:int):void{
var _local2:Array = bricks[_arg1];
var _local3:int = int(_local2[0]);
var _local4:int = int(_local2[1]);
var _local5:int = int(_local2[2]);
if (space[_local3][_local4][_local5] == MahjongCore.EMPTY){
document.log("**** Error, trying to remove nonexisting brick! ****");
};
space[_local3][_local4][_local5] = MahjongCore.EMPTY;
bricks[_arg1] = [MahjongCore.EMPTY, MahjongCore.EMPTY, MahjongCore.EMPTY];
var _local6:int = bricksInPlay.indexOf(_arg1);
bricksInPlay.splice(_local6, 1);
}
private function setSelectedBrick(_arg1:int):void{
gameCore.changeSelectedBrick(selectedBrick, _arg1);
selectedBrick = _arg1;
}
public function getPossibleMoves():Array{
var _local4:Array;
var _local5:int;
var _local6:int;
var _local1:int = (MahjongCore.NO_BRICKS / 4);
var _local2:Array = new Array();
var _local3:int;
while (_local3 < _local1) {
_local4 = new Array();
_local5 = 0;
while (_local5 < 4) {
_local6 = ((_local3 * 4) + _local5);
if (((brickIsInSpace(_local6)) && (brickIsFreeToLift(_local6)))){
_local4.push(_local6);
};
_local5++;
};
if (_local4.length > 1){
_local2.push(_local4);
};
_local3++;
};
return (_local2);
}
public function getAFreePair():Array{
var _local3:int;
var _local4:Array;
var _local1:Array = getPossibleMoves();
var _local2:int = _local1.length;
if (_local2 > 0){
_local3 = (Math.random() * _local2);
_local4 = _local1[_local3];
return (_local4.slice(0, 2));
};
return (null);
}
public function getFreeBricks():Array{
var _local4:int;
var _local1:Array = new Array();
var _local2:int = bricksInPlay.length;
var _local3:int;
while (_local3 < _local2) {
_local4 = int(bricksInPlay[_local3]);
if (brickIsFreeToLift(_local4)){
_local1.push(_local4);
};
_local3++;
};
return (_local1);
}
private function brickIsInSpace(_arg1:int):Boolean{
var _local2:Array = bricks[_arg1];
var _local3:int;
while (_local3 < 3) {
if (int(_local2[_local3]) == MahjongCore.EMPTY){
return (false);
};
_local3++;
};
return (true);
}
public function getFreeFaces():Array{
var _local5:Array;
var _local6:int;
var _local7:int;
var _local8:int;
var _local1:Array = getPossibleMoves();
var _local2:Array = new Array();
var _local3:int = _local1.length;
var _local4:int;
while (_local4 < _local3) {
_local5 = _local1[_local4];
_local6 = _local5.length;
_local7 = 0;
while (_local7 < _local6) {
_local8 = int(_local5[_local7]);
_local2.push((getFaceNr(_local8) + 1));
_local7++;
};
_local4++;
};
return (_local2);
}
public function brickClicked(_arg1:int):void{
if (bricksInPlay.indexOf(_arg1) != -1){
if (_arg1 == selectedBrick){
setSelectedBrick(MahjongCore.EMPTY);
gameCore.selectFromScratch();
} else {
if (brickIsFreeToLift(_arg1)){
if (MahjongCore.isPair(selectedBrick, _arg1)){
removePair(selectedBrick, _arg1);
setSelectedBrick(MahjongCore.EMPTY);
if (bricksInPlay.length == 0){
gameCore.layupFinished();
};
} else {
if (selectedBrick == MahjongCore.EMPTY){
gameCore.selectFromScratch();
} else {
gameCore.notMatch();
};
setSelectedBrick(_arg1);
};
} else {
gameCore.notFree();
};
};
};
}
public function isValid():Boolean{
var _local6:int;
var _local7:int;
var _local8:int;
var _local1:Boolean;
var _local2:Array = bricksInPlay.slice();
var _local3:Array = new Array();
var _local4:int = (144 / 4);
var _local5:int;
while (_local5 < _local4) {
_local3.push(0);
_local5++;
};
while (_local2.length > 0) {
_local6 = getMatchId(int(_local2.pop()));
_local7 = int(_local3[_local6]);
_local7++;
_local3[_local6] = _local7;
};
_local5 = 0;
while (_local5 < _local4) {
_local8 = int(_local3[_local5]);
if ((_local8 % 2) != 0){
_local1 = false;
};
_local5++;
};
if (!_local1){
trace(("isValid false bricksInPlay: " + bricksInPlay));
};
return (_local1);
}
public static function getMatchId(_arg1:int):int{
if ((((_arg1 >= 0)) && ((_arg1 < MahjongCore.NO_BRICKS)))){
return ((_arg1 / 4));
};
return (MahjongCore.EMPTY);
}
public static function getFaceNr(_arg1:int):int{
var _local2:int;
if (_arg1 <= MahjongCore.LAST_4_TUPLE){
return (MahjongCore.getMatchId(_arg1));
};
_local2 = (_arg1 - MahjongCore.LAST_4_TUPLE);
return ((getMatchId(MahjongCore.LAST_4_TUPLE) + _local2));
}
public static function isPair(_arg1:int, _arg2:int):Boolean{
return ((MahjongCore.getMatchId(_arg1) == MahjongCore.getMatchId(_arg2)));
}
}
}//package com.king.midasmahjong
Section 17
//MahjongTiles (com.king.midasmahjong.MahjongTiles)
package com.king.midasmahjong {
import flash.display.*;
public class MahjongTiles extends MovieClip {
public var START_X:int;
public var START_Y:int;
private var bricks:Array;
private var layers:Array;
private var shadows:Array;
private var shadowLayers:Array;
public var gui:Gui;
public function MahjongTiles(){
this.START_X = this.x;
this.START_Y = this.y;
}
public function fixLayers():void{
var _local2:MovieClip;
var _local3:MovieClip;
layers = new Array(MahjongCore.SPACE_DEPTH);
shadowLayers = new Array(MahjongCore.SPACE_DEPTH);
var _local1:int;
while (_local1 < MahjongCore.SPACE_DEPTH) {
_local2 = new MovieClip();
_local2.x = (_local1 * Brick.PERSPECTIVE_WIDTH);
_local2.y = (_local1 * Brick.PERSPECTIVE_HEIGHT);
_local3 = new MovieClip();
_local3.mouseEnabled = false;
_local3.x = _local2.x;
_local3.y = _local2.y;
shadowLayers[_local1] = _local3;
this.addChild(_local3);
layers[_local1] = _local2;
this.addChild(_local2);
_local1++;
};
}
public function emptyLayers():void{
var _local2:MovieClip;
var _local1:int;
while (_local1 < MahjongCore.SPACE_DEPTH) {
_local2 = MovieClip(layers[_local1]);
while (_local2.numChildren > 0) {
_local2.removeChildAt(0);
};
_local1++;
};
}
public function createBricks():void{
var _local3:Brick;
var _local4:BrickShadow;
var _local1:int = MahjongCore.NO_BRICKS;
bricks = new Array(_local1);
shadows = new Array(_local1);
var _local2:int;
while (_local2 < _local1) {
_local3 = Brick.createBrick(_local2);
_local3.gui = gui;
bricks[_local2] = _local3;
_local4 = new BrickShadow();
_local4.brickNr = _local2;
shadows[_local2] = _local4;
_local2++;
};
}
public function newSetup(_arg1:Array):void{
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:Brick;
var _local11:MovieClip;
var _local12:BrickShadow;
var _local13:MovieClip;
var _local2:Number = ((Math.random() * Brick.X_STEP) * 2);
var _local3:Number = ((Math.random() * Brick.Y_STEP) * 2);
this.x = Math.floor((START_X + _local2));
this.y = Math.floor((START_Y + _local3));
var _local4:int = _arg1.length;
var _local5:int;
while (_local5 < _local4) {
_local6 = int(_arg1[_local5][0]);
_local7 = int(_arg1[_local5][1]);
_local8 = int(_arg1[_local5][2]);
_local9 = int(_arg1[_local5][3]);
_local10 = Brick(bricks[_local6]);
_local10.setPosition(_local7, _local8, _local9);
_local11 = MovieClip(layers[_local10.i]);
_local11.addChild(_local10);
_local12 = BrickShadow(shadows[_local6]);
_local12.x = _local10.x;
_local12.y = _local10.y;
_local13 = MovieClip(shadowLayers[_local10.i]);
_local13.addChild(_local12);
_local5++;
};
}
public function changeSelectedBrick(_arg1:Array):void{
var _local4:Brick;
var _local2:int = int(_arg1[0]);
var _local3:int = int(_arg1[1]);
if (_local2 != MahjongCore.EMPTY){
_local4 = Brick(bricks[_local2]);
_local4.selected.visible = false;
};
if (_local3 != MahjongCore.EMPTY){
_local4 = Brick(bricks[_local3]);
_local4.selected.visible = true;
};
}
public function removePair(_arg1:Array):void{
var _local2:Brick = Brick(bricks[int(_arg1[0])]);
var _local3:Brick = Brick(bricks[int(_arg1[1])]);
_local2.parent.removeChild(_local2);
_local3.parent.removeChild(_local3);
var _local4:BrickShadow = BrickShadow(shadows[int(_arg1[0])]);
var _local5:BrickShadow = BrickShadow(shadows[int(_arg1[1])]);
_local4.parent.removeChild(_local4);
_local5.parent.removeChild(_local5);
}
public function showPossibleMove(_arg1:Array):void{
var _local3:int;
var _local4:Brick;
var _local2:int;
while (_local2 < _arg1.length) {
_local3 = int(_arg1[_local2]);
_local4 = Brick(bricks[_local3]);
_local4.missed.visible = true;
_local2++;
};
}
public function hidePossibleMove(_arg1:Array):void{
var _local3:int;
var _local4:Brick;
var _local2:int;
while (_local2 < _arg1.length) {
_local3 = int(_arg1[_local2]);
_local4 = Brick(bricks[_local3]);
_local4.missed.visible = false;
_local2++;
};
}
public function showBrick(_arg1:Array):void{
var _local2:int = int(_arg1[0]);
Brick(bricks[_local2]).visible = true;
BrickShadow(shadows[_local2]).visible = true;
}
public function shuffle(_arg1:Array):void{
this.visible = false;
emptyLayers();
newSetup(_arg1);
this.visible = true;
}
public function showRollOver(_arg1:int):void{
Brick(bricks[_arg1]).rolledOver.visible = true;
}
public function hideRollOver(_arg1:int):void{
Brick(bricks[_arg1]).rolledOver.visible = false;
}
public function getBrick(_arg1:int):Brick{
return (Brick(bricks[_arg1]));
}
}
}//package com.king.midasmahjong
Section 18
//Random (com.king.midasmahjong.Random)
package com.king.midasmahjong {
import flash.utils.*;
public class Random {
private var mta:Array;
private var lastSeed:Number;
private var mti:Number;
private static var N:Number = 624;
private static var M:Number = 397;
private static var MATRIX_A:Number = 2567483615;
private static var UPPER_MASK:Number = 2147483648;
private static var LOWER_MASK:Number = 2147483647;
private static var mag01:Array = [0, 2567483615];
public function Random(_arg1:Number){
mta = new Array(N);
mti = (N + 1);
if (_arg1){
init_genrand(_arg1);
};
}
public function set seed(_arg1:Number){
init_genrand(_arg1);
}
public function get seed():Number{
return (lastSeed);
}
public function nextInt(_arg1:Number){
return (((genrand_int32() & 2147483647) % _arg1));
}
public function nextFloat(){
return ((next(24) / (1 << 24)));
}
public function nextDouble(){
return ((next(24) / (1 << 24)));
}
public function next(_arg1:Number){
if (_arg1 < 32){
return ((genrand_int32() & ((1 << _arg1) - 1)));
};
return (genrand_int32());
}
private function init_genrand(_arg1:Number):void{
_arg1 = int(_arg1);
var _local2:* = getTimer();
lastSeed = _arg1;
mta[0] = _arg1;
var _local3:* = _arg1;
var _local4:* = new Integer64(null);
var _local5:Number = N;
mti = 1;
while (mti < _local5) {
_local4.init32(((_local3 >>> 30) ^ _local3));
_local4.mulu32(1812433253);
_local3 = (mta[mti] = int((_local4.lsb + mti)));
mti++;
};
var _local6:* = getTimer();
}
private function genrand_int32(){
var _local3:*;
var _local4:*;
var _local5:*;
var _local6:*;
var _local7:*;
var _local8:*;
var _local9:*;
var _local10:*;
var _local11:*;
var _local1:Number = N;
var _local2:Number = 0;
if (mti >= _local1){
if (mti == (_local1 + 1)){
init_genrand(5489);
};
_local3 = M;
_local4 = UPPER_MASK;
_local5 = LOWER_MASK;
_local6 = mag01;
_local7 = getTimer();
_local8 = 0;
_local9 = (_local1 - _local3);
_local10 = (_local3 - _local1);
_local8 = 0;
while (_local8 < _local9) {
_local2 = ((mta[_local8] & _local4) | (mta[(_local8 + 1)] & _local5));
mta[_local8] = ((mta[(_local8 + _local3)] ^ (_local2 >>> 1)) ^ _local6[(_local2 & 1)]);
_local8++;
};
_local9 = (_local1 - 1);
while (_local8 < _local9) {
_local2 = ((mta[_local8] & _local4) | (mta[(_local8 + 1)] & _local5));
mta[_local8] = ((mta[(_local8 + _local10)] ^ (_local2 >>> 1)) ^ _local6[(_local2 & 1)]);
_local8++;
};
_local2 = ((mta[(_local1 - 1)] & _local4) | (mta[0] & _local5));
mta[(_local1 - 1)] = ((mta[(_local3 - 1)] ^ (_local2 >>> 1)) ^ _local6[(_local2 & 1)]);
mti = 0;
_local11 = getTimer();
};
_local2 = mta[mti++];
_local2 = (_local2 ^ (_local2 >>> 11));
_local2 = (_local2 ^ ((_local2 << 7) & 2636928640));
_local2 = (_local2 ^ ((_local2 << 15) & 4022730752));
_local2 = (_local2 ^ (_local2 >>> 18));
return (_local2);
}
}
}//package com.king.midasmahjong
Section 19
//Renderable (com.king.midasmahjong.Renderable)
package com.king.midasmahjong {
public interface Renderable {
function render(_arg1:Number, _arg2:int):Boolean;
}
}//package com.king.midasmahjong
Section 20
//RenderableMc (com.king.midasmahjong.RenderableMc)
package com.king.midasmahjong {
import flash.display.*;
public class RenderableMc extends MovieClip implements Renderable {
protected var startTick:Number;
public function initialize():void{
this.startTick = -1;
gotoAndStop(0);
visible = true;
}
public function render(_arg1:Number, _arg2:int):Boolean{
if (startTick == -1){
startTick = (_arg2 + _arg1);
};
var _local3:Number = ((_arg2 + _arg1) - startTick);
var _local4:int = (_local3 * App.MOVIE_CLIP_FRAMES_PER_GAME_TICK);
var _local5:Boolean;
if (_local4 > totalFrames){
_local4 = totalFrames;
};
gotoAndStop(_local4);
if (currentFrame >= totalFrames){
visible = false;
_local5 = true;
};
return (_local5);
}
}
}//package com.king.midasmahjong
Section 21
//RetryLoader (com.king.midasmahjong.RetryLoader)
package com.king.midasmahjong {
import flash.events.*;
import flash.utils.*;
import flash.display.*;
import flash.system.*;
import flash.net.*;
public class RetryLoader {
public var verbose:Boolean;// = false
public var maxFails:int;// = 10
public var loader:Loader;
public var progress:int;
public var lastHttpStatus:int;
public var lastError:String;
public var failed:Boolean;
private var failCount:int;
private var url:String;
private var retryTimer:Timer;
public function RetryLoader(_arg1:String){
progress = 0;
failed = false;
failCount = 0;
lastError = "";
this.url = _arg1;
}
public function load():void{
if (verbose){
trace(("Loading " + url));
};
var _local1:LoaderContext = new LoaderContext();
_local1.checkPolicyFile = true;
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete);
loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressEvent);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
loader.load(new URLRequest(url), _local1);
}
private function fail(_arg1:String):void{
if (loader == null){
return;
};
loader = null;
failCount++;
if (verbose){
trace(((("fail #" + failCount) + ": ") + _arg1));
};
if (failCount >= maxFails){
failed = true;
} else {
lastError = _arg1;
retryTimer = new Timer(1500, 1);
retryTimer.addEventListener(TimerEvent.TIMER_COMPLETE, retry);
retryTimer.start();
};
}
public function ioError(_arg1:IOErrorEvent):void{
fail(_arg1.text);
}
public function retry(_arg1:TimerEvent):void{
if (verbose){
trace(("retry: " + _arg1));
};
retryTimer = null;
load();
}
public function complete(_arg1:Event):void{
if (int((lastHttpStatus / 100)) != 2){
fail(("Bad server reply: " + lastHttpStatus));
return;
};
lastError = ("Loaded: " + loader.contentLoaderInfo.bytesTotal);
if (verbose){
trace(("complete: " + _arg1));
};
progress = 100;
}
public function httpStatus(_arg1:HTTPStatusEvent):void{
lastHttpStatus = _arg1.status;
if (_arg1.status == 0){
lastHttpStatus = 200;
};
}
public function progressEvent(_arg1:ProgressEvent):void{
progress = ((_arg1.bytesLoaded * 100) / _arg1.bytesTotal);
if (progress > 99){
progress = 99;
};
}
}
}//package com.king.midasmahjong
Section 22
//ScorePopup (com.king.midasmahjong.ScorePopup)
package com.king.midasmahjong {
import flash.display.*;
import flash.text.*;
public class ScorePopup extends MovieClip implements Renderable {
public var textField:TextField;
private var frameCounter:int;
private var initialAlpha:Number;// = 0
private var maxAlpha:Number;// = 1
private var fadeInFrames:int;// = 10
private var fadeInSpeed:Number;
private var stableFrames:int;// = 10
private var fadeOutFrames:int;// = 20
private var fadeOutSpeed:Number;
private var ySpeed:Number;// = -1.2
private var yTemp:Number;
private var initialized:Boolean;// = false
public function ScorePopup(){
stop();
this.mouseEnabled = false;
textField.mouseEnabled = false;
}
public function render(_arg1:Number, _arg2:int):Boolean{
var _local4:Number;
var _local5:int;
var _local3:Boolean;
if (!initialized){
yTemp = y;
frameCounter = 1;
fadeInSpeed = ((maxAlpha - initialAlpha) / fadeInFrames);
fadeOutSpeed = (maxAlpha / fadeOutFrames);
initialized = true;
};
if (frameCounter < fadeInFrames){
_local4 = (frameCounter * fadeInSpeed);
this.alpha = Math.min(_local4, maxAlpha);
} else {
if (frameCounter < (fadeInFrames + stableFrames)){
} else {
_local5 = (frameCounter - (fadeInFrames + stableFrames));
_local4 = ((fadeOutFrames - _local5) * fadeOutSpeed);
this.alpha = Math.max(_local4, 0);
};
};
yTemp = (yTemp + ySpeed);
y = Math.floor(yTemp);
frameCounter++;
if (frameCounter > ((fadeInFrames + stableFrames) + fadeOutFrames)){
visible = false;
initialized = false;
_local3 = true;
};
return (_local3);
}
}
}//package com.king.midasmahjong
Section 23
//ShuffleButton (com.king.midasmahjong.ShuffleButton)
package com.king.midasmahjong {
import flash.display.*;
import flash.text.*;
public class ShuffleButton extends MovieClip implements Renderable {
private const START_X:Number;
private const X_MOVE:int = 4;
private const X_MAX:int;
public var textField:TextField;
public var rolledOver:Boolean;// = false
public function ShuffleButton(){
START_X = x;
X_MAX = (START_X + 25);
super();
stop();
}
public function render(_arg1:Number, _arg2:int):Boolean{
var _local3:Boolean;
if (rolledOver){
x = (x + X_MOVE);
if (x >= X_MAX){
x = X_MAX;
_local3 = true;
};
} else {
x = (x - X_MOVE);
if (x <= START_X){
x = START_X;
_local3 = true;
};
};
return (_local3);
}
}
}//package com.king.midasmahjong
Section 24
//SoundFader (com.king.midasmahjong.SoundFader)
package com.king.midasmahjong {
import flash.events.*;
import flash.media.*;
import flash.utils.*;
public class SoundFader {
public var soundChannel:SoundChannel;
private var millisec:int;
private var listener:Object;
private var timer:Timer;
private var fadeStep:Number;// = 0.03
private var miniStep:Number;// = 0.01
private var nrOfSteps:int;
private var extraRepeats:int;// = 5
private var panning:Number;
public function SoundFader(_arg1:SoundChannel, _arg2:int, _arg3:Object){
this.soundChannel = _arg1;
this.millisec = _arg2;
this.listener = _arg3;
var _local4:Number = _arg1.soundTransform.volume;
nrOfSteps = (_local4 / fadeStep);
panning = _arg1.soundTransform.pan;
var _local5:int = (_arg2 / nrOfSteps);
timer = new Timer(_local5, (nrOfSteps + extraRepeats));
timer.addEventListener("timer", fade);
timer.addEventListener("timerComplete", destroy);
timer.start();
}
public function fade(_arg1:TimerEvent):void{
var _local2:Number = soundChannel.soundTransform.volume;
if (_local2 > fadeStep){
_local2 = (_local2 - fadeStep);
} else {
_local2 = (_local2 - miniStep);
};
if (_local2 < 0){
_local2 = 0;
};
soundChannel.soundTransform = new SoundTransform(_local2, panning);
}
public function destroy(_arg1:TimerEvent):void{
soundChannel.stop();
listener.soundFaderCompleted(this);
}
}
}//package com.king.midasmahjong
Section 25
//TimedAction (com.king.midasmahjong.TimedAction)
package com.king.midasmahjong {
public class TimedAction {
public var wait:int;
public var executionTime:int;
public var func:Function;
public var args:Array;
public var remainingIterations:int;
public var paused:Boolean;// = false
private var pausedOnTime:int;// = -1
private var handler:TimedActionHandler;
public static const NOT_SET:int = -1;
public static const RENEW_FOREVER:int = -3;
public function TimedAction(_arg1:int, _arg2:int, _arg3:Function, _arg4:Array, _arg5:int){
this.wait = _arg2;
this.executionTime = (_arg1 + _arg2);
this.func = _arg3;
this.args = _arg4;
this.remainingIterations = _arg5;
}
public function execute(_arg1:TimedActionHandler):Boolean{
if (args == null){
func();
} else {
func(args);
};
remainingIterations--;
if (remainingIterations > 0){
executionTime = (executionTime + wait);
return (true);
};
pause(null, TimedAction.NOT_SET);
return (false);
}
public function pause(_arg1:TimedActionHandler, _arg2:int):void{
paused = true;
pausedOnTime = _arg2;
}
public function resume(_arg1:TimedActionHandler, _arg2:int):void{
paused = false;
var _local3:int = (executionTime - pausedOnTime);
executionTime = (_arg2 + _local3);
}
public function getRemainingTime():int{
if (paused){
return ((executionTime - pausedOnTime));
};
return ((executionTime - handler.getCurrentTime()));
}
public function setHandler(_arg1:TimedActionHandler):void{
this.handler = _arg1;
}
}
}//package com.king.midasmahjong
Section 26
//TimedActionHandler (com.king.midasmahjong.TimedActionHandler)
package com.king.midasmahjong {
public class TimedActionHandler {
private var actions:Array;
private var pausedActions:Array;
private var latestTime:int;
private var timeFunc:Function;
public function TimedActionHandler(_arg1:Function){
if (_arg1 == null){
this.timeFunc = getLatestTime;
} else {
this.timeFunc = getCurrentTime;
};
actions = new Array();
pausedActions = new Array();
}
public function update(_arg1:int):void{
var _local2:TimedAction;
var _local3:Boolean;
this.latestTime = _arg1;
while ((((actions.length > 0)) && ((TimedAction(actions[0]).executionTime <= _arg1)))) {
_local2 = TimedAction(actions.shift());
_local3 = _local2.execute(this);
if (_local3){
add([_local2]);
};
};
}
public function add(_arg1:Array):void{
var _local2:TimedAction;
while (_arg1.length > 0) {
_local2 = _arg1.pop();
_local2.setHandler(this);
this.actions.push(_local2);
};
this.actions.sortOn("executionTime", Array.NUMERIC);
}
public function pause(_arg1:TimedAction):void{
var _local2:int = actions.indexOf(_arg1);
if (_local2 != -1){
actions.splice(_local2, 1);
_arg1.pause(this, timeFunc());
pausedActions.push(_arg1);
};
}
public function resume(_arg1:TimedAction):void{
var _local2:int = pausedActions.indexOf(_arg1);
if (_local2 != -1){
pausedActions.splice(_local2, 1);
_arg1.resume(this, timeFunc());
actions.push(_arg1);
};
}
public function getCurrentTime():int{
return (timeFunc());
}
public function getLatestTime():int{
return (latestTime);
}
}
}//package com.king.midasmahjong
Section 27
//TimeDisplay (com.king.midasmahjong.TimeDisplay)
package com.king.midasmahjong {
import flash.display.*;
import flash.text.*;
public class TimeDisplay extends MovieClip implements Renderable {
public var glowRepeats:int;// = 1
public var glowing:Boolean;// = false
public var glowCount:int;// = 0
private var originalTextColor:uint;
public var minutes10:TextField;
public var minutes1:TextField;
public var colon:TextField;
public var seconds10:TextField;
public var seconds1:TextField;
public var glow:MovieClip;
public var label:TextField;
public function TimeDisplay(){
stop();
glow.stop();
originalTextColor = minutes10.textColor;
}
public function render(_arg1:Number, _arg2:int):Boolean{
var _local3:Boolean;
if (!glowing){
glowing = true;
glowCount = 0;
glow.visible = true;
};
glow.nextFrame();
if (glow.currentFrame >= glow.totalFrames){
glow.gotoAndStop(0);
if (++glowCount >= glowRepeats){
glowing = false;
glow.visible = false;
_local3 = true;
};
};
return (_local3);
}
public function timePenaltyUpdate(_arg1:Array):void{
minutes10.textColor = 0xFF0000;
minutes1.textColor = 0xFF0000;
seconds10.textColor = 0xFF0000;
seconds1.textColor = 0xFF0000;
update(_arg1);
}
public function timePenaltyHide():void{
minutes10.textColor = originalTextColor;
minutes1.textColor = originalTextColor;
seconds10.textColor = originalTextColor;
seconds1.textColor = originalTextColor;
}
public function update(_arg1:Array):void{
var _local2:int = int(_arg1[0]);
var _local3:int = int(_arg1[1]);
var _local4:String = String(_local2);
if (_local4.length < 2){
this.minutes10.text = "0";
this.minutes1.text = _local4.charAt(0);
} else {
this.minutes10.text = _local4.charAt(0);
this.minutes1.text = _local4.charAt(1);
};
var _local5:String = String(_local3);
if (_local5.length < 2){
this.seconds10.text = "0";
this.seconds1.text = _local5.charAt(0);
} else {
this.seconds10.text = _local5.charAt(0);
this.seconds1.text = _local5.charAt(1);
};
}
public function hideTime():void{
minutes10.visible = false;
minutes1.visible = false;
colon.y = (colon.y + 5);
seconds10.visible = false;
seconds1.visible = false;
glow.visible = false;
}
}
}//package com.king.midasmahjong
Section 28
//Transitionglow (com.king.midasmahjong.Transitionglow)
package com.king.midasmahjong {
public class Transitionglow extends RenderableMc {
private var backgroundChangeIsPassed:Boolean;// = false
private var backgroundChange:int;
public function Transitionglow(){
gotoAndStop("backgroundChange");
backgroundChange = currentFrame;
gotoAndStop(0);
}
override public function initialize():void{
super.initialize();
}
override public function render(_arg1:Number, _arg2:int):Boolean{
var _local3:Boolean = super.render(_arg1, _arg2);
if (((!(backgroundChangeIsPassed)) && ((currentFrame >= backgroundChange)))){
gotoAndStop(backgroundChange);
backgroundChangeIsPassed = true;
_local3 = false;
};
return (_local3);
}
}
}//package com.king.midasmahjong
Section 29
//Util (com.king.midasmahjong.Util)
package com.king.midasmahjong {
public class Util {
public static function randomizeArray(_arg1:Random, _arg2:Array):Array{
var _local4:Array;
var _local7:int;
var _local3:Array = _arg2.slice();
var _local5:int = _local3.length;
var _local6:int;
while (_local6 < 5) {
_local4 = new Array();
while (_local3.length > 0) {
_local7 = _arg1.nextInt(_local3.length);
_local4.push(_local3.splice(_local7, 1)[0]);
};
_local3 = _local4;
_local6++;
};
return (_local4);
}
}
}//package com.king.midasmahjong
Section 30
//ButtonPanel (ButtonPanel)
package {
import flash.display.*;
public dynamic class ButtonPanel extends MovieClip {
}
}//package
Section 31
//ClickTile (ClickTile)
package {
import flash.media.*;
public dynamic class ClickTile extends Sound {
}
}//package
Section 32
//ExitBtn (ExitBtn)
package {
import flash.display.*;
public dynamic class ExitBtn extends MovieClip {
}
}//package
Section 33
//GameOverSnd (GameOverSnd)
package {
import flash.media.*;
public dynamic class GameOverSnd extends Sound {
}
}//package
Section 34
//GongSnd (GongSnd)
package {
import flash.media.*;
public dynamic class GongSnd extends Sound {
}
}//package
Section 35
//Intro (Intro)
package {
import flash.display.*;
import flash.text.*;
public dynamic class Intro extends MovieClip {
public var countDownDigitTF:TextField;
public var startButton:SimpleButton;
public var countDownText2:TextField;
public var startBtnTf:TextField;
public var introTf:TextField;
public var countDownText1:TextField;
}
}//package
Section 36
//IntroSound (IntroSound)
package {
import flash.media.*;
public dynamic class IntroSound extends Sound {
}
}//package
Section 37
//LayupAnimationBurnoutSnd (LayupAnimationBurnoutSnd)
package {
import flash.media.*;
public dynamic class LayupAnimationBurnoutSnd extends Sound {
}
}//package
Section 38
//LayupCleared (LayupCleared)
package {
import flash.media.*;
public dynamic class LayupCleared extends Sound {
}
}//package
Section 39
//Level1Color (Level1Color)
package {
import flash.display.*;
public dynamic class Level1Color extends MovieClip {
}
}//package
Section 40
//Level1TimeLamp (Level1TimeLamp)
package {
import flash.display.*;
public dynamic class Level1TimeLamp extends MovieClip {
}
}//package
Section 41
//Level1White (Level1White)
package {
import flash.display.*;
public dynamic class Level1White extends MovieClip {
}
}//package
Section 42
//Level2Color (Level2Color)
package {
import flash.display.*;
public dynamic class Level2Color extends MovieClip {
}
}//package
Section 43
//Level2White (Level2White)
package {
import flash.display.*;
public dynamic class Level2White extends MovieClip {
}
}//package
Section 44
//Level3Color (Level3Color)
package {
import flash.display.*;
public dynamic class Level3Color extends MovieClip {
}
}//package
Section 45
//Level4Color (Level4Color)
package {
import flash.display.*;
public dynamic class Level4Color extends MovieClip {
}
}//package
Section 46
//Level4White (Level4White)
package {
import flash.display.*;
public dynamic class Level4White extends MovieClip {
}
}//package
Section 47
//Level5Color (Level5Color)
package {
import flash.display.*;
public dynamic class Level5Color extends MovieClip {
}
}//package
Section 48
//Level5White (Level5White)
package {
import flash.display.*;
public dynamic class Level5White extends MovieClip {
}
}//package
Section 49
//LevelAnimation1 (LevelAnimation1)
package {
import com.king.midasmahjong.*;
public dynamic class LevelAnimation1 extends LevelAnimation {
}
}//package
Section 50
//LevelAnimation2 (LevelAnimation2)
package {
import com.king.midasmahjong.*;
public dynamic class LevelAnimation2 extends LevelAnimation {
}
}//package
Section 51
//LevelAnimation3 (LevelAnimation3)
package {
import com.king.midasmahjong.*;
public dynamic class LevelAnimation3 extends LevelAnimation {
}
}//package
Section 52
//LevelAnimation4 (LevelAnimation4)
package {
import com.king.midasmahjong.*;
public dynamic class LevelAnimation4 extends LevelAnimation {
}
}//package
Section 53
//LevelAnimation5 (LevelAnimation5)
package {
import com.king.midasmahjong.*;
public dynamic class LevelAnimation5 extends LevelAnimation {
}
}//package
Section 54
//levelAnimationHue2 (levelAnimationHue2)
package {
import flash.display.*;
public dynamic class levelAnimationHue2 extends MovieClip {
}
}//package
Section 55
//LoopSnd (LoopSnd)
package {
import flash.media.*;
public dynamic class LoopSnd extends Sound {
}
}//package
Section 56
//NotFree (NotFree)
package {
import flash.media.*;
public dynamic class NotFree extends Sound {
}
}//package
Section 57
//NotMatch (NotMatch)
package {
import flash.media.*;
public dynamic class NotMatch extends Sound {
}
}//package
Section 58
//OutroSnd (OutroSnd)
package {
import flash.media.*;
public dynamic class OutroSnd extends Sound {
}
}//package
Section 59
//PlayBtn (PlayBtn)
package {
import flash.display.*;
public dynamic class PlayBtn extends MovieClip {
}
}//package
Section 60
//RemovePair (RemovePair)
package {
import flash.media.*;
public dynamic class RemovePair extends Sound {
}
}//package
Section 61
//RollOver (RollOver)
package {
import flash.display.*;
public dynamic class RollOver extends MovieClip {
}
}//package
Section 62
//ScorePopup (ScorePopup)
package {
import com.king.midasmahjong.*;
public dynamic class ScorePopup extends ScorePopup {
}
}//package
Section 63
//ShuffleLooseTime (ShuffleLooseTime)
package {
import flash.media.*;
public dynamic class ShuffleLooseTime extends Sound {
}
}//package
Section 64
//ShuffleSnd (ShuffleSnd)
package {
import flash.media.*;
public dynamic class ShuffleSnd extends Sound {
}
}//package
Section 65
//TimeWarningSnd (TimeWarningSnd)
package {
import flash.media.*;
public dynamic class TimeWarningSnd extends Sound {
}
}//package
Section 66
//Transitionglow (Transitionglow)
package {
import com.king.midasmahjong.*;
public dynamic class Transitionglow extends Transitionglow {
}
}//package