Frame 1
function Sprites() {
var _local3 = this;
function initZArray(ary) {
var _local2 = ary;
var _local1 = 0;
while (_local1 < zRange) {
_local2[_local1] = zRange - _local1;
_local1++;
}
}
createEmptyMovieClip("sprite_root", 0);
var spriteCounter = 0;
var zRange = 500;
var rootZArray = new Array(zRange);
initZArray(rootZArray);
var groupList = new Object();
_local3.getNumFree = function () {
return(zArray.length);
};
_local3.create = function (props) {
var _local1 = props;
var _local3 = this;
var sprite_ref = ("sprite" + spriteCounter);
var _local2;
var thisZ;
if ((typeof(_local1.group) == "string") && (groupList[_local1.group])) {
thisZ = (_local1.z ? (_local1.z) : (groupList[_local1.group].ZArray.pop() + zRange));
groupList[_local1.group].createEmptyMovieClip(sprite_ref, thisZ);
_local2 = groupList[_local1.group][sprite_ref];
_local2.memberOf = _local1.group;
} else {
thisZ = (_local1.z ? (_local1.z) : (rootZArray.pop() + zRange));
sprite_root.createEmptyMovieClip(sprite_ref, thisZ);
_local2 = sprite_root[sprite_ref];
_local2.memberOf = null;
}
if (typeof(_local1.member) == "string") {
_local2.attachMovie(_local1.member, "member_mc", thisZ);
}
_local2._x = ((typeof(_local1.x) == "number") ? (_local1.x) : (Stage.width / 2));
_local2._y = ((typeof(_local1.y) == "number") ? (_local1.y) : (Stage.height / 2));
if (typeof(_local1.width) == "number") {
_local2._width = _local1.width;
}
if (typeof(_local1.height) == "number") {
_local2._height = _local1.height;
}
if (typeof(_local1.xscale) == "number") {
_local2._xscale = _local1.xscale;
}
if (typeof(_local1.yscale) == "number") {
_local2._yscale = _local1.yscale;
}
_local2._visible = ((typeof(_local1.visible) == "boolean") ? (_local1.visible) : true);
_local2._alpha = ((typeof(_local1.alpha) == "number") ? (_local1.alpha) : 100);
_local2.zIndex = thisZ;
_local2.spriteIndex = spriteCounter;
_local2.toBack = function () {
var _local2 = this;
var _local1 = _local2.zIndex % zRange;
_local2.swapDepths(_local1);
_local2.member_mc.swapDepths(_local1);
_local2.zIndex = _local1;
};
_local2.toFront = function () {
var _local2 = this;
var _local1 = (_local2.zIndex % zRange) + (zRange * 2);
_local2.swapDepths(_local1);
_local2.member_mc.swapDepths(_local1);
_local2.zIndex = _local1;
};
spriteCounter++;
return(_local2);
};
_local3.swapZIndex = function (a, b) {
var _local1 = b;
var _local2 = a;
if (typeof(_local1) == "movieclip") {
_local2.swapDepths(_local1);
var _local3 = _local2.zIndex;
_local2.zIndex = _local1.zIndex;
_local1.zIndex = _local3;
} else {
_local2.swapDepths(parseInt(_local1));
_local2.zIndex = _local1;
}
};
_local3.createGroup = function (props) {
var _local2 = props;
if (typeof(_local2.group) == "string") {
var _local1 = _local2.group;
_local2.group = null;
if (groupList[_local1]) {
wr("Alert! generating an already existing group: ", _local1);
} else {
groupList[_local1] = this.create(_local2);
groupList[_local1].groupName = _local1;
groupList[_local1].zArray = new Array(zRange);
initZArray(groupList[_local1].zArray);
}
}
return(groupList[_local1]);
};
_local3.removeGroup = function (nameOrSprite) {
var _local1 = nameOrSprite;
if (typeof(_local1) == "string") {
gName = _local1;
} else {
gName = _local1.groupName;
}
if (groupList[gName]) {
sprites.remove(groupList[gName]);
groupList[gName] = null;
}
};
_local3.setMember = function (sprite, member) {
sprite.attachMovie(member, "member_mc", sprite.getDepth());
};
_local3.getMembers = function (sprite) {
var _local1 = new Array();
if (groupList[sprite.groupName]) {
_local1 = sprite.memberClips;
}
return(_local1);
};
_local3.createText = function (props) {
var _local1 = props;
var txtSprite = this.create({x:_local1.x, y:_local1.y});
txtSprite.createTextField("member_mc", txtSprite.zIndex, 0, 0, 1, 1);
var _local2 = txtSprite.member_mc;
_local2.autosize = ((typeof(_local1.align) == "string") ? (_local1.align) : "left");
_local2.multiline = false;
_local2.wordWrap = false;
_local2.border = false;
_local2.selectable = false;
_local2.type = "dynamic";
_local2.embedFonts = true;
var _local3 = new TextFormat();
_local3.color = ((typeof(_local1.color) == "string") ? (_local1.color) : "0xffffff");
_local3.size = _local1.size || 9;
_local3.font = ((typeof(_local1.font) == "string") ? (_local1.font) : "Arial");
_local3.align = ((typeof(_local1.align) == "string") ? (_local1.align) : "left");
_local3.bold = ((typeof(_local1.bold) == "boolean") ? (_local1.bold) : false);
_local2.setNewTextFormat(_local3);
_local2.text = ((typeof(_local1.text) == "string") ? (_local1.text) : "");
return(txtSprite);
};
_local3.remove = function (sprite) {
var _local1 = sprite;
if (!_local1.zIndex) {
} else {
var _local2 = _local1.zIndex % zRange;
if ((_local1.memberOf != null) && (groupList[_local1.memberOf])) {
groupList[_local1.memberOf].ZArray.push(_local2);
} else {
rootZArray.push(_local2);
}
_local1.removeMovieClip();
return(_local2);
}
return(undefined);
};
}
function Events() {
var _local3 = this;
var listeners = new Array();
var stopCount = 0;
_local3.runIt = function (object) {
var _local2 = object;
if (typeof(_local2.run) == "function") {
var _local1 = 0;
while (_local1 < listeners.length) {
if (listeners[_local1] == _local2) {
return;
}
_local1++;
}
listeners.push(_local2);
} else {
wr("tried to run bad object!");
wrObj(_local2);
}
};
_local3.stopIt = function (object) {
var _local2 = object;
var _local1 = 0;
while (_local1 < listeners.length) {
if (listeners[_local1] == _local2) {
stopCount++;
listeners[_local1].eventOrphan = true;
return;
}
_local1++;
}
};
onEnterFrame = function () {
var _local2 = listeners;
var _local1 = 0;
while (_local1 < _local2.length) {
if (!_local2[_local1].eventOrphan) {
_local2[_local1].run();
}
_local1++;
}
if (stopCount > 0) {
_local1 = 0;
while (_local1 < listeners.length) {
if (listeners[_local1].eventOrphan) {
listeners[_local1].eventOrphan = false;
listeners.splice(_local1, 1);
_local1--;
stopCount--;
}
_local1++;
}
}
};
_local3.putEventList = function () {
wr("Running Object list:");
var _local1 = 0;
while (_local1 < listeners.length) {
wr(listeners[_local1]);
_local1++;
}
};
_local3.checkEventList = function () {
var _local2 = listeners;
var _local1 = 0;
while (_local1 < _local2.length) {
if (typeof(_local2[_local1]) != "object") {
wr("invalid object in event: ", _local1);
}
_local1++;
}
};
}
function SoundFx() {
this.playSounds = true;
var _local3 = ["kick_1.wav", "kick_2.wav", "kick_3.wav", "kick_4.wav", "kick_5.wav", "kick_6.wav", "click", "morph", "switch", "bomb", "intro_sound", "nomoremoves_sound", "gameover_sound", "loop_sound"];
createEmptyMovieClip("sound_fx", -1);
var soundCount = 0;
var backgroundLoopStarted = false;
var sounds = new Object();
var globalSound = new Sound();
globalSound.setVolume(65);
var _local1 = 0;
while (_local1 < _local3.length) {
var _local2 = new Sound(sound_fx.createEmptyMovieClip("sound_" + (_local1 + 1), (-_local1) - 2));
_local2.attachSound(_local3[_local1]);
if (_local3[_local1].indexOf("loop") > -1) {
_local2.onSoundComplete = function () {
this.start();
};
} else if (_local3[_local1].indexOf("intro") > -1) {
_local2.onSoundComplete = function () {
this.playing = false;
soundFx.playBackgroundLoop();
};
} else {
_local2.onSoundComplete = function () {
this.playing = false;
};
}
if (_local3[_local1].indexOf("kick_") == 0) {
_local2.setVolume(65);
}
if (_local3[_local1].indexOf("loop") == 0) {
_local2.setVolume(65);
}
if (_local3[_local1].indexOf("intro") == 0) {
_local2.setVolume(65);
}
sounds[_local3[_local1]] = _local2;
sounds[_local3[_local1]].playing = false;
_local1++;
}
this.playBackgroundLoop = function () {
this.play("loop_sound");
backgroundLoopStarted = true;
};
this.play = function (sound, nostop) {
var _local1 = sound;
if (sounds[_local1].playing) {
if (nostop) {
return;
}
this.stop(_local1);
}
if (this.playSounds) {
sounds[_local1].playing = true;
sounds[_local1].start();
}
};
this.stop = function (sound) {
sounds[sound].stop();
sounds[sound].playing = false;
};
this.toggleOnOff = function () {
var _local1 = this;
if (_local1.playSounds) {
_local1.stop("intro_sound");
_local1.stop("loop_sound");
_local1.playSounds = false;
} else {
_local1.playSounds = true;
_local1.play("loop_sound");
}
};
}
function wr() {
var _local2 = arguments;
var _local3 = "> ";
var _local1 = 0;
while (_local1 < _local2.length) {
_local3 = _local3 + _local2[_local1];
_local1++;
if (_local2.length != _local1) {
_local3 = _local3 + " ";
}
}
trace(_local3);
}
function wrObj(obj, rec) {
var _local1 = obj;
var _local3 = rec;
function wrObjDump(obj, rec, currprop) {
var _local1 = obj;
var _local2 = currprop;
var _local3 = rec;
_local2 = ((typeof(_local2) == "string") ? (_local2 + ".") : "");
for (prop in _local1) {
trace(((_local2 + prop) + ": ") + _local1[prop]);
if (_local3) {
if (typeof(_local1[prop]) == "object") {
wrObjDump(_local1[prop], _local3, _local2 + prop);
}
}
}
}
trace("--- Obj dump: ---------");
wrObjDump(_local1, _local3);
trace("-----------------------");
}
function fill(width, p) {
var _local2 = "";
var _local3 = ((typeof(p) != "string") ? " " : (p));
var _local1 = 0;
while (_local1 < width) {
_local2 = _local2 + _local3;
_local1++;
}
return(_local2);
}
function setBrightness(clip, bright) {
if (typeof(clip) == "movieclip") {
var col = new Color(clip);
var trans = col.getTransform();
with (trans) {
ra = (ga = (ba = 100 - Math.abs(bright)));
rb = (gb = (bb = ((bright > 0) ? (bright * 2.56) : 0)));
}
col.setTransform(trans);
}
}
function Random() {
var _local1 = this;
var seed = 0;
var seed2 = 0;
_local1.range = function (start, stop) {
var _local2 = stop - start;
var _local1 = Math.random() * (_local2 + 1);
_local1 = Math.floor(start + _local1);
return(Math.min(_local1, stop));
};
_local1.setSeed = function (s) {
wr("setSeed:", s);
seed = s & 65535;
seed2 = seed;
};
_local1.rangeFromSeed = function (start, stop) {
var _local2 = stop - start;
var _local1 = this.floatFromSeed() * (_local2 + 1);
_local1 = Math.floor(start + _local1);
return(Math.min(_local1, stop));
};
_local1.rangeFromSeed2 = function (start, stop) {
var _local2 = stop - start;
var _local1 = this.floatFromSeed2() * (_local2 + 1);
_local1 = Math.floor(start + _local1);
return(Math.min(_local1, stop));
};
_local1.floatFromSeed = function () {
seed = ((seed * 732573) + 3545443) & 65535;
temp = seed / 65536;
return(temp);
};
_local1.floatFromSeed2 = function () {
seed2 = ((seed2 * 732573) + 3545443) & 65535;
temp = seed2 / 65536;
return(temp);
};
}
function Slide(props) {
var _local1 = this;
var _local2 = props;
_local1.mysprite = _local2.sprite;
_local1.orig_x = _local1.mysprite._x;
_local1.orig_y = _local1.mysprite._y;
_local1.curr_x = _local1.orig_x;
_local1.curr_y = _local1.orig_y;
_local1.target_x = ((typeof(_local2.x) == "number") ? (_local2.x) : (_local1.orig_x));
_local1.target_y = ((typeof(_local2.y) == "number") ? (_local2.y) : (_local1.orig_y));
_local1.move_x = _local1.orig_x != _local1.target_x;
_local1.move_y = _local1.orig_y != _local1.target_y;
_local1.callback = _local2.callback;
_local1.delay = _local2.delay || 0;
_local1.v = 0;
_local1.nFrames = _local2.nFrames || 10;
_local1.run = function () {
var _local1 = this;
if (_local1.delay > 0) {
_local1.delay--;
} else {
_local1.v = Math.min(_local1.v + (Math.Pi / (_local1.nFrames * 2)), (Math.PI/2));
if (_local1.move_x) {
_local1.curr_x = _local1.orig_x + ((Math.sin(_local1.v + 4.71238898038469) + 1) * (_local1.target_x - _local1.orig_x));
_local1.mysprite._x = _local1.curr_x;
}
if (_local1.move_y) {
_local1.curr_y = _local1.orig_y + ((Math.sin(_local1.v + 4.71238898038469) + 1) * (_local1.target_y - _local1.orig_y));
_local1.mysprite._y = _local1.curr_y;
}
if (_local1.v >= (Math.PI/2)) {
events.stopIt(_local1);
if (_local1.callback) {
_local1.callback();
}
}
}
};
events.runIt(_local1);
}
function Fade(props) {
var _local1 = this;
var _local2 = props;
_local1.mysprite = _local2.sprite;
_local1.mode = ((typeof(_local2.mode) == "string") ? (_local2.mode) : "in");
_local1.nFrames = _local2.frames || 10;
_local1.counter = _local1.nFrames;
_local1.alphastep = 100 / _local1.nFrames;
if (_local1.mode == "in") {
_local1.alphastep = -_local1.alphastep;
_local1.curralpha = 0;
} else {
_local1.curralpha = 100;
}
_local1.callback = _local2.callback;
_local1.run = function () {
var _local1 = this;
_local1.counter--;
_local1.curralpha = _local1.curralpha - _local1.alphastep;
_local1.mysprite._alpha = _local1.curralpha;
if (_local1.counter == 0) {
if (_local1.mode == "pulse") {
_local1.counter = _local1.nFrames;
_local1.alphastep = -_local1.alphastep;
} else {
events.stopIt(_local1);
if (_local1.callback) {
_local1.callback();
}
}
}
};
events.runIt(_local1);
}
function Delay(what, frames) {
var _local1 = this;
_local1.what = what;
_local1.counter = 0;
_local1.nFrames = frames;
_local1.run = function () {
var _local1 = this;
_local1.counter++;
if (_local1.counter > _local1.nFrames) {
events.stopIt(_local1);
_local1.what();
}
};
events.runIt(_local1);
}
function Animate(props) {
var _local1 = this;
var _local2 = props;
_local1.running = false;
_local1.mysprite = _local2.sprite;
_local1.callback = _local2.callback;
_local1.delay = _local2.delay || 0;
_local1.frameRate = _local2.frameRate || 0;
_local1.frameCounter = _local1.frameRate;
_local1.animation = _local2.animation;
_local1.animpos = 0;
_local1.loop = ((typeof(_local2.loop) == "boolean") ? (_local2.loop) : false);
_local1.start = function () {
var _local1 = this;
if (_local1.running) {
} else {
_local1.running = true;
events.runIt(_local1);
}
};
_local1.run = function () {
var _local1 = this;
if (_local1.delay > 0) {
_local1.delay--;
} else if (_local1.animpos > _local1.animation.length) {
if (_local1.loop) {
_local1.animpos = 0;
// unexpected jump
}
_local1.running = false;
events.stopIt(_local1);
if (_local1.callback) {
_local1.callback();
}
} else if (_local1.frameCounter > 0) {
_local1.frameCounter--;
} else {
sprites.setMember(_local1.mysprite, _local1.animation[_local1.animpos]);
_local1.animpos++;
_local1.frameCounter = _local1.frameRate;
}
};
_local1.kill = function () {
events.stopIt(this);
};
}
function Gui() {
var _local1 = this;
function isString(str) {
return(typeof(str) == "string");
}
var sound_button = snd_btn;
var end_game_button = end_game_btn;
var finalTexts = {};
var finalSprite;
_local1.infoSprite = null;
var topIndicators = [];
var T_time_left = time_text;
var T_points = points_text;
var TH_time_left = time_tag_text;
var TH_points = points_tag_text;
var p_automat = new scoreAutomat(T_points);
events.runIt(p_automat);
var sprite = sprites.createGroup({group:"topGroup", member:"top_blocks", x:144.5, y:-5.7, width:461, height:33.4});
sprite.toFront();
var _local2 = 0;
while (_local2 < GAME_ARRAY_WIDTH) {
topIndicators.push(sprites.create({group:"topGroup", member:"top_indicator", x:BLOCK_WIDTH * _local2, y:18, width:BLOCK_WIDTH, height:16.6, visible:false}));
topIndicators[_local2].toFront();
_local2++;
}
_local1.setupGui = function (props) {
var _local1 = props;
var _local2 = this;
TH_time_left.text = (isString(_local1.time) ? (_local1.time) : "TIME");
TH_points.text = (isString(_local1.points) ? (_local1.points) : "POINTS");
end_game_button.label.text = (isString(_local1.end_game) ? (_local1.end_game) : "END GAME");
var tmp_info_head = (isString(_local1.instruction_head) ? (_local1.instruction_head) : "");
var tmp_info1 = (isString(_local1.instruction1) ? (_local1.instruction1) : "");
var tmp_info2 = (isString(_local1.instruction2) ? (_local1.instruction2) : "");
var tmp_info3 = (isString(_local1.instruction3) ? (_local1.instruction3) : "");
var tmp_start_game = (isString(_local1.start_game) ? (_local1.start_game) : "START GAME");
var tmp_start_in = (isString(_local1.start_in) ? (_local1.start_in) : "START IN");
_local2.infoSprite = sprites.create({member:"instructions", x:146, y:35, visible:false});
var header_txt = _local2.infoSprite.member_mc.header_txt;
header_txt.text = tmp_info_head;
var t1 = _local2.infoSprite.member_mc.p1_txt;
t1.autoSize = "center";
t1.text = (((tmp_info1 + "\n\n") + tmp_info2) + "\n\n") + tmp_info3;
var _local3 = _local2.infoSprite.member_mc.start_btn;
_local3.label_txt.autoSize = "center";
_local3.label_txt.text = tmp_start_game;
_local3.useHandCursor = false;
_local3.onRelease = function () {
game.gui.removeInfo();
};
_local2.infoSprite.countdownSprite = _local2.infoSprite.member_mc.countdown;
_local2.infoSprite.countdownSprite.sec = 10;
_local2.infoSprite.countdownSprite.start_in = tmp_start_in;
_local2.infoSprite.countdownSprite.frameCounter = 25;
_local2.infoSprite.countdownSprite.setText = function () {
var _local1 = this;
_local1.txt.text = (_local1.start_in + " ") + _local1.sec;
};
_local2.infoSprite.countdownSprite.run = function () {
var _local1 = this;
if (_local1.frameCounter == 0) {
if (_local1.sec == 0) {
events.stopIt(_local1);
game.gui.removeInfo();
} else {
_local1.frameCounter = 25;
_local1.sec--;
_local1.setText();
}
} else {
_local1.frameCounter--;
}
};
_local2.infoSprite.countdownSprite.setText();
var tmp_game_over = (isString(_local1.game_over) ? (_local1.game_over) : "BONUS");
var tmp_bonus = (isString(_local1.bonus) ? (_local1.bonus) : "BONUS");
var final_score = (isString(_local1.final_score) ? (_local1.final_score) : "SCORE");
_local2.setUpFinal(tmp_game_over, tmp_bonus, final_score);
};
_local1.showInfo = function () {
this.infoSprite._visible = true;
events.runIt(this.infoSprite.countdownSprite);
};
_local1.removeInfo = function () {
var _local1 = this;
if (_local1.tmpIsCalled) {
delete _local1.tmpIsCalled;
} else {
_local1.tmpIsCalled = true;
var _local2 = function () {
sprites.remove(game.gui.infoSprite);
delete game.gui.infoSprite;
var _local1 = function () {
game.onStartGame();
};
new Delay(_local1, 1);
};
new Slide({sprite:_local1.infoSprite, y:_local1.infoSprite._y + 50});
new Fade({sprite:_local1.infoSprite, mode:"out", callback:_local2});
}
};
_local1.setUpFinal = function (gameover, bonus, finalscore) {
finalTexts.gameover = gameover;
finalTexts.bonus = bonus;
finalTexts.finalscore = finalscore;
};
_local1.showIndicator = function (index) {
topIndicators[index]._visible = true;
};
_local1.hideIndicators = function () {
var _local1 = 0;
while (_local1 < topIndicators.length) {
topIndicators[_local1]._visible = false;
_local1++;
}
};
end_game_button._visible = false;
end_game_button.btn.useHandCursor = false;
end_game_button.btn.onRelease = function () {
this.onRelease = null;
game.setGameOver("user");
};
sound_button.btn.useHandCursor = false;
sound_button.btn.onRelease = function () {
game.toggleSound();
};
_local1.toggleSound = function () {
if (sound_button._currentFrame == 1) {
sound_button.nextFrame();
} else {
sound_button.prevFrame();
}
};
_local1.gameIsOver = function (props) {
sound_button.onRelease = null;
finalSprite = sprites.create({member:"final", x:146, y:35, visible:false});
finalSprite.member_mc.gameover_txt.text = finalTexts.gameover;
var str1 = (((("1. " + finalTexts.bonus) + " (") + new String(props.bonus)) + ")");
var _local3 = ((("2. " + finalTexts.finalscore) + " (") + new String(props.score)) + ")";
var _local2 = finalSprite.member_mc.final_txt1;
var _local1 = finalSprite.member_mc.final_txt2;
_local2.autoSize = "center";
_local1.autoSize = "center";
_local2.text = str1;
_local1.text = _local3;
finalSprite._visible = true;
};
_local1.setTime = function (time) {
T_time_left.text = time;
};
_local1.addPoints = function (points) {
p_automat.addScore(points);
};
_local1.showEndGameButton = function () {
end_game_button._visible = true;
};
}
function scoreAutomat(txt_field) {
function updateScore() {
var _local1 = dest_p - curr_p;
var _local2 = _local1 * speed;
if (Math.abs(_local1) <= 2) {
curr_p = dest_p;
} else {
curr_p = curr_p + _local2;
}
txt_field.text = Math.round(curr_p);
if (dest_p == curr_p) {
calcReady();
}
}
function calcReady() {
running = false;
}
var running = false;
var speed = 0.2;
var curr_p = 0;
var dest_p = 0;
var txt_field = txt_field;
this.addScore = function (howMuch) {
running = true;
if ((dest_p + howMuch) < 0) {
dest_p = 0;
} else {
dest_p = dest_p + howMuch;
}
};
this.run = function () {
if (running) {
updateScore();
}
};
}
function blockDropper() {
var dropList = new Array();
var speedList = [2, 7, 10, 18, 18, 19];
var speedList = [10, 16, 19];
var min_y = BLOCK_DROP_START_Y;
this.start = function () {
events.runIt(this);
};
this.dropBlock = function (props) {
var _local2 = props;
var _local1 = new Object();
_local1.sprite = _local2.sprite;
_local1.orig_y = _local1.sprite._y;
_local1.curr_y = _local1.orig_y;
_local1.sprite.droptarget_y = ((typeof(_local2.y) == "number") ? (_local2.y) : (_local1.orig_y));
_local1.move_y = _local1.orig_y != _local1.sprite.droptarget_y;
_local1.callback = _local2.callback;
_local1.speedListPos = 0;
_local1.speed = 0;
_local1.sprite._y = Math.max(_local1.orig_y, min_y);
_local1.sprite._visible = true;
dropList.push(_local1);
};
this.run = function () {
var _local2;
var _local3;
var playSound = false;
var _local1 = 0;
while (_local1 < dropList.length) {
_local2 = dropList[_local1].sprite;
_local3 = typeof(_local2.gridX) != "number";
if ((dropList[_local1].curr_y == _local2.droptarget_y) || (_local3)) {
playSound = true;
if (!_local3) {
_local2.busy = false;
}
if (dropList[_local1].callback) {
dropList[_local1].callback();
}
dropList.splice(_local1, 1);
_local1--;
} else {
dropList[_local1].speed = speedList[dropList[_local1].speedListPos];
dropList[_local1].curr_y = Math.min(dropList[_local1].curr_y + dropList[_local1].speed, _local2.droptarget_y);
_local2._y = Math.max(min_y, dropList[_local1].curr_y);
dropList[_local1].speedListPos++;
if (dropList[_local1].speedListPos == speedList.length) {
dropList[_local1].speedListPos = speedList.length - 2;
}
}
_local1++;
}
};
this.clear = function () {
};
}
function GameOverAnimation(ary) {
this.postScoreDelay = 75;
var self = this;
var y2 = (GAME_ARRAY_HEIGHT - 1);
var _local2 = 0;
while (_local2 < GAME_ARRAY_WIDTH) {
var _local1 = GAME_ARRAY_HEIGHT - 1;
while (_local1 > -1) {
var block = ary[_local2][_local1];
if ((block.STATE == BLOCK_STATES.INITIAL) && (block.TYPE != BLOCK_TYPES.BOMB)) {
block.OUTER_VALUE = block.INNER_VALUE;
}
var cb = function () {
var _local1 = this._parent;
if (block.STATE == BLOCK_STATES.INITIAL) {
_local1.outerSprite.removeMovieClip();
}
if ((_local1.gridX == (GAME_ARRAY_WIDTH - 1)) && (_local1.gridY == 0)) {
events.runIt(self);
}
};
block.transformSprite = block.attachMovie(block.OUTER_VALUE + BLOCK_SUFFIX.CLEAR_TO, "mc_transformSprite", 2);
block.transformSprite.callback = cb;
if ((block.STATE != BLOCK_STATES.INITIAL) || (block.TYPE == BLOCK_TYPES.BOMB)) {
block.transformSprite._visible = false;
}
if (block.innerSprite) {
block.innerSprite.removeMovieClip();
}
_local1--;
}
_local2++;
}
this.run = function () {
if (y2 > -1) {
var _local2 = 0;
while (_local2 < GAME_ARRAY_WIDTH) {
var _local1 = ary[_local2][y2];
var cb = function () {
var _local1 = this._parent;
if ((_local1.gridX == (GAME_ARRAY_WIDTH - 1)) && (_local1.gridY == 0)) {
new Delay(function () {
game.generateMagicBall();
}, self.postScoreDelay);
}
};
_local1.exitSprite = _local1.attachMovie(_local1.OUTER_VALUE + BLOCK_SUFFIX.EXIT, "mc_exitSprite", 3);
_local1.exitSprite.callback = cb;
_local1.transformSprite.removeMovieClip();
_local2++;
}
if (y2 == (GAME_ARRAY_HEIGHT - 1)) {
var props = {score:game.score.getScore(), bonus:game.score.getBonus()};
game.gui.gameIsOver(props);
}
y2--;
} else {
events.stopIt(this);
}
};
}
function Score() {
var _local2 = this;
var currentLevel = 1;
var comboScores = [0, 0, 50, 100, 150, 250, 500];
var comboScorePerAdditionalBlock = 250;
var matchScores = [0, 50, 100, 150, 200, 250, 300, 350, 400];
var bonusMultiplier = 3;
var nonScoringMoveScore = -11;
var noMoreMovesScore = -500;
var bombScore = 200;
var matchIndex = 0;
var currentScore = 0;
var blockCounter = 0;
var eventCodes = {};
eventCodes.swap = 78;
eventCodes.switch = 78;
eventCodes[COMBO_TYPES.COLOR] = 573;
eventCodes[COMBO_TYPES.BOMB] = 198;
eventCodes.bonus = 4978;
eventCodes.inactive = 237;
eventCodes["non-scoring move"] = 4824;
_local2.getLevel = function () {
return(currentLevel);
};
_local2.getScore = function () {
return(currentScore + this.getBonus());
};
_local2.getBonus = function () {
return(blockCounter * bonusMultiplier);
};
_local2.evaluateEvent = function (event) {
var _local1 = event;
var _local3 = this;
var _local2 = 0;
_local1.code = -1;
wr("event:", _local1.action, ", value:", _local1.value, ", matchIndex:", matchIndex, ", moveString:", _local1.moveString);
if (_local1.action == COMBO_TYPES.COLOR) {
blockCounter = blockCounter + _local1.value;
var scoreBase = Math.min(comboScores.length, _local1.value);
_local2 = comboScores[scoreBase - 1];
_local2 = _local2 + (Math.Max(0, _local1.value - comboScores.length) * comboScorePerAdditionalBlock);
_local2 = _local2 + matchScores[matchIndex];
wr("score: " + _local2);
matchIndex++;
matchIndex = Math.min(matchIndex, matchScores.length - 1);
var snd = (("kick_" + Math.min(matchIndex, 6)) + ".wav");
if (!game.gameOver) {
soundFx.play(snd);
}
} else if (_local1.action == COMBO_TYPES.BOMB) {
blockCounter = blockCounter + _local1.value;
_local2 = bombScore;
wr("SCORE : " + _local2);
matchIndex++;
matchIndex = Math.min(matchIndex, matchScores.length - 1);
if (!game.gameOver) {
soundFx.play("bomb");
}
} else if (_local1.action == "reset multiplier") {
matchIndex = 0;
} else if (_local1.action == "non-scoring move") {
_local2 = nonScoringMoveScore;
} else if (_local1.action == "no more moves") {
if (!game.gameOver) {
soundFx.play("nomoremoves_sound");
}
_local2 = noMoreMovesScore;
} else if (_local1.action == "bonus") {
_local1.value = blockCounter;
} else if (_local1.action == "inactive") {
_local2 = -1;
}
var oldScore = currentScore;
currentScore = currentScore + _local2;
currentScore = Math.max(0, currentScore);
if (!game.gameOver) {
game.gui.addPoints(_local2);
}
_local1.code = eventCodes[_local1.action] || 0;
if (_local1.action == "bonus") {
_local1.score = _local3.getBonus();
_local3.sendEvent(_local1);
} else if ((_local1.action == "swap") || (_local1.action == "switch")) {
_local1.score = 0;
_local3.sendEvent(_local1);
} else if (oldScore != currentScore) {
_local1.score = currentScore - oldScore;
_local3.sendEvent(_local1);
}
return(_local2);
};
_local2.sendEvent = function (props) {
var _local1 = props;
if (game.gameOver) {
return;
}
var _local2 = String(_local1.code);
if (_local1.code == 573) {
_local2 = _local2 + ("," + String(_local1.value));
_local2 = _local2 + (" " + String(_local1.removedValue));
}
if (_local1.code == 198) {
_local2 = _local2 + ("," + String(_local1.value));
_local2 = _local2 + (" " + String(_local1.removedValue));
}
if (_local1.code == 78) {
_local2 = _local2 + ("," + String(_local1.moveString));
}
if (_local1.code == 4978) {
_local2 = _local2 + ("," + String(_local1.value));
}
_local2 = _local2 + ("=" + String(_local1.score));
};
}
function Logger() {
var theLog = new Array();
this.logEvent = function (data) {
theLog.push(data);
};
this.getLog = function () {
return(theLog);
};
}
function ScorePop(x, y, score, fontsize) {
var _local1 = this;
var _local3 = {text:score + "", x:x, y:y, bold:true, size:fontsize || 14, align:"center"};
var _local2 = sprites.createText(_local3);
_local2.member_mc.background = true;
_local2.member_mc.backgroundColor = "0x404040";
_local2.toFront();
_local1.mysprite = _local2;
_local1.orig_y = _local1.mysprite._y;
_local1.curr_y = _local1.orig_y;
_local1.endPos = _local1.orig_y - 37;
if (_local1.endPos < 15) {
_local1.endPos = 15;
}
_local1.target_y = _local1.endPos;
_local1.move_y = _local1.orig_y != _local1.target_y;
_local1.v = 0;
_local1.nFrames = 10;
_local1.state = 1;
_local1.fadecounter = 100;
_local1.run = function () {
var _local1 = this;
if (_local1.state == 1) {
_local1.v = Math.min(_local1.v + (Math.Pi / (_local1.nFrames * 2)), (Math.PI/2));
_local1.curr_y = _local1.orig_y + (Math.sin(_local1.v) * (_local1.target_y - _local1.orig_y));
_local1.mysprite._y = _local1.curr_y;
if (_local1.v >= (Math.PI/2)) {
_local1.state++;
}
} else if (_local1.state == 2) {
_local1.fadecounter = _local1.fadecounter - 9;
_local1.mysprite._alpha = _local1.fadecounter;
if (_local1.fadecounter < 10) {
events.stopIt(_local1);
sprites.remove(_local1.mysprite);
}
}
};
events.runIt(_local1);
}
function SlideSlow(props) {
var _local1 = this;
var _local2 = props;
_local1.mysprite = _local2.sprite;
_local1.orig_x = _local1.mysprite._x;
_local1.orig_y = _local1.mysprite._y;
_local1.curr_x = _local1.orig_x;
_local1.curr_y = _local1.orig_y;
_local1.target_x = ((typeof(_local2.x) == "number") ? (_local2.x) : (_local1.orig_x));
_local1.target_y = ((typeof(_local2.y) == "number") ? (_local2.y) : (_local1.orig_y));
_local1.move_x = _local1.orig_x != _local1.target_x;
_local1.move_y = _local1.orig_y != _local1.target_y;
_local1.callback = _local2.callback;
if (_local2.slideBack == true) {
_local1.slideBack = true;
} else {
_local1.slideBack = false;
}
_local1.v = 0;
_local1.nFrames = _local2.nFrames || 10;
_local1.run = function () {
var _local1 = this;
var _local2 = (Math.PI/2);
if (_local1.slideBack) {
_local2 = Math.PI;
}
_local1.v = Math.min(_local1.v + (Math.PI / (_local1.nFrames * 2)), _local2);
if (_local1.move_x) {
_local1.curr_x = _local1.orig_x + (Math.sin(_local1.v) * (_local1.target_x - _local1.orig_x));
_local1.mysprite._x = _local1.curr_x;
}
if (_local1.move_y) {
_local1.curr_y = _local1.orig_y + (Math.sin(_local1.v) * (_local1.target_y - _local1.orig_y));
_local1.mysprite._y = _local1.curr_y;
}
if (_local1.v >= _local2) {
events.stopIt(_local1);
if (_local1.callback) {
_local1.callback();
}
}
};
events.runIt(_local1);
}
function Initslide(props) {
var _local1 = this;
var _local2 = props;
_local1.mysprite = _local2.sprite;
_local1.orig_x = _local1.mysprite._x;
_local1.orig_y = _local1.mysprite._y;
_local1.curr_x = _local1.orig_x;
_local1.curr_y = _local1.orig_y;
_local1.target_x = ((typeof(_local2.x) == "number") ? (_local2.x) : (_local1.orig_x));
_local1.target_y = ((typeof(_local2.y) == "number") ? (_local2.y) : (_local1.orig_y));
_local1.move_x = _local1.orig_x != _local1.target_x;
_local1.move_y = _local1.orig_y != _local1.target_y;
_local1.callback = _local2.callback;
_local1.delay = _local2.delay || 0;
_local1.v = 0;
_local1.nFrames = _local2.nFrames || 10;
_local1.run = function () {
var _local1 = this;
if (_local1.delay > 0) {
_local1.delay--;
} else {
_local1.v = Math.min(_local1.v + (Math.Pi / (_local1.nFrames * 2)), (Math.PI/2));
if (_local1.move_x) {
_local1.curr_x = _local1.orig_x + (Math.sin(_local1.v) * (_local1.target_x - _local1.orig_x));
_local1.mysprite._x = _local1.curr_x;
}
if (_local1.move_y) {
_local1.curr_y = _local1.orig_y + (Math.sin(_local1.v) * (_local1.target_y - _local1.orig_y));
if (_local1.curr_y > 10) {
_local1.mysprite._visible = true;
}
_local1.mysprite._y = _local1.curr_y;
}
if (_local1.v >= (Math.PI/2)) {
events.stopIt(_local1);
if (_local1.callback) {
_local1.callback();
}
}
}
};
events.runIt(_local1);
}
function Game() {
var _local2 = this;
function start() {
var _local1 = new XML();
_local1.ignoreWhite = true;
_local1.parseXML(gameData);
allBlocks.feedSymbols = ((typeof(_local1.firstChild.attributes.symbols) == "string") ? (String(_local1.firstChild.attributes.symbols).split(" ")) : null);
allBlocks.levelSymbols = ((typeof(_local1.firstChild.attributes.start) == "string") ? (String(_local1.firstChild.attributes.start).split(" ")) : null);
gameDuration = ((typeof(_local1.firstChild.attributes.timelimit) == "string") ? (parseInt(_local1.firstChild.attributes.timelimit) * 1000) : 180000);
noMovesText = ((typeof(_local1.nomoves.firstChild.nodeValue) == "string") ? (_local1.nomoves.firstChild.nodeValue) : "No more moves!");
var _local2 = new Object();
_local2.time = _local1.time_left.firstChild.nodeValue;
_local2.points = _local1.score.firstChild.nodeValue;
_local2.end_game = _local1.end_game.firstChild.nodeValue;
_local2.instruction_head = _local1.instruction_header.firstChild.nodeValue;
_local2.instruction1 = _local1.instruction_text_1.firstChild.nodeValue;
_local2.instruction2 = _local1.instruction_text_2.firstChild.nodeValue;
_local2.instruction3 = _local1.instruction_text_3.firstChild.nodeValue;
_local2.start_game = _local1.start_game.firstChild.nodeValue;
_local2.bonus = _local1.symbol_bonus.firstChild.nodeValue;
_local2.final_score = _local1.result.firstChild.nodeValue;
_local2.game_over = _local1.game_over.firstChild.nodeValue;
_local2.start_in = _local1.start_in.firstChild.nodeValue;
game.gui.setupGui(_local2);
createFeedArray();
createLevelArray();
fps_status = new Object();
fps_status.lastTime = getTimer();
fps_status.frameCnt = 0;
soundFx.play("intro_sound");
game.gui.showInfo();
}
function createFeedArray() {
allBlocks.feedArray = new Array();
if (allBlocks.feedSymbols != null) {
var _local3 = 0;
while (_local3 < allBlocks.feedSymbols.length) {
var tmp = allBlocks.feedSymbols[_local3];
var strOuterValue = tmp.charAt(0);
var _local2 = tmp.charAt(1);
var strType = ((_local2 == SPECIALS.RAINBOW) ? (BLOCK_TYPES.RAINBOW) : (((_local2 == SPECIALS.BOMB) ? (BLOCK_TYPES.BOMB) : (BLOCK_TYPES.NORMAL))));
var obj = createBlockObject(strOuterValue, _local2, strType);
allBlocks.feedArray.push(obj);
_local3++;
}
} else {
var len = 900;
var rainbowPercentage = 5;
var bombPercentage = 5;
var rainbows = Math.round(len * (rainbowPercentage / 100));
var bombs = Math.round(len * (bombPercentage / 100));
var _local3 = 0;
while (_local3 < len) {
var _local1;
if (rainbows > 0) {
_local1 = getRandBlockObject(null, BLOCK_TYPES.RAINBOW);
rainbows--;
} else if (bombs > 0) {
_local1 = getRandBlockObject(null, BLOCK_TYPES.BOMB);
bombs--;
} else {
_local1 = getRandBlockObject(null, BLOCK_TYPES.NORMAL);
}
allBlocks.feedArray.push(_local1);
_local3++;
}
allBlocks.feedArray = allBlocks.feedArray.sort(function (a, b) {
return(((Math.floor(Math.random() * 2) == 0) ? 1 : -1));
});
}
}
function createLevelArray() {
allBlocks.levelArray = new Array();
if (allBlocks.levelSymbols != null) {
var i = 0;
while (i < allBlocks.levelSymbols.length) {
var tmp = allBlocks.levelSymbols[i];
var strOuterValue = tmp.charAt(0);
var strInnerValue = tmp.charAt(1);
var strType = BLOCK_TYPES.NORMAL;
allBlocks.levelArray.push(createBlockObject(strOuterValue, strInnerValue, strType));
i++;
}
} else {
var len = ((GAME_ARRAY_WIDTH * GAME_ARRAY_HEIGHT) * 10);
var i = 0;
while (i < len) {
var tmpArray = new Array();
var _local1 = new Array();
var x = 0;
while (x < GAME_ARRAY_WIDTH) {
_local1.push(new Array());
var _local3 = 0;
while (_local3 < GAME_ARRAY_HEIGHT) {
_local1[x].push(false);
_local3++;
}
_local1[x].blockCount = 0;
_local3 = 0;
while (_local3 < GAME_ARRAY_HEIGHT) {
var _local2 = getRandBlockObject({ary:_local1, x:x, y:_local3}, BLOCK_TYPES.NORMAL);
_local1[x][_local3] = _local2;
tmpArray.push(_local2);
_local3++;
}
x++;
}
allBlocks.levelArray = allBlocks.levelArray.concat(tmpArray);
i = i + (GAME_ARRAY_WIDTH * GAME_ARRAY_HEIGHT);
}
}
}
function getRandBlockObject(comboprops, type) {
var _local3 = comboprops;
var _local2 = type;
var _local1 = BLOCK_COLORS[random.range(0, NUMBER_OF_COLORS - 1)];
if (_local2 == BLOCK_TYPES.NORMAL) {
var strInnerValue = BLOCK_COLORS[random.range(0, NUMBER_OF_COLORS - 1)];
while (strInnerValue == _local1) {
strInnerValue = BLOCK_COLORS[random.range(0, NUMBER_OF_COLORS - 1)];
}
} else if (_local2 == BLOCK_TYPES.RAINBOW) {
var strInnerValue = SPECIALS.RAINBOW;
} else if (_local2 == BLOCK_TYPES.BOMB) {
var strInnerValue = SPECIALS.BOMB;
}
if (_local3 != null) {
var ary = _local3.ary;
var x = _local3.x;
var y = _local3.y;
var vCombo = checkBlockDown(x, y - 1, _local1, ary);
var hCombo = checkBlockLeft(x - 1, y, _local1, ary);
var comboLength = (1 + Math.max(vCombo.length, hCombo.length));
if (comboLength >= MIN_COMBO_LENGTH) {
return(getRandBlockObject(_local3, type));
}
}
return(createBlockObject(_local1, strInnerValue, _local2));
}
function createBlockObject(pOuterValue, pInnerValue, pType) {
var _local1 = new Object();
_local1.busy = false;
_local1.tagged = false;
_local1.STATE = BLOCK_STATES.INITIAL;
_local1.TYPE = pType;
_local1.OUTER_VALUE = pOuterValue;
_local1.INNER_VALUE = pInnerValue;
return(_local1);
}
function attachOuterSprite(block, symbol, zIndex) {
var _local1 = block;
if (_local1.outerSprite) {
_local1.outerSprite.removeMovieClip();
}
var _local2 = ((typeof(zIndex) == "number") ? (zIndex) : 1);
_local1.outerSprite = _local1.attachMovie(symbol, "outerSprite_mc", _local2);
}
function attachInnerSprite(block, symbol, zIndex, memberProps) {
var _local1 = block;
if (_local1.innerSprite) {
_local1.innerSprite.removeMovieClip();
}
var _local2 = ((typeof(zIndex) == "number") ? (zIndex) : 0);
_local1.innerSprite = _local1.attachMovie(symbol, "innerSprite_mc", _local2, memberProps);
}
function onSwitchClick(clickedBlock) {
deSelectBlock();
if (clickedBlock.STATE == BLOCK_STATES.SOLID) {
return(false);
}
game.sliding = true;
var _local1 = {action:"switch", moveString:(((((clickedBlock.INNER_VALUE + " ") + clickedBlock.OUTER_VALUE) + " ") + clickedBlock.gridX) + " ") + clickedBlock.gridY};
game.evaluateEvent(_local1);
if (clickedBlock.TYPE == BLOCK_TYPES.BOMB) {
clickedBlock.STATE = BLOCK_STATES.BOMB;
game.evaluateSwitch(clickedBlock);
} else {
var _local2 = function () {
_root.game.evaluateSwitch(clickedBlock);
};
soundFx.play("morph");
switchBlock(clickedBlock, _local2);
}
return(undefined);
}
function onSwapClick(b1, b2) {
deSelectBlock();
setClickTime();
var x1 = b1.gridX;
var _local2 = b1.gridY;
var _local3 = b2.gridX;
var _local1 = b2.gridY;
var doSwap = false;
if ((x1 == _local3) && (Math.abs(_local2 - _local1) == 1)) {
doSwap = true;
}
if ((_local2 == _local1) && (Math.abs(x1 - _local3) == 1)) {
doSwap = true;
}
if (!doSwap) {
} else {
gameArray[x1][_local2] = b2;
gameArray[_local3][_local1] = b1;
b1.gridX = _local3;
b1.gridY = _local1;
b2.gridX = x1;
b2.gridY = _local2;
game.sliding = true;
var e = {action:"swap", moveString:(((((((((b1.OUTER_VALUE + " ") + b1.gridX) + " ") + b1.gridY) + " ") + b2.OUTER_VALUE) + " ") + b2.gridX) + " ") + b2.gridY};
game.evaluateEvent(e);
game.evaluateEvent({action:"reset multiplier"});
var vCombo1 = checkBlock(x1, _local2, true);
var hCombo1 = checkBlock(x1, _local2, false);
var vCombo2 = checkBlock(_local3, _local1, true);
var hCombo2 = checkBlock(_local3, _local1, false);
var comboLength = Math.max(Math.max(vCombo1, hCombo1), Math.max(vCombo2, hCombo2));
sprites.swapZIndex(b1, b2);
if (comboLength < MIN_COMBO_LENGTH) {
gameArray[x1][_local2] = b1;
gameArray[_local3][_local1] = b2;
b1.gridX = x1;
b1.gridY = _local2;
b2.gridX = _local3;
b2.gridY = _local1;
var cb = function () {
game.sliding = false;
game.onNonScoringMove();
sprites.swapZIndex(b1, b2);
};
props = {sprite:b1, slideBack:true, x:GAME_ARRAY_POS_X + (_local3 * BLOCK_WIDTH), y:GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - _local1) - 1) * BLOCK_HEIGHT)};
new SlideSlow(props);
var props = {callback:cb, slideBack:true, sprite:b2, x:GAME_ARRAY_POS_X + (x1 * BLOCK_WIDTH), y:GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - _local2) - 1) * BLOCK_HEIGHT)};
new SlideSlow(props);
} else {
var cb = function () {
game.onSuccessfulClick();
};
props = {sprite:b1, x:GAME_ARRAY_POS_X + (_local3 * BLOCK_WIDTH), y:GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - _local1) - 1) * BLOCK_HEIGHT)};
new SlideSlow(props);
var props = {callback:cb, sprite:b2, x:GAME_ARRAY_POS_X + (x1 * BLOCK_WIDTH), y:GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - _local2) - 1) * BLOCK_HEIGHT)};
new SlideSlow(props);
}
soundFx.play("switch");
}
}
function switchBlock(block, callback) {
var _local1 = block;
var _local2 = _local1.OUTER_VALUE;
_local1.OUTER_VALUE = _local1.INNER_VALUE;
_local1.INNER_VALUE = _local2;
_local1.switchToSprite = _local1.attachMovie(_local1.OUTER_VALUE + BLOCK_SUFFIX.SWITCH_TO, "switchTo_mc", 2);
_local1.switchToSprite.callback = callback;
_local1.switchToSprite.gotoAndPlay(_local2);
}
function selectBlock(block) {
setBrightness(block, CLICK_BRIGHTNESS);
selectedBlock = block;
}
function deSelectBlock() {
setBrightness(selectedBlock, 0);
selectedBlock = false;
}
function registerCombo(x, y, len, dir, comboType) {
var _local3 = y;
setClickTime();
var c = {type:comboType, blocks:new Array()};
var e = {action:comboType};
var popX = 0;
var popY = 0;
var removed = 0;
if (comboType == COMBO_TYPES.COLOR) {
e.value = len;
popX = ((dir == "v") ? (GAME_ARRAY_POS_X + ((x + 0.5) * BLOCK_WIDTH)) : (GAME_ARRAY_POS_X + ((x - (len / 2)) * BLOCK_WIDTH)));
popY = ((dir == "v") ? ((GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - _local3) + (len / 2)) * BLOCK_HEIGHT)) - 8) : ((GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - _local3) - 1) * BLOCK_HEIGHT)) + 10));
while (len > 0) {
var _local1 = ((dir == "v") ? (gameArray[x][_local3 - len]) : (gameArray[x - len][_local3]));
if (!_local1.tagged) {
if ((_local1.TYPE == BLOCK_TYPES.BOMB) && (_local1.STATE != BLOCK_STATES.BOMB)) {
_local1.STATE = BLOCK_STATES.BOMB;
registerCombo(_local1.gridX, _local1.gridY, null, null, COMBO_TYPES.BOMB);
} else {
_local1.tagged = true;
pendingChangingBlocks++;
c.blocks.push(_local1);
if ((_local1.STATE == BLOCK_STATES.SOLID) || (_local1.STATE == BLOCK_STATES.BOMB)) {
removed++;
}
}
}
len--;
}
e.removedValue = removed;
} else if (comboType == COMBO_TYPES.BOMB) {
var len = 0;
var tmpAry = new Array();
tmpAry.push(gameArray[x][_local3]);
tmpAry.push(gameArray[x - 1][_local3 + 1]);
tmpAry.push(gameArray[x - 1][_local3]);
tmpAry.push(gameArray[x - 1][_local3 - 1]);
tmpAry.push(gameArray[x][_local3 + 1]);
tmpAry.push(gameArray[x][_local3 - 1]);
tmpAry.push(gameArray[x + 1][_local3 + 1]);
tmpAry.push(gameArray[x + 1][_local3]);
tmpAry.push(gameArray[x + 1][_local3 - 1]);
var _local2 = 0;
while (_local2 < tmpAry.length) {
var _local1 = tmpAry[_local2];
if (!_local1) {
} else {
len++;
if (!_local1.tagged) {
if ((_local1.TYPE == BLOCK_TYPES.BOMB) && (_local1.STATE != BLOCK_STATES.BOMB)) {
_local1.STATE = BLOCK_STATES.BOMB;
registerCombo(_local1.gridX, _local1.gridY, null, null, COMBO_TYPES.BOMB);
} else {
_local1.tagged = true;
pendingChangingBlocks++;
c.blocks.push(_local1);
if ((_local1.STATE == BLOCK_STATES.SOLID) || (_local1.STATE == BLOCK_STATES.BOMB)) {
removed++;
}
}
}
}
_local2++;
}
e.value = len;
e.removedValue = removed;
popX = GAME_ARRAY_POS_X + ((x + 0.5) * BLOCK_WIDTH);
popY = (GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - _local3) - 1) * BLOCK_HEIGHT)) + 10;
}
removeList.push(c);
var tmpScore = game.evaluateEvent(e);
new ScorePop(popX, popY, tmpScore);
}
function checkBlockRight(x, y, strCheckValue, ary) {
var _local3 = y;
var _local1 = x;
var _local2 = ary || (gameArray);
while (((((_local2[_local1][_local3] && (strCheckValue == SPECIALS.RAINBOW)) || (_local2[_local1][_local3].OUTER_VALUE == strCheckValue)) || (_local2[_local1][_local3].OUTER_VALUE == SPECIALS.RAINBOW)) && (!_local2[_local1][_local3].busy)) && ((!_local2[_local1][_local3].tagged) || (_local2[_local1][_local3].OUTER_VALUE == SPECIALS.RAINBOW))) {
if (strCheckValue == SPECIALS.RAINBOW) {
strCheckValue = _local2[_local1][_local3].OUTER_VALUE;
}
_local1++;
}
return({length:_local1 - x, checkValue:strCheckValue});
}
function checkBlockLeft(x, y, strCheckValue, ary) {
var _local3 = y;
var _local1 = x;
var _local2 = ary || (gameArray);
while (((((_local2[_local1][_local3] && (strCheckValue == SPECIALS.RAINBOW)) || (_local2[_local1][_local3].OUTER_VALUE == strCheckValue)) || (_local2[_local1][_local3].OUTER_VALUE == SPECIALS.RAINBOW)) && (!_local2[_local1][_local3].busy)) && ((!_local2[_local1][_local3].tagged) || (_local2[_local1][_local3].OUTER_VALUE == SPECIALS.RAINBOW))) {
if (strCheckValue == SPECIALS.RAINBOW) {
strCheckValue = _local2[_local1][_local3].OUTER_VALUE;
}
_local1--;
}
return({length:x - _local1, checkValue:strCheckValue});
}
function checkBlockUp(x, y, strCheckValue, ary) {
var _local3 = x;
var _local1 = y;
var _local2 = ary || (gameArray);
while (((((_local2[_local3][_local1] && (strCheckValue == SPECIALS.RAINBOW)) || (_local2[_local3][_local1].OUTER_VALUE == strCheckValue)) || (_local2[_local3][_local1].OUTER_VALUE == SPECIALS.RAINBOW)) && (!_local2[_local3][_local1].busy)) && ((!_local2[_local3][_local1].tagged) || (_local2[_local3][_local1].OUTER_VALUE == SPECIALS.RAINBOW))) {
if (strCheckValue == SPECIALS.RAINBOW) {
strCheckValue = _local2[_local3][_local1].OUTER_VALUE;
}
_local1++;
}
return({length:_local1 - y, checkValue:strCheckValue});
}
function checkBlockDown(x, y, strCheckValue, ary) {
var _local3 = x;
var _local1 = y;
var _local2 = ary || (gameArray);
while (((((_local2[_local3][_local1] && (strCheckValue == SPECIALS.RAINBOW)) || (_local2[_local3][_local1].OUTER_VALUE == strCheckValue)) || (_local2[_local3][_local1].OUTER_VALUE == SPECIALS.RAINBOW)) && (!_local2[_local3][_local1].busy)) && ((!_local2[_local3][_local1].tagged) || (_local2[_local3][_local1].OUTER_VALUE == SPECIALS.RAINBOW))) {
if (strCheckValue == SPECIALS.RAINBOW) {
strCheckValue = _local2[_local3][_local1].OUTER_VALUE;
}
_local1--;
}
return({length:y - _local1, checkValue:strCheckValue});
}
function checkBlock(x, y, bVertical) {
var _local3 = gameArray[x][y];
var len = 1;
var _local2;
var _local1;
if (bVertical) {
_local2 = checkBlockDown(x, y - 1, _local3.OUTER_VALUE);
_local1 = checkBlockUp(x, y + 1, _local3.OUTER_VALUE);
} else {
_local2 = checkBlockLeft(x - 1, y, _local3.OUTER_VALUE);
_local1 = checkBlockRight(x + 1, y, _local3.OUTER_VALUE);
}
if (_local3.OUTER_VALUE == SPECIALS.RAINBOW) {
if (((_local2.checkValue == _local1.checkValue) || (_local2.checkValue == SPECIALS.RAINBOW)) || (_local1.checkValue == SPECIALS.RAINBOW)) {
len = len + (_local2.length + _local1.length);
} else {
len = len + Math.Max(_local2.length, _local1.length);
}
} else {
len = len + (_local2.length + _local1.length);
}
return(len);
}
function killTaggedBlocks() {
var i = 0;
while (i < removeList.length) {
var _local3 = removeList[i];
var _local2 = 0;
while (_local2 < _local3.blocks.length) {
var _local1 = _local3.blocks[_local2];
_local1.busy = true;
_local1.tagged = false;
if ((_local1.STATE == BLOCK_STATES.SOLID) || (_local1.STATE == BLOCK_STATES.BOMB)) {
game.removeBlock(_local1);
} else if (_local1.STATE == BLOCK_STATES.INITIAL) {
game.createSolidBlock(_local1);
}
_local2++;
}
i++;
}
removeList = new Array();
}
function moveDownBlocks() {
var _local2 = 0;
while (_local2 < gameArray.length) {
var _local3 = 0;
var y = 0;
while (y < gameArray[_local2].length) {
if (gameArray[_local2][y]) {
if (_local3 < y) {
var _local1 = gameArray[_local2][y];
var yDiff = (_local1.gridY - _local3);
if (_local1.busy) {
_local1.droptarget_y = _local1.droptarget_y + (yDiff * BLOCK_HEIGHT);
} else {
var cb = function () {
this.sprite.pushed = true;
game.droppingBlockCnt--;
if (game.droppingBlockCnt == 0) {
game.gui.hideIndicators();
game.checkCombos();
}
};
var props = {sprite:_local1, y:_local1._y + (yDiff * BLOCK_HEIGHT), callback:cb};
game.blockDropper.dropBlock(props);
game.droppingBlockCnt++;
_local1.busy = true;
}
_local1.gridY = _local3;
gameArray[_local2][_local3] = _local1;
gameArray[_local2][y] = false;
_local3++;
} else {
_local3++;
}
}
y++;
}
_local2++;
}
}
function testSwitch(x, y) {
var _local1 = gameArray[x][y];
if (_local1.TYPE == BLOCK_TYPES.BOMB) {
return(true);
}
if (_local1.STATE == BLOCK_STATES.SOLID) {
return(false);
}
var _local2 = _local1.OUTER_VALUE;
_local1.OUTER_VALUE = _local1.INNER_VALUE;
_local1.INNER_VALUE = _local2;
var vCombo = checkBlock(x, y, true);
var hCombo = checkBlock(x, y, false);
var _local3 = Math.max(vCombo, hCombo);
_local1.INNER_VALUE = _local1.OUTER_VALUE;
_local1.OUTER_VALUE = _local2;
return(_local3 >= MIN_COMBO_LENGTH);
}
function testSwap(x1, y1, x2, y2) {
var _local1 = y1;
var _local2 = x1;
var _local3 = y2;
var tmp = gameArray[_local2][_local1];
gameArray[_local2][_local1] = gameArray[x2][_local3];
gameArray[x2][_local3] = tmp;
var vCombo1 = checkBlock(_local2, _local1, true);
var hCombo1 = checkBlock(_local2, _local1, false);
var vCombo2 = checkBlock(x2, _local3, true);
var hCombo2 = checkBlock(x2, _local3, false);
var combo = Math.max(Math.max(vCombo1, hCombo1), Math.max(vCombo2, hCombo2));
gameArray[x2][_local3] = gameArray[_local2][_local1];
gameArray[_local2][_local1] = tmp;
return(combo >= MIN_COMBO_LENGTH);
}
function checkPossibleMoves() {
if (game.droppingBlockCnt > 0) {
} else if (game.sliding == true) {
} else if (game.isRemoving == true) {
} else {
var _local1 = Math.floor(game.blockcheckCount / 2);
if ((_local1 * 2) == game.blockcheckCount) {
game.blockCheckData[_local1] = new Array();
}
var start_x = (Math.floor(GAME_ARRAY_WIDTH / 2) * (game.blockcheckCount % 2));
var end_x = (start_x + Math.floor(GAME_ARRAY_WIDTH / 2));
var x = start_x;
while (x < end_x) {
if ((x < GAME_ARRAY_WIDTH) && (_local1 < GAME_ARRAY_HEIGHT)) {
if (testSwitch(x, _local1)) {
game.blockCheckData[_local1].push({x:x});
}
}
if (x < (GAME_ARRAY_WIDTH - 1)) {
if (testSwap(x, _local1, x + 1, _local1)) {
game.blockCheckData[_local1].push({x:x, vertical:false});
}
}
if (_local1 < (GAME_ARRAY_HEIGHT - 1)) {
if (testSwap(x, _local1, x, _local1 + 1)) {
game.blockCheckData[_local1].push({x:x, vertical:true});
}
}
x++;
}
game.blockcheckCount = (game.blockcheckCount + 1) % (GAME_ARRAY_HEIGHT * 2);
if (game.blockcheckCountOnClick == game.blockcheckCount) {
game.blockcheckCountOnline = true;
var _local3;
var _local2 = 0;
while (_local2 < GAME_ARRAY_HEIGHT) {
_local3 = _local3 + game.blockCheckData[_local2].length;
if (_local3 > 0) {
break;
}
_local2++;
}
if (_local3 == 0) {
game.evaluateEvent({action:"no more moves"});
game.killLevel();
var poptmp = new ScorePop(380, 250, noMovesText, 12);
poptmp.target_y = 112;
poptmp.nFrames = 15;
}
}
}
}
function setClickTime(secs) {
var _local1 = new Date().getTime();
if (secs) {
_local1 = _local1 + secs;
}
for (var _local2 in clickTimeDefault) {
clickTime[_local2] = _local1;
}
}
function checkClickTime(prop, no_reset) {
var _local1 = prop;
if (clickTime[_local1] == 0) {
return(false);
}
var _local2 = new Date().getTime();
if ((_local2 - clickTime[_local1]) >= clickTimeDefault[_local1]) {
if (no_reset) {
clickTime[_local1] = 0;
} else {
clickTime[_local1] = _local2;
}
return(true);
}
return(false);
}
function needsNewBlocks() {
var _local1 = 0;
while (_local1 < GAME_ARRAY_WIDTH) {
if (gameArray[_local1].blockCount < GAME_ARRAY_HEIGHT) {
return(true);
}
_local1++;
}
return(false);
}
var self = _local2;
var gameNotStarted = true;
var gameOverreason;
var tryGameOver = false;
var noMovesText;
var startedGameOverSound = false;
var clientServerTimeDiff = {counter:0, sum:0, counterStart:0};
_local2.frameCnt = 0;
_local2.gameOver = false;
_local2.sliding = false;
_local2.changingLevel = true;
_local2.isRemoving = false;
_local2.blockcheckCount = 0;
_local2.blockcheckCountOnClick = 0;
_local2.blockcheckCountOnline = false;
_local2.blockCheckData = new Array();
_local2.blockDropper = new blockDropper();
_local2.blockDropper.start();
var clickTimeDefault = {inactive:5000};
var clickTime = {};
var gameArray;
var removeList = new Array();
var pendingChangingBlocks = 0;
_local2.score = new Score();
var log = new Logger();
_local2.gui = new Gui();
_local2.droppingBlockCnt = 0;
var startTime = new Date().getTime();
var gameDuration;
var allBlocks = {feedSymbols:[], levelSymbols:[], feedArray:[], levelArray:[]};
var selectedBlock;
var blocksParent = sprites.createGroup({group:"blockSprites", x:0, y:0});
var fps_status;
_local2.initialize = function () {
var _local1 = new Object();
_local1.run = function () {
if (gameData != undefined) {
events.stopIt(this);
game.callStart();
}
};
events.runIt(_local1);
};
_local2.callStart = function () {
start();
};
_local2.onStartGame = function () {
this.gui.showEndGameButton();
this.setUpLevel();
events.runIt(self);
wr("start game.run");
fscommand ("gameStart");
};
_local2.run = function () {
this.frameCnt++;
var _local1 = getTimer();
fps_status.frameCnt++;
if ((_local1 - fps_status.lastTime) > 1000) {
info_text.text = "fps: " + fps_status.frameCnt;
fps_status.lastTime = _local1;
fps_status.frameCnt = 0;
}
if (tryGameOver) {
this.setGameOver2();
}
if (this.gameOver) {
} else if (game.changingLevel == true) {
clientServerTimeDiff.counter = _local1 - clientServerTimeDiff.counterStart;
} else {
if (clientServerTimeDiff.counter > 0) {
clientServerTimeDiff.sum = clientServerTimeDiff.sum + clientServerTimeDiff.counter;
clientServerTimeDiff.counter = 0;
}
clientServerTimeDiff.counterStart = _local1;
if (checkClickTime("inactive")) {
game.evaluateEvent({action:"inactive", value:null});
}
if (gameNotStarted) {
startTime = _local1;
}
if ((playTime != undefined) && (playTime != 0)) {
var elapsed = ((parseInt(playTime) * 1000) - clientServerTimeDiff.sum);
startTime = _local1 - elapsed;
playTime = undefined;
} else {
var elapsed = (_local1 - startTime);
}
var timeLeft = (gameDuration - elapsed);
if ((timeLeft <= 5000) && (!startedGameOverSound)) {
soundFx.stop("loop_sound");
startedGameOverSound = true;
soundFx.play("gameover_sound");
}
if (timeLeft <= 0) {
game.setGameOver("time");
}
var _local2 = Math.round(timeLeft / 1000);
_local2 = Math.max(0, _local2);
_local2 = Math.min(gameDuration, _local2);
var str = String(Math.floor(_local2 / 60) + ":");
var _local3 = _local2 % 60;
str = str + ((_local3 < 10) ? ("0" + _local3) : (_local3));
this.gui.setTime(str);
checkPossibleMoves();
}
};
_local2.getFeedBlockObject = function () {
if (allBlocks.feedArray.length == 0) {
createFeedArray();
}
return(allBlocks.feedArray.shift());
};
_local2.pushBlock = function (x, obj, insert_y, z) {
var _local2 = insert_y;
var _local3 = obj;
if (typeof(_local2) != "number") {
_local2 = GAME_ARRAY_HEIGHT - 1;
}
var y = (gameArray[x].length - 1);
while (y > _local2) {
gameArray[x][y] = gameArray[x][y - 1];
gameArray[x][y].gridY = y;
gameArray[x][y]._y = GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - y) - 1) * BLOCK_HEIGHT);
y--;
}
var y = _local2;
if (typeof(z) != "string") {
var z = (("1" + y) + x);
}
var props = {group:blocksParent.groupName, visible:false, x:GAME_ARRAY_POS_X + (x * BLOCK_WIDTH), y:GAME_ARRAY_POS_Y + (((GAME_ARRAY_HEIGHT - y) - 1) * BLOCK_HEIGHT), z:z};
var _local1 = sprites.create(props);
_local1.useHandCursor = false;
_local1.gridX = x;
_local1.gridY = y;
_local1.busy = false;
_local1.pushed = false;
_local1.tagged = false;
_local1.STATE = _local3.STATE;
_local1.TYPE = _local3.TYPE;
_local1.INNER_VALUE = _local3.INNER_VALUE;
_local1.OUTER_VALUE = _local3.OUTER_VALUE;
var innerProps = {_x:INSIDE_OFFSET_X, _y:INSIDE_OFFSET_Y};
var innerZIndex = 0;
if (_local3.TYPE == BLOCK_TYPES.BOMB) {
innerProps = null;
innerZIndex = 1;
}
attachInnerSprite(_local1, _local3.INNER_VALUE + BLOCK_SUFFIX.INSIDE, innerZIndex, innerProps);
var outerSymbol = (_local3.OUTER_VALUE + BLOCK_SUFFIX.FRAME);
var outerZIndex = 1;
if (_local3.TYPE == BLOCK_TYPES.BOMB) {
outerSymbol = _local3.OUTER_VALUE + BLOCK_SUFFIX.SOLID;
outerZIndex = 0;
}
attachOuterSprite(_local1, outerSymbol, outerZIndex);
if (!tryGameOver) {
_local1.onPress = function () {
game.clickBlock(this);
};
}
gameArray[x][y] = _local1;
gameArray[x].blockCount++;
return(true);
};
_local2.setUpLevel = function () {
if (allBlocks.levelArray.length < (GAME_ARRAY_WIDTH * GAME_ARRAY_WIDTH)) {
createLevelArray();
}
this.blockCheckData = new Array();
setClickTime(2000);
if (gameArray) {
gameArray = null;
}
deSelectBlock();
this.droppingBlockCnt = 0;
this.sliding = false;
this.isRemoving = false;
var maxDelay = 0;
gameArray = new Array();
var _local1 = 0;
while (_local1 < GAME_ARRAY_WIDTH) {
gameArray.push(new Array());
var y = 0;
while (y < GAME_ARRAY_HEIGHT) {
gameArray[_local1].push(false);
y++;
}
gameArray[_local1].blockCount = 0;
var y = 0;
while (y < GAME_ARRAY_HEIGHT) {
var blockObject = allBlocks.levelArray.shift();
this.pushBlock(_local1, blockObject, y);
y++;
}
_local1++;
}
_local1 = 0;
while (_local1 < GAME_ARRAY_WIDTH) {
var cb2 = function () {
game.droppingBlockCnt--;
if (game.droppingBlockCnt == 0) {
game.checkCombos();
}
};
var cb = function () {
game.droppingBlockCnt--;
if (game.droppingBlockCnt == 0) {
game.checkCombos();
}
};
var y = 0;
while (y < GAME_ARRAY_HEIGHT) {
var _local2 = y + _local1;
var _local3 = gameArray[_local1][y]._y;
gameArray[_local1][y]._y = BLOCK_DROP_START_Y;
if ((y == 0) && ((_local1 % 2) == 0)) {
props = {callback:cb2, sprite:gameArray[_local1][y], y:_local3, delay:_local2, nFrames:4};
} else {
props = {callback:cb, sprite:gameArray[_local1][y], y:_local3, delay:_local2, nFrames:4};
}
new Initslide(props);
game.droppingBlockCnt++;
y++;
}
_local1++;
}
game.changingLevel = false;
moveDownBlocks();
};
_local2.killLevel = function () {
game.changingLevel = true;
var _local3 = 0;
var cb = function () {
sprites.remove(this.mysprite);
};
var _local2 = 0;
var _local1 = 0;
while (_local1 < GAME_ARRAY_WIDTH) {
var y = 0;
while (y < GAME_ARRAY_HEIGHT) {
tmpSprite = gameArray[_local1][y];
if (tmpSprite) {
tmpSprite.onPress = null;
_local2 = y + _local1;
new Slide({sprite:tmpSprite, y:tmpSprite._y + 400, nFrames:15, callback:cb, delay:_local2});
_local3 = Math.max(_local3, _local2);
}
y++;
}
_local1++;
}
var cb2 = function () {
if (game.gameOver) {
return(undefined);
}
game.setUpLevel();
};
var a = new Delay(cb2, _local3 + 16);
};
_local2.nextLevel = function () {
this.killLevel();
};
_local2.getLevel = function () {
return(this.score.getLevel());
};
_local2.clickBlock = function (clickedBlock) {
var _local1 = clickedBlock;
var _local2 = this;
if (_local2.droppingBlockCnt > 0) {
} else if (_local2.sliding == true) {
} else if (_local2.isRemoving == true) {
} else if (selectedBlock) {
if (selectedBlock == _local1) {
onSwitchClick(_local1);
} else {
onSwapClick(_local1, selectedBlock);
}
} else {
soundFx.play("click");
selectBlock(_local1);
}
};
_local2.evaluateSwitch = function (clickedBlock) {
setClickTime();
this.evaluateEvent({action:"reset multiplier"});
if (clickedBlock.STATE == BLOCK_STATES.INITIAL) {
clickedBlock.innerSprite.removeMovieClip();
var _local2 = clickedBlock.gridX;
var _local1 = clickedBlock.gridY;
var vCombo = checkBlock(_local2, _local1, true);
var hCombo = checkBlock(_local2, _local1, false);
var _local3 = Math.max(vCombo, hCombo);
if (_local3 < MIN_COMBO_LENGTH) {
attachOuterSprite(clickedBlock, clickedBlock.OUTER_VALUE + BLOCK_SUFFIX.FRAME);
var cb = function () {
attachOuterSprite(clickedBlock, clickedBlock.OUTER_VALUE + BLOCK_SUFFIX.FRAME, 1);
attachInnerSprite(clickedBlock, clickedBlock.INNER_VALUE + BLOCK_SUFFIX.INSIDE, 0, {_x:INSIDE_OFFSET_X, _y:INSIDE_OFFSET_Y});
clickedBlock.switchToSprite.removeMovieClip();
game.sliding = false;
game.onNonScoringMove();
};
switchBlock(clickedBlock, cb);
} else {
clickedBlock.outerSprite.removeMovieClip();
this.onSuccessfulClick();
}
} else if (clickedBlock.STATE == BLOCK_STATES.BOMB) {
this.onSuccessfulClick();
}
};
_local2.onSuccessfulClick = function () {
var _local1 = this;
setClickTime();
_local1.blockcheckCountOnClick = (_local1.blockcheckCount = _local1.blockcheckCount - (_local1.blockcheckCount % 2));
_local1.blockcheckCountOnline = false;
_local1.sliding = false;
_local1.checkCombos();
};
_local2.createSolidBlock = function (block) {
var _local1 = block;
_local1.clearToSprite = _local1.attachMovie(_local1.INNER_VALUE + BLOCK_SUFFIX.CLEAR_TO, "mc_clearToSprite", 3);
var _local2 = function () {
var _local1 = this._parent;
attachOuterSprite(_local1, _local1.INNER_VALUE + BLOCK_SUFFIX.SOLID);
_local1.clearToSprite.removeMovieClip();
if (_local1.innerSprite) {
_local1.innerSprite.removeMovieClip();
}
if (_local1.switchToSprite) {
_local1.switchToSprite.removeMovieClip();
}
_local1.OUTER_VALUE = _local1.INNER_VALUE;
_local1.INNER_VALUE = null;
_local1.STATE = BLOCK_STATES.SOLID;
_local1.busy = false;
game.onBlockStateChanged();
};
_local1.clearToSprite.callback = _local2;
};
_local2.removeBlock = function (block) {
var _local1 = block;
var _local3 = this;
_local3.gui.showIndicator(_local1.gridX);
gameArray[_local1.gridX][_local1.gridY] = false;
gameArray[_local1.gridX].blockCount--;
if (_local1.STATE == BLOCK_STATES.SOLID) {
_local1.exitSprite = _local1.attachMovie(_local1.OUTER_VALUE + BLOCK_SUFFIX.EXIT, "mc_exitSprite", 2);
var cb = function () {
game.onBlockStateChanged();
sprites.remove(this._parent);
};
_local1.exitSprite.callback = cb;
_local1.outerSprite.removeMovieClip();
} else if (_local1.STATE == BLOCK_STATES.BOMB) {
var cb = function () {
game.onBlockStateChanged();
sprites.remove(this);
};
var _local2 = sprites.create({member:SPECIALS.BOMB + BLOCK_SUFFIX.EXIT, x:_local1._x - 28, y:_local1._y - 10});
_local2.toFront();
_local2.callback = cb;
sprites.remove(_local1);
}
};
_local2.onBlockStateChanged = function () {
var _local1 = this;
pendingChangingBlocks--;
if (pendingChangingBlocks == 0) {
_local1.isRemoving = false;
if (needsNewBlocks()) {
_local1.feedNewBlocks();
} else {
_local1.checkCombos();
}
}
};
_local2.onNonScoringMove = function () {
var tmpScore = game.evaluateEvent({action:"non-scoring move"});
};
_local2.checkCombos = function () {
gameNotStarted = false;
var _local1 = 0;
while (_local1 < GAME_ARRAY_WIDTH) {
var _local3 = 0;
while (_local3 < GAME_ARRAY_HEIGHT) {
if (gameArray[_local1][_local3].STATE == BLOCK_STATES.BOMB) {
registerCombo(_local1, _local3, null, null, COMBO_TYPES.BOMB);
}
_local3++;
}
_local1++;
}
var _local2 = -1;
var n = 1;
_local1 = 0;
while (_local1 < GAME_ARRAY_WIDTH) {
var _local3 = 0;
while (_local3 < (GAME_ARRAY_HEIGHT + 1)) {
if (((gameArray[_local1][_local3].OUTER_VALUE == _local2) || (gameArray[_local1][_local3] && (_local2 == SPECIALS.RAINBOW))) || ((gameArray[_local1][_local3].OUTER_VALUE == SPECIALS.RAINBOW) && (_local2 != -1))) {
n++;
if (_local2 == SPECIALS.RAINBOW) {
_local2 = gameArray[_local1][_local3].OUTER_VALUE;
}
} else {
if (n >= MIN_COMBO_LENGTH) {
registerCombo(_local1, _local3, n, "v", COMBO_TYPES.COLOR);
}
var prev = gameArray[_local1][_local3 - 1];
while ((prev.OUTER_VALUE == SPECIALS.RAINBOW) && (_local3 < GAME_ARRAY_HEIGHT)) {
_local3--;
prev = gameArray[_local1][_local3 - 1];
}
_local2 = gameArray[_local1][_local3].OUTER_VALUE;
n = 1;
}
_local3++;
}
n = 1;
_local2 = -1;
_local1++;
}
var _local3 = 0;
while (_local3 < GAME_ARRAY_HEIGHT) {
_local1 = 0;
while (_local1 < (GAME_ARRAY_WIDTH + 1)) {
if (((gameArray[_local1][_local3].OUTER_VALUE == _local2) || (gameArray[_local1][_local3] && (_local2 == SPECIALS.RAINBOW))) || ((gameArray[_local1][_local3].OUTER_VALUE == SPECIALS.RAINBOW) && (_local2 != -1))) {
n++;
if (_local2 == SPECIALS.RAINBOW) {
_local2 = gameArray[_local1][_local3].OUTER_VALUE;
}
} else {
if (n >= MIN_COMBO_LENGTH) {
registerCombo(_local1, _local3, n, "h", COMBO_TYPES.COLOR);
}
var prev = gameArray[_local1 - 1][_local3];
while ((prev.OUTER_VALUE == SPECIALS.RAINBOW) && (_local1 < GAME_ARRAY_WIDTH)) {
_local1--;
prev = gameArray[_local1 - 1][_local3];
}
_local2 = gameArray[_local1][_local3].OUTER_VALUE;
n = 1;
}
_local1++;
}
n = 1;
_local2 = -1;
_local3++;
}
if (removeList.length > 0) {
this.isRemoving = true;
killTaggedBlocks();
} else if (needsNewBlocks()) {
game.feedNewBlocks();
}
};
_local2.feedNewBlocks = function () {
var _local3;
var nMax = 0;
var _local1 = 0;
while (_local1 < GAME_ARRAY_WIDTH) {
_local3 = 0;
if (gameArray[_local1].blockCount < GAME_ARRAY_HEIGHT) {
var _local2 = 0;
while (_local2 < GAME_ARRAY_HEIGHT) {
if (!gameArray[_local1][_local2]) {
_local3++;
} else if (_local3 > 0) {
sprites.swapZIndex(gameArray[_local1][_local2], ("1" + (_local2 - _local3)) + _local1);
}
_local2++;
}
}
_local3 = 0;
while (gameArray[_local1].blockCount < GAME_ARRAY_HEIGHT) {
var obj = this.getFeedBlockObject();
this.pushBlock(_local1, obj, GAME_ARRAY_HEIGHT + _local3, ("1" + gameArray[_local1].blockCount) + _local1);
_local3++;
}
nMax = Math.max(_local3, nMax);
_local1++;
}
if (nMax > 0) {
moveDownBlocks();
}
};
_local2.setGameOver = function (reason) {
tryGameOver = true;
if (this.gameOver) {
} else {
deSelectBlock();
gameOverreason = reason;
var _local2 = 0;
while (_local2 < GAME_ARRAY_WIDTH) {
var _local1 = 0;
while (_local1 < GAME_ARRAY_HEIGHT) {
tmpSprite = gameArray[_local2][_local1];
if (tmpSprite) {
tmpSprite.onPress = none;
}
_local1++;
}
_local2++;
}
this.setGameOver2();
}
};
_local2.setGameOver2 = function () {
var _local1 = this;
if (_local1.gameOver) {
} else if (_local1.droppingBlockCnt > 0) {
} else if (_local1.sliding == true) {
} else if (_local1.isRemoving == true) {
} else {
game.evaluateEvent({action:"bonus"});
_local1.gameOver = true;
new GameOverAnimation(gameArray);
}
};
_local2.getScore = function () {
return(this.score.getScore());
};
_local2.evaluateEvent = function (props) {
if (gameOver) {
return(undefined);
}
log.logEvent(props);
return(this.score.evaluateEvent(props));
};
_local2.toggleSound = function () {
this.gui.toggleSound();
soundFx.toggleOnOff();
};
_local2.generateMagicBall = function () {
var _local3 = new Score();
var _local2 = log.getLog();
var _local1 = 0;
while (_local1 < _local2.length) {
_local3.evaluateEvent(_local2[_local1]);
_local1++;
}
var finalScore = _local3.getScore();
gameResult = finalScore;
fscommand ("gameOver", String(finalScore));
};
}
function main() {
if (_gameStarted) {
return(undefined);
}
_gameStarted = true;
game = new Game("SilverScreen");
game.initialize();
}
sprites = new Sprites();
events = new Events();
soundFx = new SoundFx();
random = new Random();
var GAME_ARRAY_POS_X = 145;
var GAME_ARRAY_POS_Y = 12;
var GAME_ARRAY_WIDTH = 9;
var GAME_ARRAY_HEIGHT = 9;
var BLOCK_WIDTH = 51;
var BLOCK_HEIGHT = 40;
var NUMBER_OF_COLORS = 6;
var INSIDE_OFFSET_X = 8.8;
var INSIDE_OFFSET_Y = 21;
var BLOCK_DROP_START_Y = -40;
var MIN_COMBO_LENGTH = 3;
var MOUSE_OVER_BRIGHTNESS = 40;
var CLICK_BRIGHTNESS = -20;
var BLOCK_STATES = {INITIAL:"initial", SOLID:"solid", BOMB:"bomb"};
var BLOCK_TYPES = {NORMAL:"normal", RAINBOW:"rainbow", BOMB:"bomb"};
var BLOCK_SUFFIX = {FRAME:"_frame", INSIDE:"_inside", SOLID:"_solid", EXIT:"_exit", CLEAR_TO:"_clear2", SWITCH_TO:"_switch2"};
var BLOCK_COLORS = ["T", "G", "P", "B", "R", "Y"];
var SPECIALS = {RAINBOW:"W", BOMB:"I"};
var COMBO_TYPES = {COLOR:"color", BOMB:"bomb", CROSS:"cross"};
var gameResult = undefined;
var gameData = undefined;
var playTime = undefined;
gamedata = "<gamedata timelimit=\"100\"><text id=\"score\">PO\u00C4NG</text><text id=\"time_left\">TID KVAR</text><text id=\"end_game\">AVSLUTA</text><text id=\"instruction_header\">SPELINSTRUKTIONER</text><text id=\"instruction_text_1\">SKAPA RADER ELLER KOLUMNER MED 3 ELLER FLERA KRISTALLER MED SAMMA YTTRE F\u00C4RG F\u00D6R ATT RENSA BORT KRISTALLERNAS SKAL.</text><text id=\"instruction_text_2\">KLICKA EN G\u00C5NG P\u00C5 TV\u00C5 INTILLIGGANDE KUBER F\u00D6R ATT BYTA PLATS DEM. DUBBELKLICKA P\u00C5 EN 2-F\u00C4RGAD KUB F\u00D6R ATT SKIFTA PLATS P\u00C5 DE INRE OCH YTTRE F\u00C4RGERNA.</text><text id=\"instruction_text_3\">REGNB\u00C5GSKRISTALLEN KAN MATCHAS IHOP MED VILKEN F\u00C4RG SOM HELST. EN ELDKUB SPR\u00C4NGER BORT ETT LAGER P\u00C5 ALLA KUBER DEN NUDDAR.</text><text id=\"start_in\">SEKUNDER TILL START</text><text id=\"symbols_cleared\">RENSADE KRISTALLER</text><text id=\"game_over\">SPELET \u00C4R SLUT</text><text id=\"game_score\">PO\u00C4NG</text><text id=\"symbol_bonus\">BONUS</text><text id=\"result\">RESULTAT</text><text id=\"start_game\">STARTA SPELET</text><text id=\"nomoves\">Inga fler drag</text></gamedata>";
Stage.showMenu = false;
Stage.scaleMode = "noScale";
stop();
main();
Symbol 20 MovieClip [Y_exit] Frame 7
stop();
if (this.callback) {
this.callback();
}
Symbol 73 MovieClip [I_exit] Frame 11
stop();
if (this._parent.callback) {
this._parent.callback();
}
Symbol 154 MovieClip [W_switch2] Frame 9
stop();
if (this.callback) {
this.callback();
}
Symbol 154 MovieClip [W_switch2] Frame 18
stop();
if (this.callback) {
this.callback();
}
Symbol 154 MovieClip [W_switch2] Frame 27
stop();
if (this.callback) {
this.callback();
}
Symbol 154 MovieClip [W_switch2] Frame 36
stop();
if (this.callback) {
this.callback();
}
Symbol 154 MovieClip [W_switch2] Frame 45
stop();
if (this.callback) {
this.callback();
}
Symbol 154 MovieClip [W_switch2] Frame 54
stop();
if (this.callback) {
this.callback();
}
Symbol 161 MovieClip [W_exit] Frame 7
stop();
if (this.callback) {
this.callback();
}
Symbol 171 MovieClip [W_clear2] Frame 10
stop();
if (this.callback) {
this.callback();
}
Symbol 181 MovieClip [R_exit] Frame 7
stop();
if (this.callback) {
this.callback();
}
Symbol 187 MovieClip [B_exit] Frame 7
stop();
if (this.callback) {
this.callback();
}
Symbol 193 MovieClip [P_exit] Frame 7
stop();
if (this.callback) {
this.callback();
}
Symbol 199 MovieClip [G_exit] Frame 7
stop();
if (this.callback) {
this.callback();
}
Symbol 205 MovieClip [T_exit] Frame 7
stop();
if (this.callback) {
this.callback();
}
Symbol 269 MovieClip [B_switch2] Frame 9
stop();
if (this.callback) {
this.callback();
}
Symbol 269 MovieClip [B_switch2] Frame 18
stop();
if (this.callback) {
this.callback();
}
Symbol 269 MovieClip [B_switch2] Frame 27
stop();
if (this.callback) {
this.callback();
}
Symbol 269 MovieClip [B_switch2] Frame 36
stop();
if (this.callback) {
this.callback();
}
Symbol 269 MovieClip [B_switch2] Frame 45
stop();
if (this.callback) {
this.callback();
}
Symbol 269 MovieClip [B_switch2] Frame 54
stop();
if (this.callback) {
this.callback();
}
Symbol 324 MovieClip [P_switch2] Frame 9
stop();
if (this.callback) {
this.callback();
}
Symbol 324 MovieClip [P_switch2] Frame 18
stop();
if (this.callback) {
this.callback();
}
Symbol 324 MovieClip [P_switch2] Frame 27
stop();
if (this.callback) {
this.callback();
}
Symbol 324 MovieClip [P_switch2] Frame 36
stop();
if (this.callback) {
this.callback();
}
Symbol 324 MovieClip [P_switch2] Frame 45
stop();
if (this.callback) {
this.callback();
}
Symbol 324 MovieClip [P_switch2] Frame 54
stop();
if (this.callback) {
this.callback();
}
Symbol 379 MovieClip [G_switch2] Frame 9
stop();
if (this.callback) {
this.callback();
}
Symbol 379 MovieClip [G_switch2] Frame 18
stop();
if (this.callback) {
this.callback();
}
Symbol 379 MovieClip [G_switch2] Frame 27
stop();
if (this.callback) {
this.callback();
}
Symbol 379 MovieClip [G_switch2] Frame 36
stop();
if (this.callback) {
this.callback();
}
Symbol 379 MovieClip [G_switch2] Frame 45
stop();
if (this.callback) {
this.callback();
}
Symbol 379 MovieClip [G_switch2] Frame 54
stop();
if (this.callback) {
this.callback();
}
Symbol 389 MovieClip [B_clear2] Frame 10
stop();
if (this.callback) {
this.callback();
}
Symbol 399 MovieClip [P_clear2] Frame 10
stop();
if (this.callback) {
this.callback();
}
Symbol 409 MovieClip [G_clear2] Frame 10
stop();
if (this.callback) {
this.callback();
}
Symbol 466 MovieClip [Y_switch2] Frame 9
stop();
if (this.callback) {
this.callback();
}
Symbol 466 MovieClip [Y_switch2] Frame 18
stop();
if (this.callback) {
this.callback();
}
Symbol 466 MovieClip [Y_switch2] Frame 27
stop();
if (this.callback) {
this.callback();
}
Symbol 466 MovieClip [Y_switch2] Frame 36
stop();
if (this.callback) {
this.callback();
}
Symbol 466 MovieClip [Y_switch2] Frame 45
stop();
if (this.callback) {
this.callback();
}
Symbol 466 MovieClip [Y_switch2] Frame 54
stop();
if (this.callback) {
this.callback();
}
Symbol 521 MovieClip [R_switch2] Frame 9
stop();
if (this.callback) {
this.callback();
}
Symbol 521 MovieClip [R_switch2] Frame 18
stop();
if (this.callback) {
this.callback();
}
Symbol 521 MovieClip [R_switch2] Frame 27
stop();
if (this.callback) {
this.callback();
}
Symbol 521 MovieClip [R_switch2] Frame 36
stop();
if (this.callback) {
this.callback();
}
Symbol 521 MovieClip [R_switch2] Frame 45
stop();
if (this.callback) {
this.callback();
}
Symbol 521 MovieClip [R_switch2] Frame 54
stop();
if (this.callback) {
this.callback();
}
Symbol 576 MovieClip [T_switch2] Frame 9
stop();
if (this.callback) {
this.callback();
}
Symbol 576 MovieClip [T_switch2] Frame 18
stop();
if (this.callback) {
this.callback();
}
Symbol 576 MovieClip [T_switch2] Frame 27
stop();
if (this.callback) {
this.callback();
}
Symbol 576 MovieClip [T_switch2] Frame 36
stop();
if (this.callback) {
this.callback();
}
Symbol 576 MovieClip [T_switch2] Frame 45
stop();
if (this.callback) {
this.callback();
}
Symbol 576 MovieClip [T_switch2] Frame 54
stop();
if (this.callback) {
this.callback();
}
Symbol 596 MovieClip [Y_clear2] Frame 10
stop();
if (this.callback) {
this.callback();
}
Symbol 606 MovieClip [R_clear2] Frame 10
stop();
if (this.callback) {
this.callback();
}
Symbol 616 MovieClip [T_clear2] Frame 10
stop();
if (this.callback) {
this.callback();
}
Symbol 658 MovieClip Frame 1
stop();
Symbol 658 MovieClip Frame 2
stop();