398 lines
15 KiB
JavaScript
398 lines
15 KiB
JavaScript
elements.lab = {
|
|
color: "#ff0000",
|
|
behaviorOn: behaviors.WALL,
|
|
behavior: [
|
|
"CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wire|CR:wire|CR:wire|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall",
|
|
"CR:wall|DL|XX|XX|XX|XX|XX|CR:e_cr|CR:wall|CR:sensor|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|CR:wall|CR:wall|CR:wall|XX|CR:wall|CR:wall|CR:wall|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|CR:wall|CR:wall|CR:wire|xx|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:ecloner|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|CR:wall|CR:wall|CR:wire|CR:wall|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|CR:sensor|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|CR:wall|XX|CR:wall|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:player|CR:player_2|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|XX|CR:wall|CR:wall|CR:wall|XX|CR:wall|CR:wall|CR:wall|CR:wall|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|CR:wire|CR:wall|CR:wire|CR:wall|CR:wire|CR:wall|CR:wire|CR:wall|XX|XX|XX|CR:wall|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wall|XX|XX|XX|CR:wall|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|CR:wall|CR:wall|CR:wall|CR:wire|CR:wall|CR:wall|CR:wall|CR:wire|CR:sensor|XX|XX|CR:wall|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|CR:wall",
|
|
"CR:wall|CR:wall|CR:wall|CR:wall|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall",
|
|
],
|
|
category: "lab",
|
|
state: "solid",
|
|
};
|
|
elements.e_cr = {
|
|
name: "e-cr",
|
|
color: "#dddd00",
|
|
behavior: behaviors.WALL,
|
|
behaviorOn: [
|
|
"XX|XX|XX",
|
|
"XX|XX|XX",
|
|
"XX|CR:human|XX"
|
|
],
|
|
tick: function(pixel) {
|
|
if (pixel.create) { return }
|
|
for (var i = 0; i < adjacentCoords.length; i++) {
|
|
var coords = adjacentCoords[i];
|
|
var x = pixel.x + coords[0];
|
|
var y = pixel.y + coords[1];
|
|
if (!isEmpty(x,y,true)) {
|
|
pixel.temp = pixelMap[x][y].temp;
|
|
if (pixelMap[x][y].create) { pixel.create = pixelMap[x][y].create; break }
|
|
var element = pixelMap[x][y].element;
|
|
if (element === pixel.element || elements[pixel.element].ignore.indexOf(element) !== -1) { continue }
|
|
pixel.create = element;
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
ignore: ["cloner","slow_cloner","clone_powder","floating_cloner","wire","ewall","wire","sensor","battery"],
|
|
category:"machines",
|
|
insulate:true,
|
|
darkText: true,
|
|
conduct: 1,
|
|
hardness: 1,
|
|
movable: false
|
|
}
|
|
var libraryMod = "mods/code_library.js";
|
|
|
|
if(enabledMods.includes(libraryMod)) {
|
|
sussyKey = null;
|
|
isShift = false;
|
|
isAlt = false;
|
|
|
|
document.addEventListener("keydown", function(modifierDownListener) {
|
|
// User presses shift
|
|
if (modifierDownListener.keyCode == 16) {
|
|
isShift = true;
|
|
}
|
|
// User presses alt
|
|
if (modifierDownListener.keyCode == 18) {
|
|
isAlt = true;
|
|
}
|
|
});
|
|
|
|
document.addEventListener("keyup", function(modifierUpListener) {
|
|
// User releases shift
|
|
if (modifierUpListener.keyCode == 16) {
|
|
isShift = false;
|
|
}
|
|
// User releases alt
|
|
if (modifierUpListener.keyCode == 18) {
|
|
isAlt = false;
|
|
}
|
|
});
|
|
|
|
document.addEventListener("keyup", function(sussyListener) {
|
|
switch (sussyListener.keyCode) {
|
|
case 87:
|
|
sussyKey = "W";
|
|
break;
|
|
case 65:
|
|
sussyKey = "A";
|
|
break;
|
|
case 83:
|
|
sussyKey = "S";
|
|
break;
|
|
case 68:
|
|
sussyKey = "D";
|
|
break;
|
|
case 81:
|
|
sussyKey = "Q";
|
|
break;
|
|
case 88:
|
|
sussyKey = "X";
|
|
break;
|
|
case 90:
|
|
sussyKey = "Z";
|
|
break;
|
|
case 86:
|
|
sussyKey = "V";
|
|
break;
|
|
};
|
|
});
|
|
|
|
function controllablePixelTryCreatePixelNullCheck(element,x,y) {
|
|
if(!elements[element]) { //catch the null
|
|
return false;
|
|
};
|
|
if(isEmpty(x,y)) {
|
|
tryCreatePixel(element,x,y);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
elements.player = {
|
|
color: "#FFFFFF",
|
|
colorOn: "#FFFF00",
|
|
behavior: behaviors.WALL,
|
|
state: "solid",
|
|
density: 2000,
|
|
maxSize: 1,
|
|
conduct: 1,
|
|
hardness: 1,
|
|
tick: function(pixel) {
|
|
var xx = pixel.x;
|
|
var yy = pixel.y;
|
|
userElement = currentElement;
|
|
if(userElement === pixel.element) {
|
|
userElement = null;
|
|
};
|
|
if(isShift && !isAlt) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(255,191,127)" : pixel.color = "rgb(255,127,127)";
|
|
}
|
|
if(isAlt && !isShift) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(191,255,127)" : pixel.color = "rgb(127,255,127)";
|
|
}
|
|
if(isAlt && isShift) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(255,255,0)" : pixel.color = "rgb(255,255,127)";
|
|
}
|
|
if(!isAlt && !isShift) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(255,255,191)" : pixel.color = "rgb(255,255,255)";
|
|
}
|
|
if(sussyKey !== null) {
|
|
switch (sussyKey) {
|
|
case "W":
|
|
isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx,yy-1) : tryMove(pixel,xx,yy-1);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "A":
|
|
isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx-1,yy) : tryMove(pixel,xx-1,yy);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "S":
|
|
isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx,yy+1) : tryMove(pixel,xx,yy+1);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "D":
|
|
tryMove(pixel,xx+1,yy);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "V": //Alt+D is something else in some browsers.
|
|
if(isAlt) {
|
|
controllablePixelTryCreatePixelNullCheck(userElement,xx+1,yy);
|
|
};
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "X":
|
|
explodeAt(xx,yy,5)
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "Z":
|
|
if (!pixel.charge && !pixel.chargeCD && !isEmpty(pixel.x,pixel.y,true)) {
|
|
pixel.charge = 1;
|
|
}
|
|
if(!isShift === 0) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "Q": //Use if a key gets stuck
|
|
sussyKey = null;
|
|
isShift = null;
|
|
isAlt = null;
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
};
|
|
} else {
|
|
alert(`The ${libraryMod} mod is required and has been automatically inserted (reload for this to take effect).`)
|
|
enabledMods.splice(enabledMods.indexOf(modName),0,libraryMod)
|
|
localStorage.setItem("enabledMods", JSON.stringify(enabledMods));
|
|
};
|
|
|
|
|
|
var libraryMod = "mods/code_library.js";
|
|
|
|
if(enabledMods.includes(libraryMod)) {
|
|
sussyKey = null;
|
|
isShift = false;
|
|
isAlt = false;
|
|
|
|
document.addEventListener("keydown", function(modifierDownListener) {
|
|
// User presses shift
|
|
if (modifierDownListener.keyCode == 16) {
|
|
isShift = true;
|
|
}
|
|
// User presses alt
|
|
if (modifierDownListener.keyCode == 18) {
|
|
isAlt = true;
|
|
}
|
|
});
|
|
|
|
document.addEventListener("keyup", function(modifierUpListener) {
|
|
// User releases shift
|
|
if (modifierUpListener.keyCode == 16) {
|
|
isShift = false;
|
|
}
|
|
// User releases alt
|
|
if (modifierUpListener.keyCode == 18) {
|
|
isAlt = false;
|
|
}
|
|
});
|
|
|
|
document.addEventListener("keyup", function(sussyListener) {
|
|
switch (sussyListener.keyCode) {
|
|
case 73:
|
|
sussyKey = "I";
|
|
break;
|
|
case 74:
|
|
sussyKey = "J";
|
|
break;
|
|
case 75:
|
|
sussyKey = "K";
|
|
break;
|
|
case 76:
|
|
sussyKey = "L";
|
|
break;
|
|
case 81:
|
|
sussyKey = "Q";
|
|
break;
|
|
case 88:
|
|
sussyKey = "X";
|
|
break;
|
|
case 90:
|
|
sussyKey = "Z";
|
|
break;
|
|
case 86:
|
|
sussyKey = "V";
|
|
break;
|
|
};
|
|
});
|
|
|
|
function controllablePixelTryCreatePixelNullCheck(element,x,y) {
|
|
if(!elements[element]) { //catch the null
|
|
return false;
|
|
};
|
|
if(isEmpty(x,y)) {
|
|
tryCreatePixel(element,x,y);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
elements.player_2 = {
|
|
color: "#FFFFFF",
|
|
colorOn: "#FFFF00",
|
|
behavior: behaviors.WALL,
|
|
state: "solid",
|
|
density: 2000,
|
|
maxSize: 1,
|
|
conduct: 1,
|
|
hardness: 1,
|
|
tick: function(pixel) {
|
|
var xx = pixel.x;
|
|
var yy = pixel.y;
|
|
userElement = currentElement;
|
|
if(userElement === pixel.element) {
|
|
userElement = null;
|
|
};
|
|
if(isShift && !isAlt) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(255,191,127)" : pixel.color = "rgb(255,127,127)";
|
|
}
|
|
if(isAlt && !isShift) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(191,255,127)" : pixel.color = "rgb(127,255,127)";
|
|
}
|
|
if(isAlt && isShift) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(255,255,0)" : pixel.color = "rgb(255,255,127)";
|
|
}
|
|
if(!isAlt && !isShift) {
|
|
sussyKey === "Z" ? pixel.color = "rgb(255,255,191)" : pixel.color = "rgb(255,255,255)";
|
|
}
|
|
if(sussyKey !== null) {
|
|
switch (sussyKey) {
|
|
case "I":
|
|
isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx,yy-1) : tryMove(pixel,xx,yy-1);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "J":
|
|
isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx-1,yy) : tryMove(pixel,xx-1,yy);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "K":
|
|
isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx,yy+1) : tryMove(pixel,xx,yy+1);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "L":
|
|
tryMove(pixel,xx+1,yy);
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "V": //Alt+D is something else in some browsers.
|
|
if(isAlt) {
|
|
controllablePixelTryCreatePixelNullCheck(userElement,xx+1,yy);
|
|
};
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "X":
|
|
explodeAt(xx,yy,5)
|
|
if(!isShift) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "Z":
|
|
if (!pixel.charge && !pixel.chargeCD && !isEmpty(pixel.x,pixel.y,true)) {
|
|
pixel.charge = 1;
|
|
}
|
|
if(!isShift === 0) {
|
|
sussyKey = null;
|
|
}
|
|
break;
|
|
case "Q": //Use if a key gets stuck
|
|
sussyKey = null;
|
|
isShift = null;
|
|
isAlt = null;
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
};
|
|
} else {
|
|
alert(`The ${libraryMod} mod is required and has been automatically inserted (reload for this to take effect).`)
|
|
enabledMods.splice(enabledMods.indexOf(modName),0,libraryMod)
|
|
localStorage.setItem("enabledMods", JSON.stringify(enabledMods));
|
|
};
|
|
|
|
|
|
|
|
// i know it looks messy but it works
|
|
|
|
// if u dont belive me test it but place it in the center of the canvas
|