2024-09-23 20:28:45 -04:00
|
|
|
/* mod by nekonico */
|
|
|
|
|
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-sandboxels_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-sand_screen")?.remove()
|
2025-03-04 21:25:59 -05:00
|
|
|
document.getElementById("elementButton-wet_sand_screen")?.remove()
|
2024-09-23 20:28:45 -04:00
|
|
|
document.getElementById("elementButton-rock_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-wall_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-water_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-steam_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-ice_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-wood_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-saw_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-cellulose_screen")?.remove()
|
2024-09-29 14:04:00 -04:00
|
|
|
document.getElementById("elementButton-blood_screen")?.remove()
|
2024-09-23 21:54:34 -04:00
|
|
|
document.getElementById("elementButton-paper_screen")?.remove()
|
2024-09-29 20:59:27 -04:00
|
|
|
document.getElementById("elementButton-body_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-head_screen")?.remove()
|
2025-03-06 23:27:21 -05:00
|
|
|
document.getElementById("elementButton-ash_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-mud_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-dirt_screen")?.remove()
|
2025-03-04 21:25:59 -05:00
|
|
|
document.getElementById("elementButton-bird_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-fly_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-rat_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-oxygen_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-fire_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-smoke_screen")?.remove()
|
|
|
|
|
document.getElementById("elementButton-simulated_human")?.remove()
|
2024-09-23 21:54:34 -04:00
|
|
|
})
|
|
|
|
|
|
2025-03-06 23:27:21 -05:00
|
|
|
viewInfo[8] = { // Screen Thermal View
|
|
|
|
|
name: "screen therm",
|
|
|
|
|
pixel: function(pixel,ctx) {
|
|
|
|
|
if (elements[pixel.element].isScreen == true) {
|
|
|
|
|
var temp = pixel.dtemp;
|
|
|
|
|
if (temp < -50) {temp = -50}
|
|
|
|
|
if (temp > 6000) {temp = 6000}
|
|
|
|
|
// logarithmic scale, with coldest being 225 (-50 degrees) and hottest being 0 (6000 degrees)
|
|
|
|
|
var hue = Math.round(225 - (Math.log(temp+100)/Math.log(6000+100))*225);
|
|
|
|
|
if (hue < 0) {hue = 0}
|
|
|
|
|
if (hue > 225) {hue = 225}
|
|
|
|
|
drawSquare(ctx,"hsl("+hue+",100%,50%)",pixel.x,pixel.y)
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
var a = (settings.textures !== 0) ? pixel.alpha : undefined;
|
|
|
|
|
if (((elements[pixel.element].isGas && elements[pixel.element].glow !== false) || elements[pixel.element].glow || pixel.glow) && pixel.glow !== false) {
|
|
|
|
|
drawPlus(ctx,pixel.color,pixel.x,pixel.y,undefined,a)
|
|
|
|
|
// if (isEmpty(pixel.x+1,pixel.y) || isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x,pixel.y+1) || isEmpty(pixel.x,pixel.y-1)) {}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
drawSquare(ctx,pixel.color,pixel.x,pixel.y,undefined,a)
|
|
|
|
|
}
|
|
|
|
|
if (pixel.charge && view !== 2) { // Yellow glow on charge
|
|
|
|
|
if (!elements[pixel.element].colorOn) {
|
|
|
|
|
drawSquare(ctx,"rgba(255,255,0,0.5)",pixel.x,pixel.y);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
screenTemp = function(pixel) {
|
|
|
|
|
for (var i = 0; i < biCoords.length; i++) {
|
|
|
|
|
var x = pixel.x+biCoords[i][0];
|
|
|
|
|
var y = pixel.y+biCoords[i][1];
|
|
|
|
|
if (!isEmpty(x,y,true)) {
|
|
|
|
|
var newPixel = pixelMap[x][y];
|
|
|
|
|
if (elements[newPixel.element].isScreen) {
|
|
|
|
|
// Skip if both temperatures are the same
|
|
|
|
|
if (pixel.dtemp === newPixel.dtemp || elements[newPixel.element].insulate === true) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// Set both pixel temperatures to their average
|
|
|
|
|
var avg = (pixel.dtemp + newPixel.dtemp)/2;
|
|
|
|
|
pixel.dtemp = avg;
|
|
|
|
|
newPixel.dtemp = avg;
|
|
|
|
|
pixelTempCheck(pixel);
|
|
|
|
|
pixelTempCheck(newPixel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
doScreenBurning = function(pixel) {
|
|
|
|
|
if (pixel.digburning) { // Burning
|
|
|
|
|
if (pixel.digburnStart === undefined) { pixel.digburnStart = pixelTicks }
|
|
|
|
|
var info = elements[pixel.element];
|
|
|
|
|
if (!info.insulate) { pixel.dtemp += 1; }
|
|
|
|
|
if (pixel.dtemp < 0) {
|
|
|
|
|
pixel.digburning = undefined;
|
|
|
|
|
pixel.digburnStart = undefined;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
for (var i = 0; i < adjacentCoords.length; i++) { // Burn adjacent pixels
|
|
|
|
|
var x = pixel.x+adjacentCoords[i][0];
|
|
|
|
|
var y = pixel.y+adjacentCoords[i][1];
|
|
|
|
|
if (!isEmpty(x,y,true)) {
|
|
|
|
|
var newPixel = pixelMap[x][y];
|
|
|
|
|
if (elements[newPixel.element].dburn && !newPixel.digburning) {
|
|
|
|
|
if (Math.floor(Math.random()*100) < elements[newPixel.element].dburn) {
|
|
|
|
|
newPixel.digburning = true;
|
|
|
|
|
newPixel.digburnStart = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].dextinguish && elements[pixel.element].digburning !== true) {
|
|
|
|
|
pixel.digburning = undefined;
|
|
|
|
|
pixel.digburnStart = undefined;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((pixelTicks - pixel.digburnStart > (info.digburnTime || 200)) && Math.floor(Math.random()*100)<(info.dburn || 10) && !(info.digburnTime === undefined && info.hardness >= 1)) {
|
|
|
|
|
var digburnInto = info.digburnInto;
|
|
|
|
|
if (digburnInto === undefined) {
|
|
|
|
|
digburnInto = "fire_screen";
|
|
|
|
|
}
|
|
|
|
|
else if (digburnInto instanceof Array) {
|
|
|
|
|
digburnInto = digburnInto[Math.floor(Math.random()*digburnInto.length)];
|
|
|
|
|
}
|
|
|
|
|
changePixel(pixel,digburnInto);
|
|
|
|
|
if (info.digfireColor !== undefined && digburnInto === "fire_screen") {
|
|
|
|
|
pixel.color = pixelColorPick(pixel,info.digfireColor);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.color = pixelColorPick(pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (Math.floor(Math.random()*100)<10 && info.id !== elements.fire_screen.id && info.digfireElement !== null) { // Spawn fire
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y-1)) {
|
|
|
|
|
var firePixel = pixelMap[pixel.x][pixel.y-1]
|
|
|
|
|
if (firePixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(firePixel,(info.digfireElement || "fire_screen"));
|
|
|
|
|
firePixel.dtemp = pixel.dtemp//+(pixelTicks - (pixel.digburnStart || 0));
|
|
|
|
|
if (info.digfireColor !== undefined) {
|
|
|
|
|
firePixel.color = pixelColorPick(pixelMap[pixel.x][pixel.y-1],info.digfireColor);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x,pixel.y+1)) {
|
|
|
|
|
var firePixel = pixelMap[pixel.x][pixel.y+1]
|
|
|
|
|
if (firePixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(firePixel,(info.digfireElement || "fire_screen"));
|
|
|
|
|
firePixel.dtemp = pixel.dtemp//+(pixelTicks - (pixel.burnStart || 0));
|
|
|
|
|
if (info.digfireColor !== undefined) {
|
|
|
|
|
firePixel.color = pixelColorPick(pixelMap[pixel.x][pixel.y+1],info.digfireColor);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// same for below if top is blocked
|
|
|
|
|
else if (!isEmpty(pixel.x,pixel.y+1)) {
|
|
|
|
|
var firePixel = pixelMap[pixel.x][pixel.y+1]
|
|
|
|
|
if (firePixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(firePixel,(info.digfireElement || "fire_screen"));
|
|
|
|
|
firePixel.dtemp = pixel.dtemp//+(pixelTicks - (pixel.burnStart || 0));
|
|
|
|
|
if (info.digfireColor !== undefined) {
|
|
|
|
|
firePixel.color = pixelColorPick(pixelMap[pixel.x][pixel.y+1],info.digfireColor);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.sandboxels_screen_off = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
color: "#454545",
|
|
|
|
|
behavior: behaviors.WALL,
|
2025-03-06 23:27:21 -05:00
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (pixel.dtemp !== 20) { pixel.dtemp = 20 }
|
|
|
|
|
if (pixel.charge) { pixel.charges = pixelTicks }
|
|
|
|
|
if (pixelTicks - 10 > pixel.charges) {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen")
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
conduct: 1,
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","sand"],
|
|
|
|
|
tempLow: -80,
|
|
|
|
|
stateLow: "glass_shard",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 1200,
|
|
|
|
|
desc: "Shock to turn on."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.sandboxels_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#1D1D1D",
|
2025-03-06 23:27:21 -05:00
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (pixel.dtemp !== 20) { pixel.dtemp = 20 }
|
|
|
|
|
if (pixel.charge) { pixel.charge = 0 }
|
|
|
|
|
},
|
|
|
|
|
conduct: 1,
|
2024-09-29 14:04:00 -04:00
|
|
|
tempHigh: 1500,
|
2025-03-04 21:25:59 -05:00
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","sand"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 1200,
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_heat = {
|
|
|
|
|
color: "#ff0000",
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].isScreen === true) {
|
2025-03-06 23:27:21 -05:00
|
|
|
pixel.dtemp += 2
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to heat simulated elements."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_cool = {
|
|
|
|
|
color: "#0000ff",
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].isScreen === true) {
|
2025-03-06 23:27:21 -05:00
|
|
|
pixel.dtemp -= 2
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to cool simulated elements."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_roomtemp = {
|
|
|
|
|
color: "#b1c96d",
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].isScreen === true) {
|
|
|
|
|
pixel.dtemp = 20
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to make simulated elements room temperature."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_smash = {
|
|
|
|
|
color: ["#666666","#888888","#666666"],
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].isScreen === true && elements[pixel.element].digBreakInto) {
|
|
|
|
|
changePixel(pixel,elements[pixel.element].digBreakInto);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to smash simulated elements."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_erase = {
|
|
|
|
|
color: "#fdb5ff",
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].isScreen === true) {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to erase simulated elements."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_human = {
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: ["#46433F","#47443C","#4D483D"],
|
|
|
|
|
category: "simulation",
|
2024-09-29 14:04:00 -04:00
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
2025-03-04 21:25:59 -05:00
|
|
|
if (!isEmpty(pixel.x, pixel.y+1),true && pixelMap[pixel.x][pixel.y+1].element === "sandboxels_screen") {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
newPixel.element = "body_screen";
|
|
|
|
|
pixel.element = "head_screen";
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (!isEmpty(pixel.x, pixel.y-1),true && pixelMap[pixel.x][pixel.y-1].element === "sandboxels_screen") {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
newPixel.element = "head_screen";
|
|
|
|
|
pixel.element = "body_screen";
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else {
|
|
|
|
|
changePixel(pixel, "sandboxels_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
related: ["suited_body","suited_head"],
|
|
|
|
|
cooldown: defaultCooldown,
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.sand_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#e6d577",
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
2024-09-23 21:54:34 -04:00
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","sand"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
isSolid: true,
|
2024-09-23 21:54:34 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 1602,
|
|
|
|
|
}
|
2024-09-23 21:54:34 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.wet_sand_screen = {
|
2024-09-20 21:13:13 -04:00
|
|
|
name:"screen",
|
2024-09-20 23:28:54 -04:00
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: ["#a19348","#b5a85e"],
|
2024-09-20 21:13:13 -04:00
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
2025-03-04 21:25:59 -05:00
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
2024-09-20 21:13:13 -04:00
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","wet_sand"],
|
2024-09-20 21:13:13 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
isSolid: true,
|
2024-09-29 14:04:00 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1905,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.dirt_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: ["#76552b","#5c4221","#573c1a","#6b481e"],
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","dirt"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
isSolid: true,
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
screenTemp(pixel)
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1602,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.mud_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#382417",
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","mud"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
isSolid: true,
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
screenTemp(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
2024-09-29 14:04:00 -04:00
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
2025-03-04 21:25:59 -05:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
state: "solid",
|
|
|
|
|
density: 1905,
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.rock_screen = {
|
2024-09-20 21:13:13 -04:00
|
|
|
name:"screen",
|
2024-09-20 23:28:54 -04:00
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: ["#808080","#4f4f4f","#949494"],
|
2024-09-20 21:13:13 -04:00
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
2024-09-20 23:28:54 -04:00
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","rock"],
|
2024-09-20 23:28:54 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
digBreakInto: "sand_screen",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
isSolid: true,
|
2024-09-20 23:28:54 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2024-09-20 23:28:54 -04:00
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-20 23:28:54 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
2024-09-20 23:28:54 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-20 23:28:54 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
2024-09-20 23:28:54 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-20 23:28:54 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 2550,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.saw_screen = {
|
2024-09-20 23:28:54 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: ["#dec150","#c7b15a"],
|
2024-09-20 23:28:54 -04:00
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
2024-09-20 21:13:13 -04:00
|
|
|
],
|
2024-09-20 23:28:54 -04:00
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
2024-09-20 21:13:13 -04:00
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","sawdust"],
|
2024-09-20 21:13:13 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 25,
|
|
|
|
|
digburnTime: 150,
|
|
|
|
|
digburnInto: ["fire_screen","fire_screen","fire_screen","ash_screen"],
|
2024-09-20 23:28:54 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
2024-09-20 23:28:54 -04:00
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-20 23:28:54 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
2024-09-20 23:28:54 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-20 23:28:54 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
2024-09-20 23:28:54 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-20 23:28:54 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
2025-03-06 23:27:21 -05:00
|
|
|
density: 393,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.ash_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: ["#8c8c8c","#9c9c9c"],
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","sawdust"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
screenTemp(pixel)
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 700,
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.cellulose_screen = {
|
2024-09-23 15:18:58 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: "#c7d4c9",
|
2024-09-23 15:18:58 -04:00
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
2025-03-04 21:25:59 -05:00
|
|
|
"SW:sandboxels_screen|XX|SW:sandboxels_screen",
|
|
|
|
|
"SW:sandboxels_screen|XX|SW:sandboxels_screen",
|
2024-09-23 15:18:58 -04:00
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","cellulose"],
|
2024-09-23 15:18:58 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
2024-09-23 15:18:58 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.2 && !isEmpty(pixel.x,pixel.y+1,true)) {
|
2024-09-23 15:18:58 -04:00
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
else if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true)) {
|
2025-03-04 21:25:59 -05:00
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
2024-09-23 15:18:58 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-23 15:18:58 -04:00
|
|
|
pixel.dtemp = newPixel.dtemp;
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true)) {
|
2025-03-04 21:25:59 -05:00
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
2024-09-23 15:18:58 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-23 15:18:58 -04:00
|
|
|
pixel.dtemp = newPixel.dtemp;
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+1][pixel.y];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (pixel.dtemp > 99) { changePixel(pixel,"paper_screen") }
|
2024-09-23 15:18:58 -04:00
|
|
|
},
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 1500,
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.blood_screen = {
|
2024-09-23 15:18:58 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: ["#ff0000","#ee0000"],
|
2024-09-23 15:18:58 -04:00
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"SW:sandboxels_screen|XX|SW:sandboxels_screen",
|
|
|
|
|
"SW:sandboxels_screen|XX|SW:sandboxels_screen",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","blood"],
|
2024-09-23 15:18:58 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
2024-09-23 15:18:58 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2024-09-23 15:18:58 -04:00
|
|
|
if (Math.random() > 0.2 && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
|
|
|
|
|
pixel.dtemp = newPixel.dtemp
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
else if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true)) {
|
2025-03-04 21:25:59 -05:00
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
2024-09-23 15:18:58 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-29 14:04:00 -04:00
|
|
|
pixel.dtemp = newPixel.dtemp;
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true)) {
|
2025-03-04 21:25:59 -05:00
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
2024-09-23 15:18:58 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-29 14:04:00 -04:00
|
|
|
pixel.dtemp = newPixel.dtemp;
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+1][pixel.y];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:18:58 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (pixel.dtemp > 99) { changePixel(pixel,"steam_screen") }
|
2024-09-23 15:18:58 -04:00
|
|
|
},
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 1060,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.water_screen = {
|
2024-09-20 23:28:54 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: "#2167ff",
|
2024-09-20 23:28:54 -04:00
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"SW:sandboxels_screen|XX|SW:sandboxels_screen",
|
|
|
|
|
"SW:sandboxels_screen|XX|SW:sandboxels_screen",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","water"],
|
2024-09-20 23:28:54 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
2024-09-20 23:28:54 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2024-09-20 23:28:54 -04:00
|
|
|
if (Math.random() > 0.2 && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 15:28:46 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
if (elements[newPixel.element].id === elements.dirt_screen.id) {
|
|
|
|
|
changePixel(newPixel, "mud_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].id === elements.saw_screen.id || elements[newPixel.element].id === elements.paper_screen.id) {
|
|
|
|
|
changePixel(newPixel, "cellulose_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
}
|
|
|
|
|
else if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y+1,true)) {
|
2025-03-04 21:25:59 -05:00
|
|
|
newPixel = pixelMap[pixel.x+1][pixel.y+1];
|
2024-09-20 23:28:54 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-20 23:28:54 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
|
|
|
|
|
pixel.dtemp = newPixel.dtemp
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
if (elements[newPixel.element].id === elements.dirt_screen.id) {
|
|
|
|
|
changePixel(newPixel, "mud_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].id === elements.saw_screen.id || elements[newPixel.element].id === elements.paper_screen.id) {
|
|
|
|
|
changePixel(newPixel, "cellulose_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-23 15:28:46 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y+1,true)) {
|
|
|
|
|
newPixel = pixelMap[pixel.x-1][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 21:54:34 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
|
|
|
|
|
pixel.dtemp = newPixel.dtemp
|
|
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
if (elements[newPixel.element].id === elements.dirt_screen.id) {
|
|
|
|
|
changePixel(newPixel, "mud_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].id === elements.saw_screen.id || elements[newPixel.element].id === elements.paper_screen.id) {
|
|
|
|
|
changePixel(newPixel, "cellulose_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (Math.random() > 0.5 && !isEmpty(pixel.x+1,pixel.y,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+1][pixel.y];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-23 21:54:34 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.dirt_screen.id) {
|
|
|
|
|
changePixel(newPixel, "mud_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].id === elements.saw_screen.id || elements[newPixel.element].id === elements.paper_screen.id) {
|
|
|
|
|
changePixel(newPixel, "cellulose_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,pixel.element);
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
if (elements[newPixel.element].id === elements.sand_screen.id) {
|
|
|
|
|
changePixel(newPixel, "wet_sand_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
|
|
|
|
if (elements[newPixel.element].id === elements.dirt_screen.id) {
|
|
|
|
|
changePixel(newPixel, "mud_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[newPixel.element].id === elements.saw_screen.id || elements[newPixel.element].id === elements.paper_screen.id) {
|
|
|
|
|
changePixel(newPixel, "cellulose_screen")
|
|
|
|
|
changePixel(pixel, "sandboxels_screen")
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
if (pixel.dtemp < 0) { changePixel(pixel,"ice_screen") }
|
|
|
|
|
if (pixel.dtemp > 99) { changePixel(pixel,"steam_screen") }
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 997,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.steam_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#abd6ff",
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 150,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","steam"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
|
pixel.dir1 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir1 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() < 0.5) {
|
|
|
|
|
pixel.dir2 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir2 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.25 && !isEmpty(pixel.x+(pixel.dir1),pixel.y-(pixel.dir2),true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir1)][pixel.y-(pixel.dir2)];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,pixel.element);
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
if (pixel.dtemp < 100) { changePixel(pixel,"water_screen") }
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 0.6,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.oxygen_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#99c7ff",
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","oxygen"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
|
pixel.dir1 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir1 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() < 0.5) {
|
|
|
|
|
pixel.dir2 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir2 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+(pixel.dir1),pixel.y-(pixel.dir2),true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir1)][pixel.y-(pixel.dir2)];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-23 15:28:46 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1.292,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.fire_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: ["#ff6b21","#ffa600","#ff4000"],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 600,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","oxygen"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
digburning: true,
|
|
|
|
|
digburnTime: 25,
|
|
|
|
|
digburnInto: "smoke_screen",
|
2025-03-04 21:25:59 -05:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.975) {
|
|
|
|
|
changePixel(pixel,"smoke_screen")
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
|
pixel.dir1 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir1 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() < 0.75) {
|
|
|
|
|
pixel.dir2 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir2 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.05 && !isEmpty(pixel.x+(pixel.dir1),pixel.y-(pixel.dir2),true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir1)][pixel.y-(pixel.dir2)];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
if (pixel.dtemp < 100) { changePixel(pixel,"smoke_screen") }
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 0.1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.smoke_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#383838",
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","oxygen"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.95) {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen")
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
|
pixel.dir1 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir1 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() < 0.5) {
|
|
|
|
|
pixel.dir2 = 1
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pixel.dir2 = -1
|
|
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+(pixel.dir1),pixel.y-(pixel.dir2),true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir1)][pixel.y-(pixel.dir2)];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (pixel.dtemp > 1000) { changePixel(pixel,"fire_screen") }
|
2024-09-21 13:33:17 -04:00
|
|
|
},
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 1.292,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.body_screen = {
|
|
|
|
|
color: ["#A8A7AB","#878689"],
|
2024-09-21 13:33:17 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
behavior: [
|
2025-03-04 21:25:59 -05:00
|
|
|
"XX|CH:sandboxels_screen>blood_screen%0.1|XX",
|
|
|
|
|
"XX|XX|XX",
|
2024-09-21 13:33:17 -04:00
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
2024-09-29 14:04:00 -04:00
|
|
|
dtemp: 20,
|
2024-09-21 13:33:17 -04:00
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","body"],
|
2024-09-21 13:33:17 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
digBreakInto: "blood_screen",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isSolid: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 10,
|
|
|
|
|
digburnTime: 250,
|
|
|
|
|
digburnInto: ["fire_screen","ash_screen","ash_screen"],
|
2024-09-21 13:33:17 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
|
|
|
|
if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") }
|
2025-03-04 21:25:59 -05:00
|
|
|
if (!isEmpty(pixel.x,pixel.y-1,true) && pixelMap[pixel.x][pixel.y-1].element === "head_screen") {
|
|
|
|
|
var headPixel = pixelMap[pixel.x][pixel.y-1]
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1]
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(newPixel,"body_screen")
|
|
|
|
|
newPixel.dtemp = pixel.dtemp
|
|
|
|
|
changePixel(pixel,"head_screen")
|
|
|
|
|
pixel.dtemp = headPixel.dtemp
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
|
|
|
|
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
|
|
|
|
|
pixel.dtemp = newPixel.dtemp
|
|
|
|
|
if (Math.random() < 0.1 && !isEmpty(pixel.x+1,pixel.y,true) && !isEmpty(pixel.x+1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+1][pixel.y];
|
|
|
|
|
var newHeadPixel = pixelMap[pixel.x+1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel,"head_screen");
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
var newPixel2 = newHeadPixel;
|
|
|
|
|
var newHeadPixel2 = pixelMap[newHeadPixel.x][newHeadPixel.y-1];
|
|
|
|
|
if (newPixel2.element === "sandboxels_screen" && newHeadPixel2.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel2,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel2,"head_screen");
|
|
|
|
|
newPixel2.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel2.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y,true) && !isEmpty(pixel.x-1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
var newHeadPixel = pixelMap[pixel.x-1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel,"head_screen");
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
var newPixel2 = newHeadPixel;
|
|
|
|
|
var newHeadPixel2 = pixelMap[newHeadPixel.x][newHeadPixel.y-1];
|
|
|
|
|
if (newPixel2.element === "sandboxels_screen" && newHeadPixel2.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel2,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel2,"head_screen");
|
|
|
|
|
newPixel2.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel2.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (Math.random() < 0.05 && !isEmpty(pixel.x+1,pixel.y,true) && !isEmpty(pixel.x+1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+1][pixel.y];
|
|
|
|
|
var newHeadPixel = pixelMap[pixel.x+1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel,"head_screen");
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
var newPixel2 = newHeadPixel;
|
|
|
|
|
var newHeadPixel2 = pixelMap[newHeadPixel.x][newHeadPixel.y-1];
|
|
|
|
|
if (newPixel2.element === "sandboxels_screen" && newHeadPixel2.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel2,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel2,"head_screen");
|
|
|
|
|
newPixel2.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel2.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y,true) && !isEmpty(pixel.x-1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
var newHeadPixel = pixelMap[pixel.x-1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel,"head_screen");
|
|
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newHeadPixel.element === "sandboxels_screen") {
|
|
|
|
|
var newPixel2 = newHeadPixel;
|
|
|
|
|
var newHeadPixel2 = pixelMap[newHeadPixel.x][newHeadPixel.y-1];
|
|
|
|
|
if (newPixel2.element === "sandboxels_screen" && newHeadPixel2.element === "sandboxels_screen") {
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
changePixel(headPixel,"sandboxels_screen");
|
|
|
|
|
changePixel(newPixel2,"body_screen");
|
|
|
|
|
changePixel(newHeadPixel2,"head_screen");
|
|
|
|
|
newPixel2.dtemp = pixel.dtemp;
|
|
|
|
|
newHeadPixel2.dtemp = headPixel.dtemp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y-2,true) && pixelMap[pixel.x][pixel.y-2].element === "head_screen") {
|
|
|
|
|
changePixel(pixelMap[pixel.x][pixel.y-2],"sandboxels_screen");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
2024-09-29 14:04:00 -04:00
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
2024-09-21 13:33:17 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(newPixel,"body_screen");
|
2024-09-21 13:33:17 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
2024-09-29 14:04:00 -04:00
|
|
|
changePixel(pixel,"sandboxels_screen");
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.head_screen = {
|
|
|
|
|
color: ["#46433F","#47443C","#4D483D"],
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
|
|
|
|
],
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","head"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
digBreakInto: "blood_screen",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isSolid: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 10,
|
|
|
|
|
digburnTime: 250,
|
|
|
|
|
digburnInto: ["fire_screen","ash_screen","ash_screen"],
|
2025-03-04 21:25:59 -05:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
|
|
|
|
if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") }
|
2025-03-04 21:25:59 -05:00
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
if (Math.random() < 0.1) {
|
|
|
|
|
changePixel(newPixel,"blood_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else {
|
|
|
|
|
changePixel(newPixel,"head_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
newPixel.dtemp = pixel.dtemp;
|
|
|
|
|
changePixel(pixel,"sandboxels_screen");
|
2025-03-04 21:25:59 -05:00
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true) {
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.fly_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#4c4e42",
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
dir: 1,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","fly"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
digBreakInto: "blood_screen",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
isSolid: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 95,
|
|
|
|
|
digburnTime: 25,
|
|
|
|
|
digburnInto: ["fire_screen","ash_screen","ash_screen"],
|
2025-03-04 21:25:59 -05:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
|
|
|
|
if (pixel.dtemp > 100) { changePixel(pixel,"ash_screen") }
|
2025-03-04 21:25:59 -05:00
|
|
|
if (outOfBounds(pixel.x+(pixel.dir),pixel.y) || isEmpty(pixel.x+(pixel.dir),pixel.y)) {
|
|
|
|
|
if (pixel.dir === -1) {
|
|
|
|
|
pixel.dir = 1
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (pixel.dir === 1) {
|
|
|
|
|
pixel.dir = -1
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+(pixel.dir),pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir)][pixel.y-1];
|
2024-09-29 14:04:00 -04:00
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
2025-03-04 21:25:59 -05:00
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true || newPixel.element !== "sandboxels_screen") {
|
|
|
|
|
if (pixel.dir === -1) {
|
|
|
|
|
pixel.dir = 1
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.dir === 1) {
|
|
|
|
|
pixel.dir = -1
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x+(pixel.dir),pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir)][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true || newPixel.element !== "sandboxels_screen") {
|
|
|
|
|
if (pixel.dir === -1) {
|
|
|
|
|
pixel.dir = 1
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.dir === 1) {
|
|
|
|
|
pixel.dir = -1
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 600,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.bird_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#997457",
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
dir: 1,
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
|
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","bird"],
|
|
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
|
|
|
|
digBreakInto: "blood_screen",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isMoving: true,
|
|
|
|
|
isSolid: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 2,
|
|
|
|
|
digburnTime: 100,
|
|
|
|
|
digburnInto: ["fire_screen","ash_screen","ash_screen"],
|
2025-03-04 21:25:59 -05:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
|
|
|
|
if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") }
|
2025-03-04 21:25:59 -05:00
|
|
|
if (outOfBounds(pixel.x+(pixel.dir),pixel.y) || isEmpty(pixel.x+(pixel.dir),pixel.y)) {
|
|
|
|
|
if (pixel.dir === -1) {
|
|
|
|
|
pixel.dir = 1
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (pixel.dir === 1) {
|
|
|
|
|
pixel.dir = -1
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
if (Math.random() > 0.25 && !isEmpty(pixel.x+(pixel.dir),pixel.y,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir)][pixel.y];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (elements[newPixel.element].isScreen === true || newPixel.element !== "sandboxels_screen") {
|
|
|
|
|
if (elements[newPixel.element].id === elements.fly_screen.id && Math.random() < 0.5) {
|
|
|
|
|
changePixel(newPixel, "sandboxels_screen")
|
|
|
|
|
}
|
|
|
|
|
if (pixel.dir === -1) {
|
|
|
|
|
pixel.dir = 1
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.dir === 1) {
|
|
|
|
|
pixel.dir = -1
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (Math.random() > 0.5 && !isEmpty(pixel.x+(pixel.dir),pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir)][pixel.y+1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true || newPixel.element !== "sandboxels_screen") {
|
|
|
|
|
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
|
|
|
|
|
pixel.dtemp = newPixel.dtemp
|
|
|
|
|
if (elements[newPixel.element].id === elements.fly_screen.id && Math.random() < 0.5) {
|
|
|
|
|
changePixel(newPixel, "sandboxels_screen")
|
|
|
|
|
}
|
|
|
|
|
if (pixel.dir === -1) {
|
|
|
|
|
pixel.dir = 1
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.dir === 1) {
|
|
|
|
|
pixel.dir = -1
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (!isEmpty(pixel.x+(pixel.dir),pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+(pixel.dir)][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
|
|
|
|
}
|
|
|
|
|
else if (elements[newPixel.element].isScreen === true || newPixel.element !== "sandboxels_screen") {
|
|
|
|
|
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
|
|
|
|
|
pixel.dtemp = newPixel.dtemp
|
|
|
|
|
if (elements[newPixel.element].id === elements.fly_screen.id && Math.random() < 0.5) {
|
|
|
|
|
changePixel(newPixel, "sandboxels_screen")
|
|
|
|
|
}
|
|
|
|
|
if (pixel.dir === -1) {
|
|
|
|
|
pixel.dir = 1
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.dir === 1) {
|
|
|
|
|
pixel.dir = -1
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 400,
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.rat_screen = {
|
|
|
|
|
color: ["#a698a9","#8c7d82","#ccc3cf"],
|
2024-09-29 14:04:00 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
behavior: [
|
|
|
|
|
"XX|XX|XX",
|
2025-03-04 21:25:59 -05:00
|
|
|
"XX|XX|XX",
|
|
|
|
|
"XX|XX|XX",
|
2024-09-29 14:04:00 -04:00
|
|
|
],
|
|
|
|
|
properties: {
|
2025-03-04 21:25:59 -05:00
|
|
|
dtemp: 20,
|
2024-09-29 14:04:00 -04:00
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","rat"],
|
2024-09-29 14:04:00 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
digBreakInto: "blood_screen",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isSolid: true,
|
|
|
|
|
isMoving: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 2,
|
|
|
|
|
digburnTime: 100,
|
|
|
|
|
digburnInto: ["fire_screen","ash_screen","ash_screen"],
|
2024-09-29 14:04:00 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
|
|
|
|
if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") }
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y+1]
|
|
|
|
|
if (newPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newPixel,pixel);
|
|
|
|
|
}
|
|
|
|
|
else if (Math.random() < 0.25 && elements[newPixel.element].isScreen === true) {
|
|
|
|
|
if (elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel, pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
if (Math.random() < 0.5 && !isEmpty(pixel.x+1,pixel.y,true) && !isEmpty(pixel.x+1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+1][pixel.y];
|
|
|
|
|
var newUpPixel = pixelMap[pixel.x+1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" || elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel,pixel);
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newUpPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newUpPixel,pixel);
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y,true) && !isEmpty(pixel.x-1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
var newUpPixel = pixelMap[pixel.x-1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" || elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel,pixel);
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newUpPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newUpPixel,pixel);
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-06 23:27:21 -05:00
|
|
|
}
|
|
|
|
|
else if (Math.random() < 0.25) {
|
2025-03-04 21:25:59 -05:00
|
|
|
if (Math.random() < 0.5 && !isEmpty(pixel.x+1,pixel.y,true) && !isEmpty(pixel.x+1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x+1][pixel.y];
|
|
|
|
|
var newUpPixel = pixelMap[pixel.x+1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" || elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel,pixel);
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newUpPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newUpPixel,pixel);
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (!isEmpty(pixel.x-1,pixel.y,true) && !isEmpty(pixel.x-1,pixel.y-1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
var newUpPixel = pixelMap[pixel.x-1][pixel.y-1];
|
|
|
|
|
if (newPixel.element === "sandboxels_screen" || elements[newPixel.element].density < elements[pixel.element].density && elements[newPixel.element].isSolid !== true && elements[newPixel.element].isMoving === true) {
|
|
|
|
|
swapPixels(newPixel,pixel);
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element !== "sandboxels_screen" && newUpPixel.element === "sandboxels_screen") {
|
|
|
|
|
swapPixels(newUpPixel,pixel);
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
density: 1450,
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.ice_screen = {
|
2024-09-29 14:04:00 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: "#b2daeb",
|
|
|
|
|
behavior: behaviors.WALL,
|
2024-09-29 14:04:00 -04:00
|
|
|
properties: {
|
2025-03-04 21:25:59 -05:00
|
|
|
dtemp: 0,
|
2024-09-29 14:04:00 -04:00
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","ice"],
|
2024-09-29 14:04:00 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
|
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isSolid: true,
|
2024-09-29 14:04:00 -04:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (pixel.dtemp > 5) { changePixel(pixel,"water_screen") }
|
2024-09-29 14:04:00 -04:00
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
state: "solid",
|
|
|
|
|
density: 1200,
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.wood_screen = {
|
2024-09-29 14:04:00 -04:00
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
2025-03-04 21:25:59 -05:00
|
|
|
color: "#a0522d",
|
|
|
|
|
behavior: behaviors.WALL,
|
2024-09-29 14:04:00 -04:00
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
digBreakInto: "saw_screen",
|
|
|
|
|
isScreen: true,
|
|
|
|
|
isSolid: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 5,
|
|
|
|
|
digburnTime: 300,
|
|
|
|
|
digburnInto: ["fire_screen","ash_screen"],
|
2025-03-04 21:25:59 -05:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (pixel.dtemp > 400) { changePixel(pixel,"fire_screen") }
|
|
|
|
|
},
|
2024-09-29 14:04:00 -04:00
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","wood"],
|
2024-09-23 21:54:34 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2024-09-23 21:54:34 -04:00
|
|
|
state: "solid",
|
|
|
|
|
density: 1200,
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-23 21:54:34 -04:00
|
|
|
|
|
|
|
|
elements.paper_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#f0f0f0",
|
|
|
|
|
behavior: behaviors.WALL,
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 20,
|
|
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isSolid: true,
|
2025-03-06 23:27:21 -05:00
|
|
|
dburn: 70,
|
|
|
|
|
digburnTime: 300,
|
|
|
|
|
digburnInto: ["fire_screen","fire_screen","fire_screen","fire_screen","fire_screen","fire_screen","ash_screen"],
|
2025-03-04 21:25:59 -05:00
|
|
|
tick: function(pixel) {
|
2025-03-06 23:27:21 -05:00
|
|
|
screenTemp(pixel)
|
|
|
|
|
doScreenBurning(pixel)
|
2025-03-04 21:25:59 -05:00
|
|
|
if (pixel.dtemp > 248) { changePixel(pixel,"fire_screen") }
|
|
|
|
|
},
|
2024-09-23 21:54:34 -04:00
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","paper"],
|
2024-09-23 15:18:58 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2024-09-23 15:18:58 -04:00
|
|
|
state: "solid",
|
|
|
|
|
density: 1200,
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
|
2024-09-21 13:58:59 -04:00
|
|
|
elements.wall_screen = {
|
|
|
|
|
name:"screen",
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#808080",
|
|
|
|
|
behavior: behaviors.WALL,
|
|
|
|
|
properties: {
|
|
|
|
|
dtemp: 0,
|
|
|
|
|
},
|
2025-03-04 21:25:59 -05:00
|
|
|
isScreen: true,
|
|
|
|
|
isSolid: true,
|
2024-09-21 13:58:59 -04:00
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
|
2025-03-04 21:25:59 -05:00
|
|
|
breakInto: ["glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","glass_shard","concrete"],
|
2024-09-21 13:58:59 -04:00
|
|
|
tempLow: -45,
|
|
|
|
|
stateLow: "sandboxels_screen_off",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2024-09-21 13:58:59 -04:00
|
|
|
state: "solid",
|
|
|
|
|
density: 1200,
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-21 13:58:59 -04:00
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
elements.simulated_sand = {
|
2024-09-20 23:28:54 -04:00
|
|
|
color: "#e6d577",
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"sand_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on screen to place simulated sand."
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
|
2025-03-06 23:27:21 -05:00
|
|
|
elements.simulated_dirt = {
|
|
|
|
|
color: ["#76552b","#5c4221","#573c1a","#6b481e"],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"dirt_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on screen to place simulated dirt."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_wet_sand = {
|
|
|
|
|
color: ["#a19348","#b5a85e"],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"wet_sand_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on screen to place simulated wet sand."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_mud = {
|
|
|
|
|
color: "#382417",
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"mud_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on screen to place simulated mud."
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
elements.simulated_rock = {
|
2024-09-20 23:28:54 -04:00
|
|
|
color: ["#808080","#4f4f4f","#949494"],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"rock_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on screen to place simulated sand."
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
|
2025-03-06 23:27:21 -05:00
|
|
|
elements.simulated_ash = {
|
|
|
|
|
color: ["#8c8c8c","#9c9c9c"],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"ash_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on screen to place simulated ash."
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
elements.simulated_water = {
|
2024-09-20 23:28:54 -04:00
|
|
|
color: "#2167ff",
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"water_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to place simulated water."
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
elements.simulated_ice = {
|
2024-09-20 23:28:54 -04:00
|
|
|
color: "#b2daeb",
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"ice_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to place simulated ice."
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
|
2024-09-29 14:04:00 -04:00
|
|
|
elements.simulated_steam = {
|
2024-09-21 13:33:17 -04:00
|
|
|
color: "#abd6ff",
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"steam_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to place simulated steam."
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
|
|
|
|
elements.simulated_blood = {
|
|
|
|
|
color: ["#ff0000","#ee0000"],
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"blood_screen");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to place simulated blood."
|
2025-03-04 21:25:59 -05:00
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_fly = {
|
|
|
|
|
color: "#4c4e42",
|
2024-09-29 14:04:00 -04:00
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(pixel,"fly_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on a screen to place simulated flies."
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_bird = {
|
|
|
|
|
color: "#997457",
|
2024-09-23 15:18:58 -04:00
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(pixel,"bird_screen");
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on a screen to place simulated birds."
|
|
|
|
|
}
|
2024-09-23 15:18:58 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_rat = {
|
|
|
|
|
color: ["#a698a9","#8c7d82","#ccc3cf"],
|
2024-09-23 21:54:34 -04:00
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(pixel,"rat_screen");
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on a screen to place simulated rats."
|
|
|
|
|
}
|
2024-09-23 21:54:34 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_oxygen = {
|
|
|
|
|
color: "#99c7ff",
|
2024-09-21 13:58:59 -04:00
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
2025-03-04 21:25:59 -05:00
|
|
|
changePixel(pixel,"oxygen_screen");
|
2024-09-21 13:58:59 -04:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on a screen to place simulated oxygen."
|
|
|
|
|
}
|
2024-09-21 13:58:59 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_fire = {
|
|
|
|
|
color: ["#ff6b21","#ffa600","#ff4000"],
|
2024-09-20 23:28:54 -04:00
|
|
|
tool: function(pixel) {
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"fire_screen");
|
2025-03-06 23:27:21 -05:00
|
|
|
pixel.digburning = true
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on a screen to place simulated fire."
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_smoke = {
|
|
|
|
|
color: "#383838",
|
2024-09-20 23:28:54 -04:00
|
|
|
tool: function(pixel) {
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"smoke_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on a screen to place simulated smoke."
|
|
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_sawdust = {
|
|
|
|
|
color: ["#dec150","#c7b15a"],
|
2024-09-21 13:33:17 -04:00
|
|
|
tool: function(pixel) {
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"saw_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on screen to place simulated sawdust."
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_wood = {
|
|
|
|
|
color: "#a0522d",
|
2024-09-20 23:28:54 -04:00
|
|
|
tool: function(pixel) {
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"wood_screen");
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2024-09-20 23:28:54 -04:00
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
desc: "Use on a screen to place simulated wood."
|
|
|
|
|
}
|
2024-09-21 13:58:59 -04:00
|
|
|
|
2025-03-04 21:25:59 -05:00
|
|
|
elements.simulated_paper = {
|
|
|
|
|
color: "#f0f0f0",
|
2024-09-21 13:58:59 -04:00
|
|
|
tool: function(pixel) {
|
2025-03-04 21:25:59 -05:00
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"paper_screen");
|
2024-09-21 13:58:59 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to place simulated paper."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.simulated_wall = {
|
|
|
|
|
color: "#808080",
|
|
|
|
|
tool: function(pixel) {
|
|
|
|
|
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
|
|
|
|
|
changePixel(pixel,"wall_screen");
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
},
|
|
|
|
|
insulate:true,
|
|
|
|
|
canPlace: false,
|
|
|
|
|
category: "simulation",
|
|
|
|
|
desc: "Use on a screen to place simulated wall."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.danger_suit = {
|
|
|
|
|
color: ["#A8A7AB","#878689"],
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
|
|
|
|
reactions: {
|
|
|
|
|
"radiation": { elem2:"electric", temp1:200 },
|
|
|
|
|
"body":{ elem1:null, elem2:"suited_body" },
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 500,
|
|
|
|
|
stateHigh: ["molten_aluminum","smoke","ash"],
|
|
|
|
|
burn: 1,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["molten_aluminum","smoke","smoke","smoke","ash"],
|
|
|
|
|
category: "simulation",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 2710,
|
|
|
|
|
conduct: 0.73,
|
|
|
|
|
hardness: 0.05,
|
|
|
|
|
breakInto: "metal_scrap",
|
|
|
|
|
fireColor: "#A7B3BF",
|
|
|
|
|
superconductAt: -271.95
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.danger_helmet = {
|
|
|
|
|
color: ["#323233","#434344"],
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
|
|
|
|
reactions: {
|
|
|
|
|
"head":{ elem1:null, elem2:"suited_head" },
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 1500,
|
|
|
|
|
stateHigh: ["molten_glass","molten_glass","molten_plastic"],
|
|
|
|
|
burn: 1,
|
|
|
|
|
burnTime: 200,
|
|
|
|
|
burnInto: ["glass_shard","glass_shard","glass_shard","glass_shard","dioxin","smoke","dioxin","smoke","stench"],
|
|
|
|
|
category: "simulation",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 2500,
|
|
|
|
|
breakInto: "glass_shard",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.suited_body = {
|
|
|
|
|
color: ["#A8A7AB","#878689"],
|
|
|
|
|
category: "life",
|
|
|
|
|
hidden: true,
|
|
|
|
|
density: 2710,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
temp: 37,
|
|
|
|
|
tempHigh: 300,
|
|
|
|
|
stateHigh: ["cooked_meat","cooked_meat","cooked_meat","cooked_meat","ash"],
|
|
|
|
|
tempLow: -75,
|
|
|
|
|
stateLow: "frozen_meat",
|
|
|
|
|
burn: 10,
|
|
|
|
|
burnTime: 250,
|
|
|
|
|
burnInto: ["cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","molten_aluminum","smoke","smoke","smoke","ash"],
|
|
|
|
|
breakInto: ["blood","meat","bone"],
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
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 },
|
|
|
|
|
"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 },
|
|
|
|
|
"gold_coin": { elem2:null, chance:0.05 },
|
|
|
|
|
"diamond": { 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") {
|
|
|
|
|
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]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (headpixel.element == "suited_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]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-09-21 13:58:59 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
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
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
|
|
|
|
|
// Find the head
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "suited_head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
2024-09-21 13:58:59 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else { var head = null }
|
|
|
|
|
if (pixel.burning) {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
if (head && pixelTicks-pixel.burnStart > 240) {
|
|
|
|
|
pixel.color = head.color;
|
|
|
|
|
}
|
2024-09-21 13:58:59 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (pixel.panic > 0) {
|
|
|
|
|
pixel.panic -= 0.1;
|
2024-09-23 15:18:58 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-09-23 21:54:34 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else if (head == null) { return }
|
|
|
|
|
else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
|
|
|
|
|
var movesToTry = [
|
|
|
|
|
[1*pixel.dir,0],
|
|
|
|
|
[1*pixel.dir,-1],
|
|
|
|
|
];
|
|
|
|
|
// While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
|
|
|
|
|
while (movesToTry.length > 0) {
|
|
|
|
|
var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
|
|
|
|
|
if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
|
|
|
|
|
var origx = pixel.x+move[0];
|
|
|
|
|
var origy = pixel.y+move[1];
|
|
|
|
|
if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
|
|
|
|
|
movePixel(head, head.x+move[0], head.y+move[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 15% chance to change direction
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dir *= -1;
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
2024-09-21 13:58:59 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.suited_head = {
|
|
|
|
|
color: ["#46433F","#47443C","#4D483D"],
|
|
|
|
|
category: "life",
|
|
|
|
|
hidden: true,
|
|
|
|
|
density: 1080,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
temp: 37,
|
|
|
|
|
tempHigh: 300,
|
|
|
|
|
stateHigh: ["cooked_meat","cooked_meat","cooked_meat","cooked_meat","glass_shard"],
|
|
|
|
|
tempLow: -75,
|
|
|
|
|
stateLow: "frozen_meat",
|
|
|
|
|
burn: 10,
|
|
|
|
|
burnTime: 250,
|
|
|
|
|
burnInto: ["cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","melted_plastic","glass_shard"],
|
|
|
|
|
breakInto: ["blood","meat","bone","blood","meat","bone","glass_shard"],
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
reactions: {
|
|
|
|
|
"oxygen": { elem2:"carbon_dioxide", 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
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
|
|
|
|
|
// Find the body
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "suited_body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
2024-09-29 14:04:00 -04:00
|
|
|
}
|
2025-03-04 21:25:59 -05:00
|
|
|
else { var body = null }
|
|
|
|
|
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) {
|
|
|
|
|
// create blood if severed 10% chance
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y+1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.digitalizer = {
|
|
|
|
|
color: ["#d1c6be","#b5c0ad","#b9b8bc"],
|
|
|
|
|
behavior: behaviors.WALL,
|
|
|
|
|
onSelect: function() {
|
|
|
|
|
logMessage("Do not digitalize unregistered elements!");
|
2024-09-21 13:58:59 -04:00
|
|
|
},
|
2025-03-06 23:27:21 -05:00
|
|
|
tempHigh: 600,
|
|
|
|
|
stateHigh: ["molten_aluminum","molten_aluminum","molten_aluminum","molten_gallium"],
|
|
|
|
|
breakInto: ["metal_scrap"],
|
2025-03-04 21:25:59 -05:00
|
|
|
tempLow: -80,
|
|
|
|
|
stateLow: "glass_shard",
|
2024-09-29 14:04:00 -04:00
|
|
|
category: "simulation",
|
2025-03-04 21:25:59 -05:00
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (!isEmpty(pixel.x,pixel.y-1,true) && !isEmpty(pixel.x,pixel.y+1,true)) {
|
|
|
|
|
var newPixel = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
var screen = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (screen.element === "sandboxels_screen") {
|
|
|
|
|
if (newPixel.element === "sand") {
|
|
|
|
|
changePixel(screen,"sand_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "ice") {
|
|
|
|
|
changePixel(screen,"ice_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "steam") {
|
|
|
|
|
changePixel(screen,"steam_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "water") {
|
|
|
|
|
changePixel(screen,"water_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "wood") {
|
|
|
|
|
changePixel(screen,"wood_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "paper") {
|
|
|
|
|
changePixel(screen,"paper_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "sawdust") {
|
|
|
|
|
changePixel(screen,"saw_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "cellulose") {
|
|
|
|
|
changePixel(screen,"cellulose_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "blood") {
|
|
|
|
|
changePixel(screen,"blood_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "body") {
|
|
|
|
|
changePixel(screen,"blood_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "head") {
|
|
|
|
|
changePixel(screen,"blood_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "rock") {
|
|
|
|
|
changePixel(screen,"rock_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "wall") {
|
|
|
|
|
changePixel(screen,"wall_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "fly") {
|
|
|
|
|
changePixel(screen,"fly_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "bird") {
|
|
|
|
|
changePixel(screen,"bird_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "rat") {
|
|
|
|
|
changePixel(screen,"rat_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "fire") {
|
|
|
|
|
changePixel(screen,"fire_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "smoke") {
|
|
|
|
|
changePixel(screen,"smoke_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (newPixel.element === "oxygen") {
|
|
|
|
|
changePixel(screen,"oxygen_screen");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x,pixel.y-2,true) && newPixel.element === "suited_body") {
|
|
|
|
|
var headPixel = pixelMap[pixel.x][pixel.y-2];
|
|
|
|
|
if (headPixel.element === "suited_head" && newPixel.element === "suited_body") {
|
|
|
|
|
changePixel(screen,"simulated_human");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y-1)
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
changePixel(screen,"malware");
|
|
|
|
|
deletePixel(newPixel.x,newPixel.y)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1200,
|
|
|
|
|
desc: "digitalizes elements."
|
|
|
|
|
}
|
2024-09-21 13:33:17 -04:00
|
|
|
|
|
|
|
|
if (!elements.malware.reactions) { elements.malware.reactions = {} }
|
2024-09-23 21:54:34 -04:00
|
|
|
elements.malware.reactions.sandboxels_screen = { "elem2": ["sand_screen","sandboxels_screen_off","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.saw_screen = { "elem2": ["wall_screen","wall_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.sand_screen = { "elem2": ["paper_screen","paper_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.rock_screen = { "elem2": ["wood_screen","wood_screen","sandboxels_screen_off","malware"] };
|
2024-09-29 14:04:00 -04:00
|
|
|
elements.malware.reactions.cellulose_screen = { "elem2": ["blood_screen","blood_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.blood_screen = { "elem2": ["ice_screen","ice_screen","sandboxels_screen_off","malware"] };
|
2024-09-23 21:54:34 -04:00
|
|
|
elements.malware.reactions.water_screen = { "elem2": ["steam_screen","steam_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.steam_screen = { "elem2": ["water_screen","water_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.ice_screen = { "elem2": ["cellulose_screen","cellulose_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.wood_screen = { "elem2": ["rock_screen","rock_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.paper_screen = { "elem2": ["sand_screen","sand_screen","sandboxels_screen_off","malware"] };
|
|
|
|
|
elements.malware.reactions.wall_screen = { "elem2": ["saw_screen","saw_screen","sandboxels_screen_off","malware"] };
|
2024-09-29 14:04:00 -04:00
|
|
|
|
|
|
|
|
elements.head.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") {
|
|
|
|
|
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 == "suited_body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var body = null }
|
|
|
|
|
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) {
|
|
|
|
|
// create blood if severed 10% chance
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y+1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
elements.body.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") {
|
|
|
|
|
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]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (headpixel.element == "suited_head") {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into rotten_meat if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"rotten_meat");
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the head
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "suited_head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var head = null }
|
|
|
|
|
if (pixel.burning) {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
if (head && pixelTicks-pixel.burnStart > 240) {
|
|
|
|
|
pixel.color = head.color;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.panic > 0) {
|
|
|
|
|
pixel.panic -= 0.1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
// create blood if decapitated 10% chance
|
|
|
|
|
if (Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y-1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (head == null) { return }
|
|
|
|
|
else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
|
|
|
|
|
var movesToTry = [
|
|
|
|
|
[1*pixel.dir,0],
|
|
|
|
|
[1*pixel.dir,-1],
|
|
|
|
|
];
|
|
|
|
|
// While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
|
|
|
|
|
while (movesToTry.length > 0) {
|
|
|
|
|
var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
|
|
|
|
|
if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
|
|
|
|
|
var origx = pixel.x+move[0];
|
|
|
|
|
var origy = pixel.y+move[1];
|
|
|
|
|
if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
|
|
|
|
|
movePixel(head, head.x+move[0], head.y+move[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 15% chance to change direction
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dir *= -1;
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
|
|
|
|
}
|