From 3d446c73c579bc376748f38d7bc885b83ab82c1a Mon Sep 17 00:00:00 2001 From: Cube14yt Date: Wed, 25 Jun 2025 20:30:10 +0800 Subject: [PATCH] Update coldblooded.js --- mods/coldblooded.js | 143 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 124 insertions(+), 19 deletions(-) diff --git a/mods/coldblooded.js b/mods/coldblooded.js index 317c1d81..44e37dc3 100644 --- a/mods/coldblooded.js +++ b/mods/coldblooded.js @@ -3,13 +3,15 @@ v 0.1 added snake 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 */ const defaultColors = ["#02c937", "#18d64a", "#09e644"]; -// Only run this if the human, head, and body elements exist -if (elements.human && elements.head && elements.body) { +runAfterAutogen(function () { // Human const oldHumanTick = elements.human.tick; elements.human.tick = function (pixel) { @@ -17,7 +19,9 @@ if (elements.human && elements.head && elements.body) { if (pixel.poisoned !== undefined) { pixel.poisoned--; if (pixel.poisoned <= 0) { - deletePixel(pixel.x, pixel.y); + pixel.dead = true; + pixel.color = pixel.oldColor; + delete pixel.poisoned return; } } @@ -30,7 +34,9 @@ if (elements.human && elements.head && elements.body) { if (pixel.poisoned !== undefined) { pixel.poisoned--; if (pixel.poisoned <= 0) { - deletePixel(pixel.x, pixel.y); + pixel.dead = true; + pixel.color = pixel.oldColor; + delete pixel.poisoned; return; } } @@ -43,12 +49,14 @@ if (elements.human && elements.head && elements.body) { if (pixel.poisoned !== undefined) { pixel.poisoned--; if (pixel.poisoned <= 0) { - deletePixel(pixel.x, pixel.y); + pixel.dead = true; + pixel.color = pixel.oldColor; + delete pixel.poisoned; return; } } - }; -} + } +}); function eatBee(pixel1, pixel2) { @@ -58,6 +66,9 @@ function eatBee(pixel1, pixel2) { 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; } @@ -105,7 +116,8 @@ elements.lizard = { "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": { elem1: null }, + "poison_gas": { elem1: null }, }, foodNeed: 5, temp: 20, @@ -164,7 +176,8 @@ elements.toad = { "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": { elem1: "rotten_meat", elem2: null }, + "poison_gas": { elem1: null }, }, foodNeed: 10, baby: "toad_tadpole", @@ -202,6 +215,8 @@ elements.toad_tadpole = { "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", @@ -248,7 +263,9 @@ elements.toad_tadpole = { "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 } + "vinegar": { elem1: "rotten_meat", chance: 0.001 }, + "poison": { elem1: null }, + "poison_gas": { elem1: null }, }, foodNeed: 10, temp: 18, @@ -289,7 +306,9 @@ elements.axolotl = { "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 } + "oxygen": { elem2: "carbon_dioxide", chance: 0.5 }, + "poison": { elem1: null }, + "poison_gas": { elem1: null }, }, foodNeed: 20, temp: 18, @@ -355,7 +374,6 @@ elements.snake = { "chlorine": { elem1: "meat", chance: 0.1 }, "alcohol": { elem1: "meat", chance: 0.025 }, "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: null } }, category: "life", state: "solid", @@ -391,7 +409,7 @@ 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%15 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', @@ -413,14 +431,15 @@ elements.crocodile = { "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) - } + if (otherPixel.threatened !== true || isNormalColor === true) { + behaviors.FEEDPIXEL(pixel, otherPixel); + 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 }, @@ -434,7 +453,8 @@ elements.crocodile = { "chlorine": { elem1: "meat", chance: 0.1 }, "alcohol": { elem1: "meat", chance: 0.025 }, "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: null } + "poison": { elem1: null }, + "poison_gas": { elem1: null }, }, temp: 18, tempHigh: 100, @@ -469,6 +489,21 @@ elements.scale = { } } +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, + } + } +} + elements.scale_plate = { category: "solids", behavior: [ @@ -496,6 +531,33 @@ elements.scale_plate = { } } +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); + } + if (pixel.temp >= 900) { + let chosen = hotter[Math.floor(Math.random() * hotter.length)]; + changePixel(pixel, chosen); + } + } +} + elements.chameleon = { color: ["#02c937", "#18d64a", "#09e644"], category: "life", @@ -521,7 +583,8 @@ elements.chameleon = { "chlorine": { elem1: "meat", chance: 0.1 }, "alcohol": { elem1: "meat", chance: 0.025 }, "vinegar": { elem1: "rotten_meat", chance: 0.001 }, - "poison": { elem1: null } + "poison": { elem1: null }, + "poison_gas": { elem1: null }, }, tick: function (pixel) { @@ -625,3 +688,45 @@ elements.chameleon = { } } } + +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, + 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; + } + } + } +}