From 5c4d12a98388f111f0b3623eff5697debbed922a Mon Sep 17 00:00:00 2001 From: Cube14yt Date: Thu, 20 Nov 2025 12:22:26 +0800 Subject: [PATCH 1/3] patched some things --- mods/cubesstuff.js | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/mods/cubesstuff.js b/mods/cubesstuff.js index f623c65e..59dc8687 100644 --- a/mods/cubesstuff.js +++ b/mods/cubesstuff.js @@ -797,7 +797,7 @@ elements.rgb_led = { promptInput("Enter red value (0-255):", function (r_inp) { r_inp = parseInt(r_inp); if (r_inp > 255 || r_inp < 0 || isNaN(r_inp)) { - logMessage("Red value is invalid, using default/last red value: " + r); + logMessage("Red value is invalid, using default/last red value: " + globals.red); } else { globals.red = r_inp; } @@ -805,7 +805,7 @@ elements.rgb_led = { promptInput("Enter green value (0-255):", function (g_inp) { g_inp = parseInt(g_inp); if (g_inp > 255 || g_inp < 0 || isNaN(g_inp)) { - logMessage("Green value is invalid, using default/last green value: " + g); + logMessage("Green value is invalid, using default/last green value: " + globals.green); } else { globals.green = g_inp; } @@ -813,7 +813,7 @@ elements.rgb_led = { promptInput("Enter blue value (0-255):", function (b_inp) { b_inp = parseInt(b_inp); if (b_inp > 255 || b_inp < 0 || isNaN(b_inp)) { - logMessage("Blue value is invalid, using default/last blue value: " + b); + logMessage("Blue value is invalid, using default/last blue value: " + globals.blue); } else { globals.blue = b_inp; } @@ -823,7 +823,7 @@ elements.rgb_led = { }, onPlace: (pixel) => { - var ledColor = RGBToHex([red, green, blue]); + var ledColor = RGBToHex([globals.red, globals.green, globals.blue]); pixel.color = ledColor; } }; @@ -1321,7 +1321,7 @@ elements.custom_bomb = { // If pixel is at the bottom or resting on a solid if (outOfBounds(pixel.x, pixel.y + 1) || (belowPixel && belowPixel.element !== "custom_bomb" && !isEmpty(pixel.x, pixel.y + 1) && belowPixel.element !== "fire" && belowPixel.element !== "smoke")) { - explodeAt(pixel.x, pixel.y, 10, explodeElem); + explodeAt(pixel.x, pixel.y, 10, globals.explodeElem); deletePixel(pixel.x, pixel.y); } } @@ -1667,7 +1667,7 @@ elements.robot_body = { }; // Robot creator element -var mode = "Aimless" +globals.mode = "Aimless" elements.robot = { color: "#b1b1b1", category: "machines", @@ -1679,10 +1679,10 @@ elements.robot = { (choice) => { if (choice === "Controlled" && isMobile) { logMessage("Controlled mode doesn't work on mobile"); - mode = "Aimless"; + globals.mode = "Aimless"; } else { - mode = choice || "Aimless"; - if (mode === "Controlled") { + globals.mode = choice || "Aimless"; + if (globals.mode === "Controlled") { logMessage("Controls: A/D to move and W to jump or (Not reccomended) ←/→ to move, and ↑ to jump"); } } @@ -1695,17 +1695,17 @@ elements.robot = { if (isEmpty(pixel.x, pixel.y - 1)) { createPixel("robot_head", pixel.x, pixel.y - 1); const head = getPixel(pixel.x, pixel.y - 1); - head.mode = mode; + head.mode = globals.mode; changePixel(pixel, "robot_body"); - pixel.mode = mode; + pixel.mode = globals.mode; } // Try to create body below if above is blocked else if (isEmpty(pixel.x, pixel.y + 1)) { createPixel("robot_body", pixel.x, pixel.y + 1); const body = getPixel(pixel.x, pixel.y + 1); - body.mode = mode; + body.mode = globals.mode; changePixel(pixel, "robot_head"); - pixel.mode = mode; + pixel.mode = globals.mode; } // Delete if no space else { @@ -2017,7 +2017,7 @@ elements.indestructable_filter = { } } -globals.glass_hole_expand = false +globals.blackHoleExpand = false elements.black_hole = { color: "#111111", hardness: 1, @@ -2105,7 +2105,7 @@ elements.black_hole = { } } } - if (globals.glass_hole_expand) { + if (globals.blackHoleExpand) { for (var i = 0; i < adjacentCoords.length; i++) { var x = pixel.x + adjacentCoords[i][0]; var y = pixel.y + adjacentCoords[i][1]; @@ -2127,10 +2127,10 @@ elements.black_hole = { choice = "No" } if (choice == "Yes") { - globals.glass_hole_expand = true + globals.blackHoleExpand = true } else { - globals.glass_hole_expand = false + globals.blackHoleExpand = false } } ) @@ -3326,4 +3326,3 @@ elements.replace_all_of_element = { } - From c32e71a56e6d4cc7e5861f790435755429e30222 Mon Sep 17 00:00:00 2001 From: Cube14yt Date: Tue, 25 Nov 2025 17:37:17 +0800 Subject: [PATCH 2/3] Bugfixes --- mods/coldblooded.js | 1292 +++++++++++++++++++++---------------------- 1 file changed, 626 insertions(+), 666 deletions(-) diff --git a/mods/coldblooded.js b/mods/coldblooded.js index 4fe04f17..eae85f00 100644 --- a/mods/coldblooded.js +++ b/mods/coldblooded.js @@ -4,274 +4,181 @@ v 0.11 "axolotl" eats fish v 0.2 crocodiles scales and axolotls actually eat fish now v 0.3 chameleons + bugfixes v 0.4 turtles, tortoise + improved logic - - -thats it for now +v 0.41 Bugfixes (How was this even working before this fix) */ const defaultColors = ["#02c937", "#18d64a", "#09e644"]; runAfterAutogen(function () { - // Human - const oldHumanTick = elements.human.tick; - elements.human.tick = function (pixel) { - if (oldHumanTick) oldHumanTick(pixel); - if (pixel.poisoned !== undefined) { - pixel.poisoned--; - if (pixel.poisoned <= 0) { - pixel.dead = true; - pixel.color = pixel.oldColor; - delete pixel.poisoned - return; - } - } - }; + // Human + const oldHumanTick = elements.human.tick; + elements.human.tick = function (pixel) { + if (oldHumanTick) oldHumanTick(pixel); + if (pixel.poisoned !== undefined) { + pixel.poisoned--; + if (pixel.poisoned <= 0) { + pixel.dead = true; + pixel.color = pixel.oldColor; + delete pixel.poisoned + return; + } + } + }; - // Head - const oldHeadTick = elements.head.tick; - elements.head.tick = function (pixel) { - if (oldHeadTick) oldHeadTick(pixel); - if (pixel.poisoned !== undefined) { - pixel.poisoned--; - if (pixel.poisoned <= 0) { - pixel.dead = true; - pixel.color = pixel.oldColor; - delete pixel.poisoned; - return; - } - } - }; + // Head + const oldHeadTick = elements.head.tick; + elements.head.tick = function (pixel) { + if (oldHeadTick) oldHeadTick(pixel); + if (pixel.poisoned !== undefined) { + pixel.poisoned--; + if (pixel.poisoned <= 0) { + pixel.dead = true; + pixel.color = pixel.oldColor; + delete pixel.poisoned; + return; + } + } + }; - // Body - const oldBodyTick = elements.body.tick; - elements.body.tick = function (pixel) { - if (oldBodyTick) oldBodyTick(pixel); - if (pixel.poisoned !== undefined) { - pixel.poisoned--; - if (pixel.poisoned <= 0) { - pixel.dead = true; - pixel.color = pixel.oldColor; - delete pixel.poisoned; - return; - } + // Body + const oldBodyTick = elements.body.tick; + elements.body.tick = function (pixel) { + if (oldBodyTick) oldBodyTick(pixel); + if (pixel.poisoned !== undefined) { + pixel.poisoned--; + if (pixel.poisoned <= 0) { + pixel.dead = true; + pixel.color = pixel.oldColor; + delete pixel.poisoned; + return; + } + } } - } }); function eatBee(pixel1, pixel2) { - pixel1.color = "#5c138a"; - pixel1.poisoned ??= 30; + pixel1.color = "#5c138a"; + pixel1.poisoned ??= 30; } function poisonOther(pixel1, pixel2) { - if (!pixel2) return; - if (pixel2.color === "#5c138a") return; - if (pixel2.dead === true) return; - pixel2.oldColor = pixel2.color; - pixel2.color = "#5c138a"; - pixel2.poisoned ??= 30; -} - -function isInBounds(x, y) { - return x >= 0 && x < width && y >= 0 && y < height; + if (!pixel2) return; + if (pixel2.color === "#5c138a") return; + if (pixel2.dead === true) return; + pixel2.oldColor = pixel2.color; + pixel2.color = "#5c138a"; + pixel2.poisoned ??= 30; } elements.human.reactions.snake = - { attr1: { panic: 5 } } + { attr1: { panic: 5 } } elements.fish.reactions.toad_tadpole = - { elem2: null, chance: 0.25, func: behaviors.FEEDPIXEL } + { elem2: null, chance: 0.25, func: behaviors.FEEDPIXEL } if (!elements.glue.ignore.includes("scale")) { - elements.glue.ignore.push("scale"); + elements.glue.ignore.push("scale"); } -danger = ["crocodile", "snake"]; +let danger = ["crocodile", "snake"]; elements.lizard = { - color: ["#00ff1a", "#038f11"], - behavior: [ - ["XX", "XX", "M2%1"], - ["XX", "FX%5", "M1%15"], - ["M2", "M1", "M2"], - ], - category: "life", - state: "solid", - reactions: { - "fly": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "ant": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.3 }, - "termite": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.3 }, - "worm": { elem2: null, func: behaviors.FEEDPIXEL }, - "bee": { elem2: null, func: eatBee, chance: 0.05 }, - "firefly": { elem2: null, func: eatBee, chance: 0.4 }, - "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "pool_water": { chance: 0.001, elem1: "rotten_meat" }, - "dirty_water": { chance: 0.0001, elem1: "rotten_meat" }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "snake", "crocodile", "chameleon", null], chance: 0.4 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: null }, - "poison_gas": { elem1: null }, - }, - foodNeed: 5, - temp: 20, - tempHigh: 120, - stateHigh: ["cooked_meat", "scale"], - tempLow: -20, - stateLow: "frozen_meat", - breakInto: ["blood", "scale"], - density: 1050, - eggColor: "#ffffff", - tick: function (pixel) { - if (pixel.poisoned !== undefined) { - pixel.poisoned--; - if (pixel.poisoned <= 0) { - deletePixel(pixel.x, pixel.y); - return; - } - } - }, + color: ["#00ff1a", "#038f11"], + behavior: [ + ["XX", "XX", "M2%1"], + ["XX", "FX%5", "M1%15"], + ["M2", "M1", "M2"], + ], + category: "life", + state: "solid", + reactions: { + "fly": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "ant": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.3 }, + "termite": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.3 }, + "worm": { elem2: null, func: behaviors.FEEDPIXEL }, + "bee": { elem2: null, func: eatBee, chance: 0.05 }, + "firefly": { elem2: null, func: eatBee, chance: 0.4 }, + "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "pool_water": { chance: 0.001, elem1: "rotten_meat" }, + "dirty_water": { chance: 0.0001, elem1: "rotten_meat" }, + "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "snake", "crocodile", "chameleon", null], chance: 0.4 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "poison": { elem1: null }, + "poison_gas": { elem1: null }, + }, + foodNeed: 5, + temp: 20, + tempHigh: 120, + stateHigh: ["cooked_meat", "scale"], + tempLow: -20, + stateLow: "frozen_meat", + breakInto: ["blood", "scale"], + density: 1050, + eggColor: "#ffffff", + tick: function (pixel) { + if (pixel.poisoned !== undefined) { + pixel.poisoned--; + if (pixel.poisoned <= 0) { + deletePixel(pixel.x, pixel.y); + return; + } + } + }, }; elements.toad = { - color: ["#693800", "#945a18"], - behavior: [ - ["XX", "XX", "M2%3 AND SW:water, salt_water, dirty_water, pool_water, seltzer%5"], - ["XX", "FX%25", "M2%6 AND SW:water, salt_water, dirty_water, pool_water, seltzer%8"], - ["M2", "M1 AND SW:water, salt_water, dirty_water, pool_water, seltzer%8", "M2 AND SW:water, salt_water, dirty_water, pool_water, seltzer%8"], - ], - - category: "life", - state: "solid", - reactions: { - "fly": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "ant": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "termite": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "worm": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "spider": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "dead_bug": { elem2: null, chance: 0.2, func: behaviors.FEEDPIXEL }, - "bee": { elem2: null, func: eatBee, chance: 0.1 }, - "firefly": { elem2: null, func: eatBee, chance: 0.4 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "algae": { elem2: null, chance: 0.1, func: behaviors.FEEDPIXEL }, - "kelp": { elem2: "water", chance: 0.1, func: behaviors.FEEDPIXEL }, - "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL, chance: 0.05 }, - "slug": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "pool_water": { chance: 0.005, elem1: "rotten_meat" }, - "dirty_water": { chance: 0.0001, elem1: "rotten_meat" }, - "radiation": { elem1: ["ash", "meat", "rotten_meat", "cooked_meat", "toad_tadpole", "tadpole", "frog", null], chance: 0.4 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: "rotten_meat", elem2: null }, - "poison_gas": { elem1: null }, - }, - foodNeed: 10, - baby: "toad_tadpole", - temp: 18, - tempHigh: 100, - stateHigh: "cooked_meat", - tempLow: -20, - stateLow: "frozen_meat", - breakInto: "slime", - density: 1200, - tick: function (pixel) { - if (pixel.poisoned !== undefined) { - pixel.poisoned--; - if (pixel.poisoned <= 0) { - deletePixel(pixel.x, pixel.y); - return; - } - } - }, -}; - - -elements.toad_tadpole = { - color: "#87b574", - behavior: [ - "XX|XX|M2%25 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%14", - "XX|FX%0.5|SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%14", - "M2|M1|M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%14", - ], - reactions: { - "algae": { elem2: null, chance: 0.25 }, - "kelp": { elem2: "water", chance: 0.25 }, - "pool_water": { chance: 0.70, elem1: null }, - "dirty_water": { chance: 0.70, elem1: null }, - "bleach": { elem1: null, chance: 0.05 }, - "poison": { elem1: null }, - "radiation": { elem1: ["toad", "toad", "frog", "worm", null], chance: 0.4 }, - "poison": { elem1: null }, - "poison_gas": { elem1: null }, - }, - tempHigh: 100, - stateHigh: "steam", - tempLow: -10, - stateLow: "ice", - breakInto: ["slime", null], - category: "life", - hidden: true, - state: "solid", - density: 1450, - conduct: 0.2, - tick: function (pixel) { - - if (pixelTicks - pixel.start > 500 && Math.random() <= 0.05) { - changePixel(pixel, "toad"); - } - } -}, - - elements.newt = { - color: ["#db8727", "#945a18"], + color: ["#693800", "#945a18"], behavior: [ - ["XX", "XX", "SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15"], - ["XX", "FX%5", "M2%25 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15"], - ["M2", "M1 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15", "M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15"], + ["XX", "XX", "M2%3 AND SW:water, salt_water, dirty_water, pool_water, seltzer%5"], + ["XX", "FX%25", "M2%6 AND SW:water, salt_water, dirty_water, pool_water, seltzer%8"], + ["M2", "M1 AND SW:water, salt_water, dirty_water, pool_water, seltzer%8", "M2 AND SW:water, salt_water, dirty_water, pool_water, seltzer%8"], ], + category: "life", state: "solid", reactions: { - "fly": { elem2: null, func: behaviors.FEEDPIXEL }, - "termite": { elem2: null, func: behaviors.FEEDPIXEL }, - "ant": { elem2: null, func: behaviors.FEEDPIXEL }, - "worm": { elem2: null, func: behaviors.FEEDPIXEL }, - "slug": { elem2: null, func: behaviors.FEEDPIXEL }, - "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL }, - "pool_water": { chance: 0.70, elem1: null }, - "dirty_water": { chance: 0.70, elem1: null }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "axolotl", null], chance: 0.4 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: null }, - "poison_gas": { elem1: null }, + "fly": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "ant": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "termite": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "worm": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "spider": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "dead_bug": { elem2: null, chance: 0.2, func: behaviors.FEEDPIXEL }, + "bee": { elem2: null, func: eatBee, chance: 0.1 }, + "firefly": { elem2: null, func: eatBee, chance: 0.4 }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "algae": { elem2: null, chance: 0.1, func: behaviors.FEEDPIXEL }, + "kelp": { elem2: "water", chance: 0.1, func: behaviors.FEEDPIXEL }, + "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL, chance: 0.05 }, + "slug": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "pool_water": { chance: 0.005, elem1: "rotten_meat" }, + "dirty_water": { chance: 0.0001, elem1: "rotten_meat" }, + "radiation": { elem1: ["ash", "meat", "rotten_meat", "cooked_meat", "toad_tadpole", "tadpole", "frog", null], chance: 0.4 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "poison": { elem1: "rotten_meat", elem2: null }, + "poison_gas": { elem1: null }, }, foodNeed: 10, + baby: "toad_tadpole", temp: 18, tempHigh: 100, stateHigh: "cooked_meat", @@ -279,491 +186,544 @@ elements.toad_tadpole = { stateLow: "frozen_meat", breakInto: "slime", density: 1200, - eggColor: "#ffeeab", - }; + tick: function (pixel) { + if (pixel.poisoned !== undefined) { + pixel.poisoned--; + if (pixel.poisoned <= 0) { + deletePixel(pixel.x, pixel.y); + return; + } + } + }, +}; + + +elements.toad_tadpole = { + color: "#87b574", + behavior: [ + "XX|XX|M2%25 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%14", + "XX|FX%0.5|SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%14", + "M2|M1|M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%14", + ], + reactions: { + "algae": { elem2: null, chance: 0.25 }, + "kelp": { elem2: "water", chance: 0.25 }, + "pool_water": { chance: 0.70, elem1: null }, + "dirty_water": { chance: 0.70, elem1: null }, + "bleach": { elem1: null, chance: 0.05 }, + "poison": { elem1: null }, + "radiation": { elem1: ["toad", "toad", "frog", "worm", null], chance: 0.4 }, + "poison_gas": { elem1: null }, + }, + tempHigh: 100, + stateHigh: "steam", + tempLow: -10, + stateLow: "ice", + breakInto: ["slime", null], + category: "life", + hidden: true, + state: "solid", + density: 1450, + conduct: 0.2, + tick: function (pixel) { + + if (pixelTicks - pixel.start > 500 && Math.random() <= 0.05) { + changePixel(pixel, "toad"); + } + } +}, + + elements.newt = { + color: ["#db8727", "#945a18"], + behavior: [ + ["XX", "XX", "SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15"], + ["XX", "FX%5", "M2%25 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15"], + ["M2", "M1 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15", "M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%15"], + ], + category: "life", + state: "solid", + reactions: { + "fly": { elem2: null, func: behaviors.FEEDPIXEL }, + "termite": { elem2: null, func: behaviors.FEEDPIXEL }, + "ant": { elem2: null, func: behaviors.FEEDPIXEL }, + "worm": { elem2: null, func: behaviors.FEEDPIXEL }, + "slug": { elem2: null, func: behaviors.FEEDPIXEL }, + "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL }, + "pool_water": { chance: 0.70, elem1: null }, + "dirty_water": { chance: 0.70, elem1: null }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "axolotl", null], chance: 0.4 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "poison": { elem1: null }, + "poison_gas": { elem1: null }, + }, + foodNeed: 10, + temp: 18, + tempHigh: 100, + stateHigh: "cooked_meat", + tempLow: -20, + stateLow: "frozen_meat", + breakInto: "slime", + density: 1200, + eggColor: "#ffeeab", + }; elements.axolotl = { - color: ["#ff99ff", "#ffe100", "#785705"], - behavior: [ - ["XX", "XX", "SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%10"], - ["XX", "FX", "M2%15 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%10"], - ["M2", "M1", "M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%10"], - ], - category: "life", - state: "solid", - reactions: { - "fly": { elem2: null, func: behaviors.FEEDPIXEL }, - "termite": { elem2: null, func: behaviors.FEEDPIXEL }, - "ant": { elem2: null, func: behaviors.FEEDPIXEL }, - "worm": { elem2: null, func: behaviors.FEEDPIXEL }, - "slug": { elem2: null, func: behaviors.FEEDPIXEL }, - "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL }, - "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "pool_water": { chance: 0.70, elem1: null }, - "dirty_water": { chance: 0.70, elem1: null }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "newt"], chance: 0.4 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "poison": { elem1: null }, - "poison_gas": { elem1: null }, - }, - foodNeed: 20, - temp: 18, - tempHigh: 90, - stateHigh: "cooked_meat", - tempLow: -20, - stateLow: "frozen_meat", - breakInto: ["slime", "blood"], - density: 1000, - eggColor: ["#dcdcdc", "#a9a9a9", "#2b2b2b"], - tick: function (pixel) { - pixel.lifetime ??= 900; + color: ["#ff99ff", "#ffe100", "#785705"], + behavior: [ + ["XX", "XX", "SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%10"], + ["XX", "FX", "M2%15 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%10"], + ["M2", "M1", "M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%10"], + ], + category: "life", + state: "solid", + reactions: { + "fly": { elem2: null, func: behaviors.FEEDPIXEL }, + "termite": { elem2: null, func: behaviors.FEEDPIXEL }, + "ant": { elem2: null, func: behaviors.FEEDPIXEL }, + "worm": { elem2: null, func: behaviors.FEEDPIXEL }, + "slug": { elem2: null, func: behaviors.FEEDPIXEL }, + "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL }, + "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "pool_water": { chance: 0.70, elem1: null }, + "dirty_water": { chance: 0.70, elem1: null }, + "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "newt"], chance: 0.4 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "poison": { elem1: null }, + "poison_gas": { elem1: null }, + }, + foodNeed: 20, + temp: 18, + tempHigh: 90, + stateHigh: "cooked_meat", + tempLow: -20, + stateLow: "frozen_meat", + breakInto: ["slime", "blood"], + density: 1000, + eggColor: ["#dcdcdc", "#a9a9a9", "#2b2b2b"], + tick: function (pixel) { + pixel.lifetime ??= 900; - let up = pixel.y > 0 ? pixelMap[pixel.x][pixel.y - 1] : null; - let down = pixel.y < pixelMap[0].length - 1 ? pixelMap[pixel.x][pixel.y + 1] : null; - let left = pixel.x > 0 ? pixelMap[pixel.x - 1][pixel.y] : null; - let right = pixel.x < pixelMap.length - 1 ? pixelMap[pixel.x + 1][pixel.y] : null; + let up = pixel.y > 0 ? pixelMap[pixel.x][pixel.y - 1] : null; + let down = pixel.y < pixelMap[0].length - 1 ? pixelMap[pixel.x][pixel.y + 1] : null; + let left = pixel.x > 0 ? pixelMap[pixel.x - 1][pixel.y] : null; + let right = pixel.x < pixelMap.length - 1 ? pixelMap[pixel.x + 1][pixel.y] : null; - if ( - (up && up.element === "water") || - (down && down.element === "water") || - (left && left.element === "water") || - (right && right.element === "water")) { - pixel.lifetime = 900; - } else { - pixel.lifetime--; - if (pixel.lifetime <= 0 && Math.random() <= 0.1) { - deletePixel(pixel.x, pixel.y); - createPixel("meat", pixel.x, pixel.y); - } + if ( + (up && up.element === "water") || + (down && down.element === "water") || + (left && left.element === "water") || + (right && right.element === "water")) { + pixel.lifetime = 900; + } else { + pixel.lifetime--; + if (pixel.lifetime <= 0 && Math.random() <= 0.1) { + deletePixel(pixel.x, pixel.y); + createPixel("meat", pixel.x, pixel.y); + } + } } - } }; elements.snake = { - color: ["#006400", "#90ee90", "#00ff00"], - behavior: [ - ["XX", "XX", "XX"], - ["XX", "FX%15", "M2%10"], - ["M2", "M1", "M1"], - ], - reactions: { - "frog": { elem2: null, func: behaviors.FEEDPIXEL }, - "toad": { elem2: null, func: behaviors.FEEDPIXEL }, - "lizard": { elem2: null, func: behaviors.FEEDPIXEL }, - "worm": { elem2: null, func: behaviors.FEEDPIXEL }, - "slug": { elem2: null, func: behaviors.FEEDPIXEL }, - "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL }, - "egg": { - elem2: "egg", - func: function (pixel1, pixel2) { - if (pixel2.animal === "snake") return; // Don't eat own egg - behaviors.FEEDPIXEL(pixel1, pixel2); - } + color: ["#006400", "#90ee90", "#00ff00"], + behavior: [ + ["XX", "XX", "XX"], + ["XX", "FX%15", "M2%10"], + ["M2", "M1", "M1"], + ], + reactions: { + "frog": { elem2: null, func: behaviors.FEEDPIXEL }, + "toad": { elem2: null, func: behaviors.FEEDPIXEL }, + "lizard": { elem2: null, func: behaviors.FEEDPIXEL }, + "worm": { elem2: null, func: behaviors.FEEDPIXEL }, + "slug": { elem2: null, func: behaviors.FEEDPIXEL }, + "snail": { elem2: "limestone", func: behaviors.FEEDPIXEL }, + "egg": { + func: function (pixel1, pixel2) { + if (pixel2.animal === "snake") return; // Don't eat own egg + behaviors.FEEDPIXEL(pixel1); + deletePixel(pixel2.x, pixel2.y) + } + }, + "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "lizard", "crocodile", null], chance: 0.4 }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "lizard", "crocodile", null], chance: 0.4 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - }, - category: "life", - state: "solid", - density: 1050, - temp: 20, - tempHigh: 120, - stateHigh: "cooked_meat", - tempLow: -10, - stateLow: "frozen_meat", - breakInto: "blood", + category: "life", + state: "solid", + density: 1050, + temp: 20, + tempHigh: 120, + stateHigh: "cooked_meat", + tempLow: -10, + stateLow: "frozen_meat", + breakInto: "blood", - tick: function (pixel) { - const directions = [ - [0, -1], [-1, -1], [1, -1], - [-1, 0], [1, 0], - [0, 1], [-1, 1], [1, 1] - ]; + tick: function (pixel) { + const directions = [ + [0, -1], [-1, -1], [1, -1], + [-1, 0], [1, 0], + [0, 1], [-1, 1], [1, 1] + ]; - for (let [dx, dy] of directions) { - let x = pixel.x + dx; - let y = pixel.y + dy; - if (!isEmpty(x, y)) { - let other = pixelMap[x]?.[y]; - if (other && (other.element === "head" || other.element === "body" || other.element === "crocodile") && Math.random() <= 0.5) { - poisonOther(pixel, other); + for (let [dx, dy] of directions) { + let x = pixel.x + dx; + let y = pixel.y + dy; + if (!isEmpty(x, y)) { + let other = pixelMap[x]?.[y]; + if (other && (other.element === "head" || other.element === "body" || other.element === "crocodile") && Math.random() <= 0.5) { + poisonOther(pixel, other); + } + } } - } } - } }; elements.crocodile = { - color: ["#065e13", "#0c751c"], - behavior: [ - ["XX", "XX", "XX AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%5"], - ["XX", "FX%10", "M2%30 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%5"], - ["M2", "M1", "M1 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%5"], - ], - category: 'life', - state: 'solid', - foodNeed: 10, - reactions: { - "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "bird": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "rat": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "frog": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "toad": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "snake": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.4 }, - "axolotl": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "lizard": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "newt": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "body": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "head": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "human": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "chameleon": { - reactionFunction: function (pixel, otherPixel) { - let isNormalColor = defaultColors.includes(pixel.color); - if (otherPixel.threatened !== true || isNormalColor === true) { - behaviors.FEEDPIXEL(pixel, otherPixel); - deletePixel(otherPixel.x, otherPixel.y) - } - } + color: ["#065e13", "#0c751c"], + behavior: [ + ["XX", "XX", "XX AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%5"], + ["XX", "FX%10", "M2%30 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%5"], + ["M2", "M1", "M1 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water%5"], + ], + category: 'life', + state: 'solid', + foodNeed: 10, + reactions: { + "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "bird": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "rat": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "frog": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "toad": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "snake": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.4 }, + "axolotl": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "lizard": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "newt": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "body": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "head": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "human": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "chameleon": { + func: function (pixel, otherPixel) { + let isNormalColor = defaultColors.includes(pixel.color); + if (otherPixel.threatened !== true || isNormalColor === true) { + behaviors.FEEDPIXEL(pixel); + deletePixel(otherPixel.x, otherPixel.y) + } + } + }, + "slug": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "snail": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "turtle": { elem2: [null, "limestone"], func: behaviors.FEEDPIXEL, chance: 0.05 }, + "bone": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.1 }, + "bone_marrow": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.4 }, + "homonculus": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "lizard", "snake", null], chance: 0.4 }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "poison": { elem1: null }, + "poison_gas": { elem1: null }, }, - "slug": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "snail": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "turtle": { elem2: [null, "limestone"], func: behaviors.FEEDPIXEL, chance: 0.05 }, - "bone": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.1 }, - "bone_marrow": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.4 }, - "homonculus": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "lizard", "snake", null], chance: 0.4 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: null }, - "poison_gas": { elem1: null }, - }, - temp: 18, - tempHigh: 100, - stateHigh: ["cooked_meat", "scale"], - tempLow: -10, - stateLow: "frozen_meat", - breakInto: ["blood", "scale"], - density: 1100, - tick: function (pixel) { - if (pixel.poisoned !== undefined) { - pixel.poisoned--; - if (pixel.poisoned <= 0 && Math.random() <= 0.5) { - deletePixel(pixel.x, pixel.y); - return; - } + temp: 18, + tempHigh: 100, + stateHigh: ["cooked_meat", "scale"], + tempLow: -10, + stateLow: "frozen_meat", + breakInto: ["blood", "scale"], + density: 1100, + tick: function (pixel) { + if (pixel.poisoned !== undefined) { + pixel.poisoned--; + if (pixel.poisoned <= 0 && Math.random() <= 0.5) { + deletePixel(pixel.x, pixel.y); + return; + } + } } - } } elements.scale = { - category: "powders", - color: ['#076607', '#1cb01c', '#0ef00e'], - behavior: behaviors.POWDER, - tempHigh: 900, - stateHigh: ["ash", "ash", "ash", "smoke", "stench", "stench", "stench"], - breakInto: "dust", - hardness: 0.3, - reactions: { - "glue": { - elem1: "scale_plate", elem2: null, + category: "powders", + color: ['#076607', '#1cb01c', '#0ef00e'], + behavior: behaviors.POWDER, + tempHigh: 900, + stateHigh: ["ash", "ash", "ash", "smoke", "stench", "stench", "stench"], + breakInto: "dust", + hardness: 0.3, + reactions: { + "glue": { + elem1: "scale_plate", elem2: null, + } } - } } elements.scute = { - category: "powders", - color: ['#076607', '#1cb01c', '#0ef00e'], - behavior: behaviors.POWDER, - tempHigh: 900, - stateHigh: ["ash", "ash", "ash", "smoke", "stench", "stench", "stench"], - breakInto: "dust", - hardness: 0.3, - reactions: { - "glue": { - elem1: "scute_plate", elem2: null, + category: "powders", + color: ['#076607', '#1cb01c', '#0ef00e'], + behavior: behaviors.POWDER, + tempHigh: 900, + stateHigh: ["ash", "ash", "ash", "smoke", "stench", "stench", "stench"], + breakInto: "dust", + hardness: 0.3, + reactions: { + "glue": { + elem1: "scute_plate", elem2: null, + } } - } } elements.scale_plate = { - category: "solids", - behavior: [ - "XX", "XX", "XX", - "XX", "XX", "XX", - "XX", "XX", "XX", - ], - movable: false, - state: "solid", - color: ['#044404', '#137a13', '#0aa00a'], - hardness: 0.8, - breakInto: "scale", - tick: function (pixel) { - // 2 temp highs - const hot = ["scale", "dioxin", "cyanide_gas"]; - const hotter = ["ash", "ash", "ash", "smoke", "stench", "stench", "stench", "dioxin", "cyanide_gas"]; - if (pixel.temp >= 475 && pixel.temp <= 900) { - let chosen = hot[Math.floor(Math.random() * hot.length)]; - changePixel(pixel, chosen); + category: "solids", + behavior: [ + "XX", "XX", "XX", + "XX", "XX", "XX", + "XX", "XX", "XX", + ], + movable: false, + state: "solid", + color: ['#044404', '#137a13', '#0aa00a'], + hardness: 0.8, + breakInto: "scale", + tick: function (pixel) { + // 2 temp highs + const hot = ["scale", "dioxin", "cyanide_gas"]; + const hotter = ["ash", "ash", "ash", "smoke", "stench", "stench", "stench", "dioxin", "cyanide_gas"]; + if (pixel.temp >= 475 && pixel.temp <= 900) { + let chosen = hot[Math.floor(Math.random() * hot.length)]; + changePixel(pixel, chosen); + } + if (pixel.temp >= 900) { + let chosen = hotter[Math.floor(Math.random() * hotter.length)]; + changePixel(pixel, chosen); + } } - if (pixel.temp >= 900) { - let chosen = hotter[Math.floor(Math.random() * hotter.length)]; - changePixel(pixel, chosen); - } - } } elements.scute_plate = { - category: "solids", - behavior: [ - "XX", "XX", "XX", - "XX", "XX", "XX", - "XX", "XX", "XX", - ], - movable: false, - state: "solid", - color: ['#044404', '#137a13', '#0aa00a'], - hardness: 0.8, - breakInto: "scute", - tick: function (pixel) { - // 2 temp highs - const hot = ["scute", "dioxin", "cyanide_gas"]; - const hotter = ["ash", "ash", "ash", "smoke", "stench", "stench", "stench", "dioxin", "cyanide_gas"]; - if (pixel.temp >= 475 && pixel.temp <= 900) { - let chosen = hot[Math.floor(Math.random() * hot.length)]; - changePixel(pixel, chosen); + category: "solids", + behavior: [ + "XX", "XX", "XX", + "XX", "XX", "XX", + "XX", "XX", "XX", + ], + movable: false, + state: "solid", + color: ['#044404', '#137a13', '#0aa00a'], + hardness: 0.8, + breakInto: "scute", + tick: function (pixel) { + // 2 temp highs + const hot = ["scute", "dioxin", "cyanide_gas"]; + const hotter = ["ash", "ash", "ash", "smoke", "stench", "stench", "stench", "dioxin", "cyanide_gas"]; + if (pixel.temp >= 475 && pixel.temp <= 900) { + let chosen = hot[Math.floor(Math.random() * hot.length)]; + changePixel(pixel, chosen); + } + if (pixel.temp >= 900) { + let chosen = hotter[Math.floor(Math.random() * hotter.length)]; + changePixel(pixel, chosen); + } } - if (pixel.temp >= 900) { - let chosen = hotter[Math.floor(Math.random() * hotter.length)]; - changePixel(pixel, chosen); - } - } } elements.chameleon = { - color: ["#02c937", "#18d64a", "#09e644"], - category: "life", - breakInto: ["blood", "scale"], - temp: 18, - tempHigh: 100, - stateHigh: ["cooked_meat", "scale"], - tempLow: -10, - stateLow: "frozen_meat", - foodNeed: 10, - density: 1100, - reactions: { - 'fly': { func: behaviors.FEEDPIXEL, chance: 0.5 }, - "firefly": { elem2: null, func: eatBee, chance: 0.3 }, - "bee": { elem2: null, func: eatBee, chance: 0.1 }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "lizard", null], chance: 0.4 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: null }, - "poison_gas": { elem1: null }, - }, - tick: function (pixel) { + color: ["#02c937", "#18d64a", "#09e644"], + category: "life", + breakInto: ["blood", "scale"], + temp: 18, + tempHigh: 100, + stateHigh: ["cooked_meat", "scale"], + tempLow: -10, + stateLow: "frozen_meat", + foodNeed: 10, + density: 1100, + reactions: { + 'fly': { func: behaviors.FEEDPIXEL, chance: 0.5 }, + "firefly": { elem2: null, func: eatBee, chance: 0.3 }, + "bee": { elem2: null, func: eatBee, chance: 0.1 }, + "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "lizard", null], chance: 0.4 }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "poison": { elem1: null }, + "poison_gas": { elem1: null }, + }, + tick: function (pixel) { - if (pixel.poisoned !== undefined) { - pixel.poisoned--; - if (pixel.poisoned <= 0) { - deletePixel(pixel.x, pixel.y); - return; - } - } - - const directions = [ - [0, -1], [-1, -1], [1, -1], - [-1, 0], [1, 0], - [0, 1], [-1, 1], [1, 1] - ]; - - pixel.threatened ??= false; - pixel.colorChange ??= 120; - pixel.dir ??= 1; - - let changed = false; - - // Copy color from nearby solids if threatened - for (let [dx, dy] of directions) { - let x = pixel.x + dx; - let y = pixel.y + dy; - if (!isEmpty(x, y)) { - let other = pixelMap[x]?.[y]; - if ( - other && - pixel.threatened === true && - elements[other.element]?.state === "solid" && - elements[other.element]?.category !== "life" && - other.element !== "egg" - ) { - pixel.colorChange = 120; - pixel.color = other.color; - changed = true; - break; + if (pixel.poisoned !== undefined) { + pixel.poisoned--; + if (pixel.poisoned <= 0) { + deletePixel(pixel.x, pixel.y); + return; + } } - } - } - // Return to normal color if no color copied - if (!changed) { - pixel.colorChange--; - if (pixel.colorChange <= 0) { - pixel.color = defaultColors[Math.floor(Math.random() * defaultColors.length)]; - pixel.colorChange = 120; - } - } + const directions = [ + [0, -1], [-1, -1], [1, -1], + [-1, 0], [1, 0], + [0, 1], [-1, 1], [1, 1] + ]; - // Vision-based threat detection - if (Math.random() < 0.25) { - let threatSeen = false; - let yOffset = Math.random() < 0.5 ? 0 : -1; + pixel.threatened ??= false; + pixel.colorChange ??= 120; + pixel.dir ??= 1; - for (let x = 1; x < 10; x++) { - let x2 = pixel.x + (x * pixel.dir); - let y2 = pixel.y + yOffset; + let changed = false; - if (!isEmpty(x2, y2, true)) { - let seen = pixelMap[x2][y2]; - if (danger.includes(seen?.element)) { - pixel.threatened = true; - threatSeen = true; - break; - } + // Copy color from nearby solids if threatened + for (let [dx, dy] of directions) { + let x = pixel.x + dx; + let y = pixel.y + dy; + if (!isEmpty(x, y)) { + let other = pixelMap[x]?.[y]; + if ( + other && + pixel.threatened === true && + elements[other.element]?.state === "solid" && + elements[other.element]?.category !== "life" && + other.element !== "egg" + ) { + pixel.colorChange = 120; + pixel.color = other.color; + changed = true; + break; + } + } } - } - // Only reset to false if no threat is seen - if (!threatSeen) { - pixel.threatened = false; - } + // Return to normal color if no color copied + if (!changed) { + pixel.colorChange--; + if (pixel.colorChange <= 0) { + pixel.color = defaultColors[Math.floor(Math.random() * defaultColors.length)]; + pixel.colorChange = 120; + } + } + + // Vision-based threat detection + if (Math.random() < 0.25) { + let threatSeen = false; + let yOffset = Math.random() < 0.5 ? 0 : -1; + + for (let x = 1; x < 10; x++) { + let x2 = pixel.x + (x * pixel.dir); + let y2 = pixel.y + yOffset; + + if (!isEmpty(x2, y2, true)) { + let seen = pixelMap[x2][y2]; + if (danger.includes(seen?.element)) { + pixel.threatened = true; + threatSeen = true; + break; + } + } + } + + // Only reset to false if no threat is seen + if (!threatSeen) { + pixel.threatened = false; + } + } + + if (Math.random() < 0.05) { + pixel.dir *= -1; + } + + // Movement logic: + // Move only if NOT threatened OR if color is back to normal + let isNormalColor = defaultColors.includes(pixel.color); + + if (pixel.threatened === false || isNormalColor) { + let moved = false; + + if (Math.random() < 0.15 && tryMove(pixel, pixel.x + 1 * pixel.dir, pixel.y)) { + moved = true; + } + + if (!moved && tryMove(pixel, pixel.x, pixel.y + 1)) { + moved = true; + } + + if (!moved && Math.random() < 0.01) { + tryMove(pixel, pixel.x + 1 * pixel.dir, pixel.y - 1); + } + } } - - if (Math.random() < 0.05) { - pixel.dir *= -1; - } - - // Movement logic: - // Move only if NOT threatened OR if color is back to normal - let isNormalColor = defaultColors.includes(pixel.color); - - if (pixel.threatened === false || isNormalColor) { - let moved = false; - - if (Math.random() < 0.15 && tryMove(pixel, pixel.x + 1 * pixel.dir, pixel.y)) { - moved = true; - } - - if (!moved && tryMove(pixel, pixel.x, pixel.y + 1)) { - moved = true; - } - - if (!moved && Math.random() < 0.01) { - tryMove(pixel, pixel.x + 1 * pixel.dir, pixel.y - 1); - } - } - } } elements.turtle = { - color: ["#47b000", "#406000"], - behavior: [ - "XX|XX|SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup,scute%14", - "XX|FX%1|M2%5 AND SW:scute%5", - "M2|M1|M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%5", - ], - density: 1080, - state: "solid", - category: "life", - foodNeed: 10, - tempHigh: 100, - stateHigh: "cooked_meat", - tempLow: -10, - stateLow: "frozen_meat", - breakInto: ["scute", "blood", "meat", "limestone"], - reactions: { - "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.1 }, - "kelp": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, - "algae": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "limestone"], chance: 0.4 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: "limestone" }, - "poison_gas": { elem1: "limestone" }, - }, -} - -elements.tortoise = { - color: ["#47b000", "#406000"], - behavior: [ - "XX|XX|XX", - "XX|FX%1|M2%5", - "M2|M1|M2", - ], - density: 1080, - state: "solid", - category: "life", - foodNeed: 10, - tempHigh: 100, - stateHigh: "cooked_meat", - tempLow: -10, - stateLow: "frozen_meat", - breakInto: ["blood", "meat", "limestone"], - reactions: { - "grass": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "plant": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "evergreen": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "pistil": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "petal": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "lettuce": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "tomato": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "pumpkin": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, - "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "limestone"], chance: 0.4 }, - "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, - "mercury": { elem1: "rotten_meat", chance: 0.1 }, - "bleach": { elem1: "rotten_meat", chance: 0.1 }, - "infection": { elem1: "rotten_meat", chance: 0.025 }, - "uranium": { elem1: "rotten_meat", chance: 0.1 }, - "cyanide": { elem1: "rotten_meat", chance: 0.1 }, - "chlorine": { elem1: "meat", chance: 0.1 }, - "alcohol": { elem1: "meat", chance: 0.025 }, - "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: "limestone" }, - "poison_gas": { elem1: "limestone" }, - } + color: ["#47b000", "#406000"], + behavior: [ + "XX|XX|SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup,scute%14", + "XX|FX%1|M2%5 AND SW:scute%5", + "M2|M1|M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%5", + ], + density: 1080, + state: "solid", + category: "life", + foodNeed: 10, + reactions: { + "fish": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.1 }, + "kelp": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.5 }, + "algae": { elem2: null, func: behaviors.FEEDPIXEL, chance: 0.2 }, + "radiation": { elem1: ["ash", "meat", "cooked_meat", "rotten_meat", "limestone"], chance: 0.4 }, + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "mercury": { elem1: "rotten_meat", chance: 0.1 }, + "bleach": { elem1: "rotten_meat", chance: 0.1 }, + "infection": { elem1: "rotten_meat", chance: 0.025 }, + "uranium": { elem1: "rotten_meat", chance: 0.1 }, + "cyanide": { elem1: "rotten_meat", chance: 0.1 }, + "chlorine": { elem1: "meat", chance: 0.1 }, + "alcohol": { elem1: "meat", chance: 0.025 }, + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "poison": { elem1: "limestone" }, + "poison_gas": { elem1: "limestone" }, + }, + tick: function (pixel) { + pixel.cd ??= 600; + pixel.cd--; + for (let i = 0; i < squareCoords.length; i++) { + let x = pixel.x + squareCoords[i][0]; + let y = pixel.y + squareCoords[i][1]; + if (isEmpty(x, y) && pixel.cd <= 0 && Math.random() <= 0.005) { + createPixel("scute", x, y); + pixel.cd = 600; + } + } + } } From 2e244f636beccd4fbc96eb905e81446a586ef85d Mon Sep 17 00:00:00 2001 From: Cube14yt Date: Wed, 26 Nov 2025 19:46:33 +0800 Subject: [PATCH 3/3] Add static.js --- mods/static.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 mods/static.js diff --git a/mods/static.js b/mods/static.js new file mode 100644 index 00000000..82e8a1b3 --- /dev/null +++ b/mods/static.js @@ -0,0 +1,42 @@ +// IIFE to prevent this mod from breaking +(() => { + let staticMode = 0 + + function randomGrayscale() { + const value = Math.floor(Math.random() * 256); + return `rgb(${value}, ${value}, ${value})`; + } + + function randomColor() { + const letters = "0123456789ABCDEF"; + let color = "#"; + for (let i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)]; + } + return color; + } + + function loopScreen(callback) { + for (let x = 0; x <= width; x++) { + for (let y = 0; y <= height; y++) { + callback(x, y) + } + } + } + + keybinds["KeyS"] = () => { + staticMode === 0 ? staticMode = 1 : staticMode === 1 ? staticMode = 2 : staticMode = 0 + } + + renderPostPixel(function (ctx) { + if (!staticMode) return + loopScreen((x, y) => { + if (staticMode === 1) { + drawSquare(ctx, randomGrayscale(), x, y, 1, 0.2) + } + if (staticMode === 2) { + drawSquare(ctx, randomColor(), x, y, 1, 0.3) + } + }) + }) +})()