Update sandboxels.js

This commit is contained in:
Nekonico 2025-03-06 20:27:21 -08:00 committed by GitHub
parent a296004d98
commit 73b98823d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 501 additions and 98 deletions

View File

@ -16,6 +16,9 @@ window.addEventListener("load", () => {
document.getElementById("elementButton-paper_screen")?.remove()
document.getElementById("elementButton-body_screen")?.remove()
document.getElementById("elementButton-head_screen")?.remove()
document.getElementById("elementButton-ash_screen")?.remove()
document.getElementById("elementButton-mud_screen")?.remove()
document.getElementById("elementButton-dirt_screen")?.remove()
document.getElementById("elementButton-bird_screen")?.remove()
document.getElementById("elementButton-fly_screen")?.remove()
document.getElementById("elementButton-rat_screen")?.remove()
@ -25,15 +28,152 @@ window.addEventListener("load", () => {
document.getElementById("elementButton-simulated_human")?.remove()
})
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);
}
}
}
}
}
}
elements.sandboxels_screen_off = {
name:"screen",
color: "#454545",
behavior: behaviors.WALL,
behaviorOn: [
"XX|XX|XX",
"XX|CH:sandboxels_screen|XX",
"XX|XX|XX",
],
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")
}
},
tempHigh: 1500,
stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
conduct: 1,
@ -50,11 +190,11 @@ elements.sandboxels_screen = {
name:"screen",
hidden:true,
color: "#1D1D1D",
behavior: [
"XX|XX|XX",
"XX|XX|XX",
"XX|XX|XX",
],
tick: function(pixel) {
if (pixel.dtemp !== 20) { pixel.dtemp = 20 }
if (pixel.charge) { pixel.charge = 0 }
},
conduct: 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","sand"],
@ -74,7 +214,7 @@ elements.simulated_heat = {
],
tool: function(pixel) {
if (elements[pixel.element].isScreen === true) {
pixel.dtemp += 1
pixel.dtemp += 2
}
},
insulate:true,
@ -92,7 +232,7 @@ elements.simulated_cool = {
],
tool: function(pixel) {
if (elements[pixel.element].isScreen === true) {
pixel.dtemp -= 1
pixel.dtemp -= 2
}
},
insulate:true,
@ -206,6 +346,7 @@ elements.sand_screen = {
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") {
@ -214,8 +355,6 @@ elements.sand_screen = {
changePixel(pixel,"sandboxels_screen");
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -229,8 +368,6 @@ elements.sand_screen = {
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -245,8 +382,6 @@ elements.sand_screen = {
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -280,6 +415,117 @@ elements.wet_sand_screen = {
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)
}
}
}
},
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)
if (!isEmpty(pixel.x,pixel.y+1,true)) {
var newPixel = pixelMap[pixel.x][pixel.y+1];
if (newPixel.element === "sandboxels_screen") {
@ -288,8 +534,6 @@ elements.wet_sand_screen = {
changePixel(pixel,"sandboxels_screen");
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -323,6 +567,7 @@ elements.rock_screen = {
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") {
@ -331,8 +576,6 @@ elements.rock_screen = {
changePixel(pixel,"sandboxels_screen");
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -346,8 +589,6 @@ elements.rock_screen = {
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -362,8 +603,6 @@ elements.rock_screen = {
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -395,7 +634,12 @@ elements.saw_screen = {
category: "simulation",
isScreen: true,
isMoving: true,
dburn: 25,
digburnTime: 150,
digburnInto: ["fire_screen","fire_screen","fire_screen","ash_screen"],
tick: function(pixel) {
screenTemp(pixel)
doScreenBurning(pixel)
if (!isEmpty(pixel.x,pixel.y+1,true)) {
var newPixel = pixelMap[pixel.x][pixel.y+1];
if (newPixel.element === "sandboxels_screen") {
@ -404,8 +648,6 @@ elements.saw_screen = {
changePixel(pixel,"sandboxels_screen");
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -419,8 +661,6 @@ elements.saw_screen = {
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -435,8 +675,6 @@ elements.saw_screen = {
}
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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
}
@ -445,7 +683,75 @@ elements.saw_screen = {
}
},
state: "solid",
density: 1200,
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,
}
elements.cellulose_screen = {
@ -469,6 +775,7 @@ elements.cellulose_screen = {
isScreen: true,
isMoving: true,
tick: function(pixel) {
screenTemp(pixel)
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") {
@ -477,8 +784,6 @@ elements.cellulose_screen = {
changePixel(pixel,"sandboxels_screen");
}
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)
}
@ -524,8 +829,6 @@ elements.cellulose_screen = {
changePixel(pixel,"sandboxels_screen");
}
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)
}
@ -539,8 +842,6 @@ elements.cellulose_screen = {
changePixel(pixel,"sandboxels_screen");
}
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)
}
@ -573,6 +874,7 @@ elements.blood_screen = {
isScreen: true,
isMoving: true,
tick: function(pixel) {
screenTemp(pixel)
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") {
@ -640,8 +942,6 @@ elements.blood_screen = {
changePixel(pixel,"sandboxels_screen");
}
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)
}
@ -659,8 +959,6 @@ elements.blood_screen = {
changePixel(pixel,"sandboxels_screen");
}
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)
}
@ -697,6 +995,7 @@ elements.water_screen = {
isScreen: true,
isMoving: true,
tick: function(pixel) {
screenTemp(pixel)
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") {
@ -705,8 +1004,6 @@ elements.water_screen = {
changePixel(pixel,"sandboxels_screen");
}
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)
}
@ -714,6 +1011,10 @@ elements.water_screen = {
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")
}
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")
@ -734,6 +1035,10 @@ elements.water_screen = {
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")
}
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")
@ -755,6 +1060,10 @@ elements.water_screen = {
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")
}
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")
@ -770,11 +1079,17 @@ elements.water_screen = {
changePixel(pixel,"sandboxels_screen");
}
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")
}
if (elements[newPixel.element].id === elements.dirt_screen.id) {
changePixel(newPixel, "mud_screen")
changePixel(pixel, "sandboxels_screen")
}
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")
@ -789,11 +1104,17 @@ elements.water_screen = {
changePixel(pixel,"sandboxels_screen");
}
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")
}
if (elements[newPixel.element].id === elements.dirt_screen.id) {
changePixel(newPixel, "mud_screen")
changePixel(pixel, "sandboxels_screen")
}
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")
@ -823,6 +1144,7 @@ elements.steam_screen = {
isScreen: true,
isMoving: true,
tick: function(pixel) {
screenTemp(pixel)
if (Math.random() > 0.5) {
pixel.dir1 = 1
}
@ -843,8 +1165,6 @@ elements.steam_screen = {
changePixel(pixel,"sandboxels_screen");
}
else if (elements[newPixel.element].isScreen === true) {
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
pixel.dtemp = newPixel.dtemp
}
}
if (pixel.dtemp < 100) { changePixel(pixel,"water_screen") }
@ -869,6 +1189,7 @@ elements.oxygen_screen = {
isScreen: true,
isMoving: true,
tick: function(pixel) {
screenTemp(pixel)
if (Math.random() > 0.5) {
pixel.dir1 = 1
}
@ -887,8 +1208,6 @@ elements.oxygen_screen = {
swapPixels(newPixel, pixel)
}
else if (elements[newPixel.element].isScreen === true) {
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
pixel.dtemp = newPixel.dtemp
}
}
},
@ -911,7 +1230,12 @@ elements.fire_screen = {
category: "simulation",
isScreen: true,
isMoving: true,
digburning: true,
digburnTime: 25,
digburnInto: "smoke_screen",
tick: function(pixel) {
screenTemp(pixel)
doScreenBurning(pixel)
if (Math.random() > 0.975) {
changePixel(pixel,"smoke_screen")
}
@ -933,8 +1257,6 @@ elements.fire_screen = {
swapPixels(newPixel, pixel)
}
else if (elements[newPixel.element].isScreen === true) {
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
pixel.dtemp = newPixel.dtemp
}
}
if (pixel.dtemp < 100) { changePixel(pixel,"smoke_screen") }
@ -959,6 +1281,7 @@ elements.smoke_screen = {
isScreen: true,
isMoving: true,
tick: function(pixel) {
screenTemp(pixel)
if (Math.random() > 0.95) {
changePixel(pixel,"sandboxels_screen")
}
@ -980,8 +1303,6 @@ elements.smoke_screen = {
swapPixels(newPixel, pixel)
}
else if (elements[newPixel.element].isScreen === true) {
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
pixel.dtemp = newPixel.dtemp
}
}
if (pixel.dtemp > 1000) { changePixel(pixel,"fire_screen") }
@ -1011,7 +1332,13 @@ elements.body_screen = {
digBreakInto: "blood_screen",
isScreen: true,
isSolid: true,
dburn: 10,
digburnTime: 250,
digburnInto: ["fire_screen","ash_screen","ash_screen"],
tick: function(pixel) {
screenTemp(pixel)
doScreenBurning(pixel)
if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") }
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)) {
@ -1135,8 +1462,6 @@ elements.body_screen = {
changePixel(pixel,"sandboxels_screen");
}
else if (elements[newPixel.element].isScreen === true) {
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
pixel.dtemp = newPixel.dtemp
}
}
},
@ -1163,7 +1488,13 @@ elements.head_screen = {
digBreakInto: "blood_screen",
isScreen: true,
isSolid: true,
dburn: 10,
digburnTime: 250,
digburnInto: ["fire_screen","ash_screen","ash_screen"],
tick: function(pixel) {
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") {
@ -1179,8 +1510,6 @@ elements.head_screen = {
}
}
else if (elements[newPixel.element].isScreen === true) {
newPixel.dtemp = ((pixel.dtemp + newPixel.dtemp) / 2)
pixel.dtemp = newPixel.dtemp
}
}
},
@ -1204,7 +1533,13 @@ elements.fly_screen = {
isScreen: true,
isMoving: true,
isSolid: true,
dburn: 95,
digburnTime: 25,
digburnInto: ["fire_screen","ash_screen","ash_screen"],
tick: function(pixel) {
screenTemp(pixel)
doScreenBurning(pixel)
if (pixel.dtemp > 100) { changePixel(pixel,"ash_screen") }
if (outOfBounds(pixel.x+(pixel.dir),pixel.y) || isEmpty(pixel.x+(pixel.dir),pixel.y)) {
if (pixel.dir === -1) {
pixel.dir = 1
@ -1219,8 +1554,6 @@ elements.fly_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 (pixel.dir === -1) {
pixel.dir = 1
}
@ -1235,8 +1568,6 @@ elements.fly_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 (pixel.dir === -1) {
pixel.dir = 1
}
@ -1268,7 +1599,13 @@ elements.bird_screen = {
isScreen: true,
isMoving: true,
isSolid: true,
dburn: 2,
digburnTime: 100,
digburnInto: ["fire_screen","ash_screen","ash_screen"],
tick: function(pixel) {
screenTemp(pixel)
doScreenBurning(pixel)
if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") }
if (outOfBounds(pixel.x+(pixel.dir),pixel.y) || isEmpty(pixel.x+(pixel.dir),pixel.y)) {
if (pixel.dir === -1) {
pixel.dir = 1
@ -1283,8 +1620,6 @@ elements.bird_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")
}
@ -1363,41 +1698,45 @@ elements.rat_screen = {
isScreen: true,
isSolid: true,
isMoving: true,
dburn: 2,
digburnTime: 100,
digburnInto: ["fire_screen","ash_screen","ash_screen"],
tick: function(pixel) {
if (!isEmpty(pixel.x,pixel.y+1,true)) {
var newPixel = pixelMap[pixel.x][pixel.y+1]
if (newPixel.element === "sandboxels_screen") {
swapPixels(newPixel,pixel);
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)
}
else if (Math.random() < 0.25 && 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].isSolid !== true && elements[newPixel.element].isMoving === true) {
swapPixels(newPixel, pixel)
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);
}
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);
}
else if (newPixel.element !== "sandboxels_screen" && newUpPixel.element === "sandboxels_screen") {
swapPixels(newUpPixel,pixel);
}
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);
}
}
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);
}
}
}
else if (Math.random() < 0.25) {
}
else if (Math.random() < 0.25) {
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];
@ -1440,6 +1779,7 @@ elements.ice_screen = {
isScreen: true,
isSolid: true,
tick: function(pixel) {
screenTemp(pixel)
if (pixel.dtemp > 5) { changePixel(pixel,"water_screen") }
},
state: "solid",
@ -1457,7 +1797,12 @@ elements.wood_screen = {
digBreakInto: "saw_screen",
isScreen: true,
isSolid: true,
dburn: 5,
digburnTime: 300,
digburnInto: ["fire_screen","ash_screen"],
tick: function(pixel) {
screenTemp(pixel)
doScreenBurning(pixel)
if (pixel.dtemp > 400) { changePixel(pixel,"fire_screen") }
},
tempHigh: 1500,
@ -1480,7 +1825,12 @@ elements.paper_screen = {
},
isScreen: true,
isSolid: true,
dburn: 70,
digburnTime: 300,
digburnInto: ["fire_screen","fire_screen","fire_screen","fire_screen","fire_screen","fire_screen","ash_screen"],
tick: function(pixel) {
screenTemp(pixel)
doScreenBurning(pixel)
if (pixel.dtemp > 248) { changePixel(pixel,"fire_screen") }
},
tempHigh: 1500,
@ -1526,6 +1876,45 @@ elements.simulated_sand = {
desc: "Use on screen to place simulated sand."
}
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."
}
elements.simulated_rock = {
color: ["#808080","#4f4f4f","#949494"],
tool: function(pixel) {
@ -1539,6 +1928,19 @@ elements.simulated_rock = {
desc: "Use on screen to place simulated sand."
}
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."
}
elements.simulated_water = {
color: "#2167ff",
tool: function(pixel) {
@ -1648,6 +2050,7 @@ elements.simulated_fire = {
tool: function(pixel) {
if (elements[pixel.element].id === elements.sandboxels_screen.id) {
changePixel(pixel,"fire_screen");
pixel.digburning = true
}
},
insulate:true,
@ -1970,9 +2373,9 @@ elements.digitalizer = {
onSelect: function() {
logMessage("Do not digitalize unregistered elements!");
},
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","sand"],
tempHigh: 600,
stateHigh: ["molten_aluminum","molten_aluminum","molten_aluminum","molten_gallium"],
breakInto: ["metal_scrap"],
tempLow: -80,
stateLow: "glass_shard",
category: "simulation",