diff --git a/mods/hot_rocks.js b/mods/hot_rocks.js new file mode 100644 index 00000000..a39eb4e7 --- /dev/null +++ b/mods/hot_rocks.js @@ -0,0 +1,124 @@ +function redHotColorgen(colorIn,outputFormat="rgb") { + var color = colorIn; + //console.log(color); + if(!Array.isArray(color)) { + color = [color]; + }; + //console.log(color); + color = color.map(x => convertColorFormats(x,"json")); + //console.log(color); + for(i = 0; i < color.length; i++) { + var subcolor = color[i]; + //console.log(i); + subcolor.r += 48; + subcolor.r *= 1.7; + subcolor.g += 24; + subcolor.g *= 1.2; + subcolor.b -= 10; + subcolor.b *= 0.75; + for(colorlet in subcolor) { + subcolor[colorlet] = Math.round(rgbColorBound(subcolor[colorlet])); + }; + //console.log(color); + }; + //console.log(color); + color = color.map(x => convertColorFormats(x,outputFormat)); + if(color.length == 1) { color = color[0] }; + return color; +}; + +var hotNameOverrides = { + dry_dirt: "hot_dirt", +}; + +elements.dirt._data = ["mixed","mixed","particulate"]; +elements.dry_dirt._data = ["mixed","mixed","particulate"]; +//console.log(elements.dry_dirt.stateHigh); + +runAfterLoad(function() { + var igneousRocksAndSands = Object.keys(elements).filter( + function(elemName) { + //console.log(elemName,elements[elemName]._data?.[2]); + return ["igneous_rock","igneous_gravel","sedimentary_rock","particulate"].includes(elements[elemName]._data?.[2]) && !("clay","limestone","black_limestone","shale".includes(elemName)) + } + ); + + console.log(igneousRocksAndSands); + + function hotData2Switch(data2) { + switch(data2) { + case "igneous_rock": + return "hot_igneous_rock"; + case "particulate": + return "hot_particulate"; + case "sedimentary_rock": + return "hot_sedimentary_rock"; + case "igneous_gravel": + return "hot_igneous_gravel"; + default: + return "hot_" + data2; + }; + }; + + igneousRocksAndSands = igneousRocksAndSands.concat("dry_dirt"); + + for(j = 0; j < igneousRocksAndSands.length; j++) { + var rockName = igneousRocksAndSands[j]; + var rockInfo = elements[rockName]; + if(!rockInfo) { + console.error(rockName); + continue; + }; + var rockData = rockInfo._data ?? ["error","error","hot_unknown"]; + var newName = hotNameOverrides[rockName] ?? "hot_" + rockName; + //console.log(rockInfo.stateHigh); + elements[newName] = { + color: redHotColorgen(rockInfo.color,"hex"), + behavior: [ + "XX|CR:fire%0.5|XX", + "XX|XX|XX", + "M2|M1|M2" + ], + category: "land", + state: "solid", + temp: Math.min(rockInfo.tempHigh - 50,850), + tempHigh: rockInfo.tempHigh, + tempLow: (rockInfo.tempHigh - 100,800), + stateLow: rockName, + stateHigh: rockInfo.stateHigh, + density: rockData.density * 0.9, + hardness: rockData.density * 0.85, + //breakInto: newName + "_gravel", + _data: [rockData[0], rockData[1], hotData2Switch(rockData[2])], + }; + + if(rockName == "basalt") { + elements[newName].behavior = [ + "XX|CR:fire%0.5|XX", + "XX|XX|XX", + "XX|M1|XX" + ] + }; + + //console.log(j); + + if(rockInfo.nellfireImmune) { + elements[newName].nellfireImmune = true; + }; + + elements[rockName].tempHigh = Math.min(rockInfo.tempHigh - 100,800); + elements[rockName].stateHigh = newName; + if(rockInfo._data[2] == "igneous_rock" && elements[rockName + "_gravel"]) { + elements[rockName].stateHigh = rockName + "_gravel"; + }; + }; + + elements.dirt.tempHigh = 100; + elements.dirt.stateHigh = "dry_dirt"; + elements.dry_dirt.tempHigh = 800; + elements.dry_dirt.stateHigh = "hot_dirt"; + elements.hot_dirt.tempHigh = 1200; + elements.hot_dirt.stateHigh = "molten_dirt"; + elements.hot_dirt.tempLow = 800; + elements.hot_dirt.stateLow = "dry_dirt"; +}); \ No newline at end of file