/* by nekonico */ window.addEventListener("load", () => { document.getElementById("elementButton-head_008")?.remove() document.getElementById("elementButton-body_008")?.remove() document.getElementById("elementButton-head_012_1")?.remove() document.getElementById("elementButton-body_012_1")?.remove() document.getElementById("elementButton-complete_012")?.remove() document.getElementById("elementButton-head_035")?.remove() document.getElementById("elementButton-body_035")?.remove() document.getElementById("elementButton-head_049")?.remove() document.getElementById("elementButton-body_049")?.remove() document.getElementById("elementButton-head_049_1")?.remove() document.getElementById("elementButton-body_049_1")?.remove() document.getElementById("elementButton-head_173")?.remove() document.getElementById("elementButton-body_173")?.remove() document.getElementById("elementButton-scp_229")?.remove() document.getElementById("elementButton-head_457")?.remove() document.getElementById("elementButton-body_457")?.remove() document.getElementById("elementButton-head_1000")?.remove() document.getElementById("elementButton-body_1000")?.remove() document.getElementById("elementButton-head_1015")?.remove() document.getElementById("elementButton-body_1015")?.remove() document.getElementById("elementButton-penny_converter")?.remove() document.getElementById("elementButton-scp_1600_1")?.remove() document.getElementById("elementButton-infected_blood")?.remove() document.getElementById("elementButton-infected_meat")?.remove() document.getElementById("elementButton-frozen_infected_meat")?.remove() document.getElementById("elementButton-red_snow")?.remove() document.getElementById("elementButton-packed_red_snow")?.remove() document.getElementById("elementButton-red_snow_cloud")?.remove() document.getElementById("elementButton-red_plant")?.remove() document.getElementById("elementButton-scp_009_meat")?.remove() document.getElementById("elementButton-scp_009_plant")?.remove() document.getElementById("elementButton-red_cloud")?.remove() document.getElementById("elementButton-red_rain")?.remove() document.getElementById("elementButton-shy_head")?.remove() document.getElementById("elementButton-shy_body")?.remove() document.getElementById("elementButton-REDACTED")?.remove() }) hex_is_light = function(color) { hex = color.replace('#', ''); c_r = parseInt(hex.substring(0, 0 + 2), 16); c_g = parseInt(hex.substring(2, 2 + 2), 16); c_b = parseInt(hex.substring(4, 4 + 2), 16); brightness = ((c_r * 334) + (c_g * 334) + (c_b * 332)) / 1000; if (brightness > 127.5) { return true } else { return false } } if (!elements.human.reactions) { elements.human.reactions = {}; } elements.human.reactions.scp_055 = { attr1:{panic:5000} } elements.human.reactions.scp_682 = { attr1:{panic:5} } elements.human.reactions.body_008 = { attr1:{panic:5} } elements.human.reactions.head_008 = { attr1:{panic:5} } elements.human.reactions.body_049_1 = { attr1:{panic:5} } elements.human.reactions.head_049_1 = { attr1:{panic:5} } elements.human.reactions.scp_096 = { attr1:{panic:5} } elements.human.reactions.scp_229 = { attr1:{panic:5} } elements.human.reactions.scp_999 = { attr1:{panic:0} } elements.human.reactions.black_acid = { attr1:{panic:1} } hyperCoords = [ [0,1], [0,1], [1,-1], [-1,-1], [1,0], [-1,0], [1,0], [-1,0] ]; destroyCoords = [ [0,1], [0,-1], [0,-1], [1,0], [1,0], [-1,0], [-1,0] ]; elements.metanarrative_ontokinetic_hume_stabilizing_anomaly_neutralizing_all_powerful_eraser = { color: ["#FDB5FF","#FDB5FF","#D397D5","#A979AA","#7F5B80","#543C55","#2A1E2B","#000000","#000000"], behavior: [ "DL|DL|DL", "DL|DL|DL", "DL|DL|DL", ], tool: function(pixel) { pixel.del = true }, category: "tools", canPlace: false, desc: "Use on something to truly delete it.", hidden: true, } elements.site_nuke = { color: "#815E2B", behavior: behaviors.WALL, behaviorOn: [ "XX|XX|XX", "XX|EX:250>molten_glass,molten_glass,plasma,plasma,plasma,plasma,plasma,plasma,plasma,radiation,radiation,radiation,rad_steam,electric,electric,electric|XX", "M2|M1|M2", ], conduct: 1, category: "scp", state: "solid", density: 1500, excludeRandom: true, } elements.d_class = { // color: ["#f5eac6","#d4c594","#a89160","#7a5733","#523018","#361e0e"], color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], buttonColor: ["#A36A19","#BA7613","#C67B0F"], name: "D-Class", category: "scp", properties: { dead: false, dir: 1, panic: 0 }, onPlace: function(pixel) { if (isEmpty(pixel.x, pixel.y+1)) { createPixel("body", pixel.x, pixel.y+1); pixelMap[pixel.x][pixel.y+1].color = pixelColorPick(pixelMap[pixel.x][pixel.y+1], elements.d_class.buttonColor) var color = pixel.color; changePixel(pixel,"head"); pixel.color = color; } else if (isEmpty(pixel.x, pixel.y-1)) { createPixel("head", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixel.color; changePixel(pixel,"body"); pixel.color = pixelColorPick(pixel, elements.d_class.buttonColor); } else { deletePixel(pixel.x, pixel.y); } }, reactions: { "fire": { attr1:{panic:5} }, "plasma": { attr1:{panic:5} }, "cold_fire": { attr1:{panic:5} }, "electric": { attr1:{panic:5} }, "blood": { attr1:{panic:1} }, "infection": { attr1:{panic:2} }, "cancer": { attr1:{panic:3} }, "plague": { attr1:{panic:5} }, "radiation": { attr1:{panic:5} }, "tnt": { attr1:{panic:5} }, "dynamite": { attr1:{panic:5} }, "c4": { attr1:{panic:5} }, "grenade": { attr1:{panic:5} }, "gunpowder": { attr1:{panic:5} }, "acid": { attr1:{panic:5} }, "acid_gas": { attr1:{panic:5} }, "stench": { attr1:{panic:2} } }, related: ["body","head"], cooldown: defaultCooldown, forceSaveColor: true, } elements.scientist = { // color: ["#f5eac6","#d4c594","#a89160","#7a5733","#523018","#361e0e"], color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], buttonColor: ["#EDEEF7","#D9D9E7","#F8F7FC","#C6C8DC","#D0DCF1"], name: "Researcher", category: "scp", properties: { dead: false, dir: 1, panic: 0 }, onPlace: function(pixel) { if (isEmpty(pixel.x, pixel.y+1)) { createPixel("body", pixel.x, pixel.y+1); pixelMap[pixel.x][pixel.y+1].color = pixelColorPick(pixelMap[pixel.x][pixel.y+1], elements.scientist.buttonColor) var color = pixel.color; changePixel(pixel,"head"); pixel.color = color; } else if (isEmpty(pixel.x, pixel.y-1)) { createPixel("head", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixel.color; changePixel(pixel,"body"); pixel.color = pixelColorPick(pixel, elements.scientist.buttonColor); } else { deletePixel(pixel.x, pixel.y); } }, reactions: { "fire": { attr1:{panic:5} }, "plasma": { attr1:{panic:5} }, "cold_fire": { attr1:{panic:5} }, "electric": { attr1:{panic:5} }, "blood": { attr1:{panic:1} }, "infection": { attr1:{panic:2} }, "cancer": { attr1:{panic:3} }, "plague": { attr1:{panic:5} }, "radiation": { attr1:{panic:5} }, "tnt": { attr1:{panic:5} }, "dynamite": { attr1:{panic:5} }, "c4": { attr1:{panic:5} }, "grenade": { attr1:{panic:5} }, "gunpowder": { attr1:{panic:5} }, "acid": { attr1:{panic:5} }, "acid_gas": { attr1:{panic:5} }, "stench": { attr1:{panic:2} } }, related: ["body","head"], cooldown: defaultCooldown, forceSaveColor: true, } elements.guard = { // color: ["#f5eac6","#d4c594","#a89160","#7a5733","#523018","#361e0e"], color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], buttonColor: ["#848692","#2B2A30","#515159","#3A393F"], name: "Security Guard", category: "scp", properties: { dead: false, dir: 1, panic: 0 }, onPlace: function(pixel) { if (isEmpty(pixel.x, pixel.y+1)) { createPixel("body", pixel.x, pixel.y+1); pixelMap[pixel.x][pixel.y+1].color = pixelColorPick(pixelMap[pixel.x][pixel.y+1], elements.guard.buttonColor) var color = pixel.color; changePixel(pixel,"head"); pixel.color = color; } else if (isEmpty(pixel.x, pixel.y-1)) { createPixel("head", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixel.color; changePixel(pixel,"body"); pixel.color = pixelColorPick(pixel, elements.guard.buttonColor); } else { deletePixel(pixel.x, pixel.y); } }, reactions: { "fire": { attr1:{panic:5} }, "plasma": { attr1:{panic:5} }, "cold_fire": { attr1:{panic:5} }, "electric": { attr1:{panic:5} }, "blood": { attr1:{panic:1} }, "infection": { attr1:{panic:2} }, "cancer": { attr1:{panic:3} }, "plague": { attr1:{panic:5} }, "radiation": { attr1:{panic:5} }, "tnt": { attr1:{panic:5} }, "dynamite": { attr1:{panic:5} }, "c4": { attr1:{panic:5} }, "grenade": { attr1:{panic:5} }, "gunpowder": { attr1:{panic:5} }, "acid": { attr1:{panic:5} }, "acid_gas": { attr1:{panic:5} }, "stench": { attr1:{panic:2} } }, related: ["body","head"], cooldown: defaultCooldown, forceSaveColor: true, } elements.scp_008 = { name: "SCP-008", color: "#11111f", behavior: [ "M2|M1|M2", "M1|XX|M1", "M2|M1|M2", ], reactions: { "head": { elem1:null, elem2:"head_008" , chance:0.5 }, "cactus": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.2 }, "kelp": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.2 }, "algae": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.2 }, "pistil": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.2 }, "sapling": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.2 }, "lichen": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.2 }, "vine": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.4 }, "plant": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.4 }, "grass": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.4 }, "evergreen": { elem1:null, elem2:["dead_plant","dead_plant","scp_008"], chance:0.4 }, "tree_branch": { elem1:null, elem2:["wood","wood","wood","wood","wood","wood","dead_plant","dead_plant","scp_008"], chance:0.4 }, "skin": { elem1:null, elem2: "infected_meat", chance:0.3 }, "blood": { elem1:null, elem2:"infected_blood" , 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 }, "frog": { elem2:["scp_008","infected_meat","infected_meat"], chance:0.5 }, "bird": { elem2:["scp_008","infected_meat","infected_meat","feather"], chance:0.5 }, "ant": { elem2:["scp_008","dead_bug","dead_bug"], chance:0.5 }, "fly": { elem2:["scp_008","dead_bug","dead_bug"], chance:0.5 }, "spider": { elem2:["scp_008","dead_bug","dead_bug"], chance:0.5 }, "worm": { elem2:["scp_008","dead_bug","slime"], chance:0.5 }, "bee": { elem2:["scp_008","dead_bug","dead_bug"], chance:0.5 }, "fish": { elem2:["scp_008","infected_meat","infected_meat"], chance:0.5 }, "rat": { elem2:["scp_008","infected_meat","infected_meat","infected_meat"], chance:0.5 }, "firefly": { elem2:["scp_008","dead_bug","dead_bug"], chance:0.5 }, "dead_bug": { elem2:["scp_008","scp_008","calcium"], chance:0.0025 }, "chlorine": { elem1: null , chance:0.001 }, "liquid_chlorine": { elem1: null , chance:0.001 }, "light": { elem1: null , chance:0.001 }, }, tempHigh: 750, stateHigh: null, tempLow: -100, stateLow: "frozen_008", category: "scp", state: "gas", density: 100, } elements.frozen_008 = { name: "frozen SCP-008", color: "#242424", behavior: [ "XX|XX|XX", "M2%0.001|DL%0.001|M2%0.001", "M2%0.01|M1%1.0|M2%0.01", ], reactions: { "head": { elem1:null, elem2:"head_008" , chance:0.5 }, "skin": { elem1:null, elem2:"frozen_infected_meat" , chance:0.4 }, "blood": { elem1:null, elem2:"infected_blood" , 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 }, }, temp: -50, tempHigh: 0, stateHigh: "scp_008", category: "scp", state: "solid", density: 95, } elements.body_008 = { name: "SCP-008-1", color: ["#069469","#047e99","#7f5fb0"], category: "life", hidden: true, density: 1500, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "infected_meat", tempLow: -30, stateLow: "frozen_infected_meat", burn: 10, burnTime: 250, burnInto: "infected_meat", breakInto: ["infected_blood","infected_meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","infected_meat","infected_meat","infected_meat"], chance:0.4 }, "neutron": { elem1:["ash","infected_meat","infected_meat","infected_meat"], chance:0.01 }, "fallout": { elem1:["ash","infected_meat","infected_meat","infected_meat"], chance:0.01 }, "plague": { elem1:"plague", chance:0.05 }, "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, "gold_coin": { elem2:null, chance:0.05 }, "diamond": { elem2:null, chance:0.05 }, "sun": { elem1:"infected_meat" }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} }, }, 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 === "head_008") { 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,"infected_meat"); } return } if (!pixel.zStart) { pixel.zStart = pixelTicks } if ((pixel.zStart + 1000) < pixelTicks) { pixel.dead = pixelTicks } // Find the head if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head_008") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { delete head.panic; } } else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head") { var head = pixelMap[pixel.x][pixel.y-1]; changePixel(head,"head_008") } else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head_1000") { var head = pixelMap[pixel.x][pixel.y-1]; changePixel(head,"head_008") } else { var head = null } if (head && Math.random() < 0.5) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 20; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id) { if (pixel.dir != 1 && pixelMap[x2][y2].x > pixel.x) { pixel.dir = 1 } else if (pixel.dir != -1 && pixelMap[x2][y2].x < pixel.x) { pixel.dir = -1 } } if (elements[seenPixel.element].id != elements.glass.id && elements[seenPixel.element].id != elements.stained_glass.id && elements[seenPixel.element].id != elements.glass_shard.id) { break; } } } } if (pixel.panic > 0) { pixel.panic -= 0.1; if (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 50) { pixel.panic = 50; } } if (isEmpty(pixel.x, pixel.y-1)) { // create blood if decapitated 10% chance if (Math.random() < 0.1 && !pixel.charge) { createPixel("infected_blood", pixel.x, pixel.y-1); // set dead to true 15% chance if (Math.random() < 0.15) { pixel.dead = pixelTicks; } } } else if (Math.random() < 0.2) { // Move 20% chance var movesToTry = [ [1*pixel.dir,0], [1*pixel.dir,-1], ]; let moved = false; // 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]); moved = true; break; } } else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; if (hitPixel.element === "body" || hitPixel.element === "head") { // interact with other human hitPixel.panic += 1 } } } // 10% chance to change direction if (Math.random() < 0.1 || !moved) { pixel.dir *= -1; } } } } elements.head_008 = { color: ["#75816B","#4D6B53"], name: "SCP-008-1", category: "life", hidden: true, density: 1080, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "infected_meat", tempLow: -30, stateLow: "frozen_infected_meat", burn: 10, burnTime: 250, burnInto: "infected_meat", breakInto: ["infected_blood","infected_meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","infected_meat","infected_meat","infected_meat"], chance:0.4 }, "neutron": { elem1:["ash","infected_meat","infected_meat","infected_meat"], chance:0.03 }, "fallout": { elem1:["ash","infected_meat","infected_meat","infected_meat"], chance:0.03 }, "plague": { elem1:"plague", chance:0.05 }, "oxygen": { elem2:["carbon_dioxide","carbon_dioxide","scp_008"], chance:0.5 }, "beans": { elem2:[null,null,null,null,null,null,null,null,"stench","scp_008"], chance:0.2 }, "sun": { elem1:"infected_meat" }, "light": { stain1:"#825043" }, "bee": { stain1:"#cc564b", chance:0.2 }, "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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,"infected_meat"); return } } if (isEmpty(pixel.x, pixel.y-1, true) && Math.random() < 0.005) { createPixel("scp_008",pixel.x,pixel.y) } if (isEmpty(pixel.x+1, pixel.y, true) && Math.random() < 0.01) { createPixel("scp_008",pixel.x+1,pixel.y) } if (isEmpty(pixel.x-1, pixel.y, true) && Math.random() < 0.01) { createPixel("scp_008",pixel.x-1,pixel.y) } // Find the body if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body_008") { 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") { var body = pixelMap[pixel.x][pixel.y+1]; body.element = "body_008" } else if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body_1000") { var body = pixelMap[pixel.x][pixel.y+1]; body.element = "body_008" body.color == pixelColorPick(body,elements.head_008.color) } else { var body = null } // check for eating food if (body && !pixel.dead && Math.random() < 0.1) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].isFood) { deletePixel(x,y); break; } else if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].id == elements.head.id) { pixelMap[x][y+1].element = "body_008" changePixel(pixelMap[x][y],"head_008") break; } else if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].id == elements.body.id) { pixelMap[x][y].element = "body_008" changePixel(pixelMap[x][y-1],"head_008") break; } else if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].id == elements.head_1000.id) { pixelMap[x][y+1].element = "body_008" pixelMap[x][y+1].color == pixelColorPick(pixelMap[x][y+1],elements.head_008.color) changePixel(pixelMap[x][y],"head_008") break; } else if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].id == elements.body_1000.id) { pixelMap[x][y].element = "body_008" pixelMap[x][y].color == pixelColorPick(pixelMap[x][y],elements.head_008.color) changePixel(pixelMap[x][y-1],"head_008") break; } } } 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("infected_blood", pixel.x, pixel.y+1); // set dead to true 15% chance if (Math.random() < 0.15) { pixel.dead = pixelTicks; } } } }, } elements.infected_meat = { color: ["#b8b165","#b89765"], name: "meat", behavior: [ "XX|CR:stench,stench,stench,scp_008,fly%0.25 AND CH:meat,skin>infected_meat%1|XX", "SP%25 AND CH:meat,skin>infected_meat%1|XX|SP%25 AND CH:meat,skin>infected_meat%1", "M2%0.5|M1 AND CH:meat,skin>infected_meat%1|M2%0.5", ], reactions: { "head": { elem1:null, elem2:"head_008" , chance:0.75 }, "body": { elem1:null, elem2:"body_008" , chance:0.05 }, "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:"infected_blood" , chance:0.6 }, "skin": { elem2:"infected_meat" , chance:0.6 }, }, tempHigh: 300, stateHigh: ["scp_008","ash","ammonia"], tempLow: -20, stateLow: "frozen_infected_meat", category:"scp", hidden: true, burn:12, burnTime:200, burnInto:["scp_008","ash","ammonia"], state: "solid", density: 1005, conduct: 0.1, isFood: true }, elements.frozen_infected_meat = { color: ["#82AEC0","#80808F","#9CAC98"], name: "frozen_meat", behavior: [ "XX|XX|XX", "SP%95|XX|SP%95", "XX|M1 AND CH:frozen_meat,meat>frozen_infected_meat%1|XX", ], reactions: { "head": { elem1:null, elem2:"head_008" , chance:0.5 }, "water": { elem2:"dirty_water" }, "salt_water": { elem1:"infected_meat",elem2:"dirty_water" , chance:0.5 }, "sugar_water": { elem2:"dirty_water" }, "seltzer": { elem2:"dirty_water" }, "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","frozen_008"] , chance:0.2}, "blood": { elem2:"infected_blood" , chance:0.6 }, }, temp: -20, tempHigh: 10, stateHigh: "infected_meat", category:"scp", hidden: true, state: "solid", density: 1005, conduct: 0.05, } elements.infected_blood = { color: ["#cf005d","#be004c"], name: "infection", behavior: behaviors.LIQUID, tick: function(pixel) { if (Math.random() < 0.001) { releaseElement(pixel,"scp_008"); } }, reactions: { "head": { elem1:null, elem2:"head_008" , chance:0.75 }, "body": { elem1:null, elem2:"body_008" , chance:0.05 }, "blood": { elem2:"infected_blood", chance:0.02 }, "infection": { elem2:"infected_blood", chance:0.025 }, "frog": { elem2:"infected_meat", chance:0.005 }, "fish": { elem2:"infected_meat", chance:0.005 }, "meat": { elem2:"infected_meat", chance:0.005 }, "rotten_meat": { elem2:"infected_meat", chance:0.05 }, "alcohol": { elem1:"infection", chance:0.2 }, "epsom_salt": { elem1:"infection", chance:0.3 } }, viscosity: 15, tempHigh: 124.55, stateHigh: ["scp_008","scp_008","scp_008","salt","oxygen"], tempLow: 0, stateLow: ["scp_008","infection"], category:"liquids", hidden: true, state: "liquid", density: 1060, stain: 0.05 } elements.scp_009 = { color: "#D2042D", behavior: [ "XX|XX|XX", "XX|XX|XX", "XX|M1|XX", ], reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009", chance:0.25}, "steam":{elem2:"scp_009", chance:0.15}, "blood":{elem2:"scp_009", chance:0.25}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009", chance:0.25}, "salt_water":{elem2:"scp_009", chance:0.25}, "sugar_water":{elem2:"scp_009", chance:0.25}, "dirty_water":{elem2:"scp_009", chance:0.25}, "pool_water":{elem2:"scp_009", chance:0.25}, "slush":{elem2:"scp_009", chance:0.25}, "seltzer":{elem2:"scp_009", chance:0.25}, "juice":{elem2:"scp_009", chance:0.25}, "soda":{elem2:"scp_009", chance:0.25}, "milk":{elem2:"scp_009", chance:0.25}, "slime":{elem2:"scp_009", chance:0.25}, "tea":{elem2:"scp_009", chance:0.25}, "coffee":{elem2:"scp_009", chance:0.25}, "neutral_acid":{elem2:"scp_009", chance:0.25}, "infection":{elem2:"scp_009", chance:0.25}, "meat":{elem2:"scp_009_meat", chance:0.15}, "skin":{elem2:"scp_009_meat", chance:0.075}, "body":{elem2:"scp_009_meat", chance:0.04}, "head":{elem2:"scp_009_meat", chance:0.05}, "frozen_meat":{elem2:"scp_009_meat", chance:0.15}, "fish":{elem2:"scp_009_meat", chance:0.15}, "bird":{elem2:"scp_009_meat", chance:0.15}, "frog":{elem2:"scp_009_meat", chance:0.15}, "tadpole":{elem2:"scp_009_meat", chance:0.15}, }, breakInto: "red_snow", tempLow: 0, stateLow: "red_water", category: "scp", state: "solid", density: 917, } elements.red_snow = { color: "#D64765", name: "SCP-009", behavior: behaviors.POWDER, reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009", chance:0.25}, "steam":{elem2:"scp_009", chance:0.15}, "blood":{elem2:"scp_009", chance:0.25}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009", chance:0.25}, "salt_water":{elem2:"scp_009", chance:0.25}, "sugar_water":{elem2:"scp_009", chance:0.25}, "dirty_water":{elem2:"scp_009", chance:0.25}, "pool_water":{elem2:"scp_009", chance:0.25}, "slush":{elem2:"scp_009", chance:0.25}, "seltzer":{elem2:"scp_009", chance:0.25}, "juice":{elem2:"scp_009", chance:0.25}, "soda":{elem2:"scp_009", chance:0.25}, "milk":{elem2:"scp_009", chance:0.25}, "slime":{elem2:"scp_009", chance:0.25}, "tea":{elem2:"scp_009", chance:0.25}, "coffee":{elem2:"scp_009", chance:0.25}, "neutral_acid":{elem2:"scp_009", chance:0.25}, "infection":{elem2:"scp_009", chance:0.25}, "meat":{elem2:"scp_009_meat", chance:0.15}, "skin":{elem2:"scp_009_meat", chance:0.075}, "body":{elem2:"scp_009_meat", chance:0.04}, "head":{elem2:"scp_009_meat", chance:0.05}, "frozen_meat":{elem2:"scp_009_meat", chance:0.15}, "fish":{elem2:"scp_009_meat", chance:0.15}, "bird":{elem2:"scp_009_meat", chance:0.15}, "frog":{elem2:"scp_009_meat", chance:0.15}, "tadpole":{elem2:"scp_009_meat", chance:0.15}, }, temp: 5, tempLow: -18, tempHigh: 100, stateHigh: "packed_red_snow", stateLow: "red_water", category: "scp", state: "solid", density: 100, hidden: true, } elements.packed_red_snow = { color: "#CC3F5F", name: "SCP-009", behavior: behaviors.SUPPORTPOWDER, reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009", chance:0.25}, "steam":{elem2:"scp_009", chance:0.15}, "blood":{elem2:"scp_009", chance:0.25}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009", chance:0.25}, "salt_water":{elem2:"scp_009", chance:0.25}, "sugar_water":{elem2:"scp_009", chance:0.25}, "dirty_water":{elem2:"scp_009", chance:0.25}, "pool_water":{elem2:"scp_009", chance:0.25}, "slush":{elem2:"scp_009", chance:0.25}, "seltzer":{elem2:"scp_009", chance:0.25}, "juice":{elem2:"scp_009", chance:0.25}, "soda":{elem2:"scp_009", chance:0.25}, "milk":{elem2:"scp_009", chance:0.25}, "slime":{elem2:"scp_009", chance:0.25}, "tea":{elem2:"scp_009", chance:0.25}, "coffee":{elem2:"scp_009", chance:0.25}, "neutral_acid":{elem2:"scp_009", chance:0.25}, "infection":{elem2:"scp_009", chance:0.25}, "meat":{elem2:"scp_009_meat", chance:0.15}, "skin":{elem2:"scp_009_meat", chance:0.075}, "body":{elem2:"scp_009_meat", chance:0.04}, "head":{elem2:"scp_009_meat", chance:0.05}, "frozen_meat":{elem2:"scp_009_meat", chance:0.15}, "fish":{elem2:"scp_009_meat", chance:0.15}, "bird":{elem2:"scp_009_meat", chance:0.15}, "frog":{elem2:"scp_009_meat", chance:0.15}, "tadpole":{elem2:"scp_009_meat", chance:0.15}, }, temp: 5, tempLow: -20, tempHigh: 200, stateHigh: "scp_009", stateLow: "red_water", breakInto: "red_snow", category: "scp", state: "solid", density: 400, hidden: true } elements.scp_009_meat = { name: "SCP-009 meat", color: "#AC3536", behavior: [ "XX|CH:frozen_meat,meat>scp_009_meat%1|XX", "CH:frozen_meat,meat>scp_009_meat%1|XX|CH:frozen_meat,meat>scp_009_meat%1", "XX|M1 AND CH:frozen_meat,meat>scp_009_meat%1|XX", ], reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009", chance:0.025}, "steam":{elem2:"scp_009", chance:0.015}, "blood":{elem2:"scp_009", chance:0.025}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009", chance:0.025}, "salt_water":{elem2:"scp_009", chance:0.025}, "sugar_water":{elem2:"scp_009", chance:0.025}, "dirty_water":{elem2:"scp_009", chance:0.025}, "pool_water":{elem2:"scp_009", chance:0.025}, "slush":{elem2:"scp_009", chance:0.025}, "seltzer":{elem2:"scp_009", chance:0.025}, "juice":{elem2:"scp_009", chance:0.025}, "soda":{elem2:"scp_009", chance:0.025}, "milk":{elem2:"scp_009", chance:0.025}, "slime":{elem2:"scp_009", chance:0.025}, "tea":{elem2:"scp_009", chance:0.025}, "coffee":{elem2:"scp_009", chance:0.025}, "neutral_acid":{elem2:"scp_009", chance:0.025}, "infection":{elem2:"scp_009", chance:0.025}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, tempLow: -100, stateLow: "meat", category:"scp", hidden:true, state: "solid", density: 1067.5, isFood: true } elements.scp_009_plant = { name: "SCP-009 plant", color: "#735958", reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009", chance:0.025}, "steam":{elem2:"scp_009", chance:0.015}, "blood":{elem2:"scp_009", chance:0.025}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009", chance:0.025}, "salt_water":{elem2:"scp_009", chance:0.025}, "sugar_water":{elem2:"scp_009", chance:0.025}, "dirty_water":{elem2:"scp_009", chance:0.025}, "pool_water":{elem2:"scp_009", chance:0.025}, "slush":{elem2:"scp_009", chance:0.025}, "seltzer":{elem2:"scp_009", chance:0.025}, "juice":{elem2:"scp_009", chance:0.025}, "soda":{elem2:"scp_009", chance:0.025}, "milk":{elem2:"scp_009", chance:0.025}, "slime":{elem2:"scp_009", chance:0.025}, "tea":{elem2:"scp_009", chance:0.025}, "coffee":{elem2:"scp_009", chance:0.025}, "neutral_acid":{elem2:"scp_009", chance:0.025}, "infection":{elem2:"scp_009", chance:0.025}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, behavior: behaviors.WALL, category:"scp", tempHigh: 300, stateHigh: "fire", burn:85, burnTime:45, temp: 2.66, tempLow: -7, stateLow: "red_plant", state: "solid", density: 1050, hidden: true, } elements.red_plant = { color: ["#AA3527","#AA3227","#AA2C27","#A11D1D"], reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009", chance:0.025}, "steam":{elem2:"scp_009", chance:0.015}, "blood":{elem2:"scp_009", chance:0.025}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009", chance:0.025}, "salt_water":{elem2:"scp_009", chance:0.025}, "sugar_water":{elem2:"scp_009", chance:0.025}, "dirty_water":{elem2:"scp_009", chance:0.025}, "pool_water":{elem2:"scp_009", chance:0.025}, "slush":{elem2:"scp_009", chance:0.025}, "seltzer":{elem2:"scp_009", chance:0.025}, "juice":{elem2:"scp_009", chance:0.025}, "soda":{elem2:"scp_009", chance:0.025}, "milk":{elem2:"scp_009", chance:0.025}, "slime":{elem2:"scp_009", chance:0.025}, "tea":{elem2:"scp_009", chance:0.025}, "coffee":{elem2:"scp_009", chance:0.025}, "neutral_acid":{elem2:"scp_009", chance:0.025}, "infection":{elem2:"scp_009", chance:0.025}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, behavior: [ "XX|XX|XX", "XX|XX|XX", "M2|M1|M2", ], category:"scp", tempHigh: 2, stateHigh: "scp_009_plant", state: "solid", density: 1050, hidden: true, } elements.red_water = { color: "#880808", name: "liquid_SCP-009", behavior: behaviors.LIQUID, reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009"}, "blood":{elem2:"scp_009"}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009"}, "salt_water":{elem2:"scp_009"}, "sugar_water":{elem2:"scp_009"}, "dirty_water":{elem2:"scp_009"}, "pool_water":{elem2:"scp_009"}, "slush":{elem2:"scp_009"}, "seltzer":{elem2:"scp_009"}, "juice":{elem2:"scp_009"}, "soda":{elem2:"scp_009"}, "milk":{elem2:"scp_009"}, "slime":{elem2:"scp_009"}, "tea":{elem2:"scp_009"}, "coffee":{elem2:"scp_009"}, "neutral_acid":{elem2:"scp_009"}, "infection":{elem2:"scp_009"}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, tempLow: -100, stateLow: "red_steam", tempHigh: 0, stateHigh: "scp_009", category: "scp", state: "liquid", density: 997, conduct: 0.02, temp: -20, stain: -0.5, extinguish: true, hidden: true, } elements.red_steam = { color: "#F88379", name: "SCP-009_steam", behavior: behaviors.GAS, reactions: { "red_steam": { elem1: "red_cloud", elem2: "red_cloud", chance:0.05, "y":[0,15], "setting":"clouds" }, "red_rain": { elem1: "red_rain", chance:0.4, "y":[0,12], "setting":"clouds" }, "red_cloud": { elem1: "red_cloud", chance:0.4, "y":[0,12], "setting":"clouds" }, "red_snow_cloud": { elem1: "red_rain_cloud", chance:0.4, "y":[0,12], "setting":"clouds" }, "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "salt_ice":{elem2:"scp_009", chance:0.25}, "sugar_ice":{elem2:"scp_009", chance:0.25}, "juice_ice":{elem2:"scp_009", chance:0.25}, "dirty_ice":{elem2:"scp_009", chance:0.25}, "ice":{elem2:"scp_009", chance:0.25}, "water":{elem2:"scp_009"}, "blood":{elem2:"scp_009"}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009"}, "salt_water":{elem2:"scp_009"}, "sugar_water":{elem2:"scp_009"}, "dirty_water":{elem2:"scp_009"}, "pool_water":{elem2:"scp_009"}, "slush":{elem2:"scp_009"}, "seltzer":{elem2:"scp_009"}, "juice":{elem2:"scp_009"}, "soda":{elem2:"scp_009"}, "milk":{elem2:"scp_009"}, "slime":{elem2:"scp_009"}, "tea":{elem2:"scp_009"}, "coffee":{elem2:"scp_009"}, "neutral_acid":{elem2:"scp_009"}, "infection":{elem2:"scp_009"}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, temp: -150, tempHigh: -100, stateHigh: "red_water", category: "scp", state: "gas", density: 0.6, hidden: true, } elements.red_cloud = { color: "#E8ABAB", behavior: [ "XX|XX|XX", "XX|CO:1%5|M1%2.5 AND BO", "XX|XX|XX", ], reactions: { "red_rain": { elem1:"red_rain", temp1: 20 }, "red_cloud": { elem1:"red_rain", elem2:"red_rain", temp1:20, temp2:20, charged:true }, "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "water":{elem2:"scp_009"}, "blood":{elem2:"scp_009"}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009"}, "salt_water":{elem2:"scp_009"}, "sugar_water":{elem2:"scp_009"}, "dirty_water":{elem2:"scp_009"}, "pool_water":{elem2:"scp_009"}, "slush":{elem2:"scp_009"}, "seltzer":{elem2:"scp_009"}, "juice":{elem2:"scp_009"}, "soda":{elem2:"scp_009"}, "milk":{elem2:"scp_009"}, "slime":{elem2:"scp_009"}, "tea":{elem2:"scp_009"}, "coffee":{elem2:"scp_009"}, "neutral_acid":{elem2:"scp_009"}, "infection":{elem2:"scp_009"}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, category:"scp", temp: -110, tempHigh: -100, stateHigh: "red_rain", state: "gas", breakInto: "red_rain", density: 0.4, ignoreAir: true, conduct: 0.03, hidden: true, } elements.red_rain = { color: "#C27A79", behavior: [ "XX|XX|XX", "XX|CH:red_water%0.05|M1%2.5 AND BO", "CR:electric%0.05|CR:electric%0.05|CR:electric%0.05", ], reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "water":{elem2:"scp_009"}, "blood":{elem2:"scp_009"}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009"}, "salt_water":{elem2:"scp_009"}, "sugar_water":{elem2:"scp_009"}, "dirty_water":{elem2:"scp_009"}, "pool_water":{elem2:"scp_009"}, "slush":{elem2:"scp_009"}, "seltzer":{elem2:"scp_009"}, "juice":{elem2:"scp_009"}, "soda":{elem2:"scp_009"}, "milk":{elem2:"scp_009"}, "slime":{elem2:"scp_009"}, "tea":{elem2:"scp_009"}, "coffee":{elem2:"scp_009"}, "neutral_acid":{elem2:"scp_009"}, "infection":{elem2:"scp_009"}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, category:"scp", temp: -70, tempLow: -100, stateLow: "red_cloud", breakInto: "water", tempHigh: 0, stateHigh: "red_snow_cloud", state: "gas", density: 0.5, ignoreAir: true, conduct: 0.03, hidden: true, } elements.red_snow_cloud = { color: "#CC8482", behavior: [ "XX|XX|XX", "XX|CH:red_snow%0.05|M1%2.5 AND BO", "XX|XX|XX", ], category:"scp", temp: 10, tempLow: -30, stateLow: "red_rain", state: "gas", density: 0.55, ignoreAir: true, conduct: 0.01, reactions: { "rain_cloud": { elem2: "red_rain", chance:0.4 }, "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, "frozen_plant":{elem2:"scp_009_plant", chance:0.025}, "dead_plant":{elem2:"red_plant", chance:0.025}, "water":{elem2:"scp_009"}, "blood":{elem2:"scp_009"}, "blood_ice":{elem2:"scp_009", chance:0.25}, "antibody":{elem2:"scp_009"}, "salt_water":{elem2:"scp_009"}, "sugar_water":{elem2:"scp_009"}, "dirty_water":{elem2:"scp_009"}, "pool_water":{elem2:"scp_009"}, "slush":{elem2:"scp_009"}, "seltzer":{elem2:"scp_009"}, "juice":{elem2:"scp_009"}, "soda":{elem2:"scp_009"}, "milk":{elem2:"scp_009"}, "slime":{elem2:"scp_009"}, "tea":{elem2:"scp_009"}, "coffee":{elem2:"scp_009"}, "neutral_acid":{elem2:"scp_009"}, "infection":{elem2:"scp_009"}, "meat":{elem2:"scp_009_meat", chance:0.015}, "skin":{elem2:"scp_009_meat", chance:0.0075}, "body":{elem2:"scp_009_meat", chance:0.004}, "head":{elem2:"scp_009_meat", chance:0.005}, "frozen_meat":{elem2:"scp_009_meat", chance:0.015}, "fish":{elem2:"scp_009_meat", chance:0.015}, "bird":{elem2:"scp_009_meat", chance:0.015}, "frog":{elem2:"scp_009_meat", chance:0.015}, "tadpole":{elem2:"scp_009_meat", chance:0.015}, }, hidden: true, } elements.scp_012 = { name: "SCP-012", color: ["#b0996f","#a89163","#b0996f","#a89163","#9e804f","#7d5e2e","#81633b"], buttonColor: ["#b0996f","#a89163","#874B2B","#b0996f","#a89163","#ad6236","#9e804f","#7a1d05","#7d5e2e","#81633b"], behavior: [ "XX|XX|XX", "XX|FX%0.25|XX", "M2%25|M1%25|M1%25", ], tick: function(pixel) { if (Math.random() < 0.95) { let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 20; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.body.id) { seenPixel.element = "body_012_1" break; } else if (elements[seenPixel.element].id == elements.head.id) { seenPixel.element = "head_012_1" pixelMap[seenPixel.x][seenPixel.y+1].element = "body_012_1" break; } } } } if (pixel.lines < 1 && isEmpty(pixel.x,pixel.y-1)) { releaseElement(pixel, "scp_012", 1, true) changePixel(pixel,"complete_012") } if (Math.random() < 0.5) { shuffleArray(squareCoordsShuffle); for (var i = 0; i < squareCoordsShuffle.length; i++) { var x = pixel.x+squareCoordsShuffle[i][0]; var y = pixel.y+squareCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && (elements[pixelMap[x][y].element].id == elements.blood.id || elements[pixelMap[x][y].element].id == elements.infection.id || elements[pixelMap[x][y].element].id == elements.infected_blood.id)) { deletePixel(x,y); pixel.lines -= 1 break; } } } }, properties: { lines: 585, }, category: "scp", tempHigh: 278, stateHigh: ["ash","ash","ash","smoke","smoke","fire"], burn:15, burnTime:150, burnInto: ["ash","ash","ash","smoke","smoke","smoke"], state: "solid", density: 1201 } elements.complete_012 = { color: ["#b0996f","#874B2B","#874B2B","#a89163","#ad6236","#ad6236","#9e804f","#7a1d05","#7a1d05","#81633b"], buttonColor: ["#b0996f","#a89163","#874B2B","#b0996f","#a89163","#ad6236","#9e804f","#7a1d05","#7d5e2e","#81633b"], name: "SCP-012", behavior: [ "XX|XX|XX", "XX|FX%0.25|XX", "M2%25|M1%25|M1%25", ], tick: function(pixel) { if (Math.random() < 0.95) { let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 20; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.body.id) { seenPixel.element = "body_012_1" break; } else if (elements[seenPixel.element].id == elements.head.id) { seenPixel.element = "head_012_1" pixelMap[seenPixel.x][seenPixel.y+1].element = "body_012_1" break; } } } } }, properties: { lines: 585 }, category: "scp", tempHigh: 278, stateHigh: ["ash","ash","ash","smoke","smoke","fire"], burn:15, burnTime:150, burnInto: ["ash","ash","ash","smoke","smoke","smoke"], state: "solid", density: 1201, hidden: true } elements.body_012_1 = { color: ["#069469","#047e99","#7f5fb0"], name: "body", category: "scp", hidden: true, density: 1500, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "plague": { elem1:"plague", chance:0.05 }, "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, "gold_coin": { elem2:null, chance:0.05 }, "diamond": { elem2:null, chance:0.05 }, "sun": { elem1:"cooked_meat" }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 === "head_012_1") { 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 == "head_012_1") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { pixel.panic = head.panic; delete head.panic; } } else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head") { var head = pixelMap[pixel.x][pixel.y-1]; head.element = "head_012_1" } else { var head = null } if (head && Math.random() < 0.9) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 50; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.scp_012.id) { if (pixel.x-1 > seenPixel.x && pixel.dir != -1) { pixel.dir = -1 } else if (pixel.x+1 < seenPixel.x && pixel.dir != 1) { pixel.dir = 1 } else if ((pixel.x-1 == seenPixel.x || pixel.x+1 == seenPixel.x) && pixel.dir != 0) { pixel.dir = 0 if (pixel.x > seenPixel.x && pixel.face != -1) { pixel.face = -1 } else if (pixel.x < seenPixel.x && pixel.face != 1) { pixel.face = 1 } } break; } } } } 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 (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 50) { pixel.panic = 50; } } 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], ]; let moved = false; // 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]); moved = true; break; } } } // 5% chance to change direction if (Math.random() < 0.05 || !moved) { pixel.dir *= -1; } // homeostasis if (pixel.temp > 37) { pixel.temp -= 1; } else if (pixel.temp < 37) { pixel.temp += 1; } } if (pixel.dir == 0 && pixel.face) { if (isEmpty(pixel.x+pixel.face, pixel.y-1) && !isEmpty(pixel.x+pixel.face, pixel.y)) { // create blood 15% chance if (Math.random() < 0.15) { createPixel("blood", pixel.x+pixel.face, pixel.y-1); // set dead to true 2.5% chance if (Math.random() < 0.025) { pixel.dead = pixelTicks; } } } else if (!isEmpty(pixel.x+pixel.face, pixel.y) && isEmpty(pixel.x+(-pixel.face), pixel.y-1)) { if (tryMove(pixel, pixel.x+(-pixel.face), pixel.y)) { movePixel(head, head.x+(-pixel.face), head.y); } else if (isEmpty(pixel.x+(-pixel.face), pixel.y-2)) { if (tryMove(pixel, pixel.x+(-pixel.face), pixel.y-1)) { movePixel(head, head.x+(-pixel.face), head.y-2); } } } } } } elements.head_012_1 = { color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], name: "head", category: "scp", hidden: true, density: 1080, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "plague": { elem1:"plague", chance:0.05 }, "oxygen": { elem2:"carbon_dioxide", chance:0.5 }, "beans": { elem2:[null,null,null,null,null,null,null,null,"stench"], chance:0.2 }, "sun": { elem1:"cooked_meat" }, "light": { stain1:"#825043" }, "bee": { stain1:"#cc564b", chance:0.2 }, "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 == "body_012_1") { 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 } // check for eating food if (body && !pixel.dead && Math.random() < 0.0025) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].isFood && pixelMap[x][y].panic === undefined) { deletePixel(x,y); break; } } } 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; } }, onChange: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } }, onDelete: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } } } elements.scp_035 = { color: ["#f7ead0","#faf9f6","#e9e6db"], buttonColor: ["#11111f","#f7ead0","#f7ead0","#f7ead0","#f7ead0","#11111f","#faf9f6","#faf9f6","#faf9f6","#faf9f6","#11111f","#e9e6db","#e9e6db","#e9e6db","#e9e6db","#11111f"], name: "SCP-035", hardness: 0.6, category: "scp", behavior: [ "CR:black_acid%0.05|CR:black_acid%0.25|CR:black_acid%0.05", "CR:black_acid%0.25|XX|CR:black_acid%0.25", "CR:black_acid%0.05|CR:black_acid%0.5 AND M1|CR:black_acid%0.05", ], properties: { }, breakInto: ["scp_035","porcelain_shard","porcelain_shard","black_acid","black_acid"], density: 800, state: "solid", tempHigh: 3500, stateHigh: "porcelain_shard", tick: function(pixel) { for (var i = 0; i < squareCoords.length; i++) { var coords = squareCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y) && Math.random() > 0.8) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (pixel2.element == "head_008" || pixel2.element == "head" || pixel2.element == "head_1000") { changePixel(pixel2,"head_035") deletePixel(pixel.x,pixel.y) } else if (pixel2.element == "body_008" || pixel2.element == "body" || pixel2.element == "body_1000") { pixel2.element = "body_035" deletePixel(pixel.x,pixel.y) } } } }, reactions: { "head": { elem1:null, elem2: "head_035" , chance:0.2 }, "head_008": { elem1:null, elem2: "head_035" , chance:0.1 }, }, }, elements.body_035 = { color: ["#069469","#047e99","#7f5fb0"], name: "SCP-035-1", category: "life", hidden: true, density: 1500, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "plague": { elem1:"plague", chance:0.05 }, "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, "gold_coin": { elem2:null, chance:0.05 }, "diamond": { elem2:null, chance:0.05 }, "sun": { elem1:"cooked_meat" }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 === "head_035") { 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 == "head_035") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { pixel.panic = head.panic; delete head.panic; } } else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head") { var head = pixelMap[pixel.x][pixel.y-1]; changePixel(head,"head_035") } else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head_1000") { var head = pixelMap[pixel.x][pixel.y-1]; changePixel(head,"head_035") } else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head_008") { var head = pixelMap[pixel.x][pixel.y-1]; changePixel(head,"head_035") } else { var head = null } if (pixel.burning) { pixel.panic += 0.05; if (head && pixelTicks-pixel.burnStart > 240) { pixel.color = "#232323"; } } if (pixel.charge) { pixel.panic += 0.5; } else if (pixel.panic > 0) { pixel.panic -= 0.2; if (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 50) { pixel.panic = 50; } } if (isEmpty(pixel.x, pixel.y-1)) { // create blood 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], ]; let moved = false; // 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]); moved = true; break; } } else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; if (hitPixel.element === "body" || hitPixel.element === "head") { // interact with human hitPixel.panic += 0.5 } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } // homeostasis if (pixel.temp > 37) { pixel.temp -= 1; } else if (pixel.temp < 37) { pixel.temp += 1; } } } } elements.head_035 = { name: "SCP-035-1", color: ["#f7ead0","#faf9f6","#e9e6db"], category: "life", behavior: [ "CR:black_acid%0.01|CR:black_acid%0.05|CR:black_acid%0.01", "CR:black_acid%0.05|XX|CR:black_acid%0.05", "CR:black_acid%0.01|CR:black_acid%0.05|CR:black_acid%0.01", ], hidden: true, density: 1080, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "plague": { elem1:"plague", chance:0.05 }, "oxygen": { elem2:"carbon_dioxide", chance:0.5 }, "beans": { elem2:[null,null,null,null,null,null,null,null,"stench"], chance:0.2 }, "sun": { elem1:"cooked_meat" }, "light": { stain1:"#825043" }, "bee": { stain1:"#cc564b", chance:0.2 }, "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 == "body_035") { 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") { var body = pixelMap[pixel.x][pixel.y+1]; body.element = "body_035" } else if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body_1000") { var body = pixelMap[pixel.x][pixel.y+1]; body.element = "body_035" } else if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body_008") { var body = pixelMap[pixel.x][pixel.y+1]; body.element = "body_035" } else { var body = null } if (tryMove(pixel, pixel.x, pixel.y+1)) { // create blood if severed 5% chance if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.05 && !pixel.charge) { createPixel("black_acid", pixel.x, pixel.y+1); // set dead to true 50% chance if (Math.random() < 0.5) { pixel.dead = pixelTicks; } } } // homeostasis if (pixel.temp > 37) { pixel.temp -= 1; } else if (pixel.temp < 37) { pixel.temp += 1; } }, onChange: function(pixel) { releaseElement(pixel,"scp_035",1,true) }, onDelete: function(pixel) { releaseElement(pixel,"scp_035",1,true) }, } elements.black_acid = { name: "SCP-035_acid", hidden: true, color: ["#00000f","#111111","#242424"], behavior: [ "XX|DB%2.5|XX", "DB%3 AND M2%10|DL%1|DB%3 AND M2%10", "DB%3 AND M2%10|DB%5.5 AND M1|DB%3 AND M2%10", ], ignore: [/*"scp_804"*/"shy_head","shy_body","scp_055","head","body","body_008","head_008","scp_035","body_035","head_035","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.005 }, "rad_glass": { elem1:null, elem2: null , chance:0.0075 }, "stained_glass": { elem1:null, elem2: null , chance:0.005 }, "glass_shard": { elem1:null, elem2: null , chance:0.01 }, "rad_shard": { elem1:null, elem2: null , chance:0.01 }, "porcelain_shard": { elem1:null, elem2: null , chance:0.005 }, "copper": { elem1:null, elem2: null , chance:0.02 }, "gold": { elem1:null, elem2: null , chance:0.02 }, "porcelain": { elem1:null, elem2: null , chance:0.0005 }, "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 }, "head_035": { elem1:null, elem2: "scp_035" , chance:0.001}, "body_035": { elem1:null, elem2: null , chance:0.001 }, "head": { elem1:null, elem2: null , chance:0.01 }, "body": { elem1:null, elem2: null , chance:0.01 }, "head_008": { elem1:null, elem2: null , chance:0.02 }, "body_008": { 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, burnInto: ["fire","fire","fire","fire","fire","fire","fire","fire","ash","ash","fire","fire","fire","fire","ash","ash"], fireColor: "#111111", state: "liquid", density: 1105, stain: 0.5, } elements.scp_049 = { name: "SCP-049", color: ["#f7ead0","#faf9f6","#e9e6db"], buttonColor: ["#f7ead0","#faf9f6","#e9e6db","#11111f","#242424","#11111f","#242424"], category: "scp", properties: { dead: false, dir: 1, panic: 0 }, onPlace: function(pixel) { if (isEmpty(pixel.x, pixel.y+1)) { createPixel("body_049", pixel.x, pixel.y+1); var color = pixel.color; changePixel(pixel,"head_049"); pixel.color = color; } else if (isEmpty(pixel.x, pixel.y-1)) { createPixel("head_049", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixel.color; changePixel(pixel,"body_049"); } else { deletePixel(pixel.x, pixel.y); } }, reactions: { "fire": { attr1:{panic:2} }, "plasma": { attr1:{panic:2} }, "plague": { attr1:{panic:3} }, "cancer": { attr1:{panic:4} }, "virus": { attr1:{panic:8} }, "scp_682": { attr1:{panic:4} }, "scp_008": { attr1:{panic:8} }, "scp_096": { attr1:{panic:4} }, }, related: ["body_049","head_049"], cooldown: defaultCooldown, forceSaveColor: true, } elements.body_049 = { name: "SCP-049", color: ["#11111f","#242424"], category: "scp", breakInto: ["rotten_meat","rotten_meat","bone","blood"], hidden: true, density: 1500, state: "solid", tempHigh: 250, stateHigh: ["rotten_meat","bone"], tempLow: -75, stateLow: ["rotten_meat","bone"], forceSaveColor: true, pickElement: "scp_049", reactions: { "cancer": { elem2:null, chance:0.05 }, "plague": { elem2:null, chance:0.5 }, "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, "sun": { elem1:"cooked_meat" }, }, 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 === "head_049") { 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 == "head_049") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { pixel.panic = head.panic; delete head.panic; } } else { var head = null } if (head && Math.random() < 0.25) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < 10; x++) { let x2 = pixel.x+(x*pixel.dir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements.scp_049.reactions[seenPixel.element] && elements.scp_049.reactions[seenPixel.element].attr1 && elements.scp_049.reactions[seenPixel.element].attr1.panic) { pixel.panic += elements.scp_049.reactions[seenPixel.element].attr1.panic; pixel.dir *= -1; break; } else if (seenPixel.dead || seenPixel.temp > 200) { pixel.panic += 5; pixel.dir *= -1; if (seenPixel.panic) delete seenPixel.panic; break; } } } } if (pixel.burning) { pixel.panic += 0.1; if (head && pixelTicks-pixel.burnStart > 240) { pixel.color = head.color; } } else if (pixel.panic > 0) { pixel.panic -= 1; if (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 50) { pixel.panic = 50; } } if (isEmpty(pixel.x, pixel.y-1)) { // bleed if decapitated 10% chance if (Math.random() < 0.1 && !pixel.charge) { createPixel("foam", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = "#666666" // 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], ]; let moved = false; // 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]); moved = true; break; } } else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; if (hitPixel.element === "body" || hitPixel.element === "head" && hitPixel.panic < pixel.panic) { // interact with humans hitPixel.panic = pixel.panic; } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } // homeostasis if (pixel.temp > 37) { pixel.temp -= 1; } else if (pixel.temp < 37) { pixel.temp += 1; } } if (Math.random() < 0.95) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 150; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if ((elements[seenPixel.element].id == elements.head.id || elements[seenPixel.element].id == elements.head_008.id) && seenPixel.pestilence == undefined) { if (Math.random() > 0.07) { seenPixel.pestilence = false } else { seenPixel.pestilence = true } } if (elements[seenPixel.element].id != elements.glass.id && elements[seenPixel.element].id != elements.stained_glass.id && elements[seenPixel.element].id != elements.glass_shard.id) { break; } } } } for (var i = 0; i < squareCoords.length; i++) { var coords = squareCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] if ((pixel2.dead == true || pixel2.pestilence == true) && (elements[pixel2.element].id == elements.head.id || elements[pixel2.element].id == elements.head_008.id)) { changePixel(pixel2,"head_049_1") } else if ((pixel2.dead == true || pixel2.pestilence == true) && (elements[pixel2.element].id == elements.body.id || elements[pixel2.element].id == elements.body_008.id)) { changePixel(pixel2,"body_049_1") } } } } } elements.head_049 = { name: "SCP-049", color: ["#f7ead0","#faf9f6","#e9e6db"], category: "scp", hidden: true, density: 1080, state: "solid", tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["rotten_meat","bone","bone","blood"], forceSaveColor: true, pickElement: "scp_049", reactions: { "cancer": { elem2:null, chance:0.05 }, "plague": { elem2:null, chance:0.5 }, "sun": { elem1:"cooked_meat" }, "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, }, 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 == "body_049") { 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 } // check for drinking if (body && !pixel.dead && Math.random() < 0.1) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].id == elements.alcohol.id) { deletePixel(x,y); break; } } } if (tryMove(pixel, pixel.x, pixel.y+1)) { // bleed if severed 10% chance if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) { createPixel("foam", pixel.x, pixel.y+1); pixelMap[pixel.x][pixel.y+1].color = "#666666" // 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; } }, onChange: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } }, onDelete: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } } } elements.body_049_1 = { color: ["#069469","#047e99","#7f5fb0"], name: "SCP-049-1", category: "life", hidden: true, density: 1500, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "plague": { elem1:"plague", chance:0.05 }, "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, "sun": { elem1:"cooked_meat" }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} }, }, 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 === "head_049_1") { 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 == "head_049_1") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { delete head.panic; } } else if (!isEmpty(pixel.x, pixel.y-1, true) && (pixelMap[pixel.x][pixel.y-1].element == "head" || pixelMap[pixel.x][pixel.y-1].element == "head_008" )) { var head = pixelMap[pixel.x][pixel.y-1]; changePixel(head,"head_049_1") } else { var head = null } if (head && Math.random() < 0.5) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 20; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id) { if (pixel.dir != 1 && pixelMap[x2][y2].x > pixel.x) { pixel.dir = 1 } else if (pixel.dir != -1 && pixelMap[x2][y2].x < pixel.x) { pixel.dir = -1 } } if (elements[seenPixel.element].id != elements.glass.id && elements[seenPixel.element].id != elements.stained_glass.id && elements[seenPixel.element].id != elements.glass_shard.id) { break; } } } } if (pixel.panic > 0) { pixel.panic = 0; } 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], ]; let moved = false; // 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]); moved = true; break; } } } // 15% chance to change direction if (Math.random() < 0.2 || !moved) { pixel.dir *= -1; } } } } elements.head_049_1 = { color: ["#75816B"], name: "SCP-049-1", category: "life", hidden: true, density: 1080, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "plague": { elem1:"plague", chance:0.05 }, "oxygen": { elem2:"carbon_dioxide", chance:0.5 }, "beans": { elem2:[null,null,null,null,null,null,null,null,"stench"], chance:0.2 }, "sun": { elem1:"cooked_meat" }, "light": { stain1:"#825043" }, "bee": { stain1:"#cc564b", chance:0.2 }, "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 == "body_049_1") { 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" || pixelMap[pixel.x][pixel.y+1].element == "body_008")) { var body = pixelMap[pixel.x][pixel.y+1]; body.element = "body_049_1" } else { var body = null } // check for eating food if (body && !pixel.dead && Math.random() < 0.1) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].isFood) { deletePixel(x,y); break; } else if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].id == elements.head.id) { pixelMap[x][y+1].element = "body_049_1" changePixel(pixelMap[x][y],"head_049_1") break; } else if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].id == elements.body.id) { pixelMap[x][y].element = "body_049_1" changePixel(pixelMap[x][y-1],"head_049_1") break; } } } 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; } } } }, } elements.scp_055 = { color: "#000000", name: "SCP-055", grain: 0, excludeRandom: true, behavior: [ "XX|XX|XX", "XX|CH:REDACTED|XX", "XX|XX|XX" ], category: "scp", state: "solid", tempHigh: 55055055055, stateHigh: ["random",null], breakInto: ["random",null], hardness: 0.99, } elements.REDACTED = { hidden: true, color: "#000000", grain: 0.1, excludeRandom: true, behavior: [ "XX|CL|XX", "CL|EX|CL", "XX|CL|EX", ], category: "scp", state: "solid", movable: false, } elements.scp_063 = { color: ["#CAE8E9","#CCEAED","#A2CFD4","#A6D6D8","#8CCBD7"], name: "SCP-063", behavior: [ "XX|DL|XX", "DL|XX|DL", "M2%80 AND DL|M1 AND DL|M2%80 AND DL", ], ignore: ["scp_063","head_049","body_049","head_096","body_096","head_049_1","body_049_1","head_008_1","body_008_1","head_012_1","body_012_1","scp_999","scp_682","head","body","plant","grass","algae","cell","cancer","worm","flea","termite","ant","spider","fly","firefly","bee","stink_bug","human","bird","rat","frog","tadpole","fish","slug","snail","sapling","evergreen","cactus","kelp","coral","pistil","tree_branch","vine","bamboo_plant","mushroom_stalk","mushroom_gill","mushroom_cap","lichen","homunculus","root","hyphae","skin","porcelain"], category: "scp", tempHigh: 190, stateHigh: ["molten_plastic","molten_plastic","fire","dioxin"], burn: 10, burnTime: 300, burnInto: "dioxin", state: "solid", density: 1052, darkText: true } elements.scp_096 = { name: "SCP-096", category: "scp", color: ["#ddd2d6","#C9BCC2","#b6adb2"], buttonColor: ["#dcd3da","#ddd2d6","#dcd3da","#ddd2d6","#0b0706","#C9BCC2","#b6adb2","#ddd2d6","#C9BCC2","#b6adb2","#C9BCC2","#b6adb2","#ddd2d6","#C9BCC2","#b6adb2","#633134","#633134"], category: "scp", properties: { dead: false, dir: 1, panic: 0, }, onPlace: 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, name: "SCP-096", color: ["#ddd2d6","#C9BCC2","#b6adb2"], category: "scp", hardness: 0.99, pickElement: "scp_096", 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 > 20 && 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 changePixel(pixel,"bone") } // check for eating food if (body && !pixel.dead && Math.random() < 0.1) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && (elements[pixelMap[x][y].element].isFood || pixelMap[x][y].target == true)) { deletePixel(x,y); break; } } } 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: 1070, state: "solid", conduct: .05, tempHigh: 35000, stateHigh: "bone", burn: .01, burnTime: 3000, burnInto: "bone", reactions: { "homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] }, "head": { elem2 : ["blood","blood","blood","bone",null] }, "body": { elem2: ["blood","blood","meat","bone",null] }, "blood": { elem2 : null, chance: 0.5 }, "infection": { elem2 : null, chance: 0.5 }, "meat": { elem2 : ["blood",null], chance: 0.5 }, "bone_marrow": { elem2 : ["blood",null], chance: 0.5 }, "bone": { elem2 : ["bone_marrow","blood","quicklime"], chance: 0.5 }, "rotten_meat": { elem2 : ["infection","stench",null], chance: 0.5 }, "ground_meat": { elem2 : null, chance: 5 }, }, }, elements.shy_body = { name: "SCP-096", hidden: true, color: ["#ddd2d6","#C9BCC2","#b6adb2"], category: "scp", pickElement: "scp_096", hardness: 1, properties: { dead: false, dir: 1, h: 0, 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 == "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); // 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]; } 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; } for (var i = 0; i <= width; i++) { for (var j = 0; j <= height; j++) { if (!isEmpty(i,j,true)) { if (pixelMap[i][j].target == true && (pixelMap[i][j].element == "body" || pixelMap[i][j].element == "head")) { var targetExist = true pixel.h = 1 if (pixel.dir != 1 && pixelMap[i][j].x > pixel.x) { pixel.dir = 1 } else if (pixel.dir != -1 && pixelMap[i][j].x < pixel.x) { pixel.dir = -1 } else if (pixel.dir != 0 && pixelMap[i][j].x == pixel.x) { pixel.dir = 0 } } if (pixelMap[i][j].target == true && pixelMap[i][j].element != "body" && pixelMap[i][j].element != "head") { delete pixelMap[i][j].target } } if (i >= width && j >= height && !targetExist && pixel.h != 0) { pixel.h = 0 } } } if (pixel.h == 1) { if (Math.random() < 0.95) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 200; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if (seenPixel.target == true) { if (pixel.dir != 1 && seenPixel.x > pixel.x+1) { pixel.dir = 1 } else if (pixel.dir != -1 && seenPixel.x < pixel.x-1) { pixel.dir = -1 } else if (seenPixel.x == pixel.x+1 || seenPixel.x == pixel.x-1 || seenPixel.x == pixel.x) { pixel.dir = 0 } break; } } } } if (Math.random() < 0.95) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < width; x++) { let x2 = pixel.x+(x*pixel.dir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id) { if (!seenPixel.target) { seenPixel.target = true } } if (elements[seenPixel.element].id != elements.glass.id && elements[seenPixel.element].id != elements.stained_glass.id && elements[seenPixel.element].id != elements.glass_shard.id) { break; } } } } if (Math.random() < 1) { let yDir = -1 for (let y = 1; y < height; y++) { let x2 = pixel.x let y2 = pixel.y+(y*yDir); if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { if (pixelMap[x2][y2].target == true) { let seenPixel = pixelMap[x2][y2]; if (seenPixel.y < pixel.y) { if (!isEmpty(pixel.x, pixel.y-1, true)) { var headpixel = pixelMap[pixel.x][pixel.y-1]; if (headpixel.element == "shy_head") { if (isEmpty(pixel.x, pixel.y-3)) { tryMove(headpixel, pixel.x, pixel.y-3); if (isEmpty(pixel.x, pixel.y-2)) { tryMove(pixel, pixel.x, pixel.y-2) } else { swapPixels(pixel, pixelMap[pixel.x][pixel.y-2]) } } else { swapPixels(headpixel, pixelMap[pixel.x][pixel.y-3]) if (isEmpty(pixel.x, pixel.y-2)) { tryMove(pixel, pixel.x, pixel.y-2) } else { swapPixels(pixel, pixelMap[pixel.x][pixel.y-2]) } } } } } break; } } } } if (Math.random() < 1) { let yDir = 1 for (let y = 1; y < height; y++) { let x2 = pixel.x let y2 = pixel.y+(y*yDir); if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { if (pixelMap[x2][y2].target == true) { let seenPixel = pixelMap[x2][y2]; if (seenPixel.y > pixel.y) { if (!isEmpty(pixel.x, pixel.y-1, true)) { var headpixel = pixelMap[pixel.x][pixel.y-1]; if (headpixel.element == "shy_head") { if (isEmpty(pixel.x, pixel.y+1)) { tryMove(headpixel, pixel.x, pixel.y+1); if (isEmpty(pixel.x, pixel.y+2)) { tryMove(pixel, pixel.x, pixel.y+2) } else { swapPixels(pixel, pixelMap[pixel.x][pixel.y+2]) } } else { swapPixels(headpixel, pixelMap[pixel.x][pixel.y+1]) if (isEmpty(pixel.x, pixel.y+2)) { tryMove(pixel, pixel.x, pixel.y+2) } else { swapPixels(pixel, pixelMap[pixel.x][pixel.y+2]) } } } } } break; } } } } if (isEmpty(pixel.x, pixel.y-1) || !isEmpty(pixel.x,pixel.y-1) && pixelMap[pixel.x][pixel.y-1].element != "shy_head") { // create blood if decapitated 5% chance if (Math.random() < 0.05 && !pixel.charge) { createPixel("blood", pixel.x, pixel.y-1); } if (Math.random() < 0.9 && isEmpty(pixel.x,pixel.y-1)) { createPixel("shy_head",pixel.x,pixel.y-1) } else if (Math.random() < 0.025 && !isEmpty(pixel.x,pixel.y-1,true) && !outOfBounds(pixel.x,pixel.y-1) ) { changePixel(pixelMap[pixel.x][pixel.y-1],"shy_head") } } else if (head == null) { return } else if (isEmpty(pixel.x+pixel.dir, pixel.y) && !outOfBounds(pixel.x+pixel.dir, pixel.y) && isEmpty(pixel.x+pixel.dir, pixel.y-1) && !outOfBounds(pixel.x+pixel.dir, pixel.y-1)) { tryMove(head, pixel.x+pixel.dir, pixel.y-1) tryMove(pixel, pixel.x+pixel.dir, pixel.y) } else if (isEmpty(pixel.x+pixel.dir, pixel.y-1) && !outOfBounds(pixel.x+pixel.dir, pixel.y-1) && isEmpty(pixel.x+pixel.dir, pixel.y-2) && !outOfBounds(pixel.x+pixel.dir, pixel.y-2)) { tryMove(head, pixel.x+pixel.dir, pixel.y-2) tryMove(pixel, pixel.x+pixel.dir, pixel.y-1) } else if (isEmpty(pixel.x+pixel.dir, pixel.y-2) && !outOfBounds(pixel.x+pixel.dir, pixel.y-2) && isEmpty(pixel.x+pixel.dir, pixel.y-3) && !outOfBounds(pixel.x+pixel.dir, pixel.y-3)) { tryMove(head, pixel.x+pixel.dir, pixel.y-3) tryMove(pixel, pixel.x+pixel.dir, pixel.y-2) } else if (isEmpty(pixel.x+pixel.dir, pixel.y+1) && !outOfBounds(pixel.x+pixel.dir, pixel.y+1) && isEmpty(pixel.x+pixel.dir, pixel.y+2) && !outOfBounds(pixel.x+pixel.dir, pixel.y+2)) { tryMove(head, pixel.x+pixel.dir, pixel.y+1) tryMove(pixel, pixel.x+pixel.dir, pixel.y+2) } else if (isEmpty(pixel.x+pixel.dir, pixel.y+2) && !outOfBounds(pixel.x+pixel.dir, pixel.y+2) && isEmpty(pixel.x+pixel.dir, pixel.y+3) && !outOfBounds(pixel.x+pixel.dir, pixel.y+3)) { tryMove(head, pixel.x+pixel.dir, pixel.y+2) tryMove(pixel, pixel.x+pixel.dir, pixel.y+3) } else if (!isEmpty(pixel.x+pixel.dir, pixel.y) && !outOfBounds(pixel.x+pixel.dir, pixel.y) && !isEmpty(pixel.x+pixel.dir, pixel.y-1) && !outOfBounds(pixel.x+pixel.dir, pixel.y-1)) { if (pixelMap[pixel.x+pixel.dir][pixel.y].target == true) { changePixel(pixelMap[pixel.x+pixel.dir][pixel.y], "blood") } else if (pixelMap[pixel.x+pixel.dir][pixel.y-1].target == true) { changePixel(pixelMap[pixel.x+pixel.dir][pixel.y-1], "blood") } else { if (isBreakable(pixelMap[pixel.x+pixel.dir][pixel.y-1])) { breakPixel(pixelMap[pixel.x+pixel.dir][pixel.y-1]); swapPixels(head, pixelMap[pixel.x+pixel.dir][pixel.y-1]) } else if (elements[pixelMap[pixel.x+pixel.dir][pixel.y-1].element].movable == true ) { swapPixels(head, pixelMap[pixel.x+pixel.dir][pixel.y-1]) } else if (elements[pixelMap[pixel.x+pixel.dir][pixel.y-1].element].hardness != 1 ) { swapPixels(head, pixelMap[pixel.x+pixel.dir][pixel.y-1]) } if (isBreakable(pixelMap[pixel.x+pixel.dir][pixel.y])) { breakPixel(pixelMap[pixel.x+pixel.dir][pixel.y]); swapPixels(pixel, pixelMap[pixel.x+pixel.dir][pixel.y]) } else if (elements[pixelMap[pixel.x+pixel.dir][pixel.y].element].movable == true) { swapPixels(pixel, pixelMap[pixel.x+pixel.dir][pixel.y]) } else if (elements[pixelMap[pixel.x+pixel.dir][pixel.y].element].hardness != 1 ) { swapPixels(pixel, pixelMap[pixel.x+pixel.dir][pixel.y]) } } } for (var i = 0; i < squareCoords.length; i++) { var coords = squareCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (isBreakable(pixel2)) { // times 0.25 if not shiftDown else 1 if (Math.random() < (1.5-(elements[pixel.element].hardness || 0))) { breakPixel(pixel2); } // if (Math.random() > ((1-(elements[pixel.element].hardness || 1)) * (shiftDown ? 0.5 : 1))) { } else if (old === pixel2.element && elements[pixel2.element].movable && !isEmpty(pixel2.x,pixel2.y+1) && !paused && pixel2.element != "shy_head" && pixel2.element != "shy_body") { let x = 0; let y = 0; if (Math.random() < 0.66) x = Math.random() < 0.5 ? 1 : -1; if (Math.random() < 0.66) y = Math.random() < 0.5 ? 1 : -1; tryMove(pixel2,pixel2.x+x,pixel2.y+y) } } } } else { if (isEmpty(pixel.x, pixel.y-1) || !isEmpty(pixel.x,pixel.y-1) && pixelMap[pixel.x][pixel.y-1].element != "shy_head") { // create blood if decapitated 5% chance if (Math.random() < 0.05 && !pixel.charge) { createPixel("blood", pixel.x, pixel.y-1); } if (Math.random() < 0.2 && isEmpty(pixel.x,pixel.y-1)) { createPixel("shy_head",pixel.x,pixel.y-1) } else if (!isEmpty(pixel.x,pixel.y-1,true) && !outOfBounds(pixel.x,pixel.y-1) && (Math.random() < 0.1 || elements[pixelMap[pixel.x][pixel.y].element].state != "solid")) { changePixel(pixelMap[pixel.x][pixel.y-1],"shy_head") } } else if (head == null) { return } else if (Math.random() < 0.01) { // Move 1% 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; } } if (Math.random() < 0.95) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 150; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id) { pixel.h = 1 seenPixel.target = true } if (elements[seenPixel.element].id != elements.glass.id && elements[seenPixel.element].id != elements.stained_glass.id && elements[seenPixel.element].id != elements.glass_shard.id) { break; } } } } for (var i = 0; i < squareCoords.length; i++) { var coords = squareCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (isBreakable(pixel2) && pixel2.target) { // times 0.25 if not shiftDown else 1 if (Math.random() < (1.5-(elements[pixel.element].hardness || 0)) && Math.random() > 0.5) { breakPixel(pixel2); } // if (Math.random() > ((1-(elements[pixel.element].hardness || 1)) * (shiftDown ? 0.5 : 1))) { } } } } }, density: 1090, state: "solid", conduct: .005, forceSaveColor: true, reactions: { "homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] }, "head": { elem2 : ["blood","blood","blood","bone",null] }, "body": { elem2: ["blood","blood","meat","bone",null] }, "blood": { elem2 : null, chance: 0.5 }, "infection": { elem2 : null, chance: 0.5 }, "meat": { elem2 : ["blood",null], chance: 0.5 }, "bone_marrow": { elem2 : ["blood",null], chance: 0.5 }, "bone": { elem2 : ["bone_marrow","blood","quicklime"], chance: 0.5 }, "rotten_meat": { elem2 : ["infection","stench",null], chance: 0.5 }, "ground_meat": { elem2 : null, chance: 5 }, }, } elements.scp_173 = { name: "SCP-173", color: ["#ababab","#ae551c","#AC3846","#AC3846","#698348","#444240","#E5BA9B","#AC3846","#AC3846","#698348","#444240","#E5BA9B","#AC3846","#AC3846","#698348","#444240","#E5BA9B"], buttonColor: ["#AC3846","#AC3846","#698348","#444240","#E5BA9B","#ababab","#ababab","#ababab","#ababab","#ae551c","#bc6e39","#71797e","#AC3846","#AC3846","#698348","#444240","#E5BA9B"], category: "scp", properties: { dead: false, dir: 1, panic: 0 }, onPlace: function(pixel) { if (isEmpty(pixel.x, pixel.y+1)) { createPixel("body_173", pixel.x, pixel.y+1); var color = pixel.color; changePixel(pixel,"head_173"); pixel.color = color; } else if (isEmpty(pixel.x, pixel.y-1)) { createPixel("head_173", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixel.color; changePixel(pixel,"body_173"); } else { deletePixel(pixel.x, pixel.y); } }, reactions: { }, related: ["body_173","head_173"], cooldown: defaultCooldown, forceSaveColor: true, } elements.body_173 = { name: "SCP-173", color: ["#ababab","#ababab","#ababab","#ababab","#ababab","#ababab","#ababab","#ae551c","#bc6e39","#71797e","#71797e"], category: "scp", hidden: true, density: 2400, state: "solid", conduct: .025, tempHigh: 1505, stateHigh: ["magma","magma","magma","magma","rust","rust","rust","magma","magma","magma","magma","rust","rust","rust","spray_paint"], breakInto: ["concrete","concrete","concrete","concrete","rust","rust","rust","concrete","concrete","concrete","concrete","rust","rust","rust","spray_paint"], forceSaveColor: true, pickElement: "scp_173", reactions: { "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, }, properties: { dead: false, dir: 1, panic: 0, frozen1: true, frozen2: true }, 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 === "head_173") { 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) { pixel.element = "concrete" } return } // Find the head if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head_173") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { pixel.panic = head.panic; delete head.panic; } } else { var head = null } if (pixel.panic > 0) { pixel.panic -= 0.1; if (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 50) { pixel.panic = 50; } } if (isEmpty(pixel.x, pixel.y-1)) { // create blood if decapitated 10% chance if (Math.random() < 0.0025 && !pixel.charge) { createPixel("blood", pixel.x, pixel.y-1); } if (Math.random() < 0.05) { pixel.dead = pixelTicks; } } else if (head === null) { return } if (pixel.frozen1 == false && pixel.frozen2 == false) { if (Math.random() < 1) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < 100; x++) { let x2 = pixel.x+x let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (seenPixel.element == "head" && seenPixel.dead == false) { if (!isEmpty(seenPixel.x,seenPixel.y+1) && !outOfBounds(seenPixel.x,seenPixel.y+1)) { let bodyP = pixelMap[seenPixel.x][seenPixel.y+1] if (bodyP.x > pixel.x && bodyP.dir == -1) { pixel.frozen1 = true; break; } else if (bodyP.x < pixel.x && bodyP.dir == 1) { pixel.frozen1 = true; break; } if (isEmpty(bodyP.x+(-bodyP.dir),bodyP.y) && isEmpty(bodyP.x+(-bodyP.dir),bodyP.y-1) && (bodyP.x < pixel.x && bodyP.dir == -1 || bodyP.x > pixel.x && bodyP.dir == 1)) { tryMove(pixelMap[pixel.x][pixel.y-1],bodyP.x+(-bodyP.dir),bodyP.y-1) tryMove(pixel,bodyP.x+(-bodyP.dir),bodyP.y) bodyP.dead = pixelTicks } } } else if (seenPixel.element == "body" && seenPixel.dead == false) { if (seenPixel.x > pixel.x && seenPixel.dir == -1) { pixel.frozen1 = true; break; } else if (seenPixel.x < pixel.x && seenPixel.dir == 1) { pixel.frozen1 = true; break; } if (isEmpty(seenPixel.x+(-seenPixel.dir),seenPixel.y) && isEmpty(seenPixel.x+(-seenPixel.dir),seenPixel.y-1) && (seenPixel.x < pixel.x && seenPixel.dir == -1 || seenPixel.x > pixel.x && seenPixel.dir == 1)) { tryMove(pixelMap[pixel.x][pixel.y-1],seenPixel.x+(-seenPixel.dir),seenPixel.y-1) tryMove(pixel,seenPixel.x+(-seenPixel.dir),seenPixel.y) seenPixel.dead = pixelTicks } } break; } } } if (Math.random() < 1) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = -1; x > -100; x--) { let x2 = pixel.x+x let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (seenPixel.element == "head" && seenPixel.dead == false) { if (!isEmpty(seenPixel.x,seenPixel.y+1) && !outOfBounds(seenPixel.x,seenPixel.y+1)) { let bodyP = pixelMap[seenPixel.x][seenPixel.y+1] if (bodyP.x > pixel.x && bodyP.dir == -1) { pixel.frozen2 = true break; } else if (bodyP.x < pixel.x && bodyP.dir == 1) { pixel.frozen2 = true break; } if (isEmpty(bodyP.x+(-bodyP.dir),bodyP.y) && isEmpty(bodyP.x+(-bodyP.dir),bodyP.y-1) && (bodyP.x < pixel.x && bodyP.dir == -1 || bodyP.x > pixel.x && bodyP.dir == 1)) { tryMove(pixelMap[pixel.x][pixel.y-1],bodyP.x+(-bodyP.dir),bodyP.y-1) tryMove(pixel,bodyP.x+(-bodyP.dir),bodyP.y) bodyP.dead = pixelTicks } } } else if (seenPixel.element == "body" && seenPixel.dead == false) { if (seenPixel.x > pixel.x && seenPixel.dir == -1) { pixel.frozen2 = true break; } else if (seenPixel.x < pixel.x && seenPixel.dir == 1) { pixel.frozen2 = true break; } if (isEmpty(seenPixel.x+(-seenPixel.dir),seenPixel.y) && isEmpty(seenPixel.x+(-seenPixel.dir),seenPixel.y-1) && (seenPixel.x < pixel.x && seenPixel.dir == -1 || seenPixel.x > pixel.x && seenPixel.dir == 1)) { tryMove(pixelMap[pixel.x][pixel.y-1],seenPixel.x+(-seenPixel.dir),seenPixel.y-1) tryMove(pixel,seenPixel.x+(-seenPixel.dir),seenPixel.y) seenPixel.dead = pixelTicks } } break; } } } if (Math.random() < 0.5*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 50% chance var movesToTry = [ [1*pixel.dir,0], ]; let moved = false; // 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]); moved = true; break; } } else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; if (hitPixel.element === "body" || hitPixel.element === "head") { hitPixel.dead = pixelTicks } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } } } else if (pixel.frozen1 == true || pixel.frozen2 == true) { if (Math.random() < 0.9) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < 100; x++) { let x2 = pixel.x+x let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (seenPixel.element == "head") { if (!isEmpty(seenPixel.x,seenPixel.y+1) && !outOfBounds(seenPixel.x,seenPixel.y+1)) { let bodyP = pixelMap[seenPixel.x][seenPixel.y+1] if (bodyP.x > pixel.x && bodyP.dir == -1) { break; } else if (bodyP.x < pixel.x && bodyP.dir == 1) { break; } } } else if (seenPixel.element == "body") { if (seenPixel.x > pixel.x && seenPixel.dir == -1) { break; } else if (seenPixel.x < pixel.x && seenPixel.dir == 1) { break; } } } if (x >= 99) { pixel.frozen1 = false } } } if (Math.random() < 0.9) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = -1; x > -100; x--) { let x2 = pixel.x+x let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (seenPixel.element == "head") { if (!isEmpty(seenPixel.x,seenPixel.y+1) && !outOfBounds(seenPixel.x,seenPixel.y+1)) { let bodyP = pixelMap[seenPixel.x][seenPixel.y+1] if (bodyP.x > pixel.x && bodyP.dir == -1) { break; } else if (bodyP.x < pixel.x && bodyP.dir == 1) { break; } } } else if (seenPixel.element == "body") { if (seenPixel.x > pixel.x && seenPixel.dir == -1) { break; } else if (seenPixel.x < pixel.x && seenPixel.dir == 1) { break; } } } if (x <= -99) { pixel.frozen2 = false } } } } } } elements.head_173 = { name: "SCP-173", color: ["#ababab","#ae551c","#AC3846","#AC3846","#698348","#444240","#E5BA9B","#AC3846","#AC3846","#698348","#444240","#E5BA9B","#AC3846","#AC3846","#698348","#444240","#E5BA9B"], category: "scp", hidden: true, density: 2400, state: "solid", conduct: .025, tempHigh: 1505, stateHigh: ["magma","magma","magma","magma","rust","rust","rust","magma","magma","magma","magma","rust","rust","rust","spray_paint"], breakInto: ["concrete","concrete","concrete","concrete","rust","rust","rust","concrete","concrete","concrete","concrete","rust","rust","rust","spray_paint"], forceSaveColor: true, pickElement: "scp_173", reactions: { "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, }, 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) { pixel.element = "concrete" return } } // Find the body if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body_173") { 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.025 && !pixel.charge) { createPixel("blood", pixel.x, pixel.y+1); // set dead to true 15% chance } if (Math.random() < 0.05) { pixel.dead = pixelTicks; } } }, } elements.scp_229_seed = { name: "SCP-229", color: "#9c6c25", buttonColor:["#4d0a03","#4d0a03","#4d0a03","#4d0a03","#4d0a03","#4d0a03","#a95232","#be4322","#BD2D2D","#EDEDE5","#F2D243","#FFF0E6","#908F84","#908F84","#E47A3E","#DBC0AC","#DBC0AC","#a95232","#be4322","#BD2D2D","#0C1D24","#0C1D24","#0C1D24","#0C1D24","#0C1D24","#0C1D24"], behavior: [ "XX|M2%1.5|XX", "XX|L2:copper AND C2:scp_229%50|XX", "XX|M1|XX", ], behaviorOn: [ "SH%5|XX|SH%5", "XX|CH:scp_229%50|XX", "SH%5|M1|SH%5", ], tempHigh: 1750, stateHigh: ["metal_scrap","metal_scrap","metal_scrap","metal_scrap","molten_glass","molten_plastic","molten_plastic"], conduct: 1, tick: behaviors.SEEDRISE, breakInto: "metal_scrap", category:"scp", state: "solid", density: 1700, cooldown: defaultCooldown, excludeRandom: true, } elements.scp_229 = { name: "SCP-229", color:["#a95232","#be4322","#4d0a03","#0C1D24","#908F84","#BD2D2D","#31BA90","#1B5BB2","#EDEDE5","#F2D243","#FFF0E6","#908F84","#E47A3E","#DBC0AC"], colorPattern: [ "rVoooVwVVVVbVVVyVVvrvvvvvVVVVVVVVCrVVVVVVVVrrrrr", "vrvvvovwvvvvbvvyvvrVVVVVVvvvvvvvvvrcvggrrrrvvtvv", "VVrVVVorrVVVVbbbrrvvvvvvvVVVVVVVVVrggtrtVVVVtVVV", "vvvrrrrvwrvvvggrggggVcCCcCoooogggggrrrvvtvvvtvvv", "VVVVVVVVVwrrrrrCbcccgoooooVVVgVVVVVtVVVVVtttVVVV", "vvvvvvvvvcwgccvvbvVVoggVVvvggvvvvvvtvtttvvvvvvvv", "VVVVVccCCVgwVVVVVbvvvovggggVVVVVVVVVtVbbtVVVVVVV", "vvccCvvvvgwvvvvvvvbVVVooVvvvvvvvvvvvbtttvvvvvvvv", "cCVVVVVVgwVVVVVVVybvvvvvooooVVVVVVVbVVVVtVVVVVVV", "vvvvvvwwgvvvvvvvvyVbbbVVVvvvooovbbbvvvvvvtvvvvvc", "VVVwwwVVgVVVVVVVyVvvvvbbbVVVVbbboooVVVVVVVtVVVCV", "vvwvggggbvvvvvvvyvVVVVVVVbbbbvvvvvvooovvvvvtwcvv", "VVwgVVVVbVVVVVVyVVvvvvvvvVVVVVrVVVVVVVooocCctwVV", "vvgwvvvwbvvvvvvyvvVVVVrrrvvvvrvrvvvvvCcCCoootvww", "wgwwVVwVVbVVVVyVVVvvvrvvvrrrrVVVrVCCCVVVVVVVotoV", "govvvvwvvvbvvvyvvvVVrVVVVvvvvvvvcrvvvvvvvvvvvtvo",/* my design "oyyyvvorvywvoyvo", "VooyyvoVVywwoyvo", "VrVoyvorrywyoyvo", "VrVvyvorrywyoyvo", "ooooyooVVywyoywo", "rrrryrrrvywyoyyr", "wvvvyyvryywyoyyy", "ywvvoyyyyowyooyy", "yoovvoooovwyoooy", "yrowvvvrvvwyrrro", "yvoywvvrvvwyvvvv", "yvovywooooooovvv", "yoovvyorrrrrovvo", "yrrVVVowvvyyyvvo", "yrrrrroywyyoyyvo", "yyVVVVoryyovoyvo", nousers design */ ], colorKey: { "C":"#a95232", "c":"#be4322", "V":"#4d0a03", "v":"#0C1D24", "g":"#908F84", "r":"#BD2D2D", "t":"#31BA90", "b":"#1B5BB2", "W":"#EDEDE5", "w":"#DBC0AC", "y":"#F2D243", "o":"#E47A3E", }, behavior: [ "XX|SH%5|XX", "SH%5|XX|SH%5", "XX|SH%5|XX", ], category: "scp", hardness: 0.85, breakInto: "metal_scrap", tempHigh: 1750, stateHigh: ["metal_scrap","metal_scrap","metal_scrap","metal_scrap","molten_glass","molten_plastic","molten_plastic"], properties: { radius: 10, nodes: 2, }, tick: function(pixel) { if (pixel.nCD) { pixel.nCD -= 1; if (pixel.nCD <= 0) { // delete pixel.chargeCD; pixel.nCD = undefined; } } if (!isEmpty(pixel.x-1,pixel.y+1) && !isEmpty(pixel.x+1,pixel.y+1) && !isEmpty(pixel.x-1,pixel.y-1) && !isEmpty(pixel.x+1,pixel.y-1) && !isEmpty(pixel.x,pixel.y-1) && !isEmpty(pixel.x,pixel.y+1) && !isEmpty(pixel.x-1,pixel.y) && !isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.5) { pixel.radius = 0 pixel.nodes = 0 } if ((isEmpty(pixel.x,pixel.y-1) || isEmpty(pixel.x,pixel.y+1) || isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x+1,pixel.y)) && Math.random() > 0.5 && pixel.radius == 0 && pixel.nodes == 0) { pixel.radius = 10 pixel.nodes = 1 } if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.9 && Math.random() > 0.9 && pixel.radius > 0 && pixel.nodes > 1 && pixel.nCD == undefined) { createPixel("electric",pixel.x,pixel.y+1) } if (pixel.radius > 0 && pixel.nodes > 0 && pixel.nCD == undefined) { var coords = circleCoords(pixel.x,pixel.y,pixel.radius); for (var i = 0; i < coords.length; i++) { if (!isEmpty(coords[i].x,coords[i].y) && !outOfBounds(coords[i].x,coords[i].y)) { var electric = pixelMap[coords[i].x][coords[i].y] if (elements[electric.element].category == "nervous system" && Math.random() > 0.5 || electric.element == "thunder_cloud" || electric.charge || electric.element == "scp_804" && electric.active == true || electric.element == "brain" || electric.element == "fish" || electric.element == "frog" || electric.element == "rat" || electric.element == "bird" || electric.element == "head" || electric.element == "head_1000" || electric.element == "head_035" || electric.element == "head_008" || electric.element == "battery" || electric.element == "electric" || electric.element == "lightning" || electric.element == "malware" || electric.element == "gray_goo") { if (electric.y > pixel.y && electric.x > pixel.x && isEmpty(pixel.x+1,pixel.y+1)) { createPixel("scp_229",pixel.x+1,pixel.y+1) var electric2 = pixelMap[pixel.x+1][pixel.y+1] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } else if (electric.y < pixel.y && electric.x < pixel.x && isEmpty(pixel.x-1,pixel.y-1)) { createPixel("scp_229",pixel.x-1,pixel.y-1) var electric2 = pixelMap[pixel.x-1][pixel.y-1] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } else if (electric.y < pixel.y && electric.x > pixel.x && isEmpty(pixel.x+1,pixel.y-1)) { createPixel("scp_229",pixel.x+1,pixel.y-1) var electric2 = pixelMap[pixel.x+1][pixel.y-1] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } else if (electric.y > pixel.y && electric.x < pixel.x && isEmpty(pixel.x-1,pixel.y+1)) { createPixel("scp_229",pixel.x-1,pixel.y+1) var electric2 = pixelMap[pixel.x-1][pixel.y+1] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } else if (electric.x > pixel.x && (isEmpty(pixel.x+1,pixel.y) || Math.random() < (1-(elements[pixelMap[pixel.x+1][pixel.y].element].hardness || 0)) / 4)) { if (!isEmpty(pixel.x+1,pixel.y)) { deletePixel(pixel.x+1,pixel.y) } createPixel("scp_229",pixel.x+1,pixel.y) var electric2 = pixelMap[pixel.x+1][pixel.y] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } else if (electric.x < pixel.x && (isEmpty(pixel.x-1,pixel.y) || Math.random() < (1-(elements[pixelMap[pixel.x-1][pixel.y].element].hardness || 0)) / 4)) { if (!isEmpty(pixel.x-1,pixel.y)) { deletePixel(pixel.x-1,pixel.y) } createPixel("scp_229",pixel.x-1,pixel.y) var electric2 = pixelMap[pixel.x-1][pixel.y] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } else if (electric.y > pixel.y && (isEmpty(pixel.x,pixel.y+1) || Math.random() < (1-(elements[pixelMap[pixel.x][pixel.y+1].element].hardness || 0)) / 4)) { if (!isEmpty(pixel.x,pixel.y+1)) { deletePixel(pixel.x,pixel.y+1) } createPixel("scp_229",pixel.x,pixel.y+1) var electric2 = pixelMap[pixel.x][pixel.y+1] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } else if (electric.y < pixel.y && (isEmpty(pixel.x,pixel.y-1) || Math.random() < (1-(elements[pixelMap[pixel.x][pixel.y-1].element].hardness || 0)) / 4)) { if (!isEmpty(pixel.x,pixel.y-1)) { deletePixel(pixel.x,pixel.y-1) } createPixel("scp_229",pixel.x,pixel.y-1) var electric2 = pixelMap[pixel.x][pixel.y-1] pixel.nodes-- electric2.nodes = 1 electric2.nCD = 10 pixel.nCD = 50 } } } } } 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) && !outOfBounds(x,y) && pixel.nCD == undefined) { var electric = pixelMap[x][y] let old = electric.element; if (electric.element == "brain" || electric.element == "thunder_cloud" || electric.element == "scp_804" && electric.active == true || elements[electric.element].category == "nervous system" && Math.random() > 0.5 || electric.element == "fish" || electric.element == "frog" || electric.element == "rat" || electric.element == "bird" || electric.element == "head" || electric.element == "head_035" || electric.element == "head_1000" || electric.element == "head_008" || elements[electric.element].category == "machines" && Math.random() > 0.5 || electric.element == "battery" || electric.element == "electric" || electric.element == "lightning" || electric.element == "malware" || electric.element == "gray_goo") { deletePixel(electric.x,electric.y) createPixel("scp_229",electric.x,electric.y) electric = pixelMap[electric.x][electric.y] pixel.nodes-- electric.nCD = 10 pixel.nCD = 50 } else if (electric.element == "glass" || electric.element == "rad_glass" || electric.element == "stained_glass") { electric.element = "glass_shard" pixel.nCD = 2 } else if (electric.element == "site_nuke") { explodeAt(electric.x,electric.y,100,["plasma","plasma","plasma","plasma","plasma","plasma","plasma","radiation","radiation","radiation","radiation","rad_steam","electric","electric"]) pixel.nCD = 2 } else if (electric.charge) { deletePixel(electric.x,electric.y) createPixel("scp_229",electric.x,electric.y) electric = pixelMap[electric.x][electric.y] if (Math.random() > 0.45) { electric.nodes = 1 } pixel.nodes-- electric.nCD = 15 pixel.nCD = 60 } } } doDefaults(pixel) }, movable: false, excludeRandom: true, state: "solid", hidden: true, } elements.scp_236 = { name: "SCP-236", color: "#bc5a4c", properties: { mimic: "meat", mimicColor: "#a0522d", hide: false, dir: 1, }, tick: function(pixel) { if (Math.random() < 0.2) { pixel.dir = Math.random() < 0.5 ? 1 : -1 } if (pixel.hide == true) { if (pixel.color != pixel.mimicColor) { pixel.color = pixel.mimicColor } 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) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (Math.random() < 0.0125 && (elements[pixel2.element].category == "life" || elements[pixel2.element].category == "food" || pixel2.element == "wood" || pixel2.element == "straw" || pixel2.element == "paper" || pixel2.element == "cloth" || pixel2.element == "sponge" || pixel2.element == "bamboo" || pixel2.element == "amber" || pixel2.element == "skin" || pixel2.element == "particleboard" || pixel2.element == "hair" || pixel2.element == "udder")) { if (Math.random() < (1-(elements[pixel2.element].hardness || 0)) / 4 || Math.random() > 0.5) { pixel2.mimic = pixel2.element pixel2.mimicColor = pixel2.color pixel2.element = "scp_236" pixel2.hide = true pixel2.dir = pixel.dir } } else if (pixel2.element == "scp_236" && pixel2.hide != true && Math.random() > 0.75 && (pixel2.awakeStart + 5) < pixelTicks) { pixel2.hide = true } } } if (Math.random() < 0.75) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 10; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id || elements[seenPixel.element].id == elements.body.id || elements[seenPixel.element].id == elements.light.id) { pixel.hide = false } break; } } } if (elements[pixel.mimic].movable == true || (isEmpty(pixel.x,pixel.y-4) || isEmpty(pixel.x,pixel.y-3) || isEmpty(pixel.x,pixel.y-2) || isEmpty(pixel.x,pixel.y-1)) && (isEmpty(pixel.x+1,pixel.y) && isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x-2,pixel.y) && isEmpty(pixel.x+2,pixel.y) || isEmpty(pixel.x-1,pixel.y) && isEmpty(pixel.x-2,pixel.y) && isEmpty(pixel.x+1,pixel.y) && isEmpty(pixel.x+2,pixel.y))) { tryMove(pixel,pixel.x,pixel.y+1) } } if (pixel.hide != true) { if (!pixel.awakeStart) { pixel.awakeStart = pixelTicks } if (pixel.color == pixel.mimicColor) { pixel.color = pixelColorPick(pixel,"#bc5a4c") } 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) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if ((elements[pixel2.element].category == "life" || elements[pixel2.element].category == "food") && Math.random() < 0.025) { if (Math.random() < (1-(elements[pixel2.element].hardness || 0)) / 4 || Math.random() > 0.5) { pixel2.mimic = pixel2.element pixel2.mimicColor = pixel2.color pixel2.element = "scp_236" pixel2.hide = false pixel2.dir = pixel.dir } } else if (elements[pixel2.element].isFood == true && Math.random() < 0.025) { deletePixel(pixel2.x,pixel2.y) } else if (pixel2.element == "scp_236" && pixel2.hide == true && Math.random() > 0.85) { pixel2.hide = false } } } if (elements[pixel.mimic].movable != true && Math.random() > 0.75 && !tryMove(pixel,pixel.x,pixel.y+1) || elements[pixel.mimic].movable == true && !tryMove(pixel,pixel.x,pixel.y+1)) { if (!tryMove(pixel,pixel.x+pixel.dir,pixel.y)) { let ydir = Math.random() < 0.5 ? 1 : -1 tryMove(pixel,pixel.x+pixel.dir,pixel.y+ydir) } } if (Math.random() < 0.05 && (pixel.awakeStart + 100) < pixelTicks) { delete pixel.awakeStart pixel.hide = true } } }, temp: 20, tempHigh: 250, stateHigh: "meat", onStateHigh(pixel) { if (Math.random() < 0.9) { changePixel(pixel, pixel.mimic) } else { explodeAt(pixel.x,pixel.y,5,"fire") } }, tempLow: -30, stateLow: "meat", onStateLow(pixel) { changePixel(pixel, pixel.mimic) }, category:"scp", hardness: 0.15, onBreak(pixel) { if (Math.random() < 0.9) { changePixel(pixel, pixel.mimic) } else { explodeAt(pixel.x,pixel.y,5,"fire") } }, state: "solid", density: 963.7, conduct: 0.2, } elements.scp_391 = { name: "SCP-391", color: ["#D7D0CA","#D7BFB5","#B49171","#986536","#B49171","#623613"], properties: { "phase": 2, "rising":0 }, tick: function(pixel) { if (Math.random() < 0.0000035 && isEmpty(pixel.x,pixel.y+1)) { createPixel("diamond",pixel.x,pixel.y+1); } var newX = pixel.x; var newY = pixel.y; if (pixel.phase === 1) { // Landing newX += pixel.flipX ? -1 : 1; newY += Math.random() < 0.5 ? 0 : 1; if (!tryMove(pixel, newX, newY)) { if (outOfBounds(newX, newY)) { pixel.phase = 0 } else { var newPixel = pixelMap[newX][newY]; if (elements[newPixel.element].state !== "solid") { pixel.phase = 3; } else if (newPixel.element === "bird") { pixel.phase = 3; newPixel.phase = 3; } else { pixel.phase = 0; } } } // Stop landing } else if (pixel.phase === 2) { // Gliding newX += pixel.flipX ? -1 : 1; newY += Math.random() < 0.9 ? 0 : 1; if (Math.random() < 0.025) { pixel.phase = 1 } // Start landing if (!tryMove(pixel, newX, newY)) { pixel.flipX = !pixel.flipX; if (!outOfBounds(newX, newY) && pixelMap[newX][newY].element !== "bird") { pixel.phase = 3; } } } else if (pixel.phase === 0) { // Standing if (Math.random() < 0.05) { newX += pixel.flipX ? -1 : 1; } newY ++; if (Math.random() < 0.02) { pixel.phase = 3 } // Start rising if (!tryMove(pixel, newX, newY)) { if (!outOfBounds(newX, newY) && pixelMap[newX][newY].element === "bird") { pixel.phase = 3; pixelMap[newX][newY].phase = 3; } } } else if (pixel.phase === 3) { // Rising newX += pixel.flipX ? -1 : 1; newY --; if (!tryMove(pixel, newX, newY) || (pixel.rising > 5 && Math.random() < 0.05)) { pixel.phase = 2; pixel.rising = 0; } // Start gliding else { pixel.rising ++; } } doHeat(pixel); doElectricity(pixel); doBurning(pixel); }, flippableX: true, reactions: { "rat": { elem2:null, chance:0.25, func:behaviors.FEEDPIXEL }, "bird": { elem2:null, chance:0.125, func:behaviors.FEEDPIXEL }, "meat": { elem2:null, chance:0.125, func:behaviors.FEEDPIXEL }, "cured_meat": { elem2:null, chance:0.05, func:behaviors.FEEDPIXEL }, "cooked_meat": { elem2:null, chance:0.05, func:behaviors.FEEDPIXEL }, "fly": { elem2:null, chance:0.0625, func:behaviors.FEEDPIXEL }, "firefly": { elem2:null, chance:0.075, func:behaviors.FEEDPIXEL }, "bee": { elem2:null, chance:0.00625, func:behaviors.FEEDPIXEL }, "worm": { elem2:null, chance:0.0625, func:behaviors.FEEDPIXEL }, "ant": { elem2:null, chance:0.00625, func:behaviors.FEEDPIXEL }, "stink_bug": { elem2:"stench", chance:0.00625, func:behaviors.FEEDPIXEL }, "dead_bug": { elem2:null, chance:0.005, func:behaviors.FEEDPIXEL }, "spider": { elem2:null, chance:0.025, func:behaviors.FEEDPIXEL }, "web": { elem2:null, chance:0.05 }, "plague": { elem1:"plague", chance:0.0225 }, "oxygen": { elem2:"carbon_dioxide", chance:0.5 } }, foodNeed: 5, egg: "gold_coin", temp: 41, tempHigh: 120, stateHigh: "cooked_meat", stateHighColor: "#E4CFB9", tempLow: -18, stateLow: "frozen_meat", category:"scp", burn:2, burnTime:100, breakInto: ["feather","blood","feather","blood","feather","blood","feather","blood","feather","blood","diamond","gold_coin","gold_coin","feather","blood","feather","blood","feather","blood","feather","blood","feather","blood","feather","blood","gold_coin","feather","blood","feather","blood","feather","blood","feather","blood","feather","blood","feather","blood","gold_coin",], state: "solid", density: 400, cooldown: defaultCooldown, conduct: 0.5 } if (!elements.magma.reactions) { elements.magma.reactions = {}; } elements.magma.reactions.molten_quartz = { elem1:"molten_granite", elem2:"molten_granite"} elements.molten_granite = { color: ['#ffd956', '#ffae56', '#ff8200', '#ffff70', '#ffff70', '#ffa000', '#ff7e24', '#ff5e00'], reactions: { "molten_slag": { elem2:"molten_granite", chance:0.22 }, "molten_quartz": { elem2:"molten_granite", chance:0.66 }, "magma": { elem2:"molten_granite", chance:0.66 }, }, grain: 0.25 }, elements.granite = { color: ["#F5EDF8","#8B8381","#B8AEAC","#DCD6E0","#847E7E","#1B1A1E","#F5EDF8","#8B8381","#B8AEAC","#DCD6E0","#847E7E"], grain: 1.25, behavior: behaviors.WALL, tempHigh: 1237.5, category: "land", state: "solid", density: 2700, hardness: 0.4, breakInto: ["rock","sand"], breakIntoColor: ["#DCD6E0","#b1aba3","#8B8381","#DCD6E0","#b1aba3","#F5EDF8","#DCD6E0","#b1aba3","#8B8381","#DCD6E0","#b1aba3","#F5EDF8","#1B1A1E"], } elements.quartz = { color: ["#EEF0EF","#ECEEED"], behavior: behaviors.WALL, canPlace: true, grain: 0.1, reactions: { }, tempHigh: 1650, hardness: 0.07, breakInto: "quartz_crystal", density: 2650, state: "solid", category:"solids", } elements.quartz_crystal = { color: ["#EEF0EF","#ECEEED","#F3F3F3"], behavior: behaviors.POWDER, canPlace: true, reactions: { }, tempHigh: 1650, stateHigh: "molten_quartz", density: 2650, state: "solid", category:"powders", hidden: true } elements.scp_409 = { name: "SCP-409", color: ["#EEF0EF","#ECEEED"], grain: 0.5, tick: function(pixel) { if (pixel.start === pixelTicks) {return} if (pixel.charge && elements[pixel.element].behaviorOn) { pixelTick(pixel); return; } if (!tryMove(pixel, pixel.x, pixel.y+1)) { if (Math.random() < 0.5) { if (!tryMove(pixel, pixel.x+1, pixel.y+1)) { tryMove(pixel, pixel.x-1, pixel.y+1); } } else if (!tryMove(pixel, pixel.x-1, pixel.y+1)) { tryMove(pixel, pixel.x+1, pixel.y+1); } } doDefaults(pixel); if (!isEmpty(pixel.x,pixel.y-1) && !outOfBounds(pixel.x,pixel.y-1)) { if (elements[pixelMap[pixel.x][pixel.y-1].element].state != "liquid" && elements[pixelMap[pixel.x][pixel.y-1].element].state != "gas") { tryMove(pixel,pixel.x,pixel.y-1) } } }, onCollide: function(pixelOG,pixel) { if (elements[pixel.element].id === elements.scp_409.id) { return; } if (elements.scp_409.ignore.indexOf(pixel.element) !== -1) return; if (Math.random() < (elements[pixel.element].hardness || 0.25)) { return; } if (elements[pixel.element].state !== "liquid" && elements[pixel.element].state !== "gas" && Math.random() > 0.1) { if (elements[pixel.element].category !== "life" && elements[pixel.element].category !== "food" && pixel.element !== "wood" && pixel.element !== "bamboo" && pixel.element !== "skin" && Math.random() > 0.75) { if (Math.random() < 0.85) { changePixel(pixel,"quartz_crystal") } else if (Math.random() < 0.5 && elements[pixel.element].movable == false) { changePixel(pixel,"quartz") } else { changePixel(pixel,"scp_409") } } else if (Math.random() > 0.75) { changePixel(pixel,"scp_409") if (Math.random() > 0.95) { explodeAt(pixel.x,pixel.y,10,["scp_409","quartz_crystal","quartz_crystal","quartz_crystal",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]) } } } }, ignore: ["granite","quartz","quartz_crystal","magma","molten_glass","molten_quartz","molten_granite"], canPlace: true, reactions: { }, density: 2650, state: "solid", category:"scp", cooldown: defaultCooldown, } elements.scp_457 = { name: "SCP-457", color: "#000000", buttonColor: ["#ff6b21","#ffa600","#ff4000","#000000","#000000","#000000","#ff6b21","#ffa600","#ff4000"], category: "scp", properties: { dead: false, dir: 1, panic: 0, }, onPlace: function(pixel) { if (isEmpty(pixel.x, pixel.y+1)) { createPixel("body_457", pixel.x, pixel.y+1); var color = pixel.color; changePixel(pixel,"head_457"); pixel.color = color; pixel.alpha = 0; } else if (isEmpty(pixel.x, pixel.y-1)) { createPixel("head_457", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixel.color; pixelMap[pixel.x][pixel.y-1].alpha = 0; changePixel(pixel,"body_457"); } else { deletePixel(pixel.x, pixel.y); } }, reactions: { "steam": { attr1:{panic:50} }, "water": { attr1:{panic:50} }, "ice": { attr1:{panic:50} }, "salt_water": { attr1:{panic:50} }, "sugar_water": { attr1:{panic:50} }, "seltzer": { attr1:{panic:50} }, "foam": { attr1:{panic:50} }, "pool_water": { attr1:{panic:50} }, "dirty_water": { attr1:{panic:50} }, "cold_fire": { attr1:{panic:50} }, }, related: ["body","head"], cooldown: defaultCooldown, forceSaveColor: true, } elements.body_457 = { name: "SCP-457", color: "#000000", tempLow:-50, stateLow: "smoke", tempHigh: 7000, stateHigh: "plasma", category: "scp", hidden: true, density: 1080, state: "solid", conduct: .05, temp: 600, forceSaveColor: true, pickElement: "scp_457", reactions: { "ash": { elem2:[null,"smoke"], chance:0.05 }, "glass": { elem2:"glass_shard", chance:0.05 }, "rad_glass": { elem2:"rad_shard", chance:0.05 }, "stained_glass": { elem2:"color_sand", chance:0.05 }, }, properties: { dead: false, dir: 1, panic: 0, fuel: 500, alpha: 0, }, renderer: function(pixel,ctx) { drawDefault(ctx,pixel); if (!viewInfo[view].colorEffects) { return } if (pixel.fuel > 1) { drawPlus(ctx,"#ff6b21",pixel.x,pixel.y,undefined,Math.min(1,pixel.fuel/8)); drawPlus(ctx,"#ffa600",pixel.x,pixel.y-1,undefined,Math.min(1,pixel.fuel/9)); } drawSquare(ctx,settings.bg,pixel.x,pixel.y); drawSquare(ctx,settings.bg,pixel.x,pixel.y-1); }, 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 === "head_457") { 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 || pixel.fuel < 0) { if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) { changePixel(pixel,"fire"); changePixel(pixelMap[pixel.x][pixel.y-1],"fire"); } return } if (Math.random() > 0.8 && Math.random() > 0.8) { if (isEmpty(pixel.x, pixel.y-2) && Math.random() > 0.8) { releaseElement(pixelMap[pixel.x][pixel.y-1],"fire") } pixel.fuel-- } if (pixel.fuel > 1000) { if ((isEmpty(pixel.x, pixel.y-2) || isEmpty(pixel.x-1, pixel.y-2) || isEmpty(pixel.x+1, pixel.y)) && Math.random() > 0.8) { releaseElement(pixel,"scp_457",1,true) pixel.fuel = 500 } } // Find the head if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head_457") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { pixel.panic = head.panic; delete head.panic; } if (head.fuel != 0 && head.fuel > 0) { pixel.fuel += head.fuel; head.fuel = 0; } } else { var head = null } if (head && Math.random() < 0.25) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < 10; x++) { let x2 = pixel.x+(x*pixel.dir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements.scp_457.reactions[seenPixel.element] && elements.scp_457.reactions[seenPixel.element].attr1 && elements.scp_457.reactions[seenPixel.element].attr1.panic) { pixel.panic += elements.scp_457.reactions[seenPixel.element].attr1.panic; pixel.dir *= -1; break; } else if (elements[seenPixel.element].extinguish == true) { pixel.panic += 5; pixel.dir *= -1; break; } else if (seenPixel.temp < 5) { pixel.panic += 5; pixel.dir *= -1; break; } } } } if (!pixel.dead && Math.random() < 0.75) { shuffleArray(squareCoordsShuffle); for (var i = 0; i < squareCoordsShuffle.length; i++) { var x = pixel.x+squareCoordsShuffle[i][0]; var y = pixel.y+squareCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].burnTime && pixelMap[x][y].element != "fire") { var fuel = elements[pixelMap[x][y].element].burnTime if (elements[pixelMap[x][y].element].burnInto && Math.random() > 0.5) { if (elements[pixelMap[x][y].element].burnInto instanceof Array) { var burnInto = elements[pixelMap[x][y].element].burnInto[Math.floor(Math.random()*elements[pixelMap[x][y].element].burnInto.length)]; } else { var burnInto = elements[pixelMap[x][y].element].burnInto } if (burnInto == undefined) { changePixel(pixelMap[x][y],"fire"); } else { changePixel(pixelMap[x][y],burnInto) } } else { changePixel(pixelMap[x][y],"fire"); } pixel.fuel += fuel break; } } } if (pixel.fuel < 20) { pixel.panic += 10; } else if (pixel.panic > 0) { pixel.panic -= 1; if (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 500) { pixel.panic = 500; } } if (isEmpty(pixel.x, pixel.y-1)) { // create blood if decapitated 10% chance if (Math.random() < 0.1 && !pixel.charge) { createPixel("fire", 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], ]; let moved = false; // 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]); moved = true; break; } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } // homeostasis if (pixel.temp < 600) { pixel.temp += 10; pixel.fuel-- } else if (pixel.temp > 2000) { pixel.temp -= 10; pixel.fuel++ } } }, onCollide: function(pixel1,pixel2) { if (elements[pixel2.element].extinguish == true) { if (Math.random() < 0.9) { pixel1.fuel-- if (Math.random() < 0.25) { deletePixel(pixel2.x,pixel2.y) } } } } } elements.head_457 = { name: "SCP-457", tempLow:-50, stateLow: "smoke", tempHigh: 7000, stateHigh: "plasma", color: "#000000", category: "scp", hidden: true, density: 1080, state: "solid", conduct: .05, temp: 600, forceSaveColor: true, pickElement: "scp_457", reactions: { "water": { elem1:["fire","smoke"], chance:0.00025 }, "ash": { elem2:[null,"smoke"], chance:0.5 }, "glass": { elem2:"glass_shard", chance:0.05 }, "rad_glass": { elem2:"rad_shard", chance:0.05 }, "stained_glass": { elem2:"color_sand", chance:0.05 }, }, properties: { dead: false, fuel: 0, alpha: 0, }, 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,"fire"); return } } // Find the body if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body_457") { 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_457") { pixel.dead = pixelTicks } else { var body = null } // check for eating food if (body && !pixel.dead && Math.random() < 0.1) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].burnTime && pixelMap[x][y].element != "fire" && Math.random() > 0.75) { var fuel = elements[pixelMap[x][y].element].burnTime if (elements[pixelMap[x][y].element].burnInto && elements[pixelMap[x][y].element].burnInto != undefined && Math.random() > 0.75) { if (elements[pixelMap[x][y].element].burnInto instanceof Array) { var burnInto = elements[pixelMap[x][y].element].burnInto[Math.floor(Math.random()*elements[pixelMap[x][y].element].burnInto.length)]; } else { var burnInto = elements[pixelMap[x][y].element].burnInto } if (burnInto == undefined) { changePixel(pixelMap[x][y],"fire"); } else { changePixel(pixelMap[x][y],burnInto) } } else { changePixel(pixelMap[x][y],"fire"); } pixel.fuel += fuel break; } } } 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("fire", pixel.x, pixel.y+1); // set dead to true 15% chance if (Math.random() < 0.15) { pixel.dead = pixelTicks; } } } if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead || !isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element != "body_457") { if (Math.random() < 0.15) { pixel.dead = pixelTicks; } } }, onCollide: function(pixel1,pixel2) { if (elements[pixel2.element].extinguish == true) { if (Math.random() < 0.0025) { pixel1.dead = true } } } } elements.scp_682 = { name: "SCP-682", color: ["#424242","#75816B","#4D6B53"], onChange: function(pixel) { var x = Math.floor(Math.random()*(width))+1; var y = Math.floor(Math.random()*(height))+1; if (isEmpty(x,y)) { createPixel("scp_682",x,y) } else if (!isEmpty(x,y) && !outOfBounds(x,y) && pixelMap[x][y].element != "scp_682") { changePixel(pixelMap[x][y], "scp_682") } }, onDelete: function(pixel) { var x = Math.floor(Math.random()*(width))+1; var y = Math.floor(Math.random()*(height))+1; if (isEmpty(x,y)) { createPixel("scp_682",x,y) } else if (!isEmpty(x,y) && !outOfBounds(x,y)) { changePixel(pixelMap[x][y], "scp_682") } }, properties: { h: 1, dir: 1, }, tick: function(pixel) { if (pixel.h == 1) { if (tryMove(pixel, pixel.x, pixel.y+1)) {} // Fall doDefaults(pixel); if (Math.random() < 0.5) { // Move 50% chance var movesToTry = [ [1*pixel.dir,0], [1*pixel.dir,-1], ]; let moved = false; // 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])) { 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) { moved = true; break; } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } } if (Math.random() < 0.95) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 50; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id || elements[seenPixel.element].id == elements.body.id) { pixel.h = 3 break; } } } } for (var i = 0; i < squareCoords.length; i++) { var coords = squareCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (isBreakable(pixel2) && (elements[pixel2.element].category == "life" || elements[pixel2.element].category == "food")) { // times 0.25 if not shiftDown else 1 if (Math.random() < (1-(elements[pixel2.element].hardness || 0)) / 4 && Math.random() > 0.5) { breakPixel(pixel2); } // if (Math.random() > ((1-(elements[pixel.element].hardness || 1)) * (shiftDown ? 0.5 : 1))) { } else if (old === pixel2.element && elements[pixel2.element].movable && !isEmpty(pixel2.x,pixel2.y+1) && !paused && Math.random() > 0.75 && (elements[pixel2.element].category == "life" || elements[pixel2.element].category == "food")) { let x = 0; let y = 0; if (Math.random() < 0.66) x = Math.random() < 0.5 ? 1 : -1; if (Math.random() < 0.66) y = Math.random() < 0.5 ? 1 : -1; tryMove(pixel2,pixel2.x+x,pixel2.y+y) } if (elements[pixel2.element].isFood == true) { if (Math.random() < (1-(elements[pixel2.element].hardness || 0)) / 4 || Math.random() > 0.5) { deletePixel(pixel2.x,pixel2.y) } } } } for (var i = 0; i < destroyCoords.length; i++) { var coords = destroyCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (old === pixel2.element && elements[pixel2.element].movable && !isEmpty(pixel2.x,pixel2.y+1) && !paused && Math.random() > 0.95) { let x = 0; let y = 0; if (Math.random() < 0.66) x = Math.random() < 0.5 ? 1 : -1; if (Math.random() < 0.66) y = Math.random() < 0.5 ? 1 : -1; tryMove(pixel2,pixel2.x+x,pixel2.y+y) } if (elements[pixel2.element].isFood == true) { if (Math.random() < (1-(elements[pixel2.element].hardness || 0)) / 4 || Math.random() > 0.5) { deletePixel(pixel2.x,pixel2.y) } } } } } else if (pixel.h == 2) { if (!pixel.hStart) { pixel.hStart = pixelTicks } if (tryMove(pixel, pixel.x, pixel.y+1)) {} // Fall doDefaults(pixel); if (Math.random() < 0.1) { // Move 10% chance var movesToTry = [ [1*pixel.dir,0], [1*pixel.dir,-1], ]; let moved = false; // 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])) { 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) { moved = true; break; } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } } if (Math.random() < 0.05 && (pixel.hStart + 500) < pixelTicks) { pixel.h = 3 delete pixel.hStart } if (Math.random() < 0.25) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < 15; x++) { let x2 = pixel.x+(x*pixel.dir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id || elements[seenPixel.element].id == elements.body.id) { pixel.h = 3 break; } else if (elements[seenPixel.element].category == "life" && Math.random() > 0.995) { pixel.h = 1 break; } } } } for (var i = 0; i < destroyCoords.length; i++) { var coords = destroyCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (elements[pixel2.element].isFood == true) { if (Math.random() < (1-(elements[pixel2.element].hardness || 0)) / 4 || Math.random() > 0.5) { deletePixel(pixel2.x,pixel2.y) } } } } } else { if (tryMove(pixel, pixel.x, pixel.y+1)) {} // Fall doDefaults(pixel); if (Math.random() < 0.9) { // Move 90% chance var movesToTry = [ [1*pixel.dir,0], [1*pixel.dir,-1], ]; let moved = false; // 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])) { 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) { moved = true; break; } else if (Math.random() > 0.25) { tryMove(pixel, pixel.x, pixel.y-1); break; } } } // 5% chance to change direction if (Math.random() < 0.05 || !moved) { pixel.dir *= -1; } } if (Math.random() < 0.95) { let y = Math.random() < 0.5 ? 0 : -1; let xDir = Math.random() < 0.5 ? 1 : -1; for (let x = 1; x < 55; x++) { let x2 = pixel.x+(x*xDir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { let seenPixel = pixelMap[x2][y2]; if (elements[seenPixel.element].id == elements.head.id || elements[seenPixel.element].id == elements.body.id) { if (pixel.dir != 1 && seenPixel.x > pixel.x) { pixel.dir = 1 } else if (pixel.dir != -1 && seenPixel.x < pixel.x) { pixel.dir = -1 } break; } else if (elements[seenPixel.element].category == "life" && Math.random() > 0.995) { if (pixel.dir != 1 && seenPixel.x > pixel.x) { pixel.dir = 1 } else if (pixel.dir != -1 && seenPixel.x < pixel.x) { pixel.dir = -1 } break; } } } } for (var i = 0; i < destroyCoords.length; i++) { var coords = destroyCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y)) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (isBreakable(pixel2)) { // times 0.25 if not shiftDown else 1 if (Math.random() < (1.5-(elements[pixel.element].hardness || 0)) && Math.random() > 0.5) { breakPixel(pixel2); } // if (Math.random() > ((1-(elements[pixel.element].hardness || 1)) * (shiftDown ? 0.5 : 1))) { } else if (old === pixel.element && elements[pixel.element].movable && !isEmpty(pixel.x,pixel.y+1) && !paused && Math.random() > 0.75) { let x = 0; let y = 0; if (Math.random() < 0.66) x = Math.random() < 0.5 ? 1 : -1; if (Math.random() < 0.66) y = Math.random() < 0.5 ? 1 : -1; tryMove(pixel2,pixel2.x+x,pixel2.y+y) } } } if (Math.random() < 0.015) { pixel.h = 1 } } }, category: "scp", density: 7500, reactions: { "head": { attr1:{h:3}, elem2:["blood","meat","bone"],}, "body": { attr1:{h:3}, elem2:["blood","meat","bone"], }, "neutral_acid": { attr1:{h:2}, elem2:null, chance: 0.5 }, "acid": { attr1:{h:2}, elem2:[null,"acid","acid","acid","acid","acid","acid","acid","acid","acid","acid","acid","acid","acid","neutral_acid","neutral_acid"], chance: 0.5 }, "grass": { elem2: "dead_plant", chance:0.2 }, "plant": { elem2: "dead_plant", chance:0.2 }, "dead_plant": { elem2: null, chance:0.2 }, "dna": { elem2: null, chance:0.2 }, "meat": { elem2: null, chance:0.2 }, "ground_meat": { elem2: null, chance:0.2 }, "cooked_meat": { elem2: null, chance:0.3 }, "rotten_meat": { elem2: null, chance:0.1 }, "ground_rotten_meat": { elem2: null, chance:0.15 }, "blood": { attr1:{h:3}, elem2: null }, "infection": { elem2: null }, "bone": { elem2: ["blood",null,null], chance:0.1 }, "bone_marrow": { elem2: ["blood",null], chance:0.1 }, }, state: "solid", hardness: 1, conduct: .1, cooldown: defaultCooldown, } elements.scp_804 = { name: "SCP-804", color:["#C49F4F","#F2D18E","#A59F8F","#7FA097","#7FA097","#405584","#8E7A45","#96814C"], category: "scp", hardness: 0.65, breakInto: ["glass_shard","glass_shard","snow","metal_scrap","metal_scrap","glass_shard","glass_shard","snow","metal_scrap","metal_scrap","dust"], tempHigh: 1750, stateHigh: ["glass_shard","glass_shard","snow","metal_scrap","metal_scrap","glass_shard","glass_shard","snow","metal_scrap","metal_scrap","dust"], conduct: 1, properties: { radius: 50, active: false, }, tick: function(pixel) { tryMove(pixel,pixel.x,pixel.y+1) if (pixel.charge && pixel.active != true) { pixel.active = true } if (pixel.repair < 3 && pixel.active != false) { pixel.active = false } doDefaults(pixel) if (pixel.radius > 0 && (!pixel.repair || pixel.repair > 2) && pixel.active == true) { var coords = circleCoords(pixel.x,pixel.y,pixel.radius); for (var i = 0; i < coords.length; i++) { if (!isEmpty(coords[i].x,coords[i].y) && !outOfBounds(coords[i].x,coords[i].y)) { var manmade = pixelMap[coords[i].x][coords[i].y] if (manmade.element == "scp_804") { if (!manmade.repair) { manmade.repair = 75 } if (Math.random() < 0.05) { manmade.repair -- } if (manmade.repair < 1) { if (Math.random() > 0.95) { changePixel(manmade, "metal_scrap") } else { deletePixel(manmade.x,manmade.y) } } } else if (manmade.element == "skin" || manmade.element == "hair" || manmade.element == "body" || manmade.element == "head" || manmade.element == "body_012_1" || manmade.element == "head_012_1" || manmade.element == "body_008" || manmade.element == "head_008" || manmade.element == "body_035" || manmade.element == "head_035" || manmade.element == "body_049" || manmade.element == "head_049" || manmade.element == "body_049_1" || manmade.element == "head_049_1") { if (!manmade.repair) { manmade.repair = 25 } if (Math.random() < 0.05) { manmade.repair -- } if (manmade.repair < 18 && manmade.element == "body" && !manmade.naked) { if (!isEmpty(manmade.x,manmade.y-1) && Math.random() > 0.75) { manmade.color = pixelMap[manmade.x][manmade.y-1].color; manmade.naked = true manmade.panic ++ } } if (manmade.repair < 1) { if (Math.random() > 0.95) { changePixel(manmade, "blood") manmade.man = true } else { deletePixel(manmade.x,manmade.y) } } } else if (elements[manmade.element].category == "weapons" || manmade.element == "tin" || manmade.element == "lead" || manmade.element == "gallium" || manmade.element == "mercury" || manmade.element == "tungsten" || manmade.element == "nickel" || manmade.element == "zinc" || manmade.element == "gold" || manmade.element == "silver" || manmade.element == "iron" || manmade.element == "copper" || manmade.element == "aluminum") { if (!manmade.repair) { manmade.repair = 20 } if (Math.random() < 0.25) { manmade.repair -- } if (manmade.repair < 1) { if (Math.random() > 0.65) { changePixel(manmade, "rust") } else { deletePixel(manmade.x,manmade.y) } } } else if (manmade.element == "unknown" || manmade.element == "site_nuke" || manmade.element == "scp_035" || manmade.element == "scp_229" || elements[manmade.element].category == "machines" || manmade.element == "metal_scrap" || manmade.element == "solid_mercury" || manmade.element == "molten_gallium" || manmade.element == "steel" || manmade.element == "galvanized_steel" || manmade.element == "brass" || manmade.element == "bronze" || manmade.element == "invar" || manmade.element == "sterling" || manmade.element == "rose_gold" || manmade.element == "purple_gold" || manmade.element == "blue_gold" || manmade.element == "electrum" || manmade.element == "solder" || manmade.element == "particleboard") { if (!manmade.repair) { manmade.repair = 15 } if (Math.random() < 0.25) { manmade.repair -- } if (manmade.repair < 1) { if (Math.random() > 0.75) { changePixel(manmade, "rust") } else if (Math.random > 0.5) { changePixel(manmade, "dust") } else { deletePixel(manmade.x,manmade.y) } } } else if (manmade.element == "rust" || manmade.element == "oxidized_copper" || manmade.element == "concrete" || manmade.element == "brick" || manmade.element == "adobe" || manmade.element == "slag" || manmade.element == "amalgam" || manmade.element == "thermite" || manmade.element == "copper_sulfate" || manmade.element == "glass" || manmade.element == "glass_shard" || manmade.element == "rad_glass" || manmade.element == "rad_shard" || manmade.element == "stained_glass" || manmade.element == "color_sand" || manmade.element == "brick_rubble" || manmade.element == "clay_shard" || manmade.element == "porcelain" || manmade.element == "porcelain_shard") { if (!manmade.repair) { manmade.repair = 10 } if (Math.random() < 0.25) { manmade.repair -- } if (manmade.repair < 1) { if (Math.random() > 0.85) { changePixel(manmade, "dust") } else { deletePixel(manmade.x,manmade.y) } } } else if (!manmade.lc && !manmade.wc && manmade.element == "wood" || manmade.element == "tinder" || manmade.element == "scp_063" || manmade.element == "scp_012" || manmade.element == "dust" || manmade.element == "insulation" || manmade.element == "cloth" || manmade.element == "plastic" || manmade.element == "bead" || manmade.element == "glitter" || manmade.element == "confetti" || manmade.element == "paper" || manmade.element == "cement" || manmade.element == "acid" || manmade.element == "black_acid" || manmade.element == "alcohol" || manmade.element == "wax" || manmade.element == "poison" || manmade.element == "incense" || manmade.element == "gold_coin" || manmade.element == "borax" || manmade.element == "spray_paint" || manmade.element == "anesthesia" || manmade.element == "acid_gas" || manmade.element == "ball" || manmade.element == "potassium_salt" || manmade.element == "epsom_salt" || manmade.element == "sodium_acetate") { if (!manmade.repair) { manmade.repair = 6 } if (Math.random() < 0.25) { manmade.repair -- } if (manmade.repair < 1) { if (Math.random() > 0.75) { changePixel(manmade, "foam") } else { deletePixel(manmade.x,manmade.y) } } } else if (manmade.panic && manmade.element == "bone" || manmade.panic && manmade.element == "quicklime" || manmade.panic && manmade.element == "rotten_meat" || manmade.panic && manmade.element == "meat" || manmade.element == "cooked_meat" || manmade.element == "blood" || manmade.element == "infection" || manmade.element == "seltzer" || Math.random() > 0.9 && manmade.element == "dirty_water" || manmade.element == "pool_water" || manmade.element == "lamp_oil" || manmade.element == "neutral_acid" || manmade.element == "glue" || manmade.element == "soda" || manmade.element == "melted_wax" || manmade.element == "chocolate_milk" || manmade.element == "fruit_milk" || manmade.element == "pilk" || manmade.element == "eggnog" || manmade.element == "cream" || manmade.element == "nut_milk" || manmade.element == "vinegar" || manmade.element == "soap" || manmade.element == "bleach" || manmade.element == "dye" || manmade.element == "ink" || manmade.element == "vaccine" || manmade.element == "antidote" || manmade.element == "tea" || manmade.element == "coffee" || manmade.element == "caramel" || manmade.element == "molasses" || manmade.element == "ketchup" || manmade.element == "sauce" || manmade.element == "mayo" || manmade.element == "cyanide") { if (!manmade.repair) { manmade.repair = 3 } if (Math.random() < 0.25) { manmade.repair -- } if (manmade.repair < 1) { if (Math.random() > 0.5) { changePixel(manmade, "water") } else { deletePixel(manmade.x,manmade.y) } } } if (manmade.temp > 600) { manmade.temp -= 10 } else if (manmade.temp > 93.9) { manmade.temp -= 1 } else if (manmade.temp > 56.7) { manmade.temp -= 0.1 } } } if (Math.random() > 0.9) { pixel.radius++ } } }, excludeRandom: true, state: "solid", cooldown: defaultCooldown, } elements.scp_999 = { name: "SCP-999", color: "#FFA500", properties: { h: false, }, tick: function(pixel) { if (pixel.h == true) { if (!pixel.hStart) { pixel.hStart = pixelTicks } if (pixel.start === pixelTicks) {return} if (pixel.charge && elements[pixel.element].behaviorOn) { pixelTick(pixel); return; } let move1Spots = hyperCoords.slice(0); var moved = false; for (var i = 0; i < move1Spots.length; i++) { const j = Math.random()*move1Spots.length | 0; const coords = move1Spots[j]; if (tryMove(pixel, pixel.x+coords[0], pixel.y+coords[1])) { moved = true; break; } move1Spots.splice(j, 1); } if (moved === false) { let move2Spots = diagonalCoords.slice(0); for (var i = 0; i < move2Spots.length; i++) { const j = Math.random()*move2Spots.length | 0; const coords = move2Spots[j]; if (tryMove(pixel, pixel.x+coords[0], pixel.y+coords[1])) { break; } move2Spots.splice(j, 1); } } doDefaults(pixel); if ((pixel.hStart + 50) < pixelTicks) { pixel.h = false delete pixel.hStart } } else { if (pixel.start === pixelTicks) {return} if (pixel.charge && elements[pixel.element].behaviorOn) { pixelTick(pixel); return; } var viscMove = true; viscMove = (Math.random()*100) < 100 / Math.pow(1000, 0.25); if (!viscMove) { var move1Spots = [ 0 ] } else { var move1Spots = [ 1,0,-1 ] } var moved = false; for (var i = 0; i < move1Spots.length; i++) { const j = Math.random()*move1Spots.length | 0; const coord = move1Spots[j]; if (tryMove(pixel, pixel.x+coord, pixel.y+1)) { moved = true; break; } move1Spots.splice(j, 1); } if (!moved) { if (viscMove || Math.random > 0.5) { if (Math.random() < 0.5) { if (!tryMove(pixel, pixel.x+1, pixel.y)) { tryMove(pixel, pixel.x-1, pixel.y); } } else { if (!tryMove(pixel, pixel.x-1, pixel.y)) { tryMove(pixel, pixel.x+1, pixel.y); } } } } doDefaults(pixel); } }, 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": { attr1:{h:true}, elem2 : null }, "pilk": { attr1:{h:true}, elem2 : null }, "coffee_bean": { attr1:{h:true}, elem2 : null }, "coffee_ground": { attr1:{h:true}, elem2 : null }, "soda": { attr1:{h:true}, elem2 : null }, "coffee": { attr1:{h:true}, elem2 : null }, "seltzer": { attr1:{h:true}, elem2 : null }, }, state: "liquid", conduct: .5, temp: 37, extinguish: true, stain: -0.03, cooldown: defaultCooldown, } // scps with ID over 999 here elements.scp_1000 = { name: "SCP-1000", color: ["#a49d9c","#6a4420","#101c31","#90052A","#ffeed5","#90052A","#101c31","#6a4420","#a49d9c"], buttonColor: ["#a49d9c","#6a4420","#6a4420","#101c31","#90052A","#ffeed5"], category: "scp", properties: { dead: false, dir: 1, panic: 0 }, onPlace: function(pixel) { if (isEmpty(pixel.x, pixel.y+1)) { createPixel("body_1000", pixel.x, pixel.y+1); var color = pixel.color; changePixel(pixel,"head_1000"); pixel.color = color; pixelMap[pixel.x][pixel.y+1].color = pixelColorPick(pixelMap[pixel.x][pixel.y+1],color); } else if (isEmpty(pixel.x, pixel.y-1)) { var color = pixel.color; createPixel("head_1000", pixel.x, pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = color; changePixel(pixel,"body_1000"); pixel.color = pixelColorPick(pixel,color); } else { deletePixel(pixel.x, pixel.y); } }, reactions: { "fire": { attr1:{panic:5} }, "plasma": { attr1:{panic:5} }, "cold_fire": { attr1:{panic:5} }, "electric": { attr1:{panic:5} }, "blood": { attr1:{panic:1} }, "infection": { attr1:{panic:2} }, "cancer": { attr1:{panic:3} }, "plague": { attr1:{panic:5} }, "radiation": { attr1:{panic:5} }, "tnt": { attr1:{panic:5} }, "dynamite": { attr1:{panic:5} }, "c4": { attr1:{panic:5} }, "grenade": { attr1:{panic:5} }, "gunpowder": { attr1:{panic:5} }, "acid": { attr1:{panic:5} }, "acid_gas": { attr1:{panic:5} }, "stench": { attr1:{panic:2} }, "head": { attr1:{panic:3} }, "body": { attr1:{panic:3} }, }, related: ["body_1000","head_1000"], cooldown: defaultCooldown, forceSaveColor: true, } elements.body_1000 = { color: ["#a49d9c","#6a4420","#101c31","#90052A","#ffeed5","#a49d9c","#6a4420","#101c31","#90052A","#ffeed5"], name: "SCP-1000", category: "scp", hidden: true, density: 1500, state: "solid", conduct: .05, temp: 37, tempHigh: 155, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 15, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone","blood","meat","bone","blood","meat","bone","blood","meat","bone","dust"], forceSaveColor: true, pickElement: "scp_1000", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "plague": { elem1:"plague", chance:0.05 }, "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, "gold_coin": { elem2:null, chance:0.05 }, "diamond": { elem2:null, chance:0.05 }, "sun": { elem1:"cooked_meat" }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 === "head_1000") { 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 == "head_1000") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { pixel.panic = head.panic; delete head.panic; } } else { var head = null } if (head && Math.random() < 0.25) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < 10; x++) { let x2 = pixel.x+(x*pixel.dir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements.scp_1000.reactions[seenPixel.element] && elements.scp_1000.reactions[seenPixel.element].attr1 && elements.scp_1000.reactions[seenPixel.element].attr1.panic) { pixel.panic += elements.scp_1000.reactions[seenPixel.element].attr1.panic; pixel.dir *= -1; break; } else if (seenPixel.dead || seenPixel.temp > 200) { pixel.panic += 5; pixel.dir *= -1; if (seenPixel.panic) delete seenPixel.panic; break; } } } } if (pixel.burning) { pixel.panic += 0.1; if (head && pixelTicks-pixel.burnStart > 240) { pixel.color = head.color; } } if (pixel.charge) { pixel.panic += 1; } else if (pixel.panic > 0) { pixel.panic -= 0.1; if (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 50) { pixel.panic = 50; } } 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], ]; let moved = false; // 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]); moved = true; break; } } else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; if (hitPixel.element === "body_1000" || hitPixel.element === "head_1000" && hitPixel.panic < pixel.panic) { // interact with other human hitPixel.panic = pixel.panic; } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } // homeostasis if (pixel.temp > 37) { pixel.temp -= 1; } else if (pixel.temp < 37) { pixel.temp += 1; } } } } elements.head_1000 = { color: ["#a49d9c","#6a4420","#101c31","#90052A","#ffeed5","#a49d9c","#6a4420","#101c31","#90052A","#ffeed5"], name: "SCP-1000", category: "scp", hidden: true, density: 1080, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 15, burnTime: 255, burnInto: "cooked_meat", breakInto: ["blood","meat","bone","blood","meat","bone","blood","meat","bone","blood","meat","bone","dust"], forceSaveColor: true, pickElement: "scp_1000", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "plague": { elem1:"plague", chance:0.05 }, "oxygen": { elem2:"carbon_dioxide", chance:0.5 }, "beans": { elem2:[null,null,null,null,null,null,null,null,"stench"], chance:0.2 }, "sun": { elem1:"cooked_meat" }, "light": { stain1:"#825043" }, "bee": { stain1:"#cc564b", chance:0.2 }, "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 == "body_1000") { 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 } // check for eating food if (body && !pixel.dead && Math.random() < 0.1) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].isFood && pixelMap[x][y].panic === undefined) { deletePixel(x,y); break; } } } 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; } }, onChange: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } }, onDelete: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } } } elements.penny = { color: ["#F49858","#DE882C","#D9752C","#B15D23","#C16522","#B75C24","#B05B28","#AF6720"], behavior: behaviors.POWDER, category: "powders", tempHigh: 1085, stateHigh: "molten_copper", state: "solid", density: 8960, conduct: 0.85, hardness: 0.3, } elements.scp_1015 = { name: "SCP-1015", color: ["#F49858","#DE882C","#D9752C","#B15D23","#C16522","#B75C24","#B05B28","#AF6720"], behavior: behaviors.POWDER, tick: function(pixel) { for (var i = 0; i < destroyCoords.length; i++) { var coords = destroyCoords[i]; var x = pixel.x + coords[0]; var y = pixel.y + coords[1]; if (!isEmpty(x,y) && !outOfBounds(x,y) && Math.random() < 0.05) { var pixel2 = pixelMap[x][y] let old = pixel2.element; if (elements[pixel2.element].id == elements.body.id) { pixel2.element = "body_1015" deletePixel(pixel.x,pixel.y) break; } else if (elements[pixel2.element].id == elements.head.id) { pixel2.element = "head_1015" pixelMap[pixel2.x][pixel2.y+1].element = "body_1015" deletePixel(pixel.x,pixel.y) break; } } } }, tempHigh: 10850, stateHigh: "molten_copper", temp: 20, insulate: true, category: "scp", state: "solid", density: 8960, conduct: 0.85, hardness: 1, } elements.body_1015 = { color: ["#069469","#047e99","#7f5fb0"], name: "SCP-1015-1", category: "scp", hidden: true, density: 1500, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 }, "plague": { elem1:"plague", chance:0.05 }, "egg": { elem2:"yolk", chance:0.5, oneway:true }, "grape": { elem2:"juice", chance:0.5, color2:"#291824", oneway:true }, "ant": { elem2:"dead_bug", chance:0.05, oneway:true }, "spider": { elem2:"dead_bug", oneway:true }, "fly": { elem2:"dead_bug", oneway:true }, "firefly": { elem2:"dead_bug", oneway:true }, "bee": { elem2:"dead_bug", oneway:true }, "flea": { elem2:"dead_bug", oneway:true }, "termite": { elem2:"dead_bug", oneway:true }, "worm": { elem2:"slime", chance:0.05, oneway:true }, "stink_bug": { elem2:"stench", oneway:true }, "grass_seed": { elem2:null, chance:0.05 }, "gold_coin": { elem2:null, chance:0.05 }, "diamond": { elem2:null, chance:0.05 }, "sun": { elem1:"cooked_meat" }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, properties: { dead: false, dir: 1, panic: 0, pennySize: 1, }, 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 === "head_1015") { 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 } if (Math.random() < 0.5) { let yDir = -1 for (let y = 1; y < height; y++) { let x2 = pixel.x let y2 = pixel.y+(y*yDir); let weight = 0 if (!isEmpty(x2,y2,true) && !outOfBounds(x2,y2)) { weight++ } if (isEmpty(x2,y2,true) || outOfBounds(x2,y2)) { if (weight > 4) { changePixel(pixel,"scp_1015") releaseElement(pixel,"blood") } } } } // Find the head if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head_1015") { var head = pixelMap[pixel.x][pixel.y-1]; if (head.dead) { // If head is dead, kill body pixel.dead = head.dead; } else if (head.panic > 0) { pixel.panic = head.panic; delete head.panic; } } else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head") { var head = pixelMap[pixel.x][pixel.y-1]; head.element = "head_1015" } else { var head = null } if (head && Math.random() < 0.25) { let y = Math.random() < 0.5 ? 0 : -1; for (let x = 1; x < 10; x++) { let x2 = pixel.x+(x*pixel.dir); let y2 = pixel.y+y; if (!isEmpty(x2,y2,true)) { let seenPixel = pixelMap[x2][y2]; if (elements.human.reactions[seenPixel.element] && elements.human.reactions[seenPixel.element].attr1 && elements.human.reactions[seenPixel.element].attr1.panic) { pixel.panic += elements.human.reactions[seenPixel.element].attr1.panic; pixel.dir *= -1; break; } else if (seenPixel.dead || seenPixel.temp > 200) { pixel.panic += 5; pixel.dir *= -1; if (seenPixel.panic) delete seenPixel.panic; break; } } } } if (pixel.burning) { pixel.panic += 0.1; if (head && pixelTicks-pixel.burnStart > 240) { pixel.color = head.color; } } if (pixel.charge) { pixel.panic += 1; } else if (pixel.panic > 0) { pixel.panic -= 0.1; if (pixel.panic < 0) { pixel.panic = 0; } else if (pixel.panic > 50) { pixel.panic = 50; } } 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], ]; let moved = false; // 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]); moved = true; break; } } else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; if ((hitPixel.element === "body" || hitPixel.element === "head") && pixel.pennySize > 10) { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } releaseElement(pixel,"blood") } else if ((hitPixel.element === "body" || hitPixel.element === "head") && hitPixel.panic < pixel.panic) { // interact with other human hitPixel.panic = pixel.panic; } else if (elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 5 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { pixel.elemP = hitPixel.element hitPixel.element = "penny_converter" hitPixel.origElem = pixel.elemP hitPixel.pennySize = pixel.pennySize delete pixel.elemP } else if (elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 3 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } else if (elements[hitPixel.element].movable == true && elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 1 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } else if (Math.random() > 0.9 && elements[hitPixel.element].movable == true && elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 0 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } } } if (!isEmpty(pixel.x,pixel.y+1) && !outOfBounds(pixel.x,pixel.y+1) && Math.random() < 0.25) { var hitPixel = pixelMap[pixel.x][pixel.y+1]; if ((hitPixel.element === "body" || hitPixel.element === "head") && pixel.pennySize > 10) { if (!isEmpty(hitPixel.x,hitPixel.y-1) && !outOfBounds(hitPixel.x,hitPixel.y-1) && Math.random() > 0.5 && hitPixel.element == "body") { if (Math.random() < 0.0005) { changePixel(pixelMap[hitPixel.x][hitPixel.y-1],"scp_1015") } else { changePixel(pixelMap[hitPixel.x][hitPixel.y-1],"penny") } } if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } releaseElement(pixel,"blood",2) } else if (elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 5 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { pixel.elemP = hitPixel.element hitPixel.element = "penny_converter" hitPixel.origElem = pixel.elemP hitPixel.pennySize = pixel.pennySize delete pixel.elemP } else if (elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 3 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } else if (elements[hitPixel.element].movable == true && elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 1 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } else if (Math.random() > 0.9 && elements[hitPixel.element].movable == true && elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 0 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } } if (!isEmpty(pixel.x,pixel.y-2) && !outOfBounds(pixel.x,pixel.y-2) && Math.random() < 0.5) { var hitPixel = pixelMap[pixel.x][pixel.y+1]; if ((hitPixel.element === "body" || hitPixel.element === "head") && pixel.pennySize > 10) { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } releaseElement(pixel,"blood") } else if (elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 5 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { pixel.elemP = hitPixel.element hitPixel.element = "penny_converter" hitPixel.origElem = pixel.elemP hitPixel.pennySize = pixel.pennySize delete pixel.elemP } else if (Math.random() > 0.5 && elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 3 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } else if (elements[hitPixel.element].movable == true && elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 1 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } else if (Math.random() > 0.5 && elements[hitPixel.element].movable == true && elements[hitPixel.element].state != "gas" && elements[hitPixel.element].state != "liquid" && pixel.pennySize > 0 && hitPixel.element != "head_1015" && hitPixel.element != "body" && hitPixel.element != "body" && hitPixel.element != "head" && hitPixel.element != "penny" && hitPixel.element != "scp_1015" && hitPixel.element != "penny_converter") { if (Math.random() < 0.0005) { changePixel(hitPixel,"scp_1015") } else { changePixel(hitPixel,"penny") } } } // 15% chance to change direction if (Math.random() < 0.15 || !moved) { pixel.dir *= -1; } // homeostasis if (pixel.temp > 37) { pixel.temp -= 1; } else if (pixel.temp < 37) { pixel.temp += 1; } if (pixel.elemP) { delete pixel.elemP } if (Math.random() < 0.05) { if (!pixel.pennySize) { pixel.pennySize = 0.5 } else { pixel.pennySize *= 1.1 } } } }, onChange: function(pixel) { releaseElement(pixel,"scp_1015",1,true) }, onDelete: function(pixel) { releaseElement(pixel,"scp_1015",1,true) }, } elements.head_1015 = { color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], name: "SCP-1015-1", category: "scp", hidden: true, density: 1080, state: "solid", conduct: .05, temp: 37, tempHigh: 150, stateHigh: "cooked_meat", tempLow: -30, stateLow: "frozen_meat", burn: 10, burnTime: 250, burnInto: "cooked_meat", breakInto: ["blood","meat","bone"], forceSaveColor: true, pickElement: "human", reactions: { "cancer": { elem1:"cancer", chance:0.005 }, "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, "plague": { elem1:"plague", chance:0.05 }, "oxygen": { elem2:"carbon_dioxide", chance:0.5 }, "beans": { elem2:[null,null,null,null,null,null,null,null,"stench"], chance:0.2 }, "sun": { elem1:"cooked_meat" }, "light": { stain1:"#825043" }, "bee": { stain1:"#cc564b", chance:0.2 }, "water": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, "alcohol": { chance:0.2, attr1:{"panic":0} }, "anesthesia": { attr1:{"panic":0} }, "alcohol_gas": { chance:0.2, attr1:{"panic":0} } }, 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 == "body_1015") { 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 } // check for eating food if (body && !pixel.dead && Math.random() < 0.0025) { shuffleArray(interactCoordsShuffle); for (var i = 0; i < interactCoordsShuffle.length; i++) { var x = pixel.x+interactCoordsShuffle[i][0]; var y = pixel.y+interactCoordsShuffle[i][1]; if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].isFood && pixelMap[x][y].panic === undefined) { deletePixel(x,y); break; } } } 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; } }, onChange: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } }, onDelete: function(pixel) { for (var i = 0; i < adjacentCoords.length; i++) { var coord = adjacentCoords[i]; var x = pixel.x+coord[0]; var y = pixel.y+coord[1]; if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) { pixelMap[x][y].panic += 20; } } } } elements.penny_converter = { color: ["#F49858","#DE882C","#D9752C","#B15D23","#C16522","#B75C24","#B05B28","#AF6720"], name: "penny", tick: function(pixel) { 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)) { var newPixel = pixelMap[x][y] if (elements[newPixel.element].id !== elements.penny.id && elements[newPixel.element].id !== elements.scp_1015.id && newPixel.element == pixel.origElem && pixel.pennySize > 1) { changePixel(newPixel,"penny_converter") newPixel.origElem = pixel.origElem newPixel.pennySize = (pixel.pennySize-1) if (Math.random() < 0.0005) { changePixel(pixel,"scp_1015") } else { changePixel(pixel,"penny") } } } } if (!pixel.pennySize || !pixel.origElem || pixel.pennySize < 2 || (pixel.start + 20) < pixelTicks) { if (Math.random() < 0.0005) { changePixel(pixel,"scp_1015") } else { changePixel(pixel,"penny") } } }, category: "special", state: "solid", density: 600, excludeRandom: true } /* elements.scp_1147_1 = { color: "#a32d2d", behavior: [ "ST:scp_1147_branch|ST:scp_1147_branch|ST:scp_1147_branch", "ST:scp_1147_branch|XX|ST:scp_1147_branch", "ST:scp_1147_branch AND M2|ST:scp_1147_branch AND M1|ST:scp_1147_branch AND M2", ], reactions: { }, category:"scp", tempHigh: 256, stateHigh: "scp_1147_1", breakInto: "scp_1147_1", state: "solid", density: 1050, } elements.scp_1147_1 = { color: "#291d07", burn:50, burnTime:20, category:"scp", state: "solid", density: 1400, cooldown: defaultCooldown, seed: true, tick: function(pixel) { if (!tryMove(pixel,pixel.x,pixel.y+1)) { if (Math.random() < 0.02 && pixel.age > 50 && pixel.temp < 100 && isEmpty(pixel.x, pixel.y-1)) { changePixel(pixel,"scp_1147_branch") createPixel("scp_1147_branch",pixel.x, pixel.y-1) if (isEmpty(pixel.x, pixel.y-2)) { createPixel("scp_1147_branch",pixel.x, pixel.y-2) } } else if (pixel.age > 1000 && Math.random() < 0.05) { changePixel(pixel,"scp_1147_branch"); pixel.color = pixelColorPick(pixel, pixel.wc); } pixel.age++; } doDefaults(pixel); }, properties: { "age":0 }, } elements.scp_1147_branch = { name: "scp_1147", color: "#a0522d", behavior: behaviors.WALL, movable: false, category: "scp", hidden: true, state: "solid", density: 1500, hardness: 0.15, seed: "scp_1147_1", forceSaveColor: true, tick: function(pixel) { if (!pixel.burning) { if (!pixel.lc) { pixel.lc = "#00bf00" } if (!pixel.wc) { pixel.wc = "#a0522d" } if (isEmpty(pixel.x-1,pixel.y-1) && Math.random() < 0.02) { if (Math.random() < 0.5) { if (Math.random() > 0.7) { createPixel("scp_1147_1",pixel.x-1,pixel.y-1); } else { createPixel("scp_1147_leaf",pixel.x-1,pixel.y-1); pixelMap[pixel.x-1][pixel.y-1].color = pixelColorPick(pixelMap[pixel.x-1][pixel.y-1], pixel.lc); } } else { createPixel("scp_1147_branch",pixel.x-1,pixel.y-1); pixelMap[pixel.x-1][pixel.y-1].color = pixelColorPick(pixelMap[pixel.x-1][pixel.y-1], pixel.wc); pixelMap[pixel.x-1][pixel.y-1].wc = pixel.wc; pixelMap[pixel.x-1][pixel.y-1].lc = pixel.lc; } } if (isEmpty(pixel.x+1,pixel.y-1) && Math.random() < 0.02) { if (Math.random() < 0.5) { if (Math.random() > 0.7) { createPixel("scp_1147_1",pixel.x+1,pixel.y-1); } else { createPixel("scp_1147_leaf",pixel.x+1,pixel.y-1); pixelMap[pixel.x+1][pixel.y-1].color = pixelColorPick(pixelMap[pixel.x+1][pixel.y-1], pixel.lc); } } else { createPixel("scp_1147_branch",pixel.x+1,pixel.y-1); pixelMap[pixel.x+1][pixel.y-1].color = pixelColorPick(pixelMap[pixel.x+1][pixel.y-1], pixel.wc); pixelMap[pixel.x+1][pixel.y-1].wc = pixel.wc; pixelMap[pixel.x+1][pixel.y-1].lc = pixel.lc; } } if (isEmpty(pixel.x,pixel.y-1) && Math.random() < 0.02) { if (Math.random() < 0.75) { if (Math.random() > 0.8) { createPixel("scp_1147_1",pixel.x,pixel.y-1); } else { createPixel("scp_1147_leaf",pixel.x,pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixelColorPick(pixelMap[pixel.x][pixel.y-1], pixel.lc); } } else { createPixel("scp_1147_branch",pixel.x,pixel.y-1); pixelMap[pixel.x][pixel.y-1].color = pixelColorPick(pixelMap[pixel.x][pixel.y-1], pixel.wc); pixelMap[pixel.x][pixel.y-1].wc = pixel.wc; pixelMap[pixel.x][pixel.y-1].lc = pixel.lc; } } } doDefaults(pixel); }, } elements.scp_1147_leaf = { name: "scp_1147", color: "#00bf00", behavior: behaviors.WALL, reactions: { }, category:"scp", state: "solid", density: 1050, forceSaveColor: true } */ elements.scp_1600 = { name: "SCP-1600-1", color: "#D6CE02", tick: function(pixel) { if (pixel.start === pixelTicks) {return} if (pixel.charge && elements[pixel.element].behaviorOn) { pixelTick(pixel); return; } var viscMove = true; if (elements[pixel.element].viscosity) { viscMove = (Math.random()*100) < 100 / Math.pow(elements[pixel.element].viscosity, 0.25); } if (!viscMove) { var move1Spots = [ 0 ] } else { var move1Spots = [ 1,0,-1 ] } var moved = false; for (var i = 0; i < move1Spots.length; i++) { const j = Math.random()*move1Spots.length | 0; const coord = move1Spots[j]; if (tryMove(pixel, pixel.x+coord, pixel.y+1)) { moved = true; break; } move1Spots.splice(j, 1); } if (!moved) { if (viscMove) { if (Math.random() < 0.5) { if (!tryMove(pixel, pixel.x+1, pixel.y)) { tryMove(pixel, pixel.x-1, pixel.y); } } else { if (!tryMove(pixel, pixel.x-1, pixel.y)) { tryMove(pixel, pixel.x+1, pixel.y); } } } } if (!isEmpty(pixel.x,pixel.y-1) && !outOfBounds(pixel.x,pixel.y-1)) { if (elements[pixelMap[pixel.x][pixel.y-1].element].state != "liquid" && elements[pixelMap[pixel.x][pixel.y-1].element].state != "gas") { tryMove(pixel,pixel.x,pixel.y-1) } } doDefaults(pixel); }, onCollide: function(pixelOG,pixel) { if (elements[pixel.element].id === elements.scp_1600.id) { return; } if (elements.scp_1600.reactions[pixel.element]) { return; } if (elements.scp_1600.ignore.indexOf(pixel.element) !== -1) return; if (Math.random() < (elements[pixel.element].hardness || 0.25)) { return; } if (elements[pixel.element].state !== "liquid" && elements[pixel.element].state !== "gas") { var rgb1 = pixel.color.match(/\d+/g); var hex1 = RGBToHex(rgb1) // average the colors if (hex_is_light(hex1) == false) { var rgb2 = elements.scp_1600_1.color[1].match(/\d+/g); } else { var rgb2 = elements.scp_1600_1.color[0].match(/\d+/g); } var avg = []; for (var j = 0; j < rgb1.length; j++) { avg[j] = Math.floor((rgb1[j]*(1-0.4)) + (rgb2[j]*0.6)); } changePixel(pixel,"scp_1600_1") pixel.color = "rgb("+avg.join(",")+")"; } }, ignore: ["scp_1600_1","gallium","brass","zinc","sulfur","body_173","head_173","body_096","head_096","body_049","head_049","scp_035","scp_1015","scp_999","scp_063","scp_055"], canPlace: true, reactions: { "scp_682":{ stain2:"#CA8E2F", chance:0.05,}, "cheese":{ elem2:"scp_1600_1", color2:"#CA8E2F"}, "melted_cheese":{ elem2:"scp_1600_1", color2:"#CA8E2F"}, "gold":{ elem2:"scp_1600_1", color2:"#FEDF5E"}, "gold_coin":{ elem2:"scp_1600_1", color2:"#FEDF5E"}, "molten_gold":{ elem2:"scp_1600_1", color2:"#FEDF5E"}, "rotten_cheese":{ elem2:"scp_1600_1", color2:["#B6B746","#B6B746","#BBA950","#BBA950","#CE9F4B"]}, "rotten_meat":{ elem2:"scp_1600_1", color2:["#B6B746","#B6B746","#C2995D","#C2995D","#CB7C8E"]}, "mercury":{ elem2:"scp_1600_1", color2:"#393430"}, "solid_mercury":{ elem2:"scp_1600_1", color2:"#393430"}, "meat":{ elem2:"scp_1600_1", color2:"#D5975F"}, "skin":{ elem2:"scp_1600_1", color2:"#D5975F"}, "head":{ elem2:"scp_1600_1", color2:"#D5975F"}, "cured_meat":{ elem2:"scp_1600_1", color2:"#D9A256"}, "blood":{ elem2:"scp_1600_1", color2:"#D36324"}, "infection":{ elem2:"scp_1600_1", color2:"#CE4B4A"}, }, density: 466.51, state: "liquid", category:"scp", } elements.scp_1600_1 = { name: "SCP-1600-2", color: ["#D8A43C","#A57426"], behavior: behaviors.STURDYPOWDER, reactions: { }, breakInto: "cheese_powder", breakIntoColorMultiplier: [1.1,1,0.86], category: "scp", state: "solid", density: 666.51, isFood: true }