diff --git a/mods/chem.js b/mods/chem.js index c1e151f3..73438729 100644 --- a/mods/chem.js +++ b/mods/chem.js @@ -1,17 +1,77 @@ -function acidReact(acid,element,product1,product2,temp) +function toObject(color) { - if(product1 !== null) - elements[acid].ignore.push(product1); - if(product2 !== null) - elements[acid].ignore.push(product2); - elements[acid].ignore.push(element); - elements[acid].reactions[element] = { "elem1": product1, "elem2": product2, "temp1": temp, "temp2": temp }; + color = color.match(/\d+/g); + return color; +} + +function react(elem1,elem2,product1,product2,temp) +{ + elements[elem1].reactions[elem2] = { "elem1": product1, "elem2": product2, "temp1": temp, "temp2": temp }; +} +function acidReact(elem1,elem2,product1,product2,temp = 0) +{ + if(elements[elem1] && elements[elem1].ignore) + { + if(product1 !== null) + { + if(product1 instanceof Array) + { + elements[elem1].ignore.push(...product1); + } + } + if(product2 !== null) + { + if(product2 instanceof Array) + { + elements[elem1].ignore.push(...product2); + } + } + elements[elem1].ignore.push(elem2); + } + if(elements[elem2] && elements[elem2].ignore) + { + if(product1 !== null) + { + if(product1 instanceof Array) + { + elements[elem2].ignore.push(...product1); + } + } + if(product2 !== null) + { + if(product2 instanceof Array) + { + elements[elem2].ignore.push(...product2); + } + } + elements[elem2].ignore.push(elem1); + } + if(product1 !== null) + if(elements[product1] && elements[product1].ignore) + { + if(product2 !== null) + elements[product1].ignore.push(product2); + elements[product1].ignore.push(elem1); + elements[product1].ignore.push(elem2); + } + if(product2 !== null) + if(elements[product2] && elements[product2].ignore) + { + if(product1 !== null) + elements[product2].ignore.push(product1); + elements[product2].ignore.push(elem1); + elements[product2].ignore.push(elem2); + } + if(!elements[elem1].reactions[elem2]) + { + elements[elem1].reactions[elem2] = { "elem1": product1, "elem2": product2, "temp1": temp, "temp2": temp }; + } } elements.fluorine = { color: "#FFFFBF", behavior: behaviors.GAS, - ignore: ["FOOF","solid_FOOF","oxygen","liquid_oxygen","oxygen_ice","chlorine","liquid_chlorine","liquid_hydrogen_fluoride","liquid_fluorine","fluorine","fluorine_ice","hydrogen_fluoride","hydrofluoric_acid","hydrofluoric_ice","hydrofluoric_acid_gas","fire","smoke","acid_gas","neutral_acid","acid","acid_cloud","water","salt_water","sugar_water","dirty_water","steam","gold","hydrogen","polytetrafluoroethylene","molten_polytetrafluoroethylene","tungsten","tungsten_hexafluoride"], + ignore: ["foof","solid_foof","oxygen","liquid_oxygen","oxygen_ice","chlorine","liquid_chlorine","liquid_hydrogen_fluoride","liquid_fluorine","fluorine","fluorine_ice","hydrogen_fluoride","hydrofluoric_acid","hydrofluoric_ice","hydrofluoric_acid_gas","fire","smoke","acid_gas","neutral_acid","acid","acid_cloud","water","salt_water","sugar_water","dirty_water","steam","gold","hydrogen","polytetrafluoroethylene","molten_polytetrafluoroethylene","tungsten","tungsten_hexafluoride"], tick: function(pixel) { let change = false; for (let i = -1; i <= 1; i++) { @@ -39,7 +99,7 @@ elements.fluorine = { "pool_water": { "elem1": "hydrofluoric_acid", "elem2": "hydrogen" }, "primordial_soup": { "elem1": "hydrofluoric_acid", "elem2": "hydrogen" }, "neutral_acid": { "elem1": "hydrofluoric_acid", "elem2": "hydrogen" }, - "liquid_oxygen": { "elem1": "FOOF", "elem2": null }, + "liquid_oxygen": { "elem1": "foof", "elem2": null }, "hydrogen": { "elem1": "hydrogen_fluoride", "elem2":"fire" }, "tungsten": { "elem1": "tungsten_hexafluoride", "elem2": "fire" }, }, @@ -54,7 +114,7 @@ elements.fluorine = { elements.liquid_fluorine = { color: "#ffff3b", behavior: behaviors.LIQUID, - ignore: ["FOOF","solid_FOOF","oxygen","liquid_oxygen","oxygen_ice","chlorine","liquid_chlorine","liquid_hydrogen_fluoride","liquid_fluorine","fluorine","fluorine_ice","hydrogen_fluoride","hydrofluoric_acid","hydrofluoric_ice","hydrofluoric_acid_gas","fire","smoke","acid_gas","neutral_acid","acid","acid_cloud","water","salt_water","sugar_water","dirty_water","steam","seltzer","pool_water","primordial_soup","gold","hydrogen","polytetrafluoroethylene","molten_polytetrafluoroethylene","tungsten","tungsten_hexafluoride"], + ignore: ["foof","solid_foof","oxygen","liquid_oxygen","oxygen_ice","chlorine","liquid_chlorine","liquid_hydrogen_fluoride","liquid_fluorine","fluorine","fluorine_ice","hydrogen_fluoride","hydrofluoric_acid","hydrofluoric_ice","hydrofluoric_acid_gas","fire","smoke","acid_gas","neutral_acid","acid","acid_cloud","water","salt_water","sugar_water","dirty_water","steam","seltzer","pool_water","primordial_soup","gold","hydrogen","polytetrafluoroethylene","molten_polytetrafluoroethylene","tungsten","tungsten_hexafluoride"], tick: function(pixel) { let change = false; for (let i = -1; i <= 1; i++) { @@ -133,7 +193,7 @@ elements.hydrofluoric_acid = { }, state: "liquid", category:"liquids", - density: 1150, + density: 1020, stain: 0.005, tempHigh: 100, stateHigh: "hydrofluoric_acid_gas", @@ -259,6 +319,7 @@ elements.liquid_hydrogen_fluoride = { "acid": { "elem1": "hydrofluoric_acid", "elem2": null }, }, state: "liquid", + category: "liquids", hidden: true, density: 1.7, stain: 0.005, @@ -268,10 +329,18 @@ elements.liquid_hydrogen_fluoride = { tempLow: -83.6, }; -elements.FOOF = { + +runAfterLoad(function() { + reactList("fluorine", eLists.WATER, { "elem1": "hydrofluoric_acid", "elem2": "hydrogen" }); + reactList("liquid_fluorine", eLists.WATER, { "elem1": "hydrofluoric_acid", "elem2": "hydrogen" }); + reactList("hydrogen_fluoride", eLists.WATER, { "elem1": "hydrofluoric_acid", "elem2": null }); + reactList("liquid_hydrogen_fluoride", eLists.WATER, { "elem1": "hydrofluoric_acid", "elem2": null }); +}); + +elements.foof = { color: "#fa1e1e", behavior: behaviors.LIQUID, - ignore: ["FOOF","solid_FOOF","fluorine","liquid_fluorine","fluorine_ice","liquid_oxygen","oxygen_ice","oxygen","fire","polytetrafluoroethylene","molten_polytetrafluoroethylene"], + ignore: ["foof","solid_foof","fluorine","liquid_fluorine","fluorine_ice","liquid_oxygen","oxygen_ice","oxygen","fire","polytetrafluoroethylene","molten_polytetrafluoroethylene"], tick: function(pixel) { let change = false; for (let i = -1; i <= 1; i++) { @@ -303,13 +372,14 @@ elements.FOOF = { tempHigh: -57, stateHigh: ["oxygen","fluorine","explosion"], tempLow: -154, - stateLow: "solid_FOOF", + stateLow: "solid_foof", + reactions: {} }; -elements.solid_FOOF = { +elements.solid_foof = { color: "#fa4a1e", behavior: behaviors.WALL, - ignore: ["FOOF","solid_FOOF","fluorine","liquid_fluorine","fluorine_ice","liquid_oxygen","oxygen_ice","oxygen","fire","polytetrafluoroethylene","molten_polytetrafluoroethylene"], + ignore: ["foof","solid_foof","fluorine","liquid_fluorine","fluorine_ice","liquid_oxygen","oxygen_ice","oxygen","fire","polytetrafluoroethylene","molten_polytetrafluoroethylene"], tick: function(pixel) { let change = false; for (let i = -1; i <= 1; i++) { @@ -339,14 +409,12 @@ elements.solid_FOOF = { stain: 0.01, temp: -160, tempHigh: -154, - stateHigh: "FOOF", + stateHigh: "foof", }; -elements.tungsten_hexafluoride = { - color: "#f5f57a", - behavior: behaviors.GAS, - reactions: { +elements.tungsten_hexafluoride = {color: "#f5f57a",behavior: behaviors.GAS,tempLow: 17.1,state: "gas",category:"gases",density: 12.4,stain: 0.005, + reactions: { "water": { "elem1": "hydrofluoric_acid", "elem2": "tungsten" }, "salt_water": { "elem1": "hydrofluoric_acid", "elem2": "tungsten" }, "sugar_water": { "elem1": "hydrofluoric_acid", "elem2": "tungsten" }, @@ -357,17 +425,11 @@ elements.tungsten_hexafluoride = { "primordial_soup": { "elem1": "hydrofluoric_acid_gas", "elem2": "tungsten" }, "neutral_acid": { "elem1": "hydrofluoric_acid", "elem2": "tungsten" }, }, - tempLow: 17.1, - state: "gas", - category:"gases", - density: 12.4, - stain: 0.005, }; -elements.liquid_tungsten_hexafluoride = { - density: 4560, - tempLow: 2.3, -}; + + +elements.liquid_tungsten_hexafluoride = {density: 4560,tempLow: 2.3,}; if (!elements.acid.ignore) { elements.acid.ignore = []; @@ -388,6 +450,9 @@ let defaultAcidReactions = { "borax": { "elem1":"neutral_acid", "elem2":null }, "ammonia": { "elem1":"neutral_acid", "elem2":null }, "bleach": { "elem1":"neutral_acid", "elem2":null }, + "caustic_potash": { "elem1":"neutral_acid", "elem2":null }, + "radium_hydroxide": { "elem1":"neutral_acid", "elem2":null }, + "actinium_hydroxide": { "elem1":"neutral_acid", "elem2":null }, "water": { "elem1":null, "elem2":"dirty_water" }, "salt_water": { "elem1":null, "elem2":"water" }, "sugar_water": { "elem1":null, "elem2":"water" }, @@ -420,10 +485,12 @@ let defaultAcidGasReactions = { "meat": { "elem2":"rotten_meat", "elem1":null, "chance":0.4 }, }; -acids = [elements.acid, elements.acid_gas, elements.fluorine, elements.liquid_fluorine, elements.hydrofluoric_acid, elements.hydrofluoric_acid_gas, elements.hydrogen_fluoride, elements.liquid_hydrogen_fluoride]; -ignoreAcid = []; -trueAcids = ["acid", "hydrofluoric_acid"]; -trueAcidGases = ["acid_gas", "hydrofluoric_acid_gas"]; + +eListAdd("CAUSTIC", ["acid", "acid_gas", "fluorine", "liquid_fluorine", "hydrofluoric_acid", "hydrofluoric_acid_gas", "hydrogen_fluoride", "liquid_hydrogen_fluoride"]); +eListAdd("CAUSTICIGNORE", []); + +eListAdd("ACID", ["acid", "hydrofluoric_acid"]); +eListAdd("ACIDGAS", ["acid_gas", "hydrofluoric_acid_gas"]); if (enabledMods.includes("mods/generative_mods.js")) { @@ -442,7 +509,7 @@ runAfterLoad(function() { }); } -function createAcid(name,reactions, gasReactions, color, categoryhidden, categoryhiddenGas, tempHigh, tempLowGas, tempLow, tempHighGas, density, densityGas) +function createAcid(name,reactions, gasReactions, color, categoryhidden, categoryhiddenGas, tempHigh, tempLowGas, tempLow, tempHighGas, density, densityGas, type, compound = "acid") { elements[name] = { forceAutoGen: true, @@ -452,15 +519,13 @@ function createAcid(name,reactions, gasReactions, color, categoryhidden, categor "DB%5 AND M2|XX|DB%5 AND M2", "DB%5 AND M2|DB%10 AND M1|DB%5 AND M2", ], - ignore: defaultAcidIgnore.concat(ignoreAcid), + ignore: defaultAcidIgnore.concat(eLists.CAUSTICIGNORE), reactions: reactions, category: "liquids", hidden: categoryhidden, tempHigh: tempHigh, stateHigh: name + "_gas", tempLow: tempLow, - burn: 30, - burnTime: 1, state: "liquid", density: density } @@ -470,7 +535,7 @@ function createAcid(name,reactions, gasReactions, color, categoryhidden, categor "DB%5 AND M1|XX|DB%5 AND M1", "DB%5 AND M1|DB%10 AND M1|DB%5 AND M1", ], - ignore: defaultAcidGasIgnore.concat(ignoreAcid), + ignore: defaultAcidGasIgnore.concat(eLists.CAUSTICIGNORE), reactions: gasReactions, category: "gases", hidden: categoryhiddenGas, @@ -479,8 +544,6 @@ function createAcid(name,reactions, gasReactions, color, categoryhidden, categor tempLow: tempLowGas, stateLow: name, temp: tempLowGas + 20, - burn: 30, - burnTime: 1, state: "gas", density: densityGas, } @@ -502,30 +565,179 @@ function createAcid(name,reactions, gasReactions, color, categoryhidden, categor { elements[name+"_gas"].reactions[name+"_gas"]= { "elem1": null, "elem2": "acid_cloud", "chance":0.3, "y":[0,12], "setting":"clouds" }; } - acids.push(elements[name], elements[name+"_gas"]); + eLists.CAUSTIC.push(name, name+"_gas"); acidIgnore([name, name + "_gas", name + "_ice", name + "_cloud"]); + if(type) { + eListAddIon(type, [name, name+"_gas"], compound); + } + if(compound == "acid") { + eListAddIon("HYDROGEN", [name, name+"_gas"], compound); + } +} + +function eListAddIon(listName, itemList, compoundType = "default", priority = 0) +{ + eListAdd(listName, itemList); + if (typeof itemList === "string") { itemList = [itemList]; } + for (var i = 0; i < itemList.length; i++) { + if(!elements[itemList[i]]) { + elements[itemList[i]] = {}; + } + if (!elements[itemList[i]].salt) { + elements[itemList[i]].salt = {}; + } + if (!elements[itemList[i]].salt[compoundType]) { + elements[itemList[i]].salt[compoundType] = {}; + elements[itemList[i]].salt[compoundType].priority = priority; + elements[itemList[i]].salt[compoundType].components = []; + } + if (elements[itemList[i]].salt[compoundType].components.indexOf(listName) === -1) { + elements[itemList[i]].salt[compoundType].components.push(listName); + } + } } function acidIgnore(ignore) { - for(let i = 0; i < acids.length; i++) + for(let i = 0; i < eLists.CAUSTIC.length; i++) { - acids[i].ignore = acids[i].ignore.concat(ignore); + elements[eLists.CAUSTIC[i]].ignore = elements[eLists.CAUSTIC[i]].ignore.concat(ignore); } - ignoreAcid = ignoreAcid.concat(ignore); + eLists.CAUSTICIGNORE = eLists.CAUSTICIGNORE.concat(ignore); } +eListAdd("WATER", ["water", "salt_water", "sugar_water", "dirty_water", "neutral_acid", "seltzer", "pool_water", "primordial_soup"]); +function reactList(element, list, reaction) { + for(let i = 0; i < list.length; i++) + { + acidReact(element, list[i], reaction.elem1, reaction.elem2); + elements[element].reactions[list[i]] = reaction; + } +} + +function createSalt(name,nameWater,color,colorWater,hidden,hiddenWater,tempHigh,tempLowWater,tempHighWater,density,densityWater,cation,anion) +{ + if(!elements[name]) + { + elements[name] = { + color: color, + behavior: behaviors.POWDER, + category: "powders", + density: density, + state: "solid", + tempHigh: tempHigh, + reactions: { + "ice": { elem1:null, elem2:nameWater, chance:0.1 }, + "rime": { elem1:null, elem2:nameWater, chance:0.075 }, + "snow": { elem1:null, elem2:nameWater, chance:0.25 }, + "packed_snow": { elem1:null, elem2:nameWater, chance:0.05 }, + "packed_ice": { elem1:null, elem2:nameWater, chance:0.01 }, + "water": { elem2: nameWater, elem1: null } + }, + hidden: hidden + } + } + if(!elements[nameWater]) + { + + elements[nameWater] = { + color: colorWater, + behavior: behaviors.LIQUID, + tempHigh: tempHighWater, + stateHigh: ["steam",name], + tempLow: tempLowWater, + category: "liquids", + reactions: { + "dirt": { elem1: null, elem2: "mud" }, + "sand": { elem1: null, elem2: "wet_sand" }, + "clay_soil": { elem1: null, elem2: "clay" }, + "dust": { elem1: "dirty_water", elem2: null }, + "ash": { elem1: "dirty_water", elem2: null }, + "carbon_dioxide": { elem1: "dirty_water", elem2: null }, + "sulfur": { elem1: "dirty_water", elem2: null }, + "charcoal": { elem1: "dirty_water", chance:0.005 }, + "rat": { elem1: "dirty_water", chance:0.005 }, + "plague": { elem1: "dirty_water", elem2: null }, + "fallout": { elem1: "dirty_water", chance:0.25 }, + "radiation": { elem1: "dirty_water", chance:0.25 }, + "rust": { elem1: "dirty_water", chance:0.005 }, + "quicklime": { elem1: null, elem2: "slaked_lime" }, + "rock": { elem2: "wet_sand", chance: 0.0005 }, + "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 }, + "cancer": { elem1: "dirty_water", chance:0.25 }, + // electrolysis: + "aluminum": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.0025 }, + "zinc": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.015 }, + "steel": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.0125 }, + "iron": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.0125 }, + "tin": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.01 }, + "lead": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.01 }, + "brass": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.001 }, + "bronze": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.001 }, + "copper": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.0075 }, + "silver": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.0075 }, + "gold": { elem1:["hydrogen","hydrogen","oxygen",name], charged:true, chance:0.0075 }, + "fire": { elem2: "smoke" }, + "snow": { elem2:"slush" }, + "rat": { elem1:"dirty_water", chance:0.2 }, + "slug": { elem2: "slime", elem1: null }, + "snail": { elem2: "calcium", elem1: null }, + "torch": { elem2:"wood" }, + "light": { "color2":"#a1bac9" }, + "sawdust": { elem2:"cellulose", elem1:null }, + "oxygen": { elem2:"foam" }, + "paper": { elem2:"cellulose", elem1:null }, + "pollen": { elem2: null }, + "soda": { elem1:"foam", chance:0.01 }, + "ice_nine": { elem1: "ice_nine" }, + "ant_wall": { elem2:["mud","mud","wet_sand"], elem1:null, chance:0.007 }, + "iron": { elem2:"rust", chance:0.005 }, + "copper": { elem2:"oxidized_copper", chance:0.005 }, + "steel": { elem2:"rust", chance:0.004 }, + "bronze": { elem2:"oxidized_copper", chance:0.0025 }, + "soap": { elem1: "water" }, + "soap": { elem2: ["foam","bubble"], chance:0.005 }, + "dye": { elem2:null, chance:0.05 }, + "ink": { elem2:null, chance:0.01 }, + "sodium": { elem2:["pop","pop","pop","hydrogen"], chance:0.01, temp1:250 }, + "molten_sodium": { elem2:["pop","pop","pop","hydrogen"], chance:0.01, temp1:250 }, + "radiation": { elem2:"rad_steam", chance:0.4 }, + "confetti": { elem2:[null,"cellulose"], chance:0.001 }, + "greek_fire": { func: function(p,pixel){if (!pixel.burning) { pixel.burning=true; pixel.burnStart=pixelTick }}}, + }, + state: "liquid", + density: densityWater, + conduct: 0.1, + stain: -0.66, + hidden: hiddenWater + }; + } + eListAddIon(cation, [name,nameWater,"molten_" + name]); + eListAddIon(anion, [name,nameWater,"molten_" + name]); + eListAdd("WATER", nameWater); + eListAdd("COMPOUND", name); +} + +createSalt("salt","salt_water",null,null,false,false,0,0,0,0,0,"SODIUM","CHLORIDE"); + acidIgnore(["acid", "acid_gas", "acid_ice", "liquid_fluorine","fluorine","fluorine_ice","hydrogen_fluoride","liquid_hydrogen_fluoride","hydrogen_fluoride_ice","hydrofluoric_acid_ice","hydrofluoric_acid","hydrofluoric_acid_gas","hydrofluoric_acid_cloud","acid_cloud"]); elements.acid.name = "hydrochloricAcid"; elements.acid_gas.name = "hydrochloricAcidGas"; +eListAddIon("CHLORIDE", ["acid", "acid_gas"],"acid"); +eListAddIon("HYDROGEN", ["acid", "acid_gas"],"acid"); +eListAddIon("FLUORIDE", ["hydrofluoric_acid", "hydrofluoric_acid_gas"],"acid"); +eListAddIon("HYDROGEN", ["hydrofluoric_acid", "hydrofluoric_acid_gas"],"acid"); createAcid("generic_acid",defaultAcidReactions,defaultAcidGasReactions,"#80d488",true,true,110,100,-10,400,1020,1) elements.generic_acid.name = "acid"; elements.generic_acid_gas.name = "acid_gas"; -trueAcids.push("generic_acid") -trueAcidGases.push("generic_acid_gas"); +eLists.ACID.push("generic_acid") +eLists.ACIDGAS.push("generic_acid_gas"); if (!enabledMods.includes("mods/generative_mods.js")) { elements.acid_cloud.behavior = [ @@ -535,13 +747,13 @@ if (!enabledMods.includes("mods/generative_mods.js")) { ]; } -createAcid("nitric_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#91993c","#6b7041","#5f614b"],false,false,83,70,-42,400,1500,1.5) +createAcid("nitric_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#91993c","#6b7041","#5f614b"],false,false,83,70,-42,400,1500,1.5,"NITRATE") acidReact("nitric_acid","ammonia","fertilizer",null,0); acidReact("nitric_acid_gas","ammonia","fertilizer",null,0); -trueAcids.push("nitric_acid") -trueAcidGases.push("nitric_acid_gas"); +eLists.ACID.push("nitric_acid") +eLists.ACIDGAS.push("nitric_acid_gas"); elements.nitric_oxide = { color: "#b8926c", @@ -566,8 +778,6 @@ elements.nitrogen_dioxide = { reactions: { "steam": { "elem1": "smog", "elem2": null, "chance":0.01 }, "blood": { "elem1":null, "elem2":"infection", "chance":0.01 }, - "water": { "elem1":null, "elem2":"nitric_acid", "chance":0.01 }, - "dirty_water": { "elem1":null, "elem2":"nitric_acid", "chance":0.01 }, "plant": { "elem1":null, "elem2":"dead_plant", "chance":0.01 }, "grass": { "elem1":null, "elem2":"dead_plant", "chance":0.01 }, "algae": { "elem1":null, "elem2":null, "chance":0.01 }, @@ -600,6 +810,10 @@ elements.nitrogen_dioxide = { density: 1.88, }; +runAfterLoad(function() { + reactList("nitrogen_dioxide", eLists.WATER, { "elem1":null, "elem2":"nitric_acid", "chance":0.01 }); +}); + elements.liquid_nitrogen_dioxide = { tempLow: -9.3, hidden: true, @@ -833,16 +1047,8 @@ elements.sulfur_dioxide = { color: "#FFF700", behavior: behaviors.GAS, reactions: { - "water": { "elem1": null, "elem2": "sulfuric_acid" }, - "salt_water": { "elem1": null, "elem2": "sulfuric_acid" }, - "sugar_water": { "elem1": null, "elem2": "sulfuric_acid" }, - "dirty_water": { "elem1": null, "elem2": "sulfuric_acid" }, "steam": { "elem1": null, "elem2": "sulfuric_acid_gas" }, "acid_gas": { "elem1": null, "elem2": "sulfuric_acid_gas" }, - "neutral_acid": { "elem1": null, "elem2": "sulfuric_acid" }, - "seltzer": { "elem1": null, "elem2": "sulfuric_acid" }, - "pool_water": { "elem1": null, "elem2": "sulfuric_acid" }, - "primordial_soup": { "elem1": null, "elem2": "sulfuric_acid" }, //poison "blood": { "elem1":null, "elem2":"infection" }, "soap": { "elem1":null, "chance":0.02 }, @@ -892,11 +1098,20 @@ elements.sulfur_dioxide = { density: 2.6, }; + +runAfterLoad(function() { + reactList("sulfur_dioxide", eLists.WATER, { "elem1": null, "elem2": "sulfuric_acid" }); +}); + elements.liquid_sulfur_dioxide = { color: "#d1cb17", behavior: behaviors.LIQUID, + category: "liquids", reactions: elements.sulfur_dioxide.reactions, + tempHigh: -10, + temp: -15, tempLow: -72, + stateHigh: "sulfur_dioxide", state: "liquid", hidden: true, density: 1435, @@ -907,15 +1122,6 @@ elements.hydrogen_sulfide = { behavior: behaviors.GAS, reactions: { "oxygen": { "elem2":"stench" }, - "water": { "elem1":null, "elem2":"dirty_water" }, - "salt_water": { "elem1":null, "elem2":"dirty_water" }, - "sugar_water": { "elem1":null, "elem2":"dirty_water" }, - "dirty_water": { "elem1":null, "elem2":"dirty_water" }, - "acid_gas": { "elem1":null, "elem2":"dirty_water" }, - "neutral_acid": { "elem1":null, "elem2":"dirty_water" }, - "seltzer": { "elem1":null, "elem2":"dirty_water" }, - "pool_water": { "elem1":null, "elem2":"dirty_water" }, - "primordial_soup": { "elem1":null, "elem2":"dirty_water" }, "nitrogen": { "elem2":"stench" }, "baking_soda": { "elem1":null } }, @@ -931,39 +1137,39 @@ elements.hydrogen_sulfide = { fireColor: ["#8180CC","#7F84E6"], } + +runAfterLoad(function() { + reactList("hydrogen_sulfide", eLists.WATER, { "elem1":null, "elem2":"dirty_water" }); +}); + acidIgnore(["sulfur_dioxide","liquid_sulfur_dioxide","sulfur_dioxide_ice"]); elements.acid.ignore.push("liquid_hydrogen_sulfide"); elements.acid_gas.ignore.push("liquid_hydrogen_sulfide"); -acidReact("acid","pyrite","iron_chloride","hydrogen_sulfide",50); -acidReact("acid_gas","pyrite","iron_chloride","hydrogen_sulfide",50); +acidReact("acid","pyrite","iron_dichloride_solution","hydrogen_sulfide",50); +acidReact("acid_gas","pyrite","iron_dichloride_solution","hydrogen_sulfide",50); -elements.iron_chloride = { - color: ["#207d09","#b51259"], - behavior: behaviors.POWDER, - reactions: { - "dirty_water": { "elem1": null, "elem2":"water" }, - //"ethylene": { "elem2":"one_two_dichloroethane" }, todo: vinyl chloride - }, - category: "powders", - tempHigh: 307.6, - state: "solid", - density: 2900, + +function blendColors(colorA, colorB, amount = 0.5) { + const [rA, gA, bA] = colorA.match(/\w\w/g).map((c) => parseInt(c, 16)); + const [rB, gB, bB] = colorB.match(/\w\w/g).map((c) => parseInt(c, 16)); + const r = Math.round(rA + (rB - rA) * amount).toString(16).padStart(2, '0'); + const g = Math.round(gA + (gB - gA) * amount).toString(16).padStart(2, '0'); + const b = Math.round(bA + (bB - bA) * amount).toString(16).padStart(2, '0'); + return '#' + r + g + b; } -createAcid("sulfuric_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#e9e05e","#c2bd7a","#9e9c7b"],false,false,337,337,10,500,1830,1.26) +createSalt("iron_dichloride","iron_dichloride_solution",["#207d09","#b51259"],[blendColors("#207d09","#2167ff",0.5),blendColors("#b51259","#2167ff",0.5)],false,true,307.6,-2,102,2900,1030,"IRONII","CHLORIDE"); + +createAcid("sulfuric_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#e9e05e","#c2bd7a","#9e9c7b"],false,false,337,337,10,500,1830,1.26,"SULFATE") elements.sulfuric_acid.ignore.push("charcoal"); elements.sulfuric_acid_gas.ignore.push("charcoal"); -elements.sulfuric_acid.reactions["water"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.sulfuric_acid.reactions["sugar_water"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.sulfuric_acid.reactions["dirty_water"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.sulfuric_acid.reactions["acid_gas"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.sulfuric_acid.reactions["neutral_acid"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.sulfuric_acid.reactions["seltzer"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.sulfuric_acid.reactions["pool_water"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.sulfuric_acid.reactions["primordial_soup"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; + +runAfterLoad(function() { + reactList("sulfuric_acid", eLists.WATER, { "elem2":"dirty_water"}); +}); elements.sulfuric_acid.reactions["grape"] = { "elem1": "charcoal", "elem2": "steam", "temp2": 200}; elements.sulfuric_acid.reactions["juice"] = { "elem1": "charcoal", "elem2": "steam", "temp2": 200}; elements.sulfuric_acid.reactions["corn"] = { "elem1": "charcoal", "elem2": "steam", "temp2": 200}; @@ -996,8 +1202,8 @@ delete elements.sulfuric_acid_gas.reactions["charcoal"]; acidReact("sulfuric_acid","magnesium_oxide","epsom_salt",null,50); acidReact("sulfuric_acid_gas","magnesium_oxide","epsom_salt",null,50); -trueAcids.push("sulfuric_acid") -trueAcidGases.push("sulfuric_acid_gas"); +eLists.ACID.push("sulfuric_acid") +eLists.ACIDGAS.push("sulfuric_acid_gas"); elements.polytetrafluoroethylene = { color: "#efefef", @@ -1127,6 +1333,7 @@ elements.tetrafluoroethylene = { burn: 100, burnTime: 2, density: 1.52, + category: "gases", } @@ -1229,7 +1436,7 @@ elements.chloroethane = { elements.diethylaluminium_chloride = { color: "#7faf7f", behavior: behaviors.LIQUID, - category: "hidden", + category: "liquids", hidden: true, tempHigh: 125, stateHigh: "fire", @@ -1315,16 +1522,10 @@ elements.titanium = { tempHigh: 1668, conduct: 0.5, hardness: 0.7, + forceAutoGen: true, }; elements.molten_titanium = { - density: 4500, color: ["#e0921d", "#e89e2e", "#f7b24a", "#fce168", "#fceca2", "#fffcf0"], - hidden: true, - state: "liquid", - behavior: behaviors.LIQUID, - stateLow: "titanium", - tempLow: 1668, - temp: 2000, viscosity: 10000 }; @@ -1336,19 +1537,13 @@ elements.rutile = { state: "solid", tempHigh: 1843, stateHigh: "molten_rutile", + forceAutoGen: true }; elements.molten_rutile = { color: ["#e3907f", "#e68f3e"], - behavior: behaviors.LIQUID, - hidden: true, reactions: { "chlorine": { "elem1": "titanium_tetrachloride", "elem2":null }, }, - density: 4230, - state: "liquid", - temp: 2000, - tempLow: 1843, - stateLow: "rutile", viscosity: 10000 }; elements.titanium_tetrachloride = { @@ -1360,22 +1555,29 @@ elements.titanium_tetrachloride = { tempHigh: 136.4, stateHigh: "titanium_tetrachloride_gas", tempLow: -24, - stateLow: "titanium_tetrachloride_crystal", + stateLow: "solid_titanium_tetrachloride", }; +eListAddIon("TITANIUMIV","solid_titanium_tetrachloride"); +eListAddIon("CHLORIDE","solid_titanium_tetrachloride"); +eListAddIon("TITANIUMIV","titanium_tetrachloride"); +eListAddIon("CHLORIDE","titanium_tetrachloride"); +eListAddIon("TITANIUMIV","titanium_tetrachloride_gas"); +eListAddIon("CHLORIDE","titanium_tetrachloride_gas"); +eListAdd("INSOLUBLE","titanium_tetrachloride"); elements.titanium_tetrachloride_gas = { - color: "#e8edd5", behavior: behaviors.GAS, hidden: true, + category: "gases", density: 500, state: "gas", temp: 200, tempLow: 136.4, stateLow: "titanium_tetrachloride" }; -elements.titanium_tetrachloride_crystal = { - color: "#f5fffe", +elements.solid_titanium_tetrachloride = { behavior: behaviors.WALL, hidden: true, + category: "solids", density: 1728, state: "solid", temp: -50, @@ -1384,62 +1586,19 @@ elements.titanium_tetrachloride_crystal = { }; -elements.titanium_trichloride = { - color: "#c71585", - behavior: behaviors.SOLID, - category: "solids", - density: 2640, - state: "solid", -}; -elements.magnesium = { - color: "#dddce6", - category: "solids", - state: "solid", - density: 1738, - behavior: behaviors.WALL, - tick: function(pixel) { - if (pixel.burning) { - if(pixel.temp < 2200) { - pixel.temp += 10; - } - } - }, - stateHigh: "molten_magnesium", - tempHigh: 650, - conduct: 0.3, - burn: 1, - burnTime: 300, - fireColor: "#ffffff", - burnInto: "magnesium_oxide", - hardness: 0.5, -}; -elements.molten_magnesium = { - density: 1738, - color: ["#cc9c7c", "#ebb896", "#f5bb95", "#f7cd9c", "#fcd2a2", "#fff8f0"], - hidden: true, - state: "liquid", - behavior: behaviors.MOLTEN, - reactions: { - "titanium_tetrachloride": { "elem1": "titanium", "elem2": "magnesium_chloride"}, - "titanium_tetrachloride_gas": { "elem1": "titanium", "elem2": "magnesium_chloride"}, - }, - tick: function(pixel) { - if (pixel.burning) { - if(pixel.temp < 2200) { - pixel.temp += 10; - } - } - }, - stateLow: "magnesium", - tempLow: 650, - temp: 1000, - viscosity: 10000, - burn: 1, - conduct: 0.3, - burnTime: 300, - fireColor: "#ffffff", - burnInto: "magnesium_oxide", +createSalt("titanium_trichloride","titanium_trichloride_solution","#c71585",blendColors("#c71585","#2167ff",0.4),false,true,440,-2,102,2640,1020,"TITANIUMIII","CHLORIDE"); + +elements["titanium_trichloride"].behavior = behaviors.SOLID; +elements["titanium_trichloride"].category = "solids"; +elements["titanium_trichloride"].stateHigh = ["chlorine","titanium_tetrachloride"]; +delete elements["molten_titanium_trichloride"]; + +elements.magnesium.burnInto = "magnesium_oxide"; +elements.molten_magnesium.burnInto = "magnesium_oxide"; +elements.molten_magnesium.reactions = { + "titanium_tetrachloride": { "elem1": "titanium", "elem2": "magnesium_chloride"}, + "titanium_tetrachloride_gas": { "elem1": "titanium", "elem2": "magnesium_chloride"}, }; @@ -1456,30 +1615,27 @@ elements.magnesium_oxide = { }; -elements.magnesium_chloride = { - color: "#bfbfbf", - behavior: behaviors.POWDER, - category: "powders", - density: 2640, - state: "solid", - tempHigh: 714, - stateHigh: "molten_magnesium_chloride", -}; +eListAdd("INSOLUBLE","magnesium_oxide"); +eListAddIon("MAGNESIUM","magnesium_oxide"); +eListAddIon("OXIDE","magnesium_oxide"); +eListAddIon("MAGNESIUM","molten_magnesium_oxide"); +eListAddIon("OXIDE","molten_magnesium_oxide"); + elements.molten_magnesium_chloride = { - behavior: behaviors.MOLTEN, behaviorOn: [ "XX|CR:fire%2.5|XX", "M2|CH:chlorine,magnesium%25|M2", "M1|M1|M1", ], - hidden: true, - temp: 750, - density: 2620, - state: "liquid", conduct: 0.3, }; +createSalt("magnesium_chloride","magnesium_chloride_solution","#bfbfbf",blendColors("#bfbfbf","#2167ff",0.75),false,true,714,-2,102,2320,1015,"MAGNESIUM","CHLORIDE"); + +elements.magnesium_chloride.forceAutoGen = true; + + elements.francium = { color: "#3eff3b", behavior: [ @@ -1491,23 +1647,21 @@ elements.francium = { pixel.temp += 5; }, reactions: { - "water": { "elem1":"radon", "elem2":"rad_pop"}, - "salt_water": { "elem1":"radon", "elem2":"rad_pop"}, - "sugar_water": { "elem1":"radon", "elem2":"rad_pop"}, - "dirty_water": { "elem1":"radon", "elem2":"rad_pop"}, - "seltzer": { "elem1":"radon", "elem2":"rad_pop"}, "steam": { "elem1":"radon", "elem2":"rad_pop"}, "rad_steam": { "elem1":"radon", "elem2":"rad_pop"}, - "seltzer": { "elem1":"radon", "elem2":"rad_pop"}, - "pool_water": { "elem1":"radon", "elem2":"rad_pop"}, - "primordial_soup": { "elem1":"radon", "elem2":"rad_pop"}, "quark_matter": { "elem1":"stable_francium", "elem2":"quark_matter"} }, tempHigh: 27, category: "powders", state: "solid", density: 2480, + conduct: 0.70, }; + +runAfterLoad(function() { + reactList("francium", eLists.WATER, { "elem1":"radon", "elem2":"rad_pop"}); +}); + elements.molten_francium = { color: "#9ff31e", behavior: [ @@ -1519,24 +1673,21 @@ elements.molten_francium = { pixel.temp += 5; }, reactions: { - "water": { "elem1":"radon", "elem2":"rad_pop"}, - "salt_water": { "elem1":"radon", "elem2":"rad_pop"}, - "sugar_water": { "elem1":"radon", "elem2":"rad_pop"}, - "dirty_water": { "elem1":"radon", "elem2":"rad_pop"}, - "seltzer": { "elem1":"radon", "elem2":"rad_pop"}, "steam": { "elem1":"radon", "elem2":"rad_pop"}, "rad_steam": { "elem1":"radon", "elem2":"rad_pop"}, - "seltzer": { "elem1":"radon", "elem2":"rad_pop"}, - "pool_water": { "elem1":"radon", "elem2":"rad_pop"}, - "primordial_soup": { "elem1":"radon", "elem2":"rad_pop"}, "quark_matter": { "elem1":"stable_francium", "elem2":"quark_matter"} }, tempLow: 27, hidden: true, state: "liquid", density: 2480, + conduct: 0.70, }; +runAfterLoad(function() { + reactList("molten_francium", eLists.WATER, { "elem1":"radon", "elem2":"rad_pop"}); +}); + elements.astatine = { color: "#5a5e5a", @@ -1551,7 +1702,7 @@ elements.astatine = { reactions: { "quark_matter": { "elem1":"stable_astatine", "elem2":"quark_matter"} }, - tempHigh: 107, //pulled out of ass-tatine + tempHigh: 301, category: "powders", state: "solid", density: 8910, @@ -1569,11 +1720,25 @@ elements.molten_astatine = { tick: function(pixel) { pixel.temp += 5; }, - tempLow: 107, //pulled out of ass-tatine + tempLow: 301, hidden: true, state: "liquid", density: 8910, + tempHigh: 336, }; +elements.astatine_gas = { + behavior: [ + "M2|M1 AND CR:radiation%50|M2", + "M1 AND CR:radiation%50|CH:polonium,big_pop%0.1|M1 AND CR:radiation%50", + "M2|M1 AND CR:radiation%50|M2", + ], + reactions: { + "quark_matter": { "elem1":"molten_stable_astatine", "elem2":"quark_matter"} + }, + tick: function(pixel) { + pixel.temp += 5; + } +} elements.radon = { color: "#b6ffb5", @@ -1646,15 +1811,6 @@ elements.rad_pop = { }; -function blendColors(colorA, colorB, amount = 0.5) { - const [rA, gA, bA] = colorA.match(/\w\w/g).map((c) => parseInt(c, 16)); - const [rB, gB, bB] = colorB.match(/\w\w/g).map((c) => parseInt(c, 16)); - const r = Math.round(rA + (rB - rA) * amount).toString(16).padStart(2, '0'); - const g = Math.round(gA + (gB - gA) * amount).toString(16).padStart(2, '0'); - const b = Math.round(bA + (bB - bA) * amount).toString(16).padStart(2, '0'); - return '#' + r + g + b; -} - elements.stable_radon = { color: [blendColors("#b6ffb5","#ff0000"),blendColors("#b6ffb5","#00ff00"),blendColors("#b6ffb5","#0000ff")], @@ -1701,142 +1857,139 @@ elements.molten_stable_polonium = { elements.stable_astatine = { color: [blendColors("#5a5e5a","#ff0000"),blendColors("#5a5e5a","#00ff00"),blendColors("#5a5e5a","#0000ff")], behavior: behaviors.POWDER, - tempHigh: 107, //pulled out of ass-tatine + tempHigh: 301, reactions: { - "water": { "elem1":"hydroastatic_acid", "elem2":null}, - "salt_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "sugar_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "dirty_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "seltzer": { "elem1":"hydroastatic_acid", "elem2":null}, "steam": { "elem1":"hydroastatic_acid", "elem2":null}, "rad_steam": { "elem1":"hydroastatic_acid", "elem2":null}, - "seltzer": { "elem1":"hydroastatic_acid", "elem2":null}, - "pool_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "primordial_soup": { "elem1":"hydroastatic_acid", "elem2":null}, }, category: "powders", state: "solid", hidden: true, density: 8910, }; + + +runAfterLoad(function() { + reactList("stable_astatine", eLists.WATER, { "elem1":"hydroastatic_acid", "elem2":null}); +}); + elements.molten_stable_astatine = { color: [blendColors("#aab0a0","#ff0000"),blendColors("#aab0a0","#00ff00"),blendColors("#aab0a0","#0000ff")], behavior: behaviors.LIQUID, - tempLow: 107, //pulled out of ass-tatine + tempLow: 301, reactions: { - "water": { "elem1":"hydroastatic_acid", "elem2":null}, - "salt_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "sugar_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "dirty_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "seltzer": { "elem1":"hydroastatic_acid", "elem2":null}, "steam": { "elem1":"hydroastatic_acid", "elem2":null}, "rad_steam": { "elem1":"hydroastatic_acid", "elem2":null}, - "seltzer": { "elem1":"hydroastatic_acid", "elem2":null}, - "pool_water": { "elem1":"hydroastatic_acid", "elem2":null}, - "primordial_soup": { "elem1":"hydroastatic_acid", "elem2":null}, }, hidden: true, state: "liquid", density: 8910, + tempHigh: 336, }; -createAcid("hydroastatic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),[blendColors("#5a5e5a","#ff0000",.25),blendColors("#5a5e5a","#00ff00",.25),blendColors("#5a5e5a","#0000ff",.25)],true,true,100,100,0,1000,1200,1) + +runAfterLoad(function() { + reactList("molten_stable_astatine", eLists.WATER, { "elem1":"hydroastatic_acid", "elem2":null}); +}); + +createAcid("hydroastatic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),[blendColors("#5a5e5a","#ff0000",.25),blendColors("#5a5e5a","#00ff00",.25),blendColors("#5a5e5a","#0000ff",.25)],true,true,100,100,0,1000,1200,1,"ASTATIDE") elements.hydroastatic_acid.ignore.push("astatine","molten_astatine","stable_astatine","molten_stable_astatine"); elements.hydroastatic_acid_gas.ignore.push("astatine","molten_astatine","stable_astatine","molten_stable_astatine"); -trueAcids.push("hydroastatic_acid"); -trueAcidGases.push("hydroastatic_acid_gas"); +eLists.ACID.push("hydroastatic_acid"); +eLists.ACIDGAS.push("hydroastatic_acid_gas"); -elements.hydroastatic_acid.reactions["water"] = { "elem1":"hydroastatic_acid", "elem2":"dirty_water"}; -elements.hydroastatic_acid.reactions["sugar_water"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.hydroastatic_acid.reactions["dirty_water"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.hydroastatic_acid.reactions["acid_gas"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.hydroastatic_acid.reactions["neutral_acid"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.hydroastatic_acid.reactions["seltzer"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.hydroastatic_acid.reactions["pool_water"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; -elements.hydroastatic_acid.reactions["primordial_soup"] = { "elem1":"sulfuric_acid", "elem2":"dirty_water"}; + + +runAfterLoad(function() { + reactList("hydroastatic_acid", eLists.WATER, {"elem2":"dirty_water"}); +}); elements.polonium_dioxide = { - color: "#ffff7f", + color: [blendColors("#ffff7f","#ff0000"), blendColors("#ffff7f","#00ff00"), blendColors("#ffff7f","#0000ff")], behavior: behaviors.POWDER, tempHigh: 500, hidden: true, state: "solid", density: 8900, + category: "powders", }; -elements.magnesium_polonide = { - color: [blendColors("#b5b5b5","#ff0000",.25),blendColors("#b5b5b5","#00ff00",.25),blendColors("#b5b5b5","#0000ff",.25)], - behavior: behaviors.POWDER, - tempHigh: 1800, - hidden: true, - state: "solid", - density: 6700, -}; +eListAdd("INSOLUBLE","polonium_dioxide"); +eListAddIon("POLONIUMIV","polonium_dioxide"); +eListAddIon("OXIDE","polonium_dioxide"); +eListAddIon("POLONIUMIV","molten_polonium_dioxide"); +eListAddIon("OXIDE","molten_polonium_dioxide"); -acidReact("acid","magnesium_polonide","magnesium_chloride","polonium_hydride",100); -acidReact("acid_gas","magnesium_polonide","magnesium_chloride","polonium_hydride",100); -acidReact("acid","molten_magnesium_polonide","magnesium_chloride","polonium_hydride",100); -acidReact("acid_gas","molten_magnesium_polonide","magnesium_chloride","polonium_hydride",100); -elements.acid.ignore.push("magnesium_polonide","molten_magnesium_polonide","polonium_hydride","polonium_hydride_ice","polonium_hydride_gas","magnesium_chloride","molten_magnesium_chloride"); -elements.acid_gas.ignore.push("magnesium_polonide","molten_magnesium_polonide","polonium_hydride","polonium_hydride_ice","polonium_hydride_gas","magnesium_chloride","molten_magnesium_chloride"); + +createSalt("magnesium_polonide","magnesium_polonide_solution",[blendColors("#b5b5b5","#ff0000",.25),blendColors("#b5b5b5","#00ff00",.25),blendColors("#b5b5b5","#0000ff",.25)],[blendColors("#2167ff","#ff0000",0.25),blendColors("#2167ff","#00ff00",0.25),blendColors("#2167ff","#0000ff",0.25)],true,true,1800,-2,102,6700,1050,"MAGNESIUM","POLONIDE"); + + +acidReact("acid","magnesium_polonide","magnesium_chloride_solution","polonium_hydride",100); +acidReact("acid_gas","magnesium_polonide","magnesium_chloride_solution","polonium_hydride",100); +acidReact("acid","molten_magnesium_polonide","magnesium_chloride_solution","polonium_hydride",100); +acidReact("acid_gas","molten_magnesium_polonide","magnesium_chloride_solution","polonium_hydride",100); +elements.acid.ignore.push("polonium_hydride_ice","polonium_hydride_gas","magnesium_chloride"); +elements.acid_gas.ignore.push("polonium_hydride_ice","polonium_hydride_gas","magnesium_chloride"); elements.polonium_hydride = { density: 2450, - color: "#838396", + color: [blendColors("#838396","#ff0000"), blendColors("#838396","#00ff00"), blendColors("#838396","#0000ff")], hidden: true, state: "liquid", behavior: behaviors.LIQUID, tempLow: -35.3, tempHigh: 36.1, + stain: 0.05, burn: 1, burnTime: 10, burnInto: ["polonium_dioxide","steam"], + category: "liquids", +}; + +elements.polonium_hydride_gas = { + density: 8.29, }; elements.stable_francium = { color: [blendColors("#3eff3b","#ff0000"),blendColors("#3eff3b","#00ff00"),blendColors("#3eff3b","#0000ff")], behavior: behaviors.POWDER, reactions: { - "water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "salt_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "sugar_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "dirty_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "seltzer": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, "steam": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, "rad_steam": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "seltzer": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "pool_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "primordial_soup": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, }, tempHigh: 27, category: "powders", state: "solid", density: 2480, hidden: true, + conduct: 0.70, }; + + +runAfterLoad(function() { + reactList("stable_francium", eLists.WATER, { "elem1":"francium_hydroxide", "elem2":"big_pop"}); +}); + + elements.molten_stable_francium = { color: [blendColors("#9ff31e","#ff0000"),blendColors("#9ff31e","#00ff00"),blendColors("#9ff31e","#0000ff")], behavior: behaviors.LIQUID, reactions: { - "water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "salt_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "sugar_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "dirty_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "seltzer": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, "steam": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, "rad_steam": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "seltzer": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "pool_water": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, - "primordial_soup": { "elem1":"francium_hydroxide", "elem2":"big_pop"}, }, tempLow: 27, state: "liquid", hidden: true, density: 2480, + conduct: 0.70, }; +runAfterLoad(function() { + reactList("molten_stable_francium", eLists.WATER, { "elem1":"francium_hydroxide", "elem2":"big_pop"}); +}); elements.big_pop = { color: ["#ffb48f","#ffd991","#ffad91"], @@ -1852,107 +2005,28 @@ elements.big_pop = { hidden: true, }; -elements.potassium_salt_water = { - color: "#416ed1", - behavior: behaviors.LIQUID, - tempHigh: 102, - stateHigh: ["steam","potassium_salt"], - tempLow: -2, - stateLowName: "potassium_salt_ice", - category: "liquids", - reactions: { - "dirt": { elem1: null, elem2: "mud" }, - "sand": { elem1: null, elem2: "wet_sand" }, - "clay_soil": { elem1: null, elem2: "clay" }, - "dust": { elem1: "dirty_water", elem2: null }, - "ash": { elem1: "dirty_water", elem2: null }, - "carbon_dioxide": { elem1: "dirty_water", elem2: null }, - "sulfur": { elem1: "dirty_water", elem2: null }, - "charcoal": { elem1: "dirty_water", chance:0.005 }, - "rat": { elem1: "dirty_water", chance:0.005 }, - "plague": { elem1: "dirty_water", elem2: null }, - "fallout": { elem1: "dirty_water", chance:0.25 }, - "radiation": { elem1: "dirty_water", chance:0.25 }, - "rust": { elem1: "dirty_water", chance:0.005 }, - "quicklime": { elem1: null, elem2: "slaked_lime" }, - "rock": { elem2: "wet_sand", chance: 0.0005 }, - "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 }, - "cancer": { elem1: "dirty_water", chance:0.25 }, - // electrolysis: - "aluminum": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.0025 }, - "zinc": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.015 }, - "steel": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.0125 }, - "iron": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.0125 }, - "tin": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.01 }, - "lead": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.01 }, - "brass": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.001 }, - "bronze": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.001 }, - "copper": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.0075 }, - "silver": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.0075 }, - "gold": { elem1:["hydrogen","hydrogen","oxygen","potassium_salt"], charged:true, chance:0.0075 }, - }, - state: "liquid", - density: 1026, - conduct: 0.1, - stain: -0.66 +createSalt("potassium_salt","potassium_salt_water",["#f2f2f2","#e0e0e0"],"#416ed1",false,false,292,-2,102,3980,1026,"POTASSIUM","CHLORIDE"); + +elements.potassium.reactions = { + "chlorine": { elem1:"potassium_salt", elem2:null, chance:0.05 }, + "smog": { elem1:["potassium_hydroxide","pop"], elem2:["hydrogen","pop","fire"], chance:0.01, temp2:400 }, + "electric": { elem1:[null,"pop"], elem2:["pop","fire"], chance:0.05, temp2:400 }, }; +runAfterLoad(function() { + reactList("potassium", eLists.WATER, { elem1:["potassium_hydroxide","pop"], elem2:["hydrogen","pop","fire"], chance:0.01, temp2:400 }); +}); -elements.potassium = { - color: ["#8e8ba3","#8797a8","#7d6a75","#879dad"], - tick: function(pixel) { - for (var i = 0; i < adjacentCoords.length; i++) { - var x = pixel.x+adjacentCoords[i][0]; - var y = pixel.y+adjacentCoords[i][1]; - if (isEmpty(x,y)) { - if (Math.random() < 0.005) { deletePixel(pixel.x,pixel.y) } - break - } } }, - reactions: { - "chlorine": { elem1:"potassium_salt", elem2:"big_pop" }, - "water": { elem1:"big_pop" }, - "salt_water": { elem1:"big_pop" }, - "sugar_water": { elem1:"big_pop" }, - "dirty_water": { elem1:"big_pop" }, - "seltzer": { elem1:"big_pop" }, - "pool_water": { elem1:"big_pop" }, - "primordial_soup": { elem1:"big_pop" }, - "acid": { elem1:"explosion" } - }, - tempHigh: 63.5, - category: "solids", - state: "solid", - density: 890, - conduct: 0.85, - hardness: 0.04, - burn:40, - burnTime: 200, - fireColor: ["#ff00ee","#ff6bf5"] -}; -elements.molten_potassium = { - tempLow: 63.5, - tempHigh: 757.6, - burn:40, - burnTime: 200, - fireColor: ["#ff00ee","#ff6bf5"], - reactions: { - "chlorine": { elem1:"potassium_salt", elem2:"big_pop" }, - "water": { elem1:"big_pop" }, - "salt_water": { elem1:"big_pop" }, - "sugar_water": { elem1:"big_pop" }, - "dirty_water": { elem1:"big_pop" }, - "seltzer": { elem1:"big_pop" }, - "pool_water": { elem1:"big_pop" }, - "primordial_soup": { elem1:"big_pop" }, - "acid": { elem1:"explosion" } - } -}; -elements.potassium_gas = { - color: "#5e6fdb" +elements.molten_potassium.reactions = { + "chlorine": { elem1:"potassium_salt", elem2:null, chance:0.05 }, + "smog": { elem1:["potassium_hydroxide","pop"], elem2:["hydrogen","pop","fire"], chance:0.01, temp2:400 }, + "electric": { elem1:[null,"pop"], elem2:["pop","fire"], chance:0.05, temp2:400 }, }; + +runAfterLoad(function() { + reactList("molten_potassium", eLists.WATER, { elem1:["potassium_hydroxide","pop"], elem2:["hydrogen","pop","fire"], chance:0.01, temp2:400 }); +}); + elements.molten_salt = {}; elements.molten_potassium_salt = {}; @@ -2020,6 +2094,49 @@ elements.niter = { state: "solid", density: 2109, }; +createSalt("niter","niter_solution","#f0efcc",blendColors("#f0efcc","#2167ff",0.75),false,true,334,-2,102,2109,1011,"POTASSIUM","NITRATE"); +elements["niter"].stateHigh = "fire"; +elements["niter"].reactions = Object.assign(elements["niter"].reactions,{ + "plant": { "elem1":"plant", "chance":0.05 }, + "wheat_seed": { "elem1":"wheat", "chance":0.05 }, + "grass": { "elem1":"grass", "chance":0.05 }, + "grass_seed": { "elem1":"grass", "chance":0.05 }, + "bamboo_plant": { "elem1":"bamboo", "chance":0.05 }, + "flower_seed": { "elem1":"flower_seed", "chance":0.05 }, + "petal": { "elem1":"flower_seed", "chance":0.05 }, + "vine": { "elem1":"vine", "chance":0.05 }, + "sapling": { "elem1":"tree_branch", "chance":0.05 }, + "tree_branch": { "elem1":"tree_branch", "chance":0.05 }, + "corn_seed": { "elem1":"corn", "chance":0.05 }, + "root": { "elem1":"root", "chance":0.05 }, + "dirt": { "elem1":"grass", "chance":0.05 }, + "mud": { "elem1":"grass", "chance":0.05 }, + "potato_seed": { "elem1":"potato", "chance":0.05 }, + "yeast": { "elem1":"yeast", "chance":0.05 }, + "sulfur": { "elem1":"gunpowder", "elem2": null}, + }); +elements["niter_solution"].reactions = Object.assign(elements["niter_solution"].reactions,{ + "plant": { "elem1":"plant", "chance":0.05 }, + "wheat_seed": { "elem1":"wheat", "chance":0.05 }, + "grass": { "elem1":"grass", "chance":0.05 }, + "grass_seed": { "elem1":"grass", "chance":0.05 }, + "bamboo_plant": { "elem1":"bamboo", "chance":0.05 }, + "flower_seed": { "elem1":"flower_seed", "chance":0.05 }, + "petal": { "elem1":"flower_seed", "chance":0.05 }, + "vine": { "elem1":"vine", "chance":0.05 }, + "sapling": { "elem1":"tree_branch", "chance":0.05 }, + "tree_branch": { "elem1":"tree_branch", "chance":0.05 }, + "corn_seed": { "elem1":"corn", "chance":0.05 }, + "root": { "elem1":"root", "chance":0.05 }, + "dirt": { "elem1":"grass", "chance":0.05 }, + "mud": { "elem1":"grass", "chance":0.05 }, + "potato_seed": { "elem1":"potato", "chance":0.05 }, + "yeast": { "elem1":"yeast", "chance":0.05 }, + "sulfur": { "elem1":"gunpowder", "elem2": "water"}, + }); +delete elements["molten_niter"]; + + elements.potassium_salt.hidden = false; @@ -2035,6 +2152,18 @@ elements.fluorite = { } }; + +eListAddIon("CALCIUM","fluorite"); +eListAddIon("FLUORIDE","fluorite"); +eListAddIon("CALCIUM","molten_fluorite"); +eListAddIon("FLUORIDE","molten_fluorite"); +eListAdd("INSOLUBLE","fluorite"); +eListAddIon("CALCIUM","chalk"); +eListAddIon("SULFATE","chalk"); +eListAddIon("CALCIUM","molten_chalk"); +eListAddIon("SULFATE","molten_chalk"); +eListAdd("INSOLUBLE","chalk"); + elements.sulfuric_acid.ignore.push("chalk","fluorite"); elements.sulfuric_acid_gas.ignore.push("chalk","fluorite"); @@ -2067,10 +2196,10 @@ elements.liquid_sulfur_hexafluoride = { tempLow: -64 }; -createAcid("hexafluorosilicic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#ebeed8","#f9ffc2","#c7e189"],true,true,100,100,0,1000,1460,1) +createAcid("hexafluorosilicic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#ebeed8","#f9ffc2","#c7e189"],true,true,100,100,0,1000,1460,1,"HEXAFLUOROSILICATE") -trueAcids.push("hexafluorosilicic_acid"); -trueAcidGases.push("hexafluorosilicic_acid_gas"); +eLists.ACID.push("hexafluorosilicic_acid"); +eLists.ACIDGAS.push("hexafluorosilicic_acid_gas"); elements.hydrofluoric_acid.ignore.push("sand","hexafluorosilicic_acid","hexafluorosilicic_acid_gas","potassium_carbonate","potassium_fluoride","carbon_dioxide","hydrogen"); @@ -2082,36 +2211,27 @@ elements.hexafluorosilicic_acid_gas.ignore.push("sand"); acidReact("hydrofluoric_acid","sand","hexafluorosilicic_acid","fire",0); acidReact("hydrofluoric_acid_gas","sand","hexafluorosilicic_acid","fire",0); -acidReact("hydrofluoric_acid","potassium_carbonate","potassium_fluoride","carbon_dioxide",100); -acidReact("hydrofluoric_acid_gas","potassium_carbonate","potassium_fluoride","carbon_dioxide",100); -acidReact("hydrogen_fluoride","potassium_carbonate","potassium_fluoride","carbon_dioxide",100); -acidReact("liquid_hydrogen_fluoride","potassium_carbonate","potassium_fluoride","carbon_dioxide",100); -acidReact("hydrofluoric_acid","potassium_carbonate",["hydrogen","fluorine"],"potassium_fluoride",100); -acidReact("hydrofluoric_acid_gas","potassium_carbonate",["hydrogen","fluorine"],"potassium_fluoride",100); - -elements.fluorine.ignore.push("sand","potassium_fluoride","carbon_dioxide"); -elements.liquid_fluorine.ignore.push("sand","potassium_fluoride","carbon_dioxide"); - -elements.potassium_carbonate = { - color: "#e2e1e8", - behavior: behaviors.POWDER, - category: "powders", - hidden: true, - density: 2430, - state: "solid", - tempHigh: 891 -} +acidReact("hydrofluoric_acid","potassium_carbonate","potassium_fluoride_solution","carbon_dioxide",100); +acidReact("hydrofluoric_acid_gas","potassium_carbonate","potassium_fluoride_solution","carbon_dioxide",100); +acidReact("hydrogen_fluoride","potassium_carbonate","potassium_fluoride_solution","carbon_dioxide",100); +acidReact("liquid_hydrogen_fluoride","potassium_carbonate","potassium_fluoride_solution","carbon_dioxide",100); -elements.potassium_fluoride = { - color: "#e8e8e1", - behavior: behaviors.POWDER, - category: "powders", - hidden: true, - density: 2480, - state: "solid", - tempHigh: 858 -} +acidReact("hydrofluoric_acid","potassium_carbonate_solution","potassium_fluoride_solution","carbon_dioxide",100); +acidReact("hydrofluoric_acid_gas","potassium_carbonate_solution","potassium_fluoride_solution","carbon_dioxide",100); +acidReact("hydrogen_fluoride","potassium_carbonate_solution","potassium_fluoride_solution","carbon_dioxide",100); +acidReact("liquid_hydrogen_fluoride","potassium_carbonate_solution","potassium_fluoride_solution","carbon_dioxide",100); + +acidReact("hydrofluoric_acid","potassium_fluoride","fluorine","potassium_fluoride_solution",100); +acidReact("hydrofluoric_acid_gas","potassium_fluoride","fluorine","potassium_fluoride_solution",100); +acidReact("hydrofluoric_acid","potassium_fluoride","fluorine",["potassium_fluoride_solution",null],100); +acidReact("hydrofluoric_acid_gas","potassium_fluoride","fluorine",["potassium_fluoride_solution",null],100); + +elements.fluorine.ignore.push("sand","potassium_carbonate","potassium_fluoride","carbon_dioxide"); +elements.liquid_fluorine.ignore.push("sand","potassium_carbonate","potassium_fluoride","carbon_dioxide"); + +createSalt("potassium_carbonate","potassium_carbonate_solution","#e2e1e8",blendColors("#e2e1e8","#2167ff",0.75),true,true,891,-2,102,2430,1024,"POTASSIUM","CARBONATE"); +createSalt("potassium_fluoride","potassium_fluoride_solution","#e8e8e1",blendColors("#e8e8e1","#2167ff",0.75),true,true,858,-2,102,2480,1020,"POTASSIUM","FLUORIDE"); elements.soy_sauce = { @@ -2137,6 +2257,7 @@ elements.bromine = { "water": { elem1: "pool_water", elem2:null }, "dirty_water": { elem2:"water" }, "potassium": { elem1:"potassium_bromide", elem2:null }, + "sodium": { elem1:"sodium_bromide", elem2:null }, "root": { elem2:null, chance:0.025 }, "tree_branch": { elem2:"wood", chance:0.015 }, "pistil": { elem2:"dead_plant", chance:0.025 }, @@ -2165,6 +2286,7 @@ elements.bromine_gas = { "water": { elem1: "pool_water", elem2:null }, "dirty_water": { elem2:"water" }, "potassium": { elem1:"potassium_bromide", elem2:null }, + "sodium": { elem1:"sodium_bromide", elem2:null }, "root": { elem2:null, chance:0.025 }, "tree_branch": { elem2:"wood", chance:0.015 }, "pistil": { elem2:"dead_plant", chance:0.025 }, @@ -2183,32 +2305,28 @@ elements.bromine_gas = { stain: 0.5 }; - -elements.potassium_bromide = { - color: ["#fccaca","#f7cbcb"], - behavior: behaviors.POWDER, - category: "powders", - tempHigh: 734, - state: "solid", - density: 2740 -}; +createSalt("potassium_bromide","potassium_bromide_solution",["#fccaca","#f7cbcb"],blendColors("#fccaca","#2167ff",0.75),false,true,734,-2,102,2740,1050,"POTASSIUM","BROMIDE"); +createSalt("sodium_bromide","sodium_bromide_solution",["#f5f4ed","#f2f2eb"],blendColors("#f5f4ed","#2167ff",0.75),false,true,747,-2,102,3210,1040,"SODIUM","BROMIDE"); elements.silver_bromide = { color: ["#fcfcca","#f7f24f"], tick: function(pixel) { for (let i = -1; i <= 1; i++) { for (let j = -1; j <= 1; j++) { - if (!isEmpty(pixel.x+i,pixel.y+j,true) && (pixelMap[pixel.x+i][pixel.y+j].element === "light" || pixelMap[pixel.x+i][pixel.y+j].element === "liquid_light")) { + if (!isEmpty(pixel.x+i,pixel.y+j,true) && Math.random() < 0.1 && (pixelMap[pixel.x+i][pixel.y+j].element === "light" || pixelMap[pixel.x+i][pixel.y+j].element === "laser" || pixelMap[pixel.x+i][pixel.y+j].element === "liquid_light")) { - for (let k = -1; k <= 1; k++) { - for (let l = -1; l <= 1; l++) { - if(!isEmpty(pixel.x+k,pixel.y+l,true) && pixelMap[pixel.x+k][pixel.y+l].element === "silver_bromide") - { - pixelMap[pixel.x+k][pixel.y+l].color = pixelMap[pixel.x+i][pixel.y+j].color; - } - } + let coords = circleCoords(pixel.x+i,pixel.y+j,20); + for (var n = 0; n < coords.length; n++) { + k = coords[n].x; + l = coords[n].y; + distance = (k-pixel.x-i)*(k-pixel.x-i) + (l-pixel.y-j)*(l-pixel.y-j); + if(!isEmpty(k,l,true) && pixelMap[k][l].element === "silver_bromide") + { + if(distance <= 0) {console.log("a");} + pixelMap[k][l].color = pixelColorPick(pixelMap[k][l],blendColors(RGBToHex(toObject(pixelMap[k][l].color)),RGBToHex(toObject(pixelMap[pixel.x+i][pixel.y+j].color)),1/distance)); + } } - if(pixelMap[pixel.x+i][pixel.y+j].element === "light") + if(pixelMap[pixel.x+i][pixel.y+j].element === "light" || pixelMap[pixel.x+i][pixel.y+j].element === "laser") { deletePixel(pixel.x+i,pixel.y+j); } @@ -2223,34 +2341,35 @@ elements.silver_bromide = { density: 6470 }; +eListAddIon("SILVER","silver_bromide"); +eListAddIon("BROMIDE","silver_bromide"); +eListAdd("INSOLUBLE","silver_bromide"); +eListAddIon("SILVER","molten_silver_bromide"); +eListAddIon("BROMIDE","molten_silver_bromide"); -elements.nitric_acid.reactions["silver"] = { elem1: "nitrogen_dioxide", elem2: "silver_nitrate"}; -elements.nitric_acid_gas.reactions["silver"] = { elem1: "nitrogen_dioxide", elem2: "silver_nitrate"}; -elements.nitric_acid.ignore.push("silver","silver_nitrate"); -elements.nitric_acid_gas.ignore.push("silver","silver_nitrate"); -elements.silver_nitrate = { - color: ["#cad7fc","#cbd2f7"], - behavior: behaviors.POWDER, - reactions: { - "potassium_bromide": {elem1: "niter", elem2: "silver_bromide"} - }, - category: "powders", - tempHigh: 209, - state: "solid", - density: 2740, - hidden: true -}; +elements.nitric_acid.reactions["silver"] = { elem1: "nitrogen_dioxide", elem2: "silver_nitrate_solution"}; +elements.nitric_acid_gas.reactions["silver"] = { elem1: "nitrogen_dioxide", elem2: "silver_nitrate_solution"}; + +elements.nitric_acid.ignore.push("silver","silver_nitrate","silver_nitrate_solution"); +elements.nitric_acid_gas.ignore.push("silver","silver_nitrate","silver_nitrate_solution"); + elements.molten_silver_nitrate = { tempHigh: 440, - stateHigh: ["silver","nitrogen_dioxide","oxygen"], + stateHigh: ["silver","nitrogen_dioxide","oxygen","fire"], } -createAcid("hydrobromic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#ff3b3b","#ca0000","#9e7b7b"],true,true,100,100,0,1000,1100,1) +createSalt("silver_nitrate","silver_nitrate_solution",["#cad7fc","#cbd2f7"],blendColors("#cad7fc","#2167ff",0.5),true,true,209,-2,102,4350,1060,"SILVER","NITRATE"); -trueAcids.push("hydrobromic_acid"); -trueAcidGases.push("hydrobromic_acid_gas"); +elements.silver_nitrate_solution.reactions["potassium_bromide"] = { elem1: "niter_solution", elem2: "silver_bromide"}; +elements.silver_nitrate_solution.reactions["potassium_bromide_solution"] = { elem1: "niter_solution", elem2: "silver_bromide"}; + + +createAcid("hydrobromic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#ff3b3b","#ca0000","#9e7b7b"],true,true,100,100,0,1000,1100,1,"BROMIDE") + +eLists.ACID.push("hydrobromic_acid"); +eLists.ACIDGAS.push("hydrobromic_acid_gas"); acidReact("sulfuric_acid","bromine","sulfuric_acid","hydrobromic_acid",50); acidReact("sulfuric_acid","bromine_ice","sulfuric_acid","hydrobromic_acid",50); @@ -2258,8 +2377,6 @@ acidReact("sulfuric_acid","bromine_gas","sulfuric_acid","hydrobromic_acid",50); acidReact("sulfuric_acid_gas","bromine","sulfuric_acid","hydrobromic_acid",50); acidReact("sulfuric_acid_gas","bromine_ice","sulfuric_acid","hydrobromic_acid",50); acidReact("sulfuric_acid_gas","bromine_gas","sulfuric_acid","hydrobromic_acid",50); -elements.hydrobromic_acid.ignore.push("bromine","bromine_ice","bromine_gas"); -elements.hydrobromic_acid_gas.ignore.push("bromine","bromine_ice","bromine_gas"); acidReact("sulfuric_acid","potassium_salt","potassium_sulfate","acid",50); acidReact("sulfuric_acid_gas","potassium_salt","potassium_sulfate","acid",50); @@ -2268,17 +2385,9 @@ acidReact("sulfuric_acid_gas","niter","potassium_sulfate","nitric_acid",50); acidReact("sulfuric_acid","potassium_bromide","potassium_sulfate","hydrobromic_acid",50); acidReact("sulfuric_acid_gas","potassium_bromide","potassium_sulfate","hydrobromic_acid",50); -elements.acid.ignore.push("potassium_sulfate","potassium_salt"); -elements.acid_gas.ignore.push("potassium_sulfate","potassium_salt"); -elements.nitric_acid.ignore.push("potassium_sulfate","niter"); -elements.nitric_acid_gas.ignore.push("potassium_sulfate","niter"); -elements.hydrobromic_acid.ignore.push("potassium_sulfate","niter"); -elements.hydrobromic_acid_gas.ignore.push("potassium_sulfate","potassium_bromide"); -elements.potassium_sulfate = { - color: "#f0d8cc", - behavior: behaviors.POWDER, - reactions: { +createSalt("potassium_sulfate","potassium_sulfate_solution","#f0d8cc",blendColors("#f0d8cc","#2167ff",0.75),true,true,1069,-2,102,2660,1012,"POTASSIUM","SULFATE"); +elements["niter"].reactions = Object.assign(elements["potassium_sulfate"].reactions,{ "plant": { "elem1":"plant", "chance":0.05 }, "wheat_seed": { "elem1":"wheat", "chance":0.05 }, "grass": { "elem1":"grass", "chance":0.05 }, @@ -2295,49 +2404,43 @@ elements.potassium_sulfate = { "mud": { "elem1":"grass", "chance":0.05 }, "potato_seed": { "elem1":"potato", "chance":0.05 }, "yeast": { "elem1":"yeast", "chance":0.05 }, - }, - tempHigh: 1069, - category: "powders", - state: "solid", - density: 2660, - hidden: true -}; + }); +elements["niter_solution"].reactions = Object.assign(elements["potassium_sulfate_solution"].reactions,{ + "plant": { "elem1":"plant", "chance":0.05 }, + "wheat_seed": { "elem1":"wheat", "chance":0.05 }, + "grass": { "elem1":"grass", "chance":0.05 }, + "grass_seed": { "elem1":"grass", "chance":0.05 }, + "bamboo_plant": { "elem1":"bamboo", "chance":0.05 }, + "flower_seed": { "elem1":"flower_seed", "chance":0.05 }, + "petal": { "elem1":"flower_seed", "chance":0.05 }, + "vine": { "elem1":"vine", "chance":0.05 }, + "sapling": { "elem1":"tree_branch", "chance":0.05 }, + "tree_branch": { "elem1":"tree_branch", "chance":0.05 }, + "corn_seed": { "elem1":"corn", "chance":0.05 }, + "root": { "elem1":"root", "chance":0.05 }, + "dirt": { "elem1":"grass", "chance":0.05 }, + "mud": { "elem1":"grass", "chance":0.05 }, + "potato_seed": { "elem1":"potato", "chance":0.05 }, + "yeast": { "elem1":"yeast", "chance":0.05 }, + }); + +createSalt("sodium_chlorate","sodium_chlorate_solution","#cff0cc",blendColors("#cff0cc","#2167ff",0.25),true,true,255,-2,102,2490,1011,"SODIUM","CHLORATE"); +elements.sodium_chlorate.stateHigh = "fire"; +elements.sodium_chlorate_solution.reactions["gold"] = { elem1:"sodium_perchlorate_solution", charged:true, chance:0.1 }; -elements.sodium_chlorate = { - color: "#cff0cc", - behavior: behaviors.POWDER, - reactions: { - "gold": { elem1:"sodium_perchlorate", charged:true, chance:0.1 } - }, - tempHigh: 255, - stateHigh: "fire", - category: "powders", - state: "solid", - density: 2490, - hidden: true, - conduct: 0.1, -}; +elements.chlorine.reactions["bleach"] = { elem1: "sodium_chlorate_solution", elem2: null}; +delete elements["molten_sodium_chlorate"]; -elements.chlorine.reactions["bleach"] = { elem1: "sodium_chlorate", elem2: null}; +createSalt("sodium_perchlorate","sodium_perchlorate_solution","#cff0cc",blendColors("#d6f0cc","#2167ff",0.25),true,true,468,-2,102,2499,1011,"SODIUM","PERCHLORATE"); +elements.sodium_perchlorate.stateHigh = "fire"; +elements.sodium_perchlorate.reactions["acid"] = { elem1:"perchloric_acid", elem2:"salt"}; +elements.sodium_perchlorate_solution.reactions["acid"] = { elem1:"perchloric_acid", elem2:"salt_water"}; -elements.sodium_perchlorate = { - color: "#d6f0cc", - behavior: behaviors.POWDER, - reactions: { - "acid": { elem1:"perchloric_acid", elem2: "salt"} - }, - tempHigh: 468, - stateHigh: "fire", - category: "powders", - state: "solid", - density: 2499, - hidden: true -}; +elements.acid.ignore.push("salt","sodium_perchlorate","sodium_perchlorate_solution"); +elements.acid_gas.ignore.push("salt","sodium_perchlorate","sodium_perchlorate_solution"); +delete elements["molten_sodium_perchlorate"]; -elements.acid.ignore.push("salt","sodium_perchlorate"); -elements.acid_gas.ignore.push("salt","sodium_perchlorate"); - -createAcid("perchloric_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#ff963b","#ca6800","#c48a56"],true,true,100,100,0,1000,1768,1) +createAcid("perchloric_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#ff963b","#ca6800","#c48a56"],true,true,100,100,0,1000,1768,1,"PERCHLORATE") elements.perchloric_acid.tick = function(pixel) { let change = false; @@ -2354,7 +2457,7 @@ elements.perchloric_acid.tick = function(pixel) { } if (change) { if(Math.random() < 0.2) { - changePixel(pixel,"pop"); + changePixel(pixel,"big_pop"); } else { deletePixel(pixel.x,pixel.y); return; @@ -2364,7 +2467,8 @@ elements.perchloric_acid.tick = function(pixel) { } } delete elements.perchloric_acid.behavior; - +elements.perchloric_acid.burn = 0; +elements.perchloric_acid.ignore.push("fire","smoke"); elements.perchloric_acid_gas.tick = function(pixel) { let change = false; @@ -2381,7 +2485,7 @@ elements.perchloric_acid_gas.tick = function(pixel) { } if (change) { if(Math.random() < 0.2) { - changePixel(pixel,"pop"); + changePixel(pixel,"big_pop"); } else { deletePixel(pixel.x,pixel.y); return; @@ -2395,15 +2499,17 @@ elements.perchloric_acid_gas.behavior = [ "XX|XX|XX", "XX|XX|XX", ]; +elements.perchloric_acid_gas.burn = 0; +elements.perchloric_acid_gas.ignore.push("fire","smoke"); -trueAcids.push("perchloric_acid"); -trueAcidGases.push("perchloric_acid_gas"); +eLists.ACID.push("perchloric_acid"); +eLists.ACIDGAS.push("perchloric_acid_gas"); acidReact("perchloric_acid","ammonia","rocket_fuel",null,100); acidReact("perchloric_acid_gas","ammonia","rocket_fuel",null,100); -elements.perchloric_acid.ignore.push("salt","sodium_perchlorate","rocket_fuel"); -elements.perchloric_acid_gas.ignore.push("salt","sodium_perchlorate","rocket_fuel"); +elements.perchloric_acid.ignore.push("salt","sodium_perchlorate","sodium_perchlorate_solution"); +elements.perchloric_acid_gas.ignore.push("salt","sodium_perchlorate","sodium_perchlorate_solution"); elements.rocket_fuel = { color: "#edcfca", @@ -2477,6 +2583,7 @@ elements.molten_iodine = { stateLow: "iodine", state: "liquid", hidden: true, + category: "liquids", }; elements.iodine_gas = { @@ -2529,10 +2636,7 @@ elements.disinfectant = { stain: 0.01 }; -createAcid("hydroiodic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#9670ff","#da6afc","#a77af5","#9670ff","#da6afc","#a77af5","#633a1d"],true,true,100,100,0,1000,1150,1) - -trueAcids.push("hydroiodic_acid"); -trueAcidGases.push("hydroiodic_acid_gas"); +createAcid("hydroiodic_acid",structuredClone(defaultAcidReactions),structuredClone(defaultAcidGasReactions),["#9670ff","#da6afc","#a77af5","#9670ff","#da6afc","#a77af5","#633a1d"],true,true,100,100,0,1000,1150,1,"IODIDE") elements.hydrogen_iodide = { color: "#aa8df2", @@ -2557,6 +2661,10 @@ elements.hydrogen_iodide = { forceAutoGen: true }; +runAfterLoad(function() { + reactList("hydrogen_iodide", eLists.WATER, { "elem1": "hydroiodic_acid", "elem2": null }); +}); + elements.liquid_hydrogen_iodide = { reactions: { "water": { "elem1": "hydroiodic_acid", "elem2": null }, @@ -2573,16 +2681,25 @@ elements.liquid_hydrogen_iodide = { tempLow: -50.8, }; +runAfterLoad(function() { + reactList("liquid_hydrogen_iodide", eLists.WATER, { "elem1": "hydroiodic_acid", "elem2": null }); +}); + elements.hydroiodic_acid.ignore.push("hydrogen_iodide","liquid_hydrogen_iodide","hydrogen_iodide_ice"); elements.hydroiodic_acid_gas.ignore.push("hydrogen_iodide","liquid_hydrogen_iodide","hydrogen_iodide_ice"); -elements.hydroiodic_acid.reactions["water"] = { "elem1":"hydroiodic_acid", "elem2":"dirty_water"}; -elements.hydroiodic_acid.reactions["salt_water"] = { "elem1":"hydroiodic_acid", "elem2":"dirty_water"}; -elements.hydroiodic_acid.reactions["sugar_water"] = { "elem1":"hydroiodic_acid", "elem2":"dirty_water"}; -elements.hydroiodic_acid.reactions["dirty_water"] = { "elem1":"hydroiodic_acid", "elem2":"dirty_water"}; -elements.hydroiodic_acid.reactions["seltzer"] = { "elem1":"hydroiodic_acid", "elem2":"dirty_water"}; -elements.hydroiodic_acid.reactions["pool_water"] = { "elem1":"hydroiodic_acid", "elem2":"dirty_water"}; -elements.hydroiodic_acid.reactions["primordial_soup"] = { "elem1":"hydroiodic_acid", "elem2":"dirty_water"}; + +eListAddIon("HYDROGEN","hydrogen_iodide"); +eListAddIon("IODIDE","hydrogen_iodide"); +eListAddIon("HYDROGEN","liquid_hydrogen_iodide"); +eListAddIon("IODIDE","liquid_hydrogen_iodide"); +eListAddIon("HYDROGEN","hydroiodic_acid"); +eListAddIon("IODIDE","hydroiodic_acid"); +eListAddIon("HYDROGEN","hydroiodic_acid_gas"); +eListAddIon("IODIDE","hydroiodic_acid_gas"); +runAfterLoad(function() { + reactList("hydroiodic_acid", eLists.WATER, { "elem2":"dirty_water"}); +}); @@ -2595,21 +2712,6 @@ elements.bauxite = { tempHigh: 300 }; -elements.sodium_aluminate_solution = { - color: ["#bdb3e6","#b4adeb"], - behavior: behaviors.LIQUID, - category: "liquids", - hidden: true, - density: 1005, - state: "liquid", - tempHigh: 100, - stateHigh: ["sodium_aluminate","steam"], - reactions: { - //Bayer process - "carbon_dioxide": { elem1:"aluminum_hydroxide", elem2: ["sodium_carbonate_solution","spent_sodium_aluminate_solution"] }, - }, -}; - elements.spent_sodium_aluminate_solution = { color: ["#696380","#7a759e"], @@ -2622,44 +2724,15 @@ elements.spent_sodium_aluminate_solution = { stateHigh: ["sodium_aluminate","sodium_aluminate","sodium_aluminate","gallium","steam","steam","steam","steam"], }; - -elements.sodium_aluminate = { - color: ["#e6c9b3","#ebc8ad"], - behavior: behaviors.POWDER, - category: "powders", - hidden: true, - density: 1500, - state: "solid", - tempHigh: 1650, - reactions: { - "water": { elem1: "sodium_aluminate_solution", elem2: null }, - }, -}; - -elements.sodium_carbonate_solution = { - color: ["#c5c1d6","#afacc2"], - behavior: behaviors.LIQUID, - category: "liquids", - hidden: true, - density: 1005, - state: "liquid", - tempHigh: 100, - stateHigh: ["sodium_carbonate","steam"], -}; +createSalt("sodium_aluminate","sodium_aluminate_solution",["#e6c9b3","#ebc8ad"],["#bdb3e6","#b4adeb"],true,true,1650,-2,102,1500,1005,"SODIUM","ALUMINATE"); +elements.sodium_aluminate_solution.reactions["carbon_dioxide"] = { elem1:"aluminum_hydroxide", elem2: ["sodium_carbonate_solution","spent_sodium_aluminate_solution"] }; -elements.sodium_carbonate = { - color: "#d8dae6", - behavior: behaviors.POWDER, - category: "powders", - hidden: false, - density: 2540, - state: "solid", - tempHigh: 851, - reactions: { - "water": { elem1: "sodium_carbonate_solution", elem2: null }, - }, -} +createSalt("sodium_carbonate","sodium_carbonate_solution","#d8dae6",["#c5c1d6","#afacc2"],true,true,851,-2,102,2540,1010,"SODIUM","CARBONATE"); +createSalt("ammonium_chloride","ammonium_chloride_solution","#daeced",["#a299c7","#7e76b3"],true,true,338 ,-2,102,1519,1008,"AMMONIUM","CHLORIDE"); +elements["ammonium_chloride"].stateHigh = ["ammonia", "acid_gas"]; +delete elements["molten_ammonium_chloride"]; +acidReact("acid_gas","ammonia","ammonium_chloride",null,0); elements.aluminum_hydroxide = { @@ -2673,6 +2746,11 @@ elements.aluminum_hydroxide = { stateHigh: ["alumina","steam"], } + +eListAddIon("ALUMINUM","aluminum_hydroxide"); +eListAddIon("HYDROXIDE","aluminum_hydroxide"); +eListAdd("INSOLUBLE","aluminum_hydroxide"); + elements.alumina = { color: "#d1cbcb", behavior: behaviors.SOLID, @@ -2685,6 +2763,14 @@ elements.alumina = { }, } +eListAddIon("ALUMINUM","alumina"); +eListAddIon("OXIDE","alumina"); +eListAdd("INSOLUBLE","alumina"); + +eListAddIon("ALUMINUM","molten_alumina"); +eListAddIon("OXIDE","molten_alumina"); + + elements.cryolite = { @@ -2699,6 +2785,13 @@ elements.cryolite = { }, } +eListAddIon("SODIUM","cryolite"); +eListAddIon("HEXAFLUOROALUMINATE","cryolite"); +eListAdd("INSOLUBLE","cryolite"); + +eListAddIon("SODIUM","molten_cryolite"); +eListAddIon("HEXAFLUOROALUMINATE","molten_cryolite"); + elements.aluminum_trifluoride = { color: ["#ebf4ff","#e3fdff"], @@ -2710,6 +2803,14 @@ elements.aluminum_trifluoride = { tempHigh: 1290, } +eListAddIon("ALUMINUM","aluminum_trifluoride"); +eListAddIon("FLUORIDE","aluminum_trifluoride"); +eListAdd("INSOLUBLE","aluminum_trifluoride"); + +eListAddIon("ALUMINUM","aluminum_trifluoride_gas"); +eListAddIon("FLUORIDE","aluminum_trifluoride_gas"); + + elements.molten_aluminum_trifluoride = { tempHigh: 1290, @@ -2718,6 +2819,8 @@ elements.molten_aluminum_trifluoride = { elements.aluminum_trifluoride_gas = { tempLow: 1290, + state: "gas", + stateLow: "molten_aluminum_trifluoride" } @@ -2743,15 +2846,35 @@ elements.cryolite_solution = { tempHigh: 950, } -elements.sodium_fluoride = { - color: ["#8aebce","#b9edde"], + +createSalt("sodium_fluoride","sodium_fluoride_solution",["#8aebce","#b9edde"],["#8ad0eb","#b9e3ed"],false,true,993,-2,102,2558,1012,"SODIUM","FLUORIDE"); + +elements.magnesium_fluoride = { + color: ["#aaabae","#a9adae"], behavior: behaviors.POWDER, category: "powders", - density: 2558, + density: 3148, state: "solid", - tempHigh: 993, -} + tempHigh: 1263, + reactions: { + "sulfuric_acid": { "elem1": "hydrogen_fluoride", "elem2":"epsom_salt" }, + }, + hidden: true +}; +eListAddIon("MAGNESIUM","magnesium_fluoride"); +eListAddIon("FLUORIDE","magnesium_fluoride"); +eListAdd("INSOLUBLE","magnesium_fluoride"); + +eListAddIon("MAGNESIUM","molten_magnesium_fluoride"); +eListAddIon("FLUORIDE","molten_magnesium_fluoride"); + + +elements.sulfuric_acid.ignore.push("epsom_salt","magnesium_fluoride"); +elements.sulfuric_acid_gas.ignore.push("epsom_salt","magnesium_fluoride"); + +elements.hydrogen_fluoride.ignore.push("epsom_salt","magnesium_fluoride"); +elements.liquid_hydrogen_fluoride.ignore.push("epsom_salt","magnesium_fluoride"); //boron @@ -2768,31 +2891,47 @@ elements.boric_acid = { reactions: { "hydrofluoric_acid": { elem1: "fluoroboric_acid", elem2: "dirty_water"}, "hydrofluoric_acid_gas": { elem1: "fluoroboric_acid_gas", elem2: "steam"}, + "neutron": {elem2: null} }, } acidReact("hydrofluoric_acid","boric_acid","fluoroboric_acid","dirty_water",50); acidReact("hydrofluoric_acid_gas","boric_acid","fluoroboric_acid_gas","steam",50); -elements.hydrofluoric_acid.ignore.push("boric_acid","molten_boric_acid"); -elements.hydrofluoric_acid_gas.ignore.push("boric_acid","molten_boric_acid"); +elements.hydrofluoric_acid.ignore.push("molten_boric_acid"); +elements.hydrofluoric_acid_gas.ignore.push("molten_boric_acid"); elements.borax.hidden = false; -acidReact("sulfuric_acid","salt","acid","sodium_sulfate"); -acidReact("sulfuric_acid_gas","salt","acid","sodium_sulfate"); -elements.acid.ignore.push("sodium_sulfate"); -elements.acid_gas.ignore.push("sodium_sulfate"); +createSalt("sodium_sulfate","sodium_sulfate_solution","#f3f2f5",blendColors("#f3f2f5","#2167ff",0.5),true,true,884,-2,102,2664,1013,"SODIUM","SULFATE"); + +acidReact("sulfuric_acid","salt","acid","sodium_sulfate_solution"); +acidReact("sulfuric_acid_gas","salt","acid","sodium_sulfate_solution"); +acidReact("sulfuric_acid","salt_water","acid","sodium_sulfate_solution"); +acidReact("sulfuric_acid_gas","salt_water","acid","sodium_sulfate_solution"); + +eListAddIon("BORON","boric_acid","base"); +eListAddIon("HYDROXIDE","boric_acid","base"); +eListAddIon("BORATE","boric_acid","acid"); +eListAddIon("HYDROGEN","boric_acid","acid"); +eListAdd("INSOLUBLE","boric_acid"); + +eListAddIon("BORON","molten_boric_acid","base"); +eListAddIon("HYDROXIDE","molten_boric_acid","base"); +eListAddIon("BORATE","molten_boric_acid","acid"); +eListAddIon("HYDROGEN","molten_boric_acid","acid"); + +eListAdd("AMPHOTERIC","boric_acid"); +eListAdd("AMPHOTERIC","molten_boric_acid"); + + +eListAddIon("BORATE","borax"); +eListAddIon("SODIUM","borax"); +eListAdd("INSOLUBLE","borax"); + +eListAddIon("BORATE","molten_borax"); +eListAddIon("SODIUM","molten_borax"); -elements.sodium_sulfate = { - color: "#f3f2f5", - behavior: behaviors.POWDER, - category: "powders", - density: 2664, - state: "solid", - hidden: true, - tempHigh: 884, -} elements.boron = { @@ -2826,6 +2965,14 @@ elements.boron_trioxide = { fireColor:["#34eb67","#5ceb34"], } +eListAddIon("BORON","boron_trioxide"); +eListAddIon("OXIDE","boron_trioxide"); +eListAdd("INSOLUBLE","boron_trioxide"); + +eListAddIon("BORON","molten_boron_trioxide"); +eListAddIon("OXIDE","molten_boron_trioxide"); + + elements.molten_boron_trioxide = { reactions: { @@ -2851,21 +2998,27 @@ elements.boron_trifluoride = { hidden: true, tempLow: -100.3, reactions: { - "water": { elem1: "fluoroboric_acid", elem2: "boric_acid"}, - "dirty_water": { elem1: "fluoroboric_acid", elem2: "boric_acid"}, - "salt_water": { elem1: "fluoroboric_acid", elem2: "boric_acid"}, - "sugar_water": { elem1: "fluoroboric_acid", elem2: "boric_acid"}, "steam": { elem1: "fluoroboric_acid_gas", elem2: "boric_acid"}, - "seltzer": { elem1: "fluoroboric_acid", elem2: "boric_acid"}, - "pool_water": { elem1: "fluoroboric_acid", elem2: "boric_acid"}, - "primordial_soup": { elem1: "fluoroboric_acid", elem2: "boric_acid"}, }, } +eListAddIon("BORON","boron_trifluoride"); +eListAddIon("FLUORIDE","boron_trifluoride"); +eListAdd("INSOLUBLE","boron_trifluoride"); + +runAfterLoad(function() { + reactList("boron_trifluoride", eLists.WATER, { elem1: "fluoroboric_acid", elem2: "boric_acid"}); +}); + + elements.liquid_boron_trifluoride = { tempLow: -126.8, } +eListAddIon("BORON","liquid_boron_trifluoride"); +eListAddIon("FLUORIDE","liquid_boron_trifluoride"); +eListAddIon("BORON","boron_trifluoride_ice"); +eListAddIon("FLUORIDE","boron_trifluoride_ice"); elements.boron_trichloride = { color: "#ddf0dd", @@ -2876,38 +3029,38 @@ elements.boron_trichloride = { hidden: true, tempLow: 12.6, reactions: { - "water": { elem1: "acid", elem2: "boric_acid"}, - "dirty_water": { elem1: "acid", elem2: "boric_acid"}, - "salt_water": { elem1: "acid", elem2: "boric_acid"}, - "sugar_water": { elem1: "acid", elem2: "boric_acid"}, "steam": { elem1: "acid_gas", elem2: "boric_acid"}, - "seltzer": { elem1: "acid", elem2: "boric_acid"}, - "pool_water": { elem1: "acid", elem2: "boric_acid"}, - "primordial_soup": { elem1: "acid", elem2: "boric_acid"}, "hydrogen": { elem1: "boron", elem2: "acid_gas"}, }, } +eListAddIon("BORON","boron_trichloride"); +eListAddIon("CHLORIDE","boron_trichloride"); +eListAddIon("BORON","liquid_boron_trichloride"); +eListAddIon("CHLORIDE","liquid_boron_trichloride"); +eListAddIon("BORON","boron_trichloride_ice"); +eListAddIon("CHLORIDE","boron_trichloride_ice"); +eListAdd("INSOLUBLE","boron_trichloride"); + + +runAfterLoad(function() { + reactList("boron_trichloride", eLists.WATER, { elem1: "acid", elem2: "boric_acid"}); +}); + elements.liquid_boron_trichloride = { tempLow: -107.3, } -createAcid("fluoroboric_acid",{ - "water": { "elem2": "dirty_water" }, - "salt_water": { "elem2": "dirty_water" }, - "sugar_water": { "elem2": "dirty_water" }, - "seltzer": { "elem2": "dirty_water" }, - "pool_water": { "elem2": "dirty_water" }, - "primordial_soup": { "elem2": "dirty_water" }, - },{ - "water": { "elem2": "dirty_water" }, - "salt_water": { "elem2": "dirty_water" }, - "sugar_water": { "elem2": "dirty_water" }, - "seltzer": { "elem2": "dirty_water" }, - "pool_water": { "elem2": "dirty_water" }, - "primordial_soup": { "elem2": "dirty_water" }, - },["#3bffdb","#00caaf","#56c4a3"],true,true,100,100,0,1000,1020,1) +runAfterLoad(function() { + reactList("fluoroboric_acid", eLists.WATER, { "elem2": "dirty_water" }); +}); + +runAfterLoad(function() { + reactList("fluoroboric_acid_gas", eLists.WATER, { "elem2": "dirty_water" }); +}); + +createAcid("fluoroboric_acid",{},{},["#3bffdb","#00caaf","#56c4a3"],true,true,100,100,0,1000,1020,1,"TETRAFLUOROBORATE") elements.fluoroboric_acid.ignore.push("boron_trifluoride","liquid_boron_trifluoride","boron_trifluoride_ice"); elements.fluoroboric_acid_gas.ignore.push("boron_trifluoride","liquid_boron_trifluoride","boron_trifluoride_ice"); @@ -2972,9 +3125,11 @@ elements.fluoroboric_acid_gas.behavior = [ "XX|XX|XX", ]; +elements.fluoroboric_acid.ignore.push("molten_boric_acid"); +elements.fluoroboric_acid_gas.ignore.push("molten_boric_acid"); -trueAcids.push("fluoroboric_acid"); -trueAcidGases.push("fluoroboric_acid_gas"); +eLists.ACID.push("fluoroboric_acid"); +eLists.ACIDGAS.push("fluoroboric_acid_gas"); acidReact("fluoroboric_acid","sodium_carbonate","sodium_tetrafluoroborate",["carbon_dioxide,steam"],50); acidReact("fluoroboric_acid_gas","sodium_carbonate","sodium_tetrafluoroborate",["carbon_dioxide,steam"],50); @@ -3001,13 +3156,6 @@ elements.sodium_hydride = { reactions: { "chlorine": { elem1:"salt", elem2:"acid_gas" }, "vinegar": { elem1:"sodium_acetate", elem2:null, attr1:{"foam":15} }, - "water": { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 }, - "salt_water": { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 }, - "sugar_water": { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 }, - "dirty_water": { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 }, - "seltzer": { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 }, - "pool_water": { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 }, - "primordial_soup": { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 } }, category: "powders", state: "solid", @@ -3017,9 +3165,17 @@ elements.sodium_hydride = { burnTime:120, }; +eListAddIon("SODIUM","sodium_hydride","base"); +eListAddIon("HYDRIDE","sodium_hydride","base"); +eListAdd("INSOLUBLE","sodium_hydride"); -acids.push(elements.sodium_hydride); -elements.sodium_hydride.ignore = defaultAcidIgnore.concat(ignoreAcid); + +runAfterLoad(function() { + reactList("sodium_hydride", eLists.WATER, { elem1:["pop","pop","hydrogen","hydrogen"], chance:0.1, temp2:250 }); +}); + +eLists.CAUSTIC.push("sodium_hydride"); +elements.sodium_hydride.ignore = defaultAcidIgnore.concat(eLists.CAUSTICIGNORE); acidIgnore(["sodium_hydride"]); elements.molten_sodium.reactions.hydrogen = { elem1: "sodium_hydride", elem2: null}; @@ -3050,16 +3206,29 @@ elements.sodium_methoxide = { } }; +eListAddIon("SODIUM","sodium_methoxide","base"); +eListAddIon("METHOXIDE","sodium_methoxide","base"); +eListAdd("INSOLUBLE","sodium_methoxide"); +eListAddIon("SODIUM","molten_sodium_methoxide","base"); +eListAddIon("METHOXIDE","molten_sodium_methoxide","base"); + + + +runAfterLoad(function() { + reactList("sodium_methoxide", eLists.WATER, { elem1:"methanol", elem2:"sodium_hydroxide" }); +}); + + elements.molten_sodium_methoxide = { behavior: behaviors.MOLTEN_CAUSTIC, tempLow: 127, } -acids.push(elements.sodium_methoxide); -acids.push(elements.molten_sodium_methoxide); -elements.sodium_methoxide.ignore = defaultAcidIgnore.concat(ignoreAcid).concat(["sodium","molten_sodium","hydrogen","methanol","methanol_gas","trimethyl_borate"]); -elements.molten_sodium_methoxide.ignore = defaultAcidGasIgnore.concat(ignoreAcid).concat(["sodium","molten_sodium","hydrogen","methanol","methanol_gas","trimethyl_borate"]); +eLists.CAUSTIC.push("sodium_methoxide"); +eLists.CAUSTIC.push("molten_sodium_methoxide"); +elements.sodium_methoxide.ignore = defaultAcidIgnore.concat(eLists.CAUSTICIGNORE).concat(["sodium","molten_sodium","hydrogen","methanol","methanol_gas","trimethyl_borate"]); +elements.molten_sodium_methoxide.ignore = defaultAcidGasIgnore.concat(eLists.CAUSTICIGNORE).concat(["sodium","molten_sodium","hydrogen","methanol","methanol_gas","trimethyl_borate"]); acidIgnore(["sodium_methoxide","molten_sodium_methoxide"]); @@ -3084,38 +3253,37 @@ elements.trimethyl_borate = { fireColor:["#34eb67","#5ceb34"], }; -elements.sodium_borohydride = { - color: ["#d3d3de","#c7c7eb","#ededfc","#d9d9d9"], - tempHigh: 400, - behavior: behaviors.CAUSTIC, - fireColor:["#34eb67","#5ceb34"], - category: "powders", - state: "solid", - density: 1070, - stateHigh: ["sodium_hydride","sodium","boron"], - reactions: {}, -}; +createSalt("sodium_borohydride","sodium_borohydride_solution",["#d3d3de","#c7c7eb","#ededfc","#d9d9d9"],["#ababc7","#9d9dd1","#bdbddb","#a8a8a8"],false,true,400,-2,102,1070,1005,"SODIUM","BOROHYDRIDE"); -acids.push(elements.sodium_borohydride); -elements.sodium_borohydride.ignore = defaultAcidIgnore.concat(ignoreAcid).concat(["sodium","molten_sodium","hydrogen","boron","trimethyl_borate"]); -acidIgnore(["sodium_borohydride"]); +elements.sodium_borohydride.behavior = behaviors.CAUSTIC; +elements.sodium_borohydride_solution.behavior = [ + "XX|DB%5|XX", + "DB%5 AND M2|XX|DB%5 AND M2", + "DB%5 AND M2|DB%10 AND M1|DB%5 AND M2", + ]; +elements.sodium_borohydride.fireColor = ["#34eb67","#5ceb34"]; +elements.sodium_borohydride_solution.fireColor = ["#34eb67","#5ceb34"]; +elements.sodium_borohydride.stateHigh = ["sodium_hydride","sodium","boron"]; + +delete elements["molten_sodium_borohydride"]; + +eLists.CAUSTIC.push("sodium_borohydride"); +eLists.CAUSTIC.push("sodium_borohydride_solution"); +elements.sodium_borohydride.ignore = defaultAcidIgnore.concat(eLists.CAUSTICIGNORE).concat(["sodium","molten_sodium","hydrogen","boron","trimethyl_borate"]); +elements.sodium_borohydride_solution.ignore = defaultAcidIgnore.concat(eLists.CAUSTICIGNORE).concat(["sodium","molten_sodium","hydrogen","boron","trimethyl_borate"]); +acidIgnore(["sodium_borohydride","sodium_borohydride_solution"]); elements.sodium_hydride.ignore.push(["sodium","molten_sodium","hydrogen","boron"]); -elements.sodium_tetrafluoroborate = { - color: ["#deded3","#ebebc7","#fcfced","#d9d9d9"], - tempHigh: 384, - behavior: behaviors.POWDER, - fireColor:["#34eb67","#5ceb34"], - category: "powders", - state: "solid", - hidden: true, - density: 2470, - stateHigh: ["sodium_fluoride","boron_trifluoride"], -}; +createSalt("sodium_tetrafluoroborate","sodium_tetrafluoroborate_solution",["#deded3","#ebebc7","#fcfced","#d9d9d9"],["#ababb7","#9d9dc1","#bdbdcb","#a8a898"],true,true,384,-2,102,2470,1012,"SODIUM","TETRAFLUOROBORATE"); -elements.fluoroboric_acid.ignore.push("sodium_tetrafluoroborate"); -elements.fluoroboric_acid_gas.ignore.push("sodium_tetrafluoroborate"); +elements.sodium_tetrafluoroborate.stateHigh = ["sodium_fluoride","boron_trifluoride"]; +elements.sodium_tetrafluoroborate.fireColor = ["#34eb67","#5ceb34"]; + +delete elements["molten_sodium_tetrafluoroborate"]; + +elements.fluoroboric_acid.ignore.push("sodium_tetrafluoroborate","sodium_tetrafluoroborate_solution"); +elements.fluoroboric_acid_gas.ignore.push("sodium_tetrafluoroborate","sodium_tetrafluoroborate_solution"); acidReact("sodium_hydride","boron_trifluoride","diborane","sodium_tetrafluoroborate",20); acidReact("sulfuric_acid","sodium_borohydride","diborane","hydrogen",50); @@ -3147,6 +3315,12 @@ elements.diborane = { stateHigh: ["pentaborane","pentaborane","decaborane"], }; + + +runAfterLoad(function() { + reactList("diborane", eLists.WATER, { elem1:"boric_acid", elem2:"hydrogen", temp1:100}); +}); + elements.liquid_diborane = { tempLow: -164, } @@ -3168,15 +3342,11 @@ elements.decaborane = { burnInto:"boron_trioxide", reactions:{ "oxygen": { elem1:"boron_trioxide", elem2:"fire" }, - "water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "salt_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "sugar_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "dirty_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "seltzer": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "pool_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "primordial_soup": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, } }; +runAfterLoad(function() { + reactList("decaborane", eLists.WATER, { elem1:"boric_acid", elem2:"hydrogen", temp1:100}); +}); elements.molten_decaborane = { behavior: behaviors.LIQUID, @@ -3186,20 +3356,18 @@ elements.molten_decaborane = { burnInto:"boron_trioxide", reactions:{ "oxygen": { elem1:"boron_trioxide", elem2:"fire" }, - "water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "salt_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "sugar_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "dirty_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "seltzer": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "pool_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, - "primordial_soup": { elem1:"boric_acid", elem2:"hydrogen", temp1:100}, }, fireColor:["#34eb67","#5ceb34"], category: "liquids", state: "liquid", hidden: true, + density: 900, } +runAfterLoad(function() { + reactList("molten_decaborane", eLists.WATER, { elem1:"boric_acid", elem2:"hydrogen", temp1:100}); +}); + elements.pentaborane = { @@ -3217,16 +3385,13 @@ elements.pentaborane = { burnInto:"explosion", reactions:{ "oxygen": { elem1:"boron_trioxide", elem2:"explosion" }, - "water": { elem1:"boric_acid", elem2:"hydrogen", temp1:200}, - "salt_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:200}, - "sugar_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:200}, - "dirty_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:200}, - "seltzer": { elem1:"boric_acid", elem2:"hydrogen", temp1:200}, - "pool_water": { elem1:"boric_acid", elem2:"hydrogen", temp1:200}, - "primordial_soup": { elem1:"boric_acid", elem2:"hydrogen", temp1:200}, } }; +runAfterLoad(function() { + reactList("pentaborane", eLists.WATER, { elem1:"boric_acid", elem2:"hydrogen", temp1:100}); +}); + elements.pentaborane_gas = { tempHigh: 250, stateHigh: "decaborane", @@ -3253,6 +3418,11 @@ elements.sodium_octahydrotriborate = { stateHigh: "sodium_dodecaborate" }; +eListAddIon("SODIUM","sodium_octahydrotriborate"); +eListAddIon("OCTAHYDROTRIBORATE","sodium_octahydrotriborate"); +eListAdd("INSOLUBLE","sodium_octahydrotriborate"); + + elements.sodium_dodecaborate = { color: "#f5aef5", tempHigh: 700, //see above comment @@ -3267,6 +3437,12 @@ elements.sodium_dodecaborate = { burnInto: "boron_trioxide", }; +eListAddIon("SODIUM","sodium_dodecaborate"); +eListAddIon("DODECABORATE","sodium_dodecaborate"); +eListAdd("INSOLUBLE","sodium_dodecaborate"); +eListAddIon("SODIUM","molten_sodium_dodecaborate"); +eListAddIon("DODECABORATE","molten_sodium_dodecaborate"); + @@ -3286,7 +3462,1958 @@ elements.sodium_bromoheptahydrotriborate = { }; +eListAddIon("SODIUM","sodium_bromoheptahydrotriborate"); +eListAddIon("BROMOHEPTAHYDROTRIBORATE","sodium_bromoheptahydrotriborate"); +eListAdd("INSOLUBLE","sodium_bromoheptahydrotriborate"); +//elements.indium = { +// +//} + +//quit snooping around + + + +elements.uraninite = { + color: ["#545323","#50573b","#656660","#4d4933","#615e4a","#525043"], + behavior: [ + "XX|CR:radiation%0.05|XX", + "CR:radiation%0.05|XX|CR:radiation%0.05", + "M2|M1|M2", + ], + tempHigh: 2865, + category: "land", + state: "solid", + density: 10970 +} + + +elements.yellowcake = { + color: ["#dbd827","#bce346","#a8c418","#d9bb1a","#dec418","#cfb615"], + behavior: [ + "XX|CR:radiation%0.05|XX", + "CR:radiation%0.05|XX|CR:radiation%0.05", + "M2|M1|M2", + ], + tempHigh: 1150, + category: "powders", + hidden: true, + state: "solid", + density: 8300, + reactions: { + "hydrogen": { elem1:["uranium_dioxide","uranium_dioxide","uranium_dioxide","uranium_dioxide","thorium_dioxide"], elem2:"steam" }, + } +} + +elements.yellowcake_solution = { + color: "#d2ed6f", + ignore: elements.sulfuric_acid.ignore.concat(eLists.CAUSTICIGNORE).concat(["radiation","yellowcake","uraninite"]), + behavior: [ + "XX|DB%5 AND CR:radiation%0.05|XX", + "DB%5 AND M2 AND CR:radiation%0.05|XX|DB%5 AND M2 AND CR:radiation%0.05", + "DB%5 AND M2|DB%10 AND M1|DB%5 AND M2", + ], + tempHigh: 337, + category: "liquids", + stateHigh: ["sulfuric_acid_gas","yellowcake"], + state: "liquid", + hidden: true, + density: 1850, + reactions: {} +} + + +acidIgnore(["yellowcake_solution"]); +eLists.CAUSTIC.push("yellowcake_solution"); +eLists.ACID.push("yellowcake_solution"); + +acidReact("sulfuric_acid","uraninite","yellowcake_solution",null,50); +acidReact("sulfuric_acid_gas","uraninite","yellowcake","sulfuric_acid_gas",50); +acidReact("sulfuric_acid","yellowcake","yellowcake_solution","yellowcake_solution",50); + + +elements.alpha_particle = { + color: "#ff7878", + behavior: [ + "XX|XX|XX", + "XX|CH:helium%0.01 AND DL%0.25|XX", + "XX|XX|XX", + ], + reactions: { + "electric": { elem1:null, elem2:"helium", temp2:200 } + }, + tick: behaviors.BOUNCY, + temp: 35, + category: "energy", + state: "gas", + density: 0.00012, + ignoreAir: true +} + +elements.depleted_uranium = { + color: ["#599e61","#364d3c","#494d4a","#6c8a42","#798d65","#b5e089"], + behavior: [ + "XX|CR:alpha_particle%0.01|XX", + "CR:alpha_particle%0.01|CH:thorium%0.001|CR:alpha_particle%0.01", + "M2|M1|M2", + ], + reactions: { + "neutron": { elem2: null, func: depleted_uranium}, + "oxygen": { elem1:"depleted_uranium_dioxide", elem2: null, chance:0.1}, + "meat": { elem2:"rotten_meat", chance:0.1 }, + "cheese": { elem2:"rotten_cheese", chance:0.1 }, + "quark_matter": {elem1: "stable_uranium"} + }, + tempHigh: 1132.2, + category: "powders", + hidden: true, + state: "solid", + density: 19100, + hardness: 0.6, + conduct: 0.235 +} + +runAfterLoad(function() { + reactList("depleted_uranium", eLists.WATER, { elem2: "dirty_water", chance:0.25 }); +}); + + + +elements.molten_depleted_uranium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:alpha_particle%0.01|XX", + "M2 AND CR:alpha_particle%0.01|XX|M2 AND CR:alpha_particle%0.01", + "M1|M1|M1", + ], + reactions: { + "neutron": { elem2: null, func:depleted_uranium}, + "quark_matter": {elem1: "stable_uranium"} + } +} + +elements.enriched_uranium = { + color: ["#599e61","#364d3c","#494d4a","#6c8a42","#798d65","#b5e089"], + behavior: [ + "XX|CR:radiation%2.5 AND CR:alpha_particle%0.1|XX", + "CR:radiation%2.5 AND CR:alpha_particle%0.1|CH:thorium%0.05 AND CH:protactinium%0.01|CR:radiation%2.5 AND CR:alpha_particle%0.1", + "M2|M1|M2", + ], + reactions: { + "neutron": { func:enriched_uranium, temp1: 150}, + "oxygen": { elem1:"enriched_uranium_dioxide", elem2: null, chance:0.1}, + "meat": { elem2:"rotten_meat", chance:0.1 }, + "cheese": { elem2:"rotten_cheese", chance:0.1 }, + "quark_matter": {elem1: "stable_uranium"} + }, + tempHigh: 1132.2, + category: "powders", + hidden: true, + state: "solid", + density: 19100, + hardness: 0.6, + conduct: 0.235, + excludeRandom: true +} + +runAfterLoad(function() { + reactList("enriched_uranium", eLists.WATER, { elem2: "dirty_water", chance:0.25 }); +}); + +runAfterLoad(function() { + reactList("uranium", eLists.WATER, { elem2: "dirty_water", chance:0.25 }); +}); + + + +elements.molten_enriched_uranium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:radiation%2.5 AND CR:alpha_particle%0.1|XX", + "M2 AND CR:radiation%2.5 AND CR:alpha_particle%0.1|XX|M2 AND CR:radiation%2.5 AND CR:alpha_particle%0.1", + "M1|M1|M1", + ], + reactions: { + "neutron": { func: enriched_uranium, temp1: 150}, + "quark_matter": {elem1: "stable_uranium"} + } +} +function enriched_uranium(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + } + if(Math.random() < 0.1) + { + changePixel(pixel, "neptunium"); + } + elementCircle(p.x,p.y,2,"neutron"); +} + + +function depleted_uranium(pixel,p) { + if(Math.random() < 0.1) + { + changePixel(pixel, "plutonium"); + } +} + + +elements.stable_uranium = { + color: [blendColors("#599e61","#ff0000"),blendColors("#364d3c","#00ff00"),blendColors("#494d4a","#0000ff"),blendColors("#6c8a42","#ff0000"),blendColors("#798d65","#00ff00"),blendColors("#b5e089","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "oxygen": { elem1:"stable_uranium_dioxide", elem2: null, chance:0.1}, + "meat": { elem2:"rotten_meat", chance:0.1 }, + "cheese": { elem2:"rotten_cheese", chance:0.1 }, + "water": { elem2: "dirty_water", chance:0.25 } + }, + tempHigh: 1132.2, + category: "powders", + hidden: true, + state: "solid", + density: 19100, + hardness: 0.6, + conduct: 0.235, +}; +runAfterLoad(function() { + reactList("stable_uranium", eLists.WATER, { elem2: "dirty_water", chance:0.25 }); +}); + +elements.uranium.reactions["oxygen"] = { elem1:"uranium_dioxide", elem2: null, chance:0.1}; +elements.uranium.reactions["quark_matter"] = { elem1:"stable_uranium"}; +elements.uranium.behavior = [ + "XX|CR:radiation%1 AND CR:alpha_particle%0.01|XX", + "CR:radiation%1 AND CR:alpha_particle%0.01|CH:thorium%0.001|CR:radiation%1 AND CR:alpha_particle%0.01", + "M2|M1|M2", + ]; +elements.molten_uranium.behavior = [ + "XX|CR:fire%2.5 AND CR:radiation%1 AND CR:alpha_particle%0.01|XX", + "M2 AND CR:radiation%1 AND CR:alpha_particle%0.01|XX|M2 AND CR:radiation%1 AND CR:alpha_particle%0.01", + "M1|M1|M1", + ]; +elements.molten_uranium.reactions["quark_matter"] = { elem1:"stable_uranium"}; + + +eListAddIon("URANIUMIV","uranium_dioxide"); +eListAddIon("OXIDE","uranium_dioxide"); +eListAdd("INSOLUBLE","uranium_dioxide"); +eListAddIon("ENRICHEDURANIUMIV","enriched_uranium_dioxide"); +eListAddIon("OXIDE","enriched_uranium_dioxide"); +eListAdd("INSOLUBLE","enriched_uranium_dioxide"); +eListAddIon("DEPLETEDURANIUMIV","depleted_uranium_dioxide"); +eListAddIon("OXIDE","depleted_uranium_dioxide"); +eListAdd("INSOLUBLE","depleted_uranium_dioxide"); +eListAddIon("STABLEURANIUMIV","stable_uranium_dioxide"); +eListAddIon("OXIDE","stable_uranium_dioxide"); +eListAdd("INSOLUBLE","stable_uranium_dioxide"); + +elements.uranium_dioxide = { + color: ["#474744","#21211f","#2b2b2b","#9c998c","#40403f","#24231d"], + behavior: [ + "XX|CR:radiation%0.05|XX", + "CR:radiation%0.05|XX|CR:radiation%0.05", + "M2|M1|M2", + ], + reactions: { + "neutron": { temp1: 25}, + }, + tempHigh: 2865, + category: "powders", + state: "solid", + density: 10970 +} + + +elements.molten_uranium_dioxide = { + behavior: [ + "XX|CR:fire%2.5 AND CR:radiation%0.05|XX", + "M2 AND CR:radiation%0.05|XX|M2 AND CR:radiation%0.05", + "M1|M1|M1", + ], + reactions: { + "neutron": { temp1: 25} + } +} + + +elements.depleted_uranium_dioxide = { + color: ["#474744","#21211f","#2b2b2b","#9c998c","#40403f","#24231d"], + behavior: behaviors.POWDER, + reactions: { + "neutron": { elem2: null}, + }, + tempHigh: 2865, + category: "powders", + hidden: true, + state: "solid", + density: 10970 +} + + +elements.stable_uranium_dioxide = { + color: [blendColors("#474744","#ff0000"),blendColors("#21211f","#00ff00"),blendColors("#2b2b2b","#0000ff"),blendColors("#9c998c","#ff0000"),blendColors("#40403f","#00ff00"),blendColors("#24231d","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "neutron": { elem2: null} + }, + tempHigh: 2865, + category: "powders", + hidden: true, + state: "solid", + density: 10970 +}; + +elements.enriched_uranium_dioxide = { + color: ["#474744","#21211f","#2b2b2b","#9c998c","#40403f","#24231d"], + behavior: [ + "XX|CR:radiation%0.25|XX", + "CR:radiation%0.25|XX|CR:radiation%0.25", + "M2|M1|M2", + ], + reactions: { + "neutron": {func:function(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + } + elementCircle(p.x,p.y,2,"neutron"); + }, temp1: 150}, + }, + tempHigh: 2865, + category: "powders", + hidden: true, + state: "solid", + density: 10970 +}; + +elements.molten_enriched_uranium_dioxide = { + behavior: [ + "XX|CR:fire%2.5 AND CR:radiation%0.25|XX", + "M2 AND CR:radiation%0.25|XX|M2 AND CR:radiation%0.25", + "M1|M1|M1", + ], + reactions: { + "neutron": {func:function(pixel,p) {transmuteAround(pixel);changePixel(pixel, "n_explosion"); elementCircle(p.x,p.y,2,"neutron")}}, + } +}; + +function reduce(element, element2, result) { + if(element2 === "oxygen") { + + Object.assign(elements[element].reactions, { + "molten_magnesium": { elem1: result, elem2: "magnesium_oxide"}, + "molten_calcium": { elem1: result, elem2: "quicklime"}, + //"molten_sodium": { elem1: result, elem2: "sodium_oxide"}, + }); + } + if(element2 === "fluorine") { + + Object.assign(elements[element].reactions, { + "molten_magnesium": { elem1: result, elem2: "magnesium_fluoride"}, + "molten_calcium": { elem1: result, elem2: "fluorite"}, + "molten_sodium": { elem1: result, elem2: "sodium_fluoride"}, + "molten_sodium": { elem1: result, elem2: "potassium_fluoride"}, + }); + } +} + +reduce("uranium_dioxide", "oxygen", "uranium"); +reduce("enriched_uranium_dioxide", "oxygen", "enriched_uranium"); +reduce("depleted_uranium_dioxide", "oxygen", "depleted_uranium"); +reduce("stable_uranium_dioxide", "oxygen", "stable_uranium"); + + + +acidReact("hydrofluoric_acid","uranium_dioxide","uranium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid","depleted_uranium_dioxide","depleted_uranium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid","enriched_uranium_dioxide","enriched_uranium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid","stable_uranium_dioxide","stable_uranium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","uranium_dioxide","uranium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","depleted_uranium_dioxide","depleted_uranium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","enriched_uranium_dioxide","enriched_uranium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","stable_uranium_dioxide","stable_uranium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","uranium_dioxide","uranium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","depleted_uranium_dioxide","depleted_uranium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","enriched_uranium_dioxide","enriched_uranium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","stable_uranium_dioxide","stable_uranium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","uranium_dioxide","uranium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","depleted_uranium_dioxide","depleted_uranium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","enriched_uranium_dioxide","enriched_uranium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","stable_uranium_dioxide","stable_uranium_tetrafluoride","fire"); + +elements.hydrofluoric_acid.ignore.push("uranium_hexafluoride","enriched_uranium_hexafluoride","depleted_uranium_hexafluoride","stable_uranium_hexafluoride"); +elements.hydrofluoric_acid_gas.ignore.push("uranium_hexafluoride","enriched_uranium_hexafluoride","depleted_uranium_hexafluoride","stable_uranium_hexafluoride"); +elements.hydrogen_fluoride.ignore.push("uranium_hexafluoride","enriched_uranium_hexafluoride","depleted_uranium_hexafluoride","stable_uranium_hexafluoride"); +elements.liquid_hydrogen_fluoride.ignore.push("uranium_hexafluoride","enriched_uranium_hexafluoride","depleted_uranium_hexafluoride","stable_uranium_hexafluoride"); + + +eListAddIon("URANIUMIV","uranium_tetrafluoride"); +eListAddIon("FLUORIDE","uranium_tetrafluoride"); +eListAdd("INSOLUBLE","uranium_tetrafluoride"); +eListAddIon("ENRICHEDURANIUMIV","enriched_uranium_tetrafluoride"); +eListAddIon("FLUORIDE","enriched_uranium_tetrafluoride"); +eListAdd("INSOLUBLE","enriched_uranium_tetrafluoride"); +eListAddIon("DEPLETEDURANIUMIV","depleted_uranium_tetrafluoride"); +eListAddIon("FLUORIDE","depleted_uranium_tetrafluoride"); +eListAdd("INSOLUBLE","depleted_uranium_tetrafluoride"); +eListAddIon("STABLEURANIUMIV","stable_uranium_tetrafluoride"); +eListAddIon("FLUORIDE","stable_uranium_tetrafluoride"); +eListAdd("INSOLUBLE","stable_uranium_tetrafluoride"); + + +elements.uranium_tetrafluoride = { + color: ["#495747","#394d38","#5a7859"], + behavior: [ + "XX|CR:radiation%0.05|XX", + "CR:radiation%0.05|XX|CR:radiation%0.05", + "M2|M1|M2", + ], + reactions: {}, + tempHigh: 1036, + category: "powders", + state: "solid", + density: 6700, + hidden: true +} + + +elements.molten_uranium_tetrafluoride = { + behavior: [ + "XX|CR:fire%2.5 AND CR:radiation%0.05|XX", + "M2 AND CR:radiation%0.05|XX|M2 AND CR:radiation%0.05", + "M1|M1|M1", + ] +} + + +elements.depleted_uranium_tetrafluoride = { + color: ["#495747","#394d38","#5a7859"], + behavior: behaviors.POWDER, + reactions: {}, + tempHigh: 1036, + category: "powders", + state: "solid", + density: 6700, + hidden: true +} + + +elements.stable_uranium_tetrafluoride = { + color: [blendColors("#495747","#ff0000"),blendColors("#394d38","#00ff00"),blendColors("#5a7859","#0000ff")], + behavior: behaviors.POWDER, + reactions: {}, + tempHigh: 1036, + category: "powders", + state: "solid", + density: 6700, + hidden: true +} + +elements.enriched_uranium_tetrafluoride = { + color: ["#495747","#394d38","#5a7859"], + behavior: [ + "XX|CR:radiation%0.25|XX", + "CR:radiation%0.25|XX|CR:radiation%0.25", + "M2|M1|M2", + ], + reactions: {}, + tempHigh: 1036, + category: "powders", + state: "solid", + density: 6700, + hidden: true +} + + +elements.molten_enriched_uranium_tetrafluoride = { + behavior: [ + "XX|CR:fire%2.5 AND CR:radiation%0.25|XX", + "M2 AND CR:radiation%0.25|XX|M2 AND CR:radiation%0.25", + "M1|M1|M1", + ] +} + + + +acidReact("fluorine","uranium_tetrafluoride","uranium_hexafluoride","fire"); +acidReact("fluorine","depleted_uranium_tetrafluoride","depleted_uranium_hexafluoride","fire"); +acidReact("fluorine","enriched_uranium_tetrafluoride","enriched_uranium_hexafluoride","fire"); +acidReact("fluorine","stable_uranium_tetrafluoride","stable_uranium_hexafluoride","fire"); +acidReact("liquid_fluorine","uranium_tetrafluoride","uranium_hexafluoride","fire"); +acidReact("liquid_fluorine","depleted_uranium_tetrafluoride","depleted_uranium_hexafluoride","fire"); +acidReact("liquid_fluorine","enriched_uranium_tetrafluoride","enriched_uranium_hexafluoride","fire"); +acidReact("liquid_fluorine","stable_uranium_tetrafluoride","stable_uranium_hexafluoride","fire"); + +reduce("uranium_tetrafluoride", "fluorine", "uranium"); +reduce("enriched_uranium_tetrafluoride", "fluorine", "enriched_uranium"); +reduce("depleted_uranium_tetrafluoride", "fluorine", "depleted_uranium"); +reduce("stable_uranium_tetrafluoride", "fluorine", "stable_uranium"); + + +eListAddIon("URANIUMVI","uranium_hexafluoride"); +eListAddIon("FLUORIDE","uranium_hexafluoride"); +eListAdd("INSOLUBLE","uranium_hexafluoride"); +eListAddIon("ENRICHEDURANIUMVI","enriched_uranium_hexafluoride"); +eListAddIon("FLUORIDE","enriched_uranium_hexafluoride"); +eListAdd("INSOLUBLE","enriched_uranium_hexafluoride"); +eListAddIon("DEPLETEDURANIUMVI","depleted_uranium_hexafluoride"); +eListAddIon("FLUORIDE","depleted_uranium_hexafluoride"); +eListAdd("INSOLUBLE","depleted_uranium_hexafluoride"); +eListAddIon("STABLEURANIUMVI","stable_uranium_hexafluoride"); +eListAddIon("FLUORIDE","stable_uranium_hexafluoride"); +eListAdd("INSOLUBLE","stable_uranium_hexafluoride"); + + +elements.uranium_hexafluoride = { + color: "#f7fff7", + behavior: [ + "XX|CR:radiation%0.05|XX", + "CR:radiation%0.05|XX|CR:radiation%0.05", + "M2|M1|M2", + ], + reactions: { + "hydrogen": { elem1: "uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + tempHigh: 56.5, + category: "powders", + state: "solid", + density: 5090, + stateHighName: "uranium_hexafluoride_gas", + forceAutoGen: true, + hidden: true +} + + + +elements.uranium_hexafluoride_gas = { + behavior: behaviors.GAS, + behavior2: [ + ["XX","CR:radiation%0.25","XX"], + ["CR:radiation%0.25","XX","CR:radiation%0.25"], + ["XX","CR:radiation%0.25","XX"] + ], + tick: function(pixel) { + pixelTick(pixel,elements[pixel.element].behavior2); + }, + state: "gas", + density: 12.84, + reactions: { + "hydrogen": { elem1: "uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + onCentrifuge: function(pixel) { + if(Math.random() < 0.05) { + if(Math.random() < 0.8) { + changePixel(pixel,"depleted_uranium_hexafluoride"); + } + else + { + changePixel(pixel,"enriched_uranium_hexafluoride"); + } + } + }, +} + + +elements.depleted_uranium_hexafluoride = { + color: "#f7fff7", + behavior: behaviors.POWDER, + reactions: { + "hydrogen": { elem1: "depleted_uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + tempHigh: 56.5, + category: "powders", + state: "solid", + density: 5090, + stateHighName: "depleted_uranium_hexafluoride_gas", + forceAutoGen: true, + hidden: true +} + + +elements.depleted_uranium_hexafluoride_gas = { + behavior: behaviors.GAS, + state: "gas", + density: 12.84, + reactions: { + "hydrogen": { elem1: "depleted_uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, +} + + + +elements.stable_uranium_hexafluoride = { + color: [blendColors("#f7fff7","#ff0000"),blendColors("#f7fff7","#00ff00"),blendColors("#f7fff7","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "hydrogen": { elem1: "stable_uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + tempHigh: 56.5, + category: "powders", + state: "solid", + density: 5090, + stateHighName: "stable_uranium_hexafluoride_gas", + forceAutoGen: true, + hidden: true +} + + +elements.stable_uranium_hexafluoride_gas = { + behavior: behaviors.GAS, + state: "gas", + density: 12.84, + reactions: { + "hydrogen": { elem1: "stable_uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, +} + + + +elements.enriched_uranium_hexafluoride = { + color: "#f7fff7", + behavior: [ + "XX|CR:radiation%0.25|XX", + "CR:radiation%0.25|XX|CR:radiation%0.25", + "M2|M1|M2", + ], + reactions: { + "hydrogen": { elem1: "enriched_uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + tempHigh: 56.5, + category: "powders", + state: "solid", + density: 5090, + stateHighName: "enriched_uranium_hexafluoride_gas", + forceAutoGen: true, + hidden: true +} + + +elements.enriched_uranium_hexafluoride_gas = { + behavior: behaviors.GAS, + behavior2: [ + ["XX","CR:radiation%0.25","XX"], + ["CR:radiation%0.25","XX","CR:radiation%0.25"], + ["XX","CR:radiation%0.25","XX"] + ], + tick: function(pixel) { + pixelTick(pixel,elements[pixel.element].behavior2); + }, + reactions: { + "hydrogen": { elem1: "enriched_uranium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + state: "gas", + density: 12.84 +} + +runAfterLoad(function() { + reactList("uranium_hexafluoride", eLists.WATER, { "elem1": "uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("depleted_uranium_hexafluoride", eLists.WATER, { "elem1": "depleted_uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("enriched_uranium_hexafluoride", eLists.WATER, { "elem1": "enriched_uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("stable_uranium_hexafluoride", eLists.WATER, { "elem1": "stable_uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("uranium_hexafluoride_gas", eLists.WATER, { "elem1": "uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("depleted_uranium_hexafluoride_gas", eLists.WATER, { "elem1": "depleted_uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("enriched_uranium_hexafluoride_gas", eLists.WATER, { "elem1": "enriched_uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("stable_uranium_hexafluoride_gas", eLists.WATER, { "elem1": "stable_uranium_tetrafluoride", elem2: "hydrofluoric_acid" }); +}); + +elements.radium = { + color: "#3bdeff", + behavior: [ + "XX|CR:radiation%10|XX", + "CR:radiation%10|CH:radon%0.1|CR:radiation%10", + "M2|M1|M2", + ], + tick: function(pixel) { + pixel.temp += 1; + }, + reactions: { + "quark_matter": { "elem1":"stable_radium"}, + }, + tempHigh: 700, + category: "powders", + state: "solid", + density: 5500, + conduct: 0.40, +}; + + +runAfterLoad(function() { + reactList("radium", eLists.WATER, { "elem1": ["radium_water","rad_pop"], elem2:["hydrogen","bubble"], chance:0.05, temp2:350, func:radiumWater }); +}); + +elements.molten_radium = { + behavior: [ + "XX|CR:radiation%10|XX", + "M2 AND CR:radiation%10|CH:radon%0.01|M2 AND CR:radiation%10", + "M1|M1|M1", + ], + tick: function(pixel) { + pixel.temp += 1; + }, + reactions: { + "quark_matter": { "elem1":"stable_radium"}, + }, + conduct: 0.40 +} + +runAfterLoad(function() { + reactList("molten_radium", eLists.WATER, { "elem1": ["radium_water","rad_pop"], elem2:["hydrogen","bubble"], chance:0.05, temp2:350, func:radiumWater }); +}); + +function radiumWater(pixel,p) { + elementCircle(pixel.x,pixel.y,15,"radium_water",0.1,eLists.WATER); +} + +elements.radium_water = { + color: "#3bc4ff", + behavior: [ + "XX|CR:radiation%0.05|XX", + "M2 AND CR:radiation%0.05|XX|M2 AND CR:radiation%0.05", + "M1|M1|M1", + ], + reactions: { + "head": { elem2:null, chance:0.4 }, + }, + tempHigh: 100, + stateHigh: "rad_steam", + state: "liquid", + density: 1100, + category: "liquids", + hidden: true, + tempLow: 0 +} + +eListAdd("WATER","radium_water"); + +elements.actinium = { + color: "#62ebf0", + behavior: [ + "XX|CR:alpha_particle%0.1 AND CR:radiation%10|XX", + "CR:alpha_particle%0.1 AND CR:radiation%10|CH:radium%0.02|CR:alpha_particle%0.1 AND CR:radiation%10", + "M2|M1|M2", + ], + tick: function(pixel) { + pixel.temp += 2.5; + }, + reactions: { + "quark_matter": { "elem1":"stable_actinium"} + }, + tempHigh: 1227, + category: "powders", + state: "solid", + density: 10000, + conduct: 0.225 +}; +elements.molten_actinium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:alpha_particle%0.1 AND CR:radiation%10|XX", + "M2 AND CR:alpha_particle%0.1 AND CR:radiation%10|CH:radium%0.02|M2 AND CR:alpha_particle%0.1 AND CR:radiation%10", + "M1|M1|M1", + ], + tick: function(pixel) { + pixel.temp += 2.5; + }, + reactions: { + "quark_matter": { "elem1":"stable_actinium"} + }, + conduct: 0.225 +} + +elements.thorium = { + color: ["#599e8a","#364d4b","#494d4c","#428a58","#658d7a","#89e0a2"], + behavior: [ + "XX|CR:alpha_particle%0.01|XX", + "CR:alpha_particle%0.01|CH:lead%0.001|CR:alpha_particle%0.01", + "XX|CR:alpha_particle%0.01|XX", + ], + reactions: { + "neutron": { temp1: 100, func:function(pixel,p) {if(Math.random() < 0.1) {changePixel(pixel, "radium"); elementCircle(p.x,p.y,2,"neutron");}}}, + "oxygen": { elem1:"thorium_dioxide", elem2: null, chance:0.1}, + "quark_matter": {elem1: "stable_thorium"} + }, + tempHigh: 1750, + category: "solids", + state: "solid", + density: 11700, + hardness: 0.7, + conduct: 0.235 +}; +elements.molten_thorium = { + behavior: [ + "XX|CR:alpha_particle%0.01|XX", + "M2 AND CR:alpha_particle%0.01|XX|M2 AND CR:alpha_particle%0.01", + "M1|M1|M1", + ], + reactions: { + "neutron": { temp1: 100, func:function(pixel,p) {if(Math.random() < 0.1) {changePixel(pixel, "radium"); elementCircle(p.x,p.y,2,"neutron");}}}, + "oxygen": { elem1:"thorium_dioxide", elem2: null}, + "quark_matter": {elem1: "stable_thorium"} + } +} + +elements.protactinium = { + color: ["#9899a3","#44464a","#5a5b5e"], + behavior: [ + "XX|CR:alpha_particle%0.01 AND CR:radiation%2|XX", + "CR:alpha_particle%0.01 AND CR:radiation%2|CH:actinium%0.01|CR:alpha_particle%0.01 AND CR:radiation%2", + "M2|M1|M2", + ], + reactions: { + "quark_matter": {elem1: "stable_protactinium"} + }, + tempHigh: 1568, + category: "powders", + state: "solid", + density: 15700, + hardness: 0.1, + conduct: 0.235 +} + +elements.molten_protactinium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:alpha_particle%0.01 AND CR:radiation%2|XX", + "M2 AND CR:alpha_particle%0.01 AND CR:radiation%2|CH:actinium%0.01|M2 AND CR:alpha_particle%0.01 AND CR:radiation%2", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_protactinium"} + } +} + + + +elements.neptunium = { + color: ["#626580","#3f4a61","#4a5463"], + behavior: [ + "XX|CR:neutron%0.1 AND CR:radiation%2|XX", + "CR:neutron%0.1 AND CR:radiation%2|CH:thorium%0.025|CR:neutron%0.1 AND CR:radiation%2", + "XX|CR:neutron%0.1 AND CR:radiation%2|XX", + ], + reactions: { + "quark_matter": {elem1: "stable_neptunium"}, + "neutron": {func:fissile, temp1: 150} + }, + tempHigh: 639, + category: "solids", + state: "solid", + density: 19380, + hardness: 0.7, + conduct: 0.2 +} + +elements.molten_neptunium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%0.1 AND CR:radiation%2|XX", + "M2 AND CR:neutron%0.1 AND CR:radiation%2|CH:thorium%0.025|M2 AND CR:neutron%0.1 AND CR:radiation%2", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_neptunium"}, + "neutron": {func:fissile, temp1: 150} + } +} + +function fissile(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + } + elementCircle(p.x,p.y,2,"neutron"); +} + + +elements.plutonium = { + color: ["#5fc29f","#5d9e7d","#5b7d6b"], + behavior: [ + "XX|CR:neutron%0.05 AND CR:radiation%2|XX", + "CR:neutron%0.05 AND CR:radiation%2|CH:enriched_uranium%0.025|CR:neutron%0.05 AND CR:radiation%2", + "XX|CR:neutron%0.05 AND CR:radiation%2|XX", + ], + reactions: { + "oxygen": { elem1:"plutonium_dioxide", elem2: null}, + "quark_matter": {elem1: "stable_plutonium"}, + "neutron": {func:plutonium, temp1: 150} + }, + tempHigh: 639, + category: "solids", + state: "solid", + density: 19850, + hardness: 0.7, + conduct: 0.2 +} +elements.stable_plutonium = { + color: [blendColors("#5fc29f","#ff0000"),blendColors("#5d9e7d","#00ff00"),blendColors("#5b7d6b","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "oxygen": { elem1:"stable_plutonium_dioxide", elem2: null} + }, + tempHigh: 639, + category: "solids", + state: "solid", + density: 19850, + hardness: 0.7, + conduct: 0.2, + hidden: true +}; + +runAfterLoad(function() { + reactList("plutonium", eLists.WATER, { elem2: "dirty_water", chance:0.25 }); +}); +runAfterLoad(function() { + reactList("stable_plutonium", eLists.WATER, { elem2: "dirty_water", chance:0.25 }); +}); + +elements.plutonium_dioxide = { + color: ["#edcf47","#c7a924","#e3c129"], + behavior: [ + "XX|CR:radiation%0.25|XX", + "CR:radiation%0.25|XX|CR:radiation%0.25", + "M2|M1|M2", + ], + reactions: { + "neutron": {func:function(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + } + elementCircle(p.x,p.y,2,"neutron"); + }, temp1: 150}, + }, + tempHigh: 2744, + category: "powders", + hidden: true, + state: "solid", + density: 11500 +}; + +elements.molten_plutonium_dioxide = { + behavior: [ + "XX|CR:fire%2.5 AND CR:radiation%0.25|XX", + "M2 AND CR:radiation%0.25|XX|M2 AND CR:radiation%0.25", + "M1|M1|M1", + ], + reactions: { + "neutron": {func:function(pixel,p) {transmuteAround(pixel);changePixel(pixel, "n_explosion"); elementCircle(p.x,p.y,2,"neutron")}}, + } +}; +elements.stable_plutonium_dioxide = { + color: [blendColors("#edcf47","#ff0000"),blendColors("#c7a924","#00ff00"),blendColors("#e3c129","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "neutron": { elem2: null} + }, + tempHigh: 2744, + category: "powders", + hidden: true, + state: "solid", + density: 11500 +}; + +reduce("plutonium_dioxide", "oxygen", "plutonium"); +reduce("stable_plutonium_dioxide", "oxygen", "stable_plutonium"); + + + +acidReact("hydrofluoric_acid","plutonium_dioxide","plutonium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid","stable_plutonium_dioxide","plutonium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","plutonium_dioxide","plutonium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","stable_plutonium_dioxide","plutonium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","plutonium_dioxide","plutonium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","stable_plutonium_dioxide","plutonium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","plutonium_dioxide","plutonium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","stable_plutonium_dioxide","plutonium_tetrafluoride","fire"); + +elements.hydrofluoric_acid.ignore.push("plutonium_hexafluoride","stable_plutonium_hexafluoride"); +elements.hydrofluoric_acid_gas.ignore.push("plutonium_hexafluoride","stable_plutonium_hexafluoride"); +elements.hydrogen_fluoride.ignore.push("plutonium_hexafluoride","stable_plutonium_hexafluoride"); +elements.liquid_hydrogen_fluoride.ignore.push("plutonium_hexafluoride","stable_plutonium_hexafluoride"); + +eListAddIon("PLUTONIUMIV","plutonium_tetrafluoride"); +eListAddIon("FLUORIDE","plutonium_tetrafluoride"); +eListAdd("INSOLUBLE","plutonium_tetrafluoride"); +eListAddIon("STABLEPLUTONIUMIV","stable_plutonium_tetrafluoride"); +eListAddIon("FLUORIDE","stable_plutonium_tetrafluoride"); +eListAdd("INSOLUBLE","stable_plutonium_tetrafluoride"); + + +elements.plutonium_tetrafluoride = { + color: ["#a13d0b","#85401d","#733211"], + behavior: [ + "XX|CR:radiation%0.05|XX", + "CR:radiation%0.05|XX|CR:radiation%0.05", + "M2|M1|M2", + ], + reactions: {}, + tempHigh: 1027, + category: "powders", + state: "solid", + density: 7100, + hidden: true +} + + +elements.molten_plutonium_tetrafluoride = { + behavior: [ + "XX|CR:fire%2.5 AND CR:radiation%0.05|XX", + "M2 AND CR:radiation%0.05|XX|M2 AND CR:radiation%0.05", + "M1|M1|M1", + ] +} + + +elements.stable_plutonium_tetrafluoride = { + color: [blendColors("#a13d0b","#ff0000"),blendColors("#85401d","#00ff00"),blendColors("#733211","#0000ff")], + behavior: behaviors.POWDER, + reactions: {}, + tempHigh: 1027, + category: "powders", + state: "solid", + density: 7100, + hidden: true +} + +acidReact("fluorine","plutonium_tetrafluoride","plutonium_hexafluoride","fire"); +acidReact("fluorine","stable_plutonium_tetrafluoride","stable_plutonium_hexafluoride","fire"); +acidReact("liquid_fluorine","plutonium_tetrafluoride","plutonium_hexafluoride","fire"); +acidReact("liquid_fluorine","stable_plutonium_tetrafluoride","stable_plutonium_hexafluoride","fire"); +acidReact("foof","plutonium_tetrafluoride","plutonium_hexafluoride",null); +acidReact("foof","stable_plutonium_tetrafluoride","stable_plutonium_hexafluoride",null); + +reduce("plutonium_tetrafluoride", "fluorine", "plutonium"); +reduce("stable_plutonium_tetrafluoride", "fluorine", "stable_plutonium"); + + +eListAddIon("PLUTONIUMVI","plutonium_hexafluoride"); +eListAddIon("FLUORIDE","plutonium_hexafluoride"); +eListAdd("INSOLUBLE","plutonium_hexafluoride"); +eListAddIon("STABLEPLUTONIUMVI","stable_plutonium_hexafluoride"); +eListAddIon("FLUORIDE","stable_plutonium_hexafluoride"); +eListAdd("INSOLUBLE","stable_plutonium_hexafluoride"); + + +elements.plutonium_hexafluoride = { + color: "#6e2602", + behavior: [ + "XX|CR:radiation%0.05|XX", + "CR:radiation%0.05|XX|CR:radiation%0.05", + "M2|M1|M2", + ], + reactions: { + "hydrogen": { elem1: "plutonium_hexafluoride", elem2: "hydrogen_fluoride" } + }, + tempHigh: 62.5, + category: "powders", + state: "solid", + density: 5080, + stateHighName: "plutonium_hexafluoride_gas", + forceAutoGen: true, + hidden: true +} + + + +elements.plutonium_hexafluoride_gas = { + behavior: behaviors.GAS, + behavior2: [ + ["XX","CR:radiation%0.25","XX"], + ["CR:radiation%0.25","XX","CR:radiation%0.25"], + ["XX","CR:radiation%0.25","XX"] + ], + tick: function(pixel) { + pixelTick(pixel,elements[pixel.element].behavior2); + }, + state: "gas", + density: 14.88, + reactions: { + "hydrogen": { elem1: "plutonium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, +} + + +elements.stable_plutonium_hexafluoride = { + color: [blendColors("#6e2602","#ff0000"),blendColors("#6e2602","#00ff00"),blendColors("#6e2602","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "hydrogen": { elem1: "stable_plutonium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + tempHigh: 62.5, + category: "powders", + state: "solid", + density: 5080, + stateHighName: "stable_plutonium_hexafluoride_gas", + forceAutoGen: true, + hidden: true +} + + +elements.stable_plutonium_hexafluoride_gas = { + behavior: behaviors.GAS, + state: "gas", + density: 14.88, + reactions: { + "hydrogen": { elem1: "stable_plutonium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, +} + + + +runAfterLoad(function() { + reactList("plutonium_hexafluoride", eLists.WATER, { "elem1": "plutonium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("stable_plutonium_hexafluoride", eLists.WATER, { "elem1": "stable_plutonium_tetrafluoride", elem2: "hydrofluoric_acid" }); +}); + + +elements.molten_plutonium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%0.05 AND CR:radiation%2|XX", + "M2 AND CR:neutron%0.05 AND CR:radiation%2|CH:enriched_uranium%0.025|M2 AND CR:neutron%0.05 AND CR:radiation%2", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_plutonium"}, + "neutron": {func:plutonium, temp1: 150} + } +} + + +function plutonium(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + elementCircle(p.x,p.y,5,"neutron"); + } + if(Math.random() < 0.1) + { + changePixel(pixel, "americium"); + } + elementCircle(p.x,p.y,2,"neutron"); +} + +elements.americium = { + color: ["#42ebaf","#59d998","#d0dbd5"], + behavior: [ + "XX|CR:neutron%0.1 AND CR:radiation%2 AND CR:alpha_particle%2|XX", + "CR:neutron%0.1 AND CR:radiation%2 AND CR:alpha_particle%2|CH:neptunium%0.05 AND CH:plutonium%0.05|CR:neutron%0.1 AND CR:radiation%2 AND CR:alpha_particle%2", + "XX|CR:neutron%0.1 AND CR:radiation%2 AND CR:alpha_particle%2|XX", + ], + reactions: { + "quark_matter": {elem1: "stable_americium"}, + "neutron": {func:americium, temp1: 150} + }, + tempHigh: 1176, + category: "solids", + state: "solid", + density: 12000, + hardness: 0.9, + conduct: 0.2 +} + +elements.stable_americium = { + color: [blendColors("#42ebaf","#ff0000"),blendColors("#59d998","#00ff00"),blendColors("#d0dbd5","#0000ff")], + behavior: behaviors.WALL, + tempHigh: 1176, + category: "solids", + state: "solid", + density: 12000, + hardness: 0.9, + conduct: 0.2, + hidden: true +} + +elements.molten_americium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%0.1 AND CR:radiation%2 AND CR:alpha_particle%2|XX", + "M2 AND CR:neutron%0.1 AND CR:radiation%2 AND CR:alpha_particle%2|CH:neptunium%0.05 AND CH:plutonium%0.05|M2 AND CR:neutron%0.1 AND CR:radiation%2 AND CR:alpha_particle%2", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_americium"}, + "neutron": {func:americium, temp1: 150} + } +} + +function americium(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + elementCircle(p.x,p.y,5,"neutron"); + } + if(Math.random() < 0.1) + { + changePixel(pixel, "curium"); + } + elementCircle(p.x,p.y,2,"neutron"); +} + + +elements.curium = { + color: ["#fab1f1","#d6c9d5","#e0b1d6"], + behavior: [ + "XX|CR:neutron%0.5 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "CR:neutron%0.5 AND CR:radiation%1 AND CR:alpha_particle%1|CH:plutonium%0.075|CR:neutron%0.5 AND CR:radiation%1 AND CR:alpha_particle%1", + "XX|CR:neutron%0.5 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + ], + reactions: { + "quark_matter": {elem1: "stable_curium"}, + "neutron": {func:curium, temp1: 175} + }, + tempHigh: 1340, + category: "solids", + state: "solid", + density: 13510, + hardness: 0.9, + conduct: 0.2 +} + +elements.stable_curium = { + color: [blendColors("#fab1f1","#ff0000"),blendColors("#d6c9d5","#00ff00"),blendColors("#e0b1d6","#0000ff")], + behavior: behaviors.WALL, + tempHigh: 1340, + category: "solids", + state: "solid", + density: 13510, + hardness: 0.9, + conduct: 0.2, + hidden: true +} + +elements.molten_curium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%0.5 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "M2 AND CR:neutron%0.5 AND CR:radiation%1 AND CR:alpha_particle%1|CH:plutonium%0.075|M2 AND CR:neutron%0.5 AND CR:radiation%1 AND CR:alpha_particle%1", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_curium"}, + "neutron": {func:curium, temp1: 150} + } +} + +function curium(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + elementCircle(p.x,p.y,5,"neutron"); + } + if(Math.random() < 0.1) + { + changePixel(pixel, "berkelium"); + } + elementCircle(p.x,p.y,2,"neutron"); +} + + +elements.berkelium = { + color: ["#f2edfa","#bdbccf","#d7cae8"], + behavior: [ + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:californium%0.075|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + ], + reactions: { + "quark_matter": {elem1: "stable_berkelium"}, + "neutron": {func:berkelium, temp1: 175} + }, + tempHigh: 986, + category: "solids", + state: "solid", + density: 13250, + hardness: 0.9, + conduct: 0.2 +} + +elements.stable_berkelium = { + color: [blendColors("#f2edfa","#ff0000"),blendColors("#bdbccf","#00ff00"),blendColors("#d7cae8","#0000ff")], + behavior: behaviors.WALL, + tempHigh: 986, + category: "solids", + state: "solid", + density: 13250, + hardness: 0.9, + conduct: 0.2, + hidden: true +} + +elements.molten_berkelium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:californium%0.075|M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_berkelium"}, + "neutron": {func:berkelium, temp1: 150} + } +} + +function berkelium(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + elementCircle(p.x,p.y,5,"neutron"); + } + if(Math.random() < 0.1) + { + changePixel(pixel, "californium"); + } + elementCircle(p.x,p.y,2,"neutron",0.2); +} + + +elements.californium = { + color: ["#dfd0f7","#bcbade","#b99be0"], + behavior: [ + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:curium%0.05 AND CH:einsteinium%0.05|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + ], + reactions: { + "quark_matter": {elem1: "stable_californium"}, + "neutron": {func:californium, temp1: 175} + }, + tempHigh: 900 , + category: "solids", + state: "solid", + density: 15100, + hardness: 0.9, + conduct: 0.2 +} + +elements.stable_californium = { + color: [blendColors("#dfd0f7","#ff0000"),blendColors("#bcbade","#00ff00"),blendColors("#b99be0","#0000ff")], + behavior: behaviors.WALL, + tempHigh: 900 , + category: "solids", + state: "solid", + density: 15100, + hardness: 0.9, + conduct: 0.2, + hidden: true +} + +elements.molten_californium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:curium%0.05 AND CH:einsteinium%0.05|M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_californium"}, + "neutron": {func:californium, temp1: 150} + } +} + +function californium(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + elementCircle(p.x,p.y,5,"neutron"); + } + if(Math.random() < 0.1) + { + changePixel(pixel, "einsteinium"); + } + elementCircle(p.x,p.y,2,"neutron",0.25); +} + + +elements.einsteinium = { + color: ["#3aa6c2","#b8edf1","#83d9e4"], + behavior: [ + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:berkelium%0.05 AND CH:fermium%0.05|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + ], + reactions: { + "quark_matter": {elem1: "stable_einsteinium"}, + "neutron": {func:einsteinium, temp1: 175} + }, + tempHigh: 1133, + category: "solids", + state: "solid", + density: 8840, + hardness: 0.9, + conduct: 0.2 +} + +elements.stable_einsteinium = { + color: [blendColors("#3aa6c2","#ff0000"),blendColors("#b8edf1","#00ff00"),blendColors("#83d9e4","#0000ff")], + behavior: behaviors.WALL, + tempHigh: 1133, + category: "solids", + state: "solid", + density: 8840, + hardness: 0.9, + conduct: 0.2, + hidden: true +} + +elements.molten_einsteinium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:berkelium%0.05 AND CH:fermium%0.05|M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_einsteinium"}, + "neutron": {func:einsteinium, temp1: 150} + } +} + +function einsteinium(pixel,p) { + if(pixel.temp >= 500) + { + transmuteAround(pixel); + changePixel(pixel, "n_explosion"); + elementCircle(p.x,p.y,5,"neutron"); + } + if(Math.random() < 0.1) + { + changePixel(pixel, "fermium"); + } + elementCircle(p.x,p.y,3,"neutron"); +} + + +elements.fermium = { + color: ["#c8a7fc","#cecbf2","#d5bff2"], + behavior: [ + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:californium%0.1|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "XX|CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + ], + reactions: { + "quark_matter": {elem1: "stable_fermium"}, + "neutron": {func:fermium, temp1: 175} + }, + tempHigh: 1800, + category: "solids", + state: "solid", + density: 9710, + hardness: 0.9, + conduct: 0.2 +} + +elements.stable_fermium = { + color: [blendColors("#c8a7fc","#ff0000"),blendColors("#cecbf2","#00ff00"),blendColors("#d5bff2","#0000ff")], + behavior: behaviors.WALL, + tempHigh: 1800, + category: "solids", + state: "solid", + density: 9710, + hardness: 0.9, + conduct: 0.2, + hidden: true +} + +elements.molten_fermium = { + behavior: [ + "XX|CR:fire%2.5 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|XX", + "M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1|CH:californium%0.1|M2 AND CR:neutron%1 AND CR:radiation%1 AND CR:alpha_particle%1", + "M1|M1|M1", + ], + reactions: { + "quark_matter": {elem1: "stable_fermium"}, + "neutron": {func:fermium, temp1: 150} + } +} + +function fermium(pixel,p) { + if(pixel.temp >= 500) + { + changePixel(pixel, "n_explosion"); + elementCircle(p.x,p.y,5,"neutron"); + } + elementCircle(p.x,p.y,3,"neutron",0.2); +} + + +function transmuteAround(pixel) { + elementCircle(pixel.x,pixel.y,40,"radium",0.1,["thorium","molten_thorium"]); + elementCircle(pixel.x,pixel.y,40,"plutonium",0.1,["depleted_uranium","molten_depleted_uranium"]); + elementCircle(pixel.x,pixel.y,40,"neptunium",0.1,["enriched_uranium","molten_enriched_uranium"]); + elementCircle(pixel.x,pixel.y,40,"americium",0.1,["plutonium","molten_plutonium"]); + elementCircle(pixel.x,pixel.y,40,"curium",0.1,["americium","molten_americium"]); + elementCircle(pixel.x,pixel.y,40,"berkelium",0.1,["curium","molten_curium"]); + elementCircle(pixel.x,pixel.y,40,"californium",0.1,["berkelium","molten_berkelium"]); + elementCircle(pixel.x,pixel.y,40,"einsteinium",0.1,["californium","molten_californium"]); + elementCircle(pixel.x,pixel.y,40,"fermium",0.1,["einsteinium","molten_einsteinium"]); +} + + + +function elementCircle(x,y,radius,pixelType="fire",chance = 0.1,replace = [null]) { + + if (!Array.isArray(replace)) { + replace = [replace] + } + // if pixelType includes , split it into an array + if (pixelType.indexOf(",") !== -1) { + pixelType = pixelType.split(","); + } + var coords = circleCoords(x,y,radius); + for (var i = 0; i < coords.length; i++) { + if (isEmpty(coords[i].x,coords[i].y) && replace.includes(null)) { + if (Math.random() > chance) { } // do nothing + else { + // if pixelType is an array, choose a random item + if (Array.isArray(pixelType)) { + createPixel(pixelType[Math.floor(Math.random() * pixelType.length)],coords[i].x,coords[i].y); + } + else { + createPixel(pixelType,coords[i].x,coords[i].y); + } + } + } + if (!isEmpty(coords[i].x,coords[i].y, true) && replace.includes(pixelMap[coords[i].x][coords[i].y].element)) { + if (Math.random() > chance) { } // do nothing + else { + // if pixelType is an array, choose a random item + if (Array.isArray(pixelType)) { + changePixel(pixelMap[coords[i].x][coords[i].y],pixelType[Math.floor(Math.random() * pixelType.length)]); + } + else { + changePixel(pixelMap[coords[i].x][coords[i].y],pixelType); + } + } + } + } +} + + + +elements.thorium_dioxide = { + color: ["#313331","#1a1a18","#171717","#24231d","#262622","#171613"], + behavior: [ + "XX|CR:radiation%0.01|XX", + "CR:radiation%0.01|XX|CR:radiation%0.01", + "M2|M1|M2", + ], + reactions: {}, + hidden: true, + tempHigh: 2865, + category: "powders", + state: "solid", + density: 10970 +} + +elements.stable_thorium_dioxide = { + color: [blendColors("#313331","#ff0000"),blendColors("#1a1a18","#00ff00"),blendColors("#171717","#0000ff"),blendColors("#24231d","#ff0000"),blendColors("#262622","#00ff00"),blendColors("#171613","#0000ff")], + behavior: behaviors.POWDER, + reactions: {}, + hidden: true, + tempHigh: 2865, + category: "powders", + state: "solid", + density: 10970 +} + +eListAddIon("THORIUMIV","thorium_dioxide"); +eListAddIon("OXIDE","thorium_dioxide"); +eListAdd("INSOLUBLE","thorium_dioxide"); +eListAddIon("STABLETHORIUMIV","stable_thorium_dioxide"); +eListAddIon("OXIDE","stable_thorium_dioxide"); +eListAdd("INSOLUBLE","stable_thorium_dioxide"); + +acidReact("hydrofluoric_acid","thorium_dioxide","thorium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid","stable_thorium_dioxide","stable_thorium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","thorium_dioxide","thorium_tetrafluoride","fire"); +acidReact("hydrofluoric_acid_gas","stable_thorium_dioxide","stable_thorium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","thorium_dioxide","thorium_tetrafluoride","fire"); +acidReact("hydrogen_fluoride","stable_thorium_dioxide","stable_thorium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","thorium_dioxide","thorium_tetrafluoride","fire"); +acidReact("liquid_hydrogen_fluoride","stable_thorium_dioxide","stable_thorium_tetrafluoride","fire"); + + +elements.thorium_tetrafluoride = { + color: "#e5e6e5", + behavior: [ + "XX|CR:radiation%0.01|XX", + "CR:radiation%0.01|XX|CR:radiation%0.01", + "M2|M1|M2", + ], + reactions: {}, + hidden: true, + tempHigh: 1110, + category: "powders", + state: "solid", + density: 6300 +} + +elements.stable_thorium_tetrafluoride = { + color: [blendColors("#e5e6e5","#ff0000"),blendColors("#e5e6e5","#00ff00"),blendColors("#e5e6e5","#0000ff")], + behavior: behaviors.POWDER, + reactions: {}, + hidden: true, + tempHigh: 1110, + category: "powders", + state: "solid", + density: 6300 +} + +eListAddIon("THORIUMIV","thorium_tetrafluoride"); +eListAddIon("OXIDE","thorium_tetrafluoride"); +eListAdd("INSOLUBLE","thorium_tetrafluoride"); +eListAddIon("STABLETHORIUMIV","stable_thorium_tetrafluoride"); +eListAddIon("OXIDE","stable_thorium_tetrafluoride"); +eListAdd("INSOLUBLE","stable_thorium_tetrafluoride"); + +reduce("thorium_dioxide", "oxygen", "thorium"); +reduce("stable_thorium_dioxide", "oxygen", "stable_thorium"); +reduce("thorium_tetrafluoride", "fluorine", "thorium"); +reduce("stable_thorium_tetrafluoride", "fluorine", "stable_thorium"); + + +elements.stable_thorium = { + color: [blendColors("#599e8a","#ff0000"),blendColors("#364d4b","#00ff00"),blendColors("#494d4c","#0000ff"),blendColors("#428a58","#ff0000"),blendColors("#658d7a","#00ff00"),blendColors("#89e0a2","#0000ff")], + behavior: behaviors.WALL, + reactions: { + "oxygen": { elem1:"stable_thorium_dioxide", elem2: null} + }, + tempHigh: 1750, + category: "solids", + state: "solid", + hidden: true, + density: 11700, + hardness: 0.7, + conduct: 0.235 +}; +elements.molten_stable_thorium = { + reactions: { + "oxygen": { elem1:"stable_thorium_dioxide", elem2: null} + } +} + +elements.stable_radium = { + color: [blendColors("#3bdeff","#ff0000"),blendColors("#3bdeff","#00ff00"),blendColors("#3bdeff","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "oxygen": { "elem1":"radium_oxide"}, + }, + tempHigh: 700, + category: "powders", + state: "solid", + density: 5500, + hidden: true, + conduct: 0.40 +}; + + +elements.radium_oxide = { + color: [blendColors("#b2d9d9","#ff0000",0.25),blendColors("#b2d9d9","#00ff00",0.25),blendColors("#b2d9d9","#0000ff",0.25)], + behavior: behaviors.POWDER, + reactions: {}, + hidden: true, + tempHigh: 2327, + category: "powders", + state: "solid", + density: 12000, +}; + + +eListAddIon("RADIUM","radium_oxide"); +eListAddIon("OXIDE","radium_oxide"); +eListAdd("INSOLUBLE","radium_oxide"); + + +elements.radium_hydroxide = { + color: [blendColors("#f2fafa","#ff0000",0.25),blendColors("#f2fafa","#00ff00",0.25),blendColors("#f2fafa","#0000ff",0.25)], + behavior: behaviors.POWDER, + hidden: true, + tempHigh: 600, + reactions: {}, + stateHigh: "radium_oxide", + category: "powders", + state: "solid", + density: 12000, +}; + +eListAdd("BASE","radium_hydroxide"); +eListAddIon("RADIUM","radium_hydroxide","base"); +eListAddIon("HYDROXIDE","radium_hydroxide","base"); +eListAdd("INSOLUBLE","radium_hydroxide"); + +createSalt("radium_chloride","radium_chloride_solution",[blendColors("#faf3de","#ff0000",0.25),blendColors("#faf3de","#00ff00",0.25),blendColors("#faf3de","#0000ff",0.25)],[blendColors("#8eadef","#ff0000",0.25),blendColors("#8eadef","#00ff00",0.25),blendColors("#8eadef","#0000ff",0.25)],true,true,900,-2,102,4900,1050,"RADIUM","CHLORIDE"); + +elements.radium_chloride_solution.reactions["mercury"] = { elem1:["stable_radium","chlorine","hydrogen"], charged:true, chance:0.02 }; + + + +elements.molten_stable_radium = { + reactions: { + "oxygen": { "elem1":"radium_oxide"}, + }, + conduct: 0.40 +}; + +runAfterLoad(function() { + reactList("radium_oxide", eLists.WATER, { "elem1": "radium_hydroxide", "elem2": null, chance:0.01 }); + reactList("stable_radium", eLists.WATER, { "elem1": ["radium_hydroxide","pop"], elem2:["hydrogen","bubble"], chance:0.05, temp2:350 }); + reactList("molten_stable_radium", eLists.WATER, { "elem1": ["radium_hydroxide","pop"], elem2:["hydrogen","bubble"], chance:0.05, temp2:350 }); +}); + +elements.stable_actinium = { + color: [blendColors("#e5e6e5","#ff0000",0.25),blendColors("#62ebf0","#00ff00"),blendColors("#62ebf0","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "oxygen": { "elem1":"actinium_oxide"}, + }, + hidden: true, + tempHigh: 1227, + category: "powders", + state: "solid", + density: 10000, + conduct: 0.225 +}; +elements.molten_stable_actinium = { + reactions: { + "oxygen": { "elem1":"actinium_oxide"}, + }, + conduct: 0.225 +}; + + +runAfterLoad(function() { + reactList("stable_actinium", eLists.WATER, { "elem1": "actinium_hydroxide", "elem2": "hydrogen", chance:0.01 }); + reactList("molten_stable_actinium", eLists.WATER, { "elem1": "actinium_hydroxide", "elem2": "hydrogen", chance:0.01 }); +}); + + +elements.actinium_oxide = { + color: [blendColors("#ebf5f5","#ff0000",0.25),blendColors("#ebf5f5","#00ff00",0.25),blendColors("#ebf5f5","#0000ff",0.25)], + behavior: behaviors.POWDER, + reactions: { + "water": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + "salt_water": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + "sugar_water": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + "dirty_water": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + "steam": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + "seltzer": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + "pool_water": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + "primordial_soup": { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }, + }, + hidden: true, + tempHigh: 2327, + category: "powders", + state: "solid", + density: 12000, +}; + +runAfterLoad(function() { + reactList("actinium_oxide", eLists.WATER, { "elem1": "actinium_hydroxide", "elem2": null, chance:0.01 }); +}); + + + +elements.actinium_hydroxide = { + color: [blendColors("#f2cef2","#ff0000",0.25),blendColors("#f2cef2","#00ff00",0.25),blendColors("#f2cef2","#0000ff",0.25)], + behavior: behaviors.POWDER, + hidden: true, + tempHigh: 350, + stateHigh: ["actinium_oxide","steam"], + category: "powders", + state: "solid", + density: 12000, +}; + + +eListAdd("BASE","actinium_hydroxide"); +eListAddIon("ACTINIUM","actinium_hydroxide","base"); +eListAddIon("HYDROXIDE","actinium_hydroxide","base"); +eListAdd("INSOLUBLE","actinium_hydroxide"); + +reduce("actinium_oxide", "oxygen", "stable_actinium"); + + +elements.stable_protactinium = { + color: [blendColors("#9899a3","#ff0000"),blendColors("#44464a","#00ff00"),blendColors("#5a5b5e","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "oxygen": { "elem1":"protactinium_v_oxide", chance:0.01}, + "steam": { "elem1": "protactinium_hydroxide", "elem2": "hydrogen", chance:0.01 }, + }, + + tempHigh: 1568, + category: "powders", + state: "solid", + density: 15700, + hardness: 0.1, + conduct: 0.235, + hidden: true +}; + +elements.molten_stable_protactinium = { + reactions: { + "oxygen": { "elem1":"protactinium_v_oxide", chance:0.01}, + "steam": { "elem1": "protactinium_hydroxide", "elem2": "hydrogen", chance:0.01 }, + }, +}; + + +eListAdd("BASE","protactinium_hydroxide"); +eListAddIon("PROTACTINIUMV","protactinium_hydroxide","base"); +eListAddIon("HYDROXIDE","protactinium_hydroxide","base"); +eListAdd("INSOLUBLE","protactinium_hydroxide"); + +elements.protactinium_hydroxide = { + color: [blendColors("#95c7c7","#ff0000",0.25),blendColors("#95c7c7","#00ff00",0.25),blendColors("#95c7c7","#0000ff",0.25)], + behavior: behaviors.POWDER, + hidden: true, + tempHigh: 350, + category: "powders", + state: "solid", + stateHigh: ["protactinium_v_oxide","steam"], + density: 12000, +}; + +elements.protactinium_v_oxide = { + color: [blendColors("#353b3b","#ff0000",0.25),blendColors("#353b3b","#00ff00",0.25),blendColors("#353b3b","#0000ff",0.25)], + behavior: behaviors.POWDER, + hidden: true, + tempHigh: 2500, + category: "powders", + state: "solid", + density: 12000, + reactions: {}, +}; + +eListAddIon("PROTACTINIUMV","protactinium_v_oxide"); +eListAddIon("OXIDE","protactinium_v_oxide"); +eListAdd("INSOLUBLE","protactinium_v_oxide"); + + +acidReact("hydrofluoric_acid","protactinium_v_oxide","protactinium_pentafluoride","fire",0); +acidReact("hydrofluoric_acid_gas","protactinium_v_oxide","protactinium_pentafluoride","fire",0); +acidReact("hydrogen_fluoride","protactinium_v_oxide","protactinium_pentafluoride","fire",0); +acidReact("liquid_hydrogen_fluoride","protactinium_v_oxide","protactinium_pentafluoride","fire",0); + +elements.protactinium_pentafluoride = { + color: [blendColors("#cbf2ec","#ff0000",0.25),blendColors("#cbf2ec","#00ff00",0.25),blendColors("#cbf2ec","#0000ff",0.25)], + behavior: behaviors.POWDER, + hidden: true, + tempHigh: 2500, + category: "powders", + state: "solid", + density: 12000, + reactions: {}, +}; + +eListAddIon("PROTACTINIUMV","protactinium_pentafluoride"); +eListAddIon("OXIDE","protactinium_pentafluoride"); +eListAdd("INSOLUBLE","protactinium_pentafluoride"); + + +reduce("protactinium_v_oxide", "oxygen", "stable_protactinium"); +reduce("protactinium_pentafluoride", "fluorine", "stable_protactinium"); + +elements.stable_neptunium = { + color: [blendColors("#626580","#ff0000"),blendColors("#3f4a61","#00ff00"),blendColors("#4a5463","#0000ff")], + behavior: behaviors.WALL, + reactions: { + "oxygen": { "elem1":"neptunium_dioxide", chance:0.01} + }, + tempHigh: 639, + category: "solids", + state: "solid", + density: 19380, + hardness: 0.7, + conduct: 0.2, + hidden: true +}; + +elements.molten_stable_neptunium = { + reactions: { + "oxygen": { "elem1":"neptunium_dioxide", chance:0.01} + }, +}; + + +elements.neptunium_dioxide = { + color: [blendColors("#47c94f","#ff0000"),blendColors("#47c94f","#00ff00"),blendColors("#47c94f","#0000ff")], + behavior: behaviors.POWDER, + hidden: true, + tempHigh: 2600, + category: "powders", + state: "solid", + density: 12000, + reactions: {}, +}; + + +eListAddIon("NEPTUNIUMIV","neptunium_dioxide"); +eListAddIon("OXIDE","neptunium_dioxide"); +eListAdd("INSOLUBLE","neptunium_dioxide"); + +elements.neptunium_tetrafluoride = { + color: [blendColors("#73e67a","#ff0000"),blendColors("#73e67a","#00ff00"),blendColors("#73e67a","#0000ff")], + behavior: behaviors.POWDER, + hidden: true, + tempHigh: 2550, + category: "powders", + state: "solid", + density: 12000, + reactions: {}, +}; + +eListAddIon("NEPTUNIUMIV","neptunium_tetrafluoride"); +eListAddIon("FLUORIDE","neptunium_tetrafluoride"); +eListAdd("INSOLUBLE","neptunium_tetrafluoride"); + +acidReact("hydrofluoric_acid","neptunium_dioxide","neptunium_tetrafluoride","fire",0); +acidReact("hydrofluoric_acid_gas","neptunium_dioxide","neptunium_tetrafluoride","fire",0); +acidReact("hydrogen_fluoride","neptunium_dioxide","neptunium_tetrafluoride","fire",0); +acidReact("liquid_hydrogen_fluoride","neptunium_dioxide","neptunium_tetrafluoride","fire",0); + +acidReact("fluorine","neptunium_tetrafluoride","neptunium_hexafluoride","fire",0); +acidReact("liquid_fluorine","neptunium_tetrafluoride","neptunium_hexafluoride","fire",0); +acidReact("fluorine","neptunium_dioxide","neptunium_hexafluoride","fire",0); +acidReact("liquid_fluorine","neptunium_dioxide","neptunium_hexafluoride","fire",0); + +eListAddIon("NEPTUNIUMVI","neptunium_hexafluoride"); +eListAddIon("FLUORIDE","neptunium_hexafluoride"); +eListAdd("INSOLUBLE","neptunium_hexafluoride"); + +reduce("neptunium_dioxide", "oxygen", "stable_neptunium"); +reduce("neptunium_tetrafluoride", "fluorine", "stable_neptunium"); + +elements.neptunium_hexafluoride = { + color: [blendColors("#eda042","#ff0000"),blendColors("#eda042","#00ff00"),blendColors("#eda042","#0000ff")], + behavior: behaviors.POWDER, + reactions: { + "hydrogen": { elem1: "neptunium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, + tempHigh: 55, + category: "powders", + state: "solid", + density: 5000, + stateHighName: "neptunium_hexafluoride_gas", + forceAutoGen: true, + hidden: true +} + + +elements.neptunium_hexafluoride_gas = { + behavior: behaviors.GAS, + state: "gas", + density: 14.591, + reactions: { + "hydrogen": { elem1: "neptunium_tetrafluoride", elem2: "hydrogen_fluoride" } + }, +} + + +runAfterLoad(function() { + reactList("neptunium_hexafluoride", eLists.WATER, { "elem1": "neptunium_tetrafluoride", elem2: "hydrofluoric_acid" }); + reactList("neptunium_hexafluoride_gas", eLists.WATER, { "elem1": "neptunium_tetrafluoride", elem2: "hydrofluoric_acid" }); +}); @@ -3303,18 +5430,56 @@ let defaultBaseGasReactions = { } -createAcid("francium_hydroxide",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),["#863bff","#4d00ca","#897b9e"],true,true,100,100,0,1000,1200,1) +createAcid("francium_hydroxide",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),[blendColors("#863bff","#ff0000"),blendColors("#4d00ca","#00ff00"),blendColors("#897b9e","#0000ff")],true,true,100,100,0,1000,1200,1,"FRANCIUM","base") + +eListAddIon("HYDROXIDE",["francium_hydroxide","francium_hydroxide_gas"],"base"); + +eListAdd("BASE", []); + function acidNeutralize(base) { - for(let i = 0; i < trueAcids.length; i++) + for(let i = 0; i < eLists.ACID.length; i++) { - elements[trueAcids[i]].reactions[base] = { "elem1":"neutral_acid", "elem2":null }; + elements[eLists.ACID[i]].reactions[base] = { "elem1":"neutral_acid", "elem2":null }; } - for(let i = 0; i < trueAcidGases.length; i++) + for(let i = 0; i < eLists.ACIDGAS.length; i++) { - elements[trueAcidGases[i]].reactions[base] = { "elem1":"hydrogen", "elem2":null }; + elements[eLists.ACIDGAS[i]].reactions[base] = { "elem1":"hydrogen", "elem2":null }; } + eLists.BASE.push(base); + if(eLists.HYDROGEN.indexOf(base) >= 0) + { + eLists.HYDROGEN.splice(eLists.HYDROGEN.indexOf(base),1); + } + if(elements[base].salt) + for(i in elements[base].salt) + { + if(elements[base].salt[i]) + { + if(elements[base].salt[i].components.indexOf("HYDROGEN") >= 0) + { + elements[base].salt[i].components.splice(elements[base].salt[i].components.indexOf("HYDROGEN"),1); + } + } + } +} + + +acidNeutralize("radium_hydroxide"); +acidNeutralize("actinium_hydroxide"); +acidNeutralize("protactinium_hydroxide"); + + +elements.caustic_soda = { + color: "#ffe8ff", + behavior: behaviors.CAUSTIC, + category: "powders", + tempHigh: 323, + state: "solid", + density: 2130, + hidden: true, + alias: "sodium hydroxide powder" } acidNeutralize("sodium_hydride"); @@ -3325,21 +5490,70 @@ acidNeutralize("molten_sodium_methoxide"); elements.francium_hydroxide.breakInto = "francium_hydroxide"; elements.francium_hydroxide_gas.breakInto = "francium_hydroxide_gas"; -delete elements.francium_hydroxide.burn; -delete elements.francium_hydroxide_gas.burn; acidNeutralize("francium_hydroxide"); acidNeutralize("francium_hydroxide_gas"); -createAcid("sodium_hydroxide",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),["#fc3bff","#c000ca","#9b7b9e"],false,true,100,100,0,1000,1050,1); +createAcid("sodium_hydroxide",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),["#fc3bff","#c000ca","#9b7b9e"],false,true,100,100,0,1000,1050,1,"SODIUM","base"); acidNeutralize("sodium_hydroxide"); acidNeutralize("sodium_hydroxide_gas"); +eListAddIon("HYDROXIDE",["sodium_hydroxide","sodium_hydroxide_gas"],"base"); -createAcid("potassium_hydroxide",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),["#3bc4ff","#0062ca","#7b949e"],false,true,100,100,0,1000,1075,1); +eLists.CAUSTIC.push("caustic_soda"); +acidNeutralize("caustic_soda"); +elements.caustic_soda.ignore = elements.sodium_hydroxide.ignore; +acidIgnore(["caustic_soda"]); + +eListAddIon("SODIUM",["caustic_soda","molten_caustic_soda"],"base"); +eListAddIon("HYDROXIDE",["caustic_soda","molten_caustic_soda"],"base"); +eListAdd("COMPOUND","caustic_soda"); + +elements.caustic_soda.behavior = behaviors.CAUSTIC; +if(!elements.caustic_soda.reactions) +{ + elements.caustic_soda.reactions = {}; +} +elements.caustic_soda.reactions["water"] = { elem1:"sodium_hydroxide", elem2:null }; +elements.caustic_soda.reactions["salt_water"] = { elem1:"sodium_hydroxide", elem2:null }; +elements.caustic_soda.reactions["sugar_water"] = { elem1:"sodium_hydroxide", elem2:null }; +elements.caustic_soda.reactions["dirty_water"] = { elem1:"sodium_hydroxide", elem2:null }; +elements.caustic_soda.reactions["seltzer"] = { elem1:"sodium_hydroxide", elem2:null }; +elements.caustic_soda.reactions["pool_water"] = { elem1:"sodium_hydroxide", elem2:null }; + +elements.sodium_hydroxide_gas.tempHigh = 150; +elements.sodium_hydroxide_gas.stateHigh = ["caustic_soda","steam"]; + +createAcid("potassium_hydroxide",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),["#3bc4ff","#0062ca","#7b949e"],false,true,100,100,0,1000,1075,1,"POTASSIUM","base"); acidNeutralize("potassium_hydroxide"); acidNeutralize("potassium_hydroxide_gas"); +eListAddIon("HYDROXIDE",["potassium_hydroxide","potassium_hydroxide_gas"],"base"); + +eLists.CAUSTIC.push("caustic_potash"); +acidNeutralize("caustic_potash"); +elements.caustic_potash.ignore = elements.potassium_hydroxide.ignore; +acidIgnore(["caustic_potash"]); -createAcid("red_mud",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),["#ab3d24","#cc5d2d","#a81b1b"],true,true,1600,1600,0,Infinity,5200,3); +eListAddIon("POTASSIUM",["caustic_potash","molten_caustic_potash"],"base"); +eListAddIon("HYDROXIDE",["caustic_potash","molten_caustic_potash"],"base"); +eListAdd("COMPOUND","caustic_potash"); + + +elements.caustic_potash.behavior = behaviors.CAUSTIC; +if(!elements.caustic_potash.reactions) +{ + elements.caustic_potash.reactions = {}; +} +elements.caustic_potash.reactions["water"] = { elem1:"potassium_hydroxide", elem2:null }; +elements.caustic_potash.reactions["salt_water"] = { elem1:"potassium_hydroxide", elem2:null }; +elements.caustic_potash.reactions["sugar_water"] = { elem1:"potassium_hydroxide", elem2:null }; +elements.caustic_potash.reactions["dirty_water"] = { elem1:"potassium_hydroxide", elem2:null }; +elements.caustic_potash.reactions["seltzer"] = { elem1:"potassium_hydroxide", elem2:null }; +elements.caustic_potash.reactions["pool_water"] = { elem1:"potassium_hydroxide", elem2:null }; + +elements.potassium_hydroxide_gas.tempHigh = 150; +elements.potassium_hydroxide_gas.stateHigh = ["caustic_potash","steam"]; + +createAcid("red_mud",structuredClone(defaultBaseReactions),structuredClone(defaultBaseGasReactions),["#ab3d24","#cc5d2d","#a81b1b"],true,true,1600,1600,0,Infinity,5200,3,"REDMUD","base"); acidNeutralize("red_mud"); acidNeutralize("red_mud_gas"); elements.red_mud.viscosity = 1000000; @@ -3349,30 +5563,29 @@ elements.red_mud.reactions.sugar_water = {"elem2":"dirty_water" }; elements.red_mud.reactions.seltzer = {"elem2":"dirty_water" }; elements.red_mud.reactions.pool_water = {"elem2":"dirty_water" }; elements.red_mud.reactions.primordial_soup = {"elem2":"dirty_water" }; -elements.potassium_hydroxide.reactions["fertilizer"] = { elem1: "niter", elem2: "ammonia"}; -elements.potassium_hydroxide_gas.reactions["fertilizer"] = { elem1: "niter", elem2: "ammonia"}; -elements.potassium_hydroxide.ignore.push("fertilizer","niter","ammonia"); -elements.potassium_hydroxide_gas.ignore.push("fertilizer","niter","ammonia"); + +acidReact("potassium_hydroxide","fertilizer","niter","ammonia",10); +acidReact("potassium_hydroxide_gas","fertilizer","niter","ammonia",10); -elements.potassium_hydroxide.reactions["carbon_dioxide"] = { elem1: "potassium_carbonate", elem2: null}; -elements.potassium_hydroxide_gas.reactions["carbon_dioxide"] = { elem1: "potassium_carbonate", elem2: null}; +acidReact("potassium_hydroxide","carbon_dioxide","potassium_carbonate",null,10); +acidReact("potassium_hydroxide_gas","carbon_dioxide","potassium_carbonate",null,10); elements.potassium_hydroxide.ignore.push("carbon_dioxide","potassium_carbonate"); elements.potassium_hydroxide_gas.ignore.push("carbon_dioxide","potassium_carbonate"); elements.salt_water.reactions["mercury"] = { elem1:["sodium_hydroxide","chlorine","hydrogen"], charged:true, chance:0.02 }; -elements.sodium_hydroxide.ignore.push("mercury"); -elements.sodium_hydroxide.ignore.push("salt_water"); +elements.sodium_hydroxide.ignore.push("mercury","chlorine","salt_water"); +elements.sodium_hydroxide_gas.ignore.push("mercury","chlorine","salt_water"); elements.potassium_salt_water.reactions["mercury"] = { elem1:["potassium_hydroxide","chlorine","hydrogen"], charged:true, chance:0.02 }; -elements.potassium_hydroxide.ignore.push("mercury"); -elements.potassium_hydroxide.ignore.push("potassium_salt_water"); +elements.potassium_hydroxide.ignore.push("mercury","chlorine","potassium_salt_water"); +elements.potassium_hydroxide_gas.ignore.push("mercury","chlorine","potassium_salt_water"); acidReact("sodium_hydroxide","bauxite","sodium_aluminate_solution","red_mud",10); acidReact("sodium_hydroxide_gas","bauxite","sodium_aluminate_solution","red_mud",10); -elements.red_mud.ignore.push("bauxite","sodium_aluminate_solution","sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); -elements.red_mud_gas.ignore.push("bauxite","sodium_aluminate_solution","sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); -elements.sodium_hydroxide.ignore.push("sodium_aluminate_solution","sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); -elements.sodium_hydroxide_gas.ignore.push("sodium_aluminate_solution","sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); +elements.red_mud.ignore.push("sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); +elements.red_mud_gas.ignore.push("sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); +elements.sodium_hydroxide.ignore.push("sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); +elements.sodium_hydroxide_gas.ignore.push("sodium_aluminate_solution_ice","sodium_aluminate","molten_sodium_aluminate","sodium_carbonate_solution","spent_sodium_aluminate_solution","spent_sodium_aluminate_solution_ice","aluminum_hydroxide","alumina","molten_alumina"); @@ -3400,10 +5613,10 @@ acidReact("hydrofluoric_acid_gas","alumina","aluminum_trifluoride","fire",0); acidReact("hydrogen_fluoride","alumina","aluminum_trifluoride","fire",0); acidReact("liquid_hydrogen_fluoride","alumina","aluminum_trifluoride","fire",0); -elements.hydrofluoric_acid.ignore.push("molten_alumina","molten_aluminum_trifluoride"); -elements.hydrofluoric_acid_gas.ignore.push("molten_alumina","molten_aluminum_trifluoride"); -elements.hydrogen_fluoride.ignore.push("molten_alumina","molten_aluminum_trifluoride"); -elements.liquid_hydrogen_fluoride.ignore.push("molten_alumina","molten_aluminum_trifluoride"); +elements.hydrofluoric_acid.ignore.push("molten_alumina","aluminum_trifluoride_gas"); +elements.hydrofluoric_acid_gas.ignore.push("molten_alumina","aluminum_trifluoride_gas"); +elements.hydrogen_fluoride.ignore.push("molten_alumina","aluminum_trifluoride_gas"); +elements.liquid_hydrogen_fluoride.ignore.push("molten_alumina","aluminum_trifluoride_gas"); acidReact("hydrofluoric_acid","aluminum_hydroxide","aluminum_trifluoride","fire",0); @@ -3412,13 +5625,21 @@ acidReact("hydrofluoric_acid_gas","aluminum_hydroxide","aluminum_trifluoride","f acidReact("hydrogen_fluoride","aluminum_hydroxide","aluminum_trifluoride","fire",0); acidReact("liquid_hydrogen_fluoride","aluminum_hydroxide","aluminum_trifluoride","fire",0); -acidReact("hydrofluoric_acid","sodium_hydroxide","sodium_fluoride","fire",0); -acidReact("hydrofluoric_acid_gas","sodium_hydroxide","sodium_fluoride","fire",0); -acidReact("hydrofluoric_acid","sodium_hydroxide_gas","sodium_fluoride","fire",0); -acidReact("hydrofluoric_acid_gas","sodium_hydroxide_gas","sodium_fluoride","fire",0); +acidReact("hydrofluoric_acid","sodium_hydroxide","sodium_fluoride_solution","fire",0); +acidReact("hydrofluoric_acid_gas","sodium_hydroxide","sodium_fluoride_solution","fire",0); +acidReact("hydrofluoric_acid","sodium_hydroxide_gas","sodium_fluoride_solution","fire",0); +acidReact("hydrofluoric_acid_gas","sodium_hydroxide_gas","sodium_fluoride_solution","fire",0); + +acidReact("acid","sodium_hydroxide","salt_water",null,0); +acidReact("acid_gas","sodium_hydroxide","salt_water",null,0); +acidReact("acid","sodium_hydroxide_gas","salt_water",null,0); +acidReact("acid_gas","sodium_hydroxide_gas","salt_water",null,0); + +acidReact("acid","potassium_hydroxide","potassium_salt_water",null,0); +acidReact("acid_gas","potassium_hydroxide","potassium_salt_water",null,0); +acidReact("acid","potassium_hydroxide_gas","potassium_salt_water",null,0); +acidReact("acid_gas","potassium_hydroxide_gas","potassium_salt_water",null,0); -elements.sodium_hydroxide.ignore.push("sodium_fluoride"); -elements.sodium_hydroxide_gas.ignore.push("sodium_fluoride"); elements.sodium_hydroxide.ignore.push("sodium_methoxide","methanol"); @@ -3432,10 +5653,9 @@ acidReact("fluoroboric_acid","sodium_hydroxide_gas","sodium_tetrafluoroborate",n acidReact("fluoroboric_acid_gas","sodium_hydroxide_gas","sodium_tetrafluoroborate",null,50); -acidNeutralize("sodium_hydride"); -elements.bless.reactions["FOOF"] = {elem2: "oxygen"}; -elements.bless.reactions["solid_FOOF"] = {elem2: "oxygen"}; +elements.bless.reactions["foof"] = {elem2: "oxygen"}; +elements.bless.reactions["solid_foof"] = {elem2: "oxygen"}; elements.bless.reactions["fluorine"] = {elem2: null}; elements.bless.reactions["liquid_fluorine"] = {elem2: null}; elements.bless.reactions["fluorine_ice"] = {elem2: null}; @@ -3465,10 +5685,84 @@ elements.bless.reactions["sulfur_dioxide_ice"] = {elem2: "oxygen"}; elements.bless.reactions["hydrogen_sulfide"] = {elem2: "hydrogen"}; elements.bless.reactions["liquid_hydrogen_sulfide"] = {elem2: "hydrogen"}; elements.bless.reactions["rocket_fuel"] = {elem2: null}; +elements.bless.reactions["diborane"] = {elem2: "hydrogen"}; +elements.bless.reactions["pentaborane"] = {elem2: "hydrogen"}; +elements.bless.reactions["decaborane"] = {elem2: "hydrogen"}; +elements.bless.reactions["sodium_hydride"] = {elem2: "hydrogen"}; +elements.bless.reactions["sodium_borohydride"] = {elem2: "hydrogen"}; +elements.bless.reactions["sodium_borohydride_solution"] = {elem2: "water"}; +elements.bless.reactions["uraninite"] = {elem2: "rock"}; +elements.bless.reactions["yellowcake_solution"] = {elem2: ["rock","hydrogen","rock","hydrogen","rock","hydrogen","baked_batter","hydrogen"]}; +elements.bless.reactions["yellowcake"] = {elem2: ["rock","rock","rock","baked_batter"]}; +elements.bless.reactions["depleted_uranium"] = {elem2: "rock"}; +elements.bless.reactions["enriched_uranium"] = {elem2: "rock"}; +elements.bless.reactions["uranium_dioxide"] = {elem2: "rock"}; +elements.bless.reactions["depleted_uranium_dioxide"] = {elem2: "rock"}; +elements.bless.reactions["enriched_uranium_dioxide"] = {elem2: "rock"}; +elements.bless.reactions["uranium_tetrafluoride"] = {elem2: "rock"}; +elements.bless.reactions["depleted_uranium_tetrafluoride"] = {elem2: "rock"}; +elements.bless.reactions["enriched_uranium_tetrafluoride"] = {elem2: "rock"}; +elements.bless.reactions["uranium_hexafluoride"] = {elem2: "rock"}; +elements.bless.reactions["depleted_uranium_hexafluoride"] = {elem2: "rock"}; +elements.bless.reactions["enriched_uranium_hexafluoride"] = {elem2: "rock"}; +elements.bless.reactions["stable_uranium_hexafluoride"] = {elem2: "stable_uranium"}; +elements.bless.reactions["molten_depleted_uranium"] = {elem2: "magma"}; +elements.bless.reactions["molten_enriched_uranium"] = {elem2: "magma"}; +elements.bless.reactions["molten_uranium_dioxide"] = {elem2: "magma"}; +elements.bless.reactions["molten_depleted_uranium_dioxide"] = {elem2: "magma"}; +elements.bless.reactions["molten_enriched_uranium_dioxide"] = {elem2: "magma"}; +elements.bless.reactions["molten_uranium_tetrafluoride"] = {elem2: "magma"}; +elements.bless.reactions["molten_depleted_uranium_tetrafluoride"] = {elem2: "magma"}; +elements.bless.reactions["molten_enriched_uranium_tetrafluoride"] = {elem2: "magma"}; +elements.bless.reactions["uranium_hexafluoride_gas"] = {elem2: "rock"}; +elements.bless.reactions["depleted_uranium_hexafluoride_gas"] = {elem2: "rock"}; +elements.bless.reactions["enriched_uranium_hexafluoride_gas"] = {elem2: "rock"}; +elements.bless.reactions["stable_uranium_hexafluoride_gas"] = {elem2: "stable_uranium"}; +elements.bless.reactions["neptunium"] = {elem2: "rock"}; +elements.bless.reactions["molten_neptunium"] = {elem2: "rock"}; +elements.bless.reactions["enriched_uranium_hexafluoride_gas"] = {elem2: "rock"}; +elements.bless.reactions["radium"] = {elem2: null}; +elements.bless.reactions["molten_radium"] = {elem2: null}; +elements.bless.reactions["actinium"] = {elem2: null}; +elements.bless.reactions["molten_actinium"] = {elem2: null}; +elements.bless.reactions["thorium"] = {elem2: "rock"}; +elements.bless.reactions["molten_thorium"] = {elem2: "magma"}; +elements.bless.reactions["thorium_dioxide"] = {elem2: "rock"}; +elements.bless.reactions["molten_thorium_dioxide"] = {elem2: "magma"}; +elements.bless.reactions["thorium_tetrafluoride"] = {elem2: "rock"}; +elements.bless.reactions["molten_thorium_tetrafluoride"] = {elem2: "magma"}; +elements.bless.reactions["protactinium"] = {elem2: "rock"}; +elements.bless.reactions["molten_protactinium"] = {elem2: "magma"}; +elements.bless.reactions["neptunium"] = {elem2: "rock"}; +elements.bless.reactions["molten_neptunium"] = {elem2: "magma"}; +elements.bless.reactions["neptunium_hexafluoride"] = {elem2: "stable_neptunium"}; +elements.bless.reactions["neptunium_hexafluoride_gas"] = {elem2: "stable_neptunium"}; +elements.bless.reactions["plutonium"] = {elem2: "rock"}; +elements.bless.reactions["molten_plutonium"] = {elem2: "magma"}; +elements.bless.reactions["plutonium_dioxide"] = {elem2: "rock"}; +elements.bless.reactions["molten_plutonium_dioxide"] = {elem2: "magma"}; +elements.bless.reactions["plutonium_tetrafluoride"] = {elem2: "rock"}; +elements.bless.reactions["molten_plutonium_tetrafluoride"] = {elem2: "magma"}; +elements.bless.reactions["plutonium_hexafluoride"] = {elem2: "rock"}; +elements.bless.reactions["plutonium_hexafluoride_gas"] = {elem2: "magma"}; +elements.bless.reactions["stable_plutonium_hexafluoride"] = {elem2: "stable_plutonium"}; +elements.bless.reactions["stable_plutonium_hexafluoride_gas"] = {elem2: "stable_plutonium"}; +elements.bless.reactions["americium"] = {elem2: "rock"}; +elements.bless.reactions["molten_americium"] = {elem2: "magma"}; +elements.bless.reactions["curium"] = {elem2: "rock"}; +elements.bless.reactions["molten_curium"] = {elem2: "magma"}; +elements.bless.reactions["berkelium"] = {elem2: "rock"}; +elements.bless.reactions["molten_berkelium"] = {elem2: "magma"}; +elements.bless.reactions["californium"] = {elem2: "rock"}; +elements.bless.reactions["molten_californium"] = {elem2: "magma"}; +elements.bless.reactions["einsteinium"] = {elem2: "rock"}; +elements.bless.reactions["molten_einsteinium"] = {elem2: "magma"}; +elements.bless.reactions["fermium"] = {elem2: "rock"}; +elements.bless.reactions["molten_fermium"] = {elem2: "magma"}; -elements.FOOF.ignore.push("foof_grass","foof_grass_seed"); -elements.solid_FOOF.ignore.push("foof_grass","foof_grass_seed"); +elements.foof.ignore.push("foof_grass","foof_grass_seed"); +elements.solid_foof.ignore.push("foof_grass","foof_grass_seed"); elements.fluorine.ignore.push("foof_grass","foof_grass_seed"); elements.liquid_fluorine.ignore.push("foof_grass","foof_grass_seed"); @@ -3510,10 +5804,10 @@ elements.foof_grass= { tempHigh: -57, stateHigh: ["oxygen","fluorine","explosion"], tempLow: -200, - stateLow: "solid_FOOF", + stateLow: "solid_foof", burn:50, burnTime:20, - breakInto: "FOOF", + breakInto: "foof", category:"life", state: "solid", density: 1400, @@ -3533,14 +5827,421 @@ elements.foof_grass_seed = { tempHigh: -57, stateHigh: ["oxygen","fluorine","explosion"], tempLow: -200, - stateLow: "solid_FOOF", + stateLow: "solid_foof", burn: 50, burnTime: 20, category: "life", state: "solid", density: 1400, - breakInto: "FOOF", + breakInto: "foof", hidden: true, cooldown: defaultCooldown, seed: true -}; \ No newline at end of file +}; + +elements.centrifuge= { + color: "#89888f", + category: "machines", + tempHigh: 1455.5, + stateHigh: "molten_steel", + tick: function(pixel) { + if(!pixel.del) + { + for(let i = 0; i < 10; i++) + { + for(let j = 1; j < 10; j++) + { + let x = [pixel.x + i, pixel.x - j, pixel.x - i, pixel.x + j]; + let y = [pixel.y + j, pixel.y + i, pixel.y - j, pixel.y - i]; + var oob = outOfBounds(x[0],y[0]) || outOfBounds(x[1],y[1]) || outOfBounds(x[2],y[2]) || outOfBounds(x[3],y[3]); + if(!oob) + { + pixels = [null,null,null,null] + let immovable = false; + for(let k = 0; k < 4; k++) + { + pixels[k] = !isEmpty(x[k],y[k],true) ? pixelMap[x[k]][y[k]] : null; + if(pixels[k] && !elements[pixels[k].element].movable) + { + immovable = true; + } + } + if(!immovable) + { + for(let k = 0; k < 4; k++) + { + if(pixelMap[x[k]][y[k]]) + { + delete pixelMap[x[k]][y[k]]; + } + } + for(let k = 0; k < 4; k++) + { + if(pixels[k] && !pixels[k].del) + { + pixels[k].x = x[(k+1)%4]; + pixels[k].y = y[(k+1)%4]; + movePixel(pixels[k],x[(k+1)%4], y[(k+1)%4]); + } + } + + for(let k = 0; k < 4; k++) + { + if(pixels[k] && elements[pixels[k].element].onCentrifuge) + { + elements[pixels[k].element].onCentrifuge(pixels[k]); + } + } + } + } + } + } + } + doDefaults(pixel); + }, + movable: false +}; + + +for(let i = 0; i < eLists.INSOLUBLE.length; i++) +{ + eListAdd("COMPOUND",eLists.INSOLUBLE[i]); +} + +eListAdd("COMPOUND","water"); +eListAddIon("HYDROGEN","water"); +eListAddIon("HYDROXIDE","water"); + +eListAdd("COMPOUND","methanol"); +eListAddIon("HYDROGEN","methanol"); +eListAddIon("METHOXIDE","methanol"); + +eListAdd("COMPOUND","vinegar"); +eListAdd("ACID","vinegar"); +eListAddIon("HYDROGEN","vinegar","acid"); +eListAddIon("ACETATE","vinegar","acid"); + +createSalt("baking_soda","baking_soda_solution",["#f2f2f2","#e0e0e0"],"#7494db",false,true,292,-2,102,3980,1026,"SODIUM","BICARBONATE"); + +delete elements["molten_baking_soda"]; + +eListAdd("COMPOUND","baking_soda"); +eListAdd("BASE","baking_soda"); +eListAdd("COMPOUND","baking_soda_solution"); +eListAdd("BASE","baking_soda_solution"); +eListAddIon("SODIUM","baking_soda","base"); +eListAddIon("BICARBONATE","baking_soda","base"); +eListAddIon("SODIUM","baking_soda_solution","base"); +eListAddIon("BICARBONATE","baking_soda_solution","base"); + +elements["baking_soda"].reactions["sodium_hydroxide"] = {elem1: "sodium_carbonate_solution", elem2: "null"}; +elements["baking_soda"].reactions["sodium_hydroxide_gas"] = {elem1: "sodium_carbonate_solution", elem2: "null"}; +elements["baking_soda_solution"].reactions["sodium_hydroxide"] = {elem1: "sodium_carbonate_solution", elem2: "null"}; +elements["baking_soda_solution"].reactions["sodium_hydroxide_gas"] = {elem1: "sodium_carbonate_solution", elem2: "null"}; + +createSalt("sodium_acetate","sodium_acetate_solution",["#f2f2f2","#e0e0e0"],"#7ea2f2",false,true,292,-2,102,3980,1028,"SODIUM","ACETATE"); + +eListAdd("ACID","seltzer"); +eListAddIon("HYDROGEN","seltzer","acid"); +eListAddIon("CARBONATE","seltzer","acid"); +eListAddIon("HYDROGEN","seltzer","bicarbonate"); +eListAddIon("BICARBONATE","seltzer","bicarbonate"); + +eListAdd("ACID","soda"); +eListAddIon("HYDROGEN","soda","acid"); +eListAddIon("CARBONATE","soda","acid"); +eListAddIon("HYDROGEN","soda","bicarbonate"); +eListAddIon("BICARBONATE","soda","bicarbonate"); + +eListAdd("ACID","pilk"); +eListAddIon("HYDROGEN","pilk","acid"); +eListAddIon("CARBONATE","pilk","acid"); +eListAddIon("HYDROGEN","pilk","bicarbonate"); +eListAddIon("BICARBONATE","pilk","bicarbonate"); + + +eListAdd("COMPOUND","copper_sulfate"); +eListAddIon("COPPERII","copper_sulfate"); +eListAddIon("SULFATE","copper_sulfate"); + +eListAddIon("COPPERII","molten_copper_sulfate"); +eListAddIon("SULFATE","molten_copper_sulfate"); + +function listMatching(list) +{ + let result = []; + for(let i in elements) + { + let valid = false; + if(elements[i].salt) + { + for(let ii in elements[i].salt) + { + let valid2 = true; + + for(let j = 0; j < list.length; j++) + { + if(!elements[i].salt[ii].components.includes(list[j])) + { + valid2 = false; + continue; + } + } + + for(let j = 0; j < elements[i].salt[ii].components.length; j++) + { + if(!list.includes(elements[i].salt[ii].components[j])) + { + valid2 = false; + continue; + } + } + valid = valid || valid2; + } + } + if(valid) + { + result.push(i); + } + } + return result; +} + +function listMatching2(list, elem) +{ + let result = []; + for(let i = 0; i < elem.length; i++) + { + let valid = true; + for(let j = 0; j < list.length; j++) + { + if(!eLists[list[j]].includes(elem[i])) + { + valid = false; + break; + } + } + if(valid) + { + result.push(elem[i]); + } + } + return result; +} + +runAfterAutogen(function() { + for(let ii = 0; ii < eLists.WATER.length; ii++) + { + let i = eLists.WATER[ii]; + if(!elements[i]) + { + console.log(i); + continue; + } + if(!elements[i].reactions) + { + elements[i].reactions = {}; + } + for(let jj = 0; jj < eLists.WATER.length; jj++) + { + let j = eLists.WATER[jj]; + if(i != j && elements[i].salt && elements[j].salt) + { + let priorityA = -Infinity; + let priorityB = -Infinity; + for(let iii in elements[i].salt) + { + if(priorityA > elements[i].salt[iii].priority) + { + continue; + } + for(let jjj in elements[j].salt) + { + if(priorityB > elements[j].salt[jjj].priority) + { + continue; + } + if(elements[i].salt[iii].components.length > 1 && elements[j].salt[jjj].components.length > 1) + { + let match1 = listMatching([elements[i].salt[iii].components[0],elements[j].salt[jjj].components[1]]); + let match2 = listMatching([elements[i].salt[iii].components[1],elements[j].salt[jjj].components[0]]); + let match3 = listMatching([elements[i].salt[iii].components[0],elements[j].salt[jjj].components[0]]); + let match4 = listMatching([elements[i].salt[iii].components[1],elements[j].salt[jjj].components[1]]); + + let water1 = listMatching2(["WATER"],match1); + let water2 = listMatching2(["WATER"],match2); + let water3 = listMatching2(["WATER"],match3); + let water4 = listMatching2(["WATER"],match4); + let salt1 = listMatching2(["INSOLUBLE"],match1); + let salt2 = listMatching2(["INSOLUBLE"],match2); + let salt3 = listMatching2(["INSOLUBLE"],match3); + let salt4 = listMatching2(["INSOLUBLE"],match4); + + let productsA = []; + let productsB = []; + + if(water1.length > 0 && salt2.length > 0) + { + productsA = productsA.concat(water1); + productsB = productsB.concat(salt2); + } + if(water2.length > 0 && salt1.length > 0) + { + productsA = productsA.concat(water2); + productsB = productsB.concat(salt1); + } + + + if(water3.length > 0 && salt4.length > 0) + { + productsA = productsA.concat(water3); + productsB = productsB.concat(salt4); + } + if(water4.length > 0 && salt3.length > 0) + { + productsA = productsA.concat(water4); + productsB = productsB.concat(salt3); + } + + if(productsA.length > 0 && productsB.length > 0) + { + acidReact(i,j,productsA,productsB,0); + console.log("precipitate"); + console.log(i); + console.log(j); + console.log(productsA); + console.log(productsB); + priorityA = elements[i].salt[iii].priority; + priorityB = elements[j].salt[jjj].priority; + continue; + } + + + if(elements[i].salt[iii].components[0] == elements[j].salt[jjj].components[0] || elements[i].salt[iii].components[1] == elements[j].salt[jjj].components[1] || + elements[i].salt[iii].components[1] == elements[j].salt[jjj].components[0] || elements[i].salt[iii].components[0] == elements[j].salt[jjj].components[1]) + { + continue; + } + + productsA = []; + productsB = []; + + if(water1.length > 0 && water2.length > 0) + { + productsA = productsA.concat(water1); + productsB = productsB.concat(water2); + } + + if(water3.length > 0 && water4.length > 0) + { + productsA = productsA.concat(water3); + productsB = productsB.concat(water4); + } + + + if(productsA.length > 0 && productsB.length > 0) + { + elements[i].reactions[j] = { elem1:productsA, elem2:productsB, chance:0.001, oneway:true }; + console.log(i); + console.log(j); + console.log(productsA); + console.log(productsB); + priorityA = elements[i].salt[iii].priority; + priorityB = elements[j].salt[jjj].priority; + } + } + } + } + } + } + } + let acids = eLists.ACID.concat(eLists.ACIDGAS).concat(eLists.AMPHOTERIC); + for(let ii = 0; ii < acids.length; ii++) + { + let i = acids[ii]; + if(!elements[i]) + { + console.log(i); + continue; + } + if(!elements[i].reactions) + { + elements[i].reactions = {}; + } + let bases = eLists.BASE.concat(eLists.AMPHOTERIC); + for(let jj = 0; jj < bases.length; jj++) + { + let j = bases[jj]; + if(i != j && elements[i].salt && elements[j].salt && elements[i].salt["acid"].components.length > 1 && elements[j].salt["base"].components.length > 1) + { + let productsA = []; + let productsB = []; + + let match = [listMatching([elements[i].salt["acid"].components[0],elements[j].salt["base"].components[1]]), + listMatching([elements[i].salt["acid"].components[1],elements[j].salt["base"].components[0]]), + listMatching([elements[i].salt["acid"].components[0],elements[j].salt["base"].components[0]]), + listMatching([elements[i].salt["acid"].components[1],elements[j].salt["base"].components[1]])]; + + let compounds = [listMatching2(["COMPOUND"],match[0]),listMatching2(["COMPOUND"],match[1]),listMatching2(["COMPOUND"],match[2]),listMatching2(["COMPOUND"],match[3])]; + + + for(let n = 0; n < compounds.length; n++) + { + let m = n-1; + if(n%2 == 0) + { + m = n+1; + } + if(compounds[n].includes("water")) + { + let water1 = listMatching2(["WATER"],match[m]); + if(water1.length > 0) + { + compounds[m] = water1; + compounds[n].splice(compounds[n].indexOf("water"),1); + if(compounds[n].length == 0) + compounds[n] = [null]; + } + } + } + + if(compounds[0].length > 0 && compounds[1].length > 0) + { + productsA = productsA.concat(compounds[0]); + productsB = productsB.concat(compounds[1]); + } + if(compounds[2].length > 0 && compounds[3].length > 0) + { + productsA = productsA.concat(compounds[2]); + productsB = productsB.concat(compounds[3]); + } + if(productsA.length > 0 && productsB.length > 0) + { + let reactionTemp = 0; + if(elements[i].salt["acid"].components.includes("FLUORIDE") && elements[i].salt["acid"].components.includes("HYDROGEN")) + { + if(productsB[0] === null && productsB.length === 1) + { + productsB = ["fire"]; + } + else + { + productsB.push("fire"); + } + } + if((elements[i].salt["acid"].components.includes("SULFATE") || elements[i].salt["acid"].components.includes("CHLORIDE")) && elements[i].salt["acid"].components.includes("HYDROGEN")) + { + reactionTemp = 50; + } + acidReact(i,j,productsA,productsB,reactionTemp); + console.log("neutral"); + console.log(i); + console.log(j); + console.log(compounds); + console.log(productsA); + console.log(productsB); + } + } + } + } +}); \ No newline at end of file diff --git a/mods/mixture.js b/mods/mixture.js index eada089f..491f931e 100644 --- a/mods/mixture.js +++ b/mods/mixture.js @@ -20,7 +20,6 @@ function whenAvailable(names, callback) { } }, interval); } -var runAfterAutogenMod = "mods/runAfterAutogen2.js"; function getName(elementList) { @@ -274,11 +273,14 @@ function mixture(elementList) reactions: {}, }; - elementCount++; - elements[name].hidden = true; - hiddenCount++; - elements[name].id = nextid++; - document.getElementById("extraInfo").innerHTML = "
There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.
©2021-" + new Date().getFullYear() + ". All Rights Reserved. R74n
"; //update extra info counts (and the copyright year, due to the method used) + if(typeof elementCount !== 'undefined') + { + elementCount++; + elements[name].hidden = true; + hiddenCount++; + elements[name].id = nextid++; + document.getElementById("extraInfo").innerHTML = "There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.
©2021-" + new Date().getFullYear() + ". All Rights Reserved. R74n
"; //update extra info counts (and the copyright year, due to the method used) + } } else if(!elements[name].mixture) { @@ -498,15 +500,11 @@ function isValidMixture(elementList) return true; } -if(enabledMods.includes(runAfterAutogenMod)){ -whenAvailable(["runAfterAutogen"], function() { - runAfterAutogen(function() { - mixture2(["water","blood"]); - mixture2(["water","cough_drugs","cellulose_gum","carbon_dioxide","sugar","milk"]); - - }); +runAfterAutogen(function() { + mixture2(["water","blood"]); + mixture2(["water","cough_drugs","cellulose_gum","carbon_dioxide","sugar","milk"]); + }); -} predefinedColors = [ diff --git a/mods/mixtureII.js b/mods/mixtureII.js new file mode 100644 index 00000000..b69d6381 --- /dev/null +++ b/mods/mixtureII.js @@ -0,0 +1,440 @@ +function getName(elementList) +{ + if(elementList.filter(function(item, pos, self) { + return self.indexOf(item) == pos; + }).length == 1) + { + return elementList[0]; + } + let name = elementList.join("_") + "_mixture"; + if(nameList[name]) + { + name = nameList[name]; + }; + return name; +} + + +function makeColors(elementList) +{ + return elementList.map((c) => elements[c].color instanceof Array ? elements[c].color : [elements[c].color]); +} + +function mixture(elementList) +{ + elementList.sort(); + + let name = getName(elementList); + + if(!elements[name]) + { + elements[name] = true; + let minTempHigh = Infinity; + let stateHigh = null; + let indexStateHigh = -1; + + let maxTempLow = -Infinity; + let stateLow = null; + let indexStateLow = -1; + + + for(let i = 0; i < elementList.length; i++) + { + if(elements[elementList[i]]) + { + if(typeof elements[elementList[i]].tempHigh === "number" && elements[elementList[i]].stateHigh) + { + if(elements[elementList[i]].tempHigh < minTempHigh) + { + minTempHigh = elements[elementList[i]].tempHigh; + indexStateHigh = i; + stateHigh = elements[elementList[i]].stateHigh; + } + } + + if(typeof elements[elementList[i]].tempLow === "number" && elements[elementList[i]].stateLow) + { + if(elements[elementList[i]].tempLow > maxTempLow) + { + maxTempLow = elements[elementList[i]].tempLow; + indexStateLow = i; + stateLow = elements[elementList[i]].stateLow; + } + } + } + } + + let elementList2 = elementList.slice(); + let elementHigh = null; + if(indexStateHigh >= 0) + { + if(stateHigh instanceof Array) + { + elementHigh = []; + for(let i = 0; i < stateHigh.length; i++) + { + elementList2[indexStateHigh] = stateHigh[i]; + elementHigh.push(mixture(elementList2)); + } + } + else + { + elementList2[indexStateHigh] = stateHigh; + elementHigh = mixture(elementList2); + } + } + + let elementList3 = elementList.slice(); + let elementLow = null; + if(indexStateLow >= 0) + { + if(stateLow instanceof Array) + { + elementLow = []; + for(let i = 0; i < stateLow.length; i++) + { + elementList3[indexStateLow] = stateLow[i]; + elementLow.push(mixture(elementList3)); + } + } + else + { + elementList3[indexStateLow] = stateLow; + elementLow = mixture(elementList3); + } + } + + if(elementHigh instanceof Array && elementHigh.length === 0) + { + minTempHigh = Infinity; + elementHigh = null; + } + if(elementLow instanceof Array && elementLow.length === 0) + { + maxTempLow = -Infinity; + elementLow = null; + } + + let colors = makeColors(elementList.slice()); + let colors2 = []; + let maxLength = Math.max(...(colors.map((c) => c.length))); + + for(let i = 0; i < maxLength; i++) + { + let colors3 = []; + for(let j = 0; j < colors.length; j++) + { + colors3.push(toObject(colors[j][i%colors[j].length])); + } + colors2.push(averageRGB(colors3)); + } + let temp = airTemp; + if(maxTempLow < airTemp && minTempHigh > airTemp) + { + + } + else if(maxTempLow > -Infinity && minTempHigh < Infinity) + { + temp = (maxTempLow + minTempHigh)/2; + } + else if(maxTempLow > -Infinity) + { + temp = maxTempLow+20; + } + else if(minTempHigh < Infinity) + { + temp = Math.max(minTempHigh-20,absoluteZero); + } + + + let movable = elementList.some((c) => elements[c].movable || elements[c].movable === undefined); + + let density = elementList.map((c) => elements[c].density ? elements[c].density : 0).reduce((a,b)=>a+b)/elementList.length; + let stain = elementList.map((c) => elements[c].stain ? elements[c].stain : 0).reduce((a,b)=>a+b)/elementList.length; + + let states = elementList.map((c) => elements[c].state); + if(states.includes("gas")) + { + state = "gas"; + density = 0; + } + else if(!movable) + { + state = "solid"; + } + else if(states.includes("liquid")) + { + state = "liquid"; + } + else + { + state = "solid"; + } + + elements[name] = { + color: colors2.length == 1 ? colors2[0] : colors2, + colorObject: colors2.length == 1 ? toObject(colors2[0]) :colors2.map((c) => toObject(c)), + tick: function(pixel) { + mixtureBehavior(pixel, elementList); + }, + tempHigh: minTempHigh, + stateHigh: elementHigh, + tempLow: maxTempLow, + stateLow: elementLow, + temp: temp, + category: "mixture", + mixture: elementList, + movable: movable, + density: density, + state: state, + stain: stain, + reactions: {}, + isGas: state === "gas" + }; + + for(let i in elements) + { + for(let j = 0; j < elementList.length; j++) + { + if(elements[i].reactions && elements[i].reactions[elementList[j]] !== undefined) + { + if(name === i) + { + continue; + } + elements[i].reactions[name] = {elem2: name, func: function(a,b){mixtureReact(b,a,elementList)}} + } + if(elements[elementList[j]].reactions && elements[elementList[j]].reactions[i] !== undefined) + { + if(name === i) + { + continue; + } + elements[name].reactions[i] = {elem2: i, func: function(a,b){mixtureReact(a,b,elementList)}} + } + } + } + if(typeof elementCount !== 'undefined') + { + elementCount++; + elements[name].hidden = true; + elements[name].id = nextid++; + if (elements[name].hidden && (!settings["unhide"] || ( settings["unhide"]===2 && !settings.unlocked[name] ))) { hiddenCount++; } + else + { + var categoryDiv = document.getElementById("category-mixture"); + if (categoryDiv == null) { + createCategoryDiv("mixture"); + } + createElementButton(name); + } + document.getElementById("extraInfo").innerHTML = "There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.
©2021-" + new Date().getFullYear() + ". All Rights Reserved. R74n
"; //update extra info counts (and the copyright year, due to the method used) + } + } + return name; +} + + +function mixtureBehavior(pixel, elementList) +{ + let prevCol = pixel.color; + let previous = pixel.element; + let elem = elementList[Math.floor(Math.random()*elementList.length)]; + if (elements[elem].tick) { // Run tick function if it exists + elements[elem].tick(pixel); + } + + if (pixel.del) {return} + + if (elements[elem].behavior) { // Parse behavior if it exists + pixelTick(pixel,elements[elem].behavior); + } + if(pixel.element === previous) + { + pixel.color = prevCol; + } +} + + +function mixtureReact(pixel, pixel2, elementList) +{ + elementList = elementList.slice(); + shuffleArray(elementList); + let previous = pixel.element; + let prevCol = pixel.color; + let previous2 = pixel2.element; + let prevCol2 = pixel2.color; + for(let i = 0; i < elementList.length; i++) + { + let elem = elementList[i]; + if(pixel.del) + { + return; + } + changePixel(pixel,elem, false); + let rr1 = false; + if (elements[elem].reactions !== undefined && elements[elem].reactions[pixel2.element] !== undefined) { + rr1 = reactPixels(pixel,pixel2); + } + if (!rr1 && elements[pixel2.element].reactions !== undefined && elements[pixel2.element].reactions[elem] !== undefined && !elements[pixel2.element].reactions[elem].oneway) { + reactPixels(pixel2,pixel); + } + if(pixel2.element === previous2) + { + pixel2.color = prevCol2; + } + if(!pixel.del && pixel.element === elem) + { + } + else if(pixel.del) + { + elementList.splice(elementList.indexOf(elem),1); + createPixel(mixture(elementList),pixel.x,pixel.y); + currentPixels[currentPixels.length-1].temp = pixel.temp; + return; + } + else + { + elementList.splice(elementList.indexOf(elem),1) + changePixel(pixel, mixture(elementList.concat([pixel.element])), false); + return; + } + if(pixel2.del) + { + return; + } + } + changePixel(pixel, previous, false); + pixel.color = prevCol; +} + +nameList = []; + +function toObject(color) +{ + color = color.match(/\d+/g); + return { + r: parseInt(color[0]), + g: parseInt(color[1]), + b: parseInt(color[2]) + }; +} + +function averageRGB2(colors) +{ + return toObject(averageRGB(colors.map((d) => (toObject(d))))); +} + +function averageRGB(rgblist) { + var r = 0; + var g = 0; + var b = 0; + for (var i = 0; i < rgblist.length; i++) { + var rgb = rgblist[i]; + r += parseInt(rgb.r); + g += parseInt(rgb.g); + b += parseInt(rgb.b); + } + r = Math.floor(r/rgblist.length); + g = Math.floor(g/rgblist.length); + b = Math.floor(b/rgblist.length); + return "rgb("+r+","+g+","+b+")"; +} + + +function blendColors(colorA, colorB, amount = 0.5) { + const [rA, gA, bA] = colorA.match(/\w\w/g).map((c) => parseInt(c, 16)); + const [rB, gB, bB] = colorB.match(/\w\w/g).map((c) => parseInt(c, 16)); + const r = Math.round(rA + (rB - rA) * amount).toString(16).padStart(2, '0'); + const g = Math.round(gA + (gB - gA) * amount).toString(16).padStart(2, '0'); + const b = Math.round(bA + (bB - bA) * amount).toString(16).padStart(2, '0'); + return '#' + r + g + b; +} + +changePixel = function (pixel,element,changetemp=true) { + if (!elements[element]) { + pixel.invalidElement = element; + element = "unknown" + } + if(pixel.element !== element) + { + pixel.element = element; + pixel.color = pixelColorPick(pixel); + } + pixel.start = pixelTicks; + var elementInfo = elements[element]; + if (elementInfo.burning == true) { + pixel.burning = true; + pixel.burnStart = pixelTicks; + } + else if (pixel.burning && !elementInfo.burn) { + delete pixel.burning; + delete pixel.burnStart; + } + delete pixel.origColor; // remove stain + if (pixel.r && !elementInfo.rotatable) { + delete pixel.r; + } + if (pixel.flipX && !elementInfo.flippableX) { + delete pixel.flipX; + } + if (pixel.flipY && !elementInfo.flippableY) { + delete pixel.flipY; + } + // If elementInfo.flippableX, set it to true or false randomly + if (elementInfo.flipX !== undefined) { pixel.flipX = elementInfo.flipX } + else if (elementInfo.flippableX) { + pixel.flipX = Math.random() >= 0.5; + } + // If elementInfo.flippableY, set it to true or false randomly + if (elementInfo.flipY !== undefined) { pixel.flipY = elementInfo.flipY } + else if (elementInfo.flippableY) { + pixel.flipY = Math.random() >= 0.5; + } + if (elementInfo.temp !== undefined && changetemp) { + pixel.temp = elementInfo.temp; + pixelTempCheck(pixel) + } + if (pixel.con && !elementInfo.canContain) { + delete pixel.con; + } + // If elementInfo.properties, set each key to its value + if (elementInfo.properties !== undefined) { + for (var key in elementInfo.properties) { + // If it is an array or object, make a copy of it + if (typeof elementInfo.properties[key] == "object") { + pixel[key] = JSON.parse(JSON.stringify(elementInfo.properties[key])); + } + else { + pixel[key] = elementInfo.properties[key]; + } + } + } + checkUnlock(element); +} + + +elements.mixer = { + color: "#999999", + ignore: ["mixer"], + category:"machines", + insulate:true, + hardness: 1, + tick: function(pixel) { + if (!isEmpty(pixel.x-1,pixel.y,true) && !isEmpty(pixel.x+1,pixel.y,true) && isEmpty(pixel.x,pixel.y+1,false)) + { + if(elements.mixer.ignore.includes(pixelMap[pixel.x-1][pixel.y].element) || elements.mixer.ignore.includes(pixelMap[pixel.x+1][pixel.y].element)) + { + return; + } + else + { + createPixel(mixture([pixelMap[pixel.x-1][pixel.y].element,pixelMap[pixel.x+1][pixel.y].element]),pixel.x,pixel.y+1); + deletePixel(pixel.x-1,pixel.y); + deletePixel(pixel.x+1,pixel.y); + } + } + doDefaults(pixel); + }, + maxSize: 1 +}; \ No newline at end of file