786 lines
24 KiB
JavaScript
786 lines
24 KiB
JavaScript
function _0x5d34(_0x4b68a3, _0x3b90df) {
|
|
var _0x30aa1f = _0x30aa();
|
|
return (
|
|
(_0x5d34 = function (_0x5d34bf, _0x485476) {
|
|
_0x5d34bf = _0x5d34bf - 0x171;
|
|
var _0x50f17c = _0x30aa1f[_0x5d34bf];
|
|
return _0x50f17c;
|
|
}),
|
|
_0x5d34(_0x4b68a3, _0x3b90df)
|
|
);
|
|
}
|
|
var _0x3887b9 = _0x5d34;
|
|
(function (_0xf469a7, _0x5cbaa2) {
|
|
var _0x18175f = _0x5d34,
|
|
_0x3e586e = _0xf469a7();
|
|
while (!![]) {
|
|
try {
|
|
var _0x87b80 =
|
|
parseInt(_0x18175f(0x19d)) / 0x1 +
|
|
(parseInt(_0x18175f(0x176)) / 0x2) *
|
|
(parseInt(_0x18175f(0x196)) / 0x3) +
|
|
-parseInt(_0x18175f(0x1a8)) / 0x4 +
|
|
(-parseInt(_0x18175f(0x197)) / 0x5) *
|
|
(parseInt(_0x18175f(0x193)) / 0x6) +
|
|
-parseInt(_0x18175f(0x181)) / 0x7 +
|
|
parseInt(_0x18175f(0x194)) / 0x8 +
|
|
-parseInt(_0x18175f(0x171)) / 0x9;
|
|
if (_0x87b80 === _0x5cbaa2) break;
|
|
else _0x3e586e["push"](_0x3e586e["shift"]());
|
|
} catch (_0x5e090c) {
|
|
_0x3e586e["push"](_0x3e586e["shift"]());
|
|
}
|
|
}
|
|
})(_0x30aa, 0xcbf5b);
|
|
function HSVtoRGB(_0x51ed68, _0x4e0751, _0x539e7) {
|
|
var _0x434db1 = _0x5d34,
|
|
_0x32a2f6,
|
|
_0x305341,
|
|
_0x5b7e8b,
|
|
_0x1f5b76,
|
|
_0x2afcc4,
|
|
_0x27a234,
|
|
_0x531435,
|
|
_0x4650f;
|
|
arguments[_0x434db1(0x1b4)] === 0x1 &&
|
|
((_0x4e0751 = _0x51ed68["s"]),
|
|
(_0x539e7 = _0x51ed68["v"]),
|
|
(_0x51ed68 = _0x51ed68["h"]));
|
|
(_0x1f5b76 = Math[_0x434db1(0x18c)](_0x51ed68 * 0x6)),
|
|
(_0x2afcc4 = _0x51ed68 * 0x6 - _0x1f5b76),
|
|
(_0x27a234 = _0x539e7 * (0x1 - _0x4e0751)),
|
|
(_0x531435 = _0x539e7 * (0x1 - _0x2afcc4 * _0x4e0751)),
|
|
(_0x4650f = _0x539e7 * (0x1 - (0x1 - _0x2afcc4) * _0x4e0751));
|
|
switch (_0x1f5b76 % 0x6) {
|
|
case 0x0:
|
|
(_0x32a2f6 = _0x539e7), (_0x305341 = _0x4650f), (_0x5b7e8b = _0x27a234);
|
|
break;
|
|
case 0x1:
|
|
(_0x32a2f6 = _0x531435), (_0x305341 = _0x539e7), (_0x5b7e8b = _0x27a234);
|
|
break;
|
|
case 0x2:
|
|
(_0x32a2f6 = _0x27a234), (_0x305341 = _0x539e7), (_0x5b7e8b = _0x4650f);
|
|
break;
|
|
case 0x3:
|
|
(_0x32a2f6 = _0x27a234), (_0x305341 = _0x531435), (_0x5b7e8b = _0x539e7);
|
|
break;
|
|
case 0x4:
|
|
(_0x32a2f6 = _0x4650f), (_0x305341 = _0x27a234), (_0x5b7e8b = _0x539e7);
|
|
break;
|
|
case 0x5:
|
|
(_0x32a2f6 = _0x539e7), (_0x305341 = _0x27a234), (_0x5b7e8b = _0x531435);
|
|
break;
|
|
}
|
|
return {
|
|
r: Math[_0x434db1(0x190)](_0x32a2f6 * 0xff),
|
|
g: Math[_0x434db1(0x190)](_0x305341 * 0xff),
|
|
b: Math[_0x434db1(0x190)](_0x5b7e8b * 0xff),
|
|
};
|
|
}
|
|
var grid = [],
|
|
scl = 0x4,
|
|
padding = 0x4,
|
|
columns = 0x50,
|
|
rows = 0xa0,
|
|
buff,
|
|
t = 0x0,
|
|
playerBlock,
|
|
nextBlock,
|
|
vis,
|
|
fullLine,
|
|
cleartime = 0x0,
|
|
placed = ![],
|
|
staticCount = 0x0,
|
|
linesCleared = 0x0,
|
|
score = 0x0,
|
|
gameOffset = 0x4 * scl,
|
|
nextOffset,
|
|
gameRes,
|
|
placeSound,
|
|
lineSound,
|
|
pixelFont,
|
|
gameOver = !![],
|
|
paused = !![],
|
|
startScreen,
|
|
pauseScreen,
|
|
aboutScreen,
|
|
gameoverScreen,
|
|
gameoverText,
|
|
timeText = _0x3887b9(0x19e),
|
|
levelSlider,
|
|
levelText,
|
|
difficulty = 0x1,
|
|
sfxSlider1,
|
|
sfxSlider2,
|
|
musSlider1,
|
|
musSlider2,
|
|
speed = 0.5,
|
|
staticChance = 0x8,
|
|
dupChance = 0.5,
|
|
brick = [
|
|
[0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0],
|
|
[0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0],
|
|
[0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0],
|
|
[0x0, 0x1, 0x0, 0x2, 0x2, 0x0, 0x1, 0x0],
|
|
[0x0, 0x1, 0x0, 0x2, 0x2, 0x0, 0x1, 0x0],
|
|
[0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0],
|
|
[0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0],
|
|
[0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0],
|
|
],
|
|
staticbrick = [
|
|
[0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2],
|
|
[0x0, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x0],
|
|
[0x0, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x0],
|
|
[0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0],
|
|
[0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0],
|
|
[0x0, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x0],
|
|
[0x0, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x0],
|
|
[0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2],
|
|
],
|
|
cols = [
|
|
[0xff, 0x0, 0x0],
|
|
[0x0, 0xff, 0x0],
|
|
[0x0, 0x0, 0xff],
|
|
[0xff, 0xff, 0x0],
|
|
[0xff, 0xff, 0xff],
|
|
],
|
|
blockType = [
|
|
[
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1],
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1],
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1],
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1],
|
|
],
|
|
[
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x2],
|
|
[0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x2, 0x1],
|
|
[0x0, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x0],
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x2, 0x1],
|
|
],
|
|
[
|
|
[0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x2],
|
|
[0x0, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x0],
|
|
[0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x1, 0x2],
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x2, 0x0],
|
|
],
|
|
[
|
|
[0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x2, 0x1],
|
|
[0x0, 0x1, 0x0, 0x2, 0x1, 0x1, 0x1, 0x0],
|
|
[0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x2, 0x1],
|
|
[0x0, 0x1, 0x0, 0x2, 0x1, 0x1, 0x1, 0x0],
|
|
],
|
|
[
|
|
[0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x2, 0x0],
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x2],
|
|
[0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x2, 0x0],
|
|
[0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x2],
|
|
],
|
|
[
|
|
[0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x1, 0x1],
|
|
[0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x2],
|
|
[0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x2, 0x1],
|
|
[0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x1, 0x1],
|
|
],
|
|
[
|
|
[0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0],
|
|
[0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3],
|
|
[0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0],
|
|
[0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3],
|
|
],
|
|
],
|
|
blockWidth = [
|
|
[0x1, 0x1, 0x1, 0x1],
|
|
[0x1, 0x2, 0x1, 0x2],
|
|
[0x1, 0x2, 0x1, 0x2],
|
|
[0x2, 0x1, 0x2, 0x1],
|
|
[0x2, 0x1, 0x2, 0x1],
|
|
[0x2, 0x1, 0x2, 0x1],
|
|
[0x3, 0x0, 0x3, 0x0],
|
|
],
|
|
blockHeight = [
|
|
[0x1, 0x1, 0x1, 0x1],
|
|
[0x2, 0x1, 0x2, 0x1],
|
|
[0x2, 0x1, 0x2, 0x1],
|
|
[0x1, 0x2, 0x1, 0x2],
|
|
[0x1, 0x2, 0x1, 0x2],
|
|
[0x1, 0x2, 0x1, 0x2],
|
|
[0x0, 0x3, 0x0, 0x3],
|
|
];
|
|
function preload() {
|
|
var _0x18c020 = _0x3887b9;
|
|
soundFormats(_0x18c020(0x17f), _0x18c020(0x19c)),
|
|
(placeSound = loadSound("sounds/place")),
|
|
(lineSound = loadSound(_0x18c020(0x184))),
|
|
(pixelFont = loadFont(_0x18c020(0x1a5)));
|
|
}
|
|
function Block(_0x53bfe0, _0x25dbda) {
|
|
var _0x255afd = _0x3887b9;
|
|
(this[_0x255afd(0x1b2)] = createVector(0x0, 0x0)),
|
|
(this["grav"] = speed),
|
|
(this["sprite"] = null),
|
|
(this[_0x255afd(0x17e)] = []),
|
|
(this[_0x255afd(0x1a1)] = 0x0),
|
|
(this[_0x255afd(0x19f)] = 0x0),
|
|
(this[_0x255afd(0x1b0)] = ![]),
|
|
(this[_0x255afd(0x178)] = 0x0),
|
|
(this[_0x255afd(0x1ae)] = !![]),
|
|
(this[_0x255afd(0x199)] = function () {
|
|
var _0x3c7d8d = _0x255afd;
|
|
this[_0x3c7d8d(0x17e)] = [];
|
|
for (let _0x3495b8 = 0x0; _0x3495b8 < 0x20; _0x3495b8++) {
|
|
this["grid"][_0x3c7d8d(0x186)](new Array(0x20)["fill"](null));
|
|
}
|
|
}),
|
|
(this["renderBlock"] = function () {
|
|
var _0x3d4f22 = _0x255afd;
|
|
this[_0x3d4f22(0x199)](),
|
|
AddBlock(
|
|
this["grid"],
|
|
0x0,
|
|
0x1f,
|
|
blockType[this[_0x3d4f22(0x1a1)]][this[_0x3d4f22(0x178)]],
|
|
this[_0x3d4f22(0x19f)],
|
|
this[_0x3d4f22(0x1b0)]
|
|
),
|
|
renderFromArray(this[_0x3d4f22(0x17e)], this[_0x3d4f22(0x18b)]);
|
|
}),
|
|
(this[_0x255afd(0x198)] = function () {
|
|
var _0x3bef7b = _0x255afd;
|
|
(this["static"] = ![]),
|
|
(this["sprite"] = createImage(0x20, 0x20)),
|
|
(this[_0x3bef7b(0x1a1)] = int(random(blockType[_0x3bef7b(0x1b4)]))),
|
|
(this[_0x3bef7b(0x19f)] = int(random(0x4))),
|
|
(this[_0x3bef7b(0x1b2)] = createVector(
|
|
int(columns / 0x2 - (blockWidth[this[_0x3bef7b(0x1a1)]][0x0] + 0x1)),
|
|
0x0
|
|
)),
|
|
(staticCount += 0x1),
|
|
staticCount == staticChance &&
|
|
((this["static"] = !![]), (staticCount = 0x0)),
|
|
this[_0x3bef7b(0x18e)]();
|
|
}),
|
|
(this[_0x255afd(0x192)] = function () {
|
|
var _0x1ae735 = _0x255afd;
|
|
image(
|
|
this[_0x1ae735(0x18b)],
|
|
this[_0x1ae735(0x1b2)]["x"] * scl + gameOffset,
|
|
(this["pos"]["y"] - 0x20) * scl,
|
|
0x20 * scl,
|
|
0x20 * scl
|
|
);
|
|
}),
|
|
(this[_0x255afd(0x195)] = function () {
|
|
var _0xd2f97a = _0x255afd;
|
|
let _0x38c6ad = Math[_0xd2f97a(0x18c)](this[_0xd2f97a(0x1b2)]["x"]),
|
|
_0x599cf6 = Math["floor"](this[_0xd2f97a(0x1b2)]["y"]);
|
|
if (_0x599cf6 + 0x1 >= rows) placed = !![];
|
|
else
|
|
for (let _0x541317 = 0x0; _0x541317 < 0x4; _0x541317++) {
|
|
let _0x31ee7f = _0x541317 * 0x2,
|
|
_0x50efd0 =
|
|
blockType[this["type"]][this[_0xd2f97a(0x178)]][_0x31ee7f],
|
|
_0x60b19e = blockType[this["type"]][this["rot"]][_0x31ee7f + 0x1],
|
|
_0x260aa0 = int(_0x38c6ad + _0x50efd0 * 0x8),
|
|
_0x1e4b3a = int(_0x599cf6 - _0x60b19e * 0x8);
|
|
if (_0x1e4b3a <= 0x0) continue;
|
|
for (let _0x3e994e = 0x0; _0x3e994e < 0x8; _0x3e994e++) {
|
|
grid[_0x1e4b3a + 0x1][_0x260aa0 + _0x3e994e] != null &&
|
|
(grid[_0x1e4b3a][_0x260aa0 + _0x3e994e] &&
|
|
(this[_0xd2f97a(0x1b2)]["y"] -= 0x1),
|
|
(placed = !![]));
|
|
}
|
|
}
|
|
if (placed) {
|
|
this[_0xd2f97a(0x1b2)]["y"] -
|
|
0x8 *
|
|
(blockHeight[this[_0xd2f97a(0x1a1)]][this[_0xd2f97a(0x178)]] +
|
|
0x1) <
|
|
0x0 &&
|
|
((gameOver = !![]),
|
|
gameOverScore(),
|
|
(gameoverScreen[_0xd2f97a(0x179)] = !![]));
|
|
AddBlock(
|
|
grid,
|
|
_0x38c6ad,
|
|
min(_0x599cf6, rows - 0x1),
|
|
blockType[this[_0xd2f97a(0x1a1)]][this[_0xd2f97a(0x178)]],
|
|
this[_0xd2f97a(0x19f)],
|
|
this["static"]
|
|
),
|
|
placeSound["play"]();
|
|
return;
|
|
}
|
|
this["pos"]["y"] += this[_0xd2f97a(0x182)];
|
|
}),
|
|
(this[_0x255afd(0x1ad)] = function () {
|
|
var _0x134818 = _0x255afd;
|
|
(this["rot"] = (this[_0x134818(0x178)] + 0x1) % 0x4),
|
|
this["clearGrid"](),
|
|
(this["sprite"] = createImage(0x20, 0x20)),
|
|
AddBlock(
|
|
this["grid"],
|
|
0x0,
|
|
0x1f,
|
|
blockType[this[_0x134818(0x1a1)]][this[_0x134818(0x178)]],
|
|
this["col"],
|
|
this[_0x134818(0x1b0)]
|
|
),
|
|
renderFromArray(this[_0x134818(0x17e)], this[_0x134818(0x18b)]);
|
|
}),
|
|
(this[_0x255afd(0x1b1)] = function () {
|
|
var _0x199b9d = _0x255afd;
|
|
keyIsDown(UP_ARROW)
|
|
? this["rotReset"] &&
|
|
(this[_0x199b9d(0x1ad)](), (this[_0x199b9d(0x1ae)] = ![]))
|
|
: (this[_0x199b9d(0x1ae)] = !![]);
|
|
keyIsDown(LEFT_ARROW) &&
|
|
((this[_0x199b9d(0x1b2)]["x"] -= 0x1),
|
|
this["pos"]["x"] < 0x0 && (this[_0x199b9d(0x1b2)]["x"] = 0x0));
|
|
if (keyIsDown(RIGHT_ARROW)) {
|
|
this["pos"]["x"] += 0x1;
|
|
let _0x308c0d = blockWidth[this["type"]][this[_0x199b9d(0x178)]] + 0x1;
|
|
this[_0x199b9d(0x1b2)]["x"] > columns - _0x308c0d * 0x8 &&
|
|
(this[_0x199b9d(0x1b2)]["x"] = columns - _0x308c0d * 0x8);
|
|
}
|
|
keyIsDown(DOWN_ARROW) &&
|
|
((this[_0x199b9d(0x1b2)]["y"] += 0x1), (score += 0x1));
|
|
});
|
|
}
|
|
function resetGame() {
|
|
var _0x3e1ba8 = _0x3887b9;
|
|
(score = 0x0),
|
|
(linesCleared = 0x0),
|
|
(staticCount = 0x0),
|
|
(t = 0x0),
|
|
(buff = createImage(columns, rows)),
|
|
(grid = []);
|
|
for (let _0x1e71f1 = 0x0; _0x1e71f1 < rows; _0x1e71f1++) {
|
|
grid[_0x1e71f1] = [];
|
|
for (let _0x5c3d48 = 0x0; _0x5c3d48 < columns; _0x5c3d48++) {
|
|
grid[_0x1e71f1][_0x3e1ba8(0x186)](null);
|
|
}
|
|
}
|
|
(playerBlock = new Block(width / 0x2 - gameOffset, 0x0)),
|
|
playerBlock[_0x3e1ba8(0x198)](),
|
|
(nextBlock = new Block(width / 0x2 - gameOffset, 0x0)),
|
|
nextBlock[_0x3e1ba8(0x198)]();
|
|
}
|
|
function startGame() {
|
|
var _0x4b2eea = _0x3887b9;
|
|
resetGame(),
|
|
(paused = ![]),
|
|
(gameOver = ![]),
|
|
(startScreen[_0x4b2eea(0x179)] = ![]);
|
|
}
|
|
function unpauseGame() {
|
|
var _0x294451 = _0x3887b9;
|
|
(paused = ![]), (pauseScreen[_0x294451(0x179)] = ![]);
|
|
}
|
|
function newGame() {
|
|
var _0x36b942 = _0x3887b9;
|
|
(pauseScreen["open"] = ![]),
|
|
(gameoverScreen[_0x36b942(0x179)] = ![]),
|
|
(startScreen[_0x36b942(0x179)] = !![]);
|
|
}
|
|
function SFXvolume(_0x4990e8) {
|
|
var _0x5bc95b = _0x3887b9;
|
|
let _0x2b1627 = _0x4990e8 / 0xa;
|
|
placeSound[_0x5bc95b(0x1a7)](_0x2b1627),
|
|
lineSound[_0x5bc95b(0x1a7)](_0x2b1627),
|
|
(sfxSlider1[_0x5bc95b(0x1ac)] = _0x4990e8),
|
|
(sfxSlider2[_0x5bc95b(0x1ac)] = _0x4990e8);
|
|
}
|
|
function toggleAbout() {
|
|
var _0x7eaa53 = _0x3887b9;
|
|
(aboutScreen[_0x7eaa53(0x179)] = !aboutScreen[_0x7eaa53(0x179)]),
|
|
(startScreen["open"] = !startScreen[_0x7eaa53(0x179)]);
|
|
}
|
|
function adjustDifficulty() {
|
|
var _0x4683d8 = _0x3887b9;
|
|
(difficulty = levelSlider[_0x4683d8(0x1ac)]),
|
|
(speed = 0.5 + map(difficulty, 0x1, 0xa, 0x0, 0x3) / 0x2),
|
|
(staticChance = Math["floor"](map(difficulty, 0x1, 0xa, 0x10, 0x4))),
|
|
(dupChance = map(difficulty, 0x0, 0x1, 0x1, 0.1));
|
|
}
|
|
function _0x30aa() {
|
|
var _0x26bbc7 = [
|
|
"rotReset",
|
|
"aboutpage",
|
|
"static",
|
|
"controls",
|
|
"pos",
|
|
"Deleting",
|
|
"length",
|
|
"innerHTML",
|
|
"5588397BLDmBX",
|
|
"getElementById",
|
|
"SCORE:<br/>",
|
|
"levelText",
|
|
"pausepage",
|
|
"110KWaQsT",
|
|
"SCORE:\x20",
|
|
"rot",
|
|
"open",
|
|
"lvlSlider",
|
|
"SCORE:",
|
|
"LINE\x20AT\x20",
|
|
"clipboard",
|
|
"grid",
|
|
"mp3",
|
|
"Share\x20Text\x20Copied\x20to\x20Clipboard!",
|
|
"8211735jtYqOg",
|
|
"grav",
|
|
"loadPixels",
|
|
"sounds/line",
|
|
"repeat",
|
|
"push",
|
|
"Play\x20now\x20at\x20SANDTRIS.COM",
|
|
"pixels",
|
|
"textSize",
|
|
"\x0a█▀\u2003▄▀█\u2003█▄░█\u2003█▀▄\u2003▀█▀\u2003█▀█\u2003█\u2003█▀\x0a▄█\u2003█▀█\u2003█░▀█\u2003█▄▀\u2003░█░\u2003█▀▄\u2003█\u2003▄█\x0a",
|
|
"sprite",
|
|
"floor",
|
|
"strokeWeight",
|
|
"renderBlock",
|
|
"log",
|
|
"round",
|
|
"startpage",
|
|
"show",
|
|
"288DsoDuN",
|
|
"6840624iCuttA",
|
|
"update",
|
|
"47100eykVvL",
|
|
"3610vIYXTd",
|
|
"newBlock",
|
|
"clearGrid",
|
|
"LINES:",
|
|
"sfx1Slider",
|
|
"ogg",
|
|
"1501394IetbOS",
|
|
"00:00",
|
|
"col",
|
|
"TIME:\x20",
|
|
"type",
|
|
"gameoverText",
|
|
"LEVEL:\x20",
|
|
"parent",
|
|
"fonts/retroFont.ttf",
|
|
"play",
|
|
"setVolume",
|
|
"2223436whKHFt",
|
|
"LEVEL:",
|
|
"toString",
|
|
"updatePixels",
|
|
"value",
|
|
"rotate",
|
|
];
|
|
_0x30aa = function () {
|
|
return _0x26bbc7;
|
|
};
|
|
return _0x30aa();
|
|
}
|
|
function gameOverScore() {
|
|
var _0x4f91f9 = _0x3887b9;
|
|
(gameoverText[_0x4f91f9(0x1b5)] = ""),
|
|
(gameoverText[_0x4f91f9(0x1b5)] += _0x4f91f9(0x173) + score),
|
|
(gameoverText["innerHTML"] += "<br/>LINES:<br/>" + linesCleared);
|
|
}
|
|
function shareText() {
|
|
var _0x38809a = _0x3887b9;
|
|
let _0x3741a1 = _0x38809a(0x18a),
|
|
_0x54c950 = difficulty[_0x38809a(0x1aa)](),
|
|
_0x1bc804 = linesCleared["toString"](),
|
|
_0x3512fd = score[_0x38809a(0x1aa)]();
|
|
(_0x3741a1 +=
|
|
_0x38809a(0x1a3) +
|
|
_0x54c950 +
|
|
"\x20"[_0x38809a(0x185)](0x6 - _0x54c950["length"]) +
|
|
"|\x20"),
|
|
(_0x3741a1 +=
|
|
"LINES:\x20" +
|
|
_0x1bc804 +
|
|
"\x20"[_0x38809a(0x185)](0x6 - _0x1bc804["length"]) +
|
|
"\x0a"),
|
|
(_0x3741a1 +=
|
|
_0x38809a(0x177) +
|
|
_0x3512fd +
|
|
"\x20"["repeat"](0x9 - _0x3512fd[_0x38809a(0x1b4)]) +
|
|
"|\x20"),
|
|
(_0x3741a1 +=
|
|
_0x38809a(0x1a0) +
|
|
timeText +
|
|
"\x20"[_0x38809a(0x185)](0x7 - timeText[_0x38809a(0x1b4)]) +
|
|
"\x0a"),
|
|
(_0x3741a1 += _0x38809a(0x187)),
|
|
(_0x3741a1 += navigator[_0x38809a(0x17d)]["writeText"](_0x3741a1)),
|
|
alert(_0x38809a(0x180));
|
|
}
|
|
function setup() {
|
|
var _0x1b78e0 = _0x3887b9;
|
|
(startScreen = document[_0x1b78e0(0x172)](_0x1b78e0(0x191))),
|
|
(pauseScreen = document[_0x1b78e0(0x172)](_0x1b78e0(0x175))),
|
|
(gameoverScreen = document[_0x1b78e0(0x172)]("gameoverpage")),
|
|
(aboutScreen = document["getElementById"](_0x1b78e0(0x1af))),
|
|
(levelSlider = document[_0x1b78e0(0x172)](_0x1b78e0(0x17a))),
|
|
(levelSlider[_0x1b78e0(0x1ac)] = 0x1),
|
|
(levelText = document[_0x1b78e0(0x172)](_0x1b78e0(0x174))),
|
|
(sfxSlider1 = document[_0x1b78e0(0x172)](_0x1b78e0(0x19b))),
|
|
(sfxSlider2 = document[_0x1b78e0(0x172)]("sfx2Slider")),
|
|
(sfxSlider1[_0x1b78e0(0x1ac)] = 0xa),
|
|
(sfxSlider2[_0x1b78e0(0x1ac)] = 0xa),
|
|
(musSlider1 = document[_0x1b78e0(0x172)]("mus1Slider")),
|
|
(musSlider2 = document["getElementById"]("mus2Slider")),
|
|
(musSlider1["value"] = 0xa),
|
|
(musSlider2[_0x1b78e0(0x1ac)] = 0xa),
|
|
(gameoverText = document[_0x1b78e0(0x172)](_0x1b78e0(0x1a2))),
|
|
(gameRes = createVector(columns * scl, rows * scl)),
|
|
(nextOffset = gameRes["x"] + gameOffset * 0x4),
|
|
(cnv = createCanvas(gameRes["x"] + gameOffset * 0x11, gameRes["y"])),
|
|
cnv[_0x1b78e0(0x1a4)]("cnv"),
|
|
textFont(pixelFont),
|
|
frameRate(0x3c),
|
|
noSmooth(),
|
|
resetGame();
|
|
}
|
|
function AddBlock(
|
|
_0x1b0852,
|
|
_0x177a23,
|
|
_0x58632c,
|
|
_0x4f09a3,
|
|
_0x36c414,
|
|
_0x398fa2
|
|
) {
|
|
for (let _0x47255b = 0x0; _0x47255b < 0x4; _0x47255b++) {
|
|
AddSingleBrick(
|
|
_0x1b0852,
|
|
_0x177a23 + _0x4f09a3[_0x47255b * 0x2] * 0x8,
|
|
_0x58632c - _0x4f09a3[_0x47255b * 0x2 + 0x1] * 0x8,
|
|
_0x36c414,
|
|
_0x398fa2
|
|
);
|
|
}
|
|
}
|
|
function AddSingleBrick(_0x3c2ecf, _0x93f084, _0x3e1c7e, _0x25683b, _0x50c9de) {
|
|
let _0x3e0da9 = brick;
|
|
_0x50c9de && (_0x3e0da9 = staticbrick);
|
|
for (let _0x390455 = 0x0; _0x390455 < 0x8; _0x390455++) {
|
|
for (let _0xab571c = 0x0; _0xab571c < 0x8; _0xab571c++) {
|
|
if (_0x3e1c7e - _0x390455 < 0x0) continue;
|
|
let _0x161a1b = HSVtoRGB(
|
|
_0x25683b / 0x5,
|
|
0.8,
|
|
map(_0x3e0da9[_0x390455][_0xab571c], 0x0, 0x1, 0.2, 0.7)
|
|
);
|
|
_0x3c2ecf[_0x3e1c7e - _0x390455][_0x93f084 + _0xab571c] = [
|
|
_0x25683b,
|
|
_0x161a1b["r"],
|
|
_0x161a1b["g"],
|
|
_0x161a1b["b"],
|
|
0x0,
|
|
_0x50c9de,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
function renderFromArray(_0x4c7e1d, _0xd91d85) {
|
|
var _0x3213e5 = _0x3887b9;
|
|
let _0x3ce2f8 = _0x4c7e1d[_0x3213e5(0x1b4)],
|
|
_0x47b62d = _0x4c7e1d[0x0][_0x3213e5(0x1b4)];
|
|
_0xd91d85[_0x3213e5(0x183)]();
|
|
for (let _0x17d22c = 0x0; _0x17d22c < _0x3ce2f8; _0x17d22c++) {
|
|
for (let _0x590a5c = 0x0; _0x590a5c < _0x47b62d; _0x590a5c++) {
|
|
let _0x581bb9 = (_0x17d22c * _0x47b62d + _0x590a5c) * 0x4;
|
|
if (_0x4c7e1d[_0x17d22c][_0x590a5c] == null) {
|
|
(_0xd91d85["pixels"][_0x581bb9] = 0x0),
|
|
(_0xd91d85["pixels"][_0x581bb9 + 0x1] = 0x0),
|
|
(_0xd91d85["pixels"][_0x581bb9 + 0x2] = 0x0),
|
|
(_0xd91d85[_0x3213e5(0x188)][_0x581bb9 + 0x3] = 0x0);
|
|
continue;
|
|
}
|
|
(_0xd91d85[_0x3213e5(0x188)][_0x581bb9] =
|
|
_0x4c7e1d[_0x17d22c][_0x590a5c][0x1]),
|
|
(_0xd91d85[_0x3213e5(0x188)][_0x581bb9 + 0x1] =
|
|
_0x4c7e1d[_0x17d22c][_0x590a5c][0x2]),
|
|
(_0xd91d85["pixels"][_0x581bb9 + 0x2] =
|
|
_0x4c7e1d[_0x17d22c][_0x590a5c][0x3]),
|
|
(_0xd91d85[_0x3213e5(0x188)][_0x581bb9 + 0x3] = 0xff);
|
|
}
|
|
}
|
|
_0xd91d85[_0x3213e5(0x1ab)]();
|
|
}
|
|
function updateLogic(_0x43aa3b, _0x475149) {
|
|
if (grid[_0x475149][_0x43aa3b] == null) return;
|
|
grid[_0x475149][_0x43aa3b][0x4] = 0x0;
|
|
if (_0x475149 >= rows - 0x1) return;
|
|
if (grid[_0x475149 + 0x1][_0x43aa3b] == null) {
|
|
(grid[_0x475149 + 0x1][_0x43aa3b] = grid[_0x475149][_0x43aa3b]),
|
|
(grid[_0x475149][_0x43aa3b] = null);
|
|
return;
|
|
}
|
|
if (grid[_0x475149][_0x43aa3b][0x5]) return;
|
|
let _0x129fa2 =
|
|
_0x43aa3b > 0x0 && grid[_0x475149 + 0x1][_0x43aa3b - 0x1] == null,
|
|
_0x12d6ba =
|
|
_0x43aa3b < columns - 0x1 &&
|
|
grid[_0x475149 + 0x1][_0x43aa3b + 0x1] == null;
|
|
if (_0x129fa2 && _0x12d6ba) {
|
|
if (random() < 0.5) {
|
|
(grid[_0x475149 + 0x1][_0x43aa3b - 0x1] = grid[_0x475149][_0x43aa3b]),
|
|
(grid[_0x475149][_0x43aa3b] = null);
|
|
return;
|
|
}
|
|
(grid[_0x475149 + 0x1][_0x43aa3b + 0x1] = grid[_0x475149][_0x43aa3b]),
|
|
(grid[_0x475149][_0x43aa3b] = null);
|
|
return;
|
|
}
|
|
if (_0x129fa2) {
|
|
(grid[_0x475149 + 0x1][_0x43aa3b - 0x1] = grid[_0x475149][_0x43aa3b]),
|
|
(grid[_0x475149][_0x43aa3b] = null);
|
|
return;
|
|
}
|
|
if (_0x12d6ba) {
|
|
(grid[_0x475149 + 0x1][_0x43aa3b + 0x1] = grid[_0x475149][_0x43aa3b]),
|
|
(grid[_0x475149][_0x43aa3b] = null);
|
|
return;
|
|
}
|
|
}
|
|
function updateGrid() {
|
|
if (t % 0x4 == 0x0) {
|
|
for (let _0x14bf98 = rows - 0x1; _0x14bf98 >= 0x0; _0x14bf98--) {
|
|
for (let _0x39a870 = 0x0; _0x39a870 < columns; _0x39a870++) {
|
|
updateLogic(_0x39a870, _0x14bf98);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (t % 0x4 == 0x2)
|
|
for (let _0x194eed = rows - 0x1; _0x194eed >= 0x0; _0x194eed--) {
|
|
for (let _0x26f74c = columns - 0x1; _0x26f74c >= 0x0; _0x26f74c--) {
|
|
updateLogic(_0x26f74c, _0x194eed);
|
|
}
|
|
}
|
|
}
|
|
function checkLine() {
|
|
var _0x2a8afe = _0x3887b9;
|
|
vis = [];
|
|
for (let _0x1f620a = 0x0; _0x1f620a < rows; _0x1f620a++) {
|
|
(vis = []), (fullLine = ![]);
|
|
if (grid[_0x1f620a][0x0] == null || grid[_0x1f620a][0x0][0x4] == 0x1)
|
|
continue;
|
|
floodFill(0x0, _0x1f620a, grid[_0x1f620a][0x0][0x0]);
|
|
if (!fullLine) continue;
|
|
console[_0x2a8afe(0x18f)](_0x2a8afe(0x17c), _0x1f620a);
|
|
return;
|
|
}
|
|
}
|
|
function floodFill(_0x58e935, _0x434257, _0x5a1a42) {
|
|
var _0x1e291a = _0x3887b9;
|
|
if (
|
|
_0x58e935 < 0x0 ||
|
|
_0x58e935 >= columns ||
|
|
_0x434257 < 0x0 ||
|
|
_0x434257 >= rows ||
|
|
grid[_0x434257][_0x58e935] == null ||
|
|
grid[_0x434257][_0x58e935][0x4] == 0x1 ||
|
|
grid[_0x434257][_0x58e935][0x0] != _0x5a1a42
|
|
)
|
|
return;
|
|
_0x58e935 == columns - 0x1 && (fullLine = !![]),
|
|
(grid[_0x434257][_0x58e935][0x4] = 0x1),
|
|
vis[_0x1e291a(0x186)]([_0x58e935, _0x434257]),
|
|
floodFill(_0x58e935 + 0x1, _0x434257, _0x5a1a42),
|
|
floodFill(_0x58e935 - 0x1, _0x434257, _0x5a1a42),
|
|
floodFill(_0x58e935, _0x434257 + 0x1, _0x5a1a42),
|
|
floodFill(_0x58e935, _0x434257 - 0x1, _0x5a1a42);
|
|
}
|
|
function setLineColor(_0x2e9d4c) {
|
|
let _0xcc7e2f = 0xff;
|
|
_0x2e9d4c % 0xa < 0x5 && (_0xcc7e2f = 0x0);
|
|
for (let _0xf0b801 of vis) {
|
|
(grid[_0xf0b801[0x1]][_0xf0b801[0x0]][0x1] = _0xcc7e2f),
|
|
(grid[_0xf0b801[0x1]][_0xf0b801[0x0]][0x2] = _0xcc7e2f),
|
|
(grid[_0xf0b801[0x1]][_0xf0b801[0x0]][0x3] = _0xcc7e2f);
|
|
}
|
|
}
|
|
function deleteLine(_0x4b1de6) {
|
|
var _0x1541d4 = _0x3887b9;
|
|
for (let _0xc87d37 of vis) {
|
|
grid[_0xc87d37[0x1]][_0xc87d37[0x0]] = null;
|
|
}
|
|
(score += vis[_0x1541d4(0x1b4)]), (vis = []);
|
|
}
|
|
function UI() {
|
|
var _0x3fcb48 = _0x3887b9;
|
|
renderFromArray(grid, buff),
|
|
background(0xce, 0xae, 0x7f),
|
|
fill(0xa),
|
|
rect(gameOffset, 0x0, columns * scl, rows * scl),
|
|
image(buff, gameOffset, 0x0, columns * scl, rows * scl);
|
|
!gameOver && !placed && playerBlock["show"]();
|
|
fill(0xa),
|
|
rect(nextOffset, gameOffset * 0x2, gameOffset * 0xa, gameOffset * 0xa),
|
|
image(
|
|
nextBlock[_0x3fcb48(0x18b)],
|
|
nextOffset +
|
|
(0x5 - (blockWidth[nextBlock[_0x3fcb48(0x1a1)]][0x0] + 0x1)) *
|
|
gameOffset,
|
|
(0x5 - (0x6 - blockHeight[nextBlock[_0x3fcb48(0x1a1)]][0x0]) + 0x1) *
|
|
gameOffset,
|
|
0x20 * scl,
|
|
0x20 * scl
|
|
);
|
|
let _0x383be4 = Math["floor"](t / 0xe10),
|
|
_0x5c18c2 = Math[_0x3fcb48(0x18c)](t / 0x3c) % 0x3c;
|
|
_0x383be4 < 0xa && (_0x383be4 = "0" + _0x383be4),
|
|
_0x5c18c2 < 0xa && (_0x5c18c2 = "0" + _0x5c18c2),
|
|
(timeText = _0x383be4 + ":" + _0x5c18c2),
|
|
fill(0x19)[_0x3fcb48(0x18d)](0x1)[_0x3fcb48(0x189)](0x20),
|
|
text(timeText, nextOffset - 0x2, gameOffset * 0x10),
|
|
text(_0x3fcb48(0x19a), nextOffset - 0x2, gameOffset * 0x13),
|
|
text(linesCleared, nextOffset - 0x2, gameOffset * 0x15),
|
|
text(_0x3fcb48(0x17b), nextOffset - 0x2, gameOffset * 0x18),
|
|
text(score, nextOffset - 0x2, gameOffset * 0x1a),
|
|
text(_0x3fcb48(0x1a9), nextOffset - 0x2, gameOffset * 0x1d),
|
|
text(difficulty, nextOffset - 0x2, gameOffset * 0x1f),
|
|
(levelText["innerHTML"] = _0x3fcb48(0x1a3) + levelSlider["value"]);
|
|
}
|
|
function keyPressed() {
|
|
var _0xf53849 = _0x3887b9;
|
|
if (keyCode === 0x50) {
|
|
if (gameOver) return;
|
|
(paused = !paused),
|
|
(pauseScreen[_0xf53849(0x179)] = !pauseScreen[_0xf53849(0x179)]);
|
|
}
|
|
}
|
|
function GameLogic() {
|
|
var _0x15b64b = _0x3887b9;
|
|
if (paused) return;
|
|
if (gameOver) return;
|
|
if (fullLine) {
|
|
cleartime == 0x0 && ((linesCleared += 0x1), lineSound[_0x15b64b(0x1a6)]());
|
|
(cleartime += 0x1), setLineColor(cleartime);
|
|
cleartime > 0x1e &&
|
|
(console[_0x15b64b(0x18f)](_0x15b64b(0x1b3)),
|
|
deleteLine(),
|
|
(cleartime = 0x0),
|
|
(fullLine = ![]));
|
|
return;
|
|
}
|
|
placed &&
|
|
((playerBlock = nextBlock),
|
|
(nextBlock = new Block(width / 0x2, 0x0)),
|
|
nextBlock[_0x15b64b(0x198)](),
|
|
playerBlock["col"] == nextBlock["col"] &&
|
|
random() < dupChance &&
|
|
((nextBlock[_0x15b64b(0x19f)] = (nextBlock["col"] + 0x1) % 0x4),
|
|
nextBlock[_0x15b64b(0x18e)]()),
|
|
(placed = ![])),
|
|
updateGrid(),
|
|
playerBlock[_0x15b64b(0x195)](),
|
|
playerBlock[_0x15b64b(0x1b1)](),
|
|
checkLine(),
|
|
(t += 0x1);
|
|
}
|
|
function draw() {
|
|
UI(), GameLogic();
|
|
}
|