From 85ae45f25bc14ddb213f01b68c66775bfe61c3fe Mon Sep 17 00:00:00 2001 From: sb <155691462+stefanblox@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:30:31 -0300 Subject: [PATCH] randomelements 0.2 yippee --- mods/randomelements.js | 116 +++++++++++++++++++++++++++++++++-------- 1 file changed, 93 insertions(+), 23 deletions(-) diff --git a/mods/randomelements.js b/mods/randomelements.js index c052a681..3a7b1846 100644 --- a/mods/randomelements.js +++ b/mods/randomelements.js @@ -45,7 +45,7 @@ const nounTemperatures = { gas: ["#ffffff", "#eeeeee", "#dddddd", "#cccccc", "#bbbbbb"], plasma: ["#ff9966", "#ffaa77", "#ffbb88", "#ffcc99", "#ffddaa"], slime: ["#88cc88", "#99dd99", "#aaddaa", "#bbeebb", "#ccffcc"], - sand: ["#cccccc", "#dddddd", "#eeeeee", "#ffffff", "#eeeeee"], + sand: ["#D2B48C", "#E8D5A9", "#F0E3C4", "#DCD0BF", "#EBE4D6"], dust: ["#aaaaaa", "#bbbbbb", "#cccccc", "#dddddd", "#eeeeee"], rock: ["#777777", "#888888", "#999999", "#aaaaaa", "#bbbbbb"], lava: ["#ff4400", "#ff5511", "#ff6622", "#ff7733", "#ff8844"], @@ -57,26 +57,24 @@ const nounTemperatures = { }; -const adjectiveStates = { - shiny: "solid", - glowing: "gas", - dark: "solid", - bright: "gas", - heavy: "solid", - light: "gas", - hot: "solid", - cold: "solid", - hard: "solid", - soft: "liquid", - smooth: "liquid", - rough: "solid", - round: "liquid", - sharp: "solid", - sweet: "liquid", - sour: "liquid", - bitter: "liquid", - salty: "solid", - savory: "liquid" + const nounStates = { + metal: "solid", + crystal: "solid", + stone: "solid", + powder: "liquid", + liquid: "liquid", + gas: "gas", + plasma: "gas", + slime: "liquid", + sand: "liquid", + dust: "liquid", + rock: "solid", + lava: "liquid", + ice: "solid", + vapor: "gas", + ash: "liquid", + soot: "liquid", + sludge: "liquid" }; // Map noun to behavior @@ -100,12 +98,29 @@ const nounBehaviors = { sludge: behaviors.LIQUID }; +const adjectiveBreakInto = { + sweet: "sugar", + salty: "salt", +}; + +const nounBreakInto = { + crystal: "glass_shard", + ice: "snow", + rock: ["sand", "gravel"], +}; + +const adjectiveColorModifiers = { + dark: 0.8, // darker + shiny: 1.2, // brighter + glowing: 1.5 // brightest +}; + // Generate elements for (const name of elementNames) { const [adjective, noun] = name.split("_"); - const baseColor = nounColors[noun]; + let baseColor = nounColors[noun]; const {tempLow, tempHigh} = nounTemperatures[noun]; @@ -117,14 +132,69 @@ for (const name of elementNames) { temp /= 2; } + if (adjective in adjectiveColorModifiers) { + const modifier = adjectiveColorModifiers[adjective]; + baseColor = modifyColor(baseColor, modifier); + } + elements[name] = { color: baseColor, behavior: nounBehaviors[noun], category: "random elements", - state: adjectiveStates[adjective], + state: nounStates[noun], temp: temp, + breakInto: adjectiveBreakInto[adjective] || nounBreakInto[noun], density: Math.random() * 100, viscosity: Math.random() * 100 }; + function modifyColor(color, modifier) { + if (color[0] === '#') { + color = color.slice(1); + } + + color = String(color); + + // Check for '#' + const match = color.match(/^#?(.*)$/); + if (match) { + color = match[1]; + } + + // Convert to RGB + let [r, g, b] = color.match(/.{1,2}/g).map(x => parseInt(x, 16)); + + // Apply modifier + r = Math.round(r * modifier); + g = Math.round(g * modifier); + b = Math.round(b * modifier); + + // Constrain RGB values to 0-255 + r = Math.max(0, Math.min(255, r)); + g = Math.max(0, Math.min(255, g)); + b = Math.max(0, Math.min(255, b)); + + // Convert back to hex + return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); + } + } + +/* +changelog only count importtant stuff and not the small details + +0.1 +added the mod + +0.2 +elements have breakInto's +elements with the adjectives "dark, shiny and glowing" are darker or brighter +elements with the nouns "crystal, ice, rock" can break into other elements like "glass_shard, snow, sand" +fixed some elements having wrong states + +todo: +elements have reactions +gases dont have breakintos + +what a silly little changelog! i made it literally right here!! +*/