830 lines
26 KiB
JavaScript
830 lines
26 KiB
JavaScript
(function (_0x5d8b23, _0x4cd1f8) {
|
|
var _0x366950 = _0x13db,
|
|
_0x3d6426 = _0x5d8b23();
|
|
while (!![]) {
|
|
try {
|
|
var _0x5650dc =
|
|
-parseInt(_0x366950(0x11f)) / 0x1 +
|
|
-parseInt(_0x366950(0xe9)) / 0x2 +
|
|
parseInt(_0x366950(0xfb)) / 0x3 +
|
|
(parseInt(_0x366950(0x111)) / 0x4) *
|
|
(-parseInt(_0x366950(0xe0)) / 0x5) +
|
|
-parseInt(_0x366950(0x105)) / 0x6 +
|
|
(parseInt(_0x366950(0xfd)) / 0x7) * (parseInt(_0x366950(0x11d)) / 0x8) +
|
|
(parseInt(_0x366950(0x121)) / 0x9) * (parseInt(_0x366950(0xf3)) / 0xa);
|
|
if (_0x5650dc === _0x4cd1f8) break;
|
|
else _0x3d6426["push"](_0x3d6426["shift"]());
|
|
} catch (_0x43ed40) {
|
|
_0x3d6426["push"](_0x3d6426["shift"]());
|
|
}
|
|
}
|
|
})(_0x5c01, 0x8ab7e);
|
|
function HSVtoRGB(_0x3efd8e, _0x3466cd, _0x518fac) {
|
|
var _0x35ebf2 = _0x13db,
|
|
_0x217921,
|
|
_0x5406db,
|
|
_0x78ebcc,
|
|
_0x4633c0,
|
|
_0x5b6e29,
|
|
_0x6c5f29,
|
|
_0x4cdc06,
|
|
_0x48f7ae;
|
|
arguments[_0x35ebf2(0x103)] === 0x1 &&
|
|
((_0x3466cd = _0x3efd8e["s"]),
|
|
(_0x518fac = _0x3efd8e["v"]),
|
|
(_0x3efd8e = _0x3efd8e["h"]));
|
|
(_0x4633c0 = Math[_0x35ebf2(0xf5)](_0x3efd8e * 0x6)),
|
|
(_0x5b6e29 = _0x3efd8e * 0x6 - _0x4633c0),
|
|
(_0x6c5f29 = _0x518fac * (0x1 - _0x3466cd)),
|
|
(_0x4cdc06 = _0x518fac * (0x1 - _0x5b6e29 * _0x3466cd)),
|
|
(_0x48f7ae = _0x518fac * (0x1 - (0x1 - _0x5b6e29) * _0x3466cd));
|
|
switch (_0x4633c0 % 0x6) {
|
|
case 0x0:
|
|
(_0x217921 = _0x518fac), (_0x5406db = _0x48f7ae), (_0x78ebcc = _0x6c5f29);
|
|
break;
|
|
case 0x1:
|
|
(_0x217921 = _0x4cdc06), (_0x5406db = _0x518fac), (_0x78ebcc = _0x6c5f29);
|
|
break;
|
|
case 0x2:
|
|
(_0x217921 = _0x6c5f29), (_0x5406db = _0x518fac), (_0x78ebcc = _0x48f7ae);
|
|
break;
|
|
case 0x3:
|
|
(_0x217921 = _0x6c5f29), (_0x5406db = _0x4cdc06), (_0x78ebcc = _0x518fac);
|
|
break;
|
|
case 0x4:
|
|
(_0x217921 = _0x48f7ae), (_0x5406db = _0x6c5f29), (_0x78ebcc = _0x518fac);
|
|
break;
|
|
case 0x5:
|
|
(_0x217921 = _0x518fac), (_0x5406db = _0x6c5f29), (_0x78ebcc = _0x4cdc06);
|
|
break;
|
|
}
|
|
return {
|
|
r: Math[_0x35ebf2(0xf2)](_0x217921 * 0xff),
|
|
g: Math[_0x35ebf2(0xf2)](_0x5406db * 0xff),
|
|
b: Math["round"](_0x78ebcc * 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,
|
|
gameMusic,
|
|
pixelFont,
|
|
gameOver = !![],
|
|
paused = !![],
|
|
startScreen,
|
|
pauseScreen,
|
|
aboutScreen,
|
|
gameoverScreen,
|
|
gameoverText,
|
|
timeText = "00:00",
|
|
levelSlider,
|
|
levelText,
|
|
difficulty = 0x1,
|
|
sfxSlider1,
|
|
sfxSlider2,
|
|
musSlider1,
|
|
musSlider2,
|
|
filter,
|
|
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 _0x2281ed = _0x13db;
|
|
soundFormats(_0x2281ed(0xf1), "ogg"),
|
|
(placeSound = loadSound("sounds/place")),
|
|
(lineSound = loadSound(_0x2281ed(0xdb))),
|
|
(gameMusic = loadSound(_0x2281ed(0x117))),
|
|
(pixelFont = loadFont(_0x2281ed(0xea)));
|
|
}
|
|
function swiped(_0x5efcd8) {}
|
|
function Block(_0x342ee9, _0x30102f) {
|
|
var _0x75bc08 = _0x13db;
|
|
(this[_0x75bc08(0x112)] = createVector(0x0, 0x0)),
|
|
(this[_0x75bc08(0x11a)] = speed),
|
|
(this[_0x75bc08(0x113)] = null),
|
|
(this["grid"] = []),
|
|
(this[_0x75bc08(0xf8)] = 0x0),
|
|
(this[_0x75bc08(0x104)] = 0x0),
|
|
(this[_0x75bc08(0x115)] = ![]),
|
|
(this["rot"] = 0x0),
|
|
(this["rotReset"] = !![]),
|
|
(this[_0x75bc08(0x116)] = function () {
|
|
var _0x202b35 = _0x75bc08;
|
|
this[_0x202b35(0xe3)] = [];
|
|
for (let _0x3019c6 = 0x0; _0x3019c6 < 0x20; _0x3019c6++) {
|
|
this[_0x202b35(0xe3)]["push"](new Array(0x20)[_0x202b35(0x119)](null));
|
|
}
|
|
}),
|
|
(this["renderBlock"] = function () {
|
|
var _0x584b37 = _0x75bc08;
|
|
this[_0x584b37(0x116)](),
|
|
AddBlock(
|
|
this["grid"],
|
|
0x0,
|
|
0x1f,
|
|
blockType[this[_0x584b37(0xf8)]][this["rot"]],
|
|
this[_0x584b37(0x104)],
|
|
this[_0x584b37(0x115)]
|
|
),
|
|
renderFromArray(this[_0x584b37(0xe3)], this[_0x584b37(0x113)]);
|
|
}),
|
|
(this[_0x75bc08(0xd9)] = function () {
|
|
var _0x2d8260 = _0x75bc08;
|
|
(this["static"] = ![]),
|
|
(this[_0x2d8260(0x113)] = createImage(0x20, 0x20)),
|
|
(this["type"] = int(random(blockType[_0x2d8260(0x103)]))),
|
|
(this[_0x2d8260(0x104)] = int(random(0x4))),
|
|
(this["pos"] = createVector(
|
|
int(columns / 0x2 - (blockWidth[this[_0x2d8260(0xf8)]][0x0] + 0x1)),
|
|
0x0
|
|
)),
|
|
(staticCount += 0x1),
|
|
staticCount == staticChance &&
|
|
((this[_0x2d8260(0x115)] = !![]), (staticCount = 0x0)),
|
|
this[_0x2d8260(0xe4)]();
|
|
}),
|
|
(this["show"] = function () {
|
|
var _0x48f91f = _0x75bc08;
|
|
image(
|
|
this[_0x48f91f(0x113)],
|
|
this[_0x48f91f(0x112)]["x"] * scl + gameOffset,
|
|
(this[_0x48f91f(0x112)]["y"] - 0x20) * scl,
|
|
0x20 * scl,
|
|
0x20 * scl
|
|
);
|
|
}),
|
|
(this[_0x75bc08(0xdd)] = function () {
|
|
var _0x4ff845 = _0x75bc08;
|
|
let _0x55667d = Math[_0x4ff845(0xf5)](this["pos"]["x"]),
|
|
_0x52f57a = Math["floor"](this[_0x4ff845(0x112)]["y"]);
|
|
if (_0x52f57a + 0x1 >= rows) placed = !![];
|
|
else
|
|
for (let _0x39573d = 0x0; _0x39573d < 0x4; _0x39573d++) {
|
|
let _0x42f04c = _0x39573d * 0x2,
|
|
_0x31cdf3 =
|
|
blockType[this[_0x4ff845(0xf8)]][this[_0x4ff845(0xf9)]][
|
|
_0x42f04c
|
|
],
|
|
_0x7ffce2 =
|
|
blockType[this[_0x4ff845(0xf8)]][this["rot"]][_0x42f04c + 0x1],
|
|
_0x5390c8 = int(_0x55667d + _0x31cdf3 * 0x8),
|
|
_0x8594dd = int(_0x52f57a - _0x7ffce2 * 0x8);
|
|
if (_0x8594dd <= 0x0) continue;
|
|
for (let _0xfbbb3b = 0x0; _0xfbbb3b < 0x8; _0xfbbb3b++) {
|
|
grid[_0x8594dd + 0x1][_0x5390c8 + _0xfbbb3b] != null &&
|
|
(grid[_0x8594dd][_0x5390c8 + _0xfbbb3b] &&
|
|
(this["pos"]["y"] -= 0x1),
|
|
(placed = !![]));
|
|
}
|
|
}
|
|
if (placed) {
|
|
this[_0x4ff845(0x112)]["y"] -
|
|
0x8 * (blockHeight[this["type"]][this[_0x4ff845(0xf9)]] + 0x1) <
|
|
0x0 &&
|
|
((gameOver = !![]),
|
|
gameOverScore(),
|
|
(gameoverScreen[_0x4ff845(0xe2)] = !![]));
|
|
AddBlock(
|
|
grid,
|
|
_0x55667d,
|
|
min(_0x52f57a, rows - 0x1),
|
|
blockType[this[_0x4ff845(0xf8)]][this[_0x4ff845(0xf9)]],
|
|
this[_0x4ff845(0x104)],
|
|
this[_0x4ff845(0x115)]
|
|
),
|
|
placeSound[_0x4ff845(0x102)]();
|
|
return;
|
|
}
|
|
this[_0x4ff845(0x112)]["y"] += this["grav"];
|
|
}),
|
|
(this[_0x75bc08(0xe8)] = function () {
|
|
var _0x1fc49e = _0x75bc08;
|
|
(this[_0x1fc49e(0xf9)] = (this[_0x1fc49e(0xf9)] + 0x1) % 0x4),
|
|
this[_0x1fc49e(0x116)](),
|
|
(this[_0x1fc49e(0x113)] = createImage(0x20, 0x20)),
|
|
AddBlock(
|
|
this["grid"],
|
|
0x0,
|
|
0x1f,
|
|
blockType[this[_0x1fc49e(0xf8)]][this[_0x1fc49e(0xf9)]],
|
|
this["col"],
|
|
this[_0x1fc49e(0x115)]
|
|
),
|
|
renderFromArray(this[_0x1fc49e(0xe3)], this["sprite"]);
|
|
let _0x5107dd =
|
|
blockWidth[this[_0x1fc49e(0xf8)]][this[_0x1fc49e(0xf9)]] + 0x1;
|
|
this[_0x1fc49e(0x112)]["x"] > columns - _0x5107dd * 0x8 &&
|
|
(this[_0x1fc49e(0x112)]["x"] = columns - _0x5107dd * 0x8);
|
|
}),
|
|
(this[_0x75bc08(0x10f)] = function (_0x47c461 = -0x1) {
|
|
var _0x583b8c = _0x75bc08;
|
|
keyIsDown(UP_ARROW) || _0x47c461 == 0x8
|
|
? this[_0x583b8c(0x120)] &&
|
|
(this["rotate"](), (this[_0x583b8c(0x120)] = ![]))
|
|
: (this["rotReset"] = !![]);
|
|
(keyIsDown(LEFT_ARROW) || _0x47c461 == 0x2) &&
|
|
((this[_0x583b8c(0x112)]["x"] -= 0x1),
|
|
this[_0x583b8c(0x112)]["x"] < 0x0 &&
|
|
(this[_0x583b8c(0x112)]["x"] = 0x0));
|
|
if (keyIsDown(RIGHT_ARROW) || _0x47c461 == 0x4) {
|
|
this[_0x583b8c(0x112)]["x"] += 0x1;
|
|
let _0xfcddb9 =
|
|
blockWidth[this[_0x583b8c(0xf8)]][this[_0x583b8c(0xf9)]] + 0x1;
|
|
this[_0x583b8c(0x112)]["x"] > columns - _0xfcddb9 * 0x8 &&
|
|
(this[_0x583b8c(0x112)]["x"] = columns - _0xfcddb9 * 0x8);
|
|
}
|
|
(keyIsDown(DOWN_ARROW) || _0x47c461 == 0x10) &&
|
|
((this[_0x583b8c(0x112)]["y"] += 0x1), (score += 0x1));
|
|
});
|
|
}
|
|
function resetGame() {
|
|
var _0x562ee7 = _0x13db;
|
|
(score = 0x0),
|
|
(linesCleared = 0x0),
|
|
(staticCount = 0x0),
|
|
(t = 0x0),
|
|
filter[_0x562ee7(0xe7)](0x2710),
|
|
(placed = ![]),
|
|
(buff = createImage(columns, rows)),
|
|
(grid = []);
|
|
for (let _0x1fb6af = 0x0; _0x1fb6af < rows; _0x1fb6af++) {
|
|
grid[_0x1fb6af] = [];
|
|
for (let _0x48f298 = 0x0; _0x48f298 < columns; _0x48f298++) {
|
|
grid[_0x1fb6af][_0x562ee7(0xe5)](null);
|
|
}
|
|
}
|
|
(playerBlock = new Block(width / 0x2 - gameOffset, 0x0)),
|
|
playerBlock[_0x562ee7(0xd9)](),
|
|
(nextBlock = new Block(width / 0x2 - gameOffset, 0x0)),
|
|
nextBlock[_0x562ee7(0xd9)]();
|
|
}
|
|
function startGame() {
|
|
var _0x55364a = _0x13db;
|
|
resetGame(),
|
|
(paused = ![]),
|
|
(gameOver = ![]),
|
|
(startScreen[_0x55364a(0xe2)] = ![]),
|
|
gameMusic[_0x55364a(0x110)]();
|
|
}
|
|
function _0x13db(_0x2264d1, _0x46db42) {
|
|
var _0x5c016b = _0x5c01();
|
|
return (
|
|
(_0x13db = function (_0x13db41, _0x4b50f2) {
|
|
_0x13db41 = _0x13db41 - 0xd9;
|
|
var _0x9e91c2 = _0x5c016b[_0x13db41];
|
|
return _0x9e91c2;
|
|
}),
|
|
_0x13db(_0x2264d1, _0x46db42)
|
|
);
|
|
}
|
|
function unpauseGame() {
|
|
var _0x4f5238 = _0x13db;
|
|
filter["freq"](0x2710), (paused = ![]), (pauseScreen[_0x4f5238(0xe2)] = ![]);
|
|
}
|
|
function newGame() {
|
|
var _0x343587 = _0x13db;
|
|
(pauseScreen[_0x343587(0xe2)] = ![]),
|
|
(gameoverScreen[_0x343587(0xe2)] = ![]),
|
|
(startScreen["open"] = !![]),
|
|
gameMusic[_0x343587(0x110)]();
|
|
}
|
|
function SFXvolume(_0x2d095c) {
|
|
var _0x4f5d1c = _0x13db;
|
|
let _0x43fc25 = _0x2d095c / 0xa;
|
|
placeSound[_0x4f5d1c(0xe6)](_0x43fc25 / 0x2),
|
|
lineSound[_0x4f5d1c(0xe6)](_0x43fc25 / 0x2),
|
|
(sfxSlider1[_0x4f5d1c(0xdf)] = _0x2d095c),
|
|
(sfxSlider2["value"] = _0x2d095c);
|
|
}
|
|
function MUSvolume(_0x597973) {
|
|
var _0x5bfdd1 = _0x13db;
|
|
let _0x28ef9c = _0x597973 / 0xa;
|
|
gameMusic[_0x5bfdd1(0xe6)](_0x28ef9c / 0x2),
|
|
(musSlider1[_0x5bfdd1(0xdf)] = _0x597973),
|
|
(musSlider2[_0x5bfdd1(0xdf)] = _0x597973);
|
|
}
|
|
function toggleAbout() {
|
|
var _0x67b1e1 = _0x13db;
|
|
(aboutScreen[_0x67b1e1(0xe2)] = !aboutScreen[_0x67b1e1(0xe2)]),
|
|
(startScreen["open"] = !startScreen[_0x67b1e1(0xe2)]);
|
|
}
|
|
function adjustDifficulty() {
|
|
var _0x5e36c7 = _0x13db;
|
|
(difficulty = levelSlider["value"]),
|
|
(speed = 0.5 + map(difficulty, 0x1, 0xa, 0x0, 0x3) / 0x2),
|
|
(staticChance = Math[_0x5e36c7(0xf5)](
|
|
map(difficulty, 0x1, 0xa, 0x10, 0x4)
|
|
)),
|
|
(dupChance = map(difficulty, 0x0, 0x1, 0x1, 0.1));
|
|
}
|
|
function _0x5c01() {
|
|
var _0xb22a02 = [
|
|
"body",
|
|
"static",
|
|
"clearGrid",
|
|
"sounds/music",
|
|
"writeText",
|
|
"fill",
|
|
"grav",
|
|
"cnv",
|
|
"LowPass",
|
|
"32KcENKW",
|
|
"loadPixels",
|
|
"673467ibpVOI",
|
|
"rotReset",
|
|
"8702838raZSxj",
|
|
"clipboard",
|
|
"pixels",
|
|
"newBlock",
|
|
"startpage",
|
|
"sounds/line",
|
|
"parent",
|
|
"update",
|
|
"toString",
|
|
"value",
|
|
"1035JetFkx",
|
|
"innerHTML",
|
|
"open",
|
|
"grid",
|
|
"renderBlock",
|
|
"push",
|
|
"setVolume",
|
|
"freq",
|
|
"rotate",
|
|
"1200100IQFOMf",
|
|
"fonts/retroFont.ttf",
|
|
"Share\x20Text\x20Copied\x20to\x20Clipboard!",
|
|
"swipe",
|
|
"get",
|
|
"isPlaying",
|
|
"getElementById",
|
|
"Play\x20now\x20at\x20https://sandtris.com/",
|
|
"mp3",
|
|
"round",
|
|
"10hiGZJj",
|
|
"lvlSlider",
|
|
"floor",
|
|
"log",
|
|
"LEVEL:",
|
|
"type",
|
|
"rot",
|
|
"sfx2Slider",
|
|
"2271057vMypTU",
|
|
"levelText",
|
|
"281351dLdpJR",
|
|
"disconnect",
|
|
"strokeWeight",
|
|
"set",
|
|
"LINES:\x20",
|
|
"play",
|
|
"length",
|
|
"col",
|
|
"217410hCAWJb",
|
|
"show",
|
|
"<br/>LINES:<br/>",
|
|
"gameoverpage",
|
|
"repeat",
|
|
"mus1Slider",
|
|
"█▀\u2003▄▀█\u2003█▄░█\u2003█▀▄\u2003▀█▀\u2003█▀█\u2003█\u2003█▀\x0a\x20\x20▄█\u2003█▀█\u2003█░▀█\u2003█▄▀\u2003░█░\u2003█▀▄\u2003█\u2003▄█\x0a\x20\x20\x20\x20",
|
|
"LEVEL:\x20",
|
|
"loop",
|
|
"DIRECTION_ALL",
|
|
"controls",
|
|
"stop",
|
|
"132eEPjVT",
|
|
"pos",
|
|
"sprite",
|
|
];
|
|
_0x5c01 = function () {
|
|
return _0xb22a02;
|
|
};
|
|
return _0x5c01();
|
|
}
|
|
function gameOverScore() {
|
|
var _0x585f05 = _0x13db;
|
|
(gameoverText["innerHTML"] = ""),
|
|
(gameoverText[_0x585f05(0xe1)] += "SCORE:<br/>" + score),
|
|
(gameoverText[_0x585f05(0xe1)] += _0x585f05(0x107) + linesCleared);
|
|
}
|
|
function shareText() {
|
|
var _0xca8d32 = _0x13db;
|
|
let _0x1dc362 = _0xca8d32(0x10b),
|
|
_0x50a71e = difficulty["toString"](),
|
|
_0x5ab3f7 = linesCleared[_0xca8d32(0xde)](),
|
|
_0x5bc2d4 = score["toString"]();
|
|
(_0x1dc362 +=
|
|
_0xca8d32(0x10c) +
|
|
_0x50a71e +
|
|
"\x20"[_0xca8d32(0x109)](0x6 - _0x50a71e[_0xca8d32(0x103)]) +
|
|
"|\x20"),
|
|
(_0x1dc362 +=
|
|
_0xca8d32(0x101) +
|
|
_0x5ab3f7 +
|
|
"\x20"[_0xca8d32(0x109)](0x6 - _0x5ab3f7[_0xca8d32(0x103)]) +
|
|
"\x0a"),
|
|
(_0x1dc362 +=
|
|
"SCORE:\x20" +
|
|
_0x5bc2d4 +
|
|
"\x20"[_0xca8d32(0x109)](0x9 - _0x5bc2d4[_0xca8d32(0x103)]) +
|
|
"|\x20"),
|
|
(_0x1dc362 +=
|
|
"TIME:\x20" +
|
|
timeText +
|
|
"\x20"[_0xca8d32(0x109)](0x7 - timeText[_0xca8d32(0x103)]) +
|
|
"\x0a"),
|
|
(_0x1dc362 += _0xca8d32(0xf0)),
|
|
(_0x1dc362 += navigator[_0xca8d32(0x122)][_0xca8d32(0x118)](_0x1dc362)),
|
|
alert(_0xca8d32(0xeb));
|
|
}
|
|
function setup() {
|
|
var _0x5615b6 = _0x13db;
|
|
(startScreen = document[_0x5615b6(0xef)](_0x5615b6(0xda))),
|
|
(pauseScreen = document[_0x5615b6(0xef)]("pausepage")),
|
|
(gameoverScreen = document[_0x5615b6(0xef)](_0x5615b6(0x108))),
|
|
(aboutScreen = document[_0x5615b6(0xef)]("aboutpage")),
|
|
(levelSlider = document[_0x5615b6(0xef)](_0x5615b6(0xf4))),
|
|
(levelSlider[_0x5615b6(0xdf)] = 0x1),
|
|
(levelText = document[_0x5615b6(0xef)](_0x5615b6(0xfc))),
|
|
(sfxSlider1 = document["getElementById"]("sfx1Slider")),
|
|
(sfxSlider2 = document[_0x5615b6(0xef)](_0x5615b6(0xfa))),
|
|
(sfxSlider1[_0x5615b6(0xdf)] = 0xa),
|
|
(sfxSlider2[_0x5615b6(0xdf)] = 0xa),
|
|
(musSlider1 = document[_0x5615b6(0xef)](_0x5615b6(0x10a))),
|
|
(musSlider2 = document[_0x5615b6(0xef)]("mus2Slider")),
|
|
(musSlider1[_0x5615b6(0xdf)] = 0xa),
|
|
(musSlider2[_0x5615b6(0xdf)] = 0xa),
|
|
(gameoverText = document[_0x5615b6(0xef)]("gameoverText")),
|
|
(gameRes = createVector(columns * scl, rows * scl)),
|
|
(nextOffset = gameRes["x"] + gameOffset * 0x4),
|
|
(cnv = createCanvas(gameRes["x"] + gameOffset * 0x11, gameRes["y"])),
|
|
cnv[_0x5615b6(0xdc)](_0x5615b6(0x11b)),
|
|
textFont(pixelFont),
|
|
frameRate(0x3c),
|
|
noSmooth(),
|
|
(filter = new p5[_0x5615b6(0x11c)]()),
|
|
filter[_0x5615b6(0xe7)](0x2710),
|
|
gameMusic[_0x5615b6(0xfe)](),
|
|
gameMusic["connect"](filter),
|
|
gameMusic[_0x5615b6(0xe6)](0.5);
|
|
var _0x3d0a72 = { preventDefault: !![] },
|
|
_0x25d6a0 = new Hammer(document[_0x5615b6(0x114)], _0x3d0a72);
|
|
_0x25d6a0[_0x5615b6(0xed)]("swipe")[_0x5615b6(0x100)]({
|
|
direction: Hammer[_0x5615b6(0x10e)],
|
|
}),
|
|
_0x25d6a0["on"](_0x5615b6(0xec), swiped),
|
|
resetGame();
|
|
}
|
|
function AddBlock(
|
|
_0x2c9628,
|
|
_0x5d17a0,
|
|
_0x192e66,
|
|
_0x1e9c5b,
|
|
_0x22bca8,
|
|
_0xae7a7c
|
|
) {
|
|
for (let _0x4e1c27 = 0x0; _0x4e1c27 < 0x4; _0x4e1c27++) {
|
|
AddSingleBrick(
|
|
_0x2c9628,
|
|
_0x5d17a0 + _0x1e9c5b[_0x4e1c27 * 0x2] * 0x8,
|
|
_0x192e66 - _0x1e9c5b[_0x4e1c27 * 0x2 + 0x1] * 0x8,
|
|
_0x22bca8,
|
|
_0xae7a7c
|
|
);
|
|
}
|
|
}
|
|
function AddSingleBrick(_0x5382f7, _0x6c56d4, _0x437299, _0xe2b858, _0x36f30b) {
|
|
let _0x4e9fcc = brick;
|
|
_0x36f30b && (_0x4e9fcc = staticbrick);
|
|
for (let _0x15c88f = 0x0; _0x15c88f < 0x8; _0x15c88f++) {
|
|
for (let _0x509922 = 0x0; _0x509922 < 0x8; _0x509922++) {
|
|
if (_0x437299 - _0x15c88f < 0x0) continue;
|
|
let _0x9b5146 = HSVtoRGB(
|
|
_0xe2b858 / 0x5,
|
|
0.8,
|
|
map(_0x4e9fcc[_0x15c88f][_0x509922], 0x0, 0x1, 0.2, 0.7)
|
|
);
|
|
_0x5382f7[_0x437299 - _0x15c88f][_0x6c56d4 + _0x509922] = [
|
|
_0xe2b858,
|
|
_0x9b5146["r"],
|
|
_0x9b5146["g"],
|
|
_0x9b5146["b"],
|
|
0x0,
|
|
_0x36f30b,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
function renderFromArray(_0x25b72a, _0x1a1fa8) {
|
|
var _0x1f62c2 = _0x13db;
|
|
let _0x278359 = _0x25b72a[_0x1f62c2(0x103)],
|
|
_0x51a344 = _0x25b72a[0x0][_0x1f62c2(0x103)];
|
|
_0x1a1fa8[_0x1f62c2(0x11e)]();
|
|
for (let _0x488f22 = 0x0; _0x488f22 < _0x278359; _0x488f22++) {
|
|
for (let _0x5b82d1 = 0x0; _0x5b82d1 < _0x51a344; _0x5b82d1++) {
|
|
let _0x3e5849 = (_0x488f22 * _0x51a344 + _0x5b82d1) * 0x4;
|
|
if (_0x25b72a[_0x488f22][_0x5b82d1] == null) {
|
|
(_0x1a1fa8[_0x1f62c2(0x123)][_0x3e5849] = 0x0),
|
|
(_0x1a1fa8[_0x1f62c2(0x123)][_0x3e5849 + 0x1] = 0x0),
|
|
(_0x1a1fa8[_0x1f62c2(0x123)][_0x3e5849 + 0x2] = 0x0),
|
|
(_0x1a1fa8[_0x1f62c2(0x123)][_0x3e5849 + 0x3] = 0x0);
|
|
continue;
|
|
}
|
|
(_0x1a1fa8[_0x1f62c2(0x123)][_0x3e5849] =
|
|
_0x25b72a[_0x488f22][_0x5b82d1][0x1]),
|
|
(_0x1a1fa8[_0x1f62c2(0x123)][_0x3e5849 + 0x1] =
|
|
_0x25b72a[_0x488f22][_0x5b82d1][0x2]),
|
|
(_0x1a1fa8[_0x1f62c2(0x123)][_0x3e5849 + 0x2] =
|
|
_0x25b72a[_0x488f22][_0x5b82d1][0x3]),
|
|
(_0x1a1fa8["pixels"][_0x3e5849 + 0x3] = 0xff);
|
|
}
|
|
}
|
|
_0x1a1fa8["updatePixels"]();
|
|
}
|
|
function updateLogic(_0x208384, _0x3b1040) {
|
|
if (grid[_0x3b1040][_0x208384] == null) return;
|
|
grid[_0x3b1040][_0x208384][0x4] = 0x0;
|
|
if (_0x3b1040 >= rows - 0x1) return;
|
|
if (grid[_0x3b1040 + 0x1][_0x208384] == null) {
|
|
(grid[_0x3b1040 + 0x1][_0x208384] = grid[_0x3b1040][_0x208384]),
|
|
(grid[_0x3b1040][_0x208384] = null);
|
|
return;
|
|
}
|
|
if (grid[_0x3b1040][_0x208384][0x5]) return;
|
|
let _0x200d7e =
|
|
_0x208384 > 0x0 && grid[_0x3b1040 + 0x1][_0x208384 - 0x1] == null,
|
|
_0x4a2b17 =
|
|
_0x208384 < columns - 0x1 &&
|
|
grid[_0x3b1040 + 0x1][_0x208384 + 0x1] == null;
|
|
if (_0x200d7e && _0x4a2b17) {
|
|
if (random() < 0.5) {
|
|
(grid[_0x3b1040 + 0x1][_0x208384 - 0x1] = grid[_0x3b1040][_0x208384]),
|
|
(grid[_0x3b1040][_0x208384] = null);
|
|
return;
|
|
}
|
|
(grid[_0x3b1040 + 0x1][_0x208384 + 0x1] = grid[_0x3b1040][_0x208384]),
|
|
(grid[_0x3b1040][_0x208384] = null);
|
|
return;
|
|
}
|
|
if (_0x200d7e) {
|
|
(grid[_0x3b1040 + 0x1][_0x208384 - 0x1] = grid[_0x3b1040][_0x208384]),
|
|
(grid[_0x3b1040][_0x208384] = null);
|
|
return;
|
|
}
|
|
if (_0x4a2b17) {
|
|
(grid[_0x3b1040 + 0x1][_0x208384 + 0x1] = grid[_0x3b1040][_0x208384]),
|
|
(grid[_0x3b1040][_0x208384] = null);
|
|
return;
|
|
}
|
|
}
|
|
function updateGrid() {
|
|
if (t % 0x4 == 0x0) {
|
|
for (let _0x14fde0 = rows - 0x1; _0x14fde0 >= 0x0; _0x14fde0--) {
|
|
for (let _0x26f8ae = 0x0; _0x26f8ae < columns; _0x26f8ae++) {
|
|
updateLogic(_0x26f8ae, _0x14fde0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (t % 0x4 == 0x2)
|
|
for (let _0x26b096 = rows - 0x1; _0x26b096 >= 0x0; _0x26b096--) {
|
|
for (let _0xa841e9 = columns - 0x1; _0xa841e9 >= 0x0; _0xa841e9--) {
|
|
updateLogic(_0xa841e9, _0x26b096);
|
|
}
|
|
}
|
|
}
|
|
function checkLine() {
|
|
var _0x9872c4 = _0x13db;
|
|
vis = [];
|
|
for (let _0x170c82 = 0x0; _0x170c82 < rows; _0x170c82++) {
|
|
(vis = []), (fullLine = ![]);
|
|
if (grid[_0x170c82][0x0] == null || grid[_0x170c82][0x0][0x4] == 0x1)
|
|
continue;
|
|
floodFill(0x0, _0x170c82, grid[_0x170c82][0x0][0x0]);
|
|
if (!fullLine) continue;
|
|
console[_0x9872c4(0xf6)]("LINE\x20AT\x20", _0x170c82);
|
|
return;
|
|
}
|
|
}
|
|
function floodFill(_0x53320, _0x15727c, _0x28621a) {
|
|
var _0x266d73 = _0x13db;
|
|
if (
|
|
_0x53320 < 0x0 ||
|
|
_0x53320 >= columns ||
|
|
_0x15727c < 0x0 ||
|
|
_0x15727c >= rows ||
|
|
grid[_0x15727c][_0x53320] == null ||
|
|
grid[_0x15727c][_0x53320][0x4] == 0x1 ||
|
|
grid[_0x15727c][_0x53320][0x0] != _0x28621a
|
|
)
|
|
return;
|
|
_0x53320 == columns - 0x1 && (fullLine = !![]),
|
|
(grid[_0x15727c][_0x53320][0x4] = 0x1),
|
|
vis[_0x266d73(0xe5)]([_0x53320, _0x15727c]),
|
|
floodFill(_0x53320 + 0x1, _0x15727c, _0x28621a),
|
|
floodFill(_0x53320 - 0x1, _0x15727c, _0x28621a),
|
|
floodFill(_0x53320, _0x15727c + 0x1, _0x28621a),
|
|
floodFill(_0x53320, _0x15727c - 0x1, _0x28621a);
|
|
}
|
|
function setLineColor(_0x7e1a9a) {
|
|
let _0x434165 = 0xff;
|
|
_0x7e1a9a % 0xa < 0x5 && (_0x434165 = 0x0);
|
|
for (let _0x106892 of vis) {
|
|
(grid[_0x106892[0x1]][_0x106892[0x0]][0x1] = _0x434165),
|
|
(grid[_0x106892[0x1]][_0x106892[0x0]][0x2] = _0x434165),
|
|
(grid[_0x106892[0x1]][_0x106892[0x0]][0x3] = _0x434165);
|
|
}
|
|
}
|
|
function deleteLine(_0x57044a) {
|
|
var _0x333f68 = _0x13db;
|
|
for (let _0x499f43 of vis) {
|
|
grid[_0x499f43[0x1]][_0x499f43[0x0]] = null;
|
|
}
|
|
(score += vis[_0x333f68(0x103)]), (vis = []);
|
|
}
|
|
function UI() {
|
|
var _0x3bc98a = _0x13db;
|
|
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[_0x3bc98a(0x106)]();
|
|
fill(0xa),
|
|
rect(nextOffset, gameOffset * 0x2, gameOffset * 0xa, gameOffset * 0xa),
|
|
image(
|
|
nextBlock["sprite"],
|
|
nextOffset +
|
|
(0x5 - (blockWidth[nextBlock[_0x3bc98a(0xf8)]][0x0] + 0x1)) *
|
|
gameOffset,
|
|
(0x5 - (0x6 - blockHeight[nextBlock[_0x3bc98a(0xf8)]][0x0]) + 0x1) *
|
|
gameOffset,
|
|
0x20 * scl,
|
|
0x20 * scl
|
|
);
|
|
let _0x1ee85d = Math[_0x3bc98a(0xf5)](t / 0xe10),
|
|
_0x5a44cd = Math[_0x3bc98a(0xf5)](t / 0x3c) % 0x3c;
|
|
_0x1ee85d < 0xa && (_0x1ee85d = "0" + _0x1ee85d),
|
|
_0x5a44cd < 0xa && (_0x5a44cd = "0" + _0x5a44cd),
|
|
(timeText = _0x1ee85d + ":" + _0x5a44cd),
|
|
fill(0x19)[_0x3bc98a(0xff)](0x1)["textSize"](0x20),
|
|
text(timeText, nextOffset - 0x2, gameOffset * 0x10),
|
|
text("LINES:", nextOffset - 0x2, gameOffset * 0x13),
|
|
text(linesCleared, nextOffset - 0x2, gameOffset * 0x15),
|
|
text("SCORE:", nextOffset - 0x2, gameOffset * 0x18),
|
|
text(score, nextOffset - 0x2, gameOffset * 0x1a),
|
|
text(_0x3bc98a(0xf7), nextOffset - 0x2, gameOffset * 0x1d),
|
|
text(difficulty, nextOffset - 0x2, gameOffset * 0x1f),
|
|
(levelText["innerHTML"] = _0x3bc98a(0x10c) + levelSlider["value"]);
|
|
}
|
|
function keyPressed() {
|
|
var _0x314e97 = _0x13db;
|
|
if (keyCode === 0x50) {
|
|
if (gameOver) return;
|
|
paused ? filter[_0x314e97(0xe7)](0x2710) : filter[_0x314e97(0xe7)](0xc8),
|
|
(paused = !paused),
|
|
(pauseScreen["open"] = !pauseScreen[_0x314e97(0xe2)]);
|
|
}
|
|
}
|
|
function GameLogic() {
|
|
var _0x5eaedc = _0x13db;
|
|
if (paused) return;
|
|
if (gameOver) {
|
|
gameMusic[_0x5eaedc(0x110)]();
|
|
return;
|
|
}
|
|
if (fullLine) {
|
|
cleartime == 0x0 && ((linesCleared += 0x1), lineSound["play"]());
|
|
(cleartime += 0x1), setLineColor(cleartime);
|
|
cleartime > 0x1e &&
|
|
(console["log"]("Deleting"),
|
|
deleteLine(),
|
|
(cleartime = 0x0),
|
|
(fullLine = ![]));
|
|
return;
|
|
}
|
|
placed &&
|
|
(!gameMusic[_0x5eaedc(0xee)]() && gameMusic[_0x5eaedc(0x10d)](),
|
|
(playerBlock = nextBlock),
|
|
(nextBlock = new Block(width / 0x2, 0x0)),
|
|
nextBlock[_0x5eaedc(0xd9)](),
|
|
playerBlock[_0x5eaedc(0x104)] == nextBlock[_0x5eaedc(0x104)] &&
|
|
random() < dupChance &&
|
|
((nextBlock["col"] = (nextBlock[_0x5eaedc(0x104)] + 0x1) % 0x4),
|
|
nextBlock[_0x5eaedc(0xe4)]()),
|
|
(placed = ![])),
|
|
updateGrid(),
|
|
playerBlock[_0x5eaedc(0xdd)](),
|
|
playerBlock[_0x5eaedc(0x10f)](),
|
|
checkLine(),
|
|
(t += 0x1);
|
|
}
|
|
function draw() {
|
|
UI(), GameLogic();
|
|
}
|