2024-04-22 21:11:47 -04:00
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-mask_head")?.remove()
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-mask_body")?.remove()
|
|
|
|
|
})
|
2024-05-08 16:27:25 -04:00
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-infected_skin")?.remove()
|
|
|
|
|
})
|
2024-05-06 13:42:02 -04:00
|
|
|
window.addEventListener("load", () => {
|
2024-05-06 21:09:06 -04:00
|
|
|
document.getElementById("elementButton-infected_meat")?.remove()
|
2024-05-06 13:42:02 -04:00
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
2024-05-06 21:09:06 -04:00
|
|
|
document.getElementById("elementButton-frozen_infected_meat")?.remove()
|
2024-05-06 13:42:02 -04:00
|
|
|
})
|
2024-04-22 21:11:47 -04:00
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-zombie")?.remove()
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-z_head")?.remove()
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-z_body")?.remove()
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-REDACTED")?.remove()
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-hyper_tickle_monster")?.remove()
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-calm_682")?.remove()
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-mad_682")?.remove()
|
2024-05-20 22:16:03 -04:00
|
|
|
})
|
2024-04-22 21:11:47 -04:00
|
|
|
|
2024-05-20 22:16:03 -04:00
|
|
|
// Coding junk above this point
|
2024-04-22 21:11:47 -04:00
|
|
|
|
|
|
|
|
// also hi jonny ray
|
|
|
|
|
|
|
|
|
|
elements.anomalous_essence = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: "#f7ead0",
|
|
|
|
|
behavior: behaviors.GAS,
|
|
|
|
|
category: "scp",
|
|
|
|
|
state: "gas",
|
|
|
|
|
density: 0.50,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
elements.SCP_008 = {
|
|
|
|
|
color: "#11111f",
|
|
|
|
|
behavior: [
|
|
|
|
|
"M2|M1|M2",
|
|
|
|
|
"M1|XX|M1",
|
|
|
|
|
"M2|M1|M2",
|
|
|
|
|
],
|
|
|
|
|
reactions: {
|
|
|
|
|
"head": { elem1:null, elem2:"z_head" , chance:0.5 },
|
|
|
|
|
"body": { elem1:null, elem2:"z_body" , chance:0.5 },
|
2024-05-20 22:16:03 -04:00
|
|
|
"skin": { elem1:null, elem2: ["infected_skin","infected_skin","infected_meat"] , chance:0.3 },
|
|
|
|
|
"blood": { elem1:null, elem2:"infection" , chance:0.6 },
|
|
|
|
|
"meat": { elem1:null, elem2:"infected_meat" , chance:0.4 },
|
|
|
|
|
"rotten_meat": { elem1:null, elem2:"infected_meat" , chance:0.5 },
|
|
|
|
|
"frozen_meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.3 },
|
2024-04-22 21:11:47 -04:00
|
|
|
"frog": { elem2:"SCP_008" , chance:0.5 },
|
|
|
|
|
"ant": { elem2:"SCP_008" , chance:0.5 },
|
|
|
|
|
"bee": { elem2:"SCP_008" , chance:0.5 },
|
|
|
|
|
"fish": { elem2:"SCP_008" , chance:0.5 },
|
|
|
|
|
"firefly": { elem2:"SCP_008" , chance:0.5 },
|
2024-05-20 22:16:03 -04:00
|
|
|
"chlorine": { elem1: null , chance:0.01 },
|
|
|
|
|
"liquid_chlorine": { elem1: null , chance:0.01 },
|
|
|
|
|
"light": { elem1: null , chance:0.01 },
|
2024-04-22 21:11:47 -04:00
|
|
|
},
|
2024-05-06 13:42:02 -04:00
|
|
|
tempHigh: 750,
|
2024-05-20 22:16:03 -04:00
|
|
|
stateHigh: null,
|
2024-04-22 21:11:47 -04:00
|
|
|
tempLow: -100,
|
|
|
|
|
stateLow: "frozen_008",
|
|
|
|
|
category: "scp",
|
|
|
|
|
state: "gas",
|
|
|
|
|
density: 100,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.frozen_008 = {
|
|
|
|
|
color: "#242424",
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
2024-05-20 22:16:03 -04:00
|
|
|
"M2%0.001|DL%0.001|M2%0.001",
|
|
|
|
|
"M2%0.01|M1%1.0|M2%0.01",
|
2024-04-22 21:11:47 -04:00
|
|
|
],
|
|
|
|
|
reactions: {
|
|
|
|
|
"head": { elem1:null, elem2:"z_head" , chance:0.4 },
|
|
|
|
|
"body": { elem1:null, elem2:"z_body" , chance:0.4 },
|
2024-05-20 22:16:03 -04:00
|
|
|
"skin": { elem1:null, elem2:"frozen_infected_meat" , chance:0.4 },
|
|
|
|
|
"blood": { elem1:null, elem2:"infection" , chance:0.6 },
|
|
|
|
|
"meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.4 },
|
|
|
|
|
"rotten_meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.5 },
|
|
|
|
|
"frozen_meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.4 },
|
|
|
|
|
"chlorine": { elem1: null , chance:0.01 },
|
|
|
|
|
"liquid_chlorine": { elem1: null , chance:0.01 },
|
|
|
|
|
"light": { elem1: null , chance:0.01 },
|
2024-04-22 21:11:47 -04:00
|
|
|
},
|
|
|
|
|
temp: -50,
|
|
|
|
|
tempHigh: 0,
|
|
|
|
|
stateHigh: "SCP_008",
|
|
|
|
|
category: "scp",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 95,
|
|
|
|
|
},
|
2024-05-08 16:27:25 -04:00
|
|
|
|
|
|
|
|
elements.infected_skin = {
|
2024-05-20 22:16:03 -04:00
|
|
|
color: ["#75816B","#4D6B53"],
|
2024-05-08 16:27:25 -04:00
|
|
|
singleColor: true,
|
|
|
|
|
behavior: [
|
2024-05-20 22:16:03 -04:00
|
|
|
"XX|CR:stench,stench,stench,SCP_008,fly%0.05 AND CH:skin>infected_skin%25|XX",
|
|
|
|
|
"CH:skin>infected_skin%25|CH:infected_meat%0.5|CH:skin>infected_skin%25",
|
|
|
|
|
"M2%1|M1%1.0 AND CH:skin>infected_skin%25|M2%1",
|
2024-05-08 16:27:25 -04:00
|
|
|
],
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (pixel.temp > 40 && Math.random() < 0.003) {
|
|
|
|
|
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)) {
|
|
|
|
|
pixel.temp -= 20;
|
|
|
|
|
createPixel("infection",x,y)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (pixel.temp < 36 && Math.random() < 0.1) {
|
|
|
|
|
pixel.temp += 1;
|
|
|
|
|
}
|
|
|
|
|
doDefaults(pixel);
|
|
|
|
|
},
|
|
|
|
|
reactions: {
|
|
|
|
|
"cell": { chance:0.01, func:function(pixel1,pixel2){
|
|
|
|
|
changePixel(pixel2,"infected_skin");
|
|
|
|
|
pixel2.color = pixelColorPick(pixel2,RGBToHex(pixel1.color.match(/\d+/g)))
|
|
|
|
|
if (pixel1.origColor) { pixel2.origColor = pixel1.origColor }
|
|
|
|
|
} },
|
2024-05-20 22:16:03 -04:00
|
|
|
"water": { elem2:"dirty_water" },
|
|
|
|
|
"salt_water": { elem2:"dirty_water" , chance:0.5 },
|
|
|
|
|
"sugar_water": { elem2:"dirty_water" },
|
|
|
|
|
"seltzer": { elem2:"dirty_water" },
|
|
|
|
|
"meat": { elem2:"infected_meat", chance:0.5 },
|
|
|
|
|
"rotten_meat": { elem2:"infected_meat", chance:0.5 },
|
|
|
|
|
"frozen_meat": { elem2:"frozen_infected_meat", chance:0.5 },
|
|
|
|
|
"fly": { elem2: ["dead_bug","dead_bug","SCP_008"] , chance:0.2},
|
|
|
|
|
"blood": { elem2:"infection" , chance:0.6 },
|
|
|
|
|
"skin": { elem2:"infected_skin" , chance:0.6 },
|
2024-05-08 16:27:25 -04:00
|
|
|
"acid": { elem1:"infection" },
|
|
|
|
|
"soap": { elem1:null, elem2:null, chance:0.005 },
|
|
|
|
|
"light": { stain1:"#825043" },
|
|
|
|
|
"poison": { stain1:"#cc564b" },
|
|
|
|
|
"poison_gas": { stain1:"#cc564b" },
|
|
|
|
|
"infection": { stain1:"#cc564b" },
|
|
|
|
|
"pollen": { stain1:"#cc564b" },
|
|
|
|
|
"dust": { stain1:"#cc564b" },
|
|
|
|
|
"flea": { stain1:"#cc564b" },
|
|
|
|
|
"mushroom_spore": { stain1:"#cc564b" },
|
|
|
|
|
"mushroom_stalk": { stain1:"#cc564b" },
|
|
|
|
|
"chlorine": { stain1:"#cc564b" },
|
|
|
|
|
"quicklime": { stain1:"#cc564b" },
|
|
|
|
|
},
|
|
|
|
|
category:"solids",
|
|
|
|
|
breakInto: [null,null,"SCP_008","infection","dust"],
|
|
|
|
|
temp: 37,
|
|
|
|
|
tempHigh: 200,
|
|
|
|
|
stateHigh: ["cooked_meat","cooked_meat","cooked_meat","SCP_008"],
|
|
|
|
|
tempLow: -18,
|
|
|
|
|
stateLow: "frozen_008_meat",
|
|
|
|
|
burn:5,
|
|
|
|
|
burnTime:400,
|
|
|
|
|
burnInto: ["cooked_meat","cooked_meat","SCP_008"],
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1010,
|
|
|
|
|
conduct: 0.04,
|
|
|
|
|
movable: false,
|
|
|
|
|
},
|
|
|
|
|
|
2024-05-06 21:09:06 -04:00
|
|
|
elements.infected_meat = {
|
2024-05-06 13:42:02 -04:00
|
|
|
color: ["#b8b165","#b89765"],
|
|
|
|
|
behavior: [
|
2024-05-20 22:16:03 -04:00
|
|
|
"XX|CR:stench,stench,stench,SCP_008,fly%0.25 AND CH:skin>infected_skin%1|XX",
|
|
|
|
|
"SP%25 AND CH:skin>infected_skin%1|XX|SP%25 AND CH:skin>infected_skin%1",
|
|
|
|
|
"M2%0.5|M1 AND CH:meat>infected_meat%1|M2%0.5",
|
2024-05-06 13:42:02 -04:00
|
|
|
],
|
|
|
|
|
reactions: {
|
|
|
|
|
"water": { elem2:"dirty_water" },
|
2024-05-20 22:16:03 -04:00
|
|
|
"salt_water": { elem2:"dirty_water" , chance:0.5 },
|
2024-05-06 13:42:02 -04:00
|
|
|
"sugar_water": { elem2:"dirty_water" },
|
|
|
|
|
"seltzer": { elem2:"dirty_water" },
|
2024-05-20 22:16:03 -04:00
|
|
|
"meat": { elem2:"infected_meat", chance:0.5 },
|
|
|
|
|
"rotten_meat": { elem2:"infected_meat", chance:0.5 },
|
|
|
|
|
"frozen_meat": { elem2:"frozen_infected_meat", chance:0.5 },
|
|
|
|
|
"fly": { elem2: ["dead_bug","dead_bug","SCP_008"] , chance:0.2},
|
|
|
|
|
"blood": { elem2:"infection" , chance:0.6 },
|
|
|
|
|
"skin": { elem2:"infected_skin" , chance:0.6 },
|
2024-05-06 13:42:02 -04:00
|
|
|
},
|
|
|
|
|
tempHigh: 300,
|
|
|
|
|
stateHigh: ["SCP_008","ash","ammonia"],
|
|
|
|
|
tempLow: -20,
|
2024-05-06 21:09:06 -04:00
|
|
|
stateLow: "frozen_infected_meat",
|
2024-05-06 13:42:02 -04:00
|
|
|
category:"scp",
|
|
|
|
|
hidden: true,
|
|
|
|
|
burn:12,
|
|
|
|
|
burnTime:200,
|
|
|
|
|
burnInto:["SCP_008","ash","ammonia"],
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1005,
|
|
|
|
|
conduct: 0.1,
|
|
|
|
|
isFood: true
|
|
|
|
|
},
|
|
|
|
|
|
2024-05-06 21:09:06 -04:00
|
|
|
elements.frozen_infected_meat = {
|
2024-05-20 22:16:03 -04:00
|
|
|
color: ["#82AEC0","#80808F","#9CAC98"],
|
2024-05-06 13:42:02 -04:00
|
|
|
behavior: [
|
2024-05-20 22:16:03 -04:00
|
|
|
"XX|XX|XX",
|
|
|
|
|
"SP%95|XX|SP%95",
|
|
|
|
|
"XX|M1 AND CH:frozen_meat,meat>frozen_infected_meat%1|XX",
|
2024-05-06 13:42:02 -04:00
|
|
|
],
|
|
|
|
|
reactions: {
|
|
|
|
|
"water": { elem2:"dirty_water" },
|
2024-05-06 21:09:06 -04:00
|
|
|
"salt_water": { elem1:"infected_meat",elem2:"dirty_water" , chance:0.5 },
|
2024-05-06 13:42:02 -04:00
|
|
|
"sugar_water": { elem2:"dirty_water" },
|
|
|
|
|
"seltzer": { elem2:"dirty_water" },
|
2024-05-20 22:16:03 -04:00
|
|
|
"meat": { elem2:"frozen_infected_meat", chance:0.5 },
|
|
|
|
|
"rotten_meat": { elem2:"frozen_infected_meat", chance:0.5 },
|
|
|
|
|
"frozen_meat": { elem2:"frozen_infected_meat", chance:0.5 },
|
|
|
|
|
"fly": { elem2: ["dead_bug","dead_bug","SCP_008"] , chance:0.2},
|
|
|
|
|
"blood": { elem2:"infection" , chance:0.6 },
|
2024-05-06 13:42:02 -04:00
|
|
|
},
|
|
|
|
|
temp: -20,
|
|
|
|
|
tempHigh: 10,
|
2024-05-06 21:09:06 -04:00
|
|
|
stateHigh: "infected_meat",
|
2024-05-06 13:42:02 -04:00
|
|
|
category:"scp",
|
|
|
|
|
hidden: true,
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1005,
|
|
|
|
|
conduct: 0.05,
|
|
|
|
|
},
|
|
|
|
|
|
2024-04-22 21:11:47 -04:00
|
|
|
elements.possessive_mask = {
|
|
|
|
|
color: ["#f7ead0","#faf9f6","#e9e6db"],
|
|
|
|
|
category: "scp",
|
|
|
|
|
behavior: [
|
|
|
|
|
"CR:black_acid%0.1|CR:black_acid%0.5|CR:black_acid%0.1",
|
|
|
|
|
"CR:black_acid%0.5|XX|CR:black_acid%0.5",
|
|
|
|
|
"CR:black_acid%0.1|CR:black_acid%0.5 AND M1|CR:black_acid%0.1",
|
|
|
|
|
],
|
|
|
|
|
breakInto: ["porcelain_shard","porcelain_shard","black_acid","black_acid"],
|
|
|
|
|
density: 800,
|
|
|
|
|
state: "solid",
|
|
|
|
|
tempHigh: 3500,
|
|
|
|
|
stateHigh: "porcelain_shard",
|
|
|
|
|
reactions: {
|
|
|
|
|
"head": { elem1:null, elem2: "mask_head" , chance:0.2 },
|
|
|
|
|
"body": { elem1:null, elem2: "mask_body" , chance:0.1 },
|
|
|
|
|
"z_head": { elem1:null, elem2: "mask_head" , chance:0.1 },
|
|
|
|
|
"z_body": { elem1:null, elem2: "mask_body" , chance:0.05 },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.mask_body = {
|
|
|
|
|
color: ["#242424","#069469","#047e99","#7f5fb0"],
|
|
|
|
|
category: "scp",
|
|
|
|
|
hidden: true,
|
|
|
|
|
density: 1500,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
temp: 37,
|
|
|
|
|
tempHigh: 250,
|
|
|
|
|
stateHigh: "cooked_meat",
|
|
|
|
|
tempLow: -30,
|
|
|
|
|
stateLow: "frozen_meat",
|
|
|
|
|
burn: 10,
|
|
|
|
|
burnTime: 250,
|
|
|
|
|
burnInto: "cooked_meat",
|
|
|
|
|
breakInto: ["black_acid","rotten_meat","bone"],
|
|
|
|
|
reactions: {
|
|
|
|
|
"cancer": { elem1:"cancer", chance:0.005 },
|
|
|
|
|
"egg": { elem2:"yolk", chance:0.5, oneway:true },
|
|
|
|
|
},
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) { // Fall
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-2, true)) { // Drag head down
|
|
|
|
|
var headpixel = pixelMap[pixel.x][pixel.y-2];
|
|
|
|
|
if (headpixel.element == "mask_head") {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into rotten_meat if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"rotten_meat");
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the head
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "mask_head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head") { // If head is not mask head, make it one
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
changePixel(head,"mask_head");
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "z_head") { // If head is not mask head, make it one
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
changePixel(head,"mask_head");
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var head = null }
|
|
|
|
|
if (pixel.burning) {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
if (head && pixelTicks-pixel.burnStart > 240) {
|
|
|
|
|
pixel.color = head.color;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.panic > 0) {
|
|
|
|
|
pixel.panic -= 0.1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
// create black acid if decapitated 10% chance
|
|
|
|
|
if (Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("black_acid", pixel.x, pixel.y-1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (head == null) { return }
|
|
|
|
|
else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
|
|
|
|
|
var movesToTry = [
|
|
|
|
|
[1*pixel.dir,0],
|
|
|
|
|
[1*pixel.dir,-1],
|
|
|
|
|
];
|
|
|
|
|
// While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
|
|
|
|
|
while (movesToTry.length > 0) {
|
|
|
|
|
var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
|
|
|
|
|
if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
|
|
|
|
|
var origx = pixel.x+move[0];
|
|
|
|
|
var origy = pixel.y+move[1];
|
|
|
|
|
if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
|
|
|
|
|
movePixel(head, head.x+move[0], head.y+move[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 15% chance to change direction
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dir *= -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.mask_head = {
|
|
|
|
|
color: ["#f7ead0","#faf9f6","#e9e6db"],
|
|
|
|
|
category: "scp",
|
|
|
|
|
hidden: true,
|
|
|
|
|
density: 2280,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
temp: 37,
|
|
|
|
|
tempHigh: 250,
|
|
|
|
|
stateHigh: "possessive_mask",
|
|
|
|
|
tempLow: -30,
|
|
|
|
|
stateLow: "possessive_mask",
|
|
|
|
|
burn: 10,
|
|
|
|
|
burnTime: 250,
|
|
|
|
|
burnInto: "possessive_mask",
|
|
|
|
|
breakInto: "possessive_mask",
|
|
|
|
|
reactions: {
|
|
|
|
|
"cancer": { elem1: "possessive_mask", chance:0.05 },
|
|
|
|
|
"tea": { elem2:null, chance:0.2 },
|
|
|
|
|
"alcohol": { elem2:null, chance:0.2 },
|
|
|
|
|
},
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false
|
|
|
|
|
},
|
|
|
|
|
behavior: [
|
|
|
|
|
"CR:black_acid%0.1|CR:black_acid%0.5|CR:black_acid%0.1",
|
|
|
|
|
"CR:black_acid%0.5|XX|CR:black_acid%0.5",
|
|
|
|
|
"CR:black_acid%0.1|CR:black_acid%0.5 AND M1|CR:black_acid%0.1",
|
|
|
|
|
],
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into the mask if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"possessive_mask");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the body
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "mask_body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body") { // If body is not mask body, make it one
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
changePixel(body,"mask_body");
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "z_body") { // If body is not mask body, make it one
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
changePixel(body,"mask_body");
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var body = null }
|
|
|
|
|
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) {
|
|
|
|
|
// create blood if severed 10% chance
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("black_acid", pixel.x, pixel.y+1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.black_acid = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#00000f","#111111","#242424"],
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|DB%5|XX",
|
|
|
|
|
"DB%6 AND M2%10|XX|DB%6 AND M2%10",
|
|
|
|
|
"DB%6 AND M2%10|DB%11 AND M1|DB%6 AND M2%10",
|
|
|
|
|
],
|
|
|
|
|
ignore: [/*"SCP_804"*/"shy_head","shy_body","SCP_055","head","body","z_body","z_head","possessive_mask","mask_body","mask_head","glass_shard","porcelain_shard","rad_shard","color_sand","sand","iron","steel","glass","rad_glass","stained_glass","acid_gas","neutral_acid","acid_cloud","water","salt_water","sugar_water","dirty_water","copper","gold","porcelain","plastic","bead","microplastic","molten_plastic","pool_water","chlorine","hydrogen","oxygen","ozone","gold_coin","silver","nickel","calcium"],
|
|
|
|
|
reactions: {
|
|
|
|
|
"caustic_potash": { elem1:null, elem2:"potassium_salt" },
|
|
|
|
|
"water": { elem1:null, elem2:"dirty_water" },
|
|
|
|
|
"salt_water": { elem1:null, elem2:"water" },
|
|
|
|
|
"sugar_water": { elem1:null, elem2:"water" },
|
|
|
|
|
"pool_water": { elem1:null, elem2:"water" },
|
|
|
|
|
"plant": { elem1:null, elem2:"dead_plant" },
|
|
|
|
|
"tree_branch": { elem1:null, elem2:"wood" },
|
|
|
|
|
"charcoal": { elem1:null, elem2:"carbon_dioxide" },
|
|
|
|
|
"rock": { elem1:null, elem2:"sand", chance:0.05 },
|
|
|
|
|
"baking_soda": { elem1:null, elem2:["carbon_dioxide","foam"] },
|
|
|
|
|
"calcium": { elem1:null, elem2:"hydrogen", chance:0.01 },
|
|
|
|
|
"zinc": { elem1:null, elem2:null, chance:0.03 },
|
|
|
|
|
"sugar": { elem1:null, elem2:"carbon_dioxide" },
|
|
|
|
|
"glass": { elem1:null, elem2: null , chance:0.01 },
|
|
|
|
|
"rad_glass": { elem1:null, elem2: null , chance:0.01 },
|
|
|
|
|
"stained_glass": { elem1:null, elem2: null , chance:0.01 },
|
|
|
|
|
"glass_shard": { elem1:null, elem2: null , chance:0.015 },
|
|
|
|
|
"rad_shard": { elem1:null, elem2: null , chance:0.015 },
|
|
|
|
|
"porcelain_shard": { elem1:null, elem2: null , chance:0.015 },
|
|
|
|
|
"copper": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"gold": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"porcelain": { elem1:null, elem2: null , chance:0.01 },
|
|
|
|
|
"plastic": { elem1:null, elem2: null , chance:0.01 },
|
|
|
|
|
"molten_plastic": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"gold_coin": { elem1:null, elem2: "gold" , chance:0.1 },
|
|
|
|
|
"silver": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"nickel": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"calcium": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"iron": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"steel": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"concrete": { elem1:null, elem2: null , chance:0.05 },
|
|
|
|
|
"rock": { elem1:null, elem2: null , chance:0.04 },
|
|
|
|
|
"dirt": { elem1:null, elem2: null , chance:0.05 },
|
|
|
|
|
"sand": { elem1:null, elem2: null , chance:0.015 },
|
|
|
|
|
"color_sand": { elem1:null, elem2: null , chance:0.015 },
|
|
|
|
|
"mask_head": { elem1:null, elem2: "possessive_mask" , chance:0.001},
|
|
|
|
|
"mask_body": { elem1:null, elem2: null , chance:0.001 },
|
|
|
|
|
"head": { elem1:null, elem2: null , chance:0.01 },
|
|
|
|
|
"body": { elem1:null, elem2: null , chance:0.01 },
|
|
|
|
|
"z_head": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
"z_body": { elem1:null, elem2: null , chance:0.02 },
|
|
|
|
|
/*"SCP_804": { elem1:null, elem2: null , chance:0.02 },*/
|
|
|
|
|
},
|
|
|
|
|
category: "scp",
|
|
|
|
|
tempHigh: 1000,
|
|
|
|
|
stateHigh: null,
|
|
|
|
|
tempLow: -58.88,
|
|
|
|
|
burn: 30,
|
|
|
|
|
burnTime: 10,
|
2024-05-22 14:11:49 -04:00
|
|
|
burnInto: ["fire","fire","fire","fire","fire","fire","fire","fire","ash","ash","fire","fire","fire","fire","ash","ash"],
|
2024-04-22 21:11:47 -04:00
|
|
|
fireColor: "#111111",
|
|
|
|
|
state: "liquid",
|
|
|
|
|
density: 1105,
|
|
|
|
|
stain: 0.5,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.SCP_055 = {
|
|
|
|
|
color: "#00000f",
|
|
|
|
|
excludeRandom: true,
|
|
|
|
|
behavior: [
|
2024-05-20 22:16:03 -04:00
|
|
|
"XX","XX","XX",
|
|
|
|
|
"XX","CH:REDACTED","XX",
|
|
|
|
|
"XX","XX","XX"
|
2024-04-22 21:11:47 -04:00
|
|
|
],
|
|
|
|
|
category: "scp",
|
|
|
|
|
state: "solid",
|
|
|
|
|
tempHigh: 55055055055,
|
2024-05-22 14:11:49 -04:00
|
|
|
stateHigh: ["metal_scrap","metal_scrap","smoke","smoke","smoke","smoke","smoke","smoke","smoke",null],
|
2024-04-22 21:11:47 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.REDACTED = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: "#00000f",
|
|
|
|
|
excludeRandom: true,
|
|
|
|
|
behavior: [
|
2024-05-22 14:11:49 -04:00
|
|
|
"EX|CL|EX",
|
|
|
|
|
"CL|EX:99999999999999999999999>REDACTED|CL",
|
|
|
|
|
"EX|CL|EX",
|
2024-04-22 21:11:47 -04:00
|
|
|
],
|
|
|
|
|
category: "scp",
|
|
|
|
|
state: "solid",
|
2024-05-08 16:27:25 -04:00
|
|
|
movable: false,
|
2024-04-22 21:11:47 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.plague_doctor = {
|
|
|
|
|
category: "scp",
|
|
|
|
|
color: ["#f7ead0","#faf9f6","#e9e6db"],
|
|
|
|
|
category: "scp",
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1)) {
|
|
|
|
|
createPixel("doc_body", pixel.x, pixel.y+1);
|
|
|
|
|
pixel.element = "doc_head";
|
|
|
|
|
}
|
|
|
|
|
else if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
createPixel("doc_head", pixel.x, pixel.y-1);
|
|
|
|
|
pixelMap[pixel.x][pixel.y-1].color = pixel.color;
|
|
|
|
|
pixel.element = "doc_body";
|
2024-05-03 16:56:38 -04:00
|
|
|
pixel.color = pixelColorPick(pixel)
|
2024-04-22 21:11:47 -04:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
deletePixel(pixel.x, pixel.y);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
related: ["doc_body","doc_head"],
|
|
|
|
|
cooldown: defaultCooldown
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.doc_head = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#f7ead0","#faf9f6","#e9e6db"],
|
|
|
|
|
category: "scp",
|
2024-05-22 14:11:49 -04:00
|
|
|
breakInto: ["rotten_meat","bone","bone","blood"],
|
2024-04-22 21:11:47 -04:00
|
|
|
properties: {
|
|
|
|
|
dead: false
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into rotten_meat if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"rotten_meat");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the body
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "doc_body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var body = null }
|
|
|
|
|
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) {
|
|
|
|
|
// create blood if severed 10% chance
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y+1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
},
|
|
|
|
|
density: 1100,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
tempHigh: 350,
|
|
|
|
|
stateHigh: "rotten_meat",
|
|
|
|
|
burn: .01,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: "rotten_meat",
|
|
|
|
|
reactions: {
|
|
|
|
|
"alcohol": { elem2 : null , chance:0.5 },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.doc_body = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#11111f","#242424"],
|
|
|
|
|
category: "scp",
|
2024-05-22 14:11:49 -04:00
|
|
|
breakInto: ["rotten_meat","rotten_meat","bone","blood"],
|
2024-04-22 21:11:47 -04:00
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) { // Fall
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-2, true)) { // Drag head down
|
|
|
|
|
var headpixel = pixelMap[pixel.x][pixel.y-2];
|
|
|
|
|
if (headpixel.element == "doc_head") {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into bone if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"bone");
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the head
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "doc_head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var head = null }
|
|
|
|
|
if (pixel.burning) {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
if (head && pixelTicks-pixel.burnStart > 240) {
|
|
|
|
|
pixel.color = head.color;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.panic > 0) {
|
|
|
|
|
pixel.panic -= 0.1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
// create blood if decapitated 10% chance
|
|
|
|
|
if (Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y-1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (head == null) { return }
|
|
|
|
|
else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
|
|
|
|
|
var movesToTry = [
|
|
|
|
|
[1*pixel.dir,0],
|
|
|
|
|
[1*pixel.dir,-1],
|
|
|
|
|
];
|
|
|
|
|
// While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
|
|
|
|
|
while (movesToTry.length > 0) {
|
|
|
|
|
var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
|
|
|
|
|
if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
|
|
|
|
|
var origx = pixel.x+move[0];
|
|
|
|
|
var origy = pixel.y+move[1];
|
|
|
|
|
if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
|
|
|
|
|
movePixel(head, head.x+move[0], head.y+move[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 15% chance to change direction
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dir *= -1;
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
density: 1100,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .005,
|
|
|
|
|
tempHigh: 350,
|
|
|
|
|
stateHigh: "rotten_meat",
|
|
|
|
|
burn: .01,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: "rotten_meat",
|
|
|
|
|
reactions: {
|
|
|
|
|
"head": { elem2 : "z_head" , chance:0.3},
|
|
|
|
|
"body": { elem2 : "z_body" , chance:0.3},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.zombie = {
|
|
|
|
|
color: ["#75816B","#4D6B53"],
|
|
|
|
|
category: "scp",
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1)) {
|
|
|
|
|
createPixel("z_body", pixel.x, pixel.y+1);
|
|
|
|
|
pixel.element = "z_head";
|
|
|
|
|
}
|
|
|
|
|
else if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
createPixel("z_head", pixel.x, pixel.y-1);
|
|
|
|
|
pixelMap[pixel.x][pixel.y-1].color = pixel.color;
|
|
|
|
|
pixel.element = "z_body";
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
deletePixel(pixel.x, pixel.y);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
related: ["z_body","z_head"],
|
|
|
|
|
cooldown: defaultCooldown
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.z_head = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#75816B","#4D6B53"],
|
|
|
|
|
category: "scp",
|
2024-05-22 14:11:49 -04:00
|
|
|
breakInto: ["rotten_meat","bone","bone","blood"],
|
2024-04-22 21:11:47 -04:00
|
|
|
properties: {
|
|
|
|
|
dead: false
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into rotten_meat if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"rotten_meat");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the body
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "z_body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var body = null }
|
|
|
|
|
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) {
|
|
|
|
|
// create blood if severed 10% chance
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("infection", pixel.x, pixel.y+1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
},
|
|
|
|
|
density: 1030,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
tempHigh: 250,
|
|
|
|
|
stateHigh: "rotten_meat",
|
|
|
|
|
burn: .01,
|
|
|
|
|
burnTime: 200,
|
|
|
|
|
burnInto: "rotten_meat",
|
|
|
|
|
reactions: {
|
|
|
|
|
"head": { elem2 : "z_head" , chance:1.0 },
|
|
|
|
|
"body": { elem2 : "z_body" , chance:1.0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.z_body = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#11111f","#069469","#047e99","#7f5fb0"],
|
|
|
|
|
category: "scp",
|
2024-05-22 14:11:49 -04:00
|
|
|
breakInto: ["rotten_meat","rotten_meat","bone","blood"],
|
2024-04-22 21:11:47 -04:00
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) { // Fall
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-2, true)) { // Drag head down
|
|
|
|
|
var headpixel = pixelMap[pixel.x][pixel.y-2];
|
|
|
|
|
if (headpixel.element == "z_head") {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into bone if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"rotten_meat");
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the head
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "z_head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var head = null }
|
|
|
|
|
if (pixel.burning) {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
if (head && pixelTicks-pixel.burnStart > 240) {
|
|
|
|
|
pixel.color = head.color;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.panic > 0) {
|
|
|
|
|
pixel.panic -= 0.1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
// create blood if decapitated 10% chance
|
|
|
|
|
if (Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("infection", pixel.x, pixel.y-1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (head == null) { return }
|
|
|
|
|
else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
|
|
|
|
|
var movesToTry = [
|
|
|
|
|
[1*pixel.dir,0],
|
|
|
|
|
[1*pixel.dir,-1],
|
|
|
|
|
];
|
|
|
|
|
// While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
|
|
|
|
|
while (movesToTry.length > 0) {
|
|
|
|
|
var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
|
|
|
|
|
if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
|
|
|
|
|
var origx = pixel.x+move[0];
|
|
|
|
|
var origy = pixel.y+move[1];
|
|
|
|
|
if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
|
|
|
|
|
movePixel(head, head.x+move[0], head.y+move[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 15% chance to change direction
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dir *= -1;
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
density: 1035,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
tempHigh: 250,
|
|
|
|
|
stateHigh: "rotten_meat",
|
|
|
|
|
burn: .01,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: "rotten_meat",
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
reactions: {
|
2024-05-22 14:11:49 -04:00
|
|
|
"head": { elem2 : "z_head" , chance:1.0 },
|
2024-04-22 21:11:47 -04:00
|
|
|
"body": { elem2 : "z_body" , chance:1.0 },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.shy_guy = {
|
|
|
|
|
category: "scp",
|
|
|
|
|
color: ["#f7ead0","#faf9f6","#e9e6db"],
|
|
|
|
|
category: "scp",
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1)) {
|
|
|
|
|
createPixel("shy_body", pixel.x, pixel.y+1);
|
|
|
|
|
pixel.element = "shy_head";
|
|
|
|
|
}
|
|
|
|
|
else if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
createPixel("shy_head", pixel.x, pixel.y-1);
|
|
|
|
|
pixelMap[pixel.x][pixel.y-1].color = pixel.color;
|
|
|
|
|
pixel.element = "shy_body";
|
|
|
|
|
pixel.color = pixelColorPick(pixel)
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
deletePixel(pixel.x, pixel.y);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
related: ["shy_body","shy_head"],
|
|
|
|
|
cooldown: defaultCooldown
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.shy_head = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#f7ead0","#faf9f6","#e9e6db"],
|
|
|
|
|
category: "scp",
|
2024-05-22 14:11:49 -04:00
|
|
|
breakInto: ["rotten_meat","bone","bone","blood","bone","bone","blood","bone","bone","blood","bone","bone","blood"],
|
2024-04-22 21:11:47 -04:00
|
|
|
properties: {
|
|
|
|
|
dead: false
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into rotten_meat if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"bone");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the body
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "shy_body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var body = null }
|
|
|
|
|
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) {
|
|
|
|
|
// create blood if severed 10% chance
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y+1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-05-06 15:25:23 -04:00
|
|
|
}
|
2024-04-22 21:11:47 -04:00
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
},
|
|
|
|
|
density: 1070,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
tempHigh: 3500,
|
|
|
|
|
stateHigh: "bone",
|
|
|
|
|
burn: .01,
|
|
|
|
|
burnTime: 3000,
|
|
|
|
|
burnInto: "bone",
|
|
|
|
|
reactions: {
|
2024-05-03 16:22:17 -04:00
|
|
|
"homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] },
|
|
|
|
|
"head": { elem2 : ["blood","blood","blood","bone",null] },
|
|
|
|
|
"body": { elem2: ["blood","blood","meat","bone",null] },
|
|
|
|
|
"z_head": { elem2 : ["infection","infection","infection","bone",null] },
|
|
|
|
|
"z_body": { elem2: ["infection","infection","rotten_meat","bone",null] },
|
2024-04-22 21:11:47 -04:00
|
|
|
"rat": { elem2: ["infection","rotten_meat",null]},
|
|
|
|
|
"frog": { elem2: ["slime",null] },
|
|
|
|
|
"cancer": { elem2: ["dna","dirty_water",null], },
|
|
|
|
|
"blood": { elem2: null, chance:0.2 },
|
|
|
|
|
"bone": { elem2: null, chance:0.2 },
|
|
|
|
|
"meat": { elem2: [null,null,null,null,null,null,"rotten_meat"], chance:0.15 },
|
|
|
|
|
"dna": { elem2: null, chance:0.2 },
|
|
|
|
|
"water": { elem2: "dirty_water", chance:0.01 },
|
|
|
|
|
"slime": { elem2: ["dirty_water",null], chance:0.2 },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.shy_body = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#f7ead0","#faf9f6","#e9e6db"],
|
|
|
|
|
category: "scp",
|
2024-05-22 14:11:49 -04:00
|
|
|
breakInto: ["rotten_meat","bone","blood","bone","bone","blood","bone","bone","blood","bone","bone","blood"],
|
2024-04-22 21:11:47 -04:00
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
2024-05-20 22:16:03 -04:00
|
|
|
panic: 0,
|
|
|
|
|
anger: 0
|
2024-04-22 21:11:47 -04:00
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) { // Fall
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-2, true)) { // Drag head down
|
|
|
|
|
var headpixel = pixelMap[pixel.x][pixel.y-2];
|
|
|
|
|
if (headpixel.element == "shy_head") {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into bone if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"bone");
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the head
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "shy_head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var head = null }
|
|
|
|
|
if (pixel.burning) {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
if (head && pixelTicks-pixel.burnStart > 240) {
|
|
|
|
|
pixel.color = head.color;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.panic > 0) {
|
|
|
|
|
pixel.panic -= 0.1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
// create blood if decapitated 10% chance
|
|
|
|
|
if (Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y-1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (head == null) { return }
|
|
|
|
|
else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
|
|
|
|
|
var movesToTry = [
|
|
|
|
|
[1*pixel.dir,0],
|
|
|
|
|
[1*pixel.dir,-1],
|
|
|
|
|
];
|
|
|
|
|
// While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
|
|
|
|
|
while (movesToTry.length > 0) {
|
|
|
|
|
var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
|
|
|
|
|
if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
|
|
|
|
|
var origx = pixel.x+move[0];
|
|
|
|
|
var origy = pixel.y+move[1];
|
|
|
|
|
if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
|
|
|
|
|
movePixel(head, head.x+move[0], head.y+move[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 15% chance to change direction
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dir *= -1;
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
2024-05-20 22:16:03 -04:00
|
|
|
if (pixel.dir == 1) {
|
|
|
|
|
if (!isEmpty(pixel.x+2, pixel.y-1, true) && pixelMap[pixel.x+2][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+3, pixel.y-1, true) && pixelMap[pixel.x+2][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+4, pixel.y-1, true) && pixelMap[pixel.x+4][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+5, pixel.y-1, true) && pixelMap[pixel.x+5][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+5, pixel.y-1, true) && pixelMap[pixel.x+5][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+6, pixel.y-1, true) && pixelMap[pixel.x+6][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+7, pixel.y-1, true) && pixelMap[pixel.x+7][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+8, pixel.y-1, true) && pixelMap[pixel.x+8][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.dir == -1) {
|
|
|
|
|
if (!isEmpty(pixel.x-2, pixel.y-1, true) && pixelMap[pixel.x-2][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-3, pixel.y-1, true) && pixelMap[pixel.x-3][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-4, pixel.y-1, true) && pixelMap[pixel.x-4][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-5, pixel.y-1, true) && pixelMap[pixel.x-5][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-5, pixel.y-1, true) && pixelMap[pixel.x-5][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-6, pixel.y-1, true) && pixelMap[pixel.x-6][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-7, pixel.y-1, true) && pixelMap[pixel.x-7][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-8, pixel.y-1, true) && pixelMap[pixel.x-8][pixel.y-1].element == "head") {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-04-22 21:11:47 -04:00
|
|
|
},
|
|
|
|
|
density: 1080,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .005,
|
|
|
|
|
tempHigh: 3500,
|
|
|
|
|
stateHigh: "bone",
|
|
|
|
|
burn: .01,
|
|
|
|
|
burnTime: 3000,
|
|
|
|
|
burnInto: "bone",
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
reactions: {
|
2024-05-03 16:22:17 -04:00
|
|
|
"homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] },
|
|
|
|
|
"head": { elem2 : ["blood","blood","blood","bone",null] },
|
|
|
|
|
"body": { elem2: ["blood","blood","meat","bone",null] },
|
|
|
|
|
"z_head": { elem2 : ["infection","infection","infection","bone",null] },
|
|
|
|
|
"z_body": { elem2: ["infection","infection","rotten_meat","bone",null] },
|
|
|
|
|
"rat": { elem2: ["infection","infection","plague"] },
|
2024-04-22 21:11:47 -04:00
|
|
|
"frog": { elem2: "slime" },
|
|
|
|
|
"cell": { elem2: ["dna","water",null] },
|
|
|
|
|
"cancer": { elem2: ["dna","dirty_water"] },
|
|
|
|
|
"water": { elem2: "dirty_water", chance:0.01 },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.SCP_682 = {
|
|
|
|
|
color: ["#424242","#75816B","#4D6B53"],
|
|
|
|
|
behavior: [
|
|
|
|
|
"M2%0.5|M2%0.3|M2%0.5",
|
2024-05-07 14:51:36 -04:00
|
|
|
"M2%10|XX|M2%10",
|
2024-04-22 21:11:47 -04:00
|
|
|
"XX|M1|XX",
|
|
|
|
|
],
|
|
|
|
|
category: "scp",
|
|
|
|
|
density: 7500,
|
|
|
|
|
reactions: {
|
2024-05-03 16:22:17 -04:00
|
|
|
"head": { elem2 : ["bone","blood",null] , chance:50 },
|
|
|
|
|
"body": { elem1 : "mad_682" , elem2 : ["meat","blood",null] , chance:50 },
|
|
|
|
|
"z_head": { elem2 : ["infection","infection","infection","bone",null] , chance:50 },
|
|
|
|
|
"z_body": { elem1 : "mad_682" , elem2: ["infection","infection","rotten_meat","bone",null] , chance:50 },
|
|
|
|
|
"homunculus": { elem2 : ["slime","blood",null] , chance:10 },
|
|
|
|
|
"rat": { elem2: ["infection","infection","plague"] },
|
2024-04-22 21:11:47 -04:00
|
|
|
"frog": { elem2 : ["slime","blood",null] , chance:10 },
|
|
|
|
|
"bird": { elem2 : ["feather","blood",null] , chance:10 },
|
|
|
|
|
"meat": { elem2 : null , chance:0.2 },
|
|
|
|
|
"cooked_meat": { elem2 : null , chance:0.3 },
|
|
|
|
|
"tickle_monster": { elem1 : "calm_682" , chance:0.1 },
|
|
|
|
|
"acid": { elem1 : "calm_682" , chance:0.2 },
|
|
|
|
|
"rotten_meat": { elem2 : null , chance:0.1 },
|
|
|
|
|
"blood": { elem2 : null , chance:0.2 },
|
|
|
|
|
"bone": { elem2 : ["blood",null,null] , chance:0.1 },
|
|
|
|
|
"bone_marrow": { elem2 : ["blood",null] , chance:0.1 },
|
|
|
|
|
"aluminum": { elem2 : "metal_scrap" , chance:0.07 },
|
|
|
|
|
"steel": { elem2 : "metal_scrap" , chance:0.05 },
|
|
|
|
|
"iron": { elem2 : "metal_scrap" , chance:0.08 },
|
|
|
|
|
"glass": { elem2 : "glass_shard" , chance:0.1 },
|
|
|
|
|
"wood": { elem2 : "sawdust" , chance:0.1 },
|
|
|
|
|
"concrete": { elem2 : "dust" , chance:0.05 },
|
|
|
|
|
"dust": { elem2 : null , chance:0.1 },
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
hardness: 1,
|
|
|
|
|
conduct: .1,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.calm_682 = {
|
|
|
|
|
color: ["#424242","#75816B","#4D6B53"],
|
|
|
|
|
behavior: [
|
|
|
|
|
"M2%0.5|M2%0.3|M2%0.5",
|
|
|
|
|
"M1%10|CH:mad_682%0.5|M1%10",
|
|
|
|
|
"XX|M1|XX",
|
|
|
|
|
],
|
|
|
|
|
category: "scp",
|
|
|
|
|
density: 7350,
|
|
|
|
|
excludeRandom: true,
|
|
|
|
|
reactions: {
|
|
|
|
|
"meat": { elem2 : null , chance:0.2 },
|
|
|
|
|
"bone": { elem2 : null , chance:0.1 },
|
|
|
|
|
"blood": { elem2 : null , chance:0.1 },
|
|
|
|
|
"cooked_meat": { elem2 : null , chance:0.3 },
|
|
|
|
|
"acid": { elem1 : "calm_682" , chance:0.05 },
|
|
|
|
|
"tickle_monster": { elem1 : "calm_682" , chance:99.9 },
|
|
|
|
|
},
|
|
|
|
|
hidden: true,
|
|
|
|
|
state: "solid",
|
|
|
|
|
hardness: 1,
|
|
|
|
|
conduct: .1,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.mad_682 = {
|
|
|
|
|
color: ["#424242","#75816B","#4D6B53"],
|
|
|
|
|
behavior: [
|
|
|
|
|
"M2%0.5|M2%0.3|M2%0.5",
|
2024-05-07 14:51:36 -04:00
|
|
|
"M2%10|CH:SCP_682%0.3|M2%10",
|
2024-04-22 21:11:47 -04:00
|
|
|
"XX|M1|XX",
|
|
|
|
|
],
|
|
|
|
|
category: "scp",
|
|
|
|
|
density: 8000,
|
|
|
|
|
excludeRandom: true,
|
|
|
|
|
reactions: {
|
|
|
|
|
"head": { elem2 : ["bone","blood",null] },
|
|
|
|
|
"body": { elem2 : ["meat","blood",null] },
|
2024-05-03 16:22:17 -04:00
|
|
|
"z_head": { elem2 : ["bone","infection",null] },
|
|
|
|
|
"z_body": { elem2 : ["meat","infection",null] },
|
2024-04-22 21:11:47 -04:00
|
|
|
"homunculus": { elem2 : ["slime","blood",null] },
|
|
|
|
|
"frog": { elem2 : ["slime","blood",null] },
|
|
|
|
|
"bird": { elem2 : ["feather","blood",null] },
|
|
|
|
|
"meat": { elem2 : null , chance:0.5 },
|
|
|
|
|
"cooked_meat": { elem2 : null , chance:0.5 },
|
|
|
|
|
"rotten_meat": { elem2 : null , chance:0.2 },
|
|
|
|
|
"blood": { elem2 : null , chance:0.5 },
|
|
|
|
|
"bone": { elem2 : ["blood",null,null] , chance:0.2 },
|
|
|
|
|
"bone_marrow": { elem2 : ["blood",null] , chance:0.2 },
|
|
|
|
|
"aluminum": { elem2 : "metal_scrap" , chance:1.0 },
|
|
|
|
|
"steel": { elem2 : "metal_scrap" , chance:0.2 },
|
|
|
|
|
"iron": { elem2 : "metal_scrap" , chance:0.3 },
|
|
|
|
|
"lead": { elem2 : ["metal_scrap","metal_scrap","radiation"] , chance:0.3 },
|
|
|
|
|
"glass": { elem2 : "glass_shard" },
|
|
|
|
|
"wood": { elem2 : "sawdust" },
|
2024-05-07 14:51:36 -04:00
|
|
|
"concrete": { elem2 : "dust" , chance:10 },
|
|
|
|
|
"dust": { elem2 : null , chance:10 },
|
2024-04-22 21:11:47 -04:00
|
|
|
},
|
|
|
|
|
hidden: true,
|
|
|
|
|
state: "solid",
|
|
|
|
|
hardness: 1,
|
|
|
|
|
conduct: .1,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// SCP-804 WIP template
|
|
|
|
|
/*
|
|
|
|
|
elements.SCP_804 = {
|
|
|
|
|
color:"#beigeish",
|
|
|
|
|
category: "scp",
|
|
|
|
|
excludeRandom: true,
|
|
|
|
|
state: "solid",
|
|
|
|
|
},
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
elements.tickle_monster = {
|
|
|
|
|
color: "#FFA500",
|
|
|
|
|
behavior: [
|
|
|
|
|
"M2%0.5|M2%0.3 AND CR:fragrance%0.05|M2%0.5",
|
|
|
|
|
"M1%10|XX|M1%10",
|
|
|
|
|
"XX|M1|XX",
|
|
|
|
|
],
|
|
|
|
|
category: "scp",
|
|
|
|
|
density: 550,
|
|
|
|
|
reactions: {
|
|
|
|
|
"sugar_water": { elem2 : "water" , chance:0.2 },
|
|
|
|
|
"dirty_water": { elem2 : "water" , chance:0.2 },
|
|
|
|
|
"candy": { elem2 : null },
|
|
|
|
|
"sugar": { elem2 : null },
|
|
|
|
|
"sauce": { elem2 : null },
|
|
|
|
|
"salt": { elem2 : null , chance:0.2 },
|
|
|
|
|
"cheese": { elem2 : null , chance:0.2 },
|
|
|
|
|
"melted_cheese": { elem2 : null },
|
|
|
|
|
"baked_potato": { elem2 : null , chance:0.2 },
|
|
|
|
|
"mashed_potato": { elem2 : null , chance:0.2 },
|
|
|
|
|
"bread": { elem2 : null , chance:0.2 },
|
|
|
|
|
"toast": { elem2 : null , chance:0.2 },
|
|
|
|
|
"jelly": { elem2 : null },
|
|
|
|
|
"nut_butter": { elem2 : null },
|
|
|
|
|
"grape": { elem2 : null , chance:0.2 },
|
|
|
|
|
"ice_cream": { elem2 : null },
|
|
|
|
|
"juice": { elem2 : null },
|
|
|
|
|
"milk": { elem2 : null },
|
|
|
|
|
"gingerbread": { elem2 : null , chance:0.2 },
|
|
|
|
|
"crumb": { elem2 : null , chance:0.2 },
|
|
|
|
|
"cream": { elem2 : null },
|
|
|
|
|
"baked_batter": { elem2 : null },
|
|
|
|
|
"frozen_yogurt": { elem2 : null },
|
|
|
|
|
"yogurt": { elem2 : null },
|
|
|
|
|
"popcorn": { elem2 : null , chance:0.2 },
|
|
|
|
|
"chocolate": { elem2 : null },
|
|
|
|
|
"chocolate_milk": { elem2 : null },
|
|
|
|
|
"melted_chocolate": { elem2 : null },
|
|
|
|
|
"caramel": { elem2 : null },
|
|
|
|
|
"ash": { elem2 : null , chance:0.2 },
|
|
|
|
|
"dust": { elem2 : null , chance:0.2 },
|
|
|
|
|
"alchohol": { elem1 : "hyper_tickle_monster", elem2 : null },
|
|
|
|
|
"pilk": { elem1 : "hyper_tickle_monster", elem2 : null },
|
|
|
|
|
"coffee_bean": { elem1 : "hyper_tickle_monster", elem2 : null },
|
|
|
|
|
"coffee_ground": { elem1 : "hyper_tickle_monster", elem2 : null },
|
|
|
|
|
"soda": { elem1 : "hyper_tickle_monster", elem2 : null },
|
|
|
|
|
"coffee": { elem1 : "hyper_tickle_monster", elem2 : null },
|
|
|
|
|
"seltzer": { elem1 : "hyper_tickle_monster", elem2 : null },
|
|
|
|
|
},
|
|
|
|
|
state: "liquid",
|
|
|
|
|
conduct: .5,
|
|
|
|
|
temp: 20,
|
|
|
|
|
tempHigh: 350,
|
|
|
|
|
stateHigh: ["smoke","smoke","smoke","slime","anomalous_essence"],
|
|
|
|
|
burn: .1,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["smoke","smoke","smoke","slime","anomalous_essence"],
|
|
|
|
|
stain: 0.03,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.hyper_tickle_monster = {
|
|
|
|
|
color: "#FFA500",
|
|
|
|
|
hidden: true,
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|CH:tickle_monster%1.0|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
tick: behaviors.BOUNCY,
|
|
|
|
|
category: "scp",
|
|
|
|
|
density: 575,
|
|
|
|
|
reactions: {
|
|
|
|
|
"sugar_water": { elem2 : "water" },
|
|
|
|
|
"dirty_water": { elem2 : "water" },
|
2024-05-20 22:16:03 -04:00
|
|
|
"candy": { elem2 : null },
|
|
|
|
|
"sugar": { elem2 : null },
|
2024-04-22 21:11:47 -04:00
|
|
|
"sauce": { elem2 : null },
|
|
|
|
|
"salt": { elem2 : null },
|
|
|
|
|
"cheese": { elem2 : null },
|
|
|
|
|
"melted_cheese": { elem2 : null },
|
|
|
|
|
"baked_potato": { elem2 : null },
|
|
|
|
|
"mashed_potato": { elem2 : null },
|
|
|
|
|
"bread": { elem2 : null },
|
|
|
|
|
"toast": { elem2 : null },
|
|
|
|
|
"jelly": { elem2 : null },
|
|
|
|
|
"nut_butter": { elem2 : null },
|
|
|
|
|
"grape": { elem2 : null },
|
|
|
|
|
"ice_cream": { elem2 : null },
|
|
|
|
|
"juice": { elem2 : null },
|
|
|
|
|
"milk": { elem2 : null },
|
|
|
|
|
"gingerbread": { elem2 : null },
|
|
|
|
|
"crumb": { elem2 : null },
|
|
|
|
|
"cream": { elem2 : null },
|
|
|
|
|
"baked_batter": { elem2 : null },
|
|
|
|
|
"frozen_yogurt": { elem2 : null },
|
|
|
|
|
"yogurt": { elem2 : null },
|
|
|
|
|
"popcorn": { elem2 : null },
|
|
|
|
|
"chocolate": { elem2 : null },
|
|
|
|
|
"chocolate_milk": { elem2 : null },
|
|
|
|
|
"melted_chocolate": { elem2 : null },
|
|
|
|
|
"alchohol": { elem2 : null },
|
|
|
|
|
"pilk": { elem2 : null },
|
2024-05-20 22:16:03 -04:00
|
|
|
"soda": { elem2 : null },
|
2024-04-22 21:11:47 -04:00
|
|
|
"coffee": { elem2 : null },
|
|
|
|
|
"seltzer": { elem2 : null },
|
|
|
|
|
},
|
|
|
|
|
state: "liquid",
|
|
|
|
|
conduct: .5,
|
|
|
|
|
temp: 20,
|
|
|
|
|
tempHigh: 350,
|
|
|
|
|
stateHigh: ["smoke","smoke","smoke","slime","anomalous_essence"],
|
|
|
|
|
burn: .1,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["smoke","smoke","smoke","slime","anomalous_essence"],
|
|
|
|
|
stain: 0.08,
|
|
|
|
|
};
|
|
|
|
|
|
2024-05-03 16:22:17 -04:00
|
|
|
// SCPs with ID over 999 here
|