From 73b98823d9c8c1de6996aa7c2ee894ab88ec4d6b Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Thu, 6 Mar 2025 20:27:21 -0800 Subject: [PATCH 01/32] Update sandboxels.js --- mods/sandboxels.js | 599 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 501 insertions(+), 98 deletions(-) diff --git a/mods/sandboxels.js b/mods/sandboxels.js index 72a993cd..22ca262b 100644 --- a/mods/sandboxels.js +++ b/mods/sandboxels.js @@ -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", From 2ceb926304e7fee17418913be829c54766cf1ec2 Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:23:20 -0800 Subject: [PATCH 02/32] Update true_flashbang.js --- mods/true_flashbang.js | 469 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 464 insertions(+), 5 deletions(-) diff --git a/mods/true_flashbang.js b/mods/true_flashbang.js index d30dff31..cc7c0d91 100644 --- a/mods/true_flashbang.js +++ b/mods/true_flashbang.js @@ -1,6 +1,19 @@ // by nekonico -elements.true_flashbang = { +isEven = function(num) { + if (num % 2) { + return (true) + } + else {return (false)} +} + +isOdd = function(num) { + if (num % 1) { + return (true) + } + else {return (false)} +} +elements.flashy_flashbang = { color: "#65665c", onSelect: function() { logMessage("Caution: If you have epilepsy or any similar vision issues, do not place this element for your own safety."); @@ -16,7 +29,8 @@ elements.true_flashbang = { tempHigh: 1455.5, stateHigh: "molten_steel", excludeRandom: true, - cooldown: defaultCooldown + cooldown: defaultCooldown, + maxSize: 1, } elements.flashbang_flash = { @@ -36,7 +50,7 @@ elements.flashbang_flash = { done = false; } } - if ((Math.random() < 0.75 && done) || pixel.alpha < 0.05) { + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.060784314) { deletePixel(pixel.x, pixel.y) settings.bg = "#000000"; } @@ -57,5 +71,450 @@ elements.flashbang_flash = { insulate: true, hidden: true, noMix: true, - excludeRandom: true -} \ No newline at end of file + excludeRandom: true, + cooldown: defaultCooldown, + maxSize: 1, +} + +elements.flashy_nuke = { + onSelect: function() { + logMessage("Caution: If you have epilepsy or any similar vision issues, do not place this element for your own safety."); + }, + color: "#534636", + behavior: [ + "XX|XX|XX", + "XX|XX|XX", + "M2|M1 AND EX:65>plasma,plasma,plasma,plasma,radiation,rad_steam,plasma,plasma,plasma,plasma,radiation,rad_steam,plasma,plasma,plasma,plasma,radiation,rad_steam,nuke_flash|M2", + ], + category: "weapons", + state: "solid", + density: 1500, + excludeRandom: true, + cooldown: defaultCooldown, + maxSize: 1, +} + +elements.nuke_flash = { + color: "#ffffff", + properties: { + delay: 60 + }, + tick: function(pixel) { + settings.bg = pixel.color; + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#${hex}ff${hex}` // credits to therazzler in the R74n discord for this code :3 + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.061) { + changePixel(pixel, "nuke_overflash") + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + category: "energy", + temp: 40, + tempLow: -270, + stateLow: ["liquid_light",null], + state: "gas", + category: "energy", + density: 0.00001, + ignoreAir: true, + insulate: true, + hidden: true, + noMix: true, + excludeRandom: true, + cooldown: defaultCooldown, + maxSize: 1, +} + +elements.nuke_overflash = { + color: "#00ff00", + properties: { + delay: 40 + }, + tick: function(pixel) { + settings.bg = pixel.color; + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#00${hex}00` // credits to therazzler in the R74n discord for this code :3 + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.061) { + deletePixel(pixel.x, pixel.y) + settings.bg = "#000000"; + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + category: "energy", + temp: 40, + tempLow: -270, + stateLow: ["liquid_light",null], + state: "gas", + category: "energy", + density: 0.00001, + ignoreAir: true, + insulate: true, + hidden: true, + noMix: true, + excludeRandom: true, + cooldown: defaultCooldown, + maxSize: 1, +} + +elements.flashy_h_bomb = { + onSelect: function() { + logMessage("Caution: If you have epilepsy or any similar vision issues, do not place this element for your own safety."); + }, + color: "#533636", + behavior: [ + "XX|XX|XX", + "XX|XX|XX", + "M2|M1 AND EX:90>plasma,plasma,plasma,plasma,fire,plasma,plasma,plasma,plasma,fire,plasma,plasma,plasma,plasma,fire,h_bomb_flash|M2", + ], + category: "weapons", + state: "solid", + density: 1600, + excludeRandom: true, + alias: "hydrogen bomb", + cooldown: defaultCooldown, + maxSize: 1, +} + +elements.h_bomb_flash = { + color: "#ffffff", + properties: { + delay: 30 + }, + tick: function(pixel) { + settings.bg = pixel.color; + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#ff${hex}${hex}` // credits to therazzler in the R74n discord for this code :3 + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.061) { + changePixel(pixel, "h_bomb_overflash") + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + category: "energy", + temp: 40, + tempLow: -270, + stateLow: ["liquid_light",null], + state: "gas", + category: "energy", + density: 0.00001, + ignoreAir: true, + insulate: true, + hidden: true, + noMix: true, + excludeRandom: true, + cooldown: defaultCooldown, + maxSize: 1, +} + +elements.h_bomb_overflash = { + color: "#ff0000", + properties: { + delay: 70 + }, + tick: function(pixel) { + settings.bg = pixel.color; + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#${hex}0000` // credits to therazzler in the R74n discord for this code :3 + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.061) { + deletePixel(pixel.x, pixel.y) + settings.bg = "#000000"; + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + category: "energy", + temp: 40, + tempLow: -270, + stateLow: ["liquid_light",null], + state: "gas", + category: "energy", + density: 0.00001, + ignoreAir: true, + insulate: true, + hidden: true, + noMix: true, + excludeRandom: true, + cooldown: defaultCooldown, + maxSize: 1, +} + +elements.flashy_firework = { + color: "#c44f45", + onSelect: function() { + logMessage("Caution: If you have epilepsy or any similar vision issues, do not place this element for your own safety."); + }, + tick: function(pixel) { + if ((pixel.temp > 1000 || pixel.charge) && !pixel.burning) { + pixel.burning = true; + pixel.burnStart = pixelTicks; + } + if (pixel.burning) { + if (!tryMove(pixel, pixel.x, pixel.y-1)) { + // tryMove again to the top left or top right + tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y-1); + } + if (pixelTicks-pixel.burnStart > 50 && Math.random() < 0.1) { + if (Math.random() > 0.5) { + explodeAt(pixel.x, pixel.y, 10, "fw_flash1"); + } + else if (Math.random() > 0.5) { + explodeAt(pixel.x, pixel.y, 10, "fw_flash2"); + } + else if (Math.random() > 0.5) { + explodeAt(pixel.x, pixel.y, 10, "fw_flash3"); + } + else { + explodeAt(pixel.x, pixel.y, 10, "fw_flash4"); + } + } + } + else { + if (!tryMove(pixel, pixel.x, pixel.y+1)) { + // tryMove again to the bottom left or bottom right + tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y+1); + } + } + doDefaults(pixel); + }, + burn: 90, + burnTime: 100, + properties: { burning:false }, + burning: true, + density: 2000, + conduct: 1, + state: "solid", + category: "weapons" +} + +elements.fw_flash1 = { + properties: { + delay: 5 + }, + color: ["#ff00ff","#00ffff"], + behavior: [ + "XX|XX|XX", + "XX|DL%25|M2", + "XX|M2|M1", + ], + tick: function(pixel) { + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#00${hex}${hex}` + settings.bg = pixel.color; + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.062) { + changePixel(pixel, "smoke") + settings.bg = "#000000"; + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + burning: true, + burnInto: "ash", + burnTime: 100, + fireElement: ["smoke","smoke","smoke","smoke","carbon_dioxide"], + rotatable: true, + temp: 649, + tempLow: 0, + stateLow: "carbon_dioxide", + category: "energy", + hidden: true, + state: "gas", + density: 700, + alias: "flashy firework ember" +} + +elements.fw_flash2 = { + properties: { + delay: 5 + }, + color: ["#ff00ff","#00ffff"], + behavior: [ + "XX|XX|XX", + "XX|DL%25|M2", + "XX|M2|M1", + ], + tick: function(pixel) { + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#${hex}00${hex}` + settings.bg = pixel.color; + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.062) { + changePixel(pixel, "smoke") + settings.bg = "#000000"; + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + burning: true, + burnInto: "ash", + burnTime: 100, + fireElement: ["smoke","smoke","smoke","smoke","carbon_dioxide"], + rotatable: true, + temp: 649, + tempLow: 0, + stateLow: "carbon_dioxide", + category: "energy", + hidden: true, + state: "gas", + density: 700, + alias: "flashy firework ember" +} + +elements.fw_flash3 = { + properties: { + delay: 5 + }, + color: ["#ff00ff","#00ffff"], + behavior: [ + "XX|XX|XX", + "XX|DL%25|M2", + "XX|M2|M1", + ], + tick: function(pixel) { + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#00${hex}00` + settings.bg = pixel.color; + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.062) { + changePixel(pixel, "smoke") + settings.bg = "#000000"; + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + burning: true, + burnInto: "ash", + burnTime: 100, + fireElement: ["smoke","smoke","smoke","smoke","carbon_dioxide"], + rotatable: true, + temp: 649, + tempLow: 0, + stateLow: "carbon_dioxide", + category: "energy", + hidden: true, + state: "gas", + density: 700, + alias: "flashy firework ember" +} + +elements.fw_flash4 = { + properties: { + delay: 5 + }, + color: "#ff00ff", + behavior: [ + "XX|XX|XX", + "XX|DL%25|M2", + "XX|M2|M1", + ], + tick: function(pixel) { + let hex = Math.round(255 * pixel.alpha).toString(16); + pixel.color = `#0000${hex}` + settings.bg = pixel.color; + var done = true; + if (pixel.delay) { + var delayR = pixel.delay % 1; + var delay = pixel.delay - delayR; + if (!(pixelTicks - pixel.start > (pixel.delay||1) && Math.random() < 1-delayR)) { + done = false; + } + } + if ((Math.random() < 0.75 && done) || pixel.alpha < 0.062) { + changePixel(pixel, "smoke") + settings.bg = "#000000"; + } + if (pixel.delay) { + pixel.alpha = Math.max(0,1-(pixelTicks - pixel.start)/pixel.delay) + } + doHeat(pixel); + + }, + burning: true, + burnInto: "ash", + burnTime: 100, + fireElement: ["smoke","smoke","smoke","smoke","carbon_dioxide"], + rotatable: true, + temp: 649, + tempLow: 0, + stateLow: "carbon_dioxide", + category: "energy", + hidden: true, + state: "gas", + density: 700, + alias: "flashy firework ember" +} From 9893ec9941fa0708e48199a628c5adc8f08e5c49 Mon Sep 17 00:00:00 2001 From: SquareScreamYT Date: Sat, 8 Mar 2025 16:59:32 +0800 Subject: [PATCH 03/32] a chefs dream 2.0.1 --- mods/aChefsDream2.js | 70 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/mods/aChefsDream2.js b/mods/aChefsDream2.js index 793ecd49..a5a45cf6 100644 --- a/mods/aChefsDream2.js +++ b/mods/aChefsDream2.js @@ -3,7 +3,6 @@ runAfterLoad(function() { console.log("Thanks for using aChefsDream2.js! -sqec") - console.log("You may find the prequel at aChefsDream.js") }) var mods_to_include = ["mods/aChefsDream.js"] @@ -248,6 +247,8 @@ elements.saffron = { stateHigh: ["ash", "smoke"], } +// sugarcane + elements.sugarcane_plant = { color: ["#fbc852","#dfad54"], behavior: [ @@ -324,4 +325,69 @@ elements.tea_leaves = { state: "solid", density: 1400, isFood: true, -} \ No newline at end of file +} +elements.cinnamon = { + color: "#986544", + reactions: { + "stench": { elem2:null, chance:0.25 }, + "steam": { elem2:"fragrance", chance:0.1 }, + "flea": { elem2:null, chance:0.01 }, + "termite": { elem2:null, chance:0.01 }, + "fly": { elem2:null, chance:0.01 }, + "ant": { elem2:null, chance:0.01 }, + "stink_bug": { elem2:null, chance:0.01 }, + }, + behavior: behaviors.STURDYPOWDER, + tempHigh: 300, + stateHigh: ["fire","smoke","smoke","smoke","ash"], + burn:10, + burnTime:300, + burnInto: ["fire","smoke","smoke","smoke","fragrance"], + category:"food", + state: "solid", + density: 1400, + isFood: true, + breakInto: "cinnamon_powder" +} +elements.cinnamon_powder = { + color: "#D2691E", + reactions: { + "stench": { elem2:null, chance:0.25 }, + "steam": { elem2:"fragrance", chance:0.1 }, + "flea": { elem2:null, chance:0.01 }, + "termite": { elem2:null, chance:0.01 }, + "fly": { elem2:null, chance:0.01 }, + "ant": { elem2:null, chance:0.01 }, + "stink_bug": { elem2:null, chance:0.01 }, + }, + behavior: behaviors.POWDER, + tempHigh: 300, + stateHigh: ["fire","smoke","smoke","smoke","ash"], + burn:10, + burnTime:300, + burnInto: ["fire","smoke","smoke","smoke","smoke","smoke","smoke","fragrance"], + category:"food", + state: "solid", + density: 1400, + isFood: true, +} +elements.cola_syrup = { + color: "#4f0e0e", + behavior: behaviors.LIQUID, + tempHigh: 170, + stateHigh: ["sugar","smoke","smoke"], + tempLow: -15, + category:"liquids", + state: "liquid", + viscosity: 15, + hidden: true, + density: 1400, + reactions: { + "seltzer": { elem1: ["cola_syrup", "cola_syrup", "foam"], elem2:"soda"}, + "soda": { elem1: "foam", chance:0.001}, + }, +} +if (!elements.sugar_water.reactions) elements.sugar_water.reactions = {}; +elements.sugar_water.reactions.lemon_juice = { elem1: "sugar_water", elem2: null, color1: "#fff7ba" } +if (!elements.sugar_water.reactions) elements.sugar_water.reactions = {}; +elements.sugar_water.reactions.cinnamon_powder = { elem1: "cola_syrup", elem2: null } \ No newline at end of file From dd12a1d001c7378f432932f4798e82845531e3e1 Mon Sep 17 00:00:00 2001 From: Phi Date: Sun, 9 Mar 2025 10:12:40 +0000 Subject: [PATCH 04/32] 1.9.15 - The Elemental Update Adds Basalt, Reworks Mars_Water and mars_Debris --- mods/mars.js | 158 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 102 insertions(+), 56 deletions(-) diff --git a/mods/mars.js b/mods/mars.js index 14d97a40..752bdbd1 100644 --- a/mods/mars.js +++ b/mods/mars.js @@ -8,43 +8,57 @@ elements.mars_gunk = { stain: 0.7 } elements.mars_dust = { - color: ["#ab2a20","#c53227"], - behavior: behaviors.POWDER, - category: "mars", - state: "solid", - density: 1602, - tempHigh: 500, - hardness: 0.975, - stateHigh: "molten_mars", - tempLow: -170, - stateLow: "mars_rock", + color: ["#ab2a20", "#c53227"], + behavior: behaviors.POWDER, + category: "mars", + state: "solid", + density: 1602, + tempHigh: 500, + hardness: 0.975, + stateHigh: "molten_mars", + tempLow: -170, + stateLow: "mars_rock", extraInfo: "Dust Samples from mars. Can freeze into Mars Rock.", hardness: 0.991, breakInto: "mars_debris" } +elements.mars_basalt = { + color: ["#1C1B1C", "#CECECE", "#70703d", "#828282"], + behavior: behaviors.POWDER, + category: "mars", + state: "solid", + density: 5000, + extraInfo: "Woah", + tempHigh: "molten_mars", + stateHigh: "600", + hardness: 0.7, + breakInto: ["mars_dust", "mars_rock", "mars_rock", "mars_rock", "molten_mars", "mars_debris", "mars_debris", "gunk", "mars_rock_wall"] +} elements.molten_mars = { - color: "#ffc338", - behavior: behaviors.MOLTEN, - category: "mars", - state: "liquid", - hidden: "true", + color: "#ffc338", + behavior: behaviors.MOLTEN, + category: "mars", + state: "liquid", + hidden: "true", extraInfo: "The Result of Burnt-up mars stuff. Some turn into this faster more than others.", temp: 2500, - density: 1150 + density: 1150, + tempLow: -50, + stateLow: "mars_basalt" } elements.mars_rock = { - color: ["#a51002","#bd1102"], - behavior: behaviors.STURDYPOWDER, - category: "mars", - state: "solid", - density: 1605, - tempHigh: 800, - hardness: 0.75, - stateHigh: "molten_mars", - breakInto: "mars_dust", - tempLow: -273, - stateLow: "mars_rock_wall", - extraInfo: "The Freezing of Mars Dust. Can be used for normal land." + color: ["#a51002", "#bd1102"], + behavior: behaviors.STURDYPOWDER, + category: "mars", + state: "solid", + density: 1605, + tempHigh: 800, + hardness: 0.75, + stateHigh: "molten_mars", + breakInto: "mars_dust", + tempLow: -273, + stateLow: "mars_rock_wall", + extraInfo: "The Freezing of Mars Dust. Can be used for normal land." } elements.mars_debris = { color: "#ff9999", @@ -54,32 +68,34 @@ elements.mars_debris = { density: 1605, burn: 94, burnTime: 45, - burnInto: "ash" + burnInto: "ash", + tempHigh: 0, + stateHigh: "fire" } elements.support_mars_rock = { - color: ["#a51002","#bd1102"], - behavior: behaviors.SUPPORTPOWDER, - category: "mars", - state: "solid", - density: 800, - tempHigh: 150, - hardness: 0.9, - stateHigh: "molten_mars", - breakInto: "mars_rock", - hidden: "true", - extraInfo: "Mars Rock but Support Powder." + color: ["#a51002", "#bd1102"], + behavior: behaviors.SUPPORTPOWDER, + category: "mars", + state: "solid", + density: 800, + tempHigh: 150, + hardness: 0.9, + stateHigh: "molten_mars", + breakInto: "mars_rock", + hidden: "true", + extraInfo: "Mars Rock but Support Powder." } elements.mars_rock_wall = { - color: ["#591813","#bd1102"], - behavior: behaviors.WALL, - category: "mars", - state: "solid", - density: 20, - tempHigh: 2500, - hardness: 0.35, - stateHigh: "mars_dust", - breakInto: "mars_rock", - extraInfo: "The Freezing of Mars Rock. A wall that keeps the Earthlings Away!" + color: ["#591813", "#bd1102"], + behavior: behaviors.WALL, + category: "mars", + state: "solid", + density: 20, + tempHigh: 2500, + hardness: 0.35, + stateHigh: "mars_dust", + breakInto: "mars_rock", + extraInfo: "The Freezing of Mars Rock. A wall that keeps the Earthlings Away!" } elements.mars_ironheart_ore = { color: ["#e8e8e8", "#bd1102"], @@ -108,11 +124,11 @@ elements.mars_ironheart = { reactions: { "mars_furnace": { elem1: "ironheart", elem2: "ironheart" }, "nosmoker": { elem1: "ironheart", elem2: "ironheart" }, - "ironheart": { elem1: "ironheart", elem2: "ironheart" , chance:0.1 } -}, + "ironheart": { elem1: "ironheart", elem2: "ironheart", chance: 0.1 } + }, } elements.mars_furnace = { - color: ["#870002","#870507"], + color: ["#870002", "#870507"], behavior: [ "XX|CR:mars_gunk%8|XX", "XX|XX|XX", @@ -195,7 +211,31 @@ elements.mars_water = { behavior: behaviors.LIQUID, category: "mars", state: "liquid", - density: 997 + density: 997, + tempLow: -30, + stateLow: "mars_ice", + stain: 0.05 +} +elements.mars_ice = { + color: "#f2b5c0", + behavior: behaviors.WALL, + category: "mars", + state: "solid", + density: 997, + tempHigh: 35, + stateHigh: "mars_water", + hardness: 0.5, + breakInto: "mars_water", + extraInfo: "its rock solid!" +} +elements.mars_steam = { + color: "#ffffff", + behavior: behaviors.DGAS, + category: "mars", + state: "gas", + tempLow: -100, + stateLow: "mars_water", + extraInfo: "choo choo" } elements.testy = { color: "#FFFFFF", @@ -217,8 +257,7 @@ elements.o2_tank = { stateHigh: "molten_copper", breakInto: ["copper", "oxygen"] } - -// 1.7.12 +// 1.9.15 // most elements done :D // iron heart ore // iron heart @@ -239,3 +278,10 @@ elements.o2_tank = { // O2 BE YOU // mars water // removed legacy liquid mars dust +// mars water 2 +// so like a week ago i made smelting ironheart easier +// basalt and stuff +// wow! mars ice +// and steam +// also mars_debris got updated +// they burn a lot From 7fdd917b800db78c4cd5af7545a42a4d49385e42 Mon Sep 17 00:00:00 2001 From: CO1 <107355287+Ghanisma@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:32:45 +0700 Subject: [PATCH 05/32] ASW.js Version 1.9 Adds Phosgene and Chlorophyll, delete some foods, and improves radiated elements --- mods/aScientistsWish.js | 598 +++++++++++++++------------------------- 1 file changed, 217 insertions(+), 381 deletions(-) diff --git a/mods/aScientistsWish.js b/mods/aScientistsWish.js index a955006b..0df99162 100644 --- a/mods/aScientistsWish.js +++ b/mods/aScientistsWish.js @@ -1,14 +1,8 @@ -//Hello, this is are a science mod, we're made several things that related to science, examples like...electron, particle accelerator, and of course, carbon monoxide! :D -//We made some things not scientific, so this mod is not too boring. ;) -//we're normal people, who is not as smart as a real scientist. so if you have suggestion, feedback, or criticism, please let us know, so we can make this mod being more accurate. >< -// discord account | -// | -// | -// v -// creator,leader,supervisor,coder,uploader = @carbon_monoxides6 -// co-creator,co-coder,assistant,debugger = @salmonfishy (has exited from this mod project) +//Main version +//reminder for creator: human code is on index.html line 3242. + elements.carbon_monoxide = { - color: "#b5b5b5", + color: ["#b5b5b5", "#404040", "#2b2b2b",], behavior: behaviors.GAS, behaviorOn: [ "XX|XX|XX", @@ -24,16 +18,35 @@ elements.carbon_monoxide = { tempLow: -192, stateLow: "liquid_carbon_monoxide", burntime: 5, + fireColor: ["#ff8833", "#ffad33", "#ffbe26", "#26baff", "#26e9ff", ], + burnInto: "carbon_dioxide", chance: 0.3, darkText: true, - fireColor: "#ebba34", reactions: { - "head": { elem2:"rotten_meat", chance:0.5 }, - "body": { elem2:"rotten_meat", chance:0.5 }, - "human": { elem2:"rotten_meat", chance:0.5 }, - } + "head": { elem2: "rotten_meat", chance: 0.5, }, + "body": { elem2:"rotten_meat", chance:0.5 }, + "human": { elem2:"rotten_meat", chance:0.5 }, + "worm": { elem2: "rotten_meat", chance:0.5 }, + "bee": { elem2: "dead_bug", chance: 0.5 }, + "ant": { elem2: "dead_bug", chance: 0.5 }, + "flea": { elem2: "dead_bug", chance: 0.5 }, + "spider": { elem2: "dead_bug", chance: 0.5 }, + "fly": { elem2: "dead_bug", chance: 0.5 }, + "stink_bug": { elem2: "dead_bug", chance: 0.5 }, + "bird": { elem2: "rotten_meat", chance: 0.5 }, + "frog": { elem2: "slime", chance: 0.5 }, + "rat": { elem2: ["rotten_meat", "plague"], chance: 0.5 }, + "fish": { elem2: "rotten_meat", chance: 0.5 }, + "tadpole" : { elem2: "rotten_meat", chance: 0.5 }, + "slug": { elem2: "slime", chance: 0.5 }, + "snail": { elem2: "slime", chance: 0.5 }, + "grass": { elem2: "dead_plant", chance: 0.5 }, + "plant": { elem2: "dead_plant", chance: 0.5 }, + "cactus": { elem2: "dead_plant", chance: 0.5 }, + "petal": { elem2: "dead_plant", chance: 0.5 }, + } }; elements.liquid_carbon_monoxide = { - color: "#b5b5b5", + color: ["#b5b5b5", "#404040", "#2b2b2b",], behavior: behaviors.LIQUID, category: "liquids", state: "liquid", @@ -47,7 +60,7 @@ elements.liquid_carbon_monoxide = { stateHigh: "carbon_monoxide", }; elements.ice_carbon_monoxide = { - color: "#b5b5b5", + color: ["#b5b5b5", "#404040", "#2b2b2b",], behavior: behaviors.WALL, category: "solids", state: "solid", @@ -59,8 +72,7 @@ elements.ice_carbon_monoxide = { }; elements.carbon_monoxide_detector = { behavior: behaviors.WALL, - desc: "give red light and electric when found Carbon Monoxide touch", - color: "#ffffff", + color: [ "#ffffff", "#e0e0e0", "#cccbca", ], reactions: { "carbon_monoxide": {"charge1":1}, }, @@ -75,144 +87,131 @@ elements.carbon_monoxide_detector = { darkText: true, hardness: 1, }; - -elements.electrons = { -color: "#b80606", -behavior: [ - "XX|SH|XX", // shocks (adds charge) - "SH|DL%0.25|SH", - "XX|SH|XX", -], -tick: behaviors.BOUNCY, -temp: 20, -category: "energy", -state: "gas", -density: 0.000003, -ignoreAir: true, -}; elements.gelatin = { behavior: behaviors.SOLID, category: "food", - state: "solid", - color: "#faf8ca", + state: "powder", + density: 1.2, + color: ["#ffe7b8","#fce2ac","#fcf2dc"], breakInto: "gelatin_powder", ignoreAir: true, isFood: true, + reactions: { + "water": { elem2: "jelly", }, + "pool_water": { elem2: "jelly", }, + "salt_water": { elem2: "jelly", } + } + }; elements.gelatin_powder = { behavior: behaviors.POWDER, category: "food", - state: "powder", + density: 1.2, + state: ["#ffe7b8","#fce2ac","#fcf2dc"], color: "#edeb9f", hidden: true, ignoreAir: true, isFood: true, -}; -elements.blueberries = { -behavior: behaviors.POWDER, -category: "food", -state: "solid", -color: ["#464196","#2e2b64"], -breakInto: "blueberries_juice", -ignoreAir: true, -isFood: true, -reactions: { -"sugar": { elem1: "blueberries_jam" }, -}, -}; -elements.blueberries_juice = { -behavior: behaviors.LIQUID, -category: "food", -state: "liquid", -color: "#1f1c42", -hidden: true, -tempHigh: 170, -stateHigh: ["steam","sugar"], -reactions: { -ignoreAir: true, -isFood: true, -"gelatin": { elem1: "blueberries_jelly", elem2: null }, -"gelatin_powder": { elem1: "blueberries_jelly", elem2: null }, -}, -}; -elements.blueberries_jam = { -behavior: behaviors.LIQUID, -category: "food", -viscosity: 5000, -state: "liquid", -tempHigh: 200, -stateHigh: ["smoke","sugar"], -color: "#080629", -hidden: true, -ignoreAir: true, -isFood: true, -}; -elements.blueberries_jelly = { -behavior: behaviors.LIQUID, -category: "food", -viscosity: 200000, -state: "liquid", -color: "#59559e", -hidden: true, -tempHigh: 200, -stateHigh: ["smoke","sugar"], -tempLow: -5, -stateLow: ["sugar_ice","sugar_ice","juice_ice"], -ignoreAir: true, -isFood: true, -}; + reactions: { + "water": { elem2: "jelly", }, + "pool_water": { elem2: "jelly", }, + "salt_water": { elem2: "jelly", } + } + }; elements.fallout_drum = { -behavior: behaviors.WALL, +behavior: [ + ["XX","CR:radiation%25","XX"], + ["CR:radiation%25","XX","CR:radiation%25"], + ["XX","CR:radiation%25","XX"] +], category: "radiated", state: "solid", density: 9000, color: "#e3cc34", +conduct: 1, tempHigh: 2500, stateHigh: ["aluminum","radiated_water","radiated_water","fallout"], breakInto: ["fallout","fallout"], reactions: { -"water": { elem1:"fallout_drum", elem2:"radiated_water" }, + "water": { elem1:"fallout_drum", elem2:"radiated_water" }, + "dna": { elem2: "cancer", }, + "cell": { elem2: "cancer", }, } }; elements.radiated_water = { -behavior: behaviors.LIQUID, + behavior: [ + "XX|CR:radiation%2.5|XX", + "M2 AND CR:radiation%2.5|CH:radiation%0.2|M2 AND CR:radiation%2.5", + "M1|M1|M1", + ], category: "radiated", state:"liquid", density :1300, color: ["#23d959","#29d65d"], hidden: true, tempHigh: 140, -stateHigh: "polluted_air", +conduct: 1, +stateHigh: "radiated_air", tempLow: -6, stateLow: "rad_ice", reactions: { -"human": { elem2:"rotten_meat" }, -"body": { elem2:"rotten_meat" }, -"head": { elem2:"ash" }, -"bird": { elem2:"rotten_meat"}, -"cell": { elem2:"cancer"}, -"worm": { elem2:"rotten_meat"}, + "head": { elem2: ["rotten_meat","ash","plague"], }, + "body": { elem2:"rotten_meat", }, + "human": { elem2:"rotten_meat", }, + "worm": { elem2: "rotten_meat", }, + "bee": { elem2: "dead_bug", }, + "ant": { elem2: "dead_bug", }, + "flea": { elem2: "dead_bug", }, + "spider": { elem2: "dead_bug", }, + "fly": { elem2: "dead_bug", }, + "stink_bug": { elem2: "dead_bug", }, + "bird": { elem2: "rotten_meat", }, + "frog": { elem2: "slime", }, + "rat": { elem2: ["rotten_meat", "plague"], }, + "fish": { elem2: "rotten_meat", }, + "tadpole" : { elem2: "rotten_meat", }, + "slug": { elem2: "slime", }, + "snail": { elem2: "slime", }, + "grass": { elem2: "dead_plant", }, + "plant": { elem2: "dead_plant", }, + "cactus": { elem2: "dead_plant", }, + "petal": { elem2: "dead_plant", }, + "cell": { elem2: "cancer", }, + "dna": { elem2: null, }, } }; -elements.polluted_air = { +elements.radiated_air = { behavior: behaviors.DGAS, category: "radiated", state:"gas", density :10, color: ["#60f53b","#65ba50"], reactions: { - "body": { elem2:"rotten_meat" }, - "head": { elem2:"rotten_meat" }, - "human": { elem2:"rotten_meat" }, - "bird": { elem2:"rotten_meat" }, - "cell": { elem2:"cancer" }, - "water": { elem1: null, elem2: "radiated_water" }, - "worm": { elem2: ["ash","cancer"] }, - "flea": { elem2: "ash" }, - "seed": {elem2: "dead_plant" }, - "plant": {elem1: null, chance:0.5, elem2: "dead_plant", chance:0.5 }, + "head": { elem2: ["rotten_meat","ash","plague"], }, + "body": { elem2:"rotten_meat", }, + "human": { elem2:"rotten_meat", }, + "worm": { elem2: "rotten_meat", }, + "bee": { elem2: "dead_bug", }, + "ant": { elem2: "dead_bug", }, + "flea": { elem2: "dead_bug", }, + "spider": { elem2: "dead_bug", }, + "fly": { elem2: "dead_bug", }, + "stink_bug": { elem2: "dead_bug", }, + "bird": { elem2: "rotten_meat", }, + "frog": { elem2: "slime", }, + "rat": { elem2: ["rotten_meat", "plague"], }, + "fish": { elem2: "rotten_meat", }, + "tadpole" : { elem2: "rotten_meat", }, + "slug": { elem2: "slime", }, + "snail": { elem2: "slime", }, + "grass": { elem2: "dead_plant", }, + "plant": { elem2: "dead_plant", }, + "cactus": { elem2: "dead_plant", }, + "petal": { elem2: "dead_plant", }, + "cell": { elem2: "cancer", }, + "dna": { elem2: null, }, }, }; @@ -226,7 +225,7 @@ color: "#808080", reactions: { "fallout": {"charge1":1}, "radiated_water": {"charge1":1}, - "polluted_air": {"charge1":1}, + "radiated_air": {"charge1":1}, "radiation": {"charge1":1}, "rad_snow": {"charge1":1}, "rad_rock": {"charge1":1}, @@ -234,10 +233,15 @@ reactions: { }; elements.radiated_metal = { -behavior: behaviors.WALL, + behavior: [ + ["XX","CR:radiation%25","XX"], + ["CR:radiation%25","XX","CR:radiation%25"], + ["XX","CR:radiation%25","XX"] + ], category: "radiated", state:"solid", density :2045, +conduct: 1, color: ["#5e705a","#83ab7b","#474747"], tempHigh: 1440, stateHigh: ["molten_nickel","molten_iron","molten_tin","fallout"], @@ -248,7 +252,11 @@ reactions: { }; elements.rad_ice = { -behavior: behaviors.WALL, + behavior: [ + ["XX","CR:radiation%25","XX"], + ["CR:radiation%25","XX","CR:radiation%25"], + ["XX","CR:radiation%25","XX"] + ], category: "radiated", state:"solid", density: 1905, @@ -264,7 +272,10 @@ reactions: { } elements.rad_snow = { -behavior: behaviors.POWDER, + behavior: [ + "XX|CR:radiation%2|XX", + "CR:radiation%2|XX|CR:radiation%2", + "M2|M1|M2", ], category: "radiated", state:"powder", density: 1500, @@ -275,7 +286,10 @@ stateHigh: "radiated_water", }; elements.rad_rock = { -behavior: behaviors.POWDER, +behavior: [ + "XX|CR:radiation%2|XX", + "CR:radiation%2|XX|CR:radiation%2", + "M2|M1|M2", ], category: "land", state: "powder", density: 2790, @@ -312,267 +326,14 @@ tempHigh: 1250, stateHigh: ["fallout","molten_plastic","steam"], reactions: { "radiated_water": {elem2:"water" }, - "polluted_air": {elem2: "oxygen"}, + "radiated_air": {elem2: "oxygen"}, "rad_snow": {elem2: "snow"}, "rad_rock": {elem2: "rock"}, "radiated_metal": {elem2: ["nickel","tin","iron"], }, "fallout": {elem2: "rock", }, + "radiation": { elem2: null, }, } }; - - -elements.rad_meat = { -behavior: behaviors.STURDYPOWDER, -category: "food", -state: "solid", -density: 1500, -color: ["#e8fc03","#f0b446","#92f046"], -tempHigh: 120, -stateHigh: ["rotten_meat","fallout"], -tempLow:-12, -stateLow: ["frozen_meat","radiation"], -reactions: { - "water": {elem2: "radiated_water", chance:0.4}, - "salt_water": { elem2: "radiated_water" }, -} -}; - -elements.lemon = { -behavior: behaviors.POWDER, -category: "food", -state: "powder", -density: 800, -color: ["#f9f934", "#f1ee20",], -tempHigh: 90, -stateHigh: "hot_lemon", -tempLow: -2, -stateLow: "wrinkled_lemon", -burn: 120, -burntime: 600, -burnInto: "ash", -breakInto: [ "lemon_water", "lemon_zest", ], -reactions: { - "water": { elem2: "lemon_water", chance:0.2}, - "salt_water": { elem2: [ "lemon_water", "water",] }, - "dirty_water": { elem1: "rotten_lemon", }, - "soda": { elem2: "lemon_soda", }, - "head": { elem1: "saliva", chance:0.75}, - "milk": { elem2: "lemon_milk", }, - "tea": { elem2: "lemon_tea", }, - "poison": { elem2: "rotten_lemon", }, -} -}; - -elements.hot_lemon = { -behavior: behaviors.POWDER, -state: "powder", -category: "food", -hidden: true, -density: 820, -color: ["#8a6d1e","#70661a",], -hidden: true, -temp: 90, -tempHigh: 200, -stateHigh: "fire", -tempLow: 30, -stateLow: "wrinkled_lemon", -burn: 120, -burntime: 600, -burnInto: "ash", -reactions: { - "water": { elem2: "lemon_water", }, -} -}; - -elements.wrinkled_lemon = { -behavior: behaviors.POWDER, -color: ["#999543","#a6a03a",], -state: "powder", -category: "food", -tempHigh: 90, -stateHigh: "hot_lemon", -hidden: true, -burn: 120, -burntime: 600, -burnInto: "ash", -reactions: { -"water": { elem2: "lemon_water", chance: 0.2, -} -} -}; - -elements.coolant = { -color: "#0eebeb", -behavior: [ - "XX|CO:4|XX", - "CO:4|HT:1|CO:4", - "XX|CO:4|XX", -], -category: "liquids", -state: "liquid", -insulate: true, -density: 1000, -darkText: false, -tempHigh: 500, -hidden: true, -stateHigh: "steam", -}; - -elements.arkycite = { -color: "#46ab63", -behavior: behaviors.LIQUID, -category: "liquids", -state: "liquid", -density: 997, -darkText: false, -tempHigh: 400, -hidden: true, -burn: 40, -stateHigh: "fire", -burntime: 500, -}; - -elements.lemon_water = { -color: ["#faec52","#faee69",], -behavior: behaviors.LIQUID, -category: "liquids", -state: "liquid", -density: 900, -tempHigh: 100, -stateHigh: ["steam","fragrance",], -hidden: true, -tempLow: -10, -stateLow: "lemon_ice", -reactions: { -"balloon": { elem2: "helium", chance: 0.5, }, -"head": { elem1: "saliva", chance: 0.2, }, -} -}; - -elements.lemon_zest = { -color: ["#ded254","#ccc03d",], -behavior: behaviors.POWDER, -category: "trashes", -state: "powder", -density: 1000, -hidden: true, -tempHigh: 350, -stateHigh: "fire", -breakInto: "lemon_water", -burn: 60, -burntime: 200, -burnInto: "smoke" -}; - -elements.saliva = { -color: ["#a6f5f0","#b6f0ec",], -behavior: behaviors.LIQUID, -category: "liquids", -state: "liquid", -density: 1280, -tempHigh: 105, -stateHigh: ["steam","fragrance"], -tempLow: -5, -stateHigh: "saliva_ice", -reactions: { -"water": { elem1: null, chance: 0.5, elem2: "dirty_water", chance: 0.5, -} -} -}; - -elements.lemon_milk = { -color: ["#f5f2c4","#f7f4b2",], -behavior: behaviors.LIQUID, -category: "liquids", -state: "liquid", -density: 1002, -tempHigh: 500, -stateHigh: "smoke", -tempLow: -2, -stateLow: "frozen_yogurt", -stateLowColor: ["#f5f3cb","#f7f5bc"], -reactions: { -"cell": { elem1: "yogurt", }, -} -}; - -elements.lemon_soda = { -color: ["#f5c842","#edcc68",], -behavior: behaviors.LIQUID, -category: "liquids", -state: "liquid", -density: 1240, -tempHigh: 140, -stateHigh: ["carbon_dioxide", "smoke",], -reactions: { -"poison": { elem1: null, } -} -}; - -elements.saliva_ice = { -color: ["#97fcfb","#bcf7f6",], -behavior: behaviors.SOLID, -category: "states", -state: "solid", -density: 1300, -tempHigh: 5, -stateHigh: "saliva", -}; - -elements.lemon_tea = { -color: ["#dec85b","#edd351",], -behavior: behaviors.LIQUID, -category: "liquids", -state: "liquid", -density: 1580, -tempHigh: 280, -stateHigh: ["fragrance","smoke","smoke",], -tempLow: -2, -stateLowColor: ["#e8cf8b","#f0dca5",], -stateLow: "tea_ice", -reactions: { -"sugar": { elem2: null, }, -} -}; - -elements.rotten_lemon = { -color: ["#e3f283","#cdcf6b"], -behavior: behaviors.POWDER, -category: "food", -state: "powder", -density: 1890, -tempHigh: 200, -stateHigh: ["stench","ash",], -reactions: { -"water": { elem2: "dirty_water" }, -} -}; - -elements.cow = { - color: ["#d9d9d9","#616161",], - behavior: [ - "XX|XX|XX", - "XX|FX%5.0|M2%5.0 AND BO", - "XX|M1|XX",], - category: "life", - state: "powder", - density: 2800, - tempHigh: 250, - stateHigh: "cooked_meat", - tempLow: -10, - stateLow: "frozen_meat", - reactions: { - "water": { elem2: null, chance: 0.2,}, - "milk": { elem2: null, chance: 0.1, }, - "alcohol": { elem2: null, chance: 0.21, }, - "poison": { elem1: "rotten_meat", elem2: null, }, - "grass": { elem2: null, }, - "plague": { elem1: "rotten_meat", chance: 0.3, }, - "worm": { elem2: null, }, - "flea": { elem2: null, }, - } -}; - elements.hazmat_head = { color: ["#404040","#1a1a1a","#737373"], category: "life", @@ -581,7 +342,7 @@ elements.hazmat_head = { state: "solid", conduct: .05, temp: 39, - tempHigh: 6500, + tempHigh: 3500, stateHigh: ["ash","iron",], tempLow: -180, stateLow: "frozen_meat", @@ -701,7 +462,7 @@ elements.hazmat_body = { state: "solid", conduct: .25, temp: 39, - tempHigh: 6500, + tempHigh: 3500, stateHigh: ["metal_scrap","ash"], tempLow: -180, stateLow: "frozen_meat", @@ -721,7 +482,6 @@ elements.hazmat_body = { "grass_seed": { elem2:null, chance:0.05 }, "gold_coin": { elem2:null, chance:0.05 }, "diamond": { elem2:null, chance:0.05 }, - "sun": { elem1:"molten_tin", }, }, properties: { dead: false, @@ -1092,9 +852,9 @@ elements.particle_accelerator_right = { elements.accelerated_matter_left = { color: ["#c0ecf0","#a8f8ff",], behavior: [ - "M2|XX|XX", - "M1 AND XX|XX|XX", - "M2|XX|XX", + "M2|EX:10|XX", + "M1 AND EX:10|XX|EX:10", + "M2|EX:10|XX", ], hidden: true, state: "gas", @@ -1110,9 +870,9 @@ elements.accelerated_matter_left = { elements.accelerated_matter_right = { color: ["#c0ecf0","#a8f8ff",], behavior: [ - "XX|XX|M2", - "XX|XX|M1 AND XX", - "XX|XX|M2", + "XX|EX:10|M2", + "EX:10|XX|M1 AND EX:10", + "XX|EX:10|M2", ], hidden: true, state: "gas", @@ -1126,3 +886,79 @@ elements.accelerated_matter_right = { } }; +elements.phosgene = { + color: ["#dbdbdb","#f2f2f2","#c2c2c2", ], + behavior: behaviors.GAS, + state: "gas", + category: "gases", + density: 4.25, + tempLow: 7, + stateLow: "liquid_phosgene", + tempHigh: 300, + stateHigh: ["carbon_monoxide","chlorine",], + reactions: { + "head": { elem2: "rotten_meat", chance: 0.5, }, + "body": { elem2:"rotten_meat", chance:0.5 }, + "human": { elem2:"rotten_meat", chance:0.5 }, + "worm": { elem2: "rotten_meat", chance:0.5 }, + "bee": { elem2: "dead_bug", chance: 0.5 }, + "ant": { elem2: "dead_bug", chance: 0.5 }, + "flea": { elem2: "dead_bug", chance: 0.5 }, + "spider": { elem2: "dead_bug", chance: 0.5 }, + "fly": { elem2: "dead_bug", chance: 0.5 }, + "stink_bug": { elem2: "dead_bug", chance: 0.5 }, + "bird": { elem2: "rotten_meat", chance: 0.5 }, + "frog": { elem2: "slime", chance: 0.5 }, + "rat": { elem2: ["rotten_meat", "plague"], chance: 0.5 }, + "fish": { elem2: "rotten_meat", chance: 0.5 }, + "tadpole" : { elem2: "rotten_meat", chance: 0.5 }, + "slug": { elem2: "slime", chance: 0.5 }, + "snail": { elem2: "slime", chance: 0.5 }, + "grass": { elem2: "dead_plant", chance: 0.5 }, + "plant": { elem2: "dead_plant", chance: 0.5 }, + "cactus": { elem2: "dead_plant", chance: 0.5 }, + "petal": { elem2: "dead_plant", chance: 0.5 }, + "water": { elem2: ["acid", "carbon_dioxide",] }, + "salt_water": { elem2: ["acid", "carbon_dioxide",] }, +} +} +elements.liquid_phosgene = { + color: ["#dbdbdb","#f2f2f2","#c2c2c2", ], + behavior: behaviors.LIQUID, + state: "liquid", + category: "states", + density: 7.50, + tempLow: -118, + temp: -10, + stateLow: "solid_phosgene", + tempHigh: 8, + stateHigh: "phosgene", +} +elements.solid_phosgene = { + color: ["#dbdbdb","#f2f2f2","#c2c2c2", ], + behavior: behaviors.WALL, + state: "solid", + category: "states", + density: 12.45, + temp: -150, + tempHigh: -117, + stateHigh: "liquid_phosgene", +} +elements.chlorophyll = { + color: ["#208556","#2fa16b"], + behavior: behaviors.POWDER, + state: "powder", + category: "powders", + density: 1.1, + tempHigh: 250, + stateHigh: "carbon_dioxide", + burn: 10, + burnTime: 500, + burnInto: "carbon_dioxide", + tempLow: -114, + stateLow: "dead_plant", + reactions: { + "light": { elem1: null, chance: 0.2, elem2: null, chance: 0.2, }, + "acid": { elem1: ["magnesium"], } + } +} From 6ab561d49044d5d4f1cd0d13ccde05fbd5840324 Mon Sep 17 00:00:00 2001 From: Suss <167750109+therealsuss@users.noreply.github.com> Date: Sat, 15 Mar 2025 09:29:16 +1100 Subject: [PATCH 06/32] baby mod goo goo ga ga --- mods/baby.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 mods/baby.js diff --git a/mods/baby.js b/mods/baby.js new file mode 100644 index 00000000..1c03a688 --- /dev/null +++ b/mods/baby.js @@ -0,0 +1,65 @@ +// mod by suss +// this took me a tiny bit to make +// also, why are you even reading the comments unless you’re viewing the pr or smth +// guh + +elements.baby = { + color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], + behavior: [ + "XX|XX|XX", + "M2%3|XX|M2%3", + "XX|M1|XX", +], + category: "life", + breakInto: ["meat", "meat", "blood"], + state: "solid", + tempHigh: 120, + tempLow: -20, + stateHigh: "ash_baby", + stateLow: "frozen_meat", + density: 1050, + reactions: { + "infection": {func: function(pixel1, pixel2){pixel2.element = "coughing_baby"}}, + "cancer": {func: function(pixel1, pixel2){pixel2.element = "coughing_baby"}}, + "plague": {func: function(pixel1, pixel2){pixel2.element = "coughing_baby"}}, + "magical_growth_stuff_that_sometimes_also_changes_the_humans_race": { "elem1":null, "elem2":"human" }, + "milk": { "elem2":null } + } +}; +// hydrogen bomb versus coughing baby +elements.coughing_baby = { + color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], + behavior: [ + "XX|XX|XX", + "M2%3|EX:10>infection,plague,cancer%0.1|M2%3", + "XX|M1|XX", +], + category: "life", + breakInto: ["meat", "blood", "blood", "meat", "meat", "infection", "plague", "cancer"], + state: "solid", + density: 1050, + hidden: true, + reactions: { + "antibody": {func: function(pixel1, pixel2){pixel2.element = "baby"}}, + "magical_growth_stuff_that_sometimes_also_changes_the_humans_race": { "elem1":null, "elem2":"explosion" } + } +}; + +elements.magical_growth_stuff_that_sometimes_also_changes_the_humans_race = { + color: ["#b5ffe1","#93e5ab","#65b981","d8f3dc"], + behavior: behaviors.POWDER, + category: "life", + density: 6969, + state: "solid", +}; +// peak +elements.ash_baby = { + color: "#333333", + behavior: behaviors.POWDER, + state: "solid", + tempHigh: 121, + stateHigh: "ash", + category: "life", + density: 1050, + hidden: true, +}; \ No newline at end of file From 175c0045046d21b6e845f4cd5e99859fdaea3bcb Mon Sep 17 00:00:00 2001 From: Suss <167750109+therealsuss@users.noreply.github.com> Date: Sat, 15 Mar 2025 09:32:57 +1100 Subject: [PATCH 07/32] mod list update ye --- mod-list.html | 1 + 1 file changed, 1 insertion(+) diff --git a/mod-list.html b/mod-list.html index 3424c33a..8acecd08 100644 --- a/mod-list.html +++ b/mod-list.html @@ -287,6 +287,7 @@ Life & Nature apioforms_pre.jsAn incomplete implementation of elements from the Apioform GameAlice +baby.jsAdds babies. That's literally itSuss bacteria_mod.jsAdds content from the Bacterium Mod: (Bacteria, Replacer B., Jammer Block)Alice bananas.jsAdds bananas and banana plantsAlice biology.jsAdds various elements and functions that let you build your own organism.Nekonico From 4a300954137bd06c77d8feb6f130002a4ab18456 Mon Sep 17 00:00:00 2001 From: MicaelNotUsed Date: Fri, 14 Mar 2025 21:25:10 -0300 Subject: [PATCH 08/32] Stainless steel Adds a stainless steel element and a way to get it. --- mods/stainless_steel.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 mods/stainless_steel.js diff --git a/mods/stainless_steel.js b/mods/stainless_steel.js new file mode 100644 index 00000000..d91bb64c --- /dev/null +++ b/mods/stainless_steel.js @@ -0,0 +1,37 @@ +// obtaining chromium (makes chrome) +elements.magma.stateLow = ["rock", "basalt", "basalt", "basalt", "chromite"]; + +// chrome +elements.chromite = { + color: ["#372d38", "#6e6e6e"], + behavior: behaviors.POWDER, + state: "solid", + category: "powders", + tempHigh: 2180, + stateHigh: "magma", +}; + +// stainless steel +elements.stainless_steel = { + color: "#454545", + behavior: behaviors.WALL, + state: "solid", + category: "solids", + tempHigh: 1510, +}; + +// chrome +elements.chrome = { + color: "#c4c4c4", + behavior: behaviors.WALL, + state: "solid", + category: "solids", + tempHigh: 1900, + reactions: { + "molten_steel": { elem2:"molten_stainless_steel", tempMin:1800, tempMax:2000 } + }, + alias: "chromium", +}; + +// obtaining chrome (makes stainless steel) +elements.molten_aluminum.reactions.chromite = { elem2:"chrome", tempMin:1000, tempMax:1200, chance:0.1 }; \ No newline at end of file From 77849690723586064cb96f596d7ffe1eb3ff32a1 Mon Sep 17 00:00:00 2001 From: slweeb <91897291+slweeb@users.noreply.github.com> Date: Fri, 14 Mar 2025 20:36:22 -0400 Subject: [PATCH 09/32] Update mod-list.html --- mod-list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod-list.html b/mod-list.html index 8acecd08..c4c8c2be 100644 --- a/mod-list.html +++ b/mod-list.html @@ -287,7 +287,7 @@ Life & Nature apioforms_pre.jsAn incomplete implementation of elements from the Apioform GameAlice -baby.jsAdds babies. That's literally itSuss +baby.jsAdds various babiesSuss bacteria_mod.jsAdds content from the Bacterium Mod: (Bacteria, Replacer B., Jammer Block)Alice bananas.jsAdds bananas and banana plantsAlice biology.jsAdds various elements and functions that let you build your own organism.Nekonico From e9b73167e45f1db49a207ab3566f2be1625ed2fc Mon Sep 17 00:00:00 2001 From: Phi Date: Sat, 15 Mar 2025 16:21:52 +0000 Subject: [PATCH 10/32] Update mars.js power --- mods/mars.js | 124 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 114 insertions(+), 10 deletions(-) diff --git a/mods/mars.js b/mods/mars.js index 752bdbd1..cd33c235 100644 --- a/mods/mars.js +++ b/mods/mars.js @@ -2,7 +2,7 @@ elements.mars_gunk = { color: "#121212", behavior: behaviors.DGAS, - category: "archived", + category: "mars", state: "gases", extraInfo: "GUNK", stain: 0.7 @@ -70,7 +70,8 @@ elements.mars_debris = { burnTime: 45, burnInto: "ash", tempHigh: 0, - stateHigh: "fire" + stateHigh: "fire", + temp: -0.875 } elements.support_mars_rock = { color: ["#a51002", "#bd1102"], @@ -156,15 +157,18 @@ elements.nosmoker = { elements.ironheart = { color: "#e9825a", behavior: [ - "SA|XX|SA|", "XX|XX|XX|", - "M1|M1|M1|", + "XX|XX|XX|", + "M2|M1|M2|", ], category: "mars", density: 1450, state: "solid", stateHigh: "molten_mars", - extraInfo: "Very Sturdy." + extraInfo: "Very Sturdy.", + reactions: { + "electric": { elem1: "smint", elem2: "null" }, + }, } elements.antigunk = { color: "#cecece", @@ -214,7 +218,30 @@ elements.mars_water = { density: 997, tempLow: -30, stateLow: "mars_ice", - stain: 0.05 + stain: 0.05, + tempHigh: 300, + stateHigh: "mars_steam", + temp: 10 +} +elements.mars_coal = { + color: "#290407", + behavior: [ + "XX|CR:mars_gunk%1|XX", + "XX|XX|XX", + "M1|XX|M1", + ], + category: "mars", + state: "solid", + density: 997, + tempLow: -30, + stateLow: "mars_basalt", + stain: 0.3, + tempHigh: 300, + stateHigh: "molten_mars", + temp: 10, + reactions: { + "electric": { elem2: "useless", chance: 0.01 }, + } } elements.mars_ice = { color: "#f2b5c0", @@ -226,7 +253,16 @@ elements.mars_ice = { stateHigh: "mars_water", hardness: 0.5, breakInto: "mars_water", - extraInfo: "its rock solid!" + extraInfo: "its rock solid!", + temp: 0 +} +elements.smint = { + color: "#EFC905", + behavior: behaviors.SELFDELETE, + category: "archived", + state: "gas", + extraInfo: "boo", + temp: 0 } elements.mars_steam = { color: "#ffffff", @@ -235,7 +271,8 @@ elements.mars_steam = { state: "gas", tempLow: -100, stateLow: "mars_water", - extraInfo: "choo choo" + extraInfo: "choo choo", + temp: 500 } elements.testy = { color: "#FFFFFF", @@ -244,10 +281,11 @@ elements.testy = { state: "solid", extraInfo: "Don't mind me, just a test. Removed 06/02/25?" } + elements.o2_tank = { color: "#98F5F9", behavior: [ - "CR:oxygen%3|XX|XX", + "CR:oxygen%2|XX|XX", "XX|XX|XX", "XX|XX|XX", ], @@ -257,7 +295,66 @@ elements.o2_tank = { stateHigh: "molten_copper", breakInto: ["copper", "oxygen"] } -// 1.9.15 +elements.solar_core = { + color: "#FFDE59", + behavior: [ + "XX|CH:light>electric%50|XX", + "XX|XX|XX", + "XX|XX|XX", + ], + category: "cores", + state: "solid", + tempHigh: "600", + stateHigh: "molten_zinc", + breakInto: "zinc", + conduct: 1, + extraInfo: "Not The Best Option, but the easiest." +} +elements.hydro_core = { + color: "#17A4A9", + behavior: [ + "XX|CH:mars_water>electric%75|XX", + "XX|XX|XX", + "XX|XX|XX", + ], + category: "cores", + state: "solid", + tempHigh: "600", + stateHigh: "molten_zinc", + breakInto: "zinc", + conduct: 1 +} +elements.coal_core = { + color: "#FFA4A9", + behavior: [ + "XX||CH:mars_coal>electric%3|XX", + "XX|XX|XX", + "XX|XX|XX", + ], + category: "cores", + state: "solid", + tempHigh: "600", + stateHigh: "molten_zinc", + breakInto: "zinc", + conduct: 1, + extraInfo: "Put In some Coal and watch the battery drain." +} +elements.ironheart_core = { + color: "#FFA4A9", + behavior: [ + "XX||CH:ironheart>electric%0.5|", + "XX|XX|XX", + "XX|XX|XX", + ], + category: "cores", + state: "solid", + tempHigh: "800", + stateHigh: "molten_zinc", + breakInto: "zinc", + conduct: 1, + extraInfo: "wha" +} +// 2.9.17.1 // most elements done :D // iron heart ore // iron heart @@ -285,3 +382,10 @@ elements.o2_tank = { // and steam // also mars_debris got updated // they burn a lot +// added cores that emit electricity +// its like plants +// dumbed down ironheart a bit, im thinking about its behaviour + + +// Creditssss +// Ghanisma - idea for 2.9.16 From 12f0fa1908434dbfaff98eeaf3cf4a86f68d8650 Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Sat, 15 Mar 2025 12:17:28 -0700 Subject: [PATCH 11/32] Update sandboxels.js --- mods/sandboxels.js | 269 ++++++++++++--------------------------------- 1 file changed, 69 insertions(+), 200 deletions(-) diff --git a/mods/sandboxels.js b/mods/sandboxels.js index 22ca262b..714cf5f0 100644 --- a/mods/sandboxels.js +++ b/mods/sandboxels.js @@ -1,4 +1,4 @@ -/* mod by nekonico */ +// mod by nekonico window.addEventListener("load", () => { document.getElementById("elementButton-sandboxels_screen")?.remove() @@ -10,7 +10,7 @@ window.addEventListener("load", () => { 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-sawdust_screen")?.remove() document.getElementById("elementButton-cellulose_screen")?.remove() document.getElementById("elementButton-blood_screen")?.remove() document.getElementById("elementButton-paper_screen")?.remove() @@ -170,7 +170,7 @@ elements.sandboxels_screen_off = { tick: function(pixel) { if (pixel.dtemp !== 20) { pixel.dtemp = 20 } if (pixel.charge) { pixel.charges = pixelTicks } - if (pixelTicks - 10 > pixel.charges) { + if (pixelTicks - 1 > pixel.charges) { changePixel(pixel,"sandboxels_screen") } }, @@ -190,6 +190,7 @@ elements.sandboxels_screen = { name:"screen", hidden:true, color: "#1D1D1D", + behavior: behaviors.WALL, tick: function(pixel) { if (pixel.dtemp !== 20) { pixel.dtemp = 20 } if (pixel.charge) { pixel.charge = 0 } @@ -308,12 +309,14 @@ elements.simulated_human = { 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"; + newPixel.dir = 1 pixel.element = "head_screen"; } 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"; + pixel.dir = 1 } else { changePixel(pixel, "sandboxels_screen"); @@ -614,7 +617,7 @@ elements.rock_screen = { density: 2550, } -elements.saw_screen = { +elements.sawdust_screen = { name:"screen", hidden:true, color: ["#dec150","#c7b15a"], @@ -638,6 +641,7 @@ elements.saw_screen = { digburnTime: 150, digburnInto: ["fire_screen","fire_screen","fire_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 400) { changePixel(pixel,"fire_screen") } screenTemp(pixel) doScreenBurning(pixel) if (!isEmpty(pixel.x,pixel.y+1,true)) { @@ -775,6 +779,7 @@ elements.cellulose_screen = { isScreen: true, isMoving: true, tick: function(pixel) { + if (pixel.dtemp > 99) { changePixel(pixel,"paper_screen") } screenTemp(pixel) if (Math.random() > 0.2 && !isEmpty(pixel.x,pixel.y+1,true)) { var newPixel = pixelMap[pixel.x][pixel.y+1]; @@ -847,7 +852,6 @@ elements.cellulose_screen = { } } } - if (pixel.dtemp > 99) { changePixel(pixel,"paper_screen") } }, state: "solid", density: 1500, @@ -874,6 +878,7 @@ elements.blood_screen = { isScreen: true, isMoving: true, tick: function(pixel) { + if (pixel.dtemp > 99) { changePixel(pixel,"steam_screen") } screenTemp(pixel) if (Math.random() > 0.2 && !isEmpty(pixel.x,pixel.y+1,true)) { var newPixel = pixelMap[pixel.x][pixel.y+1]; @@ -968,7 +973,6 @@ elements.blood_screen = { } } } - if (pixel.dtemp > 99) { changePixel(pixel,"steam_screen") } }, state: "solid", density: 1060, @@ -995,6 +999,8 @@ elements.water_screen = { isScreen: true, isMoving: true, tick: function(pixel) { + if (pixel.dtemp < 0) { changePixel(pixel,"ice_screen") } + if (pixel.dtemp > 99) { changePixel(pixel,"steam_screen") } screenTemp(pixel) if (Math.random() > 0.2 && !isEmpty(pixel.x,pixel.y+1,true)) { var newPixel = pixelMap[pixel.x][pixel.y+1]; @@ -1015,7 +1021,7 @@ elements.water_screen = { 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) { + if (elements[newPixel.element].id === elements.sawdust_screen.id || elements[newPixel.element].id === elements.paper_screen.id) { changePixel(newPixel, "cellulose_screen") changePixel(pixel, "sandboxels_screen") } @@ -1039,7 +1045,7 @@ elements.water_screen = { 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) { + if (elements[newPixel.element].id === elements.sawdust_screen.id || elements[newPixel.element].id === elements.paper_screen.id) { changePixel(newPixel, "cellulose_screen") changePixel(pixel, "sandboxels_screen") } @@ -1064,7 +1070,7 @@ elements.water_screen = { 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) { + if (elements[newPixel.element].id === elements.sawdust_screen.id || elements[newPixel.element].id === elements.paper_screen.id) { changePixel(newPixel, "cellulose_screen") changePixel(pixel, "sandboxels_screen") } @@ -1090,7 +1096,7 @@ elements.water_screen = { 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) { + if (elements[newPixel.element].id === elements.sawdust_screen.id || elements[newPixel.element].id === elements.paper_screen.id) { changePixel(newPixel, "cellulose_screen") changePixel(pixel, "sandboxels_screen") } @@ -1115,14 +1121,12 @@ elements.water_screen = { 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) { + if (elements[newPixel.element].id === elements.sawdust_screen.id || elements[newPixel.element].id === elements.paper_screen.id) { changePixel(newPixel, "cellulose_screen") changePixel(pixel, "sandboxels_screen") } } } - if (pixel.dtemp < 0) { changePixel(pixel,"ice_screen") } - if (pixel.dtemp > 99) { changePixel(pixel,"steam_screen") } }, state: "solid", density: 997, @@ -1144,6 +1148,7 @@ elements.steam_screen = { isScreen: true, isMoving: true, tick: function(pixel) { + if (pixel.dtemp < 100) { changePixel(pixel,"water_screen") } screenTemp(pixel) if (Math.random() > 0.5) { pixel.dir1 = 1 @@ -1167,7 +1172,6 @@ elements.steam_screen = { else if (elements[newPixel.element].isScreen === true) { } } - if (pixel.dtemp < 100) { changePixel(pixel,"water_screen") } }, state: "solid", density: 0.6, @@ -1234,6 +1238,7 @@ elements.fire_screen = { digburnTime: 25, digburnInto: "smoke_screen", tick: function(pixel) { + if (pixel.dtemp < 100) { changePixel(pixel,"smoke_screen") } screenTemp(pixel) doScreenBurning(pixel) if (Math.random() > 0.975) { @@ -1259,7 +1264,6 @@ elements.fire_screen = { else if (elements[newPixel.element].isScreen === true) { } } - if (pixel.dtemp < 100) { changePixel(pixel,"smoke_screen") } }, state: "solid", density: 0.1, @@ -1281,6 +1285,7 @@ elements.smoke_screen = { isScreen: true, isMoving: true, tick: function(pixel) { + if (pixel.dtemp > 1000) { changePixel(pixel,"fire_screen") } screenTemp(pixel) if (Math.random() > 0.95) { changePixel(pixel,"sandboxels_screen") @@ -1305,7 +1310,6 @@ elements.smoke_screen = { else if (elements[newPixel.element].isScreen === true) { } } - if (pixel.dtemp > 1000) { changePixel(pixel,"fire_screen") } }, state: "solid", density: 1.292, @@ -1315,13 +1319,10 @@ elements.body_screen = { color: ["#A8A7AB","#878689"], name:"screen", hidden:true, - behavior: [ - "XX|CH:sandboxels_screen>blood_screen%0.1|XX", - "XX|XX|XX", - "XX|XX|XX", - ], + behavior: behaviors.WALL, properties: { dtemp: 20, + dir: 1, }, tempHigh: 1500, stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"], @@ -1336,130 +1337,60 @@ elements.body_screen = { digburnTime: 250, digburnInto: ["fire_screen","ash_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") } 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 (Math.random() > 0.9) { + pixel.dir *= -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 + swapPixels(headPixel, pixel) + swapPixels(newPixel, pixel) } 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 (Math.random() < 0.5 && !isEmpty(pixel.x+pixel.dir,pixel.y,true) && !isEmpty(pixel.x+pixel.dir,pixel.y-1,true)) { + var newPixel = pixelMap[pixel.x+pixel.dir][pixel.y]; + var newHeadPixel = pixelMap[pixel.x+pixel.dir][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; + swapPixels(newPixel, pixel) + swapPixels(headPixel, newHeadPixel) } 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; + swapPixels(newPixel2, pixel) + swapPixels(headPixel, newHeadPixel2) } } } } } - 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]; + else if (Math.random() < 0.5 && !isEmpty(pixel.x+pixel.dir,pixel.y,true) && !isEmpty(pixel.x+pixel.dir,pixel.y-1,true)) { + var newPixel = pixelMap[pixel.x+pixel.dir][pixel.y]; + var newHeadPixel = pixelMap[pixel.x+pixel.dir][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; + swapPixels(newPixel, pixel) + swapPixels(headPixel, newHeadPixel) } 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; + swapPixels(newPixel2, pixel) + swapPixels(headPixel, newHeadPixel2) } } } - 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)) { var newPixel = pixelMap[pixel.x][pixel.y+1]; if (newPixel.element === "sandboxels_screen") { - changePixel(newPixel,"body_screen"); - newPixel.dtemp = pixel.dtemp; - changePixel(pixel,"sandboxels_screen"); + swapPixels(newPixel, pixel) } else if (elements[newPixel.element].isScreen === true) { } @@ -1471,11 +1402,7 @@ elements.head_screen = { color: ["#46433F","#47443C","#4D483D"], name:"screen", hidden:true, - behavior: [ - "XX|XX|XX", - "XX|XX|XX", - "XX|XX|XX", - ], + behavior: behaviors.WALL, properties: { dtemp: 20, }, @@ -1492,9 +1419,9 @@ elements.head_screen = { digburnTime: 250, digburnInto: ["fire_screen","ash_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") } 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") { @@ -1537,9 +1464,9 @@ elements.fly_screen = { digburnTime: 25, digburnInto: ["fire_screen","ash_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 100) { changePixel(pixel,"ash_screen") } 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 @@ -1603,9 +1530,9 @@ elements.bird_screen = { digburnTime: 100, digburnInto: ["fire_screen","ash_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") } 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 @@ -1702,9 +1629,9 @@ elements.rat_screen = { digburnTime: 100, digburnInto: ["fire_screen","ash_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 300) { changePixel(pixel,"ash_screen") } 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") { @@ -1779,8 +1706,8 @@ elements.ice_screen = { isScreen: true, isSolid: true, tick: function(pixel) { - screenTemp(pixel) if (pixel.dtemp > 5) { changePixel(pixel,"water_screen") } + screenTemp(pixel) }, state: "solid", density: 1200, @@ -1794,16 +1721,16 @@ elements.wood_screen = { properties: { dtemp: 20, }, - digBreakInto: "saw_screen", + digBreakInto: "sawdust_screen", isScreen: true, isSolid: true, dburn: 5, digburnTime: 300, digburnInto: ["fire_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 400) { changePixel(pixel,"fire_screen") } screenTemp(pixel) doScreenBurning(pixel) - if (pixel.dtemp > 400) { changePixel(pixel,"fire_screen") } }, tempHigh: 1500, stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"], @@ -1829,9 +1756,9 @@ elements.paper_screen = { digburnTime: 300, digburnInto: ["fire_screen","fire_screen","fire_screen","fire_screen","fire_screen","fire_screen","ash_screen"], tick: function(pixel) { + if (pixel.dtemp > 248) { changePixel(pixel,"fire_screen") } screenTemp(pixel) doScreenBurning(pixel) - if (pixel.dtemp > 248) { changePixel(pixel,"fire_screen") } }, tempHigh: 1500, stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"], @@ -2076,7 +2003,7 @@ elements.simulated_sawdust = { color: ["#dec150","#c7b15a"], tool: function(pixel) { if (elements[pixel.element].id === elements.sandboxels_screen.id) { - changePixel(pixel,"saw_screen"); + changePixel(pixel,"sawdust_screen"); } }, insulate:true, @@ -2384,89 +2311,31 @@ elements.digitalizer = { 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") { + var newElement = newPixel.element + var newElementName = `${newElement}_screen` + if (newElement === "body") { changePixel(screen,"blood_screen"); deletePixel(newPixel.x,newPixel.y) } - else if (newPixel.element === "body") { + else if (newElement === "head") { 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") { + else if (!isEmpty(pixel.x,pixel.y-2,true) && newElement === "suited_body") { var headPixel = pixelMap[pixel.x][pixel.y-2]; - if (headPixel.element === "suited_head" && newPixel.element === "suited_body") { + if (headPixel.element === "suited_head" && newElement === "suited_body") { changePixel(screen,"simulated_human"); deletePixel(newPixel.x,newPixel.y-1) deletePixel(newPixel.x,newPixel.y) } + else { + changePixel(screen,"blood_screen"); + deletePixel(newPixel.x,newPixel.y) + } + } + else if (elements[newElementName]) { + changePixel(screen,newElementName); + deletePixel(newPixel.x,newPixel.y) } else { changePixel(screen,"malware"); @@ -2482,7 +2351,7 @@ elements.digitalizer = { if (!elements.malware.reactions) { elements.malware.reactions = {} } 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.sawdust_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"] }; elements.malware.reactions.cellulose_screen = { "elem2": ["blood_screen","blood_screen","sandboxels_screen_off","malware"] }; @@ -2492,7 +2361,7 @@ if (!elements.malware.reactions) { elements.malware.reactions = {} } 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"] }; + elements.malware.reactions.wall_screen = { "elem2": ["sawdust_screen","sawdust_screen","sandboxels_screen_off","malware"] }; elements.head.tick = function(pixel) { doHeat(pixel); From c1b0b1957ae911eebab5f6d76d83a0c3a6da0e72 Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Sat, 15 Mar 2025 12:17:59 -0700 Subject: [PATCH 12/32] Update debrisable.js --- mods/debrisable.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/mods/debrisable.js b/mods/debrisable.js index da9ae4fd..bf9ade73 100644 --- a/mods/debrisable.js +++ b/mods/debrisable.js @@ -125,7 +125,7 @@ elements.microplastic_water = { "mudstone": { elem2: ["mud","mud","clay"], chance: 0.00035 }, "glass_shard": { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.0005 }, "rad_shard": { elem2: "glass_pebble", color2:"#AECB83", chance: 0.00025 }, - "glass": { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.00005 }, + "glass": { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.0000025 }, "rad_glass": { elem2: "glass_pebble", color2:"#AECB83", chance: 0.000025 }, "rust": { elem1:"dirty_water", elem2: "rust_dust", chance: 0.0025 }, "plastic": { elem2: ["microplastic",null,null], chance: 0.00005 }, @@ -186,6 +186,7 @@ elements.silver_debris = { color: "#cacaca", behavior: behaviors.SUPPORT, tempHigh: 961.8, + stateHigh: "molten_silver", category: "powders", density: 9297, conduct: 0.99, @@ -216,6 +217,7 @@ elements.iron_debris = { }, breakInto: "iron_dust", tempHigh: 1538, + stateHigh: "molten_iron", category: "powders", density: 7660, conduct: 0.47, @@ -248,6 +250,7 @@ elements.steel_debris = { }, breakInto: "iron_debris", tempHigh: 1455.5, + stateHigh: "molten_steel", category: "powders", density: 7750, conduct: 0.42, @@ -1060,7 +1063,7 @@ elements.water.reactions.glass_shard = { elem2: "glass_pebble", color2:"#7BAECB" elements.water.reactions.rad_shard = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.00025 } -elements.water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.00005 } +elements.water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.0000025 } elements.water.reactions.rad_glass = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.000025 } @@ -1068,7 +1071,7 @@ elements.water.reactions.rust = { elem1:"dirty_water", elem2: "rust_dust", chanc elements.water.reactions.rust_dust = { elem1:"dirty_water", chance: 0.0025 } -elements.water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.00005 } +elements.water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.000005 } elements.salt_water.reactions.mudstone = { elem2: ["mud","mud","clay"], chance: 0.00035 } @@ -1076,7 +1079,7 @@ elements.salt_water.reactions.glass_shard = { elem2: "glass_pebble", color2:"#7B elements.salt_water.reactions.rad_shard = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.00025 } -elements.salt_water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.00005 } +elements.salt_water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.0000025 } elements.salt_water.reactions.rad_glass = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.000025 } @@ -1084,7 +1087,7 @@ elements.salt_water.reactions.rust = { elem1:"dirty_water", elem2: "rust_dust", elements.salt_water.reactions.rust_dust = { elem1:"dirty_water", chance: 0.0025 } -elements.salt_water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.00005 } +elements.salt_water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.000005 } elements.sugar_water.reactions.mudstone = { elem2: ["mud","mud","clay"], chance: 0.00035 } @@ -1092,7 +1095,7 @@ elements.sugar_water.reactions.glass_shard = { elem2: "glass_pebble", color2:"#7 elements.sugar_water.reactions.rad_shard = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.00025 } -elements.sugar_water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.00005 } +elements.sugar_water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.0000025 } elements.sugar_water.reactions.rad_glass = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.000025 } @@ -1100,7 +1103,7 @@ elements.sugar_water.reactions.rust = { elem1:"dirty_water", elem2: "rust_dust", elements.sugar_water.reactions.rust_dust = { elem1:"dirty_water", chance: 0.0025 } -elements.sugar_water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.00005 } +elements.sugar_water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.000005 } elements.dirty_water.reactions.mudstone = { elem2: ["mud","mud","clay"], chance: 0.00035 } @@ -1108,13 +1111,13 @@ elements.dirty_water.reactions.glass_shard = { elem2: "glass_pebble", color2:"#7 elements.dirty_water.reactions.rad_shard = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.00025 } -elements.dirty_water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.00005 } +elements.dirty_water.reactions.glass = { elem2: "glass_pebble", color2:"#7BAECB", chance: 0.0000025 } elements.dirty_water.reactions.rad_glass = { elem2: "glass_pebble", color2:"#AECB83", chance: 0.000025 } elements.dirty_water.reactions.rust = { elem1:"dirty_water", elem2: "rust_dust", chance: 0.0025 } -elements.dirty_water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.00005 } +elements.dirty_water.reactions.plastic = { elem1: "microplastic_water", elem2: ["microplastic",null,null], chance: 0.000005 } elements.smash.tool = function(pixel) { let old = pixel.element; From ae76a7c9a98749f56db9de731bb0ff2b5b94b2f6 Mon Sep 17 00:00:00 2001 From: MicaelNotUsed Date: Sun, 16 Mar 2025 01:02:28 -0300 Subject: [PATCH 13/32] Updating Stainless Steel so u can make it on survival.js Now it has caustic soda, and other elements to do stainless steel, those are gonna be updated in the next mod update. but for now thats their only use. --- mods/stainless_steel.js | 92 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/mods/stainless_steel.js b/mods/stainless_steel.js index d91bb64c..0dd9d38e 100644 --- a/mods/stainless_steel.js +++ b/mods/stainless_steel.js @@ -34,4 +34,94 @@ elements.chrome = { }; // obtaining chrome (makes stainless steel) -elements.molten_aluminum.reactions.chromite = { elem2:"chrome", tempMin:1000, tempMax:1200, chance:0.1 }; \ No newline at end of file +elements.molten_aluminum.reactions.chromite = { elem2:"chrome", tempMin:1000, tempMax:1200, chance:0.1 }; + +// bauxite (makes aluminum) +elements.bauxite = { + color: ["#c4ad9d","#996644"], + behavior: behaviors.WALL, + category: "solids", + state: "solid", + tempHigh: 2072, + breakInto: "crushed_bauxite", +}; + +// obtaining caustic soda +elements.salt_water.reactions.copper = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.0075 }; +elements.salt_water.reactions.zinc = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.015 }; +elements.salt_water.reactions.steel = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.0125 }; +elements.salt_water.reactions.aluminum = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.0025 }; +elements.salt_water.reactions.iron = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.0125 }; +elements.salt_water.reactions.tin = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.1 }; +elements.salt_water.reactions.brass = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.001 }; +elements.salt_water.reactions.bronze = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.001 }; +elements.salt_water.reactions.silver = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.0075 }; +elements.salt_water.reactions.gold = { elem1:["hydrogen","hydrogen","oxygen","chlorine","caustic_soda"], charged:true, chance:0.0075 }; + +// soda lime +elements.soda_lime = { + color: "#dcdcdc", + behavior: behaviors.POWDER, + state: "solid", + category: "powders", + reactions: { + "crushed_bauxite": { elem1:"alumina", chance:50 } + }, + alias: "calcium hydroxide", +}; + +// alumina +elements.alumina = { + color: "#c3d4c3", + behavior: behaviors.WALL, + state: "solid", + category: "solids", + tempHigh: 2072, + stateHigh: "molten_aluminum", + conduct: 1, + alias: "aluminum oxide", +}; + +// uh +elements.aluminum.alias = "aluminium"; + +// caustic soda +elements.caustic_soda = { + color: "#ececec", + behavior: behaviors.POWDER, + state: "solid", + category: "powders", + reactions: { + "quicklime": { elem1:"soda_lime" } + }, + alias: "sodium hydroxide", + denisity: 3000, + tempHigh: 318, +}; + +// crushed bauxite (part of the process) +elements.crushed_bauxite = { + color: ["#a28e7b","#774422"], + behavior: behaviors.POWDER, + category: "powders", +}; + +// Alumina oxidizes. +elements.oxygen.reactions.alumina = { elem1:oxidized_alumina} + +// Makes Chrome and Stainless Steel more expensive on survival.js +if (enabledMods.includes("mods/survival.js")) { + runAfterLoad(function() { + elementWorth.chrome = 2; + elementWorth.stainless_steel = 5; + }); +}; + +// Obtaining Bauxite (ores.js only) +if (enabledMods.includes("mods/ores.js")) { + runAfterLoad(function() { + eLists.oreSpawnConditions.bauxite = 0.38; + eLists.oreRgb.bauxite = "rgba(140, 109, 88, "; + eLists.idealOreHeight.bauxite = 0.2; + }); +}; From fcfc361d91a01fedb473f9a3fd14b66b4372046d Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Sun, 16 Mar 2025 10:15:52 -0700 Subject: [PATCH 14/32] human safety mod --- mods/human_friendly_design.js | 899 ++++++++++++++++++++++++++++++++++ 1 file changed, 899 insertions(+) create mode 100644 mods/human_friendly_design.js diff --git a/mods/human_friendly_design.js b/mods/human_friendly_design.js new file mode 100644 index 00000000..716961dd --- /dev/null +++ b/mods/human_friendly_design.js @@ -0,0 +1,899 @@ +elements.human.tick = function(pixel) { + if (isEmpty(pixel.x, pixel.y+1)) { + createPixel("body", pixel.x, pixel.y+1); + var color = pixel.color; + changePixel(pixel,"head"); + pixel.color = color; + if (pixel.bodyColor) { + pixelMap[pixel.x][pixel.y+1].color = pixel.bodyColor; + } + } + else if (isEmpty(pixel.x, pixel.y-1)) { + createPixel("head", pixel.x, pixel.y-1); + pixelMap[pixel.x][pixel.y-1].color = pixel.color; + changePixel(pixel,"body"); + if (pixel.bodyColor) { + pixel.color = pixel.bodyColor; + } + } +} + +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]); + } + } + } + } + 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 (head.panic > 0) { + pixel.panic = head.panic; + delete head.panic; + } + } + else { var head = null } + if (head && Math.random() < 0.25) { + let y = Math.random() < 0.5 ? 0 : -1; + for (let x = 1; x < 10; x++) { + let x2 = pixel.x+(x*pixel.dir); + let y2 = pixel.y+y; + if (!isEmpty(x2,y2,true)) { + let seenPixel = pixelMap[x2][y2]; + if (elements.human.reactions[seenPixel.element] && elements.human.reactions[seenPixel.element].attr1 && elements.human.reactions[seenPixel.element].attr1.panic) { + pixel.panic += elements.human.reactions[seenPixel.element].attr1.panic; + pixel.dir *= -1; + break; + } + else if (seenPixel.dead || seenPixel.temp > 200) { + pixel.panic += 5; + pixel.dir *= -1; + if (seenPixel.panic) delete seenPixel.panic; + break; + } + } + } + } + if (pixel.burning) { + pixel.panic += 0.1; + if (head && pixelTicks-pixel.burnStart > 240) { + pixel.color = head.color; + } + } + if (pixel.charge) { + pixel.panic += 1; + } + else if (pixel.panic > 0) { + pixel.panic -= 0.1; + if (pixel.panic < 0) { pixel.panic = 0; } + else if (pixel.panic > 50) { pixel.panic = 50; } + } + + if (isEmpty(pixel.x, pixel.y-1)) { + // create blood if decapitated 10% chance + if (Math.random() < 0.1 && !pixel.charge) { + createPixel("blood", pixel.x, pixel.y-1); + // set dead to true 15% chance + if (Math.random() < 0.15) { + pixel.dead = pixelTicks; + } + } + } + else if (head === null) { return } + else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance + var movesToTry = [ + [1*pixel.dir,0], + [1*pixel.dir,-1], + ]; + let moved = false; + // While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break. + while (movesToTry.length > 0) { + var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0]; + if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) { + var origx = pixel.x+move[0]; + var origy = pixel.y+move[1]; + if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) { + movePixel(head, head.x+move[0], head.y+move[1]); + moved = true; + break; + } + } + else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { + var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; + if (hitPixel.element === "body" || hitPixel.element === "head" && hitPixel.panic < pixel.panic) { + // interact with other human + hitPixel.panic = pixel.panic; + } + } + } + // 15% chance to change direction + if (Math.random() < 0.15 || !moved) { + pixel.dir *= -1; + } + // homeostasis + if (pixel.temp > 37) { pixel.temp -= 1; } + else if (pixel.temp < 37) { pixel.temp += 1; } + } + +} + +elements.portal_in.tick = function(pixel) { + // if (Math.random() > 0.1) return; + if (!ticktemp.portal_out) ticktemp.portal_out = {}; + let channel = parseInt(pixel.channel) || 0; + if (!ticktemp.portal_out[channel]) { + ticktemp.portal_out[channel] = currentPixels.filter((p) => { + return elements[p.element].id === elements.portal_out.id && ( + isEmpty(p.x,p.y+1) || isEmpty(p.x,p.y-1) || + isEmpty(p.x+1,p.y) || isEmpty(p.x-1,p.y) + ) && + (parseInt(p.channel) || 0) === parseInt(channel) + }); + } + if (ticktemp.portal_out[channel].length) { + shuffleArray(squareCoordsShuffle); + let r; + for (var i = 0; i < squareCoordsShuffle.length; i++) { + var coord = squareCoordsShuffle[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].movable) { + r = pixelMap[x][y]; + break; + } + } + if (r !== undefined || pixel.charge) { + let portal_out = choose(ticktemp.portal_out[channel]); + if (portal_out.del) return; + if (r !== undefined) { + shuffleArray(squareCoordsShuffle); + for (var j = 0; j < squareCoordsShuffle.length; j++) { + var coord2 = squareCoordsShuffle[j]; + var x2 = portal_out.x+coord2[0]; + var y2 = portal_out.y+coord2[1]; + if (isEmpty(x2,y2) && r.element !== "head" && r.element !== "body") { + tryMove(r,x2,y2); + } + else if (isEmpty(x2,y2) && (r.element === "head" || r.element === "body")) { + if (r.element === "head" && !isEmpty(r.x,r.y+1)) { + if (pixelMap[r.x][r.y+1].element === "body") { + r.element = "human" + r.bodyColor = pixelMap[r.x][r.y+1].color + deletePixel(r.x,r.y+1) + tryMove(r,x2,y2); + } + else { + tryMove(r,x2,y2); + } + } + else if (r.element === "body" && !isEmpty(r.x,r.y-1)) { + if (pixelMap[r.x][r.y-1].element === "head") { + r.element = "human" + r.bodyColor = r.color + r.color = pixelMap[r.x][r.y-1].color + deletePixel(r.x,r.y-1) + tryMove(r,x2,y2); + } + else { + tryMove(r,x2,y2); + } + } + } + break; + } + } + if (pixel.charge && !portal_out.charge && !portal_out.chargeCD) { + portal_out.charge = pixel.charge; + } + } + }; + doElectricity(pixel); +} + +elements.pipe.tick = function(pixel) { + if (!pixel.stage && pixelTicks-pixel.start > 60) { + for (var i = 0; i < squareCoords.length; i++) { + var coord = squareCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].movable) { + deletePixel(x,y) + } + if (isEmpty(x,y)) { + createPixel("pipe_wall",x,y); + } + } + pixel.stage = 1; + } + else if (pixel.stage === 1 && pixelTicks-pixel.start > 70) { //uninitialized + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (isEmpty(x,y)) { + pixel.stage = 2; //blue + pixel.color = pixelColorPick(pixel,"#000036"); + break; + } + } + } + else if (pixel.stage > 1 && pixelTicks % 3 === pixel.stage-2) { //initialized + for (var i = 0; i < squareCoords.length; i++) { + var coord = squareCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true) && pixelMap[x][y].element === "pipe") { + var newPixel = pixelMap[x][y]; + if (newPixel.stage === 1) { + var newColor; + switch (pixel.stage) { + case 2: newPixel.stage = 3; newColor = "#003600"; break; //green + case 3: newPixel.stage = 4; newColor = "#360000"; break; //red + case 4: newPixel.stage = 2; newColor = "#000036"; break; //blue + } + newPixel.color = pixelColorPick(newPixel,newColor); + } + } + } + var moved = false; + shuffleArray(squareCoordsShuffle); + for (var i = 0; i < squareCoordsShuffle.length; i++) { + var coord = squareCoordsShuffle[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + var newPixel = pixelMap[x][y]; + if (newPixel.element === "pipe") { + var nextStage; + switch (pixel.stage) { + case 2: nextStage = 4; break; //green + case 3: nextStage = 2; break; //red + case 4: nextStage = 3; break; //blue + } + if (pixel.con && !newPixel.con && newPixel.stage === nextStage) { //transfer to adjacent pipe + newPixel.con = pixel.con; + newPixel.con.x = newPixel.x; + newPixel.con.y = newPixel.y; + pixel.con = null; + moved = true; + break; + } + } + else if (!pixel.con && elements[newPixel.element].movable && newPixel.element !== "head" && newPixel.element !== "body") { //suck up pixel + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + else if (!pixel.con && elements[newPixel.element].movable && (newPixel.element === "head" || newPixel.element === "body")) { + if (newPixel.element === "head") { + if (!isEmpty(newPixel.x,newPixel.y+1)) { + if (pixelMap[newPixel.x][newPixel.y+1].element === "body") { + newPixel.element = "human" + newPixel.bodyColor = pixelMap[newPixel.x][newPixel.y+1].color + deletePixel(newPixel.x,newPixel.y+1) + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + else { + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + } + else { + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + } + else if (newPixel.element === "body") { + if (!isEmpty(newPixel.x,newPixel.y-1)) { + if (pixelMap[newPixel.x][newPixel.y-1].element === "head") { + newPixel.element = "human" + newPixel.bodyColor = newPixel.color + newPixel.color = pixelMap[newPixel.x][newPixel.y-1].color + deletePixel(newPixel.x,newPixel.y-1) + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + else { + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + } + else { + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + } + else { + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + } + } + } + if (pixel.con && !moved) { // move to same stage if none other + for (var i = 0; i < squareCoordsShuffle.length; i++) { + var coord = squareCoordsShuffle[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (isEmpty(x,y)) { + delete pixel.con.del; + pixel.con.x = x; + pixel.con.y = y; + pixelMap[x][y] = pixel.con; + currentPixels.push(pixel.con); + pixel.con = null; + break; + } + if (!isEmpty(x,y,true) && pixelMap[x][y].element === "pipe") { + var newPixel = pixelMap[x][y]; + if (pixel.con && !newPixel.con && newPixel.stage === pixel.stage) { + newPixel.con = pixel.con; + newPixel.con.x = newPixel.x; + newPixel.con.y = newPixel.y; + pixel.con = null; + break; + } + } + } + } + } + doDefaults(pixel); +} + +elements.drag.tool = function(pixel) { + if (dragStart === null) { + dragStart = pixelTicks; + draggingPixels = []; + } + if (pixelTicks === dragStart && !pixel.drag && (elements[pixel.element].movable || shiftDown) && pixel.element !== "head") { + pixel.drag = true; + draggingPixels.push(pixel); + } +} + +elements.drag.perTick = function() { + if (!draggingPixels) { return; } + for (var j = 0; j < (shiftDown ? 3 : 1); j++) { + for (var i = 0; i < draggingPixels.length; i++) { + var pixel = draggingPixels[i]; + if (pixel.del) { continue } + const x = pixel.x; + const y = pixel.y; + const [mX, mY] = [mousePos.x, mousePos.y]; + const empty = checkForEmptyPixels(x, y); + let bestVal = Math.sqrt(Math.pow(mX - x, 2) + Math.pow(mY - y, 2)); + let best = null; + for (const pixelPair of empty) { + const x_ = x + pixelPair[0]; + const y_ = y + pixelPair[1]; + const c = Math.sqrt(Math.pow(mX - x_, 2) + Math.pow(mY - y_, 2)); + if (c < bestVal) { + bestVal = c; + best = pixelPair; + } + } + if (best) { + if (pixel.element !== "body") { + tryMove(pixel, x + best[0], y + best[1], undefined, true); + } + else if (pixel.element === "body") { + if (!isEmpty(pixel.x,pixel.y-1)) { + var headPixel = pixelMap[pixel.x][pixel.y-1] + if (headPixel.element === "head") { + if (isEmpty(x + best[0], y + best[1] - 1)) { + tryMove(headPixel, x + best[0], y + best[1] - 1, undefined, true); + tryMove(pixel, x + best[0], y + best[1], undefined, true); + } + } + } + else {tryMove(pixel, x + best[0], y + best[1], undefined, true);} + } + } + } + } +} + +mouse1Action = function(e,mouseX=undefined,mouseY=undefined,startPos) { + if (currentElement === "erase") { mouse2Action(e,mouseX,mouseY,startPos); return; } + else if (currentElement === "pick") { mouseMiddleAction(e,mouseX,mouseY); return; } + // If x and y are undefined, get the mouse position + if (mouseX === undefined && mouseY === undefined) { + // var canvas = document.getElementById("game"); + // var ctx = canvas.getContext("2d"); + lastPos = mousePos; + mousePos = getMousePos(canvas, e); + var mouseX = mousePos.x; + var mouseY = mousePos.y; + } + var cooldowned = false; + if (mouseSize===1 && elements[currentElement].cooldown && !paused) { + if (pixelTicks-lastPlace < elements[currentElement].cooldown) { + return; + } + cooldowned = true; + } + lastPlace = pixelTicks; + if (cooldowned && !startPos) { + var coords = mouseRange(mouseX,mouseY); + } + else { + startPos = startPos || lastPos + var coords = lineCoords(startPos.x,startPos.y,mouseX,mouseY); + } + // if (!((cooldowned && startPos.x===lastPos.x && startPos.y===lastPos.y) || ((elements[currentElement].tool || elements[currentElement].category==="tools") && !elements[currentElement].canPlace))) { + // } + // else { var coords = mouseRange(mouseX,mouseY); } + var element = elements[currentElement]; + var mixList = []; + // For each x,y in coords + var done = {}; + for (var i = 0; i < coords.length; i++) { + var x = coords[i][0]; + var y = coords[i][1]; + if (!done[x]) { + done[x] = {} + } + if (done[x][y]) { continue; } + done[x][y] = true; + + if (mode === "replace" && (!elements[currentElement].tool || elements[currentElement].canPlace)) { + if (outOfBounds(x,y)) { + continue; + } + // Remove pixel at position from currentPixels + if (!isEmpty(x,y,true)) { + if (!(currentElement === pixelMap[x][y].element && pixelMap[x][y].start === pixelTicks-1)) { + deletePixel(x,y); + } + } + } + + if (currentElement === "mix") { + if (!isEmpty(x,y,true)) { + var pixel = pixelMap[x][y]; + if (!(elements[pixel.element].movable !== true || elements[pixel.element].noMix === true) || shiftDown) { + mixList.push(pixel); + } + } + continue; + } + else if (elements[currentElement].tool && !(elements[currentElement].canPlace && isEmpty(x,y))) { + // run the tool function on the pixel + if (!isEmpty(x,y,true)) { + var pixel = pixelMap[x][y]; + // if the current element has an ignore property and the pixel's element is in the ignore property, don't do anything + if (elements[currentElement].ignore && elements[currentElement].ignore.indexOf(pixel.element) !== -1) { + continue; + } + elements[currentElement].tool(pixel); + } + continue; + } + if (isEmpty(x, y)) { + if (currentPixels.length < maxPixelCount) { + createPixel(currentElement,x,y); + if (pixelMap[x][y] && currentElement === pixelMap[x][y].element && (elements[currentElement].customColor || elements[currentElement].singleColor)) { + pixelMap[x][y].color = pixelColorPick(pixelMap[x][y],currentColorMap[currentElement]); + } + if (currentElementProp) { + for (var key in currentElementProp) { + pixelMap[x][y][key] = currentElementProp[key] + } + } + } + } + else if (!outOfBounds(x,y)) { + if (elements[currentElement].extinguish) { + var pixel = pixelMap[x][y]; + if (pixel.burning && elements[pixel.element].burning !== true) { + delete pixel.burning; + delete pixel.burnStart; + } + } + } + } + if (currentElement === "mix") { + // 1. repeat for each pixel in mixList + // 2. choose 2 random pixels and swap their x and y + // 3. remove pixel from mixList + for (var i = 0; i < mixList.length; i++) { + var pixel1 = mixList[Math.floor(Math.random()*mixList.length)]; + var pixel2 = mixList[Math.floor(Math.random()*mixList.length)]; + if (pixel1.element !== "head" && pixel2.element !== "head" && pixel1.element !== "body" && pixel2.element !== "body") { + swapPixels(pixel1,pixel2); + } + else if (pixel1.element !== "head" && pixel2.element !== "head" && (pixel1.element === "body" || pixel2.element === "body")) { + if (pixel1.element === "body") { + if (!isEmpty(pixel1.x,pixel1.y-1, true)) { + var headPixel1 = pixelMap[pixel1.x][pixel1.y-1] + if (headPixel1.element === "head") { + if (!isEmpty(pixel2.x,pixel2.y-1, true)) { + var headPixel2 = pixelMap[pixel2.x][pixel2.y-1] + if (headPixel2.element !== "body" && !(elements[headPixel2.element].movable !== true || elements[headPixel2.element].noMix === true)) { + swapPixels(pixel1,pixel2); + swapPixels(headPixel1,headPixel2); + } + } + else if (isEmpty(pixel2.x,pixel2.y-1)) { + swapPixels(pixel1,pixel2) + tryMove(headPixel1, pixel1.x, pixel1.y-1) + } + } + } + } + else if (pixel2.element === "body") { + if (!isEmpty(pixel2.x,pixel2.y-1, true)) { + var headPixel1 = pixelMap[pixel2.x][pixel2.y-1] + if (headPixel1.element === "head") { + if (!isEmpty(pixel1.x,pixel1.y-1, true)) { + var headPixel2 = pixelMap[pixel1.x][pixel1.y-1] + if (headPixel2.element !== "body" && !(elements[headPixel2.element].movable !== true || elements[headPixel2.element].noMix === true)) { + swapPixels(pixel1,pixel2); + swapPixels(headPixel1,headPixel2); + } + } + else if (isEmpty(pixel1.x,pixel1.y-1)) { + swapPixels(pixel1,pixel2); + tryMove(headPixel1, pixel2.x,pixel2.y-1) + } + } + } + } + } + mixList.splice(mixList.indexOf(pixel1),1); + mixList.splice(mixList.indexOf(pixel2),1); + if (elements[pixel1.element].onMix) { + elements[pixel1.element].onMix(pixel1,pixel2); + } + if (elements[pixel2.element].onMix) { + elements[pixel2.element].onMix(pixel2,pixel1); + } + } + + } +} + +pixelTick = function(pixel,custom=null) { + if (pixel.start === pixelTicks) {return} + btemp = {}; + if (elements[pixel.element] === undefined) { + pixel.invalidElement = pixel.element; + changePixel(pixel,"unknown"); + return; + } + var info = elements[pixel.element]; + btemp.info = info; + btemp.pixel = pixel; + if (custom) { var behavior = custom; } + else if (pixel.charge && info.behaviorOn) { var behavior = info.behaviorOn; } + else { var behavior = info.behavior; } + if (pixel.flipX) { behavior = flipBehavior(behavior,"x"); } + if (pixel.flipY) { behavior = flipBehavior(behavior,"y"); } + if (pixel.r) { behavior = rotateBehavior(behavior,pixel.r); } + var x = pixel.x; + var y = pixel.y; + var move1Spots = []; btemp.move1Spots = move1Spots; + var move2Spots = []; btemp.move2Spots = move2Spots; + var supportSpots = []; btemp.supportSpots = supportSpots; + var swapSpots = []; btemp.swapSpots = swapSpots; + btemp.mixSpots = []; + btemp.move = true; + // Parse behavior +var height = behavior.length; +for (var by = 0; by < behavior.length; by++) { +var behaviorby = behavior[by]; +var width = behaviorby.length; +for (var bx = 0; bx < behaviorby.length; bx++) { + var b0 = behaviorby[bx]; + if (b0 === "XX") {continue} + //if (b.includes(" OR ")) { + // b = b.split(" OR ")[Math.floor(Math.random()*b.split(" OR ").length)]; + //} + // Loop through b0.split(" AND ") + if (b0.indexOf(" AND ") !== -1) { var andsplit = b0.split(" AND "); } + else { var andsplit = [b0]; } + for (var i = 0; i < andsplit.length; i++) { + var b = andsplit[i]; + if (b.indexOf(":") !== -1) { + var arg = b.split(":")[1].split(/[\:\%]/)[0]; + if (b.indexOf("%") === -1) { + b = b.split(/[\:\%]/)[0]; + } + } + else { var arg = null;} + btemp.arg = arg; + // If b has "%" followed by a number in it, it's a chance to move + if (b.indexOf("%") !== -1) { + // Split the string at the "%" and use the second half as the chance (float) + var chance = parseFloat(b.split("%")[1]); + //console.log(b+": "+(Math.random()*100 < chance)); + b = b.split(/[\:\%]/)[0]; + } + else { var chance = 100; } + if (chance===100 || Math.random()*100 < chance) { + var newCoords = behaviorCoords(x,y,bx,by,width,height); + btemp.newCoords = newCoords; + if (behaviorRules[b]) { + behaviorRules[b](); + continue; + } + } + } + } + } + if (btemp.deleted) {return;} + if (supportSpots.length > 0) { + var supportCount = 0; + var allEmpty = true; + for (var i = 0; i < supportSpots.length; i++) { + var bx = supportSpots[i].x; + var by = supportSpots[i].y; + var arg = supportSpots[i].arg; + if (!isEmpty(bx,by,true)) { + if (info.ignore && info.ignore.indexOf(pixelMap[bx][by].element) !== -1) {continue;} + if ((arg === null && !validDensitySwaps[info.state][elements[pixelMap[bx][by].element].state]) || pixelMap[bx][by].element == arg) { + supportCount++; + } + } + } + if (supportCount == supportSpots.length) { + btemp.move = false; + } + } + + var moved = false; + + if (swapSpots.length > 0) { + var coords = swapSpots[Math.floor(Math.random()*swapSpots.length)]; + if (pixelMap[coords.x][coords.y] !== undefined) { + swapPixels(pixel,pixelMap[coords.x][coords.y]); + btemp.move = false; + moved = true; + } + } + + if (btemp.mixSpots.length > 0) { + for (var i = 0; i < btemp.mixSpots.length; i++) { + var coord1 = choose(btemp.mixSpots); + var coord2 = choose(btemp.mixSpots); + var exists1 = !isEmpty(coord1.x,coord1.y,true); + var exists2 = !isEmpty(coord2.x,coord2.y,true); + if (isEmpty(coord1.x,coord1.y) && exists2) { + var pixel1 = pixelMap[coord2.x][coord2.y] + if (pixel1.element !== "head" && pixel1.element !== "body") { + tryMove(pixel1,coord1.x,coord1.y); + } + else if (pixel1.element !== "head" && pixel1.element === "body") { + if (!isEmpty(pixel1.x,pixel1.y-1, true)) { + var headPixel1 = pixelMap[pixel1.x][pixel1.y-1] + if (headPixel1.element === "head") { + if (!isEmpty(coord1.x,coord1.y-1, true)) { + var headPixel2 = pixelMap[coord1.x][coord1.y-1] + if (headPixel2.element !== "body" && !(elements[headPixel2.element].movable !== true || elements[headPixel2.element].noMix === true)) { + tryMove(pixel1,coord1.x,coord1.y); + swapPixels(headPixel1,headPixel2); + } + } + else if (isEmpty(coord1.x,coord1.y-1)) { + tryMove(pixel1,coord1.x,coord1.y); + tryMove(headPixel1, pixel1.x, pixel1.y-1) + } + } + } + } + } + else if (exists1 && isEmpty(coord2.x,coord2.y)) { + var pixel1 = pixelMap[coord1.x][coord1.y] + if (pixel1.element !== "head" && pixel1.element !== "body") { + tryMove(pixel1,coord2.x,coord2.y); + } + else if (pixel1.element !== "head" && pixel1.element === "body") { + if (!isEmpty(pixel1.x,pixel1.y-1, true)) { + var headPixel1 = pixelMap[pixel1.x][pixel1.y-1] + if (headPixel1.element === "head") { + if (!isEmpty(coord2.x,coord2.y-1, true)) { + var headPixel2 = pixelMap[coord2.x][coord2.y-1] + if (headPixel2.element !== "body" && !(elements[headPixel2.element].movable !== true || elements[headPixel2.element].noMix === true)) { + tryMove(pixel1,coord2.x,coord2.y); + swapPixels(headPixel1,headPixel2); + } + } + else if (isEmpty(coord2.x,coord2.y-1)) { + tryMove(pixel1,coord2.x,coord2.y); + tryMove(headPixel1, pixel1.x, pixel1.y-1) + } + } + } + } + } + else if (exists1 && exists2) { + var pixel1 = pixelMap[coord1.x][coord1.y]; + var pixel2 = pixelMap[coord2.x][coord2.y]; + if (pixel1.element !== "head" && pixel2.element !== "head" && pixel1.element !== "body" && pixel2.element !== "body") { + swapPixels(pixel1,pixel2); + } + else if (pixel1.element !== "head" && pixel2.element !== "head" && (pixel1.element === "body" || pixel2.element === "body")) { + if (pixel1.element === "body") { + if (!isEmpty(pixel1.x,pixel1.y-1, true)) { + var headPixel1 = pixelMap[pixel1.x][pixel1.y-1] + if (headPixel1.element === "head") { + if (!isEmpty(pixel2.x,pixel2.y-1, true)) { + var headPixel2 = pixelMap[pixel2.x][pixel2.y-1] + if (headPixel2.element !== "body" && !(elements[headPixel2.element].movable !== true || elements[headPixel2.element].noMix === true)) { + swapPixels(pixel1,pixel2); + swapPixels(headPixel1,headPixel2); + } + } + else if (isEmpty(pixel2.x,pixel2.y-1)) { + swapPixels(pixel1,pixel2) + tryMove(headPixel1, pixel1.x, pixel1.y-1) + } + } + } + } + else if (pixel2.element === "body") { + if (!isEmpty(pixel2.x,pixel2.y-1, true)) { + var headPixel1 = pixelMap[pixel2.x][pixel2.y-1] + if (headPixel1.element === "head") { + if (!isEmpty(pixel1.x,pixel1.y-1, true)) { + var headPixel2 = pixelMap[pixel1.x][pixel1.y-1] + if (headPixel2.element !== "body" && !(elements[headPixel2.element].movable !== true || elements[headPixel2.element].noMix === true)) { + swapPixels(pixel1,pixel2); + swapPixels(headPixel1,headPixel2); + } + } + else if (isEmpty(pixel1.x,pixel1.y-1)) { + swapPixels(pixel1,pixel2); + tryMove(headPixel1, pixel2.x,pixel2.y-1) + } + } + } + } + } + if (elements[pixel1.element].onMix) { + elements[pixel1.element].onMix(pixel1,pixel2); + } + if (elements[pixel2.element].onMix) { + elements[pixel2.element].onMix(pixel2,pixel1); + } + } + } + } + + if (btemp.sticking) { + btemp.move = false; + } + + // Move First Priority + if (btemp.move) { + if (move1Spots.length > 0) { + // While move1Spots is not empty + while (move1Spots.length > 0) { + // coords = random item of move1Spots + var j = Math.floor(Math.random()*move1Spots.length); + var coords = move1Spots[j]; + var nx = coords.x; + var ny = coords.y; + moved = tryMove(pixel,nx,ny,btemp.leaveBehind1 || btemp.leaveBehind); + if (moved) { + break; + } + else { + // remove coords from move1Spots + move1Spots.splice(j,1); + } + + + } + } + // Move Second Priority + if (!moved && move2Spots.length > 0) { + // While move2Spots is not empty + while (move2Spots.length > 0) { + // coords = random item of move2Spots + var j = Math.floor(Math.random()*move2Spots.length); + var coords = move2Spots[j]; + var nx = coords.x; + var ny = coords.y; + moved = tryMove(pixel,nx,ny,btemp.leaveBehind2 || btemp.leaveBehind); + if (moved) { + if (btemp.C2 && elements[btemp.C2]) { + changePixel(pixel,btemp.C2); + } + break; + } + else { + // remove coords from move2Spots + move2Spots.splice(j,1); + } + } + } + } + doAirDensity(pixel); + + + // Change tempearture if needed (unused) + /*if (info.tempChange != undefined) { + pixel.temp += info.tempChange; + pixelTempCheck(pixel); + }*/ + + // Burning + doBurning(pixel); + + // Heat Transfer + if (info.insulate !== true) { + doHeat(pixel); + } + + // Electricity Transfer + doElectricity(pixel); + + // Staining + if (info.stain) { + doStaining(pixel); + } + +} \ No newline at end of file From 80187085868954f368bcf536cc065579339452a9 Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Sun, 16 Mar 2025 14:43:22 -0700 Subject: [PATCH 15/32] brain fix --- mods/biology.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mods/biology.js b/mods/biology.js index a1530147..e88cc1aa 100644 --- a/mods/biology.js +++ b/mods/biology.js @@ -3729,7 +3729,7 @@ elements.brain = { if (!isEmpty(pixel.x, pixel.y-1, true)) { var hitPixel = pixelMap[pixel.x][pixel.y-1] doElectricity(hitPixel); - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } @@ -3757,7 +3757,7 @@ elements.brain = { hitPixel.darkcharge = true } } - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } @@ -3768,7 +3768,7 @@ elements.brain = { if (!isEmpty(pixel.x-1, pixel.y, true)) { var hitPixel = pixelMap[pixel.x-1][pixel.y] doElectricity(hitPixel); - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } @@ -3779,7 +3779,7 @@ elements.brain = { if (!isEmpty(pixel.x+1, pixel.y, true)) { var hitPixel = pixelMap[pixel.x+1][pixel.y] doElectricity(hitPixel); - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } @@ -3920,7 +3920,7 @@ elements.hypothalamus = { if (!isEmpty(pixel.x, pixel.y-1, true)) { var hitPixel = pixelMap[pixel.x][pixel.y-1] doElectricity(hitPixel); - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } @@ -3931,7 +3931,7 @@ elements.hypothalamus = { if (!isEmpty(pixel.x, pixel.y+1, true)) { var hitPixel = pixelMap[pixel.x][pixel.y+1] doElectricity(hitPixel); - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } @@ -3942,7 +3942,7 @@ elements.hypothalamus = { if (!isEmpty(pixel.x-1, pixel.y, true)) { var hitPixel = pixelMap[pixel.x-1][pixel.y] doElectricity(hitPixel); - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } @@ -3953,7 +3953,7 @@ elements.hypothalamus = { if (!isEmpty(pixel.x+1, pixel.y, true)) { var hitPixel = pixelMap[pixel.x+1][pixel.y] doElectricity(hitPixel); - if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed - pixel.alcoDepri) / 2050))) { + if (elements[hitPixel.element].id === elements.nerve.id && Math.random() > 0.75 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) { pixel.chargeCD = 16 hitPixel.charge = 0.5 } From 4606c6dcc95fa8dfa58a412ba17b134e57a2ddc1 Mon Sep 17 00:00:00 2001 From: MicaelNotUsed Date: Sun, 16 Mar 2025 19:32:13 -0300 Subject: [PATCH 16/32] Update stainless_steel.js fixing errors --- mods/stainless_steel.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mods/stainless_steel.js b/mods/stainless_steel.js index 0dd9d38e..b6f91540 100644 --- a/mods/stainless_steel.js +++ b/mods/stainless_steel.js @@ -1,4 +1,4 @@ -// obtaining chromium (makes chrome) +// obtaining chromite (makes chrome) elements.magma.stateLow = ["rock", "basalt", "basalt", "basalt", "chromite"]; // chrome @@ -104,11 +104,10 @@ elements.crushed_bauxite = { color: ["#a28e7b","#774422"], behavior: behaviors.POWDER, category: "powders", + tempHigh: 2072, + stateHigh: "molten_bauxite", }; -// Alumina oxidizes. -elements.oxygen.reactions.alumina = { elem1:oxidized_alumina} - // Makes Chrome and Stainless Steel more expensive on survival.js if (enabledMods.includes("mods/survival.js")) { runAfterLoad(function() { From dd522678e8e724a17fbe97dd9389c80673472091 Mon Sep 17 00:00:00 2001 From: Suss <167750109+therealsuss@users.noreply.github.com> Date: Mon, 17 Mar 2025 18:52:48 +1100 Subject: [PATCH 17/32] drill we drilling for oil with this one --- mods/drill.js | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 mods/drill.js diff --git a/mods/drill.js b/mods/drill.js new file mode 100644 index 00000000..56a0fe5e --- /dev/null +++ b/mods/drill.js @@ -0,0 +1,114 @@ +elements.iron_drill = { + color: ["#474747","#2b2b2b","#808080"], + behavior: [ + "DL AND MX|CR:drill_base|DL AND MX", + "MX:true|XX|MX:true", + "MX:true|M1 AND SM%10 AND MX:true|MX:true", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, +}; + +elements.drill_base = { + color: "#595959", + behavior: [ + "XX|CR:drill_support AND CH:drill_support|XX", + "XX|XX|XX", + "XX|M1|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + +elements.drill_support = { + color: "#242424", + behavior: [ + "XX|CH:drill_support|XX", + "XX|XX|XX", + "XX|XX|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + +elements.gold_drill = { + color: ["#f7c736","#ffe596","#d1a41d"], + behavior: [ + "DL AND MX|CR:drill_base|DL AND MX", + "MX:true|XX|MX:true", + "MX:true|M1 AND SM%25 AND MX:true|MX:true", +], + category: "machines", + breakInto: "gold_coin", + state: "solid", + tempHigh: 1064, + stateHigh: "molten_gold", + density: 19300, + noMix: true, + darkText: false, +}; + +elements.brass_drill = { + color: ["#ad7f47","#874a00"], + behavior: [ + "DL AND MX|CR:drill_base|DL AND MX", + "MX:true|XX|MX:true", + "MX:true|M1 AND SM%8 AND MX:true|MX:true", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 927, + stateHigh: "molten_brass", + density: 8550, + noMix: true, + darkText: false, +}; + +elements.egg_drill = { + color: "#ffe69c", + behavior: [ + "DL AND MX|CR:drill_base|DL AND MX", + "MX:true|XX|MX:true", + "MX:true|M1 AND SM%1 AND MX:true|MX:true", +], + category: "machines", + breakInto: "yolk", + state: "solid", + tempHigh: 1500, + stateHigh: "steam", + density: 1031, + noMix: true, + darkText: true, +}; + +elements.void_drill = { + color: "#000000", + behavior: [ + "DL|CR:drill_base|DL", + "DL|XX|DL", + "DL|M1 AND DL|DL", +], + category: "machines", + state: "solid", + density: 999999999999999, + noMix: true, + darkText: false, +}; \ No newline at end of file From e9c114ebac56b29e9115431f266d90658456634d Mon Sep 17 00:00:00 2001 From: Suss <167750109+therealsuss@users.noreply.github.com> Date: Mon, 17 Mar 2025 18:54:19 +1100 Subject: [PATCH 18/32] Update mod-list.html --- mod-list.html | 1 + 1 file changed, 1 insertion(+) diff --git a/mod-list.html b/mod-list.html index c4c8c2be..a2e9ff4e 100644 --- a/mod-list.html +++ b/mod-list.html @@ -230,6 +230,7 @@ colored_lightbulbs.jsAdds a light bulb that can be painted.guzzo86, ggod combustion.jsAdds components necessary for combustion enginesuptzik conveyance.jsConveyors, operated with and without electricityMelecie +drill.jsAdds drills made out of several materialsSuss ExtraMachines.jsAdds sensors, energy resources, materials, and moreMecoolnotcool fine_tuned_cloner.jsAdds a cloner that can spawn at different rates and prevent unwated cloningBatteRaquette58 flipflop.jsToggleable switches; ExplanationFlix From 7f80da4f05496e3635fba5e042a87f62e88fe0a5 Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Tue, 18 Mar 2025 12:04:53 -0700 Subject: [PATCH 19/32] desand tool bugfix --- mods/nekonicos_stuff.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/mods/nekonicos_stuff.js b/mods/nekonicos_stuff.js index d2473836..4b28ec1f 100644 --- a/mods/nekonicos_stuff.js +++ b/mods/nekonicos_stuff.js @@ -190,9 +190,6 @@ elements.desand = { changePixel(pixel,"water") } } - else if ([pixel.element].startsWith("sand_")) { - deletePixel(pixel.x,pixel.y) - } }, category: "tools", } From db8cb1fa89f97761cbb4eafd60f79042bbed0afc Mon Sep 17 00:00:00 2001 From: Suss <167750109+therealsuss@users.noreply.github.com> Date: Wed, 19 Mar 2025 15:29:22 +1100 Subject: [PATCH 20/32] Update drill.js --- mods/drill.js | 175 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 154 insertions(+), 21 deletions(-) diff --git a/mods/drill.js b/mods/drill.js index 56a0fe5e..5a9bcab8 100644 --- a/mods/drill.js +++ b/mods/drill.js @@ -1,12 +1,11 @@ elements.iron_drill = { - color: ["#474747","#2b2b2b","#808080"], + color: ["#474747","#2b2b2b","#636363"], behavior: [ - "DL AND MX|CR:drill_base|DL AND MX", - "MX:true|XX|MX:true", - "MX:true|M1 AND SM%10 AND MX:true|MX:true", + "DL%5 AND MX|CR:drill_base|DL%5 AND MX", + "MX|LB:drill_base|MX", + "MX|M1 AND SM%10 AND MX|MX", ], category: "machines", - breakInto: "metal_scrap", state: "solid", tempHigh: 1538, stateHigh: "molten_iron", @@ -15,11 +14,11 @@ elements.iron_drill = { }; elements.drill_base = { - color: "#595959", + color: "#808080", behavior: [ "XX|CR:drill_support AND CH:drill_support|XX", "XX|XX|XX", - "XX|M1|XX", + "XX|XX|XX", ], category: "machines", breakInto: "metal_scrap", @@ -32,9 +31,9 @@ elements.drill_base = { }; elements.drill_support = { - color: "#242424", + color: "#323232", behavior: [ - "XX|CH:drill_support|XX", + "XX|CR:drill_top|XX", "XX|XX|XX", "XX|XX|XX", ], @@ -48,12 +47,130 @@ elements.drill_support = { hidden: true, }; +elements.drill_top = { + color: "#323232", + behavior: [ + "XX|XX|XX", + "XX|XX|CR:drill_side1", + "XX|XX|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; +elements.drill_side1 = { + color: "#323232", + behavior: [ + "XX|XX|XX", + "XX|XX|CR:drill_side2", + "XX|XX|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + +elements.drill_side2 = { + color: "#323232", + behavior: [ + "XX|XX|XX", + "XX|XX|CR:drill_side3", + "XX|XX|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + +elements.drill_side3 = { + color: "#323232", + behavior: [ + "XX|XX|XX", + "XX|XX|CR:drill_side4", + "XX|XX|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + +elements.drill_side4 = { + color: "#323232", + behavior: [ + "XX|XX|XX", + "XX|XX|CR:drill_side5%35 AND CR:drill_side4%65", + "XX|XX|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + +elements.drill_side5 = { + color: "#323232", + behavior: [ + "XX|XX|XX", + "XX|XX|XX", + "XX|CR:drill_support_down|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + +elements.drill_support_down = { + color: "#323232", + behavior: [ + "XX|XX|XX", + "XX|XX|XX", + "XX|CR:drill_support_down|XX", +], + category: "machines", + breakInto: "metal_scrap", + state: "solid", + tempHigh: 1538, + stateHigh: "molten_iron", + density: 7860, + noMix: true, + hidden: true, +}; + elements.gold_drill = { color: ["#f7c736","#ffe596","#d1a41d"], behavior: [ - "DL AND MX|CR:drill_base|DL AND MX", - "MX:true|XX|MX:true", - "MX:true|M1 AND SM%25 AND MX:true|MX:true", + "DL%7 AND MX|CR:drill_base|DL%7 AND MX", + "MX|LB:drill_base|MX", + "MX|M1 AND SM%25 AND MX|MX", ], category: "machines", breakInto: "gold_coin", @@ -68,12 +185,11 @@ elements.gold_drill = { elements.brass_drill = { color: ["#ad7f47","#874a00"], behavior: [ - "DL AND MX|CR:drill_base|DL AND MX", - "MX:true|XX|MX:true", - "MX:true|M1 AND SM%8 AND MX:true|MX:true", + "DL%6 AND MX|CR:drill_base|DL%6 AND MX", + "MX|LB:drill_base|MX", + "MX|M1 AND SM%15 AND MX|MX", ], category: "machines", - breakInto: "metal_scrap", state: "solid", tempHigh: 927, stateHigh: "molten_brass", @@ -85,9 +201,9 @@ elements.brass_drill = { elements.egg_drill = { color: "#ffe69c", behavior: [ - "DL AND MX|CR:drill_base|DL AND MX", - "MX:true|XX|MX:true", - "MX:true|M1 AND SM%1 AND MX:true|MX:true", + "DL%1 AND MX|CR:drill_base|DL%1 AND MX", + "MX|LB:drill_base|MX", + "MX|M1 AND SM%1 AND MX|MX", ], category: "machines", breakInto: "yolk", @@ -99,11 +215,28 @@ elements.egg_drill = { darkText: true, }; +elements.glass_drill = { + color: "#5e807d", + behavior: [ + "DL%10 AND MX|CR:drill_base|DL%10 AND MX", + "MX|LB:drill_base AND SM%1|MX", + "MX|M1 AND SM%40 AND MX|MX", +], + category: "machines", + breakInto: "glass_shard", + state: "solid", + tempHigh: 1500, + stateHigh: "molten_glass", + density: 2500, + noMix: true, + darkText: false, +}; + elements.void_drill = { color: "#000000", behavior: [ "DL|CR:drill_base|DL", - "DL|XX|DL", + "DL|LB:drill_base|DL", "DL|M1 AND DL|DL", ], category: "machines", @@ -111,4 +244,4 @@ elements.void_drill = { density: 999999999999999, noMix: true, darkText: false, -}; \ No newline at end of file +}; From 1b87acf43bc8b2fc2c22641e60cf870ab629d9e0 Mon Sep 17 00:00:00 2001 From: BluBun5193 Date: Thu, 20 Mar 2025 13:49:38 -0400 Subject: [PATCH 21/32] Added mod - sports_beta.js Beta version of the upcoming sports.js, more changes will come! --- mods/sports_beta.js | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 mods/sports_beta.js diff --git a/mods/sports_beta.js b/mods/sports_beta.js new file mode 100644 index 00000000..69ec8bc1 --- /dev/null +++ b/mods/sports_beta.js @@ -0,0 +1,111 @@ +elements.softball = { + color: "#ffe300", + behavior: behaviors.BOUNCY, + category: "softball_equipment", + state: "solid", +}; + +elements.baseball = { + color: "#eae7dc", + behavior: behaviors.BOUNCY, + category: "baseball_equipment", + state: "solid", +}; + +elements.basketball = { + color: "#e77f1c", + behavior: behaviors.BOUNCY, + category: "basketball_equipment", + state: "solid", +}; + +elements.football = { + color: "#ac5541", + behavior: behaviors.BOUNCY, + category: "football_equipment", + state: "solid", +}; + +elements.soccer_ball = { + color: "#f9fbfa", + behavior: behaviors.BOUNCY, + category: "soccer_equipment", + state: "solid", +}; + +elements.tennis_ball = { + color: "#9ab973", + behavior: behaviors.BOUNCY, + category: "tennis_equipment", + state: "solid", +}; + +elements.puck = { + color: "#180902", + behavior: behaviors.BOUNCY, + category: "hockey_equipment", + state: "solid", +}; + +elements.dodge_ball = { + color: "#533d61", + behavior: behaviors.BOUNCY, + category: "gaga_ball", + state: "solid", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "softball_equipment", + state: "gas", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "baseball_equipment", + state: "gas", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "basketball_equipment", + state: "gas", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "football_equipment", + state: "gas", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "soccer_equipment", + state: "gas", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "tennis_equipment", + state: "gas", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "hockey_equipment", + state: "gas", +}; + +elements.deoderant = { + color: "#f9fbfa", + behavior: behaviors.GAS, + category: "gaga_ball", + state: "gas", +}; \ No newline at end of file From 5f1815e90cfcc5bd34743472a97ce5706d90f039 Mon Sep 17 00:00:00 2001 From: BluBun5193 Date: Thu, 20 Mar 2025 13:59:11 -0400 Subject: [PATCH 22/32] Update mod-list.html --- mod-list.html | 1 + 1 file changed, 1 insertion(+) diff --git a/mod-list.html b/mod-list.html index a2e9ff4e..f4d59fdf 100644 --- a/mod-list.html +++ b/mod-list.html @@ -358,6 +358,7 @@ random_elems.jsCurated randomly generated elementsAlice random_liquids.jsRandomly generates liquids on game loadAlice sbmixup.jsAdds silly elements from a Mix-Up! gamestefanblox +sports_beta.jsBeta version of the upcoming sports.js, adds several sports items, more changes are soon to come!BluBun5193 star_wars.jsAdds various items from Star Wars by DisneySeaPickle754 sus.jsAdds an Among Us crewmateNv7 triggerable_random_powders.jsAdds powders with different abilities, such as heating and coolingAlice From 81100631d61507f7d78b6be171e99cb78bd3194d Mon Sep 17 00:00:00 2001 From: Markol10 Date: Thu, 20 Mar 2025 21:01:06 +0100 Subject: [PATCH 23/32] Add files via upload --- mods/MarkusFoodMod.js | 127 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 mods/MarkusFoodMod.js diff --git a/mods/MarkusFoodMod.js b/mods/MarkusFoodMod.js new file mode 100644 index 00000000..67a27757 --- /dev/null +++ b/mods/MarkusFoodMod.js @@ -0,0 +1,127 @@ +elements.paprika = { + color: "#b22222", + category: "Markus Foods", + behavior: behaviors.POWDER, + state: "solid", + tempHigh: 200, + stateHigh: "ash", + density: 0.4, +}; + +elements.spicy_sauce = { + color: "#a52a2a", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + density: 1.0, + tempHigh: 150, + stateHigh: "smoke", +}; + +elements.pepper = { + color: "#2f1b0c", + category: "Markus Foods", + behavior: behaviors.POWDER, + state: "solid", + density: 0.7, + tempHigh: 200, + stateHigh: "ash", +}; + +elements.chicken_meat = { + color: "#e8a07c", + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 75, + stateHigh: "cooked_chicken", + tempLow: -5, + stateLow: "frozen_chicken", +}; + +elements.cooked_chicken = { + color: "#c18251", + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 200, + stateHigh: "ash", +}; + +elements.frozen_chicken = { + color: "#d1e1ed", + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 0, + stateHigh: "chicken_meat", +}; + +elements.pork_meat = { + color: "#e89a8b", + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 75, + stateHigh: "cooked_pork", + tempLow: -5, + stateLow: "frozen_pork", +}; + +elements.cooked_pork = { + color: "#af7f5d", + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 200, + stateHigh: "ash", +}; + +elements.frozen_pork = { + color: "#c0d4e1", + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 0, + stateHigh: "pork_meat", +}; + +elements.olive_oil = { + color: "#a07d3c", + state: "liquid", + category: "Markus Foods", + behavior: behaviors.LIQUID, + density: 0.9, +}; + +elements.breadcrumbs = { + color: "#e6c27a", + category: "Markus Foods", + behavior: behaviors.POWDER, + state: "solid", + density: 0.4, + tempHigh: 250, + stateHigh: "ash", +}; + +elements.fried_chicken = { + color: ["#c0894f", "#a86a3a", "#d19b52"], + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 350, + stateHigh: "ash", +}; + +elements.breaded_chicken = { + color: "#deb887", + category: "Markus Foods", + behavior: behaviors.SOLID, + state: "solid", + tempHigh: 180, + stateHigh: "fried_chicken", +}; + +elements.chicken_meat.reactions = { + breadcrumbs: { elem1: "breaded_chicken" } +}; From 59a0630e15d908b934b0da78100c316d83a1f8ad Mon Sep 17 00:00:00 2001 From: slweeb <91897291+slweeb@users.noreply.github.com> Date: Sun, 23 Mar 2025 20:18:18 -0400 Subject: [PATCH 24/32] Update mod-list.html --- mod-list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod-list.html b/mod-list.html index f4d59fdf..03eba315 100644 --- a/mod-list.html +++ b/mod-list.html @@ -358,7 +358,7 @@ random_elems.jsCurated randomly generated elementsAlice random_liquids.jsRandomly generates liquids on game loadAlice sbmixup.jsAdds silly elements from a Mix-Up! gamestefanblox -sports_beta.jsBeta version of the upcoming sports.js, adds several sports items, more changes are soon to come!BluBun5193 +sports_beta.jsAdds several sports itemsBluBun5193 star_wars.jsAdds various items from Star Wars by DisneySeaPickle754 sus.jsAdds an Among Us crewmateNv7 triggerable_random_powders.jsAdds powders with different abilities, such as heating and coolingAlice From b6e69df3d67a775d3b8fe26b7932bbcbb0ed2967 Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Tue, 25 Mar 2025 22:38:11 -0700 Subject: [PATCH 25/32] Scales --- mods/nekonicos_stuff.js | 877 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 837 insertions(+), 40 deletions(-) diff --git a/mods/nekonicos_stuff.js b/mods/nekonicos_stuff.js index 4b28ec1f..70169cd6 100644 --- a/mods/nekonicos_stuff.js +++ b/mods/nekonicos_stuff.js @@ -5,38 +5,6 @@ behaviors.SOLIDIFY = function(pixel) { var colorOne = "#ffffff" var colorTwo = "#000000" -viewInfo[8] = { // Neon View - name: "neon", - pixel: function(pixel,ctx) { - if (elements[pixel.element].isColor === true) { - var color = pixel.gradient; - if (color < 0) {color = 0} - if (color > 60) {color = 60} - // logarithmic scale, with coldest being 225 (-50 degrees) and hottest being 0 (6000 degrees) - var hue = Math.round(225 - (Math.log(color)/Math.log(60))*225); - if (hue < 0) {hue = 0} - if (hue > 225) {hue = 225} - drawSquare(ctx,"hsl("+hue+",50%,50%)",pixel.x,pixel.y) - } - } -} - -elements.red = { - color: "#AD1300", - behavior: [ - "XX|XX|XX", - "XX|XX|XX", - "XX|XX|XX", - ], - tool: function(pixel) { - if (elements[pixel.element].isColor == true) { - pixel.gradient += 1 - } - }, - canPlace: false, - category: "tools", -} - elements.colorOne = { tick: function(pixel) { if (pixel.color != colorOne) { @@ -281,6 +249,16 @@ elements.red_ice = { "XX|M1|XX", ], reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, "water":{elem2:"red_ice", chance:0.25}, "steam":{elem2:"red_ice", chance:0.15}, "blood":{elem2:"red_ice", chance:0.25}, @@ -310,6 +288,7 @@ elements.red_ice = { "frog":{elem2:"red_ice_meat", chance:0.15}, "tadpole":{elem2:"red_ice_meat", chance:0.15}, }, + breakInto: "red_snow", tempLow: 0, stateLow: "red_water", category: "solids", @@ -317,14 +296,132 @@ elements.red_ice = { density: 917, } +elements.red_snow = { + color: "#D64765", + behavior: behaviors.POWDER, + reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, + "water":{elem2:"red_ice", chance:0.25}, + "steam":{elem2:"red_ice", chance:0.15}, + "blood":{elem2:"red_ice", chance:0.25}, + "blood_ice":{elem2:"red_ice", chance:0.25}, + "antibody":{elem2:"red_ice", chance:0.25}, + "salt_water":{elem2:"red_ice", chance:0.25}, + "sugar_water":{elem2:"red_ice", chance:0.25}, + "dirty_water":{elem2:"red_ice", chance:0.25}, + "pool_water":{elem2:"red_ice", chance:0.25}, + "slush":{elem2:"red_ice", chance:0.25}, + "seltzer":{elem2:"red_ice", chance:0.25}, + "juice":{elem2:"red_ice", chance:0.25}, + "soda":{elem2:"red_ice", chance:0.25}, + "milk":{elem2:"red_ice", chance:0.25}, + "slime":{elem2:"red_ice", chance:0.25}, + "tea":{elem2:"red_ice", chance:0.25}, + "coffee":{elem2:"red_ice", chance:0.25}, + "neutral_acid":{elem2:"red_ice", chance:0.25}, + "infection":{elem2:"red_ice", chance:0.25}, + "meat":{elem2:"red_ice_meat", chance:0.15}, + "skin":{elem2:"red_ice_meat", chance:0.075}, + "body":{elem2:"red_ice_meat", chance:0.04}, + "head":{elem2:"red_ice_meat", chance:0.05}, + "frozen_meat":{elem2:"red_ice_meat", chance:0.15}, + "fish":{elem2:"red_ice_meat", chance:0.15}, + "bird":{elem2:"red_ice_meat", chance:0.15}, + "frog":{elem2:"red_ice_meat", chance:0.15}, + "tadpole":{elem2:"red_ice_meat", chance:0.15}, + }, + temp: 5, + tempLow: -18, + tempHigh: 100, + stateHigh: "packed_red_snow", + stateLow: "red_water", + category: "land", + state: "solid", + density: 100 +} + +elements.packed_red_snow = { + color: "#CC3F5F", + behavior: behaviors.SUPPORTPOWDER, + reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, + "water":{elem2:"red_ice", chance:0.25}, + "steam":{elem2:"red_ice", chance:0.15}, + "blood":{elem2:"red_ice", chance:0.25}, + "blood_ice":{elem2:"red_ice", chance:0.25}, + "antibody":{elem2:"red_ice", chance:0.25}, + "salt_water":{elem2:"red_ice", chance:0.25}, + "sugar_water":{elem2:"red_ice", chance:0.25}, + "dirty_water":{elem2:"red_ice", chance:0.25}, + "pool_water":{elem2:"red_ice", chance:0.25}, + "slush":{elem2:"red_ice", chance:0.25}, + "seltzer":{elem2:"red_ice", chance:0.25}, + "juice":{elem2:"red_ice", chance:0.25}, + "soda":{elem2:"red_ice", chance:0.25}, + "milk":{elem2:"red_ice", chance:0.25}, + "slime":{elem2:"red_ice", chance:0.25}, + "tea":{elem2:"red_ice", chance:0.25}, + "coffee":{elem2:"red_ice", chance:0.25}, + "neutral_acid":{elem2:"red_ice", chance:0.25}, + "infection":{elem2:"red_ice", chance:0.25}, + "meat":{elem2:"red_ice_meat", chance:0.15}, + "skin":{elem2:"red_ice_meat", chance:0.075}, + "body":{elem2:"red_ice_meat", chance:0.04}, + "head":{elem2:"red_ice_meat", chance:0.05}, + "frozen_meat":{elem2:"red_ice_meat", chance:0.15}, + "fish":{elem2:"red_ice_meat", chance:0.15}, + "bird":{elem2:"red_ice_meat", chance:0.15}, + "frog":{elem2:"red_ice_meat", chance:0.15}, + "tadpole":{elem2:"red_ice_meat", chance:0.15}, + }, + temp: 5, + tempLow: -20, + tempHigh: 200, + stateHigh: "red_ice", + stateLow: "red_water", + breakInto: "red_snow", + category: "land", + state: "solid", + density: 400, + hidden: true +} + elements.red_ice_meat = { color: "#AC3536", behavior: [ - "XX|XX|XX", - "XX|XX|XX", - "XX|M1|XX", + "XX|CH:frozen_meat,meat>red_ice_meat%1|XX", + "CH:frozen_meat,meat>red_ice_meat%1|XX|CH:frozen_meat,meat>red_ice_meat%1", + "XX|M1 AND CH:frozen_meat,meat>red_ice_meat%1|XX", ], reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, "water":{elem2:"red_ice", chance:0.025}, "steam":{elem2:"red_ice", chance:0.015}, "blood":{elem2:"red_ice", chance:0.025}, @@ -354,8 +451,8 @@ elements.red_ice_meat = { "frog":{elem2:"red_ice_meat", chance:0.015}, "tadpole":{elem2:"red_ice_meat", chance:0.015}, }, - tempHigh: 0, - stateHigh: "meat", + tempLow: -100, + stateLow: "meat", category:"food", hidden:true, state: "solid", @@ -363,10 +460,131 @@ elements.red_ice_meat = { isFood: true } +elements.red_ice_plant = { + color: "#735958", + reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, + "water":{elem2:"red_ice", chance:0.025}, + "steam":{elem2:"red_ice", chance:0.015}, + "blood":{elem2:"red_ice", chance:0.025}, + "blood_ice":{elem2:"red_ice", chance:0.25}, + "antibody":{elem2:"red_ice", chance:0.025}, + "salt_water":{elem2:"red_ice", chance:0.025}, + "sugar_water":{elem2:"red_ice", chance:0.025}, + "dirty_water":{elem2:"red_ice", chance:0.025}, + "pool_water":{elem2:"red_ice", chance:0.025}, + "slush":{elem2:"red_ice", chance:0.025}, + "seltzer":{elem2:"red_ice", chance:0.025}, + "juice":{elem2:"red_ice", chance:0.025}, + "soda":{elem2:"red_ice", chance:0.025}, + "milk":{elem2:"red_ice", chance:0.025}, + "slime":{elem2:"red_ice", chance:0.025}, + "tea":{elem2:"red_ice", chance:0.025}, + "coffee":{elem2:"red_ice", chance:0.025}, + "neutral_acid":{elem2:"red_ice", chance:0.025}, + "infection":{elem2:"red_ice", chance:0.025}, + "meat":{elem2:"red_ice_meat", chance:0.015}, + "skin":{elem2:"red_ice_meat", chance:0.0075}, + "body":{elem2:"red_ice_meat", chance:0.004}, + "head":{elem2:"red_ice_meat", chance:0.005}, + "frozen_meat":{elem2:"red_ice_meat", chance:0.015}, + "fish":{elem2:"red_ice_meat", chance:0.015}, + "bird":{elem2:"red_ice_meat", chance:0.015}, + "frog":{elem2:"red_ice_meat", chance:0.015}, + "tadpole":{elem2:"red_ice_meat", chance:0.015}, + }, + behavior: behaviors.WALL, + category:"life", + tempHigh: 300, + stateHigh: "fire", + burn:85, + burnTime:45, + temp: 2.66, + tempLow: -7, + stateLow: "red_plant", + state: "solid", + density: 1050, + hidden: true +} + +elements.red_plant = { + color: ["#AA3527","#AA3227","#AA2C27","#A11D1D"], + reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, + "water":{elem2:"red_ice", chance:0.025}, + "steam":{elem2:"red_ice", chance:0.015}, + "blood":{elem2:"red_ice", chance:0.025}, + "blood_ice":{elem2:"red_ice", chance:0.25}, + "antibody":{elem2:"red_ice", chance:0.025}, + "salt_water":{elem2:"red_ice", chance:0.025}, + "sugar_water":{elem2:"red_ice", chance:0.025}, + "dirty_water":{elem2:"red_ice", chance:0.025}, + "pool_water":{elem2:"red_ice", chance:0.025}, + "slush":{elem2:"red_ice", chance:0.025}, + "seltzer":{elem2:"red_ice", chance:0.025}, + "juice":{elem2:"red_ice", chance:0.025}, + "soda":{elem2:"red_ice", chance:0.025}, + "milk":{elem2:"red_ice", chance:0.025}, + "slime":{elem2:"red_ice", chance:0.025}, + "tea":{elem2:"red_ice", chance:0.025}, + "coffee":{elem2:"red_ice", chance:0.025}, + "neutral_acid":{elem2:"red_ice", chance:0.025}, + "infection":{elem2:"red_ice", chance:0.025}, + "meat":{elem2:"red_ice_meat", chance:0.015}, + "skin":{elem2:"red_ice_meat", chance:0.0075}, + "body":{elem2:"red_ice_meat", chance:0.004}, + "head":{elem2:"red_ice_meat", chance:0.005}, + "frozen_meat":{elem2:"red_ice_meat", chance:0.015}, + "fish":{elem2:"red_ice_meat", chance:0.015}, + "bird":{elem2:"red_ice_meat", chance:0.015}, + "frog":{elem2:"red_ice_meat", chance:0.015}, + "tadpole":{elem2:"red_ice_meat", chance:0.015}, + }, + behavior: [ + "XX|XX|XX", + "XX|XX|XX", + "M2|M1|M2", + ], + category:"life", + tempHigh: 2, + stateHigh: "red_ice_plant", + state: "solid", + density: 1050, + hidden: true +} + elements.red_water = { color: "#880808", behavior: behaviors.LIQUID, reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, "water":{elem2:"red_ice"}, "blood":{elem2:"red_ice"}, "blood_ice":{elem2:"red_ice", chance:0.25}, @@ -395,20 +613,37 @@ elements.red_water = { "frog":{elem2:"red_ice_meat", chance:0.015}, "tadpole":{elem2:"red_ice_meat", chance:0.015}, }, - temp: -20, - tempHigh: 0, - stateHigh: "red_ice", tempLow: -100, stateLow: "red_steam", + tempHigh: 0, + stateHigh: "red_ice", category: "liquids", state: "liquid", density: 997, + conduct: 0.02, + temp: -20, + stain: -0.5, + extinguish: true } elements.red_steam = { color: "#F88379", behavior: behaviors.GAS, reactions: { + "red_steam": { elem1: "red_cloud", elem2: "red_cloud", chance:0.05, "y":[0,15], "setting":"clouds" }, + "red_rain": { elem1: "red_rain", chance:0.4, "y":[0,12], "setting":"clouds" }, + "red_cloud": { elem1: "red_cloud", chance:0.4, "y":[0,12], "setting":"clouds" }, + "red_snow_cloud": { elem1: "red_rain_cloud", chance:0.4, "y":[0,12], "setting":"clouds" }, + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "salt_ice":{elem2:"red_ice", chance:0.25}, + "sugar_ice":{elem2:"red_ice", chance:0.25}, + "juice_ice":{elem2:"red_ice", chance:0.25}, + "dirty_ice":{elem2:"red_ice", chance:0.25}, + "ice":{elem2:"red_ice", chance:0.25}, "water":{elem2:"red_ice"}, "blood":{elem2:"red_ice"}, "blood_ice":{elem2:"red_ice", chance:0.25}, @@ -445,6 +680,165 @@ elements.red_steam = { density: 0.6, } +elements.red_cloud = { + color: "#E8ABAB", + behavior: [ + "XX|XX|XX", + "XX|CO:1%5|M1%2.5 AND BO", + "XX|XX|XX", + ], + reactions: { + "red_rain": { elem1:"red_rain", temp1: 20 }, + "red_cloud": { elem1:"red_rain", elem2:"red_rain", temp1:20, temp2:20, charged:true }, + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "water":{elem2:"red_ice"}, + "blood":{elem2:"red_ice"}, + "blood_ice":{elem2:"red_ice", chance:0.25}, + "antibody":{elem2:"red_ice"}, + "salt_water":{elem2:"red_ice"}, + "sugar_water":{elem2:"red_ice"}, + "dirty_water":{elem2:"red_ice"}, + "pool_water":{elem2:"red_ice"}, + "slush":{elem2:"red_ice"}, + "seltzer":{elem2:"red_ice"}, + "juice":{elem2:"red_ice"}, + "soda":{elem2:"red_ice"}, + "milk":{elem2:"red_ice"}, + "slime":{elem2:"red_ice"}, + "tea":{elem2:"red_ice"}, + "coffee":{elem2:"red_ice"}, + "neutral_acid":{elem2:"red_ice"}, + "infection":{elem2:"red_ice"}, + "meat":{elem2:"red_ice_meat", chance:0.015}, + "skin":{elem2:"red_ice_meat", chance:0.0075}, + "body":{elem2:"red_ice_meat", chance:0.004}, + "head":{elem2:"red_ice_meat", chance:0.005}, + "frozen_meat":{elem2:"red_ice_meat", chance:0.015}, + "fish":{elem2:"red_ice_meat", chance:0.015}, + "bird":{elem2:"red_ice_meat", chance:0.015}, + "frog":{elem2:"red_ice_meat", chance:0.015}, + "tadpole":{elem2:"red_ice_meat", chance:0.015}, + }, + category:"gases", + temp: -110, + tempHigh: -100, + stateHigh: "red_rain", + state: "gas", + breakInto: "red_rain", + density: 0.4, + ignoreAir: true, + conduct: 0.03 +} + +elements.red_rain = { + color: "#C27A79", + behavior: [ + "XX|XX|XX", + "XX|CH:red_water%0.05|M1%2.5 AND BO", + "CR:electric%0.05|CR:electric%0.05|CR:electric%0.05", + ], + reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "water":{elem2:"red_ice"}, + "blood":{elem2:"red_ice"}, + "blood_ice":{elem2:"red_ice", chance:0.25}, + "antibody":{elem2:"red_ice"}, + "salt_water":{elem2:"red_ice"}, + "sugar_water":{elem2:"red_ice"}, + "dirty_water":{elem2:"red_ice"}, + "pool_water":{elem2:"red_ice"}, + "slush":{elem2:"red_ice"}, + "seltzer":{elem2:"red_ice"}, + "juice":{elem2:"red_ice"}, + "soda":{elem2:"red_ice"}, + "milk":{elem2:"red_ice"}, + "slime":{elem2:"red_ice"}, + "tea":{elem2:"red_ice"}, + "coffee":{elem2:"red_ice"}, + "neutral_acid":{elem2:"red_ice"}, + "infection":{elem2:"red_ice"}, + "meat":{elem2:"red_ice_meat", chance:0.015}, + "skin":{elem2:"red_ice_meat", chance:0.0075}, + "body":{elem2:"red_ice_meat", chance:0.004}, + "head":{elem2:"red_ice_meat", chance:0.005}, + "frozen_meat":{elem2:"red_ice_meat", chance:0.015}, + "fish":{elem2:"red_ice_meat", chance:0.015}, + "bird":{elem2:"red_ice_meat", chance:0.015}, + "frog":{elem2:"red_ice_meat", chance:0.015}, + "tadpole":{elem2:"red_ice_meat", chance:0.015}, + }, + category:"gases", + temp: -70, + tempLow: -100, + stateLow: "red_cloud", + breakInto: "water", + tempHigh: 0, + stateHigh: "red_snow_cloud", + state: "gas", + density: 0.5, + ignoreAir: true, + conduct: 0.03 +} + +elements.red_snow_cloud = { + color: "#CC8482", + behavior: [ + "XX|XX|XX", + "XX|CH:red_snow%0.05|M1%2.5 AND BO", + "XX|XX|XX", + ], + category:"gases", + temp: 10, + tempLow: -30, + stateLow: "red_rain", + state: "gas", + density: 0.55, + ignoreAir: true, + conduct: 0.01, + reactions: { + "rain_cloud": { elem2: "red_rain", chance:0.4 }, + "cloud": { elem2: "red_cloud", chance:0.4, chance:0.4 }, + "snow_cloud": { elem2: "red_snow_cloud", chance:0.4 }, + "frozen_plant":{elem2:"red_ice_plant", chance:0.025}, + "dead_plant":{elem2:"red_plant", chance:0.025}, + "water":{elem2:"red_ice"}, + "blood":{elem2:"red_ice"}, + "blood_ice":{elem2:"red_ice", chance:0.25}, + "antibody":{elem2:"red_ice"}, + "salt_water":{elem2:"red_ice"}, + "sugar_water":{elem2:"red_ice"}, + "dirty_water":{elem2:"red_ice"}, + "pool_water":{elem2:"red_ice"}, + "slush":{elem2:"red_ice"}, + "seltzer":{elem2:"red_ice"}, + "juice":{elem2:"red_ice"}, + "soda":{elem2:"red_ice"}, + "milk":{elem2:"red_ice"}, + "slime":{elem2:"red_ice"}, + "tea":{elem2:"red_ice"}, + "coffee":{elem2:"red_ice"}, + "neutral_acid":{elem2:"red_ice"}, + "infection":{elem2:"red_ice"}, + "meat":{elem2:"red_ice_meat", chance:0.015}, + "skin":{elem2:"red_ice_meat", chance:0.0075}, + "body":{elem2:"red_ice_meat", chance:0.004}, + "head":{elem2:"red_ice_meat", chance:0.005}, + "frozen_meat":{elem2:"red_ice_meat", chance:0.015}, + "fish":{elem2:"red_ice_meat", chance:0.015}, + "bird":{elem2:"red_ice_meat", chance:0.015}, + "frog":{elem2:"red_ice_meat", chance:0.015}, + "tadpole":{elem2:"red_ice_meat", chance:0.015}, + }, +} + elements.graphite = { color: "#2F2F33", colorKey: { @@ -760,3 +1154,406 @@ elements.graphite_dust = { density: 1830, stain: 0.6 } + +scaleLimit = 0 + +elements.pixel_scale = { + color: "#89796C", + category: "machines", + behavior: behaviors.WALL, + tempHigh: 3000, + stateHigh: "molten_steel", + density: 7850, + movable: false, + onSelect: function() { + var answer1 = prompt("Input the desired pixel limit of this scale. It will not work if you place multiple limits while paused.",(scaleLimit||undefined)); + if (!answer1) { return } + scaleLimit = (answer1); + }, + tick: function(pixel){ + if (pixel.start === pixelTicks) { + pixel.scaleLimit = scaleLimit + } + if (isEmpty(pixel.x-1,pixel.y) || pixelMap[pixel.x-1][pixel.y].element !== pixel.element) { + pixel.scaleList = [] + for (let i = 1; i < width; i++){ + if (!isEmpty(pixel.x+i, pixel.y, true)) { + if (pixelMap[pixel.x+i][pixel.y].element === pixel.element){ + let distance2 = grabPixels(pixelMap[pixel.x+i][pixel.y]); + pixel.scaleList.push((distance2.top - 1)); + } + } + } + pixel.scaleSum = 0 + for (let i = 0; i < pixel.scaleList.length; i++){ + if (pixel.scaleList[i]){ + pixel.scaleSum += (pixel.scaleList[i]) + } + } + let distance = grabPixels(pixel); + pixel.scaleSum += (distance.top - 1) + if (pixel.scaleSum > (pixel.scaleLimit - 1)) { + if (!isEmpty(pixel.x, pixel.y-1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y-1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x, pixel.y+1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y+1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x-1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x-1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x+1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x+1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + } + } + } +} + +kiloLimit = 0 + +elements.weight_scale = { + color: "#7A7977", + category: "machines", + behavior: behaviors.WALL, + tempHigh: 3000, + stateHigh: "molten_steel", + movable: false, + onSelect: function() { + var answer1 = prompt("Input the desired kilogram limit of this scale. It will not work if you place multiple limits while paused.",(kiloLimit||1602)); + if (!answer1) { return } + kiloLimit = (answer1); + }, + tick: function(pixel){ + if (pixel.start === pixelTicks) { + pixel.scaleLimit = kiloLimit + } + if (isEmpty(pixel.x-1,pixel.y) || !outOfBounds(pixel.x-1,pixel.y) || pixelMap[pixel.x-1][pixel.y].element !== pixel.element) { + pixel.scaleList = [] + for (let i = 1; i < width; i++){ + if (!isEmpty(pixel.x+i, pixel.y, true)) { + if (pixelMap[pixel.x+i][pixel.y].element === pixel.element){ + let distance2 = grabWeights(pixelMap[pixel.x+i][pixel.y]); + pixel.scaleList.push((distance2.weight)); + } + } + } + pixel.scaleSum = 0 + for (let i = 0; i < pixel.scaleList.length; i++){ + if (pixel.scaleList[i]){ + pixel.scaleSum += (pixel.scaleList[i]) + } + } + let distance = grabWeights(pixel); + pixel.scaleSum += (distance.weight) + if (pixel.scaleSum > (pixel.scaleLimit - 1)) { + if (!isEmpty(pixel.x, pixel.y-1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y-1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x, pixel.y+1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y+1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x-1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x-1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x+1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x+1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + } + } + } +} + +scanLimit = 0 +scanningLimit = 0 + +elements.pixel_scanner = { + color: "#799187", + category: "machines", + behavior: behaviors.WALL, + tempHigh: 3000, + stateHigh: ["molten_steel","molten_steel","molten_steel","flash"], + density: 7850, + movable: false, + onSelect: function() { + var answer1 = prompt("Input the desired pixel limit of this scanner. It will not work if you place multiple limits while paused.",(scanLimit||5)); + if (!answer1) { return } + scanLimit = (answer1); + var answer2 = prompt("Input the desired scanning limit of this scanner. It will not work if you place multiple limits while paused.",(scanningLimit||10)); + if (!answer2) { return } + scanningLimit = (answer2); + }, + tick: function(pixel){ + if (pixel.start === pixelTicks) { + pixel.scaleLimit = scanLimit + pixel.scanningLimit = scanningLimit + } + if (isEmpty(pixel.x-1,pixel.y) || pixelMap[pixel.x-1][pixel.y].element !== pixel.element) { + pixel.scaleList = [] + for (let i = 1; i < width; i++){ + if (!isEmpty(pixel.x+i, pixel.y, true)) { + if (pixelMap[pixel.x+i][pixel.y].element === pixel.element){ + let distance2 = grabAllPixels(pixelMap[pixel.x+i][pixel.y]); + pixel.scaleList.push((distance2.pixels - 1)); + } + } + } + pixel.scaleSum = 0 + for (let i = 0; i < pixel.scaleList.length; i++){ + if (pixel.scaleList[i]){ + pixel.scaleSum += (pixel.scaleList[i]) + } + } + let distance = grabAllPixels(pixel); + pixel.scaleSum += (distance.pixels - 1) + if (pixel.scaleSum > (pixel.scaleLimit - 1)) { + if (!isEmpty(pixel.x, pixel.y-1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y-1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x, pixel.y+1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y+1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x-1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x-1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x+1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x+1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + } + } + } +} + +kiloScanLimit = 0 +kiloScanningLimit = 0 + +elements.weight_scanner = { + color: "#6D9190", + category: "machines", + behavior: behaviors.WALL, + tempHigh: 3000, + stateHigh: "molten_steel", + movable: false, + onSelect: function() { + var answer1 = prompt("Input the desired kilogram limit of this scanner. It will not work if you place multiple limits while paused.",(kiloScanLimit||1602)); + if (!answer1) { return } + kiloScanLimit = (answer1); + var answer2 = prompt("Input the desired scanning limit of this scanner. It will not work if you place multiple limits while paused.",(kiloScanningLimit||10)); + if (!answer2) { return } + kiloScanningLimit = (answer2); + }, + tick: function(pixel){ + if (pixel.start === pixelTicks) { + pixel.scaleLimit = kiloScanLimit + pixel.scanningLimit = kiloScanningLimit + } + if (isEmpty(pixel.x-1,pixel.y) || pixelMap[pixel.x-1][pixel.y].element !== pixel.element) { + pixel.scaleList = [] + for (let i = 1; i < width; i++){ + if (!isEmpty(pixel.x+i, pixel.y, true)) { + if (pixelMap[pixel.x+i][pixel.y].element === pixel.element){ + let distance2 = grabAllWeights(pixelMap[pixel.x+i][pixel.y]); + pixel.scaleList.push((distance2.weight)); + } + } + } + pixel.scaleSum = 0 + for (let i = 0; i < pixel.scaleList.length; i++){ + if (pixel.scaleList[i]){ + pixel.scaleSum += (pixel.scaleList[i]) + } + } + let distance = grabAllWeights(pixel); + pixel.scaleSum += (distance.weight) + if (pixel.scaleSum > (pixel.scaleLimit - 1)) { + if (!isEmpty(pixel.x, pixel.y-1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y-1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x, pixel.y+1, true)) { + var hitPixel = pixelMap[pixel.x][pixel.y+1] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x-1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x-1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + if (!isEmpty(pixel.x+1, pixel.y, true)) { + var hitPixel = pixelMap[pixel.x+1][pixel.y] + doElectricity(hitPixel); + if (elements[hitPixel.element].conduct) { + hitPixel.charge = 0.5 + } + } + } + } + } +} + +grabPixels = function(pixel){ + let element = pixel.element + let results = {} + for (let i = 0; i < height; i++) { + if (isEmpty(pixel.x, pixel.y-i, true)){ + results.top = i + break; + } + } + return results +} + +grabAllPixels = function(pixel){ + let element = pixel.element + let results = {} + results.pixels = 0 + for (let i = 0; i < height; i++) { + if (!isEmpty(pixel.x, pixel.y-i, true)){ + results.pixels += 1 + } + if (i > (pixel.scanningLimit - 1)){ + break; + } + } + return results +} + +grabWeights = function(pixel){ + let element = pixel.element + let results = {} + let weight = 0 + for (let i = 0; i < height; i++){ + if (!isEmpty(pixel.x, pixel.y-i, true)){ + if (elements[pixelMap[pixel.x][pixel.y-i].element].density && !weight) { + weight += elements[pixelMap[pixel.x][pixel.y-i].element].density + } + else if (elements[pixelMap[pixel.x][pixel.y-i].element].density && weight) { + weight += elements[pixelMap[pixel.x][pixel.y-i].element].density + } + else if (!elements[pixelMap[pixel.x][pixel.y-i].element].density) { + let result; + if (elements[pixelMap[pixel.x][pixel.y-i].element].breakInto !== undefined) { + if (Array.isArray(elements[pixelMap[pixel.x][pixel.y-i].element].breakInto)) { + result = elements[pixelMap[pixel.x][pixel.y-i].element].breakInto[Math.floor(Math.random() * elements[pixel.element].breakInto.length)]; + weight += elements.result.density + } + else { + result = elements[pixelMap[pixel.x][pixel.y-i].element].breakInto; + weight += elements.result.density + } + } + } + } + if (isEmpty(pixel.x, pixel.y-i, true)){ + results.top = i + if (isEmpty(pixel.x, pixel.y-i, true)){ + results.topelement = "air" + } else { + results.topelement = pixelMap[pixel.x][pixel.y-i].element + } + break; + } + } + results.weight = weight + return results +} + +grabAllWeights = function(pixel){ + let element = pixel.element + let results = {} + let weight = 0 + for (let i = 0; i < height; i++){ + if (!isEmpty(pixel.x, pixel.y-i, true)){ + if (elements[pixelMap[pixel.x][pixel.y-i].element].density && !weight) { + weight = elements[pixelMap[pixel.x][pixel.y-i].element].density + } + else if (elements[pixelMap[pixel.x][pixel.y-i].element].density && weight) { + weight += elements[pixelMap[pixel.x][pixel.y-i].element].density + } + else if (!elements[pixelMap[pixel.x][pixel.y-i].element].density) { + let result; + if (elements[pixelMap[pixel.x][pixel.y-i].element].breakInto !== undefined) { + if (Array.isArray(elements[pixelMap[pixel.x][pixel.y-i].element].breakInto)) { + result = elements[pixelMap[pixel.x][pixel.y-i].element].breakInto[Math.floor(Math.random() * elements[pixel.element].breakInto.length)]; + weight += elements.result.density + } + else { + result = elements[pixelMap[pixel.x][pixel.y-i].element].breakInto; + weight += elements.result.density + } + } + } + } + if (i > (pixel.scanningLimit - 1)){ + break; + } + } + results.weight = weight + return results +} + +/*elements.Cherries_Ceri_Moji = { + color: "#fcd1d7", + category: Student, + state: High_School, + behavior: [Shy, Introverted, Easily_Excited, Kind], + pronouns: [She,Her,Herself], + sexuality: [Panromantic, Asexual], + desc: "Ceri is a 16 year old high school student who loves cats" +}*/ From 38ad56b74eacc7e1ff8600bdf08b5de4313a2f0c Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Tue, 25 Mar 2025 22:41:16 -0700 Subject: [PATCH 26/32] Update mod-list.html --- mod-list.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mod-list.html b/mod-list.html index 03eba315..233cef4b 100644 --- a/mod-list.html +++ b/mod-list.html @@ -158,6 +158,7 @@ extra_element_info.jsAdds descriptions to various vanilla elements. Used to provide the functionality that desc now does before it was added to vanillaMelecie extrasaveslots.jsAdds extra saves slots !SAVE IMPORTANT SAVES AS FILES!Jayd find.jsAdds a find mode that highlights a chosen element as pulsating red and yellow (read commit description)Alice +human_friendly_design.jsMakes the drag and mix tools not kill humans.Nekonico insane_random_events.jsMassively buffs random eventsAlice jaydsfunctions.jsAdds extra toolsJayd moretools.jsAdds more temperature-modifying tools (±10/tick, ±50/tick, and absolute zero tools)Sightnado @@ -237,6 +238,7 @@ fueled_generators.jsFuel powered generators. gameOfLife.jsConway's Game of Life on a screenggod heatshield.jsadds heatshields, makes plasma coolerTaterbob +human_friendly_design.jsMakes pipes and portals not kill humans, as well as making drag and mix not kill humans.Nekonico logicgates.jsAdds predictable electricity and logic gatesnousernamefound note_block.jsAdds musical Note BlocksAlice nousersthings.jsDestroyable machines, pipe variants, filters, and morenousernamefound @@ -344,6 +346,7 @@ funny_solid.jsAdds fecesAlice funnynames.jsAdds various ways to mess with the names of elementsnousernamefound haseulite.jsAdds Loona-related materials with various propertiesAlice +human_friendly_design.jsMakes pipes and portals not kill humans, as well as making drag and mix not kill humans.Nekonico lactose_intolerance_and_celiac.jsMakes humans explode on contact with milk, wheat, bread, or toastNubo318 lattice_filler.jsAdds a combination of lattice and filler and a destructive variantSuss liquid_mixing.jsAllows liquids to mix colors dynamicallyNekonico @@ -353,7 +356,7 @@ minecraft.jsAdds several things from MinecraftStellarX20, nousernamefound minesweeper.jsA subpar implementation of MinesweeperAlice musicalfruit.jsHumans get gas from eating Beansmollthecoder -nekonicos_stuff.jsSome random stuff like graphite, oobleck, and red iceNekonico +nekonicos_stuff.jsSome random stuff like graphite, oobleck, and red ice, as well as many machines.Nekonico prideflags.jsAdds some pride flags to the gameAdora random_elems.jsCurated randomly generated elementsAlice random_liquids.jsRandomly generates liquids on game loadAlice From 49921c1f7ff02fabdfcbf9d401d1d1f4c891dad6 Mon Sep 17 00:00:00 2001 From: BluBun5193 Date: Wed, 26 Mar 2025 11:26:44 -0400 Subject: [PATCH 27/32] Update sports_beta.js --- mods/sports_beta.js | 73 ++++++++------------------------------------- 1 file changed, 12 insertions(+), 61 deletions(-) diff --git a/mods/sports_beta.js b/mods/sports_beta.js index 69ec8bc1..55cd9204 100644 --- a/mods/sports_beta.js +++ b/mods/sports_beta.js @@ -1,49 +1,49 @@ elements.softball = { color: "#ffe300", behavior: behaviors.BOUNCY, - category: "softball_equipment", + category: "softball", state: "solid", }; elements.baseball = { color: "#eae7dc", behavior: behaviors.BOUNCY, - category: "baseball_equipment", + category: "baseball", state: "solid", }; elements.basketball = { color: "#e77f1c", behavior: behaviors.BOUNCY, - category: "basketball_equipment", + category: "basketball", state: "solid", }; elements.football = { color: "#ac5541", behavior: behaviors.BOUNCY, - category: "football_equipment", + category: "football", state: "solid", }; elements.soccer_ball = { color: "#f9fbfa", behavior: behaviors.BOUNCY, - category: "soccer_equipment", + category: "soccer", state: "solid", }; elements.tennis_ball = { color: "#9ab973", behavior: behaviors.BOUNCY, - category: "tennis_equipment", + category: "tennis", state: "solid", }; elements.puck = { color: "#180902", behavior: behaviors.BOUNCY, - category: "hockey_equipment", + category: "hockey", state: "solid", }; @@ -54,58 +54,9 @@ elements.dodge_ball = { state: "solid", }; -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "softball_equipment", - state: "gas", +elements.deodorant = { + color: "#def2fc", + behavior: behaviors.DGAS + category: "gases", + state: "gas", }; - -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "baseball_equipment", - state: "gas", -}; - -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "basketball_equipment", - state: "gas", -}; - -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "football_equipment", - state: "gas", -}; - -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "soccer_equipment", - state: "gas", -}; - -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "tennis_equipment", - state: "gas", -}; - -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "hockey_equipment", - state: "gas", -}; - -elements.deoderant = { - color: "#f9fbfa", - behavior: behaviors.GAS, - category: "gaga_ball", - state: "gas", -}; \ No newline at end of file From 6f4ca51212b3a6e56375f1cea6c9dbb56055c8e7 Mon Sep 17 00:00:00 2001 From: Markol10 Date: Wed, 26 Mar 2025 18:19:50 +0100 Subject: [PATCH 28/32] Update MarkusFoodMod.js --- mods/MarkusFoodMod.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MarkusFoodMod.js b/mods/MarkusFoodMod.js index 67a27757..ff772287 100644 --- a/mods/MarkusFoodMod.js +++ b/mods/MarkusFoodMod.js @@ -18,7 +18,7 @@ elements.spicy_sauce = { stateHigh: "smoke", }; -elements.pepper = { +elements.black_pepper = { color: "#2f1b0c", category: "Markus Foods", behavior: behaviors.POWDER, From c5537803e08693370843c0b1e16bc6fda4fa9065 Mon Sep 17 00:00:00 2001 From: Markol10 Date: Wed, 26 Mar 2025 19:12:56 +0100 Subject: [PATCH 29/32] Update MarkusFoodMod.js --- mods/MarkusFoodMod.js | 239 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 223 insertions(+), 16 deletions(-) diff --git a/mods/MarkusFoodMod.js b/mods/MarkusFoodMod.js index ff772287..b040f366 100644 --- a/mods/MarkusFoodMod.js +++ b/mods/MarkusFoodMod.js @@ -6,6 +6,7 @@ elements.paprika = { tempHigh: 200, stateHigh: "ash", density: 0.4, + isFood: true, }; elements.spicy_sauce = { @@ -16,6 +17,7 @@ elements.spicy_sauce = { density: 1.0, tempHigh: 150, stateHigh: "smoke", + isFood: true, }; elements.black_pepper = { @@ -26,72 +28,71 @@ elements.black_pepper = { density: 0.7, tempHigh: 200, stateHigh: "ash", + isFood: true, }; elements.chicken_meat = { color: "#e8a07c", category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 75, stateHigh: "cooked_chicken", tempLow: -5, stateLow: "frozen_chicken", + isFood: true, }; elements.cooked_chicken = { color: "#c18251", category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 200, stateHigh: "ash", + isFood: true, }; elements.frozen_chicken = { color: "#d1e1ed", category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 0, stateHigh: "chicken_meat", + isFood: true, }; elements.pork_meat = { color: "#e89a8b", category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 75, stateHigh: "cooked_pork", tempLow: -5, stateLow: "frozen_pork", + isFood: true, }; elements.cooked_pork = { color: "#af7f5d", category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 200, stateHigh: "ash", + isFood: true, }; elements.frozen_pork = { color: "#c0d4e1", category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 0, stateHigh: "pork_meat", -}; - -elements.olive_oil = { - color: "#a07d3c", - state: "liquid", - category: "Markus Foods", - behavior: behaviors.LIQUID, - density: 0.9, + isFood: true, }; elements.breadcrumbs = { @@ -102,26 +103,232 @@ elements.breadcrumbs = { density: 0.4, tempHigh: 250, stateHigh: "ash", + isFood: true, }; elements.fried_chicken = { color: ["#c0894f", "#a86a3a", "#d19b52"], category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 350, stateHigh: "ash", + isFood: true, }; elements.breaded_chicken = { color: "#deb887", category: "Markus Foods", - behavior: behaviors.SOLID, + behavior: behaviors.STURDYPOWDER, state: "solid", tempHigh: 180, stateHigh: "fried_chicken", + isFood: true, }; elements.chicken_meat.reactions = { breadcrumbs: { elem1: "breaded_chicken" } }; + +const newFoods = { + cinnamon: "#8B5A2B", + garlic: "#FFF5E1", + onion: "#D4A76A", + tomato: "#FF6347", + lettuce: "#32CD32", + potato: "#D2B48C", + cooked_potato: "#E3C16F", + chili_powder: "#FF4500", + carrot: "#FFA500", + cucumber: "#4CAF50", + salt: "#FFFFFF", + sugar: "#FFF5EE", + honey: "#FFD700", + cheese: "#FFD700", + butter: "#FFDD44", + egg: "#FFF5C3", + cooked_egg: "#F4C542", + banana: "#FFE135", + apple: "#FF0000", + blueberry: "#4B0082", + strawberry: "#FF4D4D", + watermelon: "#FF6666", + grapes: "#6A0DAD", + avocado: "#568203", + basil: "#228B22", + oregano: "#6B8E23", + ginger: "#D2691E", + turmeric: "#E49B0F", + nutmeg: "#8B4513", + clove: "#5C4033", + cabbage: "#4CBB17", + cauliflower: "#FFFAF0", + mushroom: "#8B4513", + spinach: "#2E8B57", + radish: "#F5A9B8", + broccoli: "#228B22", + green_peas: "#7CFC00", + bell_pepper: "#32CD32", + sweet_potato: "#FF7F50", + coconut: "#FFF8DC", + lemon: "#FFFACD", + lime: "#98FB98", + kiwi: "#32CD32", + pear: "#9ACD32", + peach: "#FFDAB9", + plum: "#8E4585", + pomegranate: "#8B0000", + fig: "#8B4513", + date: "#A52A2A", + raisin: "#6B4226", + apricot: "#FBCEB1", + coconut_milk: "#FFF0F5", + yogurt: "#F5FFFA", + cream: "#FFF8DC", + peanut_butter: "#C8A2A8", + sesame_seeds: "#FFF5EE", + tahini: "#F4A460", + almond: "#D2691E", + walnut: "#8B4513", + pistachio: "#4B8A3D", + cashew: "#D2B48C", + hazelnut: "#8B5A2B", + macadamia: "#E1C699", + pine_nuts: "#FFDDC1", + sunflower_seeds: "#FFF8DC", + chia_seeds: "#D2691E", + flaxseeds: "#8B4513", +}; + +for (const [name, color] of Object.entries(newFoods)) { + elements[name] = { + color, + category: "Markus Foods", + behavior: behaviors.POWDER, + state: "solid", + isFood: true, + }; +} + +const newLiquids = { + water: "#00BFFF", + milk: "#FFFFFF", + orange_juice: "#FFA500", + apple_juice: "#FF4500", + grape_juice: "#6A0DAD", + lemon_juice: "#FFFACD", + coconut_water: "#BFD8B8", + tomato_juice: "#FF6347", + coffee: "#6F4F1F", + tea: "#D3D3D3", + cola: "#6B3F2F", + wine: "#800000", + beer: "#F4A300", + whiskey: "#B86B38", + rum: "#C39A6E", + vodka: "#F0F8FF", + fruit_punch: "#FF69B4", + smoothie: "#FFB6C1", + soy_milk: "#F5F5DC", + coconut_milk: "#FFF0F5", +}; + +for (const [name, color] of Object.entries(newLiquids)) { + elements[name] = { + color, + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + isFood: true, + }; +} + +elements.carbonated_water = { + color: "#B0E0E6", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + isFood: true, + density: 1.0, +}; + +elements.fanta_syrup = { + color: "#FF7F00", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + tempHigh: 100, + stateHigh: "steam", + isFood: true, +}; + +elements.cola_syrup = { + color: "#301a10", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + tempHigh: 100, + stateHigh: "steam", + isFood: true, +}; + +elements.sprite_syrup = { + color: "#A8F0A5", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + tempHigh: 100, + stateHigh: "steam", + isFood: true, +}; + +elements.soda = { + color: "#FFD700", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + isFood: true, +}; + +elements.fanta = { + color: "#FF7F00", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + isFood: true, +}; + +elements.cola = { + color: "#261710", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + isFood: true, +}; + +elements.sprite = { + color: "#A8F0A5", + category: "Markus Foods", + behavior: behaviors.LIQUID, + state: "liquid", + isFood: true, +}; + +elements.soda.reactions = { + fanta_syrup: { elem1: "fanta" }, + cola_syrup: { elem1: "cola" }, + sprite_syrup: { elem1: "sprite" }, +}; + +// Adding the recipes for sodas +elements.fanta_syrup.reactions = { + carbonated_water: { elem1: "fanta" }, +}; + +elements.cola_syrup.reactions = { + carbonated_water: { elem1: "cola" }, +}; + +elements.sprite_syrup.reactions = { + carbonated_water: { elem1: "sprite" }, +}; From 69b807a4e01b4294fea7c8e390a25f86616e97e2 Mon Sep 17 00:00:00 2001 From: nag101612 Date: Thu, 27 Mar 2025 08:51:52 -0400 Subject: [PATCH 30/32] BluBun5193 forgot a comma --- mods/sports_beta.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/sports_beta.js b/mods/sports_beta.js index 55cd9204..a2399611 100644 --- a/mods/sports_beta.js +++ b/mods/sports_beta.js @@ -56,7 +56,7 @@ elements.dodge_ball = { elements.deodorant = { color: "#def2fc", - behavior: behaviors.DGAS + behavior: behaviors.DGAS, category: "gases", state: "gas", }; From 470dfc089234202cf75be5ea2239f08a16cc101e Mon Sep 17 00:00:00 2001 From: slweeb <91897291+slweeb@users.noreply.github.com> Date: Thu, 27 Mar 2025 16:08:56 -0400 Subject: [PATCH 31/32] Update mod-list.html --- mod-list.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mod-list.html b/mod-list.html index 233cef4b..9d8433b3 100644 --- a/mod-list.html +++ b/mod-list.html @@ -346,7 +346,6 @@ funny_solid.jsAdds fecesAlice funnynames.jsAdds various ways to mess with the names of elementsnousernamefound haseulite.jsAdds Loona-related materials with various propertiesAlice -human_friendly_design.jsMakes pipes and portals not kill humans, as well as making drag and mix not kill humans.Nekonico lactose_intolerance_and_celiac.jsMakes humans explode on contact with milk, wheat, bread, or toastNubo318 lattice_filler.jsAdds a combination of lattice and filler and a destructive variantSuss liquid_mixing.jsAllows liquids to mix colors dynamicallyNekonico @@ -356,7 +355,7 @@ minecraft.jsAdds several things from MinecraftStellarX20, nousernamefound minesweeper.jsA subpar implementation of MinesweeperAlice musicalfruit.jsHumans get gas from eating Beansmollthecoder -nekonicos_stuff.jsSome random stuff like graphite, oobleck, and red ice, as well as many machines.Nekonico +nekonicos_stuff.jsRandom stuff like graphite, oobleck, and red ice, as well as many machines.Nekonico prideflags.jsAdds some pride flags to the gameAdora random_elems.jsCurated randomly generated elementsAlice random_liquids.jsRandomly generates liquids on game loadAlice From 8855d02a919645f48ee38149c936e560a7ca388d Mon Sep 17 00:00:00 2001 From: redbirdly <155550833+redbirdly@users.noreply.github.com> Date: Sun, 30 Mar 2025 10:19:31 +0800 Subject: [PATCH 32/32] Replace chatgpt function in clouds.js with human written one --- mods/clouds.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/mods/clouds.js b/mods/clouds.js index 7a0df66a..eb5f466b 100644 --- a/mods/clouds.js +++ b/mods/clouds.js @@ -10,17 +10,14 @@ clouds_settingsTab.registerSettings("Real time", cloud_count_setting); settingsManager.registerTab(clouds_settingsTab); -// Biased random -function randomGaussian(A, B, biasFactor=2) { - let u = Math.random(); - let v = Math.random(); - let num = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v); +function biasedRandom(A, B, samples) { + var sum = 0; + for (var i = 0;i < samples;i++) { + sum += Math.random(); + } + var average = sum / samples; - let mean = (A + B) / 2; - let stdDev = (B - A) / biasFactor; - let result = mean + num * stdDev; - - return Math.min(Math.max(result, A), B); + return A + average * (B - A); } function randomBetween(A, B) { @@ -32,7 +29,7 @@ function initClouds(amount) { var w = randomBetween(6, 17); var h = randomBetween(4, 10); var x = randomBetween(0, width - w); - var y = randomGaussian(0, height * 0.75, 4); + var y = biasedRandom(0, height * 0.75, 4); // Higher clouds move faster var speedBoost = 1 - (y / (height * 0.75));