Update morechemistry.js
This commit is contained in:
parent
33207a1b2a
commit
24f2b5c2e9
|
|
@ -1,35 +1,14 @@
|
||||||
/*
|
/*
|
||||||
Version 2.1.0
|
Version 2.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function pixelToggle(pixel, multi = {r:1,g:1,b:1}){
|
if(!enabledMods.includes("/mods/orchidslibrary.js")){
|
||||||
if(pixel.toggle != undefined){
|
let continueWithout = confirm("Missing dependency for morechemistry.js: \"orchidslibrary.js\". Continue without? (cancel will add mod and refresh the page)");
|
||||||
pixel.toggle = !pixel.toggle;
|
if(!continueWithout){
|
||||||
let rgb;
|
addMod("/mods/orchidslibrary.js", true);
|
||||||
if(Array.isArray(elements[pixel.element].color)){
|
window.location.reload();
|
||||||
let elemColor = elements[pixel.element].color[Math.round(Math.random()*elements[pixel.element].color.length)];
|
}
|
||||||
rgb = hexToRGB(elemColor) || getRGB(elemColor);
|
|
||||||
} else {
|
} else {
|
||||||
let elemColor = elements[pixel.element].color;
|
|
||||||
rgb = hexToRGB(elemColor) || getRGB(elemColor);
|
|
||||||
}
|
|
||||||
let num = 5 - Math.round(Math.random()*10);
|
|
||||||
if(pixel.toggle){
|
|
||||||
for(let key in rgb){
|
|
||||||
rgb[key] += (100*multi[key]);
|
|
||||||
rgb[key] = Math.round(Math.max(Math.min(rgb[key], 255), 0));
|
|
||||||
}
|
|
||||||
pixel.color = `rgb(${rgb.r+num},${rgb.g+num},${rgb.b+num})`;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pixel.color = `rgb(${rgb.r+num},${rgb.g+num},${rgb.b+num})`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function getRGB(rgb){
|
|
||||||
let rgb2 = rgb.replace(")", "").replace("rgb(", "").replace(/,/g, "r").split("r")
|
|
||||||
return { r: parseInt(rgb2[0]), g: parseInt(rgb2[1]), b: parseInt(rgb2[2]) };
|
|
||||||
}
|
|
||||||
elements.cloner.keyInput = "str:clone", elements.ecloner.keyInput = "str:clone", elements.slow_cloner.keyInput = "str:clone", elements.floating_cloner.keyInput = "str:clone";
|
elements.cloner.keyInput = "str:clone", elements.ecloner.keyInput = "str:clone", elements.slow_cloner.keyInput = "str:clone", elements.floating_cloner.keyInput = "str:clone";
|
||||||
let xDown = false;
|
let xDown = false;
|
||||||
elements.copper_sulfate = {
|
elements.copper_sulfate = {
|
||||||
|
|
@ -54,7 +33,9 @@ elements.copper_sulfate = {
|
||||||
mushroom_spore: {"elem2": null},
|
mushroom_spore: {"elem2": null},
|
||||||
zinc: {"stain2": "#2A1210"},
|
zinc: {"stain2": "#2A1210"},
|
||||||
fire: {"elem1": null,"elem2": "poison_gas","chance": 0.1},
|
fire: {"elem1": null,"elem2": "poison_gas","chance": 0.1},
|
||||||
sugar: {"elem1": "oxidized_copper","elem2": null,"color1": ["#CB3D3D","#A6292B","#6E1B1B"]}
|
sugar: {"elem1": "oxidized_copper","elem2": null,"color1": ["#CB3D3D","#A6292B","#6E1B1B"]},
|
||||||
|
magnesium: {elem1: "copper", elem2: "epsom_salt"},
|
||||||
|
wood: {stain2: "#043023"},
|
||||||
},
|
},
|
||||||
tempHigh: 110,
|
tempHigh: 110,
|
||||||
fireColor: [
|
fireColor: [
|
||||||
|
|
@ -192,6 +173,16 @@ elements.toggle_cloner = {
|
||||||
p2.clone = pixel.clone;
|
p2.clone = pixel.clone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
dataInFunc: function(pixel, value){
|
||||||
|
if(value.includes(":")){
|
||||||
|
let valueArr = value.split(":");
|
||||||
|
if(Array.isArray(pixel[valueArr[0]]) && !pixel[valueArr[0]].includes(valueArr[1])){
|
||||||
|
pixel[valueArr[0]].push(valueArr[1]);
|
||||||
|
} else {
|
||||||
|
pixel[valueArr[0]] = (Number.isInteger(pixel[valueArr[0]])) ? parseInt(valueArr[1]) : valueArr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -234,6 +225,16 @@ elements.multi_toggle_cloner = {
|
||||||
},
|
},
|
||||||
onSelect: function(){
|
onSelect: function(){
|
||||||
logMessage("Place cloner, then add elements to the clone list by selecting the element and hold down shift while clicking in it, then click on it to toggle on or off. Shift clicking with an element already found in the list will remove it.");
|
logMessage("Place cloner, then add elements to the clone list by selecting the element and hold down shift while clicking in it, then click on it to toggle on or off. Shift clicking with an element already found in the list will remove it.");
|
||||||
|
},
|
||||||
|
dataInFunc: function(pixel, value){
|
||||||
|
if(value.includes(":")){
|
||||||
|
let valueArr = value.split(":");
|
||||||
|
if(Array.isArray(pixel[valueArr[0]]) && !pixel[valueArr[0]].includes(valueArr[1])){
|
||||||
|
pixel[valueArr[0]].push(valueArr[1]);
|
||||||
|
} else {
|
||||||
|
pixel[valueArr[0]] = (Number.isInteger(pixel[valueArr[0]])) ? parseInt(valueArr[1]) : valueArr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -311,6 +312,16 @@ elements.e_temper = {
|
||||||
p2.temp += difference/4;
|
p2.temp += difference/4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
dataInFunc: function(pixel, value){
|
||||||
|
if(value.includes(":")){
|
||||||
|
let valueArr = value.split(":");
|
||||||
|
if(Array.isArray(pixel[valueArr[0]]) && !pixel[valueArr[0]].includes(valueArr[1])){
|
||||||
|
pixel[valueArr[0]].push(valueArr[1]);
|
||||||
|
} else {
|
||||||
|
pixel[valueArr[0]] = (Number.isInteger(pixel[valueArr[0]])) ? parseInt(valueArr[1]) : valueArr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -369,6 +380,16 @@ elements.toggle_temper = {
|
||||||
}
|
}
|
||||||
if(pixel.clickCd > 0){pixel.clickCd--;};
|
if(pixel.clickCd > 0){pixel.clickCd--;};
|
||||||
},
|
},
|
||||||
|
dataInFunc: function(pixel, value){
|
||||||
|
if(value.includes(":")){
|
||||||
|
let valueArr = value.split(":");
|
||||||
|
if(Array.isArray(pixel[valueArr[0]]) && !pixel[valueArr[0]].includes(valueArr[1])){
|
||||||
|
pixel[valueArr[0]].push(valueArr[1]);
|
||||||
|
} else {
|
||||||
|
pixel[valueArr[0]] = (Number.isInteger(pixel[valueArr[0]])) ? parseInt(valueArr[1]) : valueArr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
elements.multitool = {
|
elements.multitool = {
|
||||||
|
|
@ -661,6 +682,16 @@ elements.target_sensor = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pixel.clickCd -= (pixel.clickCd > 0) ? 1 : 0;
|
pixel.clickCd -= (pixel.clickCd > 0) ? 1 : 0;
|
||||||
|
},
|
||||||
|
dataInFunc: function(pixel, value){
|
||||||
|
if(value.includes(":")){
|
||||||
|
let valueArr = value.split(":");
|
||||||
|
if(Array.isArray(pixel[valueArr[0]]) && !pixel[valueArr[0]].includes(valueArr[1])){
|
||||||
|
pixel[valueArr[0]].push(valueArr[1]);
|
||||||
|
} else {
|
||||||
|
pixel[valueArr[0]] = (Number.isInteger(pixel[valueArr[0]])) ? parseInt(valueArr[1]) : valueArr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -673,10 +704,30 @@ Pixel.prototype.inRange = function(range){
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
elements.acid.ignore = elements.acid.ignore.concat(["nitric_acid", "aqua_regia", "chloroauric_acid", "nitrogen_dioxide", "nitric_acid_ice", "nitrogen_dioxide_ice", "acid", "chloroauric_acid", "magnesium_chloride", "magnesium_carbonate", "magnesium_hydroxide", "magnesium", "gallium", "gallium_chloride", "salt", "aluminum", "aluminum_chloride", "target_portal_in"]);
|
function acidTick(pixel){
|
||||||
|
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){
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(p2 != null && !(elements[pixel.element].ignore.includes(p2.element) || ignore || p2.element == pixel.element)){
|
||||||
|
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.nitric_acid = {
|
elements.nitric_acid = {
|
||||||
alias: "HNO₃",
|
alias: "HNO₃",
|
||||||
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"]],
|
behavior: behaviors.LIQUID,
|
||||||
ignore: elements.acid.ignore,
|
ignore: elements.acid.ignore,
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
color: ["#f5e7e1", "#f7e8e1", "#f7ebe6"],
|
color: ["#f5e7e1", "#f7e8e1", "#f7ebe6"],
|
||||||
|
|
@ -688,6 +739,7 @@ elements.nitric_acid = {
|
||||||
density: 1510,
|
density: 1510,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tick: function(pixel){
|
tick: function(pixel){
|
||||||
|
acidTick(pixel);
|
||||||
for(let coords of squareCoords){
|
for(let coords of squareCoords){
|
||||||
let x = pixel.x+coords[0], y = pixel.y+coords[1];
|
let x = pixel.x+coords[0], y = pixel.y+coords[1];
|
||||||
let p2 = getPixel(x,y);
|
let p2 = getPixel(x,y);
|
||||||
|
|
@ -718,6 +770,7 @@ elements.nitrogen_dioxide = {
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.nitrogen_dioxide_ice = {
|
elements.nitrogen_dioxide_ice = {
|
||||||
|
temp: -20,
|
||||||
color: ["#4f1607", "#4d1709", "#541606", "#471407"],
|
color: ["#4f1607", "#4d1709", "#541606", "#471407"],
|
||||||
behavior: behaviors.WALL,
|
behavior: behaviors.WALL,
|
||||||
state: "solid",
|
state: "solid",
|
||||||
|
|
@ -727,6 +780,7 @@ elements.nitrogen_dioxide_ice = {
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.nitric_acid_ice = {
|
elements.nitric_acid_ice = {
|
||||||
|
temp: -45,
|
||||||
behavior: behaviors.WALL,
|
behavior: behaviors.WALL,
|
||||||
color: ["#f5e7e4", "#f5efed", "#fcfafa"],
|
color: ["#f5e7e4", "#f5efed", "#fcfafa"],
|
||||||
state: "solid",
|
state: "solid",
|
||||||
|
|
@ -738,7 +792,7 @@ elements.nitric_acid_ice = {
|
||||||
elements.aqua_regia = {
|
elements.aqua_regia = {
|
||||||
alias: "3HCl•HNO₃",
|
alias: "3HCl•HNO₃",
|
||||||
color:["#ffc766", "#f5c36e", "#f7c163", "#ffcd75"],
|
color:["#ffc766", "#f5c36e", "#f7c163", "#ffcd75"],
|
||||||
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"]],
|
behavior: behaviors.LIQUID,
|
||||||
ignore: elements.acid.ignore,
|
ignore: elements.acid.ignore,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
|
|
@ -748,22 +802,24 @@ elements.aqua_regia = {
|
||||||
gold_coin: {elem1: "chloroauric_acid", elem2: null, chance: 0.15},
|
gold_coin: {elem1: "chloroauric_acid", elem2: null, chance: 0.15},
|
||||||
blue_gold: {elem1: ["chloroauric_acid", "gallium_chloride"], elem2: null, chance: 0.15},
|
blue_gold: {elem1: ["chloroauric_acid", "gallium_chloride"], elem2: null, chance: 0.15},
|
||||||
purple_gold: {elem1: ["chloroauric_acid", "chloroauric_acid", "chloroauric_acid", "aluminum_chloride"], elem2: null, chance: 0.15},
|
purple_gold: {elem1: ["chloroauric_acid", "chloroauric_acid", "chloroauric_acid", "aluminum_chloride"], elem2: null, chance: 0.15},
|
||||||
}
|
},
|
||||||
|
tick: acidTick,
|
||||||
};
|
};
|
||||||
elements.chloroauric_acid = {
|
elements.chloroauric_acid = {
|
||||||
color: ["#f7bb2f", "#f5bb33", "#f5b727", "#e8ae25"],
|
color: ["#f7bb2f", "#f5bb33", "#f5b727", "#e8ae25"],
|
||||||
alias: "H(AuCl₄)",
|
alias: "H(AuCl₄)",
|
||||||
behavior: behaviors.POWDER,
|
behavior: behaviors.POWDER,
|
||||||
category: "powders",
|
category: "salts",
|
||||||
state: "solid",
|
state: "solid",
|
||||||
density: 3900,
|
density: 3900,
|
||||||
reactions: {
|
reactions: {
|
||||||
potassium: {elem1: "gold_coin", elem2: "potassium_salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}},
|
potassium: {elem1: "gold_coin", elem2: "potassium_salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}, color1: ["#574000", "#705200", "#634900", "#755600"]},
|
||||||
sodium: {elem1: "gold_coin", elem2: "salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}},
|
sodium: {elem1: "gold_coin", elem2: "salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}, color1: ["#574000", "#705200", "#634900", "#755600"]},
|
||||||
caustic_potash: {elem1: "gold_coin", elem2: "potassium_salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("water", x, y);}}}},
|
caustic_potash: {elem1: "gold_coin", elem2: "potassium_salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("water", x, y);}}}},
|
||||||
lye: {elem1: "gold_coin", elem2: "salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("water", x, y);}}}},
|
lye: {elem1: "gold_coin", elem2: "salt", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("water", x, y);}}}, color1: ["#574000", "#705200", "#634900", "#755600"]},
|
||||||
magnesium: {elem1: "gold_coin", elem2: "magnesium_chloride", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}},
|
magnesium: {elem1: "gold_coin", elem2: "magnesium_chloride", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}, color1: ["#574000", "#705200", "#634900", "#755600"]},
|
||||||
metal_scrap: {elem1: "gold_coin", elem2: "slag", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}},
|
metal_scrap: {elem1: "gold_coin", elem2: "slag", func: function(pixel){for(let coords of squareCoords){let x=pixel.x+coords[0],y=pixel.y+coords[1]; if(isEmpty(x,y) && !outOfBounds(x,y) && Math.random()<0.25){createPixel("hydrogen", x, y);}}}, color1: ["#574000", "#705200", "#634900", "#755600"]},
|
||||||
|
copper: {elem1: "copper_chloride", elem2: "gold", color2: ["#574000", "#705200", "#634900", "#755600"]}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
elements.magnesium_chloride = {
|
elements.magnesium_chloride = {
|
||||||
|
|
@ -778,16 +834,30 @@ elements.magnesium_chloride = {
|
||||||
lye: {elem1: "magnesium_hydroxide", elem2: "salt"},
|
lye: {elem1: "magnesium_hydroxide", elem2: "salt"},
|
||||||
caustic_potash: {elem1: "magnesium_hydroxide", elem2: "potassium_salt"},
|
caustic_potash: {elem1: "magnesium_hydroxide", elem2: "potassium_salt"},
|
||||||
ash: {elem1: "magnesium_carbonate", elem2: ["dust","dust",null,"potassium_salt", "charcoal"]}
|
ash: {elem1: "magnesium_carbonate", elem2: ["dust","dust",null,"potassium_salt", "charcoal"]}
|
||||||
|
},
|
||||||
|
tempHigh: 714,
|
||||||
}
|
}
|
||||||
|
elements.molten_magnesium_chloride = {
|
||||||
|
alias: "MgCl₂",
|
||||||
|
density: 2150,
|
||||||
|
behavior: behaviors.MOLTEN,
|
||||||
|
state: "liquid",
|
||||||
|
color: ["#ffeb91", "#ffea8c", "#ffd480", "#ffd685", "#ffc37a"],
|
||||||
|
category: "states",
|
||||||
|
tempLow: 713,
|
||||||
|
stateLow: "magnesium_chloride",
|
||||||
|
stateHigh: ["acid_gas", "magnesium"],
|
||||||
|
tempHigh: 800,
|
||||||
|
temp: 720,
|
||||||
}
|
}
|
||||||
elements.calcium_chloride = {
|
elements.calcium_chloride = {
|
||||||
|
flameColor: ["#fc8721", "#f58625", "#fa8d2d"],
|
||||||
alias: "CaCl₂",
|
alias: "CaCl₂",
|
||||||
category: "salts",
|
category: "salts",
|
||||||
density: 2150,
|
density: 2150,
|
||||||
behavior: behaviors.POWDER,
|
behavior: behaviors.POWDER,
|
||||||
state: "solid",
|
state: "solid",
|
||||||
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
||||||
density: 2320,
|
|
||||||
reactions: {
|
reactions: {
|
||||||
baking_soda: {elem1: "limestone", elem2: "salt"},
|
baking_soda: {elem1: "limestone", elem2: "salt"},
|
||||||
lye: {elem1: "slaked_lime", elem2: "salt"},
|
lye: {elem1: "slaked_lime", elem2: "salt"},
|
||||||
|
|
@ -795,7 +865,24 @@ elements.calcium_chloride = {
|
||||||
ash: {elem1: "limestone", elem2: ["dust","dust",null,"potassium_salt", "charcoal"]},
|
ash: {elem1: "limestone", elem2: ["dust","dust",null,"potassium_salt", "charcoal"]},
|
||||||
epsom_salt: {elem1: "hardened_gypsum", elem2: "magnesium_chloride"},
|
epsom_salt: {elem1: "hardened_gypsum", elem2: "magnesium_chloride"},
|
||||||
carbon_dioxide: {elem1: "limestone", elem2: "chlorine", chance: 0.001, tempMin: 60}
|
carbon_dioxide: {elem1: "limestone", elem2: "chlorine", chance: 0.001, tempMin: 60}
|
||||||
|
},
|
||||||
|
tempHigh: 772,
|
||||||
|
stateHigh: "molten_calcium_chloride",
|
||||||
}
|
}
|
||||||
|
elements.molten_calcium_chloride = {
|
||||||
|
flameColor: ["#fc8721", "#f58625", "#fa8d2d"],
|
||||||
|
alias: "CaCl₂",
|
||||||
|
density: 2150,
|
||||||
|
behavior: behaviors.MOLTEN,
|
||||||
|
state: "liquid",
|
||||||
|
color: ["#ffeb91", "#ffea8c", "#ffd480", "#ffd685", "#ffc37a"],
|
||||||
|
category: "states",
|
||||||
|
tempLow: 771,
|
||||||
|
stateLow: "calcium_chloride",
|
||||||
|
reactions: {
|
||||||
|
oxygen: {elem1: "quicklime", elem2: "chlorine", chance: 0.005, tempMin: 800}
|
||||||
|
},
|
||||||
|
temp: 780,
|
||||||
}
|
}
|
||||||
elements.sodium.reactions.carbon_dioxide = {elem1: "baking_soda", elem2: null}, elements.magnesium.reactions.carbon_dioxide = {elem1: "magnesium_carbonate", elem2:null};
|
elements.sodium.reactions.carbon_dioxide = {elem1: "baking_soda", elem2: null}, elements.magnesium.reactions.carbon_dioxide = {elem1: "magnesium_carbonate", elem2:null};
|
||||||
elements.acid.reactions.magnesium = {elem1: "hydrogen", elem2: "magnesium_chloride"};
|
elements.acid.reactions.magnesium = {elem1: "hydrogen", elem2: "magnesium_chloride"};
|
||||||
|
|
@ -807,7 +894,8 @@ elements.magnesium_carbonate = {
|
||||||
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
||||||
density: 2960,
|
density: 2960,
|
||||||
reactions: {
|
reactions: {
|
||||||
acid: {elem1: "magnesium_chloride", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]}
|
acid: {elem1: "magnesium_chloride", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]},
|
||||||
|
vinegar: {elem1: "magnesium_acetate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elements.magnesium_hydroxide = {
|
elements.magnesium_hydroxide = {
|
||||||
|
|
@ -818,9 +906,17 @@ elements.magnesium_hydroxide = {
|
||||||
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
||||||
density: 2340,
|
density: 2340,
|
||||||
reactions: {
|
reactions: {
|
||||||
acid: {elem1: "magnesium_chloride", elem2: "water"}
|
acid: {elem1: "magnesium_chloride", elem2: "water"},
|
||||||
}
|
vinegar: {elem1: "magnesium_acetate", elem2: "water"},
|
||||||
|
},
|
||||||
|
tempHigh: 350,
|
||||||
|
stateHigh: ["steam", "magnesium"],
|
||||||
}
|
}
|
||||||
|
elements.vinegar.reactions.limestone = undefined;
|
||||||
|
elements.limestone.reactions = {vinegar: {elem1: "calcium_acetate", elem2: ["carbon_dioxide", "foam", "seltzer", "seltzer"]}};
|
||||||
|
elements.quicklime.reactions.vinegar = {elem1: "calcium_acetate", elem2: "oxygen"};
|
||||||
|
elements.oxidized_copper.reactions.vinegar = {elem1: "copper_acetate", elem2: "water"};
|
||||||
|
elements.slaked_lime.reactions.vinegar = {elem1: "calcium_acetate", elem2: "water"};
|
||||||
elements.hardened_gypsum = {
|
elements.hardened_gypsum = {
|
||||||
alias: "CaSO₄•2H₂O",
|
alias: "CaSO₄•2H₂O",
|
||||||
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
color: ["#f2f2f2", "#f5f5f5", "#ebebeb", "#e6e6e6"],
|
||||||
|
|
@ -838,7 +934,7 @@ elements.gypsum = {
|
||||||
behavior: behaviors.STURDYPOWDER,
|
behavior: behaviors.STURDYPOWDER,
|
||||||
density: 2420,
|
density: 2420,
|
||||||
tick: function(pixel){
|
tick: function(pixel){
|
||||||
let chance = (pixel.temp-18)/100*(pixel.temp/40)*((pixelTicks-pixel.start)/250);
|
let chance = ((pixel.temp-18)/100*(Math.abs(pixel.temp)/40)*((pixelTicks-pixel.start)/250))*0.1;
|
||||||
if(Math.random()<chance){
|
if(Math.random()<chance){
|
||||||
changePixel(pixel, "hardened_gypsum");
|
changePixel(pixel, "hardened_gypsum");
|
||||||
}
|
}
|
||||||
|
|
@ -880,8 +976,8 @@ elements.aluminum_chloride = {
|
||||||
behavior: behaviors.POWDER,
|
behavior: behaviors.POWDER,
|
||||||
state: "solid",
|
state: "solid",
|
||||||
density: 2480,
|
density: 2480,
|
||||||
|
tempHigh: 630,
|
||||||
|
stateHigh: ["chlorine", "aluminum"],
|
||||||
}
|
}
|
||||||
elements.acid.reactions.aluminum = {elem1: "hydrogen", elem2: "aluminum_chloride"};
|
elements.acid.reactions.aluminum = {elem1: "hydrogen", elem2: "aluminum_chloride"};
|
||||||
elements.acid.reactions.purple_gold = {elem1: ["aluminum_chloride", "aluminum_chloride", "hydrogen"], elem2: "gold"};
|
elements.acid.reactions.purple_gold = {elem1: ["aluminum_chloride", "aluminum_chloride", "hydrogen"], elem2: "gold"};
|
||||||
|
|
@ -956,5 +1052,520 @@ elements.target_portal_in = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
dataInFunc: function(pixel, value){
|
||||||
|
if(value.includes(":")){
|
||||||
|
let valueArr = value.split(":");
|
||||||
|
if(Array.isArray(pixel[valueArr[0]]) && !pixel[valueArr[0]].includes(valueArr[1])){
|
||||||
|
pixel[valueArr[0]].push(valueArr[1]);
|
||||||
|
} else {
|
||||||
|
pixel[valueArr[0]] = (Number.isInteger(pixel[valueArr[0]])) ? parseInt(valueArr[1]) : valueArr[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elements.aluminum_acetate = {
|
||||||
|
density: 1002,
|
||||||
|
color: ["#e8e8e8", "#ededed", "#e8e8e8", "#dedede"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
state: "solid",
|
||||||
|
category: "salts",
|
||||||
|
alias: "Al(CH₃COO)₃",
|
||||||
|
reactions: {
|
||||||
|
acid: {elem1: "aluminum_chloride", elem2: "vinegar"},
|
||||||
|
},
|
||||||
|
tempHigh: 120,
|
||||||
|
stateHigh: ["vinegar", "aluminum"],
|
||||||
|
}
|
||||||
|
elements.magnesium_acetate = {
|
||||||
|
density: 1450,
|
||||||
|
color: ["#e8e8e8", "#ededed", "#e8e8e8", "#dedede"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
state: "solid",
|
||||||
|
category: "salts",
|
||||||
|
alias: "Mg(CH₃COO)₂",
|
||||||
|
reactions: {
|
||||||
|
acid: {elem1: "magnesium_chloride", elem2: "vinegar"},
|
||||||
|
baking_soda: {elem1: "magnesium_carbonate", elem2: "sodium_acetate"},
|
||||||
|
ash: {elem1: "magnesium_carbonate", elem2: ["dust", "dust", null, "potassium_acetate"]},
|
||||||
|
},
|
||||||
|
tempHigh: 300,
|
||||||
|
stateHigh: ["vinegar", "magnesium_carbonate"],
|
||||||
|
}
|
||||||
|
elements.calcium_acetate = {
|
||||||
|
flameColor: ["#fc8721", "#f58625", "#fa8d2d"],
|
||||||
|
density: 1509,
|
||||||
|
color: ["#e8e8e8", "#ededed", "#e8e8e8", "#dedede"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
state: "solid",
|
||||||
|
category: "salts",
|
||||||
|
alias: "Ca(CH₃COO)₂",
|
||||||
|
reactions: {
|
||||||
|
acid: {elem1: "calcium_chloride", elem2: "vinegar"},
|
||||||
|
baking_soda: {elem1: "limestone", elem2: "sodium_acetate"},
|
||||||
|
ash: {elem1: "limestone", elem2: ["dust", "dust", null, "potassium_acetate"]},
|
||||||
|
epsom_salt: {elem1: "hardened_gypsum", elem2: "magnesium_acetate"},
|
||||||
|
copper_sulfate: {elem1: "hardened_gypsum", elem2: "copper_acetate"},
|
||||||
|
},
|
||||||
|
tempHigh: 650,
|
||||||
|
stateHigh: ["vinegar", "limestone"]
|
||||||
|
}
|
||||||
|
elements.potassium_acetate = {
|
||||||
|
density: 1570,
|
||||||
|
fireColor: ["#e3a6ff", "#d798f5", "#d88efa"],
|
||||||
|
color: ["#e8e8e8", "#ededed", "#e8e8e8", "#dedede"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
state: "solid",
|
||||||
|
category: "salts",
|
||||||
|
alias: "CH₃COOK",
|
||||||
|
reactions: {
|
||||||
|
acid: {elem1: "potassium_salt", elem2: "vinegar"},
|
||||||
|
baking_soda: {elem1: "caustic_potash", elem2: "sodium_acetate"},
|
||||||
|
|
||||||
|
},
|
||||||
|
tempHigh: 292,
|
||||||
|
}
|
||||||
|
elements.copper_acetate = {
|
||||||
|
density: 1880,
|
||||||
|
fireColor:["#4dff58", "#4ee658", "#59f054", "#54f05c"],
|
||||||
|
color: ["#00594d", "#036357", "#045661", "#044052"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
state: "solid",
|
||||||
|
category: "salts",
|
||||||
|
alias: "Cu(CH₃COO)₂",
|
||||||
|
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"},
|
||||||
|
wood: {stain2: "#043023"},
|
||||||
|
},
|
||||||
|
tempHigh: 240,
|
||||||
|
stateHigh: ["vinegar", "oxidized_copper"],
|
||||||
|
}
|
||||||
|
elements.copper_chloride = {
|
||||||
|
density: 3390,
|
||||||
|
tempHigh: 620,
|
||||||
|
stateHigh: ["copper", "chlorine"],
|
||||||
|
color: ["#59f0c2", "#57f2b2", "#53edce", "#61eddf"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
state: "solid",
|
||||||
|
category: "salts",
|
||||||
|
alias: "CuCl₂",
|
||||||
|
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"},
|
||||||
|
wood: {stain2: "#043023"},
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
anhydrous: false
|
||||||
|
},
|
||||||
|
fireColor: "#19abff",
|
||||||
|
tick: function(pixel){
|
||||||
|
if(pixelTicks-pixel.start == 2 && xDown){
|
||||||
|
pixel.anhydrous = true;
|
||||||
|
let rgb = {r: 74, g: 42, b: 10};
|
||||||
|
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: 74, g: 42, b: 10};
|
||||||
|
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: 116, g: 237, b: 203} : {r: 116, g: 237, b: 231};
|
||||||
|
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: 116, g: 237, b: 203} : {r: 116, g: 237, b: 231};
|
||||||
|
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.magnesium.reactions.water = {elem1: "magnesium_hydroxide", elem2: "hydrogen"};
|
||||||
|
elements.sulfuric_acid = {
|
||||||
|
alias: "H₂SO₄",
|
||||||
|
category: "liquids",
|
||||||
|
ignore: elements.acid.ignore,
|
||||||
|
tick: acidTick,
|
||||||
|
color: ["#f5f5f5", "#fcfcfc", "#fffce8", "#fffce6"],
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
state: "liquid",
|
||||||
|
density: 1830,
|
||||||
|
reactions: {
|
||||||
|
magnesium_carbonate: {elem1: ["carbon_dioxide", "foam","foam"], elem2: "epsom_salt"},
|
||||||
|
limestone: {elem1: ["carbon_dioxide", "foam","foam"], elem2: "hardened_gypsum"},
|
||||||
|
quicklime: {elem1: "water", elem2: "hardened_gypsum"},
|
||||||
|
slaked_lime: {elem1: "water", elem2: "hardened_gypsum"},
|
||||||
|
copper_acetate: {elem1: "vinegar", elem2: "copper_sulfate"},
|
||||||
|
copper_oxide: {elem1: "water", elem2: "copper_sulfate"},
|
||||||
|
copper_chloride: {elem1: "acid_gas", elem2: "copper_sulfate"},
|
||||||
|
magnesium: {elem1: "hydrogen", elem2: "epsom_salt"},
|
||||||
|
calcium: {elem1: "hydrogen", elem2: "hardened_gypsum"},
|
||||||
|
magnesium_chloride: {elem1: "acid_gas", elem2: "epsom_salt"},
|
||||||
|
calcium_chloride: {elem1: "acid_gas", elem2: "hardened_gypsum"},
|
||||||
|
calcium_acetate: {elem1: "vinegar", elem2: "hardened_gypsum"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
elements.platinum = {
|
||||||
|
alias: "Pt",
|
||||||
|
color: ["#cccccc", "#cfcfcf", "#d9d9d9", "#dedede"],
|
||||||
|
category: "solids",
|
||||||
|
state: "solid",
|
||||||
|
density: 21450,
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
reactions: {
|
||||||
|
aqua_regia: {elem1: "chloroplatinic_acid", elem2: "hydrogen"},
|
||||||
|
},
|
||||||
|
tempHigh: 1768,
|
||||||
|
stateHigh: "molten_platinum",
|
||||||
|
}
|
||||||
|
elements.molten_platinum = {
|
||||||
|
color: ["#ffd429", "#f7b228", "#ffb13d", "#ffd83d"],
|
||||||
|
behavior: behaviors.MOLTEN,
|
||||||
|
category: "states",
|
||||||
|
state: "liquid",
|
||||||
|
density: 21450,
|
||||||
|
tempLow: 1767,
|
||||||
|
stateLow: "platinum",
|
||||||
|
temp: 1770
|
||||||
|
}
|
||||||
|
elements.chloroplatinic_acid = {
|
||||||
|
color: ["#e6842e", "#f5923b", "#f5853b", "#f57a33"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
category: "salts",
|
||||||
|
state: "solid",
|
||||||
|
density: 2431,
|
||||||
|
alias: "H₂PtCl₆",
|
||||||
|
tempHigh: 500,
|
||||||
|
stateHigh: ["acid_gas", "chlorine", "platinum", "platinum"],
|
||||||
|
reactions: {
|
||||||
|
sodium: {elem1: "salt", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
potassium: {elem1: "potassium_salt", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
magnesium: {elem1: "magnesium_chloride", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
calcium: {elem1: "calcium_chloride", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
aluminum: {elem1: "aluminum_chloride", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
baking_soda: {elem1: ["salt", "foam"], elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
limestone: {elem1: ["calcium_chloride", "foam"], elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
caustic_potash: {elem1: "potassium_salt", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
lye: {elem1: "salt", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
ash: {elem1: ["potassium_salt", "foam", "charcoal", null, null], elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]},
|
||||||
|
copper: {elem1: "copper_chloride", elem2: "platinum", color2: ["#404040", "#525252", "#454545", "#2e2e2e", "#262626"]}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elements.magnet = {
|
||||||
|
keyInput: "range",
|
||||||
|
category: "machines",
|
||||||
|
range: 0,
|
||||||
|
attract: ["#1e43fc", "#1137f2", "#1c42ff", "#143bff"],
|
||||||
|
repel: ["#ff1814", "#ff1612", "#ff201c", "#ff0e0a"],
|
||||||
|
off: ["#303030", "#454545", "#3b3b3b", "#3d3d3d"],
|
||||||
|
color: ["#303030", "#454545", "#3b3b3b", "#3d3d3d"],
|
||||||
|
properties: {
|
||||||
|
range: null,
|
||||||
|
dragPixels: [],
|
||||||
|
clickCd: 0,
|
||||||
|
targetElems: [],
|
||||||
|
mode: 0,
|
||||||
|
},
|
||||||
|
onSelect: function(){
|
||||||
|
promptInput("Enter the range of this machine:", (input)=>{elements.magnet.range = parseInt(input);}, "Magnet Range", elements.magnet.range);
|
||||||
|
},
|
||||||
|
onClicked: function(pixel, elem){
|
||||||
|
if(pixel.targetElems.includes(elem) && elem != "unknown" && pixel.clickCd <= 0){
|
||||||
|
pixel.targetElems.splice(pixel.targetElems.indexOf(elem), 1);
|
||||||
|
pixel.clickCd = 20;
|
||||||
|
} else if (elem != "unknown" && pixel.clickCd <= 0) {
|
||||||
|
pixel.targetElems.push(elem);
|
||||||
|
pixel.clickCd = 20;
|
||||||
|
}
|
||||||
|
if(elem == "unknown" && pixel.clickCd <= 0){
|
||||||
|
switch(pixel.mode){
|
||||||
|
case 0:
|
||||||
|
pixel.mode = 1; //attract
|
||||||
|
pixel.color = elements.magnet.attract[Math.round(Math.random()*elements.magnet.attract.length)];
|
||||||
|
while(pixel.color == undefined){
|
||||||
|
pixel.color = elements.magnet.attract[Math.round(Math.random()*elements.magnet.attract.length)];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
pixel.mode = 2; //repel
|
||||||
|
pixel.color = elements.magnet.repel[Math.round(Math.random()*elements.magnet.repel.length)];
|
||||||
|
while(pixel.color == undefined){
|
||||||
|
pixel.color = elements.magnet.repel[Math.round(Math.random()*elements.magnet.repel.length)];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
pixel.mode = 0; //off
|
||||||
|
pixel.color = elements.magnet.off[Math.round(Math.random()*elements.magnet.off.length)];
|
||||||
|
while(pixel.color == undefined){
|
||||||
|
pixel.color = elements.magnet.off[Math.round(Math.random()*elements.magnet.off.length)];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pixel.mode = 0;
|
||||||
|
pixel.color = elements.magnet.off[Math.round(Math.random()*elements.magnet.off.length)];
|
||||||
|
while(pixel.color == undefined){
|
||||||
|
pixel.color = elements.magnet.off[Math.round(Math.random()*elements.magnet.off.length)];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
pixel.clickCd = 20;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tick: function(pixel){
|
||||||
|
pixel.clickCd -= (pixel.clickCd == 0) ? 0 : 1;
|
||||||
|
if(pixel.range == null){
|
||||||
|
pixel.range = elements.magnet.range;
|
||||||
|
};
|
||||||
|
let range = mouseRange(pixel.x, pixel.y, pixel.range);
|
||||||
|
for(let p of pixel.dragPixels){
|
||||||
|
if(!p.inRange(range) || pixel.mode == 0 || !currentPixels.includes(p) || !pixel.targetElems.includes(p.element)){
|
||||||
|
p.drag = false;
|
||||||
|
pixel.dragPixels.splice(pixel.dragPixels.indexOf(p), 1);
|
||||||
|
} else {
|
||||||
|
switch(pixel.mode){
|
||||||
|
case 1:
|
||||||
|
let dX = pixel.x-p.x, dY = pixel.y-p.y;
|
||||||
|
tryMove(p, p.x+Math.sign(dX), p.y+Math.sign(dY), null, true);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
let dx = p.x-pixel.x, dy = p.y-pixel.y;
|
||||||
|
tryMove(p, p.x+Math.sign(dx), p.y+Math.sign(dy), null, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for(let coords of range){
|
||||||
|
let p2 = getPixel(coords[0], coords[1]);
|
||||||
|
if(p2 != null && pixel.targetElems.includes(p2.element) && pixel.mode != 0 && !pixel.dragPixels.includes(p2)){
|
||||||
|
p2.drag = true;
|
||||||
|
pixel.dragPixels.push(p2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataInFunc: function(pixel, value){
|
||||||
|
if(value.includes(":")){
|
||||||
|
let valueArr = value.split(":");
|
||||||
|
if(Array.isArray(elements[pixel.element].properties[valueArr[0]]) && !pixel[valueArr[0]].includes(valueArr[1])){
|
||||||
|
pixel[valueArr[0]].push(valueArr[1]);
|
||||||
|
} else if(!Array.isArray(elements[pixel.element].properties[valueArr[0]])){
|
||||||
|
pixel[valueArr[0]] = (Number.isInteger(pixel[valueArr[0]])) ? parseInt(valueArr[1]) : valueArr[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elements.liquid_sulfur_trioxide = {
|
||||||
|
density: 1920,
|
||||||
|
color: ["#fffdc7", "#fffdcc", "#f7f6da", "#f5f3bc"],
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
state: "liquid",
|
||||||
|
category: "states",
|
||||||
|
reactions: {
|
||||||
|
plant: {elem1: null, elem2: "dead_plant"},
|
||||||
|
fruit_leaves: {elem1: null, elem2: "dead_plant"},
|
||||||
|
fruit_branch: {elem1: null, elem2: "wood"},
|
||||||
|
tree_branch: {elem1: null, elem2: "wood"},
|
||||||
|
fruit_vine: {elem1: null, elem2: "dead_plant"},
|
||||||
|
low_fruit_vine: {elem1: null, elem2: "dead_plant"},
|
||||||
|
water: {elem1: null, elem2:"sulfuric_acid"},
|
||||||
|
quicklime: {elem1: null, elem2: "hardened_gypsum"},
|
||||||
|
},
|
||||||
|
tick: function(pixel){
|
||||||
|
for(let coords of adjacentCoords){
|
||||||
|
let x = pixel.x+coords[0], y = pixel.y+coords[1];
|
||||||
|
let p2 = getPixel(x,y);
|
||||||
|
if(p2 != null && eLists.ANIMAL.includes(p2.element)){
|
||||||
|
if(p2.element == "rat"){
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "rotten_meat");
|
||||||
|
} else {
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "dead_bug");
|
||||||
|
}
|
||||||
|
} else if (p2 != null && eLists.CLEANANIMAL.includes(p2.element)){
|
||||||
|
if(["frog", "tadpole"].includes(p2.element)){
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "rotten_meat");
|
||||||
|
} else {
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "dead_bug");
|
||||||
|
}
|
||||||
|
} else if (p2 != null && eLists.SEEDS.includes(p2.element)){
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "dead_plant");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tempLow: 16,
|
||||||
|
stateLow: "sulfur_trioxide",
|
||||||
|
}
|
||||||
|
elements.sulfur_trioxide = {
|
||||||
|
temp: 16,
|
||||||
|
density: 1920,
|
||||||
|
color: ["#fffdc7", "#fffdcc", "#f7f6da", "#f5f3bc"],
|
||||||
|
behavior: behaviors.POWDER,
|
||||||
|
state: "solid",
|
||||||
|
category: "salts",
|
||||||
|
reactions: {
|
||||||
|
plant: {elem1: null, elem2: "dead_plant"},
|
||||||
|
fruit_leaves: {elem1: null, elem2: "dead_plant"},
|
||||||
|
fruit_branch: {elem1: null, elem2: "wood"},
|
||||||
|
tree_branch: {elem1: null, elem2: "wood"},
|
||||||
|
fruit_vine: {elem1: null, elem2: "dead_plant"},
|
||||||
|
low_fruit_vine: {elem1: null, elem2: "dead_plant"},
|
||||||
|
water: {elem1: null, elem2:"sulfuric_acid"},
|
||||||
|
quicklime: {elem1: null, elem2: "hardened_gypsum"},
|
||||||
|
grass: {elem1: null, elem2: "dead_plant"},
|
||||||
|
vine: {elem1: null, elem2: "dead_plant"},
|
||||||
|
evergreen: {elem1: null, elem2: "dead_plant"},
|
||||||
|
},
|
||||||
|
tick: function(pixel){
|
||||||
|
for(let coords of adjacentCoords){
|
||||||
|
let x = pixel.x+coords[0], y = pixel.y+coords[1];
|
||||||
|
let p2 = getPixel(x,y);
|
||||||
|
if(p2 != null && eLists.ANIMAL.includes(p2.element)){
|
||||||
|
if(p2.element == "rat"){
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "rotten_meat");
|
||||||
|
} else {
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "dead_bug");
|
||||||
|
}
|
||||||
|
} else if (p2 != null && eLists.CLEANANIMAL.includes(p2.element)){
|
||||||
|
if(["frog", "tadpole"].includes(p2.element)){
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "rotten_meat");
|
||||||
|
} else {
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "dead_bug");
|
||||||
|
}
|
||||||
|
} else if (p2 != null && eLists.SEEDS.includes(p2.element)){
|
||||||
|
deletePixel(pixel.x,pixel.y);
|
||||||
|
changePixel(p2, "dead_plant");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tempHigh: 17,
|
||||||
|
stateHigh: "liquid_sulfur_trioxide",
|
||||||
|
}
|
||||||
|
elements.sulfur.burnInto = "liquid_sulfur_trioxide", elements.molten_sulfur.burnInto = "liquid_sulfur_trioxide", elements.sulfur_gas.burnInto = "liquid_sulfur_trioxide";
|
||||||
|
|
||||||
|
/*Inspired by the bismuth element from nousersthings.js*/
|
||||||
|
elements.bismuth = {
|
||||||
|
color: ["#d4d4d4", "#d6d6d6", "#dedede", "#d9d9d9", "#dbdbd5"],
|
||||||
|
tempHigh: 271,
|
||||||
|
stateHigh: "molten_bismuth",
|
||||||
|
category: "solids",
|
||||||
|
state: "solid",
|
||||||
|
density: 9807,
|
||||||
|
}
|
||||||
|
|
||||||
|
elements.molten_bismuth = {
|
||||||
|
color: ["#d4d4d4", "#d6d6d6", "#dedede", "#d9d9d9", "#dbdbd5"],
|
||||||
|
category: "states",
|
||||||
|
state: "liquid",
|
||||||
|
behavior: behaviors.MOLTEN,
|
||||||
|
tick: function(pixel){
|
||||||
|
if(pixel.temp > 250 && pixel.temp < 270){
|
||||||
|
chance = 0.000075-(Math.min((pixel.temp-250)/20, 0)*0.00005);
|
||||||
|
if(Math.random()<chance){
|
||||||
|
let colors = [
|
||||||
|
{r:255, g:127, b:0},
|
||||||
|
{r: 255, g:200, b:0},
|
||||||
|
{r: 255, g:255, b:0},
|
||||||
|
{r:0, g:255, b:0},
|
||||||
|
{r:0, g:255, b:255},
|
||||||
|
{r:0, g:0, b:255},
|
||||||
|
{r:255, g:0, b:255},
|
||||||
|
{r:255, g:0, b:70},
|
||||||
|
{r:255, g:105, b:0},
|
||||||
|
];
|
||||||
|
let num = Math.round(Math.random()*7);
|
||||||
|
let newColorArr = [];
|
||||||
|
for(let i = 0; i < colors.length; i++){
|
||||||
|
newColorArr[i] = colors[(i+num)%colors.length];
|
||||||
|
}
|
||||||
|
changePixel(pixel, "bismuth");
|
||||||
|
pixel.colorArr = newColorArr;
|
||||||
|
pixel.crystallized = true;
|
||||||
|
pixel.color = normalize(newColorArr[0]);
|
||||||
|
pixel.position = 1;
|
||||||
|
} else {
|
||||||
|
let positions = [], coordsArr = [];
|
||||||
|
for(let coords of squareCoords){
|
||||||
|
let x = pixel.x+coords[0], y = pixel.y+coords[1];
|
||||||
|
let p2 = getPixel(x,y);
|
||||||
|
if(p2 != null && p2.element == "bismuth" && p2.crystallized){
|
||||||
|
positions.push(p2.position);
|
||||||
|
coordsArr.push([x,y]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(Math.random()<0.005 && positions.length > 0){
|
||||||
|
let lowestIndex = positions.indexOf(Math.min(...positions));
|
||||||
|
let newPos = positions[lowestIndex]+1;
|
||||||
|
let coords = coordsArr[lowestIndex], colors = pixelMap[coords[0]][coords[1]].colorArr || [
|
||||||
|
{r:255, g:127, b:0},
|
||||||
|
{r: 255, g:200, b:0},
|
||||||
|
{r: 255, g:255, b:0},
|
||||||
|
{r:0, g:255, b:0},
|
||||||
|
{r:0, g:255, b:255},
|
||||||
|
{r:0, g:0, b:255},
|
||||||
|
{r:255, g:0, b:255},
|
||||||
|
{r:255, g:0, b:70},
|
||||||
|
{r:255, g:105, b:0},
|
||||||
|
];
|
||||||
|
let current = ((newPos%11)/10)*colors.length;
|
||||||
|
let currentIndex = Math.floor(current);
|
||||||
|
let d = current-currentIndex;
|
||||||
|
let c1 = colors[currentIndex%colors.length], c2 = colors[(currentIndex+1)%colors.length];
|
||||||
|
changePixel(pixel, "bismuth");
|
||||||
|
pixel.crystallized = true;
|
||||||
|
pixel.position = newPos;
|
||||||
|
let num = 207 + (Math.round(Math.random()*12)-6);
|
||||||
|
let rgb = getRGB(interpolateRgb(c1, c2, d));
|
||||||
|
rgb.r = Math.round(rgb.r*(num/255)), rgb.g = Math.round(rgb.g*(num/255)), rgb.b = Math.round(rgb.b*(num/255));
|
||||||
|
pixel.color = normalize(rgb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tempLow: 250,
|
||||||
|
stateLow: "bismuth",
|
||||||
|
temp: 270,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue