diff --git a/hammer.min.js b/hammer.min.js new file mode 100644 index 0000000..ffe1c70 --- /dev/null +++ b/hammer.min.js @@ -0,0 +1,1203 @@ +/*! Hammer.JS - v2.0.8 - 2016-04-23 + * http://hammerjs.github.io/ + * + * Copyright (c) 2016 Jorik Tangelder; + * Licensed under the MIT license */ +!(function (a, b, c, d) { + "use strict"; + function e(a, b, c) { + return setTimeout(j(a, c), b); + } + function f(a, b, c) { + return Array.isArray(a) ? (g(a, c[b], c), !0) : !1; + } + function g(a, b, c) { + var e; + if (a) + if (a.forEach) a.forEach(b, c); + else if (a.length !== d) + for (e = 0; e < a.length; ) b.call(c, a[e], e, a), e++; + else for (e in a) a.hasOwnProperty(e) && b.call(c, a[e], e, a); + } + function h(b, c, d) { + var e = "DEPRECATED METHOD: " + c + "\n" + d + " AT \n"; + return function () { + var c = new Error("get-stack-trace"), + d = + c && c.stack + ? c.stack + .replace(/^[^\(]+?[\n$]/gm, "") + .replace(/^\s+at\s+/gm, "") + .replace(/^Object.\s*\(/gm, "{anonymous}()@") + : "Unknown Stack Trace", + f = a.console && (a.console.warn || a.console.log); + return f && f.call(a.console, e, d), b.apply(this, arguments); + }; + } + function i(a, b, c) { + var d, + e = b.prototype; + (d = a.prototype = Object.create(e)), + (d.constructor = a), + (d._super = e), + c && la(d, c); + } + function j(a, b) { + return function () { + return a.apply(b, arguments); + }; + } + function k(a, b) { + return typeof a == oa ? a.apply(b ? b[0] || d : d, b) : a; + } + function l(a, b) { + return a === d ? b : a; + } + function m(a, b, c) { + g(q(b), function (b) { + a.addEventListener(b, c, !1); + }); + } + function n(a, b, c) { + g(q(b), function (b) { + a.removeEventListener(b, c, !1); + }); + } + function o(a, b) { + for (; a; ) { + if (a == b) return !0; + a = a.parentNode; + } + return !1; + } + function p(a, b) { + return a.indexOf(b) > -1; + } + function q(a) { + return a.trim().split(/\s+/g); + } + function r(a, b, c) { + if (a.indexOf && !c) return a.indexOf(b); + for (var d = 0; d < a.length; ) { + if ((c && a[d][c] == b) || (!c && a[d] === b)) return d; + d++; + } + return -1; + } + function s(a) { + return Array.prototype.slice.call(a, 0); + } + function t(a, b, c) { + for (var d = [], e = [], f = 0; f < a.length; ) { + var g = b ? a[f][b] : a[f]; + r(e, g) < 0 && d.push(a[f]), (e[f] = g), f++; + } + return ( + c && + (d = b + ? d.sort(function (a, c) { + return a[b] > c[b]; + }) + : d.sort()), + d + ); + } + function u(a, b) { + for ( + var c, e, f = b[0].toUpperCase() + b.slice(1), g = 0; + g < ma.length; + + ) { + if (((c = ma[g]), (e = c ? c + f : b), e in a)) return e; + g++; + } + return d; + } + function v() { + return ua++; + } + function w(b) { + var c = b.ownerDocument || b; + return c.defaultView || c.parentWindow || a; + } + function x(a, b) { + var c = this; + (this.manager = a), + (this.callback = b), + (this.element = a.element), + (this.target = a.options.inputTarget), + (this.domHandler = function (b) { + k(a.options.enable, [a]) && c.handler(b); + }), + this.init(); + } + function y(a) { + var b, + c = a.options.inputClass; + return new (b = c ? c : xa ? M : ya ? P : wa ? R : L)(a, z); + } + function z(a, b, c) { + var d = c.pointers.length, + e = c.changedPointers.length, + f = b & Ea && d - e === 0, + g = b & (Ga | Ha) && d - e === 0; + (c.isFirst = !!f), + (c.isFinal = !!g), + f && (a.session = {}), + (c.eventType = b), + A(a, c), + a.emit("hammer.input", c), + a.recognize(c), + (a.session.prevInput = c); + } + function A(a, b) { + var c = a.session, + d = b.pointers, + e = d.length; + c.firstInput || (c.firstInput = D(b)), + e > 1 && !c.firstMultiple + ? (c.firstMultiple = D(b)) + : 1 === e && (c.firstMultiple = !1); + var f = c.firstInput, + g = c.firstMultiple, + h = g ? g.center : f.center, + i = (b.center = E(d)); + (b.timeStamp = ra()), + (b.deltaTime = b.timeStamp - f.timeStamp), + (b.angle = I(h, i)), + (b.distance = H(h, i)), + B(c, b), + (b.offsetDirection = G(b.deltaX, b.deltaY)); + var j = F(b.deltaTime, b.deltaX, b.deltaY); + (b.overallVelocityX = j.x), + (b.overallVelocityY = j.y), + (b.overallVelocity = qa(j.x) > qa(j.y) ? j.x : j.y), + (b.scale = g ? K(g.pointers, d) : 1), + (b.rotation = g ? J(g.pointers, d) : 0), + (b.maxPointers = c.prevInput + ? b.pointers.length > c.prevInput.maxPointers + ? b.pointers.length + : c.prevInput.maxPointers + : b.pointers.length), + C(c, b); + var k = a.element; + o(b.srcEvent.target, k) && (k = b.srcEvent.target), (b.target = k); + } + function B(a, b) { + var c = b.center, + d = a.offsetDelta || {}, + e = a.prevDelta || {}, + f = a.prevInput || {}; + (b.eventType !== Ea && f.eventType !== Ga) || + ((e = a.prevDelta = { x: f.deltaX || 0, y: f.deltaY || 0 }), + (d = a.offsetDelta = { x: c.x, y: c.y })), + (b.deltaX = e.x + (c.x - d.x)), + (b.deltaY = e.y + (c.y - d.y)); + } + function C(a, b) { + var c, + e, + f, + g, + h = a.lastInterval || b, + i = b.timeStamp - h.timeStamp; + if (b.eventType != Ha && (i > Da || h.velocity === d)) { + var j = b.deltaX - h.deltaX, + k = b.deltaY - h.deltaY, + l = F(i, j, k); + (e = l.x), + (f = l.y), + (c = qa(l.x) > qa(l.y) ? l.x : l.y), + (g = G(j, k)), + (a.lastInterval = b); + } else + (c = h.velocity), (e = h.velocityX), (f = h.velocityY), (g = h.direction); + (b.velocity = c), (b.velocityX = e), (b.velocityY = f), (b.direction = g); + } + function D(a) { + for (var b = [], c = 0; c < a.pointers.length; ) + (b[c] = { + clientX: pa(a.pointers[c].clientX), + clientY: pa(a.pointers[c].clientY), + }), + c++; + return { + timeStamp: ra(), + pointers: b, + center: E(b), + deltaX: a.deltaX, + deltaY: a.deltaY, + }; + } + function E(a) { + var b = a.length; + if (1 === b) return { x: pa(a[0].clientX), y: pa(a[0].clientY) }; + for (var c = 0, d = 0, e = 0; b > e; ) + (c += a[e].clientX), (d += a[e].clientY), e++; + return { x: pa(c / b), y: pa(d / b) }; + } + function F(a, b, c) { + return { x: b / a || 0, y: c / a || 0 }; + } + function G(a, b) { + return a === b ? Ia : qa(a) >= qa(b) ? (0 > a ? Ja : Ka) : 0 > b ? La : Ma; + } + function H(a, b, c) { + c || (c = Qa); + var d = b[c[0]] - a[c[0]], + e = b[c[1]] - a[c[1]]; + return Math.sqrt(d * d + e * e); + } + function I(a, b, c) { + c || (c = Qa); + var d = b[c[0]] - a[c[0]], + e = b[c[1]] - a[c[1]]; + return (180 * Math.atan2(e, d)) / Math.PI; + } + function J(a, b) { + return I(b[1], b[0], Ra) + I(a[1], a[0], Ra); + } + function K(a, b) { + return H(b[0], b[1], Ra) / H(a[0], a[1], Ra); + } + function L() { + (this.evEl = Ta), + (this.evWin = Ua), + (this.pressed = !1), + x.apply(this, arguments); + } + function M() { + (this.evEl = Xa), + (this.evWin = Ya), + x.apply(this, arguments), + (this.store = this.manager.session.pointerEvents = []); + } + function N() { + (this.evTarget = $a), + (this.evWin = _a), + (this.started = !1), + x.apply(this, arguments); + } + function O(a, b) { + var c = s(a.touches), + d = s(a.changedTouches); + return b & (Ga | Ha) && (c = t(c.concat(d), "identifier", !0)), [c, d]; + } + function P() { + (this.evTarget = bb), (this.targetIds = {}), x.apply(this, arguments); + } + function Q(a, b) { + var c = s(a.touches), + d = this.targetIds; + if (b & (Ea | Fa) && 1 === c.length) + return (d[c[0].identifier] = !0), [c, c]; + var e, + f, + g = s(a.changedTouches), + h = [], + i = this.target; + if ( + ((f = c.filter(function (a) { + return o(a.target, i); + })), + b === Ea) + ) + for (e = 0; e < f.length; ) (d[f[e].identifier] = !0), e++; + for (e = 0; e < g.length; ) + d[g[e].identifier] && h.push(g[e]), + b & (Ga | Ha) && delete d[g[e].identifier], + e++; + return h.length ? [t(f.concat(h), "identifier", !0), h] : void 0; + } + function R() { + x.apply(this, arguments); + var a = j(this.handler, this); + (this.touch = new P(this.manager, a)), + (this.mouse = new L(this.manager, a)), + (this.primaryTouch = null), + (this.lastTouches = []); + } + function S(a, b) { + a & Ea + ? ((this.primaryTouch = b.changedPointers[0].identifier), T.call(this, b)) + : a & (Ga | Ha) && T.call(this, b); + } + function T(a) { + var b = a.changedPointers[0]; + if (b.identifier === this.primaryTouch) { + var c = { x: b.clientX, y: b.clientY }; + this.lastTouches.push(c); + var d = this.lastTouches, + e = function () { + var a = d.indexOf(c); + a > -1 && d.splice(a, 1); + }; + setTimeout(e, cb); + } + } + function U(a) { + for ( + var b = a.srcEvent.clientX, c = a.srcEvent.clientY, d = 0; + d < this.lastTouches.length; + d++ + ) { + var e = this.lastTouches[d], + f = Math.abs(b - e.x), + g = Math.abs(c - e.y); + if (db >= f && db >= g) return !0; + } + return !1; + } + function V(a, b) { + (this.manager = a), this.set(b); + } + function W(a) { + if (p(a, jb)) return jb; + var b = p(a, kb), + c = p(a, lb); + return b && c ? jb : b || c ? (b ? kb : lb) : p(a, ib) ? ib : hb; + } + function X() { + if (!fb) return !1; + var b = {}, + c = a.CSS && a.CSS.supports; + return ( + ["auto", "manipulation", "pan-y", "pan-x", "pan-x pan-y", "none"].forEach( + function (d) { + b[d] = c ? a.CSS.supports("touch-action", d) : !0; + } + ), + b + ); + } + function Y(a) { + (this.options = la({}, this.defaults, a || {})), + (this.id = v()), + (this.manager = null), + (this.options.enable = l(this.options.enable, !0)), + (this.state = nb), + (this.simultaneous = {}), + (this.requireFail = []); + } + function Z(a) { + return a & sb + ? "cancel" + : a & qb + ? "end" + : a & pb + ? "move" + : a & ob + ? "start" + : ""; + } + function $(a) { + return a == Ma + ? "down" + : a == La + ? "up" + : a == Ja + ? "left" + : a == Ka + ? "right" + : ""; + } + function _(a, b) { + var c = b.manager; + return c ? c.get(a) : a; + } + function aa() { + Y.apply(this, arguments); + } + function ba() { + aa.apply(this, arguments), (this.pX = null), (this.pY = null); + } + function ca() { + aa.apply(this, arguments); + } + function da() { + Y.apply(this, arguments), (this._timer = null), (this._input = null); + } + function ea() { + aa.apply(this, arguments); + } + function fa() { + aa.apply(this, arguments); + } + function ga() { + Y.apply(this, arguments), + (this.pTime = !1), + (this.pCenter = !1), + (this._timer = null), + (this._input = null), + (this.count = 0); + } + function ha(a, b) { + return ( + (b = b || {}), + (b.recognizers = l(b.recognizers, ha.defaults.preset)), + new ia(a, b) + ); + } + function ia(a, b) { + (this.options = la({}, ha.defaults, b || {})), + (this.options.inputTarget = this.options.inputTarget || a), + (this.handlers = {}), + (this.session = {}), + (this.recognizers = []), + (this.oldCssProps = {}), + (this.element = a), + (this.input = y(this)), + (this.touchAction = new V(this, this.options.touchAction)), + ja(this, !0), + g( + this.options.recognizers, + function (a) { + var b = this.add(new a[0](a[1])); + a[2] && b.recognizeWith(a[2]), a[3] && b.requireFailure(a[3]); + }, + this + ); + } + function ja(a, b) { + var c = a.element; + if (c.style) { + var d; + g(a.options.cssProps, function (e, f) { + (d = u(c.style, f)), + b + ? ((a.oldCssProps[d] = c.style[d]), (c.style[d] = e)) + : (c.style[d] = a.oldCssProps[d] || ""); + }), + b || (a.oldCssProps = {}); + } + } + function ka(a, c) { + var d = b.createEvent("Event"); + d.initEvent(a, !0, !0), (d.gesture = c), c.target.dispatchEvent(d); + } + var la, + ma = ["", "webkit", "Moz", "MS", "ms", "o"], + na = b.createElement("div"), + oa = "function", + pa = Math.round, + qa = Math.abs, + ra = Date.now; + la = + "function" != typeof Object.assign + ? function (a) { + if (a === d || null === a) + throw new TypeError("Cannot convert undefined or null to object"); + for (var b = Object(a), c = 1; c < arguments.length; c++) { + var e = arguments[c]; + if (e !== d && null !== e) + for (var f in e) e.hasOwnProperty(f) && (b[f] = e[f]); + } + return b; + } + : Object.assign; + var sa = h( + function (a, b, c) { + for (var e = Object.keys(b), f = 0; f < e.length; ) + (!c || (c && a[e[f]] === d)) && (a[e[f]] = b[e[f]]), f++; + return a; + }, + "extend", + "Use `assign`." + ), + ta = h( + function (a, b) { + return sa(a, b, !0); + }, + "merge", + "Use `assign`." + ), + ua = 1, + va = /mobile|tablet|ip(ad|hone|od)|android/i, + wa = "ontouchstart" in a, + xa = u(a, "PointerEvent") !== d, + ya = wa && va.test(navigator.userAgent), + za = "touch", + Aa = "pen", + Ba = "mouse", + Ca = "kinect", + Da = 25, + Ea = 1, + Fa = 2, + Ga = 4, + Ha = 8, + Ia = 1, + Ja = 2, + Ka = 4, + La = 8, + Ma = 16, + Na = Ja | Ka, + Oa = La | Ma, + Pa = Na | Oa, + Qa = ["x", "y"], + Ra = ["clientX", "clientY"]; + x.prototype = { + handler: function () {}, + init: function () { + this.evEl && m(this.element, this.evEl, this.domHandler), + this.evTarget && m(this.target, this.evTarget, this.domHandler), + this.evWin && m(w(this.element), this.evWin, this.domHandler); + }, + destroy: function () { + this.evEl && n(this.element, this.evEl, this.domHandler), + this.evTarget && n(this.target, this.evTarget, this.domHandler), + this.evWin && n(w(this.element), this.evWin, this.domHandler); + }, + }; + var Sa = { mousedown: Ea, mousemove: Fa, mouseup: Ga }, + Ta = "mousedown", + Ua = "mousemove mouseup"; + i(L, x, { + handler: function (a) { + var b = Sa[a.type]; + b & Ea && 0 === a.button && (this.pressed = !0), + b & Fa && 1 !== a.which && (b = Ga), + this.pressed && + (b & Ga && (this.pressed = !1), + this.callback(this.manager, b, { + pointers: [a], + changedPointers: [a], + pointerType: Ba, + srcEvent: a, + })); + }, + }); + var Va = { + pointerdown: Ea, + pointermove: Fa, + pointerup: Ga, + pointercancel: Ha, + pointerout: Ha, + }, + Wa = { 2: za, 3: Aa, 4: Ba, 5: Ca }, + Xa = "pointerdown", + Ya = "pointermove pointerup pointercancel"; + a.MSPointerEvent && + !a.PointerEvent && + ((Xa = "MSPointerDown"), + (Ya = "MSPointerMove MSPointerUp MSPointerCancel")), + i(M, x, { + handler: function (a) { + var b = this.store, + c = !1, + d = a.type.toLowerCase().replace("ms", ""), + e = Va[d], + f = Wa[a.pointerType] || a.pointerType, + g = f == za, + h = r(b, a.pointerId, "pointerId"); + e & Ea && (0 === a.button || g) + ? 0 > h && (b.push(a), (h = b.length - 1)) + : e & (Ga | Ha) && (c = !0), + 0 > h || + ((b[h] = a), + this.callback(this.manager, e, { + pointers: b, + changedPointers: [a], + pointerType: f, + srcEvent: a, + }), + c && b.splice(h, 1)); + }, + }); + var Za = { touchstart: Ea, touchmove: Fa, touchend: Ga, touchcancel: Ha }, + $a = "touchstart", + _a = "touchstart touchmove touchend touchcancel"; + i(N, x, { + handler: function (a) { + var b = Za[a.type]; + if ((b === Ea && (this.started = !0), this.started)) { + var c = O.call(this, a, b); + b & (Ga | Ha) && c[0].length - c[1].length === 0 && (this.started = !1), + this.callback(this.manager, b, { + pointers: c[0], + changedPointers: c[1], + pointerType: za, + srcEvent: a, + }); + } + }, + }); + var ab = { touchstart: Ea, touchmove: Fa, touchend: Ga, touchcancel: Ha }, + bb = "touchstart touchmove touchend touchcancel"; + i(P, x, { + handler: function (a) { + var b = ab[a.type], + c = Q.call(this, a, b); + c && + this.callback(this.manager, b, { + pointers: c[0], + changedPointers: c[1], + pointerType: za, + srcEvent: a, + }); + }, + }); + var cb = 2500, + db = 25; + i(R, x, { + handler: function (a, b, c) { + var d = c.pointerType == za, + e = c.pointerType == Ba; + if ( + !(e && c.sourceCapabilities && c.sourceCapabilities.firesTouchEvents) + ) { + if (d) S.call(this, b, c); + else if (e && U.call(this, c)) return; + this.callback(a, b, c); + } + }, + destroy: function () { + this.touch.destroy(), this.mouse.destroy(); + }, + }); + var eb = u(na.style, "touchAction"), + fb = eb !== d, + gb = "compute", + hb = "auto", + ib = "manipulation", + jb = "none", + kb = "pan-x", + lb = "pan-y", + mb = X(); + V.prototype = { + set: function (a) { + a == gb && (a = this.compute()), + fb && + this.manager.element.style && + mb[a] && + (this.manager.element.style[eb] = a), + (this.actions = a.toLowerCase().trim()); + }, + update: function () { + this.set(this.manager.options.touchAction); + }, + compute: function () { + var a = []; + return ( + g(this.manager.recognizers, function (b) { + k(b.options.enable, [b]) && (a = a.concat(b.getTouchAction())); + }), + W(a.join(" ")) + ); + }, + preventDefaults: function (a) { + var b = a.srcEvent, + c = a.offsetDirection; + if (this.manager.session.prevented) return void b.preventDefault(); + var d = this.actions, + e = p(d, jb) && !mb[jb], + f = p(d, lb) && !mb[lb], + g = p(d, kb) && !mb[kb]; + if (e) { + var h = 1 === a.pointers.length, + i = a.distance < 2, + j = a.deltaTime < 250; + if (h && i && j) return; + } + return g && f + ? void 0 + : e || (f && c & Na) || (g && c & Oa) + ? this.preventSrc(b) + : void 0; + }, + preventSrc: function (a) { + (this.manager.session.prevented = !0), a.preventDefault(); + }, + }; + var nb = 1, + ob = 2, + pb = 4, + qb = 8, + rb = qb, + sb = 16, + tb = 32; + (Y.prototype = { + defaults: {}, + set: function (a) { + return ( + la(this.options, a), + this.manager && this.manager.touchAction.update(), + this + ); + }, + recognizeWith: function (a) { + if (f(a, "recognizeWith", this)) return this; + var b = this.simultaneous; + return ( + (a = _(a, this)), + b[a.id] || ((b[a.id] = a), a.recognizeWith(this)), + this + ); + }, + dropRecognizeWith: function (a) { + return f(a, "dropRecognizeWith", this) + ? this + : ((a = _(a, this)), delete this.simultaneous[a.id], this); + }, + requireFailure: function (a) { + if (f(a, "requireFailure", this)) return this; + var b = this.requireFail; + return ( + (a = _(a, this)), + -1 === r(b, a) && (b.push(a), a.requireFailure(this)), + this + ); + }, + dropRequireFailure: function (a) { + if (f(a, "dropRequireFailure", this)) return this; + a = _(a, this); + var b = r(this.requireFail, a); + return b > -1 && this.requireFail.splice(b, 1), this; + }, + hasRequireFailures: function () { + return this.requireFail.length > 0; + }, + canRecognizeWith: function (a) { + return !!this.simultaneous[a.id]; + }, + emit: function (a) { + function b(b) { + c.manager.emit(b, a); + } + var c = this, + d = this.state; + qb > d && b(c.options.event + Z(d)), + b(c.options.event), + a.additionalEvent && b(a.additionalEvent), + d >= qb && b(c.options.event + Z(d)); + }, + tryEmit: function (a) { + return this.canEmit() ? this.emit(a) : void (this.state = tb); + }, + canEmit: function () { + for (var a = 0; a < this.requireFail.length; ) { + if (!(this.requireFail[a].state & (tb | nb))) return !1; + a++; + } + return !0; + }, + recognize: function (a) { + var b = la({}, a); + return k(this.options.enable, [this, b]) + ? (this.state & (rb | sb | tb) && (this.state = nb), + (this.state = this.process(b)), + void (this.state & (ob | pb | qb | sb) && this.tryEmit(b))) + : (this.reset(), void (this.state = tb)); + }, + process: function (a) {}, + getTouchAction: function () {}, + reset: function () {}, + }), + i(aa, Y, { + defaults: { pointers: 1 }, + attrTest: function (a) { + var b = this.options.pointers; + return 0 === b || a.pointers.length === b; + }, + process: function (a) { + var b = this.state, + c = a.eventType, + d = b & (ob | pb), + e = this.attrTest(a); + return d && (c & Ha || !e) + ? b | sb + : d || e + ? c & Ga + ? b | qb + : b & ob + ? b | pb + : ob + : tb; + }, + }), + i(ba, aa, { + defaults: { event: "pan", threshold: 10, pointers: 1, direction: Pa }, + getTouchAction: function () { + var a = this.options.direction, + b = []; + return a & Na && b.push(lb), a & Oa && b.push(kb), b; + }, + directionTest: function (a) { + var b = this.options, + c = !0, + d = a.distance, + e = a.direction, + f = a.deltaX, + g = a.deltaY; + return ( + e & b.direction || + (b.direction & Na + ? ((e = 0 === f ? Ia : 0 > f ? Ja : Ka), + (c = f != this.pX), + (d = Math.abs(a.deltaX))) + : ((e = 0 === g ? Ia : 0 > g ? La : Ma), + (c = g != this.pY), + (d = Math.abs(a.deltaY)))), + (a.direction = e), + c && d > b.threshold && e & b.direction + ); + }, + attrTest: function (a) { + return ( + aa.prototype.attrTest.call(this, a) && + (this.state & ob || (!(this.state & ob) && this.directionTest(a))) + ); + }, + emit: function (a) { + (this.pX = a.deltaX), (this.pY = a.deltaY); + var b = $(a.direction); + b && (a.additionalEvent = this.options.event + b), + this._super.emit.call(this, a); + }, + }), + i(ca, aa, { + defaults: { event: "pinch", threshold: 0, pointers: 2 }, + getTouchAction: function () { + return [jb]; + }, + attrTest: function (a) { + return ( + this._super.attrTest.call(this, a) && + (Math.abs(a.scale - 1) > this.options.threshold || this.state & ob) + ); + }, + emit: function (a) { + if (1 !== a.scale) { + var b = a.scale < 1 ? "in" : "out"; + a.additionalEvent = this.options.event + b; + } + this._super.emit.call(this, a); + }, + }), + i(da, Y, { + defaults: { event: "press", pointers: 1, time: 251, threshold: 9 }, + getTouchAction: function () { + return [hb]; + }, + process: function (a) { + var b = this.options, + c = a.pointers.length === b.pointers, + d = a.distance < b.threshold, + f = a.deltaTime > b.time; + if (((this._input = a), !d || !c || (a.eventType & (Ga | Ha) && !f))) + this.reset(); + else if (a.eventType & Ea) + this.reset(), + (this._timer = e( + function () { + (this.state = rb), this.tryEmit(); + }, + b.time, + this + )); + else if (a.eventType & Ga) return rb; + return tb; + }, + reset: function () { + clearTimeout(this._timer); + }, + emit: function (a) { + this.state === rb && + (a && a.eventType & Ga + ? this.manager.emit(this.options.event + "up", a) + : ((this._input.timeStamp = ra()), + this.manager.emit(this.options.event, this._input))); + }, + }), + i(ea, aa, { + defaults: { event: "rotate", threshold: 0, pointers: 2 }, + getTouchAction: function () { + return [jb]; + }, + attrTest: function (a) { + return ( + this._super.attrTest.call(this, a) && + (Math.abs(a.rotation) > this.options.threshold || this.state & ob) + ); + }, + }), + i(fa, aa, { + defaults: { + event: "swipe", + threshold: 10, + velocity: 0.3, + direction: Na | Oa, + pointers: 1, + }, + getTouchAction: function () { + return ba.prototype.getTouchAction.call(this); + }, + attrTest: function (a) { + var b, + c = this.options.direction; + return ( + c & (Na | Oa) + ? (b = a.overallVelocity) + : c & Na + ? (b = a.overallVelocityX) + : c & Oa && (b = a.overallVelocityY), + this._super.attrTest.call(this, a) && + c & a.offsetDirection && + a.distance > this.options.threshold && + a.maxPointers == this.options.pointers && + qa(b) > this.options.velocity && + a.eventType & Ga + ); + }, + emit: function (a) { + var b = $(a.offsetDirection); + b && this.manager.emit(this.options.event + b, a), + this.manager.emit(this.options.event, a); + }, + }), + i(ga, Y, { + defaults: { + event: "tap", + pointers: 1, + taps: 1, + interval: 300, + time: 250, + threshold: 9, + posThreshold: 10, + }, + getTouchAction: function () { + return [ib]; + }, + process: function (a) { + var b = this.options, + c = a.pointers.length === b.pointers, + d = a.distance < b.threshold, + f = a.deltaTime < b.time; + if ((this.reset(), a.eventType & Ea && 0 === this.count)) + return this.failTimeout(); + if (d && f && c) { + if (a.eventType != Ga) return this.failTimeout(); + var g = this.pTime ? a.timeStamp - this.pTime < b.interval : !0, + h = !this.pCenter || H(this.pCenter, a.center) < b.posThreshold; + (this.pTime = a.timeStamp), + (this.pCenter = a.center), + h && g ? (this.count += 1) : (this.count = 1), + (this._input = a); + var i = this.count % b.taps; + if (0 === i) + return this.hasRequireFailures() + ? ((this._timer = e( + function () { + (this.state = rb), this.tryEmit(); + }, + b.interval, + this + )), + ob) + : rb; + } + return tb; + }, + failTimeout: function () { + return ( + (this._timer = e( + function () { + this.state = tb; + }, + this.options.interval, + this + )), + tb + ); + }, + reset: function () { + clearTimeout(this._timer); + }, + emit: function () { + this.state == rb && + ((this._input.tapCount = this.count), + this.manager.emit(this.options.event, this._input)); + }, + }), + (ha.VERSION = "2.0.8"), + (ha.defaults = { + domEvents: !1, + touchAction: gb, + enable: !0, + inputTarget: null, + inputClass: null, + preset: [ + [ea, { enable: !1 }], + [ca, { enable: !1 }, ["rotate"]], + [fa, { direction: Na }], + [ba, { direction: Na }, ["swipe"]], + [ga], + [ga, { event: "doubletap", taps: 2 }, ["tap"]], + [da], + ], + cssProps: { + userSelect: "none", + touchSelect: "none", + touchCallout: "none", + contentZooming: "none", + userDrag: "none", + tapHighlightColor: "rgba(0,0,0,0)", + }, + }); + var ub = 1, + vb = 2; + (ia.prototype = { + set: function (a) { + return ( + la(this.options, a), + a.touchAction && this.touchAction.update(), + a.inputTarget && + (this.input.destroy(), + (this.input.target = a.inputTarget), + this.input.init()), + this + ); + }, + stop: function (a) { + this.session.stopped = a ? vb : ub; + }, + recognize: function (a) { + var b = this.session; + if (!b.stopped) { + this.touchAction.preventDefaults(a); + var c, + d = this.recognizers, + e = b.curRecognizer; + (!e || (e && e.state & rb)) && (e = b.curRecognizer = null); + for (var f = 0; f < d.length; ) + (c = d[f]), + b.stopped === vb || (e && c != e && !c.canRecognizeWith(e)) + ? c.reset() + : c.recognize(a), + !e && c.state & (ob | pb | qb) && (e = b.curRecognizer = c), + f++; + } + }, + get: function (a) { + if (a instanceof Y) return a; + for (var b = this.recognizers, c = 0; c < b.length; c++) + if (b[c].options.event == a) return b[c]; + return null; + }, + add: function (a) { + if (f(a, "add", this)) return this; + var b = this.get(a.options.event); + return ( + b && this.remove(b), + this.recognizers.push(a), + (a.manager = this), + this.touchAction.update(), + a + ); + }, + remove: function (a) { + if (f(a, "remove", this)) return this; + if ((a = this.get(a))) { + var b = this.recognizers, + c = r(b, a); + -1 !== c && (b.splice(c, 1), this.touchAction.update()); + } + return this; + }, + on: function (a, b) { + if (a !== d && b !== d) { + var c = this.handlers; + return ( + g(q(a), function (a) { + (c[a] = c[a] || []), c[a].push(b); + }), + this + ); + } + }, + off: function (a, b) { + if (a !== d) { + var c = this.handlers; + return ( + g(q(a), function (a) { + b ? c[a] && c[a].splice(r(c[a], b), 1) : delete c[a]; + }), + this + ); + } + }, + emit: function (a, b) { + this.options.domEvents && ka(a, b); + var c = this.handlers[a] && this.handlers[a].slice(); + if (c && c.length) { + (b.type = a), + (b.preventDefault = function () { + b.srcEvent.preventDefault(); + }); + for (var d = 0; d < c.length; ) c[d](b), d++; + } + }, + destroy: function () { + this.element && ja(this, !1), + (this.handlers = {}), + (this.session = {}), + this.input.destroy(), + (this.element = null); + }, + }), + la(ha, { + INPUT_START: Ea, + INPUT_MOVE: Fa, + INPUT_END: Ga, + INPUT_CANCEL: Ha, + STATE_POSSIBLE: nb, + STATE_BEGAN: ob, + STATE_CHANGED: pb, + STATE_ENDED: qb, + STATE_RECOGNIZED: rb, + STATE_CANCELLED: sb, + STATE_FAILED: tb, + DIRECTION_NONE: Ia, + DIRECTION_LEFT: Ja, + DIRECTION_RIGHT: Ka, + DIRECTION_UP: La, + DIRECTION_DOWN: Ma, + DIRECTION_HORIZONTAL: Na, + DIRECTION_VERTICAL: Oa, + DIRECTION_ALL: Pa, + Manager: ia, + Input: x, + TouchAction: V, + TouchInput: P, + MouseInput: L, + PointerEventInput: M, + TouchMouseInput: R, + SingleTouchInput: N, + Recognizer: Y, + AttrRecognizer: aa, + Tap: ga, + Pan: ba, + Swipe: fa, + Pinch: ca, + Rotate: ea, + Press: da, + on: m, + off: n, + each: g, + merge: ta, + extend: sa, + assign: la, + inherit: i, + bindFn: j, + prefixed: u, + }); + var wb = "undefined" != typeof a ? a : "undefined" != typeof self ? self : {}; + (wb.Hammer = ha), + "function" == typeof define && define.amd + ? define(function () { + return ha; + }) + : "undefined" != typeof module && module.exports + ? (module.exports = ha) + : (a[c] = ha); +})(window, document, "Hammer"); +//# sourceMappingURL=hammer.min.js.map diff --git a/index.html b/index.html index 38984be..544db6b 100644 --- a/index.html +++ b/index.html @@ -11,6 +11,7 @@ gtag('config', 'G-2JKY37CY96'); SANDTRIS + @@ -23,6 +24,7 @@
+

SANDTRIS

@@ -131,7 +133,7 @@
-
+
LOADING
diff --git a/sketch.js b/sketch.js index 27732ce..0b7a601 100644 --- a/sketch.js +++ b/sketch.js @@ -1,81 +1,67 @@ -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(); +(function (_0x5d8b23, _0x4cd1f8) { + var _0x366950 = _0x13db, + _0x3d6426 = _0x5d8b23(); 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"]()); + 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"]()); } } -})(_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) { +})(_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: - (_0x2d8d15 = _0x4f4745), (_0x3e4190 = _0x3c6e79), (_0x3e5ade = _0x5c7a21); + (_0x217921 = _0x518fac), (_0x5406db = _0x48f7ae), (_0x78ebcc = _0x6c5f29); break; case 0x1: - (_0x2d8d15 = _0x274e76), (_0x3e4190 = _0x4f4745), (_0x3e5ade = _0x5c7a21); + (_0x217921 = _0x4cdc06), (_0x5406db = _0x518fac), (_0x78ebcc = _0x6c5f29); break; case 0x2: - (_0x2d8d15 = _0x5c7a21), (_0x3e4190 = _0x4f4745), (_0x3e5ade = _0x3c6e79); + (_0x217921 = _0x6c5f29), (_0x5406db = _0x518fac), (_0x78ebcc = _0x48f7ae); break; case 0x3: - (_0x2d8d15 = _0x5c7a21), (_0x3e4190 = _0x274e76), (_0x3e5ade = _0x4f4745); + (_0x217921 = _0x6c5f29), (_0x5406db = _0x4cdc06), (_0x78ebcc = _0x518fac); break; case 0x4: - (_0x2d8d15 = _0x3c6e79), (_0x3e4190 = _0x5c7a21), (_0x3e5ade = _0x4f4745); + (_0x217921 = _0x48f7ae), (_0x5406db = _0x6c5f29), (_0x78ebcc = _0x518fac); break; case 0x5: - (_0x2d8d15 = _0x4f4745), (_0x3e4190 = _0x5c7a21), (_0x3e5ade = _0x274e76); + (_0x217921 = _0x518fac), (_0x5406db = _0x6c5f29), (_0x78ebcc = _0x4cdc06); break; } return { - r: Math[_0x51d0b3(0x21a)](_0x2d8d15 * 0xff), - g: Math[_0x51d0b3(0x21a)](_0x3e4190 * 0xff), - b: Math[_0x51d0b3(0x21a)](_0x3e5ade * 0xff), + r: Math[_0x35ebf2(0xf2)](_0x217921 * 0xff), + g: Math[_0x35ebf2(0xf2)](_0x5406db * 0xff), + b: Math["round"](_0x78ebcc * 0xff), }; } var grid = [], @@ -108,7 +94,7 @@ var grid = [], aboutScreen, gameoverScreen, gameoverText, - timeText = _0x180e5b(0x200), + timeText = "00:00", levelSlider, levelText, difficulty = 0x1, @@ -116,6 +102,7 @@ var grid = [], sfxSlider2, musSlider1, musSlider2, + filter, speed = 0.5, staticChance = 0x8, dupChance = 0.5, @@ -209,595 +196,632 @@ var grid = [], [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))); + var _0x2281ed = _0x13db; + soundFormats(_0x2281ed(0xf1), "ogg"), + (placeSound = loadSound("sounds/place")), + (lineSound = loadSound(_0x2281ed(0xdb))), + (gameMusic = loadSound(_0x2281ed(0x117))), + (pixelFont = loadFont(_0x2281ed(0xea))); } -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)); +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[_0x3d2206(0x1e3)] = function () { - var _0x5f5d59 = _0x3d2206; - this[_0x5f5d59(0x1ed)](), + (this["renderBlock"] = function () { + var _0x584b37 = _0x75bc08; + this[_0x584b37(0x116)](), AddBlock( - this[_0x5f5d59(0x217)], + this["grid"], 0x0, 0x1f, - blockType[this[_0x5f5d59(0x1fe)]][this[_0x5f5d59(0x1fb)]], - this[_0x5f5d59(0x20b)], - this["static"] + blockType[this[_0x584b37(0xf8)]][this["rot"]], + this[_0x584b37(0x104)], + this[_0x584b37(0x115)] ), - renderFromArray(this[_0x5f5d59(0x217)], this[_0x5f5d59(0x213)]); + renderFromArray(this[_0x584b37(0xe3)], this[_0x584b37(0x113)]); }), - (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)), + (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[_0x48c73f(0x210)] = !![]), (staticCount = 0x0)), - this[_0x48c73f(0x1e3)](); + ((this[_0x2d8260(0x115)] = !![]), (staticCount = 0x0)), + this[_0x2d8260(0xe4)](); }), - (this[_0x3d2206(0x204)] = function () { - var _0x30ee27 = _0x3d2206; + (this["show"] = function () { + var _0x48f91f = _0x75bc08; image( - this[_0x30ee27(0x213)], - this[_0x30ee27(0x20f)]["x"] * scl + gameOffset, - (this[_0x30ee27(0x20f)]["y"] - 0x20) * scl, + this[_0x48f91f(0x113)], + this[_0x48f91f(0x112)]["x"] * scl + gameOffset, + (this[_0x48f91f(0x112)]["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 = !![]; + (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 _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 + for (let _0x39573d = 0x0; _0x39573d < 0x4; _0x39573d++) { + let _0x42f04c = _0x39573d * 0x2, + _0x31cdf3 = + blockType[this[_0x4ff845(0xf8)]][this[_0x4ff845(0xf9)]][ + _0x42f04c ], - _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), + _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[_0x21381c(0x20f)]["y"] - - 0x8 * - (blockHeight[this[_0x21381c(0x1fe)]][this[_0x21381c(0x1fb)]] + - 0x1) < + this[_0x4ff845(0x112)]["y"] - + 0x8 * (blockHeight[this["type"]][this[_0x4ff845(0xf9)]] + 0x1) < 0x0 && ((gameOver = !![]), gameOverScore(), - (gameoverScreen[_0x21381c(0x203)] = !![])); + (gameoverScreen[_0x4ff845(0xe2)] = !![])); AddBlock( grid, - _0x1f63dd, - min(_0x46b4ad, rows - 0x1), - blockType[this[_0x21381c(0x1fe)]][this[_0x21381c(0x1fb)]], - this[_0x21381c(0x20b)], - this[_0x21381c(0x210)] + _0x55667d, + min(_0x52f57a, rows - 0x1), + blockType[this[_0x4ff845(0xf8)]][this[_0x4ff845(0xf9)]], + this[_0x4ff845(0x104)], + this[_0x4ff845(0x115)] ), - placeSound["play"](); + placeSound[_0x4ff845(0x102)](); return; } - this[_0x21381c(0x20f)]["y"] += this[_0x21381c(0x20e)]; + this[_0x4ff845(0x112)]["y"] += this["grav"]; }), - (this["rotate"] = function () { - var _0xd01b29 = _0x3d2206; - (this[_0xd01b29(0x1fb)] = (this[_0xd01b29(0x1fb)] + 0x1) % 0x4), - this[_0xd01b29(0x1ed)](), - (this[_0xd01b29(0x213)] = createImage(0x20, 0x20)), + (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[_0xd01b29(0x217)], + this["grid"], 0x0, 0x1f, - blockType[this[_0xd01b29(0x1fe)]][this[_0xd01b29(0x1fb)]], - this[_0xd01b29(0x20b)], - this[_0xd01b29(0x210)] + blockType[this[_0x1fc49e(0xf8)]][this[_0x1fc49e(0xf9)]], + this["col"], + this[_0x1fc49e(0x115)] ), - 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); + 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["controls"] = function () { - var _0x38d0ec = _0x3d2206; - keyIsDown(UP_ARROW) - ? this[_0x38d0ec(0x1f0)] && - (this[_0x38d0ec(0x1ef)](), (this[_0x38d0ec(0x1f0)] = ![])) + (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) && - ((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(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) && - ((this[_0x38d0ec(0x20f)]["y"] += 0x1), (score += 0x1)); + (keyIsDown(DOWN_ARROW) || _0x47c461 == 0x10) && + ((this[_0x583b8c(0x112)]["y"] += 0x1), (score += 0x1)); }); } function resetGame() { - var _0x131fad = _0x180e5b; + var _0x562ee7 = _0x13db; (score = 0x0), (linesCleared = 0x0), (staticCount = 0x0), (t = 0x0), + filter[_0x562ee7(0xe7)](0x2710), + (placed = ![]), (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); + 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[_0x131fad(0x212)](), + playerBlock[_0x562ee7(0xd9)](), (nextBlock = new Block(width / 0x2 - gameOffset, 0x0)), - nextBlock[_0x131fad(0x212)](); + nextBlock[_0x562ee7(0xd9)](); } function startGame() { - var _0x59c5b4 = _0x180e5b; + var _0x55364a = _0x13db; resetGame(), (paused = ![]), (gameOver = ![]), - (startScreen[_0x59c5b4(0x203)] = ![]); + (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 _0x4b19ae = _0x180e5b; - (paused = ![]), (pauseScreen[_0x4b19ae(0x203)] = ![]); + var _0x4f5238 = _0x13db; + filter["freq"](0x2710), (paused = ![]), (pauseScreen[_0x4f5238(0xe2)] = ![]); } function newGame() { - var _0x2f34a1 = _0x180e5b; - (pauseScreen[_0x2f34a1(0x203)] = ![]), - (gameoverScreen[_0x2f34a1(0x203)] = ![]), - (startScreen[_0x2f34a1(0x203)] = !![]); + var _0x343587 = _0x13db; + (pauseScreen[_0x343587(0xe2)] = ![]), + (gameoverScreen[_0x343587(0xe2)] = ![]), + (startScreen["open"] = !![]), + gameMusic[_0x343587(0x110)](); } -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 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(_0x4e4249) { - var _0x64e82e = _0x180e5b; - let _0x4f9ed5 = _0x4e4249 / 0xa; - gameMusic["setVolume"](_0x4f9ed5 / 0x2), - (musSlider1[_0x64e82e(0x211)] = _0x4e4249), - (musSlider2[_0x64e82e(0x211)] = _0x4e4249); +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 _0x298402 = _0x180e5b; - (aboutScreen[_0x298402(0x203)] = !aboutScreen[_0x298402(0x203)]), - (startScreen["open"] = !startScreen["open"]); + var _0x67b1e1 = _0x13db; + (aboutScreen[_0x67b1e1(0xe2)] = !aboutScreen[_0x67b1e1(0xe2)]), + (startScreen["open"] = !startScreen[_0x67b1e1(0xe2)]); } function adjustDifficulty() { - var _0x2e781f = _0x180e5b; - (difficulty = levelSlider[_0x2e781f(0x211)]), + var _0x5e36c7 = _0x13db; + (difficulty = levelSlider["value"]), (speed = 0.5 + map(difficulty, 0x1, 0xa, 0x0, 0x3) / 0x2), - (staticChance = Math[_0x2e781f(0x1ff)]( + (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", + "
LINES:
", + "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 _0x274d76 = _0x180e5b; - (gameoverText[_0x274d76(0x214)] = ""), - (gameoverText[_0x274d76(0x214)] += _0x274d76(0x220) + score), - (gameoverText[_0x274d76(0x214)] += "
LINES:
" + linesCleared); + var _0x585f05 = _0x13db; + (gameoverText["innerHTML"] = ""), + (gameoverText[_0x585f05(0xe1)] += "SCORE:
" + score), + (gameoverText[_0x585f05(0xe1)] += _0x585f05(0x107) + 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)]) + + 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"), - (_0x5293dd += - "LINES:\x20" + - _0x106c96 + - "\x20"[_0x5e0e2c(0x216)](0x6 - _0x106c96[_0x5e0e2c(0x20a)]) + + (_0x1dc362 += + _0xca8d32(0x101) + + _0x5ab3f7 + + "\x20"[_0xca8d32(0x109)](0x6 - _0x5ab3f7[_0xca8d32(0x103)]) + "\x0a"), - (_0x5293dd += + (_0x1dc362 += "SCORE:\x20" + - _0x435526 + - "\x20"["repeat"](0x9 - _0x435526[_0x5e0e2c(0x20a)]) + + _0x5bc2d4 + + "\x20"[_0xca8d32(0x109)](0x9 - _0x5bc2d4[_0xca8d32(0x103)]) + "|\x20"), - (_0x5293dd += - _0x5e0e2c(0x1e4) + + (_0x1dc362 += + "TIME:\x20" + timeText + - "\x20"["repeat"](0x7 - timeText[_0x5e0e2c(0x20a)]) + + "\x20"[_0xca8d32(0x109)](0x7 - timeText[_0xca8d32(0x103)]) + "\x0a"), - (_0x5293dd += _0x5e0e2c(0x1f7)), - (_0x5293dd += navigator[_0x5e0e2c(0x221)]["writeText"](_0x5293dd)), - alert(_0x5e0e2c(0x21b)); + (_0x1dc362 += _0xca8d32(0xf0)), + (_0x1dc362 += navigator[_0xca8d32(0x122)][_0xca8d32(0x118)](_0x1dc362)), + alert(_0xca8d32(0xeb)); } 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))), + 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[_0x4f3495(0x1fa)]("cnv"), + cnv[_0x5615b6(0xdc)](_0x5615b6(0x11b)), textFont(pixelFont), frameRate(0x3c), noSmooth(), - gameMusic["play"](), - gameMusic["setVolume"](0.5), - gameMusic[_0x4f3495(0x1f2)](), + (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( - _0x410279, - _0x37de43, - _0x41ab8e, - _0x10f22a, - _0x17e6db, - _0x231eff + _0x2c9628, + _0x5d17a0, + _0x192e66, + _0x1e9c5b, + _0x22bca8, + _0xae7a7c ) { - for (let _0x3515be = 0x0; _0x3515be < 0x4; _0x3515be++) { + for (let _0x4e1c27 = 0x0; _0x4e1c27 < 0x4; _0x4e1c27++) { AddSingleBrick( - _0x410279, - _0x37de43 + _0x10f22a[_0x3515be * 0x2] * 0x8, - _0x41ab8e - _0x10f22a[_0x3515be * 0x2 + 0x1] * 0x8, - _0x17e6db, - _0x231eff + _0x2c9628, + _0x5d17a0 + _0x1e9c5b[_0x4e1c27 * 0x2] * 0x8, + _0x192e66 - _0x1e9c5b[_0x4e1c27 * 0x2 + 0x1] * 0x8, + _0x22bca8, + _0xae7a7c ); } } -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, +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(_0x1fb990[_0x10c2e5][_0x24bba5], 0x0, 0x1, 0.2, 0.7) + map(_0x4e9fcc[_0x15c88f][_0x509922], 0x0, 0x1, 0.2, 0.7) ); - _0x3d90a5[_0x5f352a - _0x10c2e5][_0x5e5818 + _0x24bba5] = [ - _0x599e88, - _0x16a855["r"], - _0x16a855["g"], - _0x16a855["b"], + _0x5382f7[_0x437299 - _0x15c88f][_0x6c56d4 + _0x509922] = [ + _0xe2b858, + _0x9b5146["r"], + _0x9b5146["g"], + _0x9b5146["b"], 0x0, - _0x215c5e, + _0x36f30b, ]; } } } -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); +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; } - (_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); + (_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); } } - _0x4d7281["updatePixels"](); + _0x1a1fa8["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); +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[_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 (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[_0x240a98 + 0x1][_0x21c3ad - 0x1] = grid[_0x240a98][_0x21c3ad]), - (grid[_0x240a98][_0x21c3ad] = null); + (grid[_0x3b1040 + 0x1][_0x208384 - 0x1] = grid[_0x3b1040][_0x208384]), + (grid[_0x3b1040][_0x208384] = null); return; } - (grid[_0x240a98 + 0x1][_0x21c3ad + 0x1] = grid[_0x240a98][_0x21c3ad]), - (grid[_0x240a98][_0x21c3ad] = null); + (grid[_0x3b1040 + 0x1][_0x208384 + 0x1] = grid[_0x3b1040][_0x208384]), + (grid[_0x3b1040][_0x208384] = null); return; } - if (_0x337a24) { - (grid[_0x240a98 + 0x1][_0x21c3ad - 0x1] = grid[_0x240a98][_0x21c3ad]), - (grid[_0x240a98][_0x21c3ad] = null); + if (_0x200d7e) { + (grid[_0x3b1040 + 0x1][_0x208384 - 0x1] = grid[_0x3b1040][_0x208384]), + (grid[_0x3b1040][_0x208384] = null); return; } - if (_0x2373a4) { - (grid[_0x240a98 + 0x1][_0x21c3ad + 0x1] = grid[_0x240a98][_0x21c3ad]), - (grid[_0x240a98][_0x21c3ad] = null); + if (_0x4a2b17) { + (grid[_0x3b1040 + 0x1][_0x208384 + 0x1] = grid[_0x3b1040][_0x208384]), + (grid[_0x3b1040][_0x208384] = 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); + 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 _0x55b1f1 = rows - 0x1; _0x55b1f1 >= 0x0; _0x55b1f1--) { - for (let _0x1d8216 = columns - 0x1; _0x1d8216 >= 0x0; _0x1d8216--) { - updateLogic(_0x1d8216, _0x55b1f1); + 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 _0x4fd079 = 0x0; _0x4fd079 < rows; _0x4fd079++) { + for (let _0x170c82 = 0x0; _0x170c82 < rows; _0x170c82++) { (vis = []), (fullLine = ![]); - if (grid[_0x4fd079][0x0] == null || grid[_0x4fd079][0x0][0x4] == 0x1) + if (grid[_0x170c82][0x0] == null || grid[_0x170c82][0x0][0x4] == 0x1) continue; - floodFill(0x0, _0x4fd079, grid[_0x4fd079][0x0][0x0]); + floodFill(0x0, _0x170c82, grid[_0x170c82][0x0][0x0]); if (!fullLine) continue; - console["log"]("LINE\x20AT\x20", _0x4fd079); + console[_0x9872c4(0xf6)]("LINE\x20AT\x20", _0x170c82); return; } } -function floodFill(_0x35168a, _0x5a6455, _0x116a0c) { - var _0x2f881d = _0x180e5b; +function floodFill(_0x53320, _0x15727c, _0x28621a) { + var _0x266d73 = _0x13db; if ( - _0x35168a < 0x0 || - _0x35168a >= columns || - _0x5a6455 < 0x0 || - _0x5a6455 >= rows || - grid[_0x5a6455][_0x35168a] == null || - grid[_0x5a6455][_0x35168a][0x4] == 0x1 || - grid[_0x5a6455][_0x35168a][0x0] != _0x116a0c + _0x53320 < 0x0 || + _0x53320 >= columns || + _0x15727c < 0x0 || + _0x15727c >= rows || + grid[_0x15727c][_0x53320] == null || + grid[_0x15727c][_0x53320][0x4] == 0x1 || + grid[_0x15727c][_0x53320][0x0] != _0x28621a ) 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); + _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(_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 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(_0x43ee26) { - var _0x48d888 = _0x180e5b; - for (let _0x594342 of vis) { - grid[_0x594342[0x1]][_0x594342[0x0]] = null; +function deleteLine(_0x57044a) { + var _0x333f68 = _0x13db; + for (let _0x499f43 of vis) { + grid[_0x499f43[0x1]][_0x499f43[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:
", - "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(); + (score += vis[_0x333f68(0x103)]), (vis = []); } function UI() { - var _0x286d3a = _0x180e5b; + 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[_0x286d3a(0x204)](); + !gameOver && !placed && playerBlock[_0x3bc98a(0x106)](); fill(0xa), rect(nextOffset, gameOffset * 0x2, gameOffset * 0xa, gameOffset * 0xa), image( - nextBlock[_0x286d3a(0x213)], + nextBlock["sprite"], nextOffset + - (0x5 - (blockWidth[nextBlock[_0x286d3a(0x1fe)]][0x0] + 0x1)) * + (0x5 - (blockWidth[nextBlock[_0x3bc98a(0xf8)]][0x0] + 0x1)) * gameOffset, - (0x5 - (0x6 - blockHeight[nextBlock["type"]][0x0]) + 0x1) * gameOffset, + (0x5 - (0x6 - blockHeight[nextBlock[_0x3bc98a(0xf8)]][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), + 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(_0x286d3a(0x21d), nextOffset - 0x2, gameOffset * 0x13), + text("LINES:", nextOffset - 0x2, gameOffset * 0x13), text(linesCleared, nextOffset - 0x2, gameOffset * 0x15), - text(_0x286d3a(0x20c), nextOffset - 0x2, gameOffset * 0x18), + text("SCORE:", nextOffset - 0x2, gameOffset * 0x18), text(score, nextOffset - 0x2, gameOffset * 0x1a), - text(_0x286d3a(0x1ee), nextOffset - 0x2, gameOffset * 0x1d), + text(_0x3bc98a(0xf7), nextOffset - 0x2, gameOffset * 0x1d), text(difficulty, nextOffset - 0x2, gameOffset * 0x1f), - (levelText[_0x286d3a(0x214)] = "LEVEL:\x20" + levelSlider["value"]); + (levelText["innerHTML"] = _0x3bc98a(0x10c) + levelSlider["value"]); } function keyPressed() { - var _0x48c0e5 = _0x180e5b; + var _0x314e97 = _0x13db; if (keyCode === 0x50) { if (gameOver) return; - (paused = !paused), - (pauseScreen[_0x48c0e5(0x203)] = !pauseScreen[_0x48c0e5(0x203)]); + paused ? filter[_0x314e97(0xe7)](0x2710) : filter[_0x314e97(0xe7)](0xc8), + (paused = !paused), + (pauseScreen["open"] = !pauseScreen[_0x314e97(0xe2)]); } } function GameLogic() { - var _0x1bc525 = _0x180e5b; + var _0x5eaedc = _0x13db; if (paused) return; - if (gameOver) return; + if (gameOver) { + gameMusic[_0x5eaedc(0x110)](); + return; + } if (fullLine) { - cleartime == 0x0 && ((linesCleared += 0x1), lineSound[_0x1bc525(0x1e5)]()); + cleartime == 0x0 && ((linesCleared += 0x1), lineSound["play"]()); (cleartime += 0x1), setLineColor(cleartime); cleartime > 0x1e && - (console[_0x1bc525(0x215)](_0x1bc525(0x1ec)), + (console["log"]("Deleting"), deleteLine(), (cleartime = 0x0), (fullLine = ![])); return; } placed && - ((playerBlock = nextBlock), + (!gameMusic[_0x5eaedc(0xee)]() && gameMusic[_0x5eaedc(0x10d)](), + (playerBlock = nextBlock), (nextBlock = new Block(width / 0x2, 0x0)), - nextBlock[_0x1bc525(0x212)](), - playerBlock[_0x1bc525(0x20b)] == nextBlock["col"] && + nextBlock[_0x5eaedc(0xd9)](), + playerBlock[_0x5eaedc(0x104)] == nextBlock[_0x5eaedc(0x104)] && random() < dupChance && - ((nextBlock[_0x1bc525(0x20b)] = - (nextBlock[_0x1bc525(0x20b)] + 0x1) % 0x4), - nextBlock[_0x1bc525(0x1e3)]()), + ((nextBlock["col"] = (nextBlock[_0x5eaedc(0x104)] + 0x1) % 0x4), + nextBlock[_0x5eaedc(0xe4)]()), (placed = ![])), updateGrid(), - playerBlock[_0x1bc525(0x1f6)](), - playerBlock["controls"](), + playerBlock[_0x5eaedc(0xdd)](), + playerBlock[_0x5eaedc(0x10f)](), checkLine(), (t += 0x1); }