Merge pull request #1293 from theenchantedsword/main

New versions for solubility.js and morechemistry.js
This commit is contained in:
slweeb 2025-10-28 07:40:37 -04:00 committed by GitHub
commit 1305f9be79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 227 additions and 19 deletions

View File

@ -1,5 +1,5 @@
/*
*Version 2.2.1
*Version 2.2.2
*/
dependOn("orchidslibrary.js", ()=>{
@ -683,23 +683,38 @@ dependOn("orchidslibrary.js", ()=>{
for(let coords of adjacentCoords){
let x = pixel.x+coords[0], y = pixel.y+coords[1];
let p2 = getPixel(x,y);
let ignore = false;
for(let item of elements[pixel.element].ignore){
//let ignore = false;
/*for(let item of elements[pixel.element].ignore){
if(p2 != null && item.startsWith("*")&&p2.element.endsWith(item.split("*")[1])){
ignore = true;
} else if (p2 != null && item.endsWith("*")&&p2.element.startsWith(item.split("*")[0])){
ignore = true;
} else if(p2 != null){
ignore = (elements[pixel.element].ignore.includes(p2.element)) ? true : ignore;
}
}*/
if(p2 != null){
let ignore = elements[pixel.element].ignore.some(item=>{
let res = false;
if(p2.element === item){
res = true;
} else if(item.startsWith("*") && p2.element.endsWith(item.slice(1))) {
res = true;
} else if(item.endsWith("*") && p2.element.startsWith(item.slice(0,-1))){
res = true;
}
if(p2 != null && !(elements[pixel.element].ignore.includes(p2.element) || ignore || p2.element == pixel.element)){
return res;
});
if(!ignore){
deletePixel(x,y);
deletePixel(pixel.x, pixel.y);
}
}
}
}
elements.acid.behavior = behaviors.LIQUID;
elements.acid.tick = acidTick;
elements.acid.ignore = elements.acid.ignore.concat(["nitric_acid", "aqua_regia", "nitrogen_dioxide", "nitric_acid_ice", "nitrogen_dioxide_ice", "acid", "chloroauric_acid", "*chloride", "*carbonate", "*acetate", "*sulfate", "*gallium", "*hydroxide", "salt", "*aluminum", "target_portal_in", "*magnesium", "*copper", "*iron", "*calcium", "sulfuric_acid", "*vinegar", "*gypsum", "*wall", "epsom_salt", "*platinum", "chloroplatinic_acid", "*sulfur*"]);
elements.acid.ignore = elements.acid.ignore.concat(["nitric_acid", "aqua_regia", "nitrogen_dioxide", "nitric_acid_ice", "nitrogen_dioxide_ice", "acid", "chloroauric_acid", "*chloride", "*carbonate", "*acetate", "*sulfate", "*gallium", "*hydroxide", "salt", "*aluminum", "target_portal_in", "*magnesium", "*copper*", "*iron", "*calcium", "sulfuric_acid", "*vinegar", "*gypsum", "*wall", "epsom_salt", "platinum", "chloroplatinic_acid", "*sulfur*", "wall", "porcelain", "plastic", "glass", "*sulfate", "*nitrate"]);
elements.nitric_acid = {
alias: "HNO₃",
behavior: behaviors.LIQUID,
@ -710,6 +725,12 @@ dependOn("orchidslibrary.js", ()=>{
stateLow: "nitric_acid_ice",
reactions: {
acid: {elem1: null, elem2: "aqua_regia"},
copper: {elem1: "hydrogen", elem2: "copper_nitrate"},
sodium: {elem1: "hydrogen", elem2: "sodium_nitrate"},
aluminum: {elem1: "hydrogen", elem2: "aluminum_nitrate"},
potassium: {elem1: "hydrogen", elem2: "potassium_nitrate"},
calcium: {elem1: "hydrogen", elem2: "calcium_nitrate"},
magnesium: {elem1: "hydrogen", elem2: "magnesium_nitrate"},
},
density: 1510,
category: "liquids",
@ -873,6 +894,8 @@ dependOn("orchidslibrary.js", ()=>{
density: 2960,
reactions: {
acid: {elem1: "magnesium_chloride", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
sulfuric_acid: {elem1: "epsom_salt", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
nitric_acid: {elem1: "magnesium_nitrate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
vinegar: {elem1: "magnesium_acetate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]}
}
}
@ -1140,11 +1163,11 @@ dependOn("orchidslibrary.js", ()=>{
alias: "CuCl₂",
solubility: {water: 0.743},
reactions: {
sodium: {elem1: "copper", elem2: "sodium_acetate"},
potassium: {elem1: "copper", elem2: "potassium_acetate"},
magnesium: {elem1: "copper", elem2: "magnesium_acetate"},
calcium: {elem1: "copper", elem2: "calcium_acetate"},
aluminum: {elem1: "copper", elem2: "aluminum_acetate"},
sodium: {elem1: "copper", elem2: "salt"},
potassium: {elem1: "copper", elem2: "potassium_salt"},
magnesium: {elem1: "copper", elem2: "magnesium_chloride"},
calcium: {elem1: "copper", elem2: "calcium_chloride"},
aluminum: {elem1: "copper", elem2: "aluminum_chloride"},
wood: {stain2: "#043023"},
},
properties: {
@ -1554,4 +1577,188 @@ dependOn("orchidslibrary.js", ()=>{
stateLow: "bismuth",
temp: 270,
};
elements.copper_nitrate = {
density: 3050,
tempHigh: 145,
stateHigh: ["oxidized_copper", "nitrogen_dioxide", "nitrogen_dioxide"],
color: ["#1717ff", "#2121ff", "#1b1bf5", "#0f0ff2", "#0707f7"],
behavior: behaviors.POWDER,
state: "solid",
category: "salts",
alias: "Cu(NO₃)₂",
solubility: {water: 1.25},
reactions: {
sodium: {elem1: "copper", elem2: "sodium_nitrate"},
potassium: {elem1: "copper", elem2: "potassium_nitrate"},
calcium: {elem1: "copper", elem2: "calcium_nitrate"},
aluminum: {elem1: "copper", elem2: "aluminum_nitrate"},
wood: {stain2: "#043023"},
ash: {elem1: "copper_carbonate", elem2: "potassium_nitrate"},
baking_soda: {elem1: "copper_carbonate", elem2: "sodium_nitrate"},
acid: {elem1: "copper_chloride", elem2: "nitric_acid"},
sulfuric_acid: {elem1: "copper_sulfate", elem2: "nitric_acid"},
},
properties: {
anhydrous: false
},
fireColor: "#19abff",
tick: function(pixel){
if(pixelTicks-pixel.start == 2 && xDown){
pixel.anhydrous = true;
let rgb = {r: 51, g: 158, b: 61};
let num = 6 - (Math.round(Math.random()*12));
for(let key in rgb){
rgb[key] += num;
}
pixel.color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
}
let multi = (pixel.temp-70)/100;
multi = (multi < 0) ? 0 : ((multi > 1) ? 1 : multi);
if(Math.random() < 0.05*multi){
pixel.anhydrous = true;
let rgb = {r: 51, g: 158, b: 61};
let num = 6 - (Math.round(Math.random()*12));
for(let key in rgb){
rgb[key] += num;
}
pixel.color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
}
if(pixel.anhydrous){
let neighbors = [];
for(let coords of squareCoords){
let x = pixel.x+coords[0], y = pixel.y+coords[1];
neighbors[neighbors.length] = (isEmpty(x,y) && !outOfBounds(x,y)) ? "air" : (!outOfBounds(x,y)) ? pixelMap[x][y].element : undefined;
}
if(neighbors.includes("air") && pixel.temp < 50 && Math.random() < 0.00035){
pixel.anhydrous = false;
let rgb = (Math.random() > 0.5) ? {r: 7, g: 7, b: 247} : {r: 26, g: 26, b: 240};
let num = 6 - (Math.round(Math.random()*12));
for(let key in rgb){
rgb[key] += num;
}
pixel.color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
} else if (neighbors.includes("steam") || neighbors.includes("water") || neighbors.includes("salt_water") || neighbors.includes("sugar_water") || neighbors.includes("dirty_water") || neighbors.includes("seltzer") || neighbors.includes("pool_water") || neighbors.includes("slush")){
pixel.anhydrous = false;
let rgb = (Math.random() > 0.5) ? {r: 7, g: 7, b: 247} : {r: 26, g: 26, b: 240};
let num = 6 - (Math.round(Math.random()*12));
for(let key in rgb){
rgb[key] += num;
}
pixel.color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
}
}
}
};
elements.sodium_nitrate = {
color: ["#f5f5f5", "#e8e8e8", "#ededed", "#e3e3e3"],
density: 2260,
category: "salts",
tempHigh: 650,
stateHigh: ["sodium", "nitrogen_dioxide"],
reactions: {
ash: {elem1: "baking_soda", elem2: "potassium_nitrate"},
potassium: {elem1: "sodium", elem2: "potassium_nitrate"},
//sulfuric_acid: {elem1: "sodium_sulfate", elem2: "nitric_acid"},
acid: {elem1: "salt", elem2: "nitric_acid"},
},
solubility: {water: 0.86},
alias: "NaNO₃",
behavior: behaviors.POWDER
};
elements.potassium_nitrate = {
color: ["#f5f5f5", "#e8e8e8", "#ededed", "#e3e3e3"],
density: 2106,
category: "salts",
tempHigh: 800,
stateHigh: ["potassium", "nitrogen_dioxide"],
reactions: {
//sulfuric_acid: {elem1: "potassium_sulfate", elem2: "nitric_acid"},
acid: {elem1: "potassium_salt", elem2: "nitric_acid"},
},
solubility: {water: 0.316},
alias: "KNO₃",
behavior: behaviors.POWDER
};
elements.magnesium_nitrate = {
color: ["#f5f5f5", "#e8e8e8", "#ededed", "#e3e3e3"],
density: 2300,
category: "salts",
tempHigh: 290,
stateHigh: ["magnesium", "nitrogen_dioxide"],
reactions: {
potassium: {elem1: "magnesium", elem2: "potassium_nitrate"},
sodium: {elem1: "magnesium", elem2: "sodium_nitrate"},
sulfuric_acid: {elem1: "epsom_salt", elem2: "nitric_acid"},
acid: {elem1: "magnesium_chloride", elem2: "nitric_acid"},
},
solubility: {water: 0.42},
alias: "Mg(NO₃)₂",
behavior: behaviors.POWDER
};
elements.calcium_nitrate = {
color: ["#f5f5f5", "#e8e8e8", "#ededed", "#e3e3e3"],
density: 2504,
category: "salts",
tempHigh: 650,
stateHigh: ["calcium", "nitrogen_dioxide"],
reactions: {
potassium: {elem1: "calcium", elem2: "potassium_nitrate"},
sodium: {elem1: "calcium", elem2: "sodium_nitrate"},
magnesium: {elem1: "calcium", elem2: "magnesium_nitrate"},
sulfuric_acid: {elem1: "gypsum", elem2: "nitric_acid"},
acid: {elem1: "calcium_chloride", elem2: "nitric_acid"},
},
solubility: {water: 1.21},
alias: "Ca(NO₃)₂",
behavior: behaviors.POWDER
};
elements.aluminum_nitrate = {
color: ["#f5f5f5", "#e8e8e8", "#ededed", "#e3e3e3"],
density: 1720,
category: "salts",
tempHigh: 150,
stateHigh: ["aluminum", "nitrogen_dioxide"],
reactions: {
sodium: {elem1: "aluminum", elem2: "sodium_nitrate"},
potassium: {elem1: "aluminum", elem2: "potassium_nitrate"},
calcium: {elem1: "aluminum", elem2: "calcium_nitrate"},
magnesium: {elem1: "aluminum", elem2: "magnesium_nitrate"},
//sulfuric_acid: {elem1: "aluminum_sulfate", elem2: "nitric_acid"},
acid: {elem1: "aluminum_chloride", elem2: "nitric_acid"},
},
solubility: {water: 0.739},
alias: "Al(NO₃)₃",
behavior: behaviors.POWDER
};
elements.limestone.reactions.sulfuric_acid = {elem1: "gypsum", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]};
elements.slaked_lime.reactions.sulfuric_acid = {elem1: "gypsum", elem2: "water"};
elements.quicklime.reactions.sulfuric_acid = {elem1: "gypsum", elem2: "oxygen"};
elements.limestone.reactions.nitric_acid = {elem1: "calcium_nitrate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]};
elements.slaked_lime.reactions.nitric_acid = {elem1: "calcium_nitrate", elem2: "water"};
elements.quicklime.reactions.nitric_acid = {elem1: "calcium_nitrate", elem2: "oxygen"};
elements.copper_carbonate = {
color: ["#5ee092", "#54d186", "#52de8a", "#44c97a"],
category: "salts",
alias: "CuCO₃",
behavior: behaviors.POWDER,
reactions: {
vinegar: {elem1: "copper_acetate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
acid: {elem1: "copper_chloride", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
sulfuric_acid: {elem1: "copper_sulfate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
nitric_acid: {elem1: "copper_nitrate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
aqua_regia: {elem1: ["copper_nitrate", "copper_chloride"], elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
},
density: 4000,
tempHigh: 290,
stateHigh: ["oxidized_copper", "carbon_dioxide"],
};
elements.aqua_regia.solubility = {water: 1};
elements.acid.solubility = {water: 1};
elements.vinegar.solubility = {water: 1};
elements.nitric_acid.solubility = {water: 1};
elements.sulfuric_acid.solubility = {water: 1};
}, true);

View File

@ -1,5 +1,5 @@
/*
* Version 1.0.0
* Version 1.1.0
*/
dependOn("orchidslibrary.js", ()=>{
@ -46,9 +46,9 @@ dependOn("orchidslibrary.js", ()=>{
}
function aqueousReaction(p1, p2){
for(let elem in p1.elemsDissolved){
if(elements[elem].reactions != null && p2.element != "water" && elements[elem].reactions[p2.element] != undefined){
if(elements[elem].reactions != null && p2.element != "water" && (elements[elem].reactions[p2.element] != undefined || (elements[p2.element].reactions != null && elements[p2.element].reactions[elem] != undefined))){
let r = elements[elem].reactions[p2.element];
let r = elements[elem].reactions[p2.element] || elements[p2.element].reactions[elem];
if(r.tempMin && !((p1.temp >= r.tempMin) && (p2.temp >= r.tempMin))){
return false;
}
@ -253,13 +253,13 @@ dependOn("orchidslibrary.js", ()=>{
let num = Math.random();
if(elem === null){
for(let e in pixel.elemsDissolved){
if(num <= ((pixel.elemsDissolved[e]/100)/elements[e].solubility.water)){
if(num <= ((pixel.elemsDissolved[e]/100)/elements[e].solubility.water)/4){
elem = e;
}
}
}
elem = (elem == null) ? "steam" : elem;
changePixel(pixel, elem);
changePixel(pixel, elem, 110);
pixel.dissolvedElems = {};
}
}
@ -282,5 +282,6 @@ dependOn("orchidslibrary.js", ()=>{
elements.water.tick = solventTick;
elements.water.behavior = behaviors.SOLVENT;
elements.water.tempHigh = undefined;
elements.water.solventTempHigh = 100;
elements.water.solventTempHigh = 101;
elements.steam.tempLow = 99
}, true);