xxxxxxxxxx
796
class xyObj {
constructor(startX, startY, fall) {
this.x = startX;
this.y = startY;
this.fall = fall
}
moveDown() {
if (arr[this.y + 1][this.x].stop == false && moving == true) {
this.y++
this.moveChecks();
}
}
moveRight() {
if (arr[this.y][this.x + 1].stop == false && moving == true) {
this.x++
this.moveChecks();
}
}
moveLeft() {
if (arr[this.y][this.x - 1].stop == false && moving == true) {
this.x--
this.moveChecks();
}
}
moveUp() {
if (arr[this.y - 1][this.x].stop == false && arr[this.y + 1][this.x].stop == true && moving == true) {
if (arr[this.y - 2][this.x].stop == true) {
this.y--;
this.moveChecks();
} else {
Grav = false;
this.y--;
this.moveChecks();
sleep(100).then(() => {
if (arr[this.y - 1][this.x].stop == false) {
this.y--;
}
Grav = true;
this.moveChecks();
})
}
}
}
fMoveUp() {
if (arr[this.y - 1][this.x].stop == false) {
this.y--;
this.moveChecks();
}
n = 0;
}
fMoveLeft() {
if (arr[this.y][this.x - 1].stop == false) {
this.x--
this.moveChecks();
}
n = 0;
}
fMoveRight() {
if (arr[this.y][this.x + 1].stop == false) {
this.x++
this.moveChecks();
}
n = 0;
}
fMoveDown() {
if (arr[this.y + 1][this.x].stop == false) {
this.y++
this.moveChecks();
}
}
moveChecks() {
if (arr[this.y][this.x].extra == "goal") {
if (winable == true) {
winable = false;
sleep(50).then(() => {
Win();
winable = true;
})
}
}
if (arr[this.y][this.x].extra == "gate") {
trickOff();
}
for (let i = 0; i < traps.length; i++) {
if (player.x == traps[i].x && (player.y == traps[i].y)) {
sleep(250).then(() => {
deaths++;
dcc++;
setup();
})
}
}
if (arr[this.y][this.x].direction == "left") {
moving = false;
sleep(100).then(() => {
player.fMoveLeft();
moving = true;
})
}
if (arr[this.y][this.x].direction == "right") {
moving = false;
sleep(100).then(() => {
player.fMoveRight();
moving = true;
})
}
if (arr[this.y][this.x].direction == "up") {
moving = false;
sleep(100).then(() => {
player.fMoveUp();
moving = true;
})
}
if (arr[this.y][this.x].direction == "down") {
moving = false;
sleep(100).then(() => {
player.fMoveDown();
moving = true;
})
}
if (arr[this.y][this.x].extra == "fGoal") {
sleep(100).then(()=>{
alert("PRANKED(fake goal)");
})
}
if (arr[this.y][this.x].extra == "mSwitch") {
mOFF();
}
}
}
let genFail = false
let winable = true;
let cheat = false;
let moving = true;
let bonusLevs = 5;
let level = 0;
let dcc = 0;
let time = 0;
let n = 0;
let player = new xyObj(0, 0);
let traps = [];
let deaths = 0;
let sGrav = 0
let tStart = true;
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
let levCheck = 0;
let arrSizeY;
let arrSizeX;
let Grav = true;
let res = 40;
/*leter codes*/
/*
Pre-Array
=========
w: wall
a: air
S: start
s: switch
G: goal
T: trap
t1: trick on
t2: trick off
tm: trick mega
Tf: falling trap
f: fake Goal
*/
let levels = [
/*tutorial 0*/
[
['w', 'w', 'w', 'w', 'w', 'w'],
['w', 'S', 'a', 'a', 'G', 'w'],
['w', 'w', 'w', 'w', 'w', 'w'],
],
/*tutorial 1*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 'S', 'a', 's', 't1', 'G', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w'],
],
/*tutorial 2*/
[
['w', 'w', 'w', 'w', 'w'],
['w', 'G', 'a', 'a', 'w'],
['w', 'a', 'a', 'a', 'w'],
['w', 'a', 'a', 'S', 'w'],
['w', 'w', 'w', 'w', 'w'],
],
/*tutorial 3*/
[
['w', 'w', 'w', 'w', 'w'],
['w', 'G', 'a', 'a', 'w'],
['w', 'w', 'w', 'a', 'w'],
['w', 'w', 'w', 'S', 'w'],
['w', 'w', 'w', 'w', 'w'],
],
/*level 0*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 'w', 'S', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 't1', 'a', 'a', 'a', 'a', 'T', 'a', 'a', 'a', 'a', 'a', 's', 'w'],
['w', 't1', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 't1', 'a', 'a', 'a', 'a', 's', 'a', 's', 't2', 'a', 'a', 'G', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w']
],
/*level 1*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
['w', 't1', 'S', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'G', 'w'],
['w', 't1', 'w', 'w', 'w', 't2', 't2', 't2', 't2', 't2', 't2', 't2', 't2', 'w', ],
['w', 't1', 'a', 'a', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', ],
['w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', ],
['w', 'w', 'a', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', ],
['w', 'w', 'a', 'a', 'a', 'a', 'T', 'a', 'a', 'a', 'a', 'a', 's', 'w', ],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
],
/*level 2*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 't2', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 't2', 't1', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'w'],
['w', 'S', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'w'],
['w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'w'],
['w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'G', 'w'],
['w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'a', 'w', 'w'],
['w', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
],
/*level 3*/
[
['w', 'w', 'w', 'w', 'w', 'Tf', 'w', 'w', 'w', 'w', 'w'],
['w', 'a', 'a', 'a', 'a', 't1', 'w', 'w', 'w', 'w', 'w'],
['w', 'a', 'a', 'a', 'a', 't1', 'w', 'w', 'w', 'w', 'w'],
['w', 'S', 'a', 'T', 's', 'a', 't2', 'a', 'a', 'G', 'w'],
['w', 'a', 'w', 'w', 't1', 't1', 'w', 'w', 'w', 'w', 'w'],
['w', 'w', 'w', 'w', 't1', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w']
],
/*level 4*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 's', 'a', 'a', 'a', 't2', 'a', 'a', 'a', 'w', 'w'],
['w', 'w', 'a', 'a', 'a', 't2', 'a', 't1', 't2', 'G', 'w'],
['w', 'a', 'a', 'a', 't1', 't2', 'a', 'a', 's', 'w', 'w'],
['w', 'a', 't2', 'a', 't1', 't2', 'a', 'a', 'w', 'a', 'w'],
['w', 'S', 'a', 'a', 't1', 't2', 'a', 'a', 'a', 'a', 'w'],
['w', 'w', 'a', 'a', 't1', 't2', 'a', 't2', 'a', 'a', 'w'],
['w', 's', 'a', 'a', 't1', 't2', 'a', 'a', 'a', 'a', 'w'],
['w', 'w', 't2', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w'],
['w', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
],
/*level 5*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 'a', 'a', 'G', 'w', 's', 'a', 'a', 'a', 'a', 'w'],
['w', 'aup', 'w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', 'w'],
['w', 'aup', 'w', 't2', 's', 't1', 't2', 'a', 't1', 'w', 'w'],
['w', 'aup', 'w', 'a', 'w', 'a', 'a', 'w', 'a', 'a', 'w'],
['w', 'aup', 'w', 'S', 'w', 'a', 's', 'w', 'T', 'a', 'w'],
['w', 'aup', 'w', 'w', 'w', 'a', 'w', 'a', 'w', 'amSwitch', 'w'],
['w', 'aup', 'T', 'T', 'T', 'T', 'T', 'T', 'a', 'a', 'w'],
['w', 'aup', 'tm', 'tm', 'tm', 'tm', 'tm', 'tm', 'tm', 'T', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w']
],
/*level 6*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 'a', 'a', 'a', 'a', 'a', 't2', 'a', 'tm', 'tm', 'tm', 'tm', 'tm', 'w', 'G', 'w'],
['w', 'a', 'a', 't1', 'a', 'a', 't2', 'a', 'aright', 'adown', 'adown', 'adown', 'tm', 'a', 't1', 'w'],
['w', 's', 't1', 'T', 't1', 'w', 'w', 'w', 'tm', 'adown', 'adown', 'adown', 'tm', 'a', 's', 'w'],
['w', 'w', 'T', 'a', 'a', 'a', 'a', 'a', 'tm', 'adown', 'adown', 'adown', 'tm', 'a', 'w', 'w'],
['w', 'T', 'a', 'a', 'w', 'a', 'a', 'a', 'tm', 'adown', 'adown', 'adown', 'tm', 'a', 'a', 'w'],
['w', 'a', 'a', 't1', 'a', 'a', 'a', 'a', 'tm', 'adown', 'adown', 'adown', 'w', 'a', 'a', 'w'],
['w', 'S', 'w', 's', 't2', 'w', 'a', 'a', 'tm', 'adown', 'amSwitch', 'adown', 'tm', 'a', 'w', 'w'],
['w', 'w', 'a', 'w', 'w', 'a', 'a', 'a', 'tm', 'a', 'w', 't1', 'w', 'w', 'a', 'w'],
['w', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w']
],
/*level 7 */
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'],
['w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'aright', 'aright', 'aright', 'aright', 'G', 'adown', 'w'],
['w', 'S', 'a', 'a', 'a', 'a', 'tmright', 'aright', 'aup', 'aup', 'aup', 'aup', 'w', 'adown', 'w'],
['w', 'w', 'a', 'a', 'a', 'a', 'tmup', 'aup', 'a', 'a', 'a', 'a', 'adown', 'adown', 'w'],
['w', 'T', 'a', 'a', 'a', 'a', 'tmup', 'a', 'a', 'a', 'T', 'amSwitch', 'adown', 'adown', 'w'],
['w', 'T', 'a', 'a', 'a', 'a', 'tmup', 'a', 'a', 'T', 'a', 'a', 'adown', 'adown', 'w'],
['w', 'T', 'a', 'a', 'a', 'adown', 'tmup', 'a', 'a', 'a', 'a', 'w', 'adown', 'adown', 'w'],
['w', 's', 'a', 'a', 'a', 'adown', 'a', 'a', 'a', 'a', 'w', 'adown', 'adown', 'adown', 'w'],
['w', 'w', 't2', 't2', 't2', 'a', 't2', 't2', 'a', 'w', 'adown', 'adown', 'adown', 'adown', 'w'],
['w', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'w'],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w']
],
/*level 8*/
[
["w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", ],
["w", "S", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "w", ],
["w", "w", "T", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "w", ],
["w", "G", "w", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "w", ],
["w", "aup", "w", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "w", ],
["w", "aup", "w", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "s", "w", ],
["w", "aup", "w", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "t1", "w", ],
["w", "aup", "w", "a", "a", "a", "a", "a", "amSwitch", "a", "a", "a", "a", "a", "w", ],
["w", "a", "w", "a", "a", "a", "a", "a", "tmup", "a", "a", "a", "a", "a", "w", ],
["w", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "w", ],
["w", "t2", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "w", ],
["w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", ]
],
/*Trophy*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
['a', 'a', 'w', 'G', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'a', 'a', ],
['a', 'a', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'a', 'a', ],
['a', 'a', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'w', 'a', 'a', ],
['a', 'a', 'a', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'w', 'w', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'w', 'w', 'a', 'S', 'a', 'w', 'w', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'a', 'w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'a', 'a', 'w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'a', 'w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', ],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ]
],
/*Ryan bonus*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
['w', 'S', 's', 't1', 'w', 'sdown', 'a', 'sright', 'adown', 'G', 'w', ],
['w', 't1', 't1', 't1', 'w', 'sdown', 'aup', 'w', 't1right', 't1down', 'w', ],
['w', 'T', 'T', 'a', 'w', 'T', 'aup', 'aup', 'w', 'adown', 'w', ],
['w', 'a', 'a', 'a', 'w', 'aup', 'T', 'aup', 'w', 'adown', 'w', ],
['w', 'T', 'a', 'T', 'w', 'T', 'sright', 'aup', 'w', 'adown', 'w', ],
['w', 'a', 'a', 'a', 'w', 'aup', 'aup', 'T', 'w', 'adown', 'w', ],
['w', 'a', 'T', 'a', 'w', 'sdown', 'sup', 'aup', 'aleft', 'aleft', 'w', ],
['w', 'a', 'a', 'a', 'w', 'sdown', 'aup', 'T', 'w', 'w', 'w', ],
['w', 'T', 'T', 'a', 'w', 'T', 'aup', 'sup', 'w', 'w', 'w', ],
['w', 'adown', 'adown', 'a', 'w', 'aup', 'sup', 'aup', 'w', 'w', 'w', ],
['w', 'adown', 'adown', 'Tdown', 'w', 'aup', 'sup', 'aup', 'w', 'w', 'w', ],
['w', 'adown', 'adown', 'Tdown', 'w', 'aup', 'aup', 'aup', 'w', 'w', 'w', ],
['w', 'a', 'a', 'a', 'w', 's', 'aup', 'aup', 'w', 'w', 'w', ],
['w', 'T', 'T', 'a', 'w', 'aup', 'aup', 'aup', 'w', 'w', 'w', ],
['w', 'a', 'a', 'a', 's', 'aup', 'aup', 'aup', 'w', 'w', 'w', ],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
],
/*Kodi Bonus*/
[
["w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", ],
["w", "S", "s", "w", "a", "w", "a", "aup", "aup", "a", "a", "a", "a", "a", "w", ],
["w", "w", "t1", "w", "a", "w", "a", "aup", "amSwitch", "a", "a", "amSwitch", "w", "a", "w", ],
["w", "a", "adown", "a", "a", "w", "T", "aup", "w", "tm", "tm", "w", "w", "a", "w", ],
["w", "a", "a", "s", "a", "w", "aup", "aup", "w", "a", "adown", "a", "a", "a", "w", ],
["w", "t2", "T", "w", "t2", "w", "aup", "a", "w", "a", "adown", "a", "a", "a", "w", ],
["w", "adown", "adown", "adown", "adown", "a", "aup", "aup", "w", "a", "adown", "a", "a", "a", "w", ],
["w", "adown", "adown", "adown", "adown", "adown", "t1", "aup", "w", "T", "adown", "a", "t1", "a", "w", ],
["w", "adown", "adown", "adown", "adown", "adown", "aup", "aup", "w", "T", "adown", "a", "a", "a", "w", ],
["w", "adown", "adown", "adown", "adown", "adown", "aup", "aup", "w", "T", "adown", "a", "a", "a", "w", ],
["w", "T", "T", "T", "T", "t1", "aup", "aup", "w", "T", "T", "T", "G", "t1", "w", ],
["w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", ]
],
//Kodi bonus 2
[[ "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", ],
[ "w", "S", "a", "w", "aup", "s", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "w", ],
[ "w", "w", "adown", "w", "aup", "w", "a", "T", "T", "s", "T", "a", "s", "w", "s", "w", "a", "w", ],
[ "w", "adown", "adown", "w", "aup", "w", "w", "t2", "t2", "t2", "t2", "t2", "t2", "t2", "t2", "w", "adowndowndown", "w", ],
[ "w", "adown", "adown", "w", "aup", "w", "G", "T", "T", "T", "T", "T", "T", "T", "T", "T", "adown", "w", ],
[ "w", "a", "a", "w", "aup", "w", "s", "s", "s", "s", "s", "s", "s", "s", "a", "T", "adown", "w", ],
[ "w", "a", "T", "w", "aup", "w", "t2", "t2", "s", "s", "s", "s", "s", "s", "a", "T", "adown", "w", ],
[ "w", "a", "adown", "w", "aup", "w", "t1", "t1", "t1", "t1", "s", "s", "s", "s", "aup", "T", "adown", "w", ],
[ "w", "T", "a", "w", "aup", "w", "t2", "t2", "t2", "t2", "t2", "t2", "t2", "w", "aup", "T", "adown", "w", ],
[ "w", "adown", "a", "w", "aup", "w", "T", "T", "T", "T", "T", "T", "T", "T", "aup", "T", "adown", "w", ],
[ "w", "a", "T", "w", "aup", "w", "a", "a", "a", "a", "a", "a", "a", "a", "aup", "T", "adown", "w", ],
[ "w", "a", "adown", "w", "aup", "w", "w", "aup", "a", "a", "w", "a", "a", "a", "w", "T", "adown", "w", ],
[ "w", "T", "a", "w", "aup", "w", "T", "aup", "a", "T", "a", "a", "a", "a", "a", "T", "adown", "w", ],
[ "w", "a", "a", "a", "aup", "w", "T", "aup", "a", "a", "a", "a", "a", "T", "a", "T", "adown", "w", ],
[ "w", "T", "T", "w", "aup", "w", "a", "w", "a", "a", "a", "a", "a", "a", "a", "T", "adown", "w", ],
[ "w", "T", "T", "w", "aup", "w", "a", "a", "a", "w", "a", "a", "a", "a", "a", "tm", "adown", "w", ],
[ "w", "T", "T", "w", "aup", "w", "T", "T", "T", "T", "T", "T", "T", "w", "T", "tm", "amSwitch", "w", ],
[ "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", ]],
//Ryan bonus 2
[
["w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w","w", "w", "w","Tf", "T","w"],
[ "w", "S", "a", "a", "s", "a", "a", "t1", "adown", "w", "a", "a", "a", "w", "a", "a", "t1", "aup", "w", ],
[ "w", "w", "amSwitch", "s", "s", "s", "a", "w", "adown", "w", "a", "w", "a", "a", "a", "w", "t2", "aup", "w", ],
[ "w", "a", "t1", "t1", "tm", "t1", "t1", "adown", "adown", "w", "a", "w", "a", "w", "a", "a", "t1", "aup", "w", ],
[ "w", "T", "T", "T", "T", "T", "T", "adown", "adown", "adown", "T", "w", "a", "a", "w", "w", "t2", "aup", "w", ],
[ "w", "a", "a", "a", "a", "a", "t1", "s", "a", "a", "T", "w", "a", "a", "w", "a", "t1", "aup", "w", ],
[ "w", "a", "a", "a", "a", "a", "t2", "adown", "adown", "a", "T", "a", "w", "a", "aleft", "a", "t2", "aup", "w", ],
[ "w", "a", "a", "T", "T", "T", "w", "adown", "adown", "s", "T", "a", "a", "a", "aleft", "a", "t1", "aup", "w", ],
[ "w", "a", "T", "G", "a", "a", "a", "T", "T", "w", "a", "w", "w", "w", "a", "a", "t2", "aup", "w", ],
[ "w", "a", "s", "w", "s", "s", "s", "a", "s", "s", "a", "a", "s", "a", "a", "a", "t1", "aup", "w", ],
[ "w", "s", "s", "w", "t1", "a", "s", "t2", "a", "t1", "s", "a", "s", "a", "a", "w", "t2", "aup", "w", ],
[ "w", "s", "a", "s", "a", "w", "a", "s", "s", "s", "a", "s", "s", "a", "a", "a", "t1", "aup", "w", ],
[ "w", "s", "amSwitch", "s", "s", "w", "t2", "s", "a", "t2", "s", "a", "s", "a", "a", "w", "t2", "aup", "w", ],
[ "w", "t1", "t1", "t2", "t1", "t1", "T", "a", "s", "a", "s", "a", "t2", "a", "a", "w", "t1", "aup", "w", ],
[ "w", "s", "T", "s", "T", "s", "T", "a", "a", "a", "t1", "a", "a", "a", "w", "aleft", "t2", "aup", "w", ],
[ "w", "tm", "t1", "tm", "t1", "tm", "T", "T", "T", "T", "T", "T", "T", "T", "T", "a", "t1", "aup", "w", ],
[ "w", "a", "T", "T", "T", "a", "a", "w", "w", "w", "w", "w", "w", "w", "w", "w", "t1", "aup", "w", ],
[ "w", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "aup", "w", ],
[ "w", "T", "T", "T", "T", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", "w", ]],
/*Trophy 2*/
[
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ],
['a', 'a', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'a', 'a', ],
['a', 'a', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'a', 'a', ],
['a', 'a', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'w', 'w', 'a', 'a', ],
['a', 'a', 'a', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'w', 'w', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'w', 'w', 'a', 'S', 'a', 'w', 'w', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'a', 'w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'a', 'a', 'w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'a', 'a', 'w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', 'a', 'a', ],
['a', 'a', 'a', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'a', 'a', 'a', ],
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', ]
]
];
const levCount = levels.length - 1;
function setup() {
traps = []
//framerate
frameRate(100);
arrSizeY = levels[level].length;
arrSizeX = levels[level][0].length;
//map sizing
res = Math.min(windowWidth / arrSizeX, windowHeight / arrSizeY)
//canvas
createCanvas(arrSizeX * res, arrSizeY * res);
background(255);
//build array
arr = new Array(arrSizeY);
for (let i = 0; i < arrSizeY; i++) {
arr[i] = new Array(arrSizeX);
}
let preArr = levels[level];
//convert letter array to map
for (let i = 0; i < arrSizeY; i++) {
for (let j = 0; j < arrSizeX; j++) {
if (preArr[i][j].charAt(0) == 'a') {
arr[i][j] = new tile(2);
arr[i][j].extra = stringextra(0, preArr[i][j].substr(1, preArr[i][j].length));
arr[i][j].direction = stringextra(1, preArr[i][j].substr(1, preArr[i][j].length));
} else if (preArr[i][j].charAt(0) == 'w') {
arr[i][j] = new tile(1);
arr[i][j].extra = stringextra(0, preArr[i][j].substr(1, preArr[i][j].length));
arr[i][j].direction = stringextra(1, preArr[i][j].substr(1, preArr[i][j].length));
} else if (preArr[i][j].charAt(0) == 'S') {
player.x = j;
player.y = i;
arr[i][j] = new tile(2);
arr[i][j].extra = stringextra(0, preArr[i][j].substr(1, preArr[i][j].length));
arr[i][j].direction = stringextra(1, preArr[i][j].substr(1, preArr[i][j].length));
} else if (preArr[i][j].charAt(0) == 't') {
if (preArr[i][j].charAt(1) == '1') {
arr[i][j] = new tile(3);
}
if (preArr[i][j].charAt(1) == '2') {
arr[i][j] = new tile(4);
}
if (preArr[i][j].charAt(1) == 'm') {
arr[i][j] = new tile(5);
}
arr[i][j].direction = stringextra(1, preArr[i][j].substr(2, preArr[i][j].length))
} else if (preArr[i][j].charAt(0) == 'G') {
arr[i][j] = new tile(2);
arr[i][j].extra = "goal"
arr[i][j].direction = stringextra(1, preArr[i][j].substr(1, preArr[i][j].length));
} else if (preArr[i][j].charAt(0) == 's') {
arr[i][j] = new tile(2);
arr[i][j].extra = "gate"
arr[i][j].direction = stringextra(1, preArr[i][j].substr(1, preArr[i][j].length));
} else if (preArr[i][j].charAt(0) == 'T') {
arr[i][j] = new tile(2);
//arr[i][j].extra = 'spike';
if (preArr[i][j].charAt(1) == 'f') {
arr[i][j].direction = stringextra(1, preArr[i][j].substr(2, preArr[i][j].length));
traps.push(new xyObj(j, i, true))
} else {
arr[i][j].direction = stringextra(1, preArr[i][j].substr(1, preArr[i][j].length));
traps.push(new xyObj(j, i, false))
}
}else if(preArr[i][j].charAt(0)== 'f'){
arr[i][j] = new tile(2);
arr[i][j].extra = "fGoal"
arr[i][j].direction = stringextra(1, preArr[i][j].substr(1, preArr[i][j].length));
}
console.log(`World Gen: (${i}, ${j}) Success`)
}
}
}
function draw() {
if (deaths != dcc) {
deaths = 0;
deaths += 1000
alert("Cheater, you now have " + deaths + " deaths. And you are invisible")
cheat = true
dcc = 1000;
}
if (level != levCheck) {
deaths = 0;
deaths += 1000
alert("Cheater, you now have " + deaths + " deaths. And you are invisible")
cheat = true
dcc = 1000;
level = levCheck;
setup();
}
noStroke();
//drawing board
for (let i = 0; i < arrSizeY; i++) {
for (let j = 0; j < arrSizeX; j++) {
//wall
if (arr[i][j].type === 1 || arr[i][j].type === 3 || arr[i][j].type === 5) {
fill(0)
if (level === levCount || level === levCount - bonusLevs) {
if (i > 1 && i < 11) {
fill(215, 150, 0);
}
}
rect(j * res, i * res, res, res);
}
//air
if (arr[i][j].type === 2 || arr[i][j].type === 4) {
if (arr[i][j].direction == 'up' || arr[i][j].direction == 'left' || arr[i][j].direction == 'right') {
fill(255, 255, 0)
} else if (arr[i][j].direction == 'down') {
fill(50)
} else {
fill(255)
}
rect(j * res, i * res, res, res);
}
//goal
if (arr[i][j].extra === "goal"||arr[i][j].extra === "fGoal") {
fill(0, 255, 0)
circle((j * res) + (res / 2), (i * res) + (res / 2), ((3 * res) / 4));
}
//gate
if (arr[i][j].extra === "gate") {
fill(255, 127, 80);
circle((j * res) + (res / 2), (i * res) + (res / 2), ((3 * res) / 4));
}
if (arr[i][j].extra === "mSwitch") {
fill(153, 50, 204);
circle((j * res) + (res / 2), (i * res) + (res / 2), ((3 * res) / 4));
}
}
}
//spikes
for (let i = 0; i < traps.length; i++) {
fill(255, 0, 0)
triangle(traps[i].x * res, (traps[i].y + 1) * res, (traps[i].x + 1) * res, (traps[i].y + 1) * res, ((traps[i].x + 1) * res) - (res / 2), traps[i].y * res);
}
//player
if (cheat == false) {
fill(0, 206, 209);
} else {
fill(255, 255, 255);
}
triangle(player.x * res, (player.y + 1) * res, (player.x + 1) * res, (player.y + 1) * res, ((player.x + 1) * res) - (res / 2), player.y * res);
//gravity
n++
if (arr[player.y + 1][player.x].stop == true || Grav == false) {
n = 0;
}
if (Grav === true) {
if (n % 20 == 0) {
player.moveDown();
}
}
//spike grav
sGrav++;
for (let i = 0; i < traps.length; i++) {
if(arr[traps[i].y][traps[i].x].type == 1||arr[traps[i].y][traps[i].x].type == 3){
traps.splice(i,1);
}
if(traps[i].fall == true){
if (sGrav % 20 == 0) {
traps[i].moveDown();
}
}
}
//level texts
if (level === 0) {
fill(0, 255, 0);
textSize((20 / 40) * res);
text("Use the Arrows to move.", (12 / 40) * res, (0 / 40) * res, (500 / 40) * res, (100 / 40) * res);
textSize((10 / 40) * res)
text("This is where you go to win <--", (205 / 40) * res, (30 / 40) * res, (40 / 40) * res, (70 / 40) * res);
text("This is you -->", (0 / 40) * res, (40 / 40) * res, (40 / 40) * res, (70 / 40) * res);
fill(0, 100, 100);
}
if (level === 1) {
fill(0, 206, 209);
textSize((10 / 40) * res)
text("This button will help you <--", (160 / 40) * res, (10 / 40) * res, (45 / 40) * res, (100 / 40) * res);
}
if (level === 2) {
fill(0, 255, 0);
textSize((15 / 40) * res);
text("Use the Up Arrow to jump.", (12 / 40) * res, (0 / 40) * res, (500 / 40) * res, (100 / 40) * res);
}
if (level === 3) {
fill(0, 255, 0);
textSize((12 / 40) * res);
text("Use the 'A' to jump up and left ('D' makes you go right).", (12 / 40) * res, (0 / 40) * res, (180 / 40) * res, (100 / 40) * res);
}
if (level === 9) {
fill(0, 255, 0);
textSize((12 / 40) * res);
text("The yellow moves you. This goes up.\n-->", (5 / 40) * res, (180 / 40) * res, (25 / 40) * res, (400 / 40) * res);
}
if (level === 10) {
fill(0, 255, 0);
textSize((12 / 40) * res);
text("The gray has extra gravity.\n-->", (325 / 40) * res, (180 / 40) * res, (25 / 40) * res, (400 / 40) * res);
}
//Trophy level text
if (level === levCount - bonusLevs) {
clearInterval(timer);
textSize((50 / 40) * res);
fill(255, 150, 0);
text("Congrats!!", (190 / 40) * res, (38 / 40) * res);
textSize((30 / 40) * res);
text("You died " + deaths + " times", (190 / 40) * res, (72 / 40) * res);
ftime = time.toFixed(2)
if (ftime <= 60) {
text("Your time was " + ftime + " seconds", (115 / 40) * res, (475 / 40) * res);
} else {
ftime = (ftime / 60).toFixed(2)
text("Your time was " + ftime + " minutes", (115 / 40) * res, (475 / 40) * res);
}
fill(0, 255, 0);
textSize((15 / 40) * res);
text("Click here for more levels (made by other users)", (20 / 40) * res, (5 / 40) * res, (180 / 40) * res);
}
if (level === levCount) {
textSize((50 / 40) * res);
fill(255, 150, 0);
text("Congrats!!", (190 / 40) * res, (38 / 40) * res);
textSize((30 / 40) * res);
text("You died " + deaths + " times", (190 / 40) * res, (72 / 40) * res);
}
}
class tile {
/*
1. wall
2. air
3. trick wall
4. trick air
5. trick mega
*/
constructor(type) {
switch (type) {
case 1:
this.type = 1;
this.stop = true;
this.extra = null;
this.direction = null;
break;
case 2:
this.type = 2;
this.stop = false;
this.extra = null;
this.direction = null;
break;
case 3:
this.type = 3;
this.stop = true;
this.extra = null;
this.direction = null;
break;
case 4:
this.type = 4;
this.stop = false;
this.extra = null;
this.direction = null;
break;
case 5:
this.type = 5;
this.stop = true;
this.direction = null;
this.extra = null;
break;
default:
this.type = 1;
this.direction = null;
this.stop = true;
this.extra = null;
break;
}
}
}
function Win() {
sleep(50).then(() => {
alert("You beat level " + (level + 1) + " out of " + levCount);
btest = 0;
level++;
levCheck++;
setup();
})
console.clear();
}
function keyPressed() {
if (tStart == true) {
window.timer = setInterval(function() {
time += 0.01;
}, 10);
tStart = false;
}
if (keyCode === LEFT_ARROW) {
player.moveLeft();
} else if (keyCode === RIGHT_ARROW) {
player.moveRight();
} else if (keyCode === UP_ARROW) {
player.moveUp();
} else if (keyCode === DOWN_ARROW) {
player.moveDown();
} else if (keyCode === 65) {
if (arr[player.y + 1][player.x].stop == true) {
player.moveUp()
sleep(250).then(() => {
player.moveLeft();
})
}
} else if (keyCode === 68) {
if (arr[player.y + 1][player.x].stop == true) {
player.moveUp()
sleep(250).then(() => {
player.moveRight();
})
}
}
}
function trickOff() {
for (let i = 0; i < arrSizeY; i++) {
for (let j = 0; j < arrSizeX; j++) {
if (arr[i][j].type == 3) {
arr[i][j].stop = false;
arr[i][j].type = 4;
} else if (arr[i][j].type == 4) {
arr[i][j].stop = true;
arr[i][j].type = 3;
}
}
}
}
function mOFF() {
for (let i = 0; i < arrSizeY; i++) {
for (let j = 0; j < arrSizeX; j++) {
if (arr[i][j].type == 5) {
arr[i][j].stop = false;
arr[i][j].type = 2;
}
}
}
}
function stringextra(num, string) {
if (num == 1) {
if (string == 'left') {
return 'left';
} else if (string == 'right') {
return 'right';
} else if (string == 'up') {
return 'up';
} else if (string == 'down') {
return 'down';
} else {
return 'none';
}
}
if (num == 0) {
if (string == 'mSwitch') {
return 'mSwitch';
} else {
return 'none';
}
}
}