From 2d0206f769e7eb9be48435a0fc26993faef5d852 Mon Sep 17 00:00:00 2001 From: Lily-129 <68935009+Lily-129@users.noreply.github.com> Date: Wed, 6 Apr 2022 09:00:30 -0400 Subject: [PATCH] gravel generation and some other changes --- mods/random_rocks.js | 348 +++++++++++++++++++++++++------------------ 1 file changed, 202 insertions(+), 146 deletions(-) diff --git a/mods/random_rocks.js b/mods/random_rocks.js index 5fce8d80..d73f7d78 100644 --- a/mods/random_rocks.js +++ b/mods/random_rocks.js @@ -10,194 +10,250 @@ function _randomArrayChoice(array) { return array[_randomInt(array.length - 1)] } +const initialArray = ["m","n","p","t","ch","k","b","d","j","g","f","th","s","sh","h","l","r","y","w"] +const vowelArray = ["a","e","i","o","u","oo","ee","oa"] +const medialArray = ["m","n","p","t","k","b","d","g","f","th","s","sh","h","l","r","y"] +const finalArray = ["m","n","p","t","k","b","d","g","f","th","s","sh","l","r","y"] + +enabledMods.includes("mods/log_rocks.js") ? logRocks = true : logRocks = false +//This is intended for people who want to copy their rocks from the console to a file for some reason. Technically, the empty enabler script doesn't even have to exist, but I'll make it just so that index.html doesn't spit out an ERR_FILE_NOT_FOUND. + function generateName() { //these are picked arbitrarily - - //console.log("defining arrays") - var initialArray = ["m","n","p","t","ch","k","b","d","j","g","f","th","s","sh","h","l","r","y","w"] - var vowelArray = ["a","e","i","o","u","oo","ee","oa"] - var medialArray = ["m","n","p","t","k","b","d","g","f","th","s","sh","h","l","r","y"] - var finalArray = ["m","n","p","t","k","b","d","g","f","th","s","sh","l","r","y"] + + //console.log("getting random type") + var randomInt1 = _randomInt(6) - //console.log("getting random type") - var randomInt1 = _randomInt(5) - - //console.log("generating type " + randomInt1) + //console.log("generating type " + randomInt1) if(randomInt1 == 0) { var randomName = _randomArrayChoice(initialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(finalArray) - //console.log("generated T" + randomInt1 + " name") + //console.log("generated T" + randomInt1 + " name") } else if(randomInt1 == 1) { var randomName = _randomArrayChoice(initialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(medialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(finalArray) - //console.log("generated T" + randomInt1 + " name") + //console.log("generated T" + randomInt1 + " name") } else if(randomInt1 == 2) { var randomName = _randomArrayChoice(initialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(finalArray) + "e" - //console.log("generated T" + randomInt1 + " name") + //console.log("generated T" + randomInt1 + " name") } else if(randomInt1 == 3) { var randomName = _randomArrayChoice(initialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(medialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(medialArray) + _randomArrayChoice(finalArray) - //console.log("generated T" + randomInt1 + " name") + //console.log("generated T" + randomInt1 + " name") } else if(randomInt1 == 4) { var randomName = _randomArrayChoice(vowelArray) + _randomArrayChoice(initialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(finalArray) - //console.log("generated T" + randomInt1 + " name") + //console.log("generated T" + randomInt1 + " name") } else if(randomInt1 == 5) { var randomName = _randomArrayChoice(initialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(medialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(medialArray) + _randomArrayChoice(vowelArray) - //console.log("generated T" + randomInt1 + " name") + //console.log("generated T" + randomInt1 + " name") + } else if(randomInt1 == 6) { + var randomName = _randomArrayChoice(initialArray) + _randomArrayChoice(vowelArray) + _randomArrayChoice(medialArray) + _randomArrayChoice(vowelArray) + //console.log("generated T" + randomInt1 + " name") } else { - var randomName = randomArrayChoice(vowelArray) + randomArrayChoice(initialArray) + randomArrayChoice(vowelArray) + randomArrayChoice(finalArray) - //console.log("warning: type was above 5 somehow") + var randomName = randomArrayChoice(vowelArray) + randomArrayChoice(medialArray) + randomArrayChoice(vowelArray) + randomArrayChoice(finalArray) + //console.log("warning: type was above 6 somehow") } - //console.log(randomName) + //console.log(randomName) return randomName } const rockColor1 = {r: 128, g: 128, b: 128} const rockColor2 = {r: 79, g: 79, b: 79} const rockColor3 = {r: 148, g: 148, b: 148} +const gravelColor1 = {r: 227, g: 224, b: 223} +const gravelColor2 = {r: 177, g: 171, b: 163} +const gravelColor3 = {r: 116, g: 115, b: 109} +const gravelColor4 = {r: 82, g: 75, b: 71} function _rgbToHex(color) { - if(typeof(color) == "object") { //Expects object like "{r: 172, g: 11, b: 34}" - //console.log("Loading colors"); - //console.log("Loading R"); - var red = color.r; - //console.log("Loading G"); - var green = color.g; - //console.log("Loading B"); - var blue = color.b; - //console.log("Rounding R"); - red = Math.round(red); - //console.log("Rounding G"); - green = Math.round(green); - //console.log("Rounding B"); - blue = Math.round(blue); - //console.log("Bounding R"); - red = Math.min(255,Math.max(0,red)); - //console.log("Bounding G"); - green = Math.min(255,Math.max(0,green)); - //console.log("Bounding B"); - blue = Math.min(255,Math.max(0,blue)); - //console.log("Converting R"); - red = red.toString(16); - //console.log("Converting G"); - green = green.toString(16); - //console.log("Converting B"); - blue = blue.toString(16); - //console.log("Padding R"); - while(red.length < 2) { - red = "0" + red; - }; - //console.log("Padding G"); - while(green.length < 2) { - green = "0" + green; - }; - //console.log("Padding B"); - while(blue.length < 2) { - blue = "0" + blue; - }; - //console.log("Concatenating"); - return "#" + red + green + blue; - } else if(typeof(color) == "string") { //Expects string like "rgb(20,137,4)". Also doesn't round properly for some reason... - //console.log("Splitting string") - color = color.split(","); - //console.log("Getting R"); - var red = parseInt(color[0].substring(4)) - //console.log("Getting G"); - var green = parseInt(color[1]) - //console.log("Getting B"); - var blue = parseInt(color[2].slice(0,-1)) - //console.log("Rounding R"); - red = Math.round(red); - //console.log("Rounding G"); - green = Math.round(green); - //console.log("Rounding B"); - blue = Math.round(blue); - //console.log("Bounding R"); - red = Math.min(255,Math.max(0,red)); - //console.log("Bounding G"); - green = Math.min(255,Math.max(0,green)); - //console.log("Bounding B"); - blue = Math.min(255,Math.max(0,blue)); - //console.log("Converting R"); - red = red.toString(16); - //console.log("Converting G"); - green = green.toString(16); - //console.log("Converting B"); - blue = blue.toString(16); - //console.log("Padding R"); - while(red.length < 2) { - red = "0" + red; - }; - //console.log("Padding G"); - while(green.length < 2) { - green = "0" + green; - }; - //console.log("Padding B"); - while(blue.length < 2) { - blue = "0" + blue; - }; - //console.log("Concatenating"); - return "#" + red + green + blue; - } else { - throw "error: Only objects and strings are supported." - }; + if(typeof(color) == "object") { //Expects object like "{r: 172, g: 11, b: 34}" + //console.log("Loading colors"); + //console.log("Loading R"); + var red = color.r; + //console.log("Loading G"); + var green = color.g; + //console.log("Loading B"); + var blue = color.b; + //console.log("Rounding R"); + red = Math.round(red); + //console.log("Rounding G"); + green = Math.round(green); + //console.log("Rounding B"); + blue = Math.round(blue); + //console.log("Bounding R"); + red = Math.min(255,Math.max(0,red)); + //console.log("Bounding G"); + green = Math.min(255,Math.max(0,green)); + //console.log("Bounding B"); + blue = Math.min(255,Math.max(0,blue)); + //console.log("Converting R"); + red = red.toString(16); + //console.log("Converting G"); + green = green.toString(16); + //console.log("Converting B"); + blue = blue.toString(16); + //console.log("Padding R"); + while(red.length < 2) { + red = "0" + red; + }; + //console.log("Padding G"); + while(green.length < 2) { + green = "0" + green; + }; + //console.log("Padding B"); + while(blue.length < 2) { + blue = "0" + blue; + }; + //console.log("Concatenating"); + return "#" + red + green + blue; + } else if(typeof(color) == "string") { //Expects string like "rgb(20,137,4)". Also doesn't round properly for some reason... + //console.log("Splitting string") + color = color.split(","); + //console.log("Getting R"); + var red = parseInt(color[0].substring(4)) + //console.log("Getting G"); + var green = parseInt(color[1]) + //console.log("Getting B"); + var blue = parseInt(color[2].slice(0,-1)) + //console.log("Rounding R"); + red = Math.round(red); + //console.log("Rounding G"); + green = Math.round(green); + //console.log("Rounding B"); + blue = Math.round(blue); + //console.log("Bounding R"); + red = Math.min(255,Math.max(0,red)); + //console.log("Bounding G"); + green = Math.min(255,Math.max(0,green)); + //console.log("Bounding B"); + blue = Math.min(255,Math.max(0,blue)); + //console.log("Converting R"); + red = red.toString(16); + //console.log("Converting G"); + green = green.toString(16); + //console.log("Converting B"); + blue = blue.toString(16); + //console.log("Padding R"); + while(red.length < 2) { + red = "0" + red; + }; + //console.log("Padding G"); + while(green.length < 2) { + green = "0" + green; + }; + //console.log("Padding B"); + while(blue.length < 2) { + blue = "0" + blue; + }; + //console.log("Concatenating"); + return "#" + red + green + blue; + } else { + throw "error: Only objects and strings are supported." + }; }; -function _multiplyColorObjects(color1,color2,weight1=0.5) { //third argument is for color1 and expects a float from 0 to 0.5 - var w1 = Math.min(Math.max(weight1,0),1) - var red1 = color1.r - var green1 = color1.g - var blue1 = color1.b - var red2 = color2.r - var green2 = color2.g - var blue2 = color2.b - var red3 = (red1 * w1) + (red2 * (1 - w1)) - var green3 = (green1 * w1) + (green2 * (1 - w1)) - var blue3 = (blue1 * w1) + (blue2 * (1 - w1)) - return {r: red3, g: green3, b: blue3} +function _multiplyColorObjects(color1,color2,weight1=0.5) { /*third argument is for color1 and expects a float from 0 + to 1, where 0 means "all color2" and 1 means "all color1"*/ + var w1 = Math.min(Math.max(weight1,0),1) + var red1 = color1.r + var green1 = color1.g + var blue1 = color1.b + var red2 = color2.r + var green2 = color2.g + var blue2 = color2.b + var red3 = (red1 * w1) + (red2 * (1 - w1)) + var green3 = (green1 * w1) + (green2 * (1 - w1)) + var blue3 = (blue1 * w1) + (blue2 * (1 - w1)) + return {r: red3, g: green3, b: blue3} } function generateColors() { - var randomR = _randomInt(255) - var randomG = _randomInt(255) - var randomB = _randomInt(255) - var randomColor = {r: randomR, g: randomG, b: randomB} - var newRockColor1 = _multiplyColorObjects(rockColor1,randomColor,weight1=0.65) - var newRockColor2 = _multiplyColorObjects(rockColor2,randomColor,weight1=0.65) - var newRockColor3 = _multiplyColorObjects(rockColor3,randomColor,weight1=0.65) - var newRockColor1 = _rgbToHex(newRockColor1) - var newRockColor2 = _rgbToHex(newRockColor2) - var newRockColor3 = _rgbToHex(newRockColor3) - return [newRockColor1, newRockColor2, newRockColor3] + var randomR = _randomInt(255) + var randomG = _randomInt(255) + var randomB = _randomInt(255) + var randomColor = {r: randomR, g: randomG, b: randomB} + var newRockColor1 = _multiplyColorObjects(rockColor1,randomColor,weight1=0.65) + var newRockColor2 = _multiplyColorObjects(rockColor2,randomColor,weight1=0.65) + var newRockColor3 = _multiplyColorObjects(rockColor3,randomColor,weight1=0.65) + var newGravelColor1 = _multiplyColorObjects(gravelColor1,randomColor,weight1=0.675) + var newGravelColor2 = _multiplyColorObjects(gravelColor2,randomColor,weight1=0.675) + var newGravelColor3 = _multiplyColorObjects(gravelColor3,randomColor,weight1=0.675) + var newGravelColor4 = _multiplyColorObjects(gravelColor4,randomColor,weight1=0.675) + var newRockColor1 = _rgbToHex(newRockColor1) + var newRockColor2 = _rgbToHex(newRockColor2) + var newRockColor3 = _rgbToHex(newRockColor3) + var newGravelColor1 = _rgbToHex(newGravelColor1) + var newGravelColor2 = _rgbToHex(newGravelColor2) + var newGravelColor3 = _rgbToHex(newGravelColor3) + var newGravelColor4 = _rgbToHex(newGravelColor4) + return [newRockColor1, newRockColor2, newRockColor3, newGravelColor1, newGravelColor2, newGravelColor3, newGravelColor4] } function _add2(number1,number2) { - return number1 + number2 + return number1 + number2 } function _arrayAverage(array) { - var total = array.reduce(_add2,0) - return total / array.length + var total = array.reduce(_add2,0) + return total / array.length } function _generateAveragedRandoms() { - return _arrayAverage([Math.random(),Math.random(),Math.random()]) + return _arrayAverage([Math.random(),Math.random(),Math.random()]) } function avgRndToMult() { - return 1 + (0.55 - _generateAveragedRandoms()) + return 1 + (0.55 - _generateAveragedRandoms()) +} + +elements.gravel.breakInto = "dust" + +generatedRockElementArray = [] + +function copyRocks() { + copy(generatedRockElementArray) } for(i = 0; i < 10; i++) { - var name = generateName() - while(typeof(elements[name]) != "undefined") { - name = generateName() - } - elements[name] = { - color: generateColors(), - behavior: behaviors.POWDER, - tempHigh: 950 * avgRndToMult(), - category: "random rocks", - state: "solid", - density: 2550 * avgRndToMult(), - hardness: 0.5 * avgRndToMult(), - breakInto: ["sand","gravel"], //might auto-generate soon, maybe not - } -} \ No newline at end of file + var name = generateName() + var meltingAdjustment = avgRndToMult() + var densityAdjustment = avgRndToMult() + var hardnessAdjustment = avgRndToMult() + var colors = generateColors() + if(typeof(elements[name]) != "undefined") { + name = name + _randomArrayChoice(vowelArray) + _randomArrayChoice(finalArray) + } + elements[name] = { + name: name, + color: [colors[0], colors[1], colors[2]], + behavior: behaviors.POWDER, + tempHigh: 950 * meltingAdjustment, + category: "random rocks", + state: "solid", + density: 2550 * densityAdjustment, + hardness: 0.5 * hardnessAdjustment, + breakInto: ["dust",`${name}_gravel`], + } + + if(logRocks == true) { + console.log(`elements.${name} = {\n name: \"${name}\",\n color: [\"${colors[0]}\", \"${colors[1]}\", \"${colors[2]}\"],\n behavior: behaviors.POWDER,\n tempHigh: ${950 * meltingAdjustment},\n category: \"random rocks\",\n state: \"solid\",\n density: ${2550 * densityAdjustment},\n hardness: ${0.5 * hardnessAdjustment},\n breakInto: [\"dust\",\"${name}_gravel\"],\n};`) + } + + generatedRockElementArray.push(elements[name]) + + elements[`${name}_gravel`] = { + name: `${name} gravel`, + color: [colors[3], colors[4], colors[5], colors[6]], + behavior: behaviors.POWDER, + tempHigh: 950 * meltingAdjustment, + stateHigh: name, + category: "random rocks", + state: "solid", + density: 1680 * densityAdjustment, + hardness: 0.2 * (hardnessAdjustment ** (2/3)), + breakInto: "dust", + } + + if(logRocks == true) { + console.log(`elements.${name}_gravel = {\n name: \"${name} gravel\",\n color: [\"${colors[3]}\", \"${colors[4]}\", \"${colors[5]}\", \"${colors[6]}\"],\n behavior: behaviors.POWDER,\n tempHigh: ${950 * meltingAdjustment},\n stateHigh: \"${name}\",\n category: \"random rocks\",\n state: \"solid\",\n density: ${1680 * densityAdjustment},\n hardness: ${0.2 * (hardnessAdjustment ** (2/3))},\n breakInto: \"dust\",\n};`) + } + + generatedRockElementArray.push(elements[`${name}_gravel`]) +}