From 0f46d22a1ca3b83c9e2ef03155671c62c4e80fcd Mon Sep 17 00:00:00 2001 From: redbirdly <155550833+redbirdly@users.noreply.github.com> Date: Wed, 24 Apr 2024 11:36:08 +0800 Subject: [PATCH] Create lizard_mod.js mod about lizards --- mods/lizard_mod.js | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 mods/lizard_mod.js diff --git a/mods/lizard_mod.js b/mods/lizard_mod.js new file mode 100644 index 00000000..d8f30415 --- /dev/null +++ b/mods/lizard_mod.js @@ -0,0 +1,91 @@ +// lizard_mod.js by @RedBirdly + +function blendColors(color1, color2, ratio = 0.5) { + // Convert the colors to RGB + const rgb1 = parseColor(color1); + const rgb2 = parseColor(color2); + + // Calculate the blended color + const blendedColor = [ + Math.round(rgb1[0] * (1 - ratio) + rgb2[0] * ratio), // Red + Math.round(rgb1[1] * (1 - ratio) + rgb2[1] * ratio), // Green + Math.round(rgb1[2] * (1 - ratio) + rgb2[2] * ratio) // Blue + ]; + + // Convert the blended color back to a CSS color string + return `rgb(${blendedColor[0]}, ${blendedColor[1]}, ${blendedColor[2]})`; +} + + +function parseColor(color) { + // Create a temporary div to parse the color + const div = document.createElement('div'); + div.style.color = color; + document.body.appendChild(div); + + // Get the computed color + const computedColor = getComputedStyle(div).color; + + // Remove the temporary div + document.body.removeChild(div); + + // Parse the computed color into RGB values + const match = computedColor.match(/\d+/g); + return match.map(Number); +} + +// dark red, dark green, brown, dark gray, light gray, lime +let lizard_colors = ["#4d2f2a", "#356641", "#85754d", "#3c3c3c", "#A1A1A1", "#98fb98"]; + +// camouflage function for lizards +function camo(pixel) { + if (!paused) { + // set camouflage color to random color + if (Math.random() < 0.002) { + let n = Math.floor(Math.random() * lizard_colors.length); + pixel.color = lizard_colors[n]; + } + // set camouflage color to random color but make it slightly gray because camouflage isn't perfect + if (Math.random() < 0.1) { + for (let i = 0; i < currentPixels.length; i++) { + let x = currentPixels[i].x; + let y = currentPixels[i].y; + let dx = Math.abs(x - pixel.x); + let dy = Math.abs(y - pixel.y); + if (dx <= 1 && dy <= 1 && currentPixels[i].element != "lizard") { + pixel.color = blendColors(blendColors(currentPixels[i].color, "#887766", 0.4), pixel.color); + break; + } + } + } + } +} + +// define element +elements.lizard = { + color: lizard_colors, + behavior: [ + "ST%98|M1%6|ST%98", + "XX|XX|M2%20 AND BO", + "XX|M1%80|M2", + ], + tick: camo, + tempHigh: 100, + stateHigh: "ash", + tempLow: 0, + stateLow: "dead_bug", + breakInto: "dead_bug", + category: "life", + burn: 95, + burnTime: 25, + state: "solid", + density: 500, + conduct: 0.15, + reactions: { + "bird": { elem2: null, chance: 0.1, func: behaviors.FEEDPIXEL }, + "plant": { elem2: null, chance: 0.05, func: behaviors.FEEDPIXEL }, + "tomato": { elem2: null, chance: 0.05, func: behaviors.FEEDPIXEL }, + "fly": { elem2: null, chance: 0.15, func: behaviors.FEEDPIXEL }, + "ant": { elem2: null, chance: 0.1, func: behaviors.FEEDPIXEL }, + } +};