sandtris/sketch.js
2023-06-06 01:28:49 -07:00

806 lines
25 KiB
JavaScript

function _0x5724(_0x37ef40, _0x2a53ea) {
var _0x2acac6 = _0x2aca();
return (
(_0x5724 = function (_0x5724d4, _0x55ff6b) {
_0x5724d4 = _0x5724d4 - 0x1e0;
var _0x4c5247 = _0x2acac6[_0x5724d4];
return _0x4c5247;
}),
_0x5724(_0x37ef40, _0x2a53ea)
);
}
var _0x180e5b = _0x5724;
(function (_0x196c7a, _0x155e9f) {
var _0x100fe1 = _0x5724,
_0x56d8b8 = _0x196c7a();
while (!![]) {
try {
var _0x42a115 =
(-parseInt(_0x100fe1(0x1fd)) / 0x1) *
(-parseInt(_0x100fe1(0x1e2)) / 0x2) +
(-parseInt(_0x100fe1(0x218)) / 0x3) *
(parseInt(_0x100fe1(0x219)) / 0x4) +
-parseInt(_0x100fe1(0x1f8)) / 0x5 +
parseInt(_0x100fe1(0x1e0)) / 0x6 +
(parseInt(_0x100fe1(0x1e9)) / 0x7) *
(parseInt(_0x100fe1(0x1fc)) / 0x8) +
parseInt(_0x100fe1(0x209)) / 0x9 +
parseInt(_0x100fe1(0x1e8)) / 0xa;
if (_0x42a115 === _0x155e9f) break;
else _0x56d8b8["push"](_0x56d8b8["shift"]());
} catch (_0x4aa8d8) {
_0x56d8b8["push"](_0x56d8b8["shift"]());
}
}
})(_0x2aca, 0xaac4c);
function HSVtoRGB(_0x4ff404, _0x3e89bf, _0x4f4745) {
var _0x51d0b3 = _0x5724,
_0x2d8d15,
_0x3e4190,
_0x3e5ade,
_0x263206,
_0x38f1c1,
_0x5c7a21,
_0x274e76,
_0x3c6e79;
arguments[_0x51d0b3(0x20a)] === 0x1 &&
((_0x3e89bf = _0x4ff404["s"]),
(_0x4f4745 = _0x4ff404["v"]),
(_0x4ff404 = _0x4ff404["h"]));
(_0x263206 = Math[_0x51d0b3(0x1ff)](_0x4ff404 * 0x6)),
(_0x38f1c1 = _0x4ff404 * 0x6 - _0x263206),
(_0x5c7a21 = _0x4f4745 * (0x1 - _0x3e89bf)),
(_0x274e76 = _0x4f4745 * (0x1 - _0x38f1c1 * _0x3e89bf)),
(_0x3c6e79 = _0x4f4745 * (0x1 - (0x1 - _0x38f1c1) * _0x3e89bf));
switch (_0x263206 % 0x6) {
case 0x0:
(_0x2d8d15 = _0x4f4745), (_0x3e4190 = _0x3c6e79), (_0x3e5ade = _0x5c7a21);
break;
case 0x1:
(_0x2d8d15 = _0x274e76), (_0x3e4190 = _0x4f4745), (_0x3e5ade = _0x5c7a21);
break;
case 0x2:
(_0x2d8d15 = _0x5c7a21), (_0x3e4190 = _0x4f4745), (_0x3e5ade = _0x3c6e79);
break;
case 0x3:
(_0x2d8d15 = _0x5c7a21), (_0x3e4190 = _0x274e76), (_0x3e5ade = _0x4f4745);
break;
case 0x4:
(_0x2d8d15 = _0x3c6e79), (_0x3e4190 = _0x5c7a21), (_0x3e5ade = _0x4f4745);
break;
case 0x5:
(_0x2d8d15 = _0x4f4745), (_0x3e4190 = _0x5c7a21), (_0x3e5ade = _0x274e76);
break;
}
return {
r: Math[_0x51d0b3(0x21a)](_0x2d8d15 * 0xff),
g: Math[_0x51d0b3(0x21a)](_0x3e4190 * 0xff),
b: Math[_0x51d0b3(0x21a)](_0x3e5ade * 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 = _0x180e5b(0x200),
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 _0x4cdde4 = _0x180e5b;
soundFormats(_0x4cdde4(0x207), _0x4cdde4(0x222)),
(placeSound = loadSound(_0x4cdde4(0x1e7))),
(lineSound = loadSound(_0x4cdde4(0x1ea))),
(gameMusic = loadSound("sounds/music")),
(pixelFont = loadFont(_0x4cdde4(0x223)));
}
function Block(_0xc1d6e6, _0x263c0c) {
var _0x3d2206 = _0x180e5b;
(this[_0x3d2206(0x20f)] = createVector(0x0, 0x0)),
(this[_0x3d2206(0x20e)] = speed),
(this[_0x3d2206(0x213)] = null),
(this[_0x3d2206(0x217)] = []),
(this[_0x3d2206(0x1fe)] = 0x0),
(this["col"] = 0x0),
(this[_0x3d2206(0x210)] = ![]),
(this[_0x3d2206(0x1fb)] = 0x0),
(this[_0x3d2206(0x1f0)] = !![]),
(this[_0x3d2206(0x1ed)] = function () {
var _0x34571f = _0x3d2206;
this[_0x34571f(0x217)] = [];
for (let _0x57d73c = 0x0; _0x57d73c < 0x20; _0x57d73c++) {
this["grid"][_0x34571f(0x1f5)](new Array(0x20)[_0x34571f(0x1f3)](null));
}
}),
(this[_0x3d2206(0x1e3)] = function () {
var _0x5f5d59 = _0x3d2206;
this[_0x5f5d59(0x1ed)](),
AddBlock(
this[_0x5f5d59(0x217)],
0x0,
0x1f,
blockType[this[_0x5f5d59(0x1fe)]][this[_0x5f5d59(0x1fb)]],
this[_0x5f5d59(0x20b)],
this["static"]
),
renderFromArray(this[_0x5f5d59(0x217)], this[_0x5f5d59(0x213)]);
}),
(this[_0x3d2206(0x212)] = function () {
var _0x48c73f = _0x3d2206;
(this[_0x48c73f(0x210)] = ![]),
(this[_0x48c73f(0x213)] = createImage(0x20, 0x20)),
(this[_0x48c73f(0x1fe)] = int(random(blockType[_0x48c73f(0x20a)]))),
(this[_0x48c73f(0x20b)] = int(random(0x4))),
(this[_0x48c73f(0x20f)] = createVector(
int(columns / 0x2 - (blockWidth[this[_0x48c73f(0x1fe)]][0x0] + 0x1)),
0x0
)),
(staticCount += 0x1),
staticCount == staticChance &&
((this[_0x48c73f(0x210)] = !![]), (staticCount = 0x0)),
this[_0x48c73f(0x1e3)]();
}),
(this[_0x3d2206(0x204)] = function () {
var _0x30ee27 = _0x3d2206;
image(
this[_0x30ee27(0x213)],
this[_0x30ee27(0x20f)]["x"] * scl + gameOffset,
(this[_0x30ee27(0x20f)]["y"] - 0x20) * scl,
0x20 * scl,
0x20 * scl
);
}),
(this[_0x3d2206(0x1f6)] = function () {
var _0x21381c = _0x3d2206;
let _0x1f63dd = Math["floor"](this[_0x21381c(0x20f)]["x"]),
_0x46b4ad = Math[_0x21381c(0x1ff)](this[_0x21381c(0x20f)]["y"]);
if (_0x46b4ad + 0x1 >= rows) placed = !![];
else
for (let _0xd4b03c = 0x0; _0xd4b03c < 0x4; _0xd4b03c++) {
let _0x259679 = _0xd4b03c * 0x2,
_0x5f4346 =
blockType[this[_0x21381c(0x1fe)]][this["rot"]][_0x259679],
_0x47c299 =
blockType[this[_0x21381c(0x1fe)]][this[_0x21381c(0x1fb)]][
_0x259679 + 0x1
],
_0x3f3f9a = int(_0x1f63dd + _0x5f4346 * 0x8),
_0x1f41f0 = int(_0x46b4ad - _0x47c299 * 0x8);
if (_0x1f41f0 <= 0x0) continue;
for (let _0x299e73 = 0x0; _0x299e73 < 0x8; _0x299e73++) {
grid[_0x1f41f0 + 0x1][_0x3f3f9a + _0x299e73] != null &&
(grid[_0x1f41f0][_0x3f3f9a + _0x299e73] &&
(this[_0x21381c(0x20f)]["y"] -= 0x1),
(placed = !![]));
}
}
if (placed) {
this[_0x21381c(0x20f)]["y"] -
0x8 *
(blockHeight[this[_0x21381c(0x1fe)]][this[_0x21381c(0x1fb)]] +
0x1) <
0x0 &&
((gameOver = !![]),
gameOverScore(),
(gameoverScreen[_0x21381c(0x203)] = !![]));
AddBlock(
grid,
_0x1f63dd,
min(_0x46b4ad, rows - 0x1),
blockType[this[_0x21381c(0x1fe)]][this[_0x21381c(0x1fb)]],
this[_0x21381c(0x20b)],
this[_0x21381c(0x210)]
),
placeSound["play"]();
return;
}
this[_0x21381c(0x20f)]["y"] += this[_0x21381c(0x20e)];
}),
(this["rotate"] = function () {
var _0xd01b29 = _0x3d2206;
(this[_0xd01b29(0x1fb)] = (this[_0xd01b29(0x1fb)] + 0x1) % 0x4),
this[_0xd01b29(0x1ed)](),
(this[_0xd01b29(0x213)] = createImage(0x20, 0x20)),
AddBlock(
this[_0xd01b29(0x217)],
0x0,
0x1f,
blockType[this[_0xd01b29(0x1fe)]][this[_0xd01b29(0x1fb)]],
this[_0xd01b29(0x20b)],
this[_0xd01b29(0x210)]
),
renderFromArray(this[_0xd01b29(0x217)], this[_0xd01b29(0x213)]);
let _0x302bd1 =
blockWidth[this[_0xd01b29(0x1fe)]][this[_0xd01b29(0x1fb)]] + 0x1;
this[_0xd01b29(0x20f)]["x"] > columns - _0x302bd1 * 0x8 &&
(this[_0xd01b29(0x20f)]["x"] = columns - _0x302bd1 * 0x8);
}),
(this["controls"] = function () {
var _0x38d0ec = _0x3d2206;
keyIsDown(UP_ARROW)
? this[_0x38d0ec(0x1f0)] &&
(this[_0x38d0ec(0x1ef)](), (this[_0x38d0ec(0x1f0)] = ![]))
: (this["rotReset"] = !![]);
keyIsDown(LEFT_ARROW) &&
((this[_0x38d0ec(0x20f)]["x"] -= 0x1),
this[_0x38d0ec(0x20f)]["x"] < 0x0 && (this["pos"]["x"] = 0x0));
if (keyIsDown(RIGHT_ARROW)) {
this[_0x38d0ec(0x20f)]["x"] += 0x1;
let _0xfc60e8 = blockWidth[this[_0x38d0ec(0x1fe)]][this["rot"]] + 0x1;
this["pos"]["x"] > columns - _0xfc60e8 * 0x8 &&
(this["pos"]["x"] = columns - _0xfc60e8 * 0x8);
}
keyIsDown(DOWN_ARROW) &&
((this[_0x38d0ec(0x20f)]["y"] += 0x1), (score += 0x1));
});
}
function resetGame() {
var _0x131fad = _0x180e5b;
(score = 0x0),
(linesCleared = 0x0),
(staticCount = 0x0),
(t = 0x0),
(buff = createImage(columns, rows)),
(grid = []);
for (let _0x2413ab = 0x0; _0x2413ab < rows; _0x2413ab++) {
grid[_0x2413ab] = [];
for (let _0x3f4bfd = 0x0; _0x3f4bfd < columns; _0x3f4bfd++) {
grid[_0x2413ab][_0x131fad(0x1f5)](null);
}
}
(playerBlock = new Block(width / 0x2 - gameOffset, 0x0)),
playerBlock[_0x131fad(0x212)](),
(nextBlock = new Block(width / 0x2 - gameOffset, 0x0)),
nextBlock[_0x131fad(0x212)]();
}
function startGame() {
var _0x59c5b4 = _0x180e5b;
resetGame(),
(paused = ![]),
(gameOver = ![]),
(startScreen[_0x59c5b4(0x203)] = ![]);
}
function unpauseGame() {
var _0x4b19ae = _0x180e5b;
(paused = ![]), (pauseScreen[_0x4b19ae(0x203)] = ![]);
}
function newGame() {
var _0x2f34a1 = _0x180e5b;
(pauseScreen[_0x2f34a1(0x203)] = ![]),
(gameoverScreen[_0x2f34a1(0x203)] = ![]),
(startScreen[_0x2f34a1(0x203)] = !![]);
}
function SFXvolume(_0x39fe54) {
var _0x5b401d = _0x180e5b;
let _0xc5a8a3 = _0x39fe54 / 0xa;
placeSound[_0x5b401d(0x205)](_0xc5a8a3 / 0x2),
lineSound[_0x5b401d(0x205)](_0xc5a8a3 / 0x2),
(sfxSlider1[_0x5b401d(0x211)] = _0x39fe54),
(sfxSlider2[_0x5b401d(0x211)] = _0x39fe54);
}
function MUSvolume(_0x4e4249) {
var _0x64e82e = _0x180e5b;
let _0x4f9ed5 = _0x4e4249 / 0xa;
gameMusic["setVolume"](_0x4f9ed5 / 0x2),
(musSlider1[_0x64e82e(0x211)] = _0x4e4249),
(musSlider2[_0x64e82e(0x211)] = _0x4e4249);
}
function toggleAbout() {
var _0x298402 = _0x180e5b;
(aboutScreen[_0x298402(0x203)] = !aboutScreen[_0x298402(0x203)]),
(startScreen["open"] = !startScreen["open"]);
}
function adjustDifficulty() {
var _0x2e781f = _0x180e5b;
(difficulty = levelSlider[_0x2e781f(0x211)]),
(speed = 0.5 + map(difficulty, 0x1, 0xa, 0x0, 0x3) / 0x2),
(staticChance = Math[_0x2e781f(0x1ff)](
map(difficulty, 0x1, 0xa, 0x10, 0x4)
)),
(dupChance = map(difficulty, 0x0, 0x1, 0x1, 0.1));
}
function gameOverScore() {
var _0x274d76 = _0x180e5b;
(gameoverText[_0x274d76(0x214)] = ""),
(gameoverText[_0x274d76(0x214)] += _0x274d76(0x220) + score),
(gameoverText[_0x274d76(0x214)] += "<br/>LINES:<br/>" + linesCleared);
}
function shareText() {
var _0x5e0e2c = _0x180e5b;
let _0x5293dd = _0x5e0e2c(0x1eb),
_0x255f9d = difficulty[_0x5e0e2c(0x1f1)](),
_0x106c96 = linesCleared["toString"](),
_0x435526 = score["toString"]();
(_0x5293dd +=
"LEVEL:\x20" +
_0x255f9d +
"\x20"["repeat"](0x6 - _0x255f9d[_0x5e0e2c(0x20a)]) +
"|\x20"),
(_0x5293dd +=
"LINES:\x20" +
_0x106c96 +
"\x20"[_0x5e0e2c(0x216)](0x6 - _0x106c96[_0x5e0e2c(0x20a)]) +
"\x0a"),
(_0x5293dd +=
"SCORE:\x20" +
_0x435526 +
"\x20"["repeat"](0x9 - _0x435526[_0x5e0e2c(0x20a)]) +
"|\x20"),
(_0x5293dd +=
_0x5e0e2c(0x1e4) +
timeText +
"\x20"["repeat"](0x7 - timeText[_0x5e0e2c(0x20a)]) +
"\x0a"),
(_0x5293dd += _0x5e0e2c(0x1f7)),
(_0x5293dd += navigator[_0x5e0e2c(0x221)]["writeText"](_0x5293dd)),
alert(_0x5e0e2c(0x21b));
}
function setup() {
var _0x4f3495 = _0x180e5b;
(startScreen = document[_0x4f3495(0x208)](_0x4f3495(0x21c))),
(pauseScreen = document[_0x4f3495(0x208)]("pausepage")),
(gameoverScreen = document["getElementById"](_0x4f3495(0x1e1))),
(aboutScreen = document[_0x4f3495(0x208)](_0x4f3495(0x1e6))),
(levelSlider = document[_0x4f3495(0x208)](_0x4f3495(0x20d))),
(levelSlider["value"] = 0x1),
(levelText = document["getElementById"](_0x4f3495(0x1f4))),
(sfxSlider1 = document[_0x4f3495(0x208)](_0x4f3495(0x21e))),
(sfxSlider2 = document[_0x4f3495(0x208)](_0x4f3495(0x202))),
(sfxSlider1[_0x4f3495(0x211)] = 0xa),
(sfxSlider2[_0x4f3495(0x211)] = 0xa),
(musSlider1 = document["getElementById"](_0x4f3495(0x201))),
(musSlider2 = document[_0x4f3495(0x208)](_0x4f3495(0x21f))),
(musSlider1[_0x4f3495(0x211)] = 0xa),
(musSlider2["value"] = 0xa),
(gameoverText = document[_0x4f3495(0x208)](_0x4f3495(0x1f9))),
(gameRes = createVector(columns * scl, rows * scl)),
(nextOffset = gameRes["x"] + gameOffset * 0x4),
(cnv = createCanvas(gameRes["x"] + gameOffset * 0x11, gameRes["y"])),
cnv[_0x4f3495(0x1fa)]("cnv"),
textFont(pixelFont),
frameRate(0x3c),
noSmooth(),
gameMusic["play"](),
gameMusic["setVolume"](0.5),
gameMusic[_0x4f3495(0x1f2)](),
resetGame();
}
function AddBlock(
_0x410279,
_0x37de43,
_0x41ab8e,
_0x10f22a,
_0x17e6db,
_0x231eff
) {
for (let _0x3515be = 0x0; _0x3515be < 0x4; _0x3515be++) {
AddSingleBrick(
_0x410279,
_0x37de43 + _0x10f22a[_0x3515be * 0x2] * 0x8,
_0x41ab8e - _0x10f22a[_0x3515be * 0x2 + 0x1] * 0x8,
_0x17e6db,
_0x231eff
);
}
}
function AddSingleBrick(_0x3d90a5, _0x5e5818, _0x5f352a, _0x599e88, _0x215c5e) {
let _0x1fb990 = brick;
_0x215c5e && (_0x1fb990 = staticbrick);
for (let _0x10c2e5 = 0x0; _0x10c2e5 < 0x8; _0x10c2e5++) {
for (let _0x24bba5 = 0x0; _0x24bba5 < 0x8; _0x24bba5++) {
if (_0x5f352a - _0x10c2e5 < 0x0) continue;
let _0x16a855 = HSVtoRGB(
_0x599e88 / 0x5,
0.8,
map(_0x1fb990[_0x10c2e5][_0x24bba5], 0x0, 0x1, 0.2, 0.7)
);
_0x3d90a5[_0x5f352a - _0x10c2e5][_0x5e5818 + _0x24bba5] = [
_0x599e88,
_0x16a855["r"],
_0x16a855["g"],
_0x16a855["b"],
0x0,
_0x215c5e,
];
}
}
}
function renderFromArray(_0x3d6e7c, _0x4d7281) {
var _0x4965e7 = _0x180e5b;
let _0x583f02 = _0x3d6e7c[_0x4965e7(0x20a)],
_0x1b4633 = _0x3d6e7c[0x0][_0x4965e7(0x20a)];
_0x4d7281["loadPixels"]();
for (let _0x42ded6 = 0x0; _0x42ded6 < _0x583f02; _0x42ded6++) {
for (let _0x2262be = 0x0; _0x2262be < _0x1b4633; _0x2262be++) {
let _0x8f4cc1 = (_0x42ded6 * _0x1b4633 + _0x2262be) * 0x4;
if (_0x3d6e7c[_0x42ded6][_0x2262be] == null) {
(_0x4d7281["pixels"][_0x8f4cc1] = 0x0),
(_0x4d7281[_0x4965e7(0x206)][_0x8f4cc1 + 0x1] = 0x0),
(_0x4d7281[_0x4965e7(0x206)][_0x8f4cc1 + 0x2] = 0x0),
(_0x4d7281[_0x4965e7(0x206)][_0x8f4cc1 + 0x3] = 0x0);
continue;
}
(_0x4d7281[_0x4965e7(0x206)][_0x8f4cc1] =
_0x3d6e7c[_0x42ded6][_0x2262be][0x1]),
(_0x4d7281[_0x4965e7(0x206)][_0x8f4cc1 + 0x1] =
_0x3d6e7c[_0x42ded6][_0x2262be][0x2]),
(_0x4d7281[_0x4965e7(0x206)][_0x8f4cc1 + 0x2] =
_0x3d6e7c[_0x42ded6][_0x2262be][0x3]),
(_0x4d7281[_0x4965e7(0x206)][_0x8f4cc1 + 0x3] = 0xff);
}
}
_0x4d7281["updatePixels"]();
}
function updateLogic(_0x21c3ad, _0x240a98) {
if (grid[_0x240a98][_0x21c3ad] == null) return;
grid[_0x240a98][_0x21c3ad][0x4] = 0x0;
if (_0x240a98 >= rows - 0x1) return;
if (grid[_0x240a98 + 0x1][_0x21c3ad] == null) {
(grid[_0x240a98 + 0x1][_0x21c3ad] = grid[_0x240a98][_0x21c3ad]),
(grid[_0x240a98][_0x21c3ad] = null);
return;
}
if (grid[_0x240a98][_0x21c3ad][0x5]) return;
let _0x337a24 =
_0x21c3ad > 0x0 && grid[_0x240a98 + 0x1][_0x21c3ad - 0x1] == null,
_0x2373a4 =
_0x21c3ad < columns - 0x1 &&
grid[_0x240a98 + 0x1][_0x21c3ad + 0x1] == null;
if (_0x337a24 && _0x2373a4) {
if (random() < 0.5) {
(grid[_0x240a98 + 0x1][_0x21c3ad - 0x1] = grid[_0x240a98][_0x21c3ad]),
(grid[_0x240a98][_0x21c3ad] = null);
return;
}
(grid[_0x240a98 + 0x1][_0x21c3ad + 0x1] = grid[_0x240a98][_0x21c3ad]),
(grid[_0x240a98][_0x21c3ad] = null);
return;
}
if (_0x337a24) {
(grid[_0x240a98 + 0x1][_0x21c3ad - 0x1] = grid[_0x240a98][_0x21c3ad]),
(grid[_0x240a98][_0x21c3ad] = null);
return;
}
if (_0x2373a4) {
(grid[_0x240a98 + 0x1][_0x21c3ad + 0x1] = grid[_0x240a98][_0x21c3ad]),
(grid[_0x240a98][_0x21c3ad] = null);
return;
}
}
function updateGrid() {
if (t % 0x4 == 0x0) {
for (let _0x1fb672 = rows - 0x1; _0x1fb672 >= 0x0; _0x1fb672--) {
for (let _0x58dfb7 = 0x0; _0x58dfb7 < columns; _0x58dfb7++) {
updateLogic(_0x58dfb7, _0x1fb672);
}
}
return;
}
if (t % 0x4 == 0x2)
for (let _0x55b1f1 = rows - 0x1; _0x55b1f1 >= 0x0; _0x55b1f1--) {
for (let _0x1d8216 = columns - 0x1; _0x1d8216 >= 0x0; _0x1d8216--) {
updateLogic(_0x1d8216, _0x55b1f1);
}
}
}
function checkLine() {
vis = [];
for (let _0x4fd079 = 0x0; _0x4fd079 < rows; _0x4fd079++) {
(vis = []), (fullLine = ![]);
if (grid[_0x4fd079][0x0] == null || grid[_0x4fd079][0x0][0x4] == 0x1)
continue;
floodFill(0x0, _0x4fd079, grid[_0x4fd079][0x0][0x0]);
if (!fullLine) continue;
console["log"]("LINE\x20AT\x20", _0x4fd079);
return;
}
}
function floodFill(_0x35168a, _0x5a6455, _0x116a0c) {
var _0x2f881d = _0x180e5b;
if (
_0x35168a < 0x0 ||
_0x35168a >= columns ||
_0x5a6455 < 0x0 ||
_0x5a6455 >= rows ||
grid[_0x5a6455][_0x35168a] == null ||
grid[_0x5a6455][_0x35168a][0x4] == 0x1 ||
grid[_0x5a6455][_0x35168a][0x0] != _0x116a0c
)
return;
_0x35168a == columns - 0x1 && (fullLine = !![]),
(grid[_0x5a6455][_0x35168a][0x4] = 0x1),
vis[_0x2f881d(0x1f5)]([_0x35168a, _0x5a6455]),
floodFill(_0x35168a + 0x1, _0x5a6455, _0x116a0c),
floodFill(_0x35168a - 0x1, _0x5a6455, _0x116a0c),
floodFill(_0x35168a, _0x5a6455 + 0x1, _0x116a0c),
floodFill(_0x35168a, _0x5a6455 - 0x1, _0x116a0c);
}
function setLineColor(_0x2951db) {
let _0x449386 = 0xff;
_0x2951db % 0xa < 0x5 && (_0x449386 = 0x0);
for (let _0x2e6742 of vis) {
(grid[_0x2e6742[0x1]][_0x2e6742[0x0]][0x1] = _0x449386),
(grid[_0x2e6742[0x1]][_0x2e6742[0x0]][0x2] = _0x449386),
(grid[_0x2e6742[0x1]][_0x2e6742[0x0]][0x3] = _0x449386);
}
}
function deleteLine(_0x43ee26) {
var _0x48d888 = _0x180e5b;
for (let _0x594342 of vis) {
grid[_0x594342[0x1]][_0x594342[0x0]] = null;
}
(score += vis[_0x48d888(0x20a)]), (vis = []);
}
function _0x2aca() {
var _0x174c98 = [
"value",
"newBlock",
"sprite",
"innerHTML",
"log",
"repeat",
"grid",
"62721qOhpMF",
"244QBhMGh",
"round",
"Share\x20Text\x20Copied\x20to\x20Clipboard!",
"startpage",
"LINES:",
"sfx1Slider",
"mus2Slider",
"SCORE:<br/>",
"clipboard",
"ogg",
"fonts/retroFont.ttf",
"6429318xMmrCc",
"gameoverpage",
"2010642qhegzc",
"renderBlock",
"TIME:\x20",
"play",
"aboutpage",
"sounds/place",
"9136470gjLRcg",
"21QqIAHI",
"sounds/line",
"█▀\u2003▄▀█\u2003█▄░█\u2003█▀▄\u2003▀█▀\u2003█▀█\u2003█\u2003█▀\x0a▄█\u2003█▀█\u2003█░▀█\u2003█▄▀\u2003░█░\u2003█▀▄\u2003█\u2003▄█\x0a\x20\x20",
"Deleting",
"clearGrid",
"LEVEL:",
"rotate",
"rotReset",
"toString",
"loop",
"fill",
"levelText",
"push",
"update",
"Play\x20now\x20at\x20https://sandtris.com/",
"6120640SUdySF",
"gameoverText",
"parent",
"rot",
"2776LmAtxn",
"1kHxlzz",
"type",
"floor",
"00:00",
"mus1Slider",
"sfx2Slider",
"open",
"show",
"setVolume",
"pixels",
"mp3",
"getElementById",
"1866249ynsAWI",
"length",
"col",
"SCORE:",
"lvlSlider",
"grav",
"pos",
"static",
];
_0x2aca = function () {
return _0x174c98;
};
return _0x2aca();
}
function UI() {
var _0x286d3a = _0x180e5b;
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[_0x286d3a(0x204)]();
fill(0xa),
rect(nextOffset, gameOffset * 0x2, gameOffset * 0xa, gameOffset * 0xa),
image(
nextBlock[_0x286d3a(0x213)],
nextOffset +
(0x5 - (blockWidth[nextBlock[_0x286d3a(0x1fe)]][0x0] + 0x1)) *
gameOffset,
(0x5 - (0x6 - blockHeight[nextBlock["type"]][0x0]) + 0x1) * gameOffset,
0x20 * scl,
0x20 * scl
);
let _0x2fe130 = Math["floor"](t / 0xe10),
_0x49da38 = Math[_0x286d3a(0x1ff)](t / 0x3c) % 0x3c;
_0x2fe130 < 0xa && (_0x2fe130 = "0" + _0x2fe130),
_0x49da38 < 0xa && (_0x49da38 = "0" + _0x49da38),
(timeText = _0x2fe130 + ":" + _0x49da38),
fill(0x19)["strokeWeight"](0x1)["textSize"](0x20),
text(timeText, nextOffset - 0x2, gameOffset * 0x10),
text(_0x286d3a(0x21d), nextOffset - 0x2, gameOffset * 0x13),
text(linesCleared, nextOffset - 0x2, gameOffset * 0x15),
text(_0x286d3a(0x20c), nextOffset - 0x2, gameOffset * 0x18),
text(score, nextOffset - 0x2, gameOffset * 0x1a),
text(_0x286d3a(0x1ee), nextOffset - 0x2, gameOffset * 0x1d),
text(difficulty, nextOffset - 0x2, gameOffset * 0x1f),
(levelText[_0x286d3a(0x214)] = "LEVEL:\x20" + levelSlider["value"]);
}
function keyPressed() {
var _0x48c0e5 = _0x180e5b;
if (keyCode === 0x50) {
if (gameOver) return;
(paused = !paused),
(pauseScreen[_0x48c0e5(0x203)] = !pauseScreen[_0x48c0e5(0x203)]);
}
}
function GameLogic() {
var _0x1bc525 = _0x180e5b;
if (paused) return;
if (gameOver) return;
if (fullLine) {
cleartime == 0x0 && ((linesCleared += 0x1), lineSound[_0x1bc525(0x1e5)]());
(cleartime += 0x1), setLineColor(cleartime);
cleartime > 0x1e &&
(console[_0x1bc525(0x215)](_0x1bc525(0x1ec)),
deleteLine(),
(cleartime = 0x0),
(fullLine = ![]));
return;
}
placed &&
((playerBlock = nextBlock),
(nextBlock = new Block(width / 0x2, 0x0)),
nextBlock[_0x1bc525(0x212)](),
playerBlock[_0x1bc525(0x20b)] == nextBlock["col"] &&
random() < dupChance &&
((nextBlock[_0x1bc525(0x20b)] =
(nextBlock[_0x1bc525(0x20b)] + 0x1) % 0x4),
nextBlock[_0x1bc525(0x1e3)]()),
(placed = ![])),
updateGrid(),
playerBlock[_0x1bc525(0x1f6)](),
playerBlock["controls"](),
checkLine(),
(t += 0x1);
}
function draw() {
UI(), GameLogic();
}