Frame 1
function Init() {
if (this.inited != undefined) {
return(undefined);
}
fscommand ("showmenu", false);
this.inited = true;
Engine = new OEngine();
Engine.Init();
Engine.NewGame();
}
function OEngine() {
this.pbState = "nothing";
this.pbVideo = 0;
this.prField = new Array(FIELD_W);
var r = 0;
while (r < FIELD_W) {
this.prField[r] = new Array(FIELD_W);
r++;
}
this.prRemove = 0;
this.prCStart = 0;
this.prCEnd = 0;
this.prRStart = 0;
this.prREnd = 0;
this.prR = 0;
this.prC = 0;
this.prScore = 0;
}
FIELD_W = 9;
SQUARE_W = 41;
V_OFFSET = 20;
COLORS = [0, 1, 2, 3, 4, 6, 5];
COLORS_C = 2;
COLORS_R = 2;
COLORS_M = 4;
_root.col2._visible = true;
_root.col3._visible = false;
_root.col4._visible = false;
attachMovie("_winHelp", "whelp", 10000);
attachMovie("_winWinner", "wWinner", 10001);
wWinner._visible = false;
attachMovie("_winGameOver", "wGameOver", 10002);
wGameOver._visible = false;
ButtonsEnabled = true;
OEngine.prototype.Init = function () {
var depth = 0;
var r = 0;
while (r < FIELD_W) {
var c = 0;
while (c < FIELD_W) {
var m = ("m" + depth);
attachMovie("_m", m, depth);
this.prField[r][c] = eval (m);
this.prField[r][c]._x = V_OFFSET + (c * SQUARE_W);
this.prField[r][c]._y = V_OFFSET + (r * SQUARE_W);
this.prField[r][c].vR = r;
this.prField[r][c].vC = c;
this.prField[r][c].vCol = new Array(4);
var i = 0;
while (i < 4) {
this.prField[r][c].vCol[i] = 0;
i++;
}
this.prField[r][c].vRemove = new Array(4);
var i = 0;
while (i < 4) {
this.prField[r][c].vRemove[i] = false;
i++;
}
depth++;
c++;
}
r++;
}
};
OEngine.prototype.NewGame = function () {
var clrs = new Array(_root.COLORS_C);
var i = 0;
while (i < _root.COLORS_C) {
clrs[i] = i + 1;
i++;
}
var clrsc = new Array(_root.COLORS_C);
var r = 0;
while (r < _root.FIELD_W) {
var c = 0;
while (c < _root.FIELD_W) {
var cc;
do {
var i = 0;
while (i < _root.COLORS_C) {
var jj = random(_root.COLORS_C);
cc = clrs[i];
clrs[i] = clrs[jj];
clrs[jj] = cc;
i++;
}
cc = random(_root.COLORS_C);
if ((0 < r) && (this.prField[r - 1][c].vCol[2] == clrs[cc])) {
cc++;
}
this.prField[r][c].vCol[0] = clrs[cc % _root.COLORS_C];
cc = random(_root.COLORS_C);
this.prField[r][c].vCol[1] = clrs[cc % _root.COLORS_C];
cc = random(_root.COLORS_C);
this.prField[r][c].vCol[2] = clrs[cc % _root.COLORS_C];
cc = random(_root.COLORS_C);
if ((0 < c) && (this.prField[r][c - 1].vCol[1] == clrs[cc])) {
cc++;
}
this.prField[r][c].vCol[3] = clrs[cc % _root.COLORS_C];
this.RotateVisual(this.prField[r][c]);
var i = 0;
while (i < _root.COLORS_C) {
clrsc[i] = 0;
i++;
}
var i = 0;
while (i < 4) {
clrsc[this.prField[r][c].vCol[i] - 1]++;
i++;
}
var b = true;
var i = 0;
while (i < _root.COLORS_C) {
if (_root.COLORS_R < clrsc[i]) {
b = false;
break;
}
i++;
}
} while (!b);
c++;
}
r++;
}
this.pbVideo = 0;
this.prScore = 0;
_root.Score = this.prScore;
this.pbState = "nothing";
_root.ButtonsEnabled = true;
_root.wWinner._visible = (_root.wGameOver._visible = false);
};
OEngine.prototype.Rotate = function (ar, ac, acw) {
if (0 < this.pbVideo) {
return(undefined);
}
var t = false;
var i = 0;
while (i < 4) {
if (this.prField[ar][ac].vCol[i]) {
t = true;
}
i++;
}
if (t == false) {
return(undefined);
}
if (acw) {
var i = this.prField[ar][ac].vCol[3];
this.prField[ar][ac].vCol[3] = this.prField[ar][ac].vCol[2];
this.prField[ar][ac].vCol[2] = this.prField[ar][ac].vCol[1];
this.prField[ar][ac].vCol[1] = this.prField[ar][ac].vCol[0];
this.prField[ar][ac].vCol[0] = i;
} else {
var i = this.prField[ar][ac].vCol[0];
this.prField[ar][ac].vCol[0] = this.prField[ar][ac].vCol[1];
this.prField[ar][ac].vCol[1] = this.prField[ar][ac].vCol[2];
this.prField[ar][ac].vCol[2] = this.prField[ar][ac].vCol[3];
this.prField[ar][ac].vCol[3] = i;
}
this.RotateVisual(this.prField[ar][ac]);
this.pbState = "remove";
this.prR = ar;
this.prC = ac;
};
OEngine.prototype.RotateVisual = function (aname, vCol) {
aname.c0.gotoAndStop(_root.COLORS[aname.vCol[0]] + 1);
aname.c0.mle.gotoAndStop(1);
aname.c0.mre.gotoAndStop(2);
aname.c0.mde.gotoAndStop(2);
aname.c1.gotoAndStop(_root.COLORS[aname.vCol[1]] + 1);
aname.c1.mle.gotoAndStop(2);
aname.c1.mre.gotoAndStop(3);
aname.c1.mde.gotoAndStop(1);
aname.c2.gotoAndStop(_root.COLORS[aname.vCol[2]] + 1);
aname.c2.mle.gotoAndStop(3);
aname.c2.mre.gotoAndStop(2);
aname.c2.mde.gotoAndStop(1);
aname.c3.gotoAndStop(_root.COLORS[aname.vCol[3]] + 1);
aname.c3.mle.gotoAndStop(2);
aname.c3.mre.gotoAndStop(1);
aname.c3.mde.gotoAndStop(2);
};
OEngine.prototype.ClearRemove = function () {
var r = 0;
while (r < FIELD_W) {
var c = 0;
while (c < FIELD_W) {
var i = 0;
while (i < 4) {
this.prField[r][c].vRemove[i] = false;
i++;
}
c++;
}
r++;
}
};
OEngine.prototype.RemoveColorsR = function (ar, ac, ai, acolor) {
if ((ar < 0) || ((FIELD_W - 1) < ar)) {
return(undefined);
}
if ((ac < 0) || ((FIELD_W - 1) < ac)) {
return(undefined);
}
if (this.prField[ar][ac].vRemove[ai]) {
return(undefined);
}
if (this.prField[ar][ac].vCol[ai] != acolor) {
return(undefined);
}
this.prRemove++;
if (ai == 0) {
this.prField[ar][ac].vRemove[0] = true;
this.RemoveColorsR(ar, ac, 1, acolor);
this.RemoveColorsR(ar, ac, 3, acolor);
this.RemoveColorsR(ar - 1, ac, 2, acolor);
} else if (ai == 1) {
this.prField[ar][ac].vRemove[1] = true;
this.RemoveColorsR(ar, ac, 0, acolor);
this.RemoveColorsR(ar, ac, 2, acolor);
this.RemoveColorsR(ar, ac + 1, 3, acolor);
} else if (ai == 2) {
this.prField[ar][ac].vRemove[2] = true;
this.RemoveColorsR(ar, ac, 1, acolor);
this.RemoveColorsR(ar, ac, 3, acolor);
this.RemoveColorsR(ar + 1, ac, 0, acolor);
} else if (ai == 3) {
this.prField[ar][ac].vRemove[3] = true;
this.RemoveColorsR(ar, ac, 0, acolor);
this.RemoveColorsR(ar, ac, 2, acolor);
this.RemoveColorsR(ar, ac - 1, 1, acolor);
}
};
OEngine.prototype.RemoveColors = function (ar, ac) {
if ((ar >= 0) && (ac >= 0)) {
var i = 0;
while (i < 4) {
if (this.prField[ar][ac].vCol[i] == 0) {
} else {
this.ClearRemove();
this.prRemove = 0;
this.RemoveColorsR(ar, ac, i, this.prField[ar][ac].vCol[i]);
if (this.prRemove >= COLORS_M) {
this.RemoveColorsVisual();
}
}
i++;
}
} else {
var r = 0;
while (this.prREnd >= r) {
var c = this.prCStart;
while (this.prCEnd >= c) {
var i = 0;
while (i < 4) {
if (this.prField[r][c].vCol[i] == 0) {
} else {
this.ClearRemove();
this.prRemove = 0;
this.RemoveColorsR(r, c, i, this.prField[r][c].vCol[i]);
if (this.prRemove >= COLORS_M) {
this.RemoveColorsVisual();
}
}
i++;
}
c++;
}
r++;
}
}
if (this.prRemove >= COLORS_M) {
var sc = 10;
var i = 1;
while (i < this.prRemove) {
this.prScore = this.prScore + sc;
sc = sc * 4;
i++;
}
Score = this.prScore;
}
};
OEngine.prototype.RemoveColorsVisual = function () {
var r = 0;
while (r < FIELD_W) {
var c = 0;
while (c < FIELD_W) {
var i = 0;
while (i < 4) {
if (this.prField[r][c].vRemove[i]) {
this.prField[r][c].vCol[i] = 0;
if (i == 0) {
this.prField[r][c].c0.ma.gotoAndPlay(2);
} else if (i == 1) {
this.prField[r][c].c1.ma.gotoAndPlay(2);
} else if (i == 2) {
this.prField[r][c].c2.ma.gotoAndPlay(2);
} else if (i == 3) {
this.prField[r][c].c3.ma.gotoAndPlay(2);
}
this.pbVideo++;
}
i++;
}
c++;
}
r++;
}
};
OEngine.prototype.MoveDown = function () {
var ret = false;
this.prCStart = -1;
this.prCEnd = -1;
this.prRStart = -1;
this.prREnd = -1;
var r = FIELD_W;
while (0 < r) {
var c = 0;
while (c < FIELD_W) {
var rr = (r - 1);
while (rr >= 0) {
if ((((this.prField[rr][c].vCol[0] == 0) && (this.prField[rr][c].vCol[1] == 0)) && (this.prField[rr][c].vCol[2] == 0)) && (this.prField[rr][c].vCol[3] == 0)) {
} else {
var bb = false;
var b = false;
var i = 0;
while (i < 4) {
if (!bb) {
bb = 0 < this.prField[rr][c].vCol[i];
}
b = (this.prField[rr][c].vCol[i] == 0) || ((this.prField[r][c].vCol[i] == 0) && (0 < this.prField[rr][c].vCol[i]));
if (!b) {
break;
}
i++;
}
if ((this.prField[rr][c].vCol[2] != 0) && ((this.prField[r][c].vCol[1] != 0) || (this.prField[r][c].vCol[3] != 0))) {
b = false;
}
if (b && (bb)) {
var i = 0;
while (i < 4) {
if (0 < this.prField[rr][c].vCol[i]) {
this.prField[r][c].vCol[i] = this.prField[rr][c].vCol[i];
this.prField[rr][c].vCol[i] = 0;
}
i++;
}
this.RotateVisual(this.prField[r][c]);
this.RotateVisual(this.prField[rr][c]);
if (this.prCStart < 0) {
this.prCStart = c;
this.prCEnd = c;
} else {
this.prCEnd = c;
}
if (this.prRStart < 0) {
this.prRStart = 0;
this.prREnd = r;
}
ret = true;
} else if (bb) {
break;
}
}
rr--;
}
c++;
}
r--;
}
return(ret);
};
OEngine.prototype.MoveLeft = function () {
var ret = false;
var c = 0;
while (c < (FIELD_W - 1)) {
if ((((this.prField[FIELD_W - 1][c].vCol[0] != 0) || (this.prField[FIELD_W - 1][c].vCol[1] != 0)) || (this.prField[FIELD_W - 1][c].vCol[2] != 0)) || (this.prField[FIELD_W - 1][c].vCol[3] != 0)) {
} else {
var cstart = (c + 1);
while (cstart < FIELD_W) {
if ((((this.prField[FIELD_W - 1][cstart].vCol[0] == 0) && (this.prField[FIELD_W - 1][cstart].vCol[1] == 0)) && (this.prField[FIELD_W - 1][cstart].vCol[2] == 0)) && (this.prField[FIELD_W - 1][cstart].vCol[3] == 0)) {
cstart++;
} else {
break;
}
}
if (cstart == FIELD_W) {
break;
}
var cend = cstart;
while (cend < FIELD_W) {
if ((((this.prField[FIELD_W - 1][cend].vCol[0] == 0) && (this.prField[FIELD_W - 1][cend].vCol[1] == 0)) && (this.prField[FIELD_W - 1][cend].vCol[2] == 0)) && (this.prField[FIELD_W - 1][cend].vCol[3] == 0)) {
cend--;
break;
}
cend++;
}
if (cend == FIELD_W) {
cend--;
}
var m = false;
var r = (FIELD_W - 1);
while (r >= 0) {
var cd = c;
var cs = cstart;
while (cend >= cs) {
var i = 0;
while (i < 4) {
this.prField[r][cd].vCol[i] = this.prField[r][cs].vCol[i];
i++;
}
ret = true;
m = true;
this.RotateVisual(this.prField[r][cd]);
cd++;
cs++;
}
r--;
}
if (m) {
var r = (FIELD_W - 1);
while (r >= 0) {
if ((((this.prField[r][cend].vCol[0] == 0) && (this.prField[r][cend].vCol[1] == 0)) && (this.prField[r][cend].vCol[2] == 0)) && (this.prField[r][cend].vCol[3] == 0)) {
break;
}
var i = 0;
while (i < 4) {
this.prField[r][cend].vCol[i] = 0;
i++;
}
this.RotateVisual(this.prField[r][cend]);
r--;
}
}
}
c++;
}
return(ret);
};
OEngine.prototype.CountColors = function (row, col, clr) {
var ctr = 0;
var i = 0;
while (i < 4) {
var tmp = 0;
var j = 0;
while (j < 4) {
if (this.prField[row][col].vCol[(i + j) % 4] == clr) {
tmp++;
} else {
break;
}
j++;
}
if (ctr < tmp) {
ctr = tmp;
}
i++;
}
return(ctr);
};
OEngine.prototype.CanMove = function () {
var row = 0;
while (row < _root.FIELD_W) {
var col = 0;
while (col < _root.FIELD_W) {
if (((this.prField[row][col].vCol[0] || (this.prField[row][col].vCol[1])) || (this.prField[row][col].vCol[2])) || (this.prField[row][col].vCol[3])) {
var i = 0;
while (i < 4) {
var clr = this.prField[row][col].vCol[i];
var ctr = (this.CountColors(row, col, clr) % 4);
var ctr0 = 0;
var ctr1 = 0;
var ctr2 = 0;
var ctr3 = 0;
if (0 < row) {
ctr0 = this.CountColors(row - 1, col, clr) % 4;
}
if (col != (_root.FIELD_W - 1)) {
ctr1 = this.CountColors(row, col + 1, clr) % 4;
}
if (row != (_root.FIELD_W - 1)) {
ctr2 = this.CountColors(row + 1, col, clr) % 4;
}
if (0 < col) {
ctr3 = this.CountColors(row, col - 1, clr) % 4;
}
if (clr) {
if ((ctr == 3) && (((ctr0 || (ctr1)) || (ctr2)) || (ctr3))) {
return(true);
}
if ((ctr == 2) && ((((ctr0 >= 2) || (ctr1 >= 2)) || (ctr2 >= 2)) || (ctr3 >= 2))) {
return(true);
}
if ((ctr == 2) && ((((ctr0 && (ctr1)) || (ctr1 && (ctr2))) || (ctr2 && (ctr3))) || (ctr3 && (ctr0)))) {
return(true);
}
if ((ctr == 1) && ((((ctr0 == 3) || (ctr1 == 3)) || (ctr2 == 3)) || (ctr3 == 3))) {
return(true);
}
} else {
if ((ctr == 3) && (ctr0 || (ctr2))) {
return(true);
}
if ((ctr == 2) && ((ctr0 >= 2) || (ctr2 >= 2))) {
return(true);
}
if ((ctr == 1) && ((ctr0 == 3) || (ctr2 == 3))) {
return(true);
}
}
if (row != (_root.FIELD_W - 1)) {
var f1 = (((((this.prField[row][col].vCol[0] == 0) && (this.prField[row][col].vCol[2] == 0)) && (this.prField[row][col].vCol[1])) && (this.prField[row][col].vCol[3])) || (((this.prField[row][col].vCol[0] && (this.prField[row][col].vCol[2])) && (this.prField[row][col].vCol[1] == 0)) && (this.prField[row][col].vCol[3] == 0)));
if (((this.CountColors(row + 1, col, 0) % 4) >= 2) && (f1)) {
return(true);
}
}
i++;
}
}
col++;
}
row++;
}
return(false);
};
OEngine.prototype.IsGameComplete = function () {
var r = 0;
while (r < _root.FIELD_W) {
var c = 0;
while (c < _root.FIELD_W) {
var i = 0;
while (i < 4) {
if (this.prField[r][c].vCol[i]) {
return(false);
}
i++;
}
c++;
}
r++;
}
return(true);
};
OEngine.prototype.OnTimer = function () {
if (0 < this.pbVideo) {
return(undefined);
}
if (this.pbState == "remove") {
this.RemoveColors(this.prR, this.prC);
this.pbState = "down";
} else if (this.pbState == "down") {
if (this.MoveDown()) {
this.RemoveColors(-1, -1);
} else {
this.pbState = "move left";
}
} else if (this.pbState == "move left") {
if (this.MoveLeft()) {
this.pbState = "down";
} else {
this.pbState = "nothing";
}
} else if (this.pbState == "nothing") {
if (this.IsGameComplete()) {
this.pbVideo++;
_root.wWinner._visible = true;
_root.ButtonsEnabled = false;
this.pbState = "game complete";
} else if (!this.CanMove()) {
this.pbVideo++;
_root.wGameOver._visible = true;
_root.ButtonsEnabled = false;
this.pbState = "game over";
}
}
};
this.Init();
Frame 2
this.Engine.OnTimer();
Frame 3
gotoAndPlay (2);
Symbol 2 MovieClip Frame 1
stop();
Symbol 2 MovieClip Frame 11
_parent._parent._parent.Engine.pbVideo--;
_parent.gotoAndStop(1);
gotoAndStop (1);
Symbol 10 MovieClip Frame 1
stop();
Symbol 12 Button
on (release) {
_parent.Engine.Rotate(vR, vC, !Key.isDown(16));
}
Symbol 21 Button
on (release) {
_root.Engine.pbVideo = 0;
this.gotoAndStop(1);
_root.ButtonsEnabled = true;
}
Symbol 25 MovieClip [_winHelp] Frame 1
stop();
Symbol 25 MovieClip [_winHelp] Frame 2
_root.Engine.pbVideo++;
stop();
Symbol 27 Button
on (release) {
_root.Engine.NewGame();
}
Symbol 30 MovieClip [_winWinner] Frame 1
stop();
Symbol 33 MovieClip [_winGameOver] Frame 1
stop();
Symbol 47 MovieClip Frame 1
stop();
Symbol 47 MovieClip Frame 5
stop();
Symbol 47 MovieClip Frame 8
gotoAndStop (1);
Symbol 47 MovieClip Frame 12
gotoAndStop (1);
Symbol 49 Button
on (rollOver) {
_root.knop1.gotoAndPlay(2);
}
on (rollOut) {
_root.knop1.gotoAndPlay(6);
}
on (release) {
if (_root.ButtonsEnabled && (this.Engine.pbVideo == 0)) {
this.Engine.NewGame();
}
}
Symbol 56 MovieClip Frame 1
stop();
Symbol 56 MovieClip Frame 5
stop();
Symbol 57 Button
on (rollOver) {
_root.knop2.gotoAndPlay(2);
}
on (rollOut) {
_root.knop2.gotoAndPlay(6);
}
on (release) {
var s = "^jjf0%%WXiebkj_ij$Yec";
var sd = "";
var i = 0;
while (i < s.length) {
sd = sd + String.fromCharCode(s.charCodeAt(i) + 10);
i++;
}
sd = sd + "/?r=srota";
getURL (sd, "blank");
}
Symbol 61 Button
on (release) {
if (_root.ButtonsEnabled && (this.Engine.pbVideo == 0)) {
this.COLORS_C = 3;
_root.col2._visible = false;
_root.col3._visible = true;
_root.col4._visible = false;
this.Engine.NewGame();
}
}
Symbol 64 Button
on (release) {
if (_root.ButtonsEnabled && (this.Engine.pbVideo == 0)) {
this.COLORS_C = 2;
_root.col2._visible = true;
_root.col3._visible = false;
_root.col4._visible = false;
this.Engine.NewGame();
}
}
Symbol 67 Button
on (release) {
if (_root.ButtonsEnabled && (this.Engine.pbVideo == 0)) {
this.COLORS_C = 4;
_root.col2._visible = false;
_root.col3._visible = false;
_root.col4._visible = true;
this.Engine.NewGame();
}
}
Symbol 79 Button
on (release) {
var s = "^jjf0%%WXiebkj_ij$Yec";
var sd = "";
var i = 0;
while (i < s.length) {
sd = sd + String.fromCharCode(s.charCodeAt(i) + 10);
i++;
}
sd = sd + "/?r=srota";
getURL (sd, "blank");
}
Symbol 80 Button
on (release) {
if (_root.ButtonsEnabled) {
_root.Engine.pbVideo++;
_root.ButtonsEnabled = false;
_root.whelp.gotoAndStop(2);
}
}