/* TODO: Fill in remaining IRs (if they exist, and i might make some up if they don't) Soils More sedimentary rocks Metamorphic rocks Ersatz pressure Merge crimson? Proper classification of limestone within these code comments */ //Terrain //Soils //Dry //Warning: Crippling lack of online information on the properties of the various soils by texture //Clay //Clay exists //Silty clay //TODO //Silty Clay Loam //TODO //Silty Loam //TODO //Silt //TODO //Clay Loam //TODO //elements.clay_soil.name = "Clay Loam" //Medium Loam //TODO //elements.dirt.name = "Medium Loam"; //Sandy Clay /*elements.sandy_clay = { color: "#DDCD8A", behavior: behaviors.POWDER, tempHigh: 1710, tempLow: -50, stateLow: "sandy_clay_permafrost", category:"land", state: "solid", density: 1220, };*/ //Sandy Clay Loam //TODO //Sandy Loam //TODO //Loamy Sand //TODO //Sand //Sand exists //Wet //Wet Clay //TODO //Wet Silty clay //TODO //Wet Silty Clay Loam //TODO //Wet Silty Loam //TODO //Wet Silt //TODO //Wet Clay Loam //TODO //Wet Medium Loam //Mud exists //Wet Sandy Clay //TODO //Wet Sandy Clay Loam //TODO //Wet Sandy Loam //TODO //Wet Loamy Sand //TODO //Wet Sand //Wet Sand exists //Permafrost //Clay Permafrost //TODO //Silty clay Permafrost //TODO //Silty Clay Loam Permafrost //TODO //Silty Loam Permafrost //TODO //Silt Permafrost //TODO //Clay Loam Permafrost //TODO //Medium Loam Permafrost //Permafrost exists //Sandy Clay Permafrost //TODO //Sandy Clay Loam Permafrost //TODO //Sandy Loam Permafrost //TODO //Loamy Sand Permafrost //TODO //Sand Permafrost //TODO //Irradiated (unmoved/TODO) //Dry //Irradiated Clay //Clay exists //Irradiated Silty clay //TODO //Irradiated Silty Clay Loam //TODO //Irradiated Silty Loam //TODO //Irradiated Silt //TODO //Irradiated Clay Loam //Clay Soil exists //Irradiated Medium Loam //Dirt exists //Irradiated Sandy Clay //TODO //Irradiated Sandy Clay Loam //TODO //Irradiated Sandy Loam //TODO //Irradiated Loamy Sand //TODO //Irradiated Sand //Sand exists //Wet //Irradiated Wet Clay //TODO //Irradiated Wet Silty clay //TODO //Irradiated Wet Silty Clay Loam //TODO //Irradiated Wet Silty Loam //TODO //Irradiated Wet Silt //TODO //Irradiated Wet Clay Loam //TODO //Irradiated Wet Medium Loam //Mud exists //Irradiated Wet Sandy Clay //TODO //Irradiated Wet Sandy Clay Loam //TODO //Irradiated Wet Sandy Loam //TODO //Irradiated Wet Loamy Sand //TODO //Irradiated Wet Sand //Wet Sand exists //Permafrost //Irradiated Clay Permafrost //TODO //Irradiated Silty clay Permafrost //TODO //Irradiated Silty Clay Loam Permafrost //TODO //Irradiated Silty Loam Permafrost //TODO //Irradiated Silt Permafrost //TODO //Irradiated Clay Loam Permafrost //TODO //Irradiated Medium Loam Permafrost //Permafrost exists //Irradiated Sandy Clay Permafrost //TODO //Irradiated Sandy Clay Loam Permafrost //TODO //Irradiated Sandy Loam Permafrost //TODO //Irradiated Loamy Sand Permafrost //TODO //Irradiated Sand Permafrost //TODO //Rocks //Igneous //Phaneritic //Felsic: granite elements.granite = { color: ["#F3C3AD", "#F0AB75", "#DDA888", "#BD927E", "#998473", "#5C5E53", "#BD8366"], behavior: behaviors.WALL, category: "land", tempHigh: 1215, stateHigh: "felsic_magma", density: 2691, hardness: 0.75, breakInto: "granite_gravel", }; elements.granite_gravel = { color: ["#E3B39D", "#E09B65", "#CD9878", "#AD826E", "#897463", "#4C4E43", "#AD7356", "#F3C3AD", "#F0AB75", "#DDA888", "#BD927E", "#998473", "#5C5E53", "#BD8366", "#FFD3BD", "#FFBB85", "#EDB898", "#CDA28E", "#A99483", "#6C6E63", "#CD9376"], behavior: behaviors.POWDER, category: "land", tempHigh: 1215, stateHigh: "felsic_magma", density: 1320, }; elements.felsic_magma = { "reactions": { "magma": { "elem1": "intermediate_magma", "elem2": "intermediate_magma" }, "ash": { "elem1": null, "elem2": "molten_slag" }, "dust": { "elem1": null, "elem2": "molten_slag" }, }, "name": "felsic magma", "color": ["#FFF457", "#FF9257", "#FF9200", "#FFD63B", "#FFAB3B", "#FF8000", "#FFD244", "#FFA844", "#FF7E00", "#FFB73F", "#FF923F", "#FF6E00", "#FFA53A", "#FF843A", "#FF6300", "#B8762A", "#B85E2A", "#B84700", "#FFA433", "#FF8333", "#FF6200"], "behavior": behaviors.MOLTEN, "temp": 1215, "tempLow": 800, "stateLow": ["rhyolite","rhyolite","rhyolite","granite"], "viscosity": 100000000, "hidden": true, "state": "liquid", "category": "molten", "density": 2421.9 }; //Intermediate felsic: granodiorite (such a creative name) elements.granodiorite = { color: ["#B1AB9D", "#262001", "#A6A292", "#D6C5BC", "#F2F2F2", "#DED8C2", "#978871", "#A8AAA7"], //From image: By Rudolf Pohl - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=7788350 behavior: behaviors.WALL, category: "land", tempHigh: 1050, //poorly searchable term, little findable information, idk if accurate stateHigh: "intermediate_felsic_magma", density: 2644, //last 2 digits made up again hardness: 0.75, breakInto: "granodiorite_gravel", }; elements.granodiorite_gravel = { color: ["#A19B8D", "#161000", "#969282", "#C6B5AC", "#E2E2E2", "#CEC8B2", "#877861", "#989A97", "#B1AB9D", "#262001", "#A6A292", "#D6C5BC", "#F2F2F2", "#DED8C2", "#978871", "#A8AAA7", "#C1BBAD", "#363011", "#B6B2A2", "#E6D5CC", "#FFFFFF", "#EEE8D2", "#A79881", "#B8BAB7"], //placeholder behavior: behaviors.POWDER, category: "land", tempHigh: 1050, stateHigh: "intermediate_felsic_magma", density: 1296, }; elements.intermediate_felsic_magma = { "reactions": { "magma": { "elem1": "intermediate_magma", "elem2": "intermediate_magma" }, "ash": { "elem1": null, "elem2": "molten_slag" }, "dust": { "elem1": null, "elem2": "molten_slag" }, }, "name": "intermediate felsic magma", "color": ["#FFD64F", "#FFAB4F", "#FF8000", "#7C5831", "#7C5031", "#7C5830", "#FFCB49", "#FFA249", "#FF7A00", "#FFF65E", "#FFC55E", "#FF9400", "#FFFF79", "#FFF279", "#FFB600", "#FFFF61", "#FFD861", "#FFA200", "#FFAA39", "#FF8839", "#FF6600", "#FFD554", "#FFAA54", "#FF8000"], "behavior": behaviors.MOLTEN, "temp": 1200, "tempLow": 1050, "stateLow": ["dacite","dacite","dacite","granodiorite"], "viscosity": 18700000, //10^average of logarithms "hidden": true, "state": "liquid", "category": "molten", "density": 2320, //averaged lower values }; //Intermediate: diorite elements.diorite = { color: ["#E1E1E1","#B0A696","#707271","#434459","#242424"], //Extracted from image and blended //By Michael C. Rygel - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=31124755 behavior: behaviors.WALL, category: "land", tempHigh: 1300, stateHigh: "intermediate_magma", density: 2822, //last 2 digits made up. hardness: 0.70, //bs'd from MH rel to granite breakInto: "diorite_gravel", }; elements.diorite_gravel = { color: ["#F1F1F1","#E1E1E1","#D1D1D1","#C0B6A6","#B0A696","#A09686","#808281","#707271","#606261","#535469","#434459","#333449","#343434","#242424","#141414"], behavior: behaviors.POWDER, category: "land", tempHigh: 1260, stateHigh: "intermediate_magma", density: 1717, //approximated from granite values }; elements.intermediate_magma = { "reactions": { "ash": { "elem1": null, "elem2": "molten_slag" }, "dust": { "elem1": null, "elem2": "molten_slag" }, }, "name": "intermediate magma", "color": ["#FFFF70", "#FFE170", "#FFA800", "#FFCF4B", "#FFA64B", "#FF7C00", "#E08E38", "#E07238", "#E05500", "#86552C", "#86442C", "#863300", "#482D12", "#482412", "#481B00"], "behavior": behaviors.MOLTEN, "temp": 1215, "tempLow": 1115, "stateLow": ["andesite", "andesite", "andesite", "diorite"], "viscosity": 350000, "hidden": true, "state": "liquid", "category": "molten", "density": 2450, } //Mafic: gabbro elements.magma.name = "mafic magma" //because it cools into basalt //the vanilla viscosity checks out elements.rock.name = "gabbro" //based on it melting into mostly basalt, I am assuming that this is mafic magma cooling quickly, and thus assuming that the remainder is magma cooling more slowly into a phaneritic rock, and that woudld be gabbro elements.magma.density = 2650 //Ultramafic: peridotite elements.peridotite = { color: ["#908557","#A29E78","#7F8044","#C6BC87","#8C8656","#7C7C40","#837840","#8B8B69"], behavior: behaviors.WALL, category: "land", tempHigh: 1400, stateHigh: "ultramafic_magma", density: 3347, //appr from https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/GL003i009p00509#:~:text=Abstract,and%20the%20bulk%20rock%20analyses. hardness: 0.76, breakInto: "peridotite_gravel", }; elements.peridotite_gravel = { color: ["#807547","#928e68","#6f7034","#b6ac77","#7c7646","#6c6c30","#736830","#7b7b59","#908557","#a29e78","#7f8044","#c6bc87","#8c8656","#7c7c40","#837840","#8b8b69","#a09567","#b2ae88","#8f9054","#d6cc97","#9c9666","#8c8c50","#938850","#9b9b79"], behavior: behaviors.POWDER, category: "land", tempHigh: 1400, stateHigh: "ultramafic_magma", density: 1681, }; elements.ultramafic_magma = { "reactions": { "ash": { "elem1": null, "elem2": "molten_slag" }, "dust": { "elem1": null, "elem2": "molten_slag" }, }, "name": "ultramafic magma", "color": ["#ffa62b","#ff852b","#ff6300","#ffc53c","#ff9e3c","#ff7600","#fea022","#fe8022","#fe6000","#ffeb43","#ffbc43","#ff8d00","#ffa72b","#ff862b","#ff6400","#f89b20","#f87c20","#f85d00","#ff9620","#ff7820","#ff5a00","#ffad34","#ff8b34","#ff6800"], "behavior": behaviors.MOLTEN, "temp": 1500, "tempLow": 1390, "stateLow": ["peridotite","komatiite","komatiite","komatiite"], "viscosity": 100, "hidden": true, "state": "liquid", "category": "molten", "density": 2800 }; //Aphanitic //Felsic: rhyolite elements.rhyolite = { color: ["#A67153","#BF967E","#D9B5A0","#8C533E","#C99F86","#C5997E","#BB8A69"], // also from one of Michael C. Rygel's images behavior: behaviors.WALL, category: "land", tempHigh: 800, stateHigh: "felsic_magma", density: 2555, //very wide range hardness: 0.75, breakInto: "rhyolite_gravel", }; elements.rhyolite_gravel = { color: ["#B68163","#A67153","#966143","#CFA68E","#BF967E","#AF866E","#E9C5B0","#D9B5A0","#C9A590","#9C634E","#8C533E","#7C432E","#D9AF96","#C99F86","#B98F76","#D5A98E","#C5997E","#B5896E","#CB9A79","#BB8A69","#DB7A59"], behavior: behaviors.POWDER, category: "land", tempHigh: 800, stateHigh: "felsic_magma", density: 1254, //approximated from granite values }; //Intermediate felsic: dacite elements.dacite = { color: ["#D9CCC5", "#F2E9E4", "#877670", "#A69B97"], behavior: behaviors.WALL, category: "land", tempHigh: 1050, stateHigh: "intermediate_felsic_magma", density: 2654, //https://books.google.ca/books?id=ObUPAAAAIAAJ&pg=PA181&lpg=PA181&dq=dacite+specific+gravity&source=bl&ots=qn8B4sirWi&sig=Wp_MHqPuUGPNQobcuNP5c5wqkpU&hl=en&sa=X&ei=cimtUaH8Eab7yAH8joDABQ#v=onepage&q=dacite%20specific%20gravity&f=false hardness: 0.75, breakInto: "dacite_gravel", }; elements.dacite_gravel = { color: ["#C9BCB5", "#E2D9D4", "#776660", "#968B87", "#D9CCC5", "#F2E9E4", "#877670", "#A69B97", "#E9DCD5", "#FFF9F4", "#978680", "#B6ABA7"], //placeholder behavior: behaviors.POWDER, category: "land", tempHigh: 1050, stateHigh: "intermediate_felsic_magma", density: 1300, }; //Intermediate: andesite elements.andesite = { color: ["#6F7575", "#C5C9CB", "#818787", "#797F7F", "#B5B9BA", "#6D7371", "#909696"], behavior: behaviors.WALL, category: "land", tempHigh: 1215, stateHigh: "intermediate_magma", density: 2474, //it varies very widely, so I made the last 2 digits up. hardness: 0.75, breakInto: "andesite_gravel", }; elements.andesite_gravel = { color: ['#5f6565', '#b5b9bb', '#717777', '#696f6f', '#a5a9aa', '#5d6361', '#808686', '#6f7575', '#c5c9cb', '#818787', '#797f7f', '#b5b9ba', '#6d7371', '#909696', '#7f8585', '#d5d9db', '#919797', '#898f8f', '#c5c9ca', '#7d8381', '#a0a6a6'], behavior: behaviors.POWDER, category: "land", tempHigh: 1260, stateHigh: "intermediate_magma", density: 1214, //approximated from granite values }; //Mafic: basalt //No changes from vanilla //Ultramafic: komatiite elements.komatiite = { color: ["#AEB5AE","#A9B8B5","#7B8881","#858B87","#949F97","#505B55"], behavior: behaviors.WALL, category: "land", tempHigh: 1600, stateHigh: "ultramafic_magma", density: 3100, //approximate density extrapolated from intermediate and mafic density //the magma's density is more well-known but there's nothing on the solid rock (probably because it's so rare and often metamorphosed) hardness: 0.75, breakInto: "komatiite_gravel", }; elements.komatiite_gravel = { color: ["#9ea59e","#99a8a5","#6b7871","#757b77","#848f87","#404b45","#aeb5ae","#a9b8b5","#7b8881","#858b87","#949f97","#505b55","#bec5be","#b9c8c5","#8b9891","#959b97","#a4afa7","#606b65"], behavior: behaviors.POWDER, category: "land", tempHigh: 1600, stateHigh: "ultramafic_magma", density: 1650, //approximated from granite values }; //Vesicular //Felsic: pumice //Pumice goes here //Intermediate felsic: ??? //??? //Intermediate: scoria //Scoria //Mafic: still scoria //Also scoria //Perhaps a "mafic_scoria"-"intermediate scoria" split if the literature allows //Ultramafic: ??? //??? //Glassy //Felsic: obsidian //Obsidian //Intermediate felsic: ??? //??? //Intermediate: ??? //??? //Mafic: ??? //??? //Ultramafic: ??? //??? //Sedimentary //Chemical //Clastic //Grains < 1/16 mm //Grains 1/16-2 mm //Partly intermingled with the radiation cult //Dummied-out debug counters /*sedimentSandstoneTries = 0; sedimentSandstoneTryIterations = 0; sedimentSandstoneDetects = 0; sedimentSandstoneNoDetects = 0; sandstoneFormations = 0; sandstoneFailures = 0;*/ //Elements from which simplified lithification can spread sandstoneLithificationElements = ["sand_sediment", "sandstone", "irradiated_sand_sediment", "irradiated_sandstone"/*, "crimson_sandstone", "crimson_sand_sediment"*/] //Water reaction to pick up the fine material (this is very simplified) elements.water.reactions.wet_sand = { "elem1": "sandy_water", "elem2": ["wet_sand","wet_sand","wet_sand","sandy_water"], chance: 0.01 }; elements.water.reactions.irradiated_wet_sand = { "elem1": "irradiated_sandy_water", "elem2": ["irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand",null], chance: 0.01 }; /*elements.water.reactions.crimson_wet_sand = { / "elem1": "crimson_sandy_water", "elem2": ["crimson_wet_sand","crimson_wet_sand","crimson_wet_sand","crimson_wet_sand","crimson_wet_sand",null], chance: 0.01 };*/ //Sediment suspension elements.sandy_water = { color: ["#768485", "#849294"], behavior: behaviors.LIQUID, tempHigh: 100, stateHigh: ["steam","steam","sand"], //tempLow: 0, //stateLow: "sandy_ice", category: "liquids", heatCapacity: 4.184, //unimplemented reactions: { "dirt": { // React with (water reacts with dirt to make mud) "elem1": [null,null,"wet_sand"], // First element transforms into; in this case, water deletes itself "elem2": "mud", // Second element transforms into; in this case, dirt turns to mud }, "water": { "elem1":"water", "elem2":"sandy_water", "chance":0.025 }, //swap reaction "sand": { "elem1": [null,null,"wet_sand"], "elem2": "wet_sand", }, "sandy_water": { "elem1":"water", "elem2":"sand_sediment", "chance": 0.001 }, "wet_sand": { "elem1": "water", "elem2":"sand_sediment", "chance": 0.0005 }, //"salt": { "elem1": "salt_water", "elem2": null }, //"sugar": { "elem1": "sugar_water", "elem2": null, }, "dust": { "elem1": "dirty_water", "elem2": null, }, "ash": { "elem1": "dirty_water", "elem2": null, }, "cyanide": { "elem1": "dirty_water", "elem2": null, }, //"carbon_dioxide": { "elem1": "seltzer", "elem2": null, "oneway":true }, "sulfur": { "elem1": "dirty_water", "elem2": null, }, "rat": { "elem1": "dirty_water", chance:0.005 }, "plague": { "elem1": "dirty_water", "elem2": null, }, "rust": { "elem1": "dirty_water", chance:0.005 }, "fallout": { "elem1": "dirty_water", chance:0.25 }, "radiation": { "elem1": "dirty_water", chance:0.25 }, "uranium": { "elem1": "dirty_water", chance:0.25 }, "rotten_meat": { "elem1": "dirty_water", chance:0.25 }, "quicklime": { "elem1": [null,null,"wet_sand"], "elem2": "slaked_lime", }, "rock": { "elem2": "wet_sand", "chance": 0.00035 }, "ruins": { "elem2": "rock", "chance": 0.00035 }, "mudstone": { "elem2": "mud", "chance": 0.00035 }, //"methane": { "elem1":"primordial_soup", "elem2":"primordial_soup", tempMin:60, charged:true }, //"ammonia": { "elem1":"primordial_soup", "elem2":"primordial_soup", tempMin:60, charged:true }, "fly": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, "firefly": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, "bee": { "elem2":"dead_bug", "chance":0.05, "oneway":true }, "stink_bug": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, }, state: "liquid", density: 1097, conduct: 0.02, stain: 0.01, } //Sediment element where lithification code resides elements.sand_sediment = { hidden: true, color: "#d3b387", hardness: 0.2, behavior: [ "XX|XX|XX", "XX|XX|XX", "SW:wet_sand%1.5 AND M2|SW:wet_sand%2.5 AND M1|SW:wet_sand%1.5 AND M2" ], reactions: { "water": { "elem1":"sandy_water", "elem2":"sandy_water", "chance":0.001 }, "sand": { "elem1": [null,null,"wet_sand"], "elem2": "wet_sand", }, "sandy_water": { "elem1":["water","water","sand_sediment"], "chance":0.001 }, "wet_sand": { "elem2": "sand_sediment", "chance": 0.0005 }, }, tempHigh: 1700, stateHigh: "molten_glass", category: "land", state: "solid", density: 1602, breakInto: "sand", tick: function(pixel) { var validNeighborArray = Array.apply(null, Array(adjacentCoords.length)).map(function() {return false}); if(Math.random() < 0.0003) { //sedimentSandstoneTries++; for(i = 0; i < adjacentCoords.length; i++) { //sedimentSandstoneTryIterations++; if(isEmpty(pixel.x+adjacentCoords[i][0],pixel.y+adjacentCoords[i][1],true)) { validNeighborArray[i] = false; //sedimentSandstoneNoDetects++; } else if(!isEmpty(pixel.x+adjacentCoords[i][0],pixel.y+adjacentCoords[i][1],true)) { /*if(sandstoneLithificationElements.includes(pixelMap[pixel.x+adjacentCoords[i][0]][pixel.y+adjacentCoords[i][1]].element)) { validNeighborArray[i] = true; //sedimentSandstoneDetects++; } else { validNeighborArray[i] = false; //sedimentSandstoneNoDetects++; };*/ validNeighborArray[i] = sandstoneLithificationElements.includes(pixelMap[pixel.x+adjacentCoords[i][0]][pixel.y+adjacentCoords[i][1]].element); }; }; if(validNeighborArray.includes(true)) { //sandstoneFormations++; changePixel(pixel,"sandstone"); }/* else { sandstoneFailures++; }*/; }; }, } //Reactions to add elements.wet_sand.reactions.sand_sediment = { elem1: "sand_sediment", chance: 0.0003 }; elements.wet_sand.reactions.wet_sand = { elem1: "sand_sediment", chance: 0.0003 }; //Final rock elements.sandstone = { color: ["#b27853", "#d1a784", "#d1a784", "#d4996e"], behavior: behaviors.WALL, tempHigh: 1500, stateHigh: "molten_glass", category: "land", state: "solid", density: 2323, //wide range hardness: 0.5, breakInto: "sand", } //Worldgen preset for testing worldgentypes.test_ocean = { layers: [ [0.9, "wet_sand", 0.2], [0.9, "sand", 0.2], [0.8, "sandy_water", 0.7], [0.25, "water"], [0.1, "sand", 0.1], [0.1, "clay", 0.1], [0.1, "gravel", 0.2], [0.1, "wet_sand"], [0.03, "gravel", 0.5], [0.03, "rock"], [0, "basalt"], ] }; //Changes to vanilla desert worldgentypes.desert = { layers: [ [0.95, "gravel", 0.6], [0.65, "bone", 0.03], [0.65, "sand"], [0.55, "bone", 0.02], [0.3, "sandstone"], [0.05, "rock"], [-0.78, "basalt"] ], temperature: 38 }; //Grains > 2 mm //Angular fragments //Breccia //Rounded fragments //Conglomerate //Gems //There is a mineral classification scheme, but it will take a while to implement if I ever get around to it. //We're assuming that the crystal structures reform properly because I don't want to have to research and implement refrozen amorphous forms. //Emerald elements.emerald = { color: ["#31e31e", "#88fa5a", "#28d419", "#54e823", "#64f235"], tempHigh: 1287, //1: I can't be arsed to find out what happens to emerald in extreme heat. Apparently, neither can anyone else, and Google is useless for this. //2: So I'm just assuming that the chromium impurities are polite and remain in solution with the molten beryl. behavior: behaviors.POWDER, category: "powders", state: "solid", density: 2710, //within natural variation hardness: 0.8, //Mohs scaled to diamond }; //Amethyst elements.amethyst = { color: ["#c569e0", "#bd43e0", "#e37aeb", "#ab2fe0", "#b05bd4", "#9b2cdb"], tempHigh: 1650, //1: Gee, another quartz-like... //2: Like with emerald, I'm trusting the impurities to stay dissolved because I don't exactly have any amethyst laying around to melt. behavior: behaviors.POWDER, category: "powders", state: "solid", density: 2650, hardness: 0.7, }; //Sapphire elements.sapphire = { color: ["#2d43e3", "#4d5fe3", "#1f30cc", "#375fdb", "#2d39e3"], tempHigh: 2040, //1: You can actually grow corundum-based gems through the Verneuil process behavior: behaviors.POWDER, category: "powders", state: "solid", density: 3980, hardness: 0.9, } //Ruby elements.ruby = { //Corundum with different impurities, so I can copy/paste everything but the color color: ["#ff1222", "#ff4545", "#e30b13", "#fa253b", "#f2120f"], tempHigh: 2040, behavior: behaviors.POWDER, category: "powders", state: "solid", density: 3980, hardness: 0.9, } //Topaz elements.topaz = { color: ["#f7f431", "#ffff5c", "#f7e048", "#fae43e", "#fff86e", "#ede321"], tempHigh: 1340, stateHigh: "mullite", //thermal decomposition behavior: behaviors.POWDER, category: "powders", state: "solid", density: 3500, hardness: 0.8, }; //Mullite elements.mullite = { color: ["#f2d7bf", "#f5cbdc", "#f2dfd3"], //hardly a gemstone, but i will color it like the others regardless tempHigh: 1840, behavior: behaviors.POWDER, category: "powders", state: "solid", density: 3110, hardness: 0.7, }; //Onyx elements.onyx = { color: ["#1a1919", "#070605", "#111313"], tempHigh: 1650, //another silicate mineral behavior: behaviors.POWDER, category: "powders", state: "solid", density: 2650, hardness: 0.7, }; //Opal elements.opal = { color: ["#ffcfcf", "#fff0d9", "#fcf7c5", "#e4ffd4", "#d1fff5", "#dcecfa", "#dfdbff", "#f5e0ff", "#f7d0f1"], tempHigh: 100, stateHigh: ["broken_opal", "broken_opal", "broken_opal", "broken_opal", "broken_opal", "broken_opal", "broken_opal", "broken_opal", "broken_opal", "steam"], behavior: behaviors.POWDER, category: "powders", state: "solid", density: 2090, hardness: 0.6, breakInto: ["quartz", "quartz", "quartz", "quartz", "quartz", "quartz", "quartz", "quartz", "quartz", "water"], }; elements.broken_opal = { color: ["#f5e6e6", "#ebe2d5", "#f7f6ed", "#e4eddf", "#d8ebe7", "#d8e0e8", "#e4e3e8", "#f4edf7", "#ebebeb"], tempHigh: 1650, stateHigh: "molten_quartz", behavior: behaviors.POWDER, category: "powders", state: "solid", density: 2322, hardness: 0.55, //it cracks }; //Quartz elements.quartz = { //silicates, silicates, and more silicates color: ["#f0f0f0", "#e3e3e3", "#f7f7f7"], tempHigh: 1650, behavior: behaviors.POWDER, category: "powders", state: "solid", density: 2650, hardness: 0.7, }; //Re-add molten quartz because it stopped auto-generating elements.molten_quartz = {"behavior":behaviors.MOLTEN,"hidden":true,"state":"liquid","category":"states","color":['#ffff78', '#fff078', '#ffb400', '#ffff71', '#ffe371', '#ffaa00', '#ffff7b', '#fff77b', '#ffb900'],"temp":1650,"tempLow":1550,"stateLow":"quartz","density":2385,"viscosity":10000,"reactions":{"ash":{"elem1":null,"elem2":"molten_slag"},"dust":{"elem1":null,"elem2":"molten_slag"},"magma":{"elem1":null,"elem2":"molten_slag"}},"movable":true} //Use in glass elements.molten_quartz.reactions = { quicklime: { elem1: "molten_glass", elem2: ["quicklime", "quicklime", "quicklime", "quicklime", "quicklime", "quicklime", "quicklime", "quicklime", "quicklime", null]} //lack of vanilla washing soda, lack of tripartite reactions }; /* elements.elem1.reactions = { elem2: { elem1: "elem1_becomes", elem2: "elem2_becomes"} }; */ //Pearl (not a mineral) elements.pearl = { color: ["#e3e3e3", "#e3e0d1", "#eddbce", "#eef2c9", "#d5f5dc", "#d8f2ec", "#fadcf9", "#e3d1c1", "#f2edc9", "#e0f5d7", "#e2beeb", "#e3e3e3", "#e3e0d1", "#eddbce", "#eef2c9", "#d5f5dc", "#d8f2ec", "#fadcf9", "#e3d1c1", "#f2edc9", "#e0f5d7", "#e2beeb", "#38332e"], tempHigh: 1340, //yay, more thermal decomposition elements behavior: behaviors.POWDER, category: "powders", state: "solid", density: 772, //It is partly made of proteins and is said to burn, but I can't find an ignition point, so here it melts. hardness: 0.45, }; //Soil //Dry dirt elements.dry_dirt = { color: ["#a88e5e","#8f7950","#8a7045","#9e804c"], behavior: [ "XX|SW:dirt%3 AND SW:mud%6|XX", "XX|XX|XX", "M2|M1|M2", ], tempHigh:1200, stateHigh: "molten_dirt", tempLow: -50, stateLow: "dry_permafrost", category:"land", state: "solid", density: 1100, }, elements.molten_dirt = { //added manually because the change to dirt will prevent molten_dirt from being auto-generated "behavior": behaviors.MOLTEN, "hidden": true, "state": "liquid", "category": "states", "color": ["#EC6A15", "#EC5515", "#EC3F00", "#B85210", "#B84210", "#B83100", "#AE4B0D", "#AE3C0D", "#AE2D00", "#D65A0F", "#D6480F", "#D63600"], "temp": 1200, "tempLow": 1100, "stateLow": "dry_dirt", "density": 1098, "viscosity": 10000 } if(enabledMods.includes("mods/boiling_rock.js")) { elements.molten_dirt.tempHigh = 3000; elements.molten_dirt.stateHigh = "vaporized_rock"; }; elements.dry_permafrost = { color: ["#5B7870","#535D51","#52746A","#5A7A6F"], behavior: behaviors.POWDER, //not enough water for cementing temp: -50, tempHigh: 10, stateHigh: "dry_dirt", category: "land", state: "solid", density: 1200, } elements.dirt.tempHigh = 110; elements.dirt.stateHigh = "dry_dirt"; elements.water.reactions.dry_dirt = { elem1: null, elem2: "dirt", chance: 0.1 } if(!elements.mud.reactions) { elements.mud.reactions = {}; }; elements.mud.reactions.dry_dirt = { elem1: "dirt", elem2: "dirt", chance: 0.06 } //Land Element Cults /* "Cult" is used similarly to its EoD sense; here, it signifies a set of elements that systematically replicates another set of elements except for a given modification. In this case, they replicate some land elements; a "yellow" cult, for example, would have yellow_dirt, yellow_mud, yellow_mudstone, yellow_permafrost, yellow_sand... */ //Irradiated land //Irradiated behavior cult (see above) behaviors.RAD_POWDER = [ "XX|CR:radiation%2|XX", "CR:radiation%2|XX|CR:radiation%2", "M2|M1 AND CR:radiation%2|M2", ], behaviors.RAD_STURDYPOWDER = [ "XX|CR:radiation%2|XX", "CR:radiation%2|XX|CR:radiation%2", "XX|M1 AND CR:radiation%2|XX", ], behaviors.RAD_SUPPORT = [ "CR:radiation%1|CR:radiation%2|CR:radiation%1", "SP AND CR:radiation%2|XX|SP AND CR:radiation%2", "XX|M1 AND CR:radiation%2|XX", ], behaviors.RAD_SUPPORTPOWDER = [ "CR:radiation%1|CR:radiation%2|CR:radiation%1", "SP AND CR:radiation%2|XX|SP AND CR:radiation%2", "M2|M1 AND CR:radiation%2|M2", ], behaviors.RAD_LIQUID = [ "XX|CR:radiation%2|XX", "M2 AND CR:radiation%2|XX|M2 AND CR:radiation%2", "M1|M1 AND CR:radiation%2|M1", ], behaviors.RAD_WALL = [ "CR:radiation%0.7|CR:radiation%1.4|CR:radiation%0.7", "CR:radiation%1.4|XX%0000000000000|CR:radiation%1.4", "CR:radiation%0.7|CR:radiation%1.4|CR:radiation%0.7", ], behaviors.RAD_GAS = [ "M2 AND CR:radiation%1|M1 AND CR:radiation%2|M2 AND CR:radiation%1", "M1 AND CR:radiation%2|XX AND CR:radiation%2|M1 AND CR:radiation%2", "M2 AND CR:radiation%1|M1 AND CR:radiation%2|M2 AND CR:radiation%1", ], behaviors.RAD_MOLTEN = [ "XX|CR:radiation%2.5 AND CR:fire%2.5|XX", "M2 AND CR:radiation%1|XX|M2 AND CR:radiation%1", "M1|M1 AND CR:radiation%1|M1", ] //console.log(behaviors.RAD_POWDER) //forcing it to acknowledge the behaviors i just added instead of giving me "undefined" //Setting reactions (we'll define the elements later) var namelessArray = ["dirt","sand","mud","wet_sand"]; for(i = 0; i < namelessArray.length; i++) { var elementt = namelessArray[i]; if(!elements[elementt].reactions) { elements[elementt].reactions = {}; }; }; elements.water.reactions.radiation = { elem1: "irradiated_water", elem2: null, chance:0.25 }, elements.radiation.reactions.water = { elem2: "irradiated_water", elem1: null, chance:0.25 }, elements.dirt.reactions.radiation = { elem1: "irradiated_dirt", elem2: null, chance:0.25 }, elements.radiation.reactions.dirt = { elem2: "irradiated_dirt", elem1: null, chance:0.25 }, elements.sand.reactions.radiation = { elem1: "irradiated_sand", elem2: null, chance:0.25 }, elements.radiation.reactions.sand = { elem2: "irradiated_sand", elem1: null, chance:0.25 }, elements.mud.reactions.radiation = { elem1: "irradiated_mud", elem2: null, chance:0.25 }, elements.radiation.reactions.mud = { elem2: "irradiated_mud", elem1: null, chance:0.25 }, elements.wet_sand.reactions.radiation = { elem1: "irradiated_wet_sand", elem2: null, chance:0.25 }, elements.radiation.reactions.wet_sand = { elem2: "irradiated_wet_sand", elem1: null, chance:0.25 }, //Substitution table irradiatedObject = { dirt: "irradiated_dirt", molten_dirt: "molten_irradiated_dirt", glass: "irradiated_glass", molten_glass: "molten_irradiated_glass", glass_shard: "irradiated_glass_shard", sand: "irradiated_sand", mud: "irradiated_mud", wet_sand: "irradiated_wet_sand", water: "irradiated_water", permafrost: "irradiated_permafrost", mudstone: "irradiated_mudstone", packed_sand: "irradiated_packed_sand", ice: "irradiated_ice", snow: "irradiated_snow", packed_snow: "irradiated_packed_snow", rain_cloud: "rad_cloud", snow_cloud: "rad_snow_cloud", snow_cloud_floater: "rad_snow_cloud_floater", rock: "irradiated_rock", gravel: "irradiated_gravel", basalt: "irradiated_basalt", magma: "irradiated_magma", sandstone: "irradiated_sandstone", sand_sediment: "irradiated_sand_sediment" }; //Reverse lookup function function getKeyByValue(object, value) { return Object.keys(object).find(key => object[key] === value); } //getKeyByValue code by UncleLaz on StackOverflow: https://stackoverflow.com/questions/9907419/how-to-get-a-key-in-a-javascript-object-by-its-value" //Main elements elements.irradiated_dirt = { color: ["#70762b","#4c5c21","#50571a","#4c6b1e"], behavior: behaviors.RAD_POWDER, tempHigh:1200, stateHigh: "molten_irradiated_dirt", reactions: { "dirt": { "elem1":"dirt", "elem2":"irradiated_dirt", "chance":0.0005, "oneway":true }, }, tempLow: -50, stateLow: "irradiated_permafrost", category: "Irradiated", state: "solid", density: 1220, }; elements.molten_irradiated_dirt = { "behavior": behaviors.RAD_MOLTEN, "hidden": true, "state": "liquid", "category": "Irradiated", "color": ["#e09315", "#e07615", "#e05800", "#987310", "#985c10", "#984500", "#a06c0d", "#a0570d", "#a04100", "#98850f", "#986b0f", "#985000"], "temp": 1250, "tempLow": 1100, "stateLow": "irradiated_dirt", "density": 1098, "viscosity": 10000 } elements.irradiated_glass = { color: ["#597a58","#719171"], colorOn: ["#6dab67","#88b567"], behavior: behaviors.RAD_WALL, tempHigh: 1500, category: "solids", state: "solid", density: 2500, breakInto: "irradiated_glass_shard", conduct: 0.01, }; elements.molten_irradiated_glass = { behavior: behaviors.RAD_MOLTEN, category: "Irradiated", }; elements.irradiated_glass_shard = { color: ["#597a58","#719171", "#628263"], colorOn: ["#6dab67","#88b567", "#7bad6f"], behavior: behaviors.RAD_POWDER, tempHigh: 1500, stateHigh: "molten_irradiated_glass", category: "powders", state: "solid", density: 2500, conduct: 0.01, }; elements.irradiated_sand = { color: "#cbdb7b", behavior: behaviors.RAD_POWDER, tempHigh: 1700, stateHigh: "molten_irradiated_glass", category: "Irradiated", state: "solid", density: 1602 }; elements.irradiated_mud = { color: "#3c401c", behavior: behaviors.RAD_STURDYPOWDER, reactions: { "irradiated_dirt": { "elem1":"irradiated_dirt", "elem2":"irradiated_mud", "chance":0.0005, "oneway":true }, "irradiated_sand": { "elem1":"irradiated_dirt", "elem2":"irradiated_wet_sand", "chance":0.0005, "oneway":true }, "sand": { "elem1":"irradiated_dirt", "elem2":"irradiated_wet_sand", "chance":0.0005, "oneway":true }, "dirt": { "elem1":"irradiated_dirt", "elem2":"irradiated_mud", "chance":0.0005, "oneway":true }, }, tempHigh: 100, stateHigh: "irradiated_mudstone", tempLow: -50, stateLow: "irradiated_permafrost", category: "Irradiated", state: "solid", density: 1730, stain: 0.02, }; elements.irradiated_wet_sand = { color: ["#848c3a","#969e4c"], behavior: behaviors.RAD_STURDYPOWDER, reactions: { "irradiated_sand": { "elem1":"irradiated_sand", "elem2":"irradiated_wet_sand", "chance":0.0005, "oneway":true }, "irradiated_dirt": { "elem1":"irradiated_sand", "elem2":"irradiated_mud", "chance":0.0005, "oneway":true }, "sand": { "elem1":"irradiated_sand", "elem2":"irradiated_wet_sand", "chance":0.0005, "oneway":true }, "dirt": { "elem1":"irradiated_sand", "elem2":"irradiated_mud", "chance":0.0005, "oneway":true }, "wet_sand": { "elem1":"irradiated_sand", "elem2":"irradiated_sand_sediment", "chance":0.0005, "oneway":true }, "sand_sediment": { "elem1":"irradiated_sand", "elem2":"irradiated_sand_sediment", "chance":0.0005, "oneway":true }, "irradiated_wet_sand": { "elem1":"irradiated_sand", "elem2":"irradiated_sand_sediment", "chance":0.0005, "oneway":true }, "irradiated_sand_sediment": { "elem1":"irradiated_sand", "elem2":"irradiated_sand_sediment", "chance":0.0005, "oneway":true }, }, tempHigh: 100, stateHigh: "irradiated_packed_sand", category: "Irradiated", state: "solid", density: 1905, }; elements.irradiated_sandy_water = { color: ["#84A244", "#90AE50"], behavior: behaviors.RAD_LIQUID, tempHigh: 100, stateHigh: ["rad_steam","rad_steam","irradiated_sand"], //tempLow: 0, //stateLow: "irradiated_sandy_ice", category: "Irradiated", heatCapacity: 4.184, //unimplemented reactions: { "dirt": { // React with (water reacts with dirt to make mud) "elem1": [null,null,"irradiated_wet_sand"], // First element transforms into; in this case, water deletes itself "elem2": "irradiated_mud", // Second element transforms into; in this case, dirt turns to mud }, "irradiated_dirt": { // React with (water reacts with dirt to make mud) "elem1": [null,null,"irradiated_wet_sand"], // First element transforms into; in this case, water deletes itself "elem2": "irradiated_mud", // Second element transforms into; in this case, dirt turns to mud }, "water": { "elem1":"irradiated_water", "elem2":"irradiated_sandy_water", "chance":0.025 }, "irradiated_water": { "elem1":"irradiated_water", "elem2":"irradiated_sandy_water", "chance":0.025 }, "sand": { "elem1": [null,null,"irradiated_wet_sand"], "elem2": "irradiated_wet_sand", }, "irradiated_sand": { "elem1": [null,null,"irradiated_wet_sand"], "elem2": "irradiated_wet_sand", }, "sandy_water": { "elem1":"irradiated_wet_sand", "elem2":"irradiated_sand_sediment", "chance": 0.001 }, "irradiated_sandy_water": { "elem1":"irradiated_wet_sand", "elem2":"irradiated_sand_sediment", "chance": 0.001 }, "wet_sand": { "elem1": "irradiated_water", "elem2":"irradiated_sand_sediment", "chance": 0.0005 }, "irradiated_wet_sand": { "elem1": "irradiated_water", "elem2":"irradiated_sand_sediment", "chance": 0.0005 }, /*"salt": { "elem1": "salt_water", "elem2": null }, "sugar": { "elem1": "sugar_water", "elem2": null, }, "dust": { "elem1": "dirty_water", "elem2": null, }, "ash": { "elem1": "dirty_water", "elem2": null, }, "cyanide": { "elem1": "dirty_water", "elem2": null, }, "carbon_dioxide": { "elem1": "seltzer", "elem2": null, "oneway":true }, "sulfur": { "elem1": "dirty_water", "elem2": null, }, "rat": { "elem1": "dirty_water", chance:0.005 }, "plague": { "elem1": "dirty_water", "elem2": null, }, "rust": { "elem1": "dirty_water", chance:0.005 }, "fallout": { "elem1": "dirty_water", chance:0.25 }, "radiation": { "elem1": "dirty_water", chance:0.25 }, "uranium": { "elem1": "dirty_water", chance:0.25 }, "rotten_meat": { "elem1": "dirty_water", chance:0.25 }, "quicklime": { "elem1": [null,null,"wet_sand"], "elem2": "slaked_lime", }, "rock": { "elem2": "wet_sand", "chance": 0.00035 }, "ruins": { "elem2": "rock", "chance": 0.00035 },*/ "mudstone": { "elem2": "irradiated_mud", "chance": 0.00035 }, "irradiated_mudstone": { "elem2": "irradiated_mud", "chance": 0.00035 }, //"methane": { "elem1":"primordial_soup", "elem2":"primordial_soup", tempMin:60, charged:true }, //"ammonia": { "elem1":"primordial_soup", "elem2":"primordial_soup", tempMin:60, charged:true }, "fly": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, "firefly": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, "bee": { "elem2":"dead_bug", "chance":0.05, "oneway":true }, "stink_bug": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, }, state: "liquid", density: 1097, conduct: 0.02, stain: 0.01, } elements.irradiated_sand_sediment = { hidden: true, color: "#afd182", hardness: 0.2, behavior: [ "XX|XX|XX", "XX|XX|XX", "SW:wet_sand,irradiated_wet_sand%1.5 AND M2|SW:wet_sand,irradiated_wet_sand%2.5 AND M1|SW:wet_sand,irradiated_wet_sand%1.5 AND M2" ], reactions: { "water": { "elem1":"irradiated_sandy_water", "elem2":"irradiated_sandy_water", "chance":0.025 }, "irradiated_water": { "elem1":"irradiated_sandy_water", "elem2":"irradiated_sandy_water", "chance":0.025 }, "sand": { "elem1": [null,null,"irradiated_wet_sand"], "elem2": "irradiated_wet_sand", }, "irradiated_sand": { "elem1": [null,null,"irradiated_wet_sand"], "elem2": "irradiated_wet_sand", }, "sandy_water": { "elem1":["irradiated_water","irradiated_water","irradiated_sand_sediment"], "chance":0.001 }, "irradiated_sandy_water": { "elem1":["irradiated_water","irradiated_water","irradiated_sand_sediment"], "chance":0.001 }, "wet_sand": { "elem2": "irradiated_sand_sediment", "chance": 0.0005 }, "irradiated_wet_sand": { "elem2": "irradiated_sand_sediment", "chance": 0.0005 }, }, tempHigh: 1700, stateHigh: "molten_irradiated_glass", category: "Irradiated", state: "solid", density: 1602, breakInto: "irradiated_sand", tick: function(pixel) { var validNeighborArray = Array.apply(null, Array(adjacentCoords.length)).map(function() {return false}); if(Math.random() < 0.0003) { for(i = 0; i < adjacentCoords.length; i++) { if(isEmpty(pixel.x+adjacentCoords[i][0],pixel.y+adjacentCoords[i][1],true)) { validNeighborArray[i] = false; } else if(!isEmpty(pixel.x+adjacentCoords[i][0],pixel.y+adjacentCoords[i][1],true)) { /*if(sandstoneLithificationElements.includes(pixelMap[pixel.x+adjacentCoords[i][0]][pixel.y+adjacentCoords[i][1]].element)) { validNeighborArray[i] = true; } else { validNeighborArray[i] = false; };*/ validNeighborArray[i] = sandstoneLithificationElements.includes(pixelMap[pixel.x+adjacentCoords[i][0]][pixel.y+adjacentCoords[i][1]].element); }; }; if(validNeighborArray.includes(true)) { changePixel(pixel,"irradiated_sandstone"); }; }; }, } elements.irradiated_sandstone = { color: ["#85b357", "#b5d177", "#9cd184", "#7bc25f"], behavior: behaviors.RAD_WALL, tempHigh: 1500, stateHigh: "molten_irradiated_glass", category: "Irradiated", state: "solid", density: 2323, //wide range hardness: 0.5, breakInto: "irradiated_sand", } elements.irradiated_water = { color: "#85cf57", behavior: behaviors.RAD_LIQUID, tempHigh: 100, stateHigh: ["rad_steam","rad_steam","fallout"], tempLow: -5, stateLow: "irradiated_ice", category: "Irradiated", heatCapacity: 4.184, reactions: { "water": { elem1: "water", elem2: "irradiated_water", chance:0.05 }, //swap "dirt": { // React with (water reacts with dirt to make mud) "elem1": null, // First element transforms into; in this case, water deletes itself "elem2": "irradiated_dirt", // Second element transforms into; in this case, dirt turns to mud }, "sand": { "elem1": null, "elem2": "irradiated_wet_sand", }, "wet_sand": { "elem1": "irradiated_sandy_water", "elem2": ["irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand",null], chance: 0.01 }, "irradiated_wet_sand": { "elem1": "irradiated_sandy_water", "elem2": ["irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand","irradiated_wet_sand",null], chance: 0.01 }, "rat": { "elem2": "rotten_meat", chance:0.005 }, "plague": { "elem2": null, chance: 0.3, }, //"quicklime": { "elem1": null, "elem2": "slaked_lime", }, "rock": { "elem2": "irradiated_wet_sand", "chance": 0.00035 }, //"ruins": { "elem2": "rock", "chance": 0.00035 }, "mudstone": { "elem2": "irradiated_mud", "chance": 0.00035 }, "irradiated_mudstone": { "elem2": "irradiated_mud", "chance": 0.00035 }, "packed_sand": { "elem2": "irradiated_wet_sand", "chance": 0.00035 }, "irradiated_packed_sand": { "elem2": "irradiated_wet_sand", "chance": 0.00035 }, "fly": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, "firefly": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, "bee": { "elem2":"dead_bug", "chance":0.05, "oneway":true }, "stink_bug": { "elem2":"dead_bug", "chance":0.1, "oneway":true }, }, state: "liquid", density: 997, conduct: 0.03, stain: 0.02, } elements.rad_steam.behavior = behaviors.RAD_GAS; elements.rad_steam.stateLow = "irradiated_water"; elements.rad_cloud.behavior = [ "XX|XX|XX", "XX|CH:fallout,radiation,irradiated_water%0.025|M1%2.5 AND BO", "CR:radiation%0.05|CR:radiation%0.05|CR:radiation%0.05", ]; elements.rad_cloud.tempLow = 0; elements.rad_cloud.stateLow = "rad_snow_cloud"; elements.fallout.behavior = behaviors.RAD_POWDER; elements.irradiated_permafrost = { color: ["#51613d","#495234","#3b4a30","#4a4f35"], behavior: behaviors.RAD_SUPPORT, temp: -50, tempHigh: 10, stateHigh: "irradiated_mudstone", category: "Irradiated", state: "solid", density: 700, }; elements.irradiated_mudstone = { color: "#4f5e25", behavior: behaviors.RAD_SUPPORT, tempHigh:1200, stateHigh: "molten_irradiated_dirt", tempLow: -50, stateLow: "irradiated_permafrost", category: "Irradiated", state: "solid", density: 1250, breakInto: "irradiated_dirt", }; elements.irradiated_packed_sand = { color: "#79945c", behavior: behaviors.RAD_SUPPORT, tempHigh: 1700, stateHigh: "molten_irradiated_glass", category: "Irradiated", state: "solid", density: 1682, breakInto: "irradiated_sand", }; elements.irradiated_ice = { color: "#b7e0b4", behavior: behaviors.RAD_WALL, temp: 0, tempHigh: 5, stateHigh: "irradiated_water", category: "solids", state: "solid", density: 917, breakInto: "irradiated_snow", }; elements.irradiated_snow = { color: "#d5f2d3", behavior: behaviors.RAD_POWDER, temp: 0, tempHigh: 5, tempLow: -100, stateLow: "irradiated_packed_snow", stateHigh: "irradiated_water", category: "Irradiated", state: "solid", density: 100, }; elements.irradiated_packed_snow = { color: "#a7d4a3", behavior: behaviors.RAD_SUPPORTPOWDER, temp: 0, tempHigh: 20, tempLow: -200, stateLow: "irradiated_ice", stateHigh: "irradiated_water", category: "Irradiated", state: "solid", density: 400, hidden: true, }; elements.rad_snow_cloud = { color: ["#2d6e31","#416e21"], behavior: [ "XX|XX|XX", "XX|CH:fallout,radiation,irradiated_snow%0.025|M1%2.5 AND BO", "CR:radiation%0.05|CR:radiation%0.05|CR:radiation%0.05", ], category:"Irradiated", hidden: true, state: "gas", density: 0.5, ignoreAir: true, temp: -20, tempHigh: 0, stateHigh: "rad_cloud", }; elements.rad_snow_cloud_floater = { color: ["#2d6e31","#416e21"], behavior: [ "M2|M1|M2", "M1%80|CH:rad_snow_cloud_%0.2|M1%80", "M%60|XX|M2%60", ], reactions: { "rad_snow_cloud_floater": { elem1: "rad_snow_cloud", elem2: "rad_snow_cloud", chance: 0.003 }, "rad_snow_cloud": { elem1: "rad_snow_cloud", elem2: "rad_snow_cloud", chance: 0.01 } }, category:"Irradiated", hidden: true, state: "gas", density: 0.5, temp: -20, tempHigh: 0, stateHigh: "rad_cloud", }; elements.irradiated_rock = { color: ["#768063","#444f3f","#7a9476"], behavior: behaviors.RAD_POWDER, tempHigh: 950, stateHigh: "irradiated_magma", category: "Irradiated", state: "solid", density: 2550, hardness: 0.5, breakInto: ["irradiated_sand","irradiated_gravel"], }; elements.irradiated_gravel = { color: ["#d1e3c8","#a6b090","#657360","#4d523f"], behavior: behaviors.RAD_POWDER, category: "Irradiated", tempHigh: 950, stateHigh: "irradiated_magma", state: "solid", density: 1680, hardness: 0.2, breakInto: "irradiated_sand", }; elements.irradiated_basalt = { color: ["#262e20","#23331f","#3f4235"], behavior: behaviors.RAD_STURDYPOWDER, tempHigh: 1262.5, stateHigh: "irradiated_magma", category: "Irradiated", state: "solid", density: 3000, hardness: 0.65, breakInto: "irradiated_gravel", }; elements.irradiated_magma = { color: ["#ff9100","#ffae00","#ff8400"], behavior: behaviors.RAD_MOLTEN, reactions: { "ice": { "elem1": "irradiated_basalt" }, "irradiated_ice": { "elem1": "irradiated_basalt" }, "magma": { "elem1":"magma", "elem2":"irradiated_magma", "chance":0.0005, "oneway":true }, }, temp: 1500, tempLow: 850, stateLow: ["irradiated_basalt","irradiated_basalt","irradiated_basalt","irradiated_rock"], viscosity: 5000, category: "Irradiated", state: "liquid", density: 2725, }; //(Just for fun) elements.super_irradiator = { color: "#66ee33", tick: function(pixel) { var twentiethOfTemp = pixel.temp / 20; var roundOf20th = Math.round(twentiethOfTemp); var boundedR20 = Math.max(1,Math.min(roundOf20th,11)); var radius1 = (-1 * boundedR20); var radius2 = (boundedR20 + 1); for (let i = radius1; i < radius2; i++) { for (let j = radius1; j < radius2; j++) { if (!isEmpty(pixel.x+j,pixel.y+i) && !outOfBounds(pixel.x+j,pixel.y+i)) { var destPixel = pixelMap[pixel.x+j][pixel.y+i]; var elementToCheck = destPixel.element; if(irradiatedObject[elementToCheck]) { changePixel(destPixel,irradiatedObject[elementToCheck]); }; }; }; }; }, category:"machines", insulate: true, state: "solid", }; elements.super_deirradiator = { color: "#dd33ee", tick: function(pixel) { var twentiethOfTemp = pixel.temp / 20; var roundOf20th = Math.round(twentiethOfTemp); var boundedR20 = Math.max(1,Math.min(roundOf20th,11)); var radius1 = (-1 * boundedR20); var radius2 = (boundedR20 + 1); for (let i = radius1; i < radius2; i++) { for (let j = radius1; j < radius2; j++) { if (!isEmpty(pixel.x+j,pixel.y+i) && !outOfBounds(pixel.x+j,pixel.y+i)) { var destPixel = pixelMap[pixel.x+j][pixel.y+i]; var elementToCheck = destPixel.element; if(getKeyByValue(irradiatedObject,elementToCheck)) { changePixel(destPixel,getKeyByValue(irradiatedObject,elementToCheck)); }; }; }; }; }, category:"machines", insulate: true, state: "solid", }; elements.liquid_irradium = { color: "#5499FF", behavior: behaviors.RAD_LIQUID, tick: function(pixel) { for(i = 0; i < adjacentCoords.length; i++) { if(!isEmpty(pixel.x+adjacentCoords[i][0],pixel.y+adjacentCoords[i][1],true)) { var destPixel = pixelMap[pixel.x+adjacentCoords[i][0]][pixel.y+adjacentCoords[i][1]]; var elementToCheck = destPixel.element; if(irradiatedObject[elementToCheck]) { changePixel(destPixel,irradiatedObject[elementToCheck]); }; } } }, //Becomes rainbow sand by water or poison, as well as by protocite, or bio-ooze //Becomes sulfuric acid on contact with it //Becomes corrupt slime by elder fluid //Converts black tar and organic soup into itself //Turns either grav liquid into aether dust, as well as liquid crystal //Turns blood into bloodstone //Turns blue slime into black slime //Made by {mercury or bio-ooze} and protocite category:"liquids", state: "liquid", density: 18180, //Cherry-picked from a Tumblr headcanon //https://omniblog-of-starbound.tumblr.com/post/188424072728/starbound-element-headcannon-modded-metals viscosity: 80.1, //probably misinterpreting tickDelta, and w/o the game assets, I can't compare against water, so this is in relation to H2SO4 scaled to its density in cP and under the assumption that water visc = 1 }; //Inter-mod compatibility if(enabledMods.includes("mods/some_tf_liquids.js")) { elements.irradiated_basalt_gravel = { color: ["#394d37", "#3b452f", "#3f452a", "#2d3d2c"], behavior: behaviors.RAD_POWDER, tempHigh: 1262.5, stateHigh: "irradiated_magma", category: "Irradiated", state: "solid", density: 1975, hardness: 0.26, } elements.irradiated_basalt.breakInto = "irradiated_basalt_gravel"; }; //Worldgen preset for testing worldgentypes.irradiated_test_ocean = { layers: [ [0.9, "irradiated_wet_sand", 0.2], [0.9, "irradiated_sand", 0.2], [0.8, "irradiated_sandy_water", 0.7], [0.25, "irradiated_water"], [0.1, "irradiated_sand", 0.1], [0.1, "clay", 0.1], [0.1, "irradiated_gravel", 0.2], [0.1, "irradiated_wet_sand"], [0.03, "irradiated_gravel", 0.5], [0.03, "irradiated_rock"], [0, "irradiated_basalt"], ] }; /*/Water irradiation reactions (must be done last) waterIrradiationExclusionArray = ["irradiated_water", "irradiated_wet_sand"] filteredWaterIrradiationArray = Object.keys(elements).filter(function(e) { return elements[e].category === "Irradiated" && (!waterIrradiationExclusionArray.includes(e)); }); for(i = 0; i < filteredWaterIrradiationArray.length; i++) { elements.water.reactions[filteredWaterIrradiationArray[i]] = { "elem1":"irradiated_water", chance: 0.01 } };*/ //Generation //TNT world //Supplementary elements elements.oil_cloud = { color: "#8c4331", behavior: [ "XX|XX|XX", "XX|CH:oil%0.05|M1%2.5 AND BO", "XX|XX|XX", ], category:"gases", temp: 30, state: "gas", density: 0.5, burn: 60, burnTime: 15, burnInto: "explosion", //atomization moment ignoreAir: true, stain: 0.02, }; elements.oil_cloud_floater = { color: "#8c4331", behavior: [ "M2|M1|M2", "M1%80|CH:oil_cloud%0.2|M1%80", "M%60|XX|M2%60", ], reactions: { "oil_cloud_floater": { elem1: "oil_cloud", elem2: "oil_cloud", chance: 0.003 }, "oil_cloud": { elem1: "oil_cloud", elem2: "oil_cloud", chance: 0.01 } }, category:"gases", temp: 30, //otherwise identical state: "gas", density: 0.5, burn: 60, burnTime: 15, burnInto: "explosion", //atomization moment stain: 0.02, }; //Main preset worldgentypes.tnt_world = { name: "TNT World", //unimplemented layers: [ [0.9, "oil_cloud_floater"], [0.65, "coal", 0.1], [0.65, "nitroglycerin"], [0.55, "nitroglycerin", 0.5], [0.2, "coal", 0.2], [0.2, "tnt"], [0.05, "coal", 0.3], [0.05, "c4"], [0.0, "coal", 0.4], [0.0, "lamp_oil"] ] }; //Inter-mod compatibility runAfterLoad(function() { if(enabledMods.includes("mods/glenn_gases.js")) { worldgentypes.tnt_world.layers.unshift([0.9, "red_gas", 0.50]) }; }); //Ice world //Supplementary elements elements.snow_cloud_floater = { color: "#7e8691", behavior: [ "M2|M1|M2", "M1%80|CH:snow_cloud%0.2|M1%80", "M%60|XX|M2%60", ], reactions: { "snow_cloud_floater": { elem1: "snow_cloud", elem2: "snow_cloud", chance: 0.003 }, "snow_cloud": { elem1: "snow_cloud", elem2: "snow_cloud", chance: 0.01 } }, category:"gases", temp:-10, tempHigh:30, stateHigh:"rain_cloud", tempLow:-200, stateLow:"hail_cloud", state:"gas", density:0.55, conduct:0.01, movable:true, isGas:true }; //Main preset worldgentypes.ice = { layers: [ //[0.95, "snow_cloud_floater"], //le cutting room floor has arrived [0.9, "snow"], [0.65, "ice"], [0.6, "gravel"], [0.35, "permafrost"], [0, "rock"] ], temperature: -20 }; //Nuclear wasteland //Elements defined above //Main preset worldgentypes.nuclear_wasteland = { layers: [ [0.9, "smoke", 0.5], [0.9, "rad_snow_cloud_floater", 0.75], [0.82, "fallout", 0.4], [0.7, "liquid_irradium", 0.05], [0.7, "dead_plant", 0.12], [0.55, "irradiated_dirt"], [0.45, "irradiated_rock"], [0.25, "uranium", 0.4], [0.35, "irradiated_rock", 0.5], [0.3, "irradiated_gravel", 0.5], [0.2, "uranium", 0.2], [0.05, "rock"], [0, "basalt"], ], temperature: -5 //nuclear winter }; //Dark world worldgentypes.dark = { layers: [ [0.8, "carbon_dioxide"], [0.65, "ink"], [0.5, "charcoal"], [0, "basalt"] ] }; //Money world worldgentypes.money = { layers: [ [0.9, "emerald"], [0.6, "diamond"], [0.3, "gold_coin"], [0.1, "ruby", 1/3], [0.1, "amethyst", 1/2], [0.1, "sapphire"], [-0.1, "pearl", 0.4], [-0.1, "onyx"] ] }; //Irradiated Desert //Main preset worldgentypes.nuclear_wasteland_desert = { layers: [ [0.97, "fallout", 0.4], [0.95, "irradiated_gravel", 0.6], [0.65, "liquid_irradium", 0.01], [0.65, "cancer", 0.02], [0.65, "bone", 0.02], [0.65, "irradiated_sand"], [0.55, "cancer", 0.01], [0.55, "bone", 0.01], [0.3, "irradiated_sandstone"], [0.05, "irradiated_rock"], [-0.78, "irradiated_basalt"] ], temperature: -13 };