Merge pull request #714 from theenchantedsword/main
Updates for morechemistry.js and betaworldgen.js
This commit is contained in:
commit
a48483846c
|
|
@ -1,128 +1,187 @@
|
||||||
//This mod was made by Alex the transfem, https://discord.com/users/778753696804765696 on discord and https://www.tiktok.com/@alextheagenenby?_t=8hoCVI3NRhu&_r=1 on tiktok.
|
//This mod was made by Adora the transfem, https://discord.com/users/778753696804765696 on discord and https://www.tiktok.com/@alextheagenenby?_t=8hoCVI3NRhu&_r=1 on tiktok.
|
||||||
function randomAlter(num, list){
|
let code = { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, o: 15, p: 16, q: 17, r: 18, s: 19, t: 20, u: 21, v: 22, w: 23, x: 24, y: 25, z: 26, A: 27, B: 28, C: 29, D: 30, E: 31, F: 32, G: 33, H: 34, I: 35, J: 36, K: 37, L: 38, M: 39, N: 40, O: 41, P: 42, Q: 43, R: 44, S: 45, T: 46, U: 47, V: 48, W: 49, X: 50, Y: 51, Z: 52 }
|
||||||
let r = Math.floor(Math.random() * list.length);
|
let invertedCode = {}
|
||||||
return (num + list[r]);
|
let flat = function(){
|
||||||
|
let str = "";
|
||||||
|
for(var i = 0; i < width; i++){
|
||||||
|
str += "a";
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
let biomes = {
|
||||||
|
plains: {
|
||||||
|
layers: 2,
|
||||||
|
thicknesses: [15, 10],
|
||||||
|
specificSeeds: "flat",
|
||||||
|
heights: [1, 21],
|
||||||
|
layersObj: {
|
||||||
|
1: ["rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","iron","iron","iron","aluminum","aluminum","aluminum","aluminum","uranium","diamond","copper","copper","copper","copper","sodium","sodium","potassium","potassium","charcoal","charcoal","charcoal","charcoal","charcoal", "calcium"],
|
||||||
|
2: ["dirt", "dirt", "dirt", "dirt", "dirt", "dirt", "dirt", "dirt", "dirt","dirt", "dirt", "dirt","dirt", "dirt", "gravel", "gravel"]
|
||||||
|
},
|
||||||
|
ssHeight: 39,
|
||||||
|
ssElems: ["grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","sapling","pinecone","seeds","seeds"]
|
||||||
|
},
|
||||||
|
desert: {
|
||||||
|
layers: 1,
|
||||||
|
thicknesses: [20],
|
||||||
|
specificSeeds: "flat",
|
||||||
|
heights: [1],
|
||||||
|
layersObj: {
|
||||||
|
1: ["sand"]
|
||||||
|
},
|
||||||
|
ssHeight: 40,
|
||||||
|
ssElems: [undefined,undefined,undefined,undefined,undefined,undefined,"cactus"]
|
||||||
|
},
|
||||||
|
forest: {
|
||||||
|
layers: 2,
|
||||||
|
specificSeeds: "flat",
|
||||||
|
heights: [1, 16],
|
||||||
|
thicknesses: [15, 10],
|
||||||
|
ssHeight: 29,
|
||||||
|
layersObj: {
|
||||||
|
1: ["rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","charcoal","charcoal","charcoal","charcoal","charcoal","iron","iron","iron","aluminum","aluminum","aluminum","calcium","calcium","sodium","potassium","diamond"],
|
||||||
|
2: ["dirt","dirt","dirt","dirt","dirt","dirt","dirt","dirt","dirt","dirt","dirt","dirt","dirt","dirt","gravel"]
|
||||||
|
},
|
||||||
|
ssElems: ["grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","grass_seed","sapling", "pinecone"],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var item in code){
|
||||||
|
invertedCode[code[item]] = item;
|
||||||
|
}
|
||||||
|
let ranNum = function(max, last) {
|
||||||
|
// Calculate a bias factor
|
||||||
|
let bias = Math.random() * 0.07 + 0.5; // Adjust this range to control the bias strength
|
||||||
|
|
||||||
|
// Generate a biased random number towards the 'last' value
|
||||||
|
let num = Math.round(bias * last + (1 - bias) * Math.random() * max) + 1;
|
||||||
|
|
||||||
|
// Randomly assign a negative or positive sign
|
||||||
|
return (Math.random() > 0.5) ? num : -num;
|
||||||
|
}
|
||||||
|
function decode(str){
|
||||||
|
let result = [];
|
||||||
|
str.split("");
|
||||||
|
for(var i = 0; i < str.length; i++){
|
||||||
|
if(code[str[i]]){
|
||||||
|
if(str[i - 1] == "*"){
|
||||||
|
result[i] = code[str[i]] * 2;
|
||||||
|
} else {
|
||||||
|
result[i] = code[str[i]];
|
||||||
|
}
|
||||||
|
} else if(str[i] == ":"){
|
||||||
|
result[i] = ":";
|
||||||
|
} else {continue;}
|
||||||
|
}
|
||||||
|
return result.filter(element => element !== undefined);
|
||||||
|
}
|
||||||
|
function makeSeed(layers, thickness){
|
||||||
|
let result = "";
|
||||||
|
for(var i = 0; i < layers; i++){
|
||||||
|
let avgThickness = thickness[i];
|
||||||
|
let str = "";
|
||||||
|
let lastNum = 0;
|
||||||
|
for(var ii = 1; ii <= width-1; ii++){
|
||||||
|
let num = ranNum(4, lastNum);
|
||||||
|
let cThickness = avgThickness + num;
|
||||||
|
lastNum = num;
|
||||||
|
if(invertedCode[cThickness] != undefined){
|
||||||
|
str += invertedCode[cThickness];
|
||||||
|
} else {
|
||||||
|
let num = Math.round(cThickness / 2);
|
||||||
|
str += `*${invertedCode[num]}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result += (i == (layers - 1)) ? str : `${str}:`;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
function splitArrayByCharacter(arr, char) {
|
||||||
|
let result = [];
|
||||||
|
let subArray = [];
|
||||||
|
|
||||||
|
arr.forEach(element => {
|
||||||
|
if (element === char) {
|
||||||
|
result.push(subArray);
|
||||||
|
subArray = [];
|
||||||
|
} else {
|
||||||
|
subArray.push(element);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Push the last subarray if it's not empty
|
||||||
|
if (subArray.length > 0) {
|
||||||
|
result.push(subArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
let avgheight = 0;
|
|
||||||
let seed = "";
|
let seed = "";
|
||||||
function getSeed(type = "plains", thickness = 15){
|
function generate(type, seed1 = undefined){
|
||||||
seed = "";
|
if(seed1){
|
||||||
console.log(thickness)
|
seed = seed1;
|
||||||
if(thickness == 15){
|
|
||||||
avgheight = Math.floor(Math.random() * (18 - 12 + 1)) + 12;
|
|
||||||
} else{
|
} else{
|
||||||
avgheight = thickness;
|
seed = makeSeed(biomes[type].layers, biomes[type].thicknesses);
|
||||||
}
|
}
|
||||||
console.log(avgheight)
|
let semifinalArr = decode(seed);
|
||||||
|
let finalArr = splitArrayByCharacter(semifinalArr, ":");
|
||||||
if(type == "plains"){
|
for(var i = 0; i < finalArr.length; i++){
|
||||||
let location = Math.floor(Math.random(0, pixelMap.length) * 100);
|
let lHeight = biomes[type].heights[i];
|
||||||
let i = 0;
|
for(var ii = 1; ii < width-1; ii++){
|
||||||
while (i < pixelMap.length){
|
for(var iii = (height - 1) - lHeight; iii > height - lHeight - finalArr[i][ii]; iii--){
|
||||||
if (i !== location){
|
let x = ii;
|
||||||
seed += `${randomAlter(avgheight, [0, 1, 1, 2, 0, 0])}|`;
|
let y = iii;
|
||||||
i += 1;
|
let Num = Math.round(Math.random() * biomes[type].layersObj[i+1].length);
|
||||||
} else if (i == location){
|
if(Num == biomes[type].layersObj[i+1].length){Num-=1;}
|
||||||
let height = `${Math.floor(Math.random(40, pixelMap[i].length) * 10)}`;
|
let element = biomes[type].layersObj[i+1][Num];
|
||||||
let prevH = randomAlter(avgheight, [1, 1, 1, 2, 0, 0]);
|
if(isEmpty(x, y) && !outOfBounds(x, y)){
|
||||||
while (height > prevH){
|
createPixel(element, x, y);
|
||||||
prevH = randomAlter(prevH, [0, 1, 1, 2, 0, 0, 0, 1]);
|
} else {console.log("could not place. " + x + ", " + y); continue;}
|
||||||
seed += `${prevH}|`;
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
i += 1;
|
if(biomes[type].specificSeeds){
|
||||||
|
if(biomes[type].specificSeeds == "flat"){
|
||||||
|
for(var i = 1; i < width-1; i++){
|
||||||
|
let y = height - biomes[type].ssHeight;
|
||||||
|
let Num = Math.round(Math.random() * biomes[type].ssElems.length);
|
||||||
|
if(Num == biomes[type].ssElems.length){Num-=1;}
|
||||||
|
let element = biomes[type].ssElems[Num];
|
||||||
|
if(element == undefined){continue;}
|
||||||
|
if(isEmpty(i, y) && !outOfBounds(i, y)){
|
||||||
|
createPixel(element, i, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return seed;
|
|
||||||
}
|
}
|
||||||
if(type == "desert"){
|
}
|
||||||
let i = 0;
|
}
|
||||||
while (i < pixelMap.length){
|
elements.copy_seed = {
|
||||||
seed += `${randomAlter(avgheight, [0, 1, 1, 2, 0, 0])}|`;
|
category: "tools",
|
||||||
i += 1;
|
onSelect: function(pixel){
|
||||||
|
navigator.clipboard.writeText(seed).then(function() {
|
||||||
|
alert(`Seed succesfully copied to clipboard!`);
|
||||||
|
}).catch(function(error) {
|
||||||
|
alert("Unable to copy text.")
|
||||||
|
});
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return seed;
|
|
||||||
}
|
|
||||||
function spawnElements(seed, list, height2 = 1, condition = [1, 1, 0]){
|
|
||||||
console.log(list);
|
|
||||||
let width = pixelMap.length - 1;
|
|
||||||
let element;
|
|
||||||
let height = pixelMap[1].length - 1;
|
|
||||||
console.log(seed);
|
|
||||||
let seedArray = seed.split("|");
|
|
||||||
console.log(seedArray);
|
|
||||||
seedArray.splice(seedArray.indexOf(""), 1);
|
|
||||||
seedArray.splice(pixelMap.length);
|
|
||||||
console.log(seedArray);
|
|
||||||
let i = 0;
|
|
||||||
while (i < seedArray.length - 1){
|
|
||||||
|
|
||||||
let ii = 0;
|
|
||||||
while (ii < seedArray[i]){
|
|
||||||
if((Math.floor(Math.random() * (condition[0] - condition[1] + 1))) == condition[2]){
|
|
||||||
if (height2 != 1){
|
|
||||||
element = list[Math.floor(Math.random() * list.length)];
|
|
||||||
createPixel(element, (width - 1) - i, (height - (height2 + 1)) - ii);
|
|
||||||
} else{
|
|
||||||
element = list[Math.floor(Math.random() * list.length)];
|
|
||||||
createPixel(element, (width - 1) - i, (height - 1) - ii);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ii += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elements.random_generation = {
|
||||||
function flat(){
|
category: "tools",
|
||||||
let iii = 0;
|
onSelect: function(pixel){
|
||||||
let flat = "";
|
autoResizeCanvas();
|
||||||
while (iii < pixelMap.length){
|
focusGame();
|
||||||
flat += "1|";
|
let type = prompt("Enter the biome you want to generate: \nOptions: plains, desert, forest");
|
||||||
iii += 1;
|
if(!biomes[type]) {type = "plains";}
|
||||||
}
|
generate(type);
|
||||||
return flat;
|
|
||||||
}
|
|
||||||
function processSeed(seed, type = "plains"){
|
|
||||||
|
|
||||||
console.log(flat());
|
|
||||||
let seedsArray = seed.split(":");
|
|
||||||
console.log(seedsArray);
|
|
||||||
if(type == "plains"){
|
|
||||||
spawnElements(seedsArray[0],["rock","rock","rock","rock","rock","rock","metal_scrap","metal_scrap","metal_scrap","gold_coin","uranium","uranium","diamond","rock","iron","iron","iron","aluminum","aluminum","aluminum","aluminum","copper","copper","copper","zinc","zinc","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock"].sort(() => Math.random() - 0.5));
|
|
||||||
setTimeout(function(){ spawnElements(seedsArray[1], ["dirt"], 24); }, 200);
|
|
||||||
setTimeout(function(){ spawnElements(flat(),["grass","grass","grass","sapling","flower_seed","grass","grass","pinecone","grass","grass","grass","grass","grass","grass","grass","grass","grass","grass"], 40); }, 300);
|
|
||||||
} else if(type == "desert"){
|
|
||||||
spawnElements(seed, ["sand"]);
|
|
||||||
setTimeout(function(){ spawnElements(flat(), ["cactus"], 40, [6, 0, 3]); }, 100);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elements.worldGen = {
|
elements.seed_generation = {
|
||||||
color: "#FFFFFF",
|
category: "tools",
|
||||||
behavior: elements.erase.behavior,
|
onSelect: function(pixel){
|
||||||
temp: 2,
|
autoResizeCanvas();
|
||||||
category: "tools",
|
focusGame();
|
||||||
insulate:true,
|
let type = prompt("Enter the biome you want to generate: \nOptions: plains, desert, forest");
|
||||||
canPlace: false,
|
let seed1 = prompt("Enter the seed: ");
|
||||||
desc: "Generate worlds with random seeds or your own seeds.",
|
generate(type, seed1);
|
||||||
onSelect: function() {
|
|
||||||
let Seed = prompt("Enter desert or plains random generation! automatically set to plains.");
|
|
||||||
let regex = /[a-z]/;
|
|
||||||
if (regex.test(Seed)){
|
|
||||||
if(Seed.toLowerCase() == "desert"){
|
|
||||||
processSeed(getSeed("desert", 30), "desert");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (Seed == ""){
|
|
||||||
seed = `${getSeed("plains", 20)}:${getSeed("plains", 8)}`
|
|
||||||
processSeed(seed);
|
|
||||||
} else{
|
|
||||||
processSeed(Seed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
//This mod was made by Adora the transfem, https://discord.com/users/778753696804765696 on discord and https://www.tiktok.com/@alextheagenenby?_t=8hoCVI3NRhu&_r=1 on tiktok.
|
//This mod was made by Adora the transfem, https://discord.com/users/778753696804765696 on discord and https://www.tiktok.com/@alextheagenenby?_t=8hoCVI3NRhu&_r=1 on tiktok.
|
||||||
let version = "1.5.2";
|
let version = "1.6.2";
|
||||||
function pixelInRange(pixel, range){
|
function pixelInRange(pixel, range){
|
||||||
let i = 0;
|
let i = 0;
|
||||||
while (i < range.length) {
|
while (i < range.length) {
|
||||||
|
|
@ -20,6 +20,8 @@ function customExplosion(pixel1, pixel2, radius, list) {
|
||||||
let y = pixel1.y;
|
let y = pixel1.y;
|
||||||
deletePixel(x, y);
|
deletePixel(x, y);
|
||||||
deletePixel(pixel2.x, pixel2.y);
|
deletePixel(pixel2.x, pixel2.y);
|
||||||
|
doFrame();
|
||||||
|
focusGame();
|
||||||
explodeAt(x, y, radius, list);
|
explodeAt(x, y, radius, list);
|
||||||
};
|
};
|
||||||
function reactPixels(pixel1,pixel2) {
|
function reactPixels(pixel1,pixel2) {
|
||||||
|
|
@ -169,7 +171,7 @@ elements.sodiumhydroxidecrystals = {
|
||||||
//tempHigh: 64.7,
|
//tempHigh: 64.7,
|
||||||
fireColor: "#fba600",
|
fireColor: "#fba600",
|
||||||
category: "powders",
|
category: "powders",
|
||||||
state: "powder",
|
state: "solid",
|
||||||
density: 2130,
|
density: 2130,
|
||||||
name: "SodiumHydroxideCrystals",
|
name: "SodiumHydroxideCrystals",
|
||||||
}
|
}
|
||||||
|
|
@ -632,10 +634,13 @@ elements.potassiumhydroxidecrystals = {
|
||||||
//tempHigh: 64.7,
|
//tempHigh: 64.7,
|
||||||
fireColor: "#fba600",
|
fireColor: "#fba600",
|
||||||
category: "powders",
|
category: "powders",
|
||||||
state: "powder",
|
state: "solid",
|
||||||
density: 2040,
|
density: 2040,
|
||||||
name: "PotassiumHydroxideCrystals",
|
name: "PotassiumHydroxideCrystals",
|
||||||
}
|
}
|
||||||
|
let filterItems;
|
||||||
|
let direction;
|
||||||
|
|
||||||
elements.iron_chloride = {
|
elements.iron_chloride = {
|
||||||
color: ["#010014", "#a2ff94"],
|
color: ["#010014", "#a2ff94"],
|
||||||
reactions: {
|
reactions: {
|
||||||
|
|
@ -691,7 +696,7 @@ elements.kilonova = {
|
||||||
temp: 100000000,
|
temp: 100000000,
|
||||||
}
|
}
|
||||||
elements.supernova.behavior = [ ["XX", "XX", "XX"], [ "XX", "EX:80>plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,molten_iron,molten_uranium,oxygen,molten_sodium,sulfur_gas,neon,chlorine,molten_calcium,molten_nickel,molten_copper,molten_zinc,gallium_gas,hydrogen,hydrogen,hydrogen,hydrogen,helium,helium,helium AND CH:NeutronStar", "XX" ], ["XX", "XX", "XX"] ]
|
elements.supernova.behavior = [ ["XX", "XX", "XX"], [ "XX", "EX:80>plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,molten_iron,molten_uranium,oxygen,molten_sodium,sulfur_gas,neon,chlorine,molten_calcium,molten_nickel,molten_copper,molten_zinc,gallium_gas,hydrogen,hydrogen,hydrogen,hydrogen,helium,helium,helium AND CH:NeutronStar", "XX" ], ["XX", "XX", "XX"] ]
|
||||||
elements.kilonova.behavior = [ ["XX", "XX", "XX"], [ "XX", "EX:200>plasma,plasma,plasma,plasma,plasma,plasma,molten_iron,molten_uranium,molten_lead,oxygen,molten_sodium,molten_gold,molten_tungsten,sulfur_gas,neon,chlorine,molten_calcium,molten_nickel,molten_copper,molten_zinc,gallium_gas,hydrogen,hydrogen,hydrogen,hydrogen,hydrogen,helium,helium,helium,helium AND CH:void", "XX" ], ["XX", "XX", "XX"] ]
|
elements.kilonova.behavior = [ ["XX", "XX", "XX"], [ "XX", "EX:200>plasma,plasma,molten_iron,molten_uranium,molten_lead,oxygen,molten_sodium,molten_gold,molten_tungsten,sulfur_gas,neon,chlorine,molten_calcium,molten_nickel,molten_copper,molten_zinc,gallium_gas,hydrogen,hydrogen,hydrogen,hydrogen,hydrogen,helium,helium,helium,helium AND CH:void", "XX" ], ["XX", "XX", "XX"] ]
|
||||||
elements.NeutronStar = {
|
elements.NeutronStar = {
|
||||||
behavior: [["XX", "XX", "XX"], ["CR:light", "XX", "CR:light"], ["XX", "XX", "XX"]],
|
behavior: [["XX", "XX", "XX"], ["CR:light", "XX", "CR:light"], ["XX", "XX", "XX"]],
|
||||||
name: "NeutronStar",
|
name: "NeutronStar",
|
||||||
|
|
@ -708,6 +713,7 @@ elements.NeutronStar = {
|
||||||
"NeutronStar": { "elem1": "kilonova", "temp1": 100000000, },
|
"NeutronStar": { "elem1": "kilonova", "temp1": 100000000, },
|
||||||
},
|
},
|
||||||
density: 10**17,
|
density: 10**17,
|
||||||
|
hardness: 1,
|
||||||
}
|
}
|
||||||
elements.acid.ignore.push("pipe");
|
elements.acid.ignore.push("pipe");
|
||||||
elements.acid.ignore.push("gold");
|
elements.acid.ignore.push("gold");
|
||||||
|
|
@ -724,27 +730,16 @@ elements.NaK = {
|
||||||
color: "#848484",
|
color: "#848484",
|
||||||
viscosity: 9.4,
|
viscosity: 9.4,
|
||||||
reactions: {
|
reactions: {
|
||||||
"water": {
|
water: {
|
||||||
func: function (pixel1, pixel2) {customExplosion(pixel1, pixel2, 5, ["fire", "fire", "pop", "hydrogen", "sodiumhydroxide", "potassiumhydroxide","sodiumhydroxide", "potassiumhydroxide","sodiumhydroxide", "potassiumhydroxide"])}
|
explosion: "fire,fire,pop,hydrogen,sodiumhydroxide,potassiumhydroxide,sodiumhydroxide,potassiumhydroxide,sodiumhydroxide,potassiumhydroxide", radius: 5,},
|
||||||
},
|
|
||||||
acid: {
|
acid: {
|
||||||
func: function (pixel1, pixel2) {customExplosion(pixel1, pixel2, 6, ["fire", "pop", "hydrogen", "water", "pop", "hydrogen", "hydrogen"])}
|
explosion: "fire,fire,pop,hydrogen,salt,potassium_salt,hydrogen,fire", radius: 6,},
|
||||||
},
|
|
||||||
acidic_water: {
|
acidic_water: {
|
||||||
func: function (pixel1, pel2) {customExplosion(pixel1, pixel2, 3, ["pop", "hydrogen", "hydrogen", "water","sodiumhyixdroxide", "potassiumhydroxide"])}
|
explosion: "fire,fire,pop,hydrogen,sodiumhydroxide,potassiumhydroxide,salt,potassium_salt", radius: 5,},
|
||||||
},
|
nitric_acid: {
|
||||||
chloroauric_acid: { elem1: "gold",
|
explosion: "fire,fire,fire,pop,hydrogen,sodiumhydroxide,potassiumhydroxide", radius: 6,},
|
||||||
func: function (pixel1, pixel2) {customExplosion(pixel1, pixel2, 7, ["fire", "fire", "pop", "hydrogen", "gold_coin", "hydrogen", "pop"])}
|
|
||||||
},
|
|
||||||
liquid_chloroauric_acid: { elem1: "gold",
|
|
||||||
func: function (pixel1, pixel2) {customExplosion(pixel1, pixel2, 7, ["fire", "fire", "pop", "hydrogen", "gold_coin", "hydrogen", "hydrogen", "pop"])}
|
|
||||||
},
|
|
||||||
nitric_acid:{
|
|
||||||
func: function (pixel1, pixel2) {customExplosion(pixel1, pixel2, 6, ["fire", "fire", "pop", "hydrogen", "hydrogen", "pop"])}
|
|
||||||
},
|
|
||||||
aqua_regia: {
|
aqua_regia: {
|
||||||
func: function (pixel1, pixel2) {customExplosion(pixel1, pixel2, 9, ["fire", "fire", "pop", "hydrogen", "fire", "fire", "hydrogen", "pop", "flash"])}
|
explosion: "fire,fire,pop,hydrogen,sodiumhydroxide,potassiumhydroxide,salt,potassium_salt,fire,hydrogen,pop", radius: 7,},
|
||||||
},
|
|
||||||
},
|
},
|
||||||
density: 868,
|
density: 868,
|
||||||
};
|
};
|
||||||
|
|
@ -770,6 +765,7 @@ elements.rubidium = {
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
pixel.burning = true;
|
pixel.burning = true;
|
||||||
},
|
},
|
||||||
|
state: "solid",
|
||||||
}
|
}
|
||||||
elements.moltenrubidium = {
|
elements.moltenrubidium = {
|
||||||
density: 1532,
|
density: 1532,
|
||||||
|
|
@ -798,7 +794,7 @@ elements.moltenrubidium = {
|
||||||
}
|
}
|
||||||
|
|
||||||
elements.rubidiumsalt = {
|
elements.rubidiumsalt = {
|
||||||
state: "powder",
|
state: "solid",
|
||||||
name: "RubidiumSalt",
|
name: "RubidiumSalt",
|
||||||
alias: "Rubidium Chloride or RbCl",
|
alias: "Rubidium Chloride or RbCl",
|
||||||
color: ["#e6e6e6", "#f5f5f5", "#fafafa", "#f0f0f0"],
|
color: ["#e6e6e6", "#f5f5f5", "#fafafa", "#f0f0f0"],
|
||||||
|
|
@ -899,7 +895,7 @@ elements.rubidiumhydroxidecrystals = {
|
||||||
},
|
},
|
||||||
fireColor: "#d91e1e",
|
fireColor: "#d91e1e",
|
||||||
category: "powders",
|
category: "powders",
|
||||||
state: "powder",
|
state: "solid",
|
||||||
density: 2.12,
|
density: 2.12,
|
||||||
name: "RubidiumHydroxideCrystals",
|
name: "RubidiumHydroxideCrystals",
|
||||||
}
|
}
|
||||||
|
|
@ -1022,11 +1018,12 @@ elements.specialsmasher = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
if(pixel.start == pixelTicks) {
|
if(pixel.start + 1 == pixelTicks) {
|
||||||
pixel.range = num2;
|
pixel.range = num2;
|
||||||
|
pixel.exclude = exclude;
|
||||||
}
|
}
|
||||||
let range = mouseRange(pixel.x, pixel.y, pixel.range);
|
let range = mouseRange(pixel.x, pixel.y, pixel.range);
|
||||||
smash(range, exclude);
|
smash(range, pixel.exclude);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let num3 = 0;
|
let num3 = 0;
|
||||||
|
|
@ -1038,7 +1035,7 @@ elements.specialmixer = {
|
||||||
noMix: true,
|
noMix: true,
|
||||||
onSelect: function(pixel) {
|
onSelect: function(pixel) {
|
||||||
let item = prompt("enter range for mixing.");
|
let item = prompt("enter range for mixing.");
|
||||||
exclude = prompt("Enter elements to exclude, seperate them with commas.").replace(/\s/g, "").split(",");
|
exclude1 = prompt("Enter elements to exclude, seperate them with commas.").replace(/\s/g, "").split(",");
|
||||||
if(/^\d+$/.test(item)){
|
if(/^\d+$/.test(item)){
|
||||||
num3 = parseInt(item);
|
num3 = parseInt(item);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1046,11 +1043,12 @@ elements.specialmixer = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
if(pixel.start == pixelTicks) {
|
if(pixel.start + 1 == pixelTicks) {
|
||||||
pixel.range = num3;
|
pixel.range = num3;
|
||||||
|
pixel.exclude = exclude1;
|
||||||
}
|
}
|
||||||
let range = mouseRange(pixel.x, pixel.y, pixel.range);
|
let range = mouseRange(pixel.x, pixel.y, pixel.range);
|
||||||
mix(range, exclude);
|
mix(range, pixel.exclude);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1355,7 +1353,10 @@ function pull(range, pixel1, include = []){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function reduceToSign(num) {
|
||||||
|
if(num == 0){return 0;}
|
||||||
|
return num && num / Math.abs(num);
|
||||||
|
}
|
||||||
let prevNum;
|
let prevNum;
|
||||||
elements.etemper = {
|
elements.etemper = {
|
||||||
name: "E-Temper",
|
name: "E-Temper",
|
||||||
|
|
@ -1377,11 +1378,15 @@ elements.etemper = {
|
||||||
if(outOfBounds(x,y)){ continue; }
|
if(outOfBounds(x,y)){ continue; }
|
||||||
if(isEmpty(x,y)){ continue; }
|
if(isEmpty(x,y)){ continue; }
|
||||||
let pixel2 = pixelMap[x][y];
|
let pixel2 = pixelMap[x][y];
|
||||||
|
if(reduceToSign(pixel.Temp) == -1){
|
||||||
if (pixel2.temp < pixel.Temp && pixel.charge > 0 ){
|
if (pixel2.temp > pixel.Temp && pixel.charge > 0 ){
|
||||||
pixel2.temp += pixel.Temp / 6;
|
pixel2.temp += pixel.Temp / 6;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (pixel2.temp < pixel.Temp && pixel.charge > 0 ){
|
||||||
|
pixel2.temp += pixel.Temp / 6;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -1401,6 +1406,7 @@ elements.sign = {
|
||||||
let attrElem = "";
|
let attrElem = "";
|
||||||
let magnetRange = 0;
|
let magnetRange = 0;
|
||||||
let magnetElems = [];
|
let magnetElems = [];
|
||||||
|
let magnetPixels = [];
|
||||||
elements.magnet = {
|
elements.magnet = {
|
||||||
category: "machines",
|
category: "machines",
|
||||||
tick:function(pixel){
|
tick:function(pixel){
|
||||||
|
|
@ -1413,6 +1419,9 @@ elements.magnet = {
|
||||||
for (var i = 0; i < currentPixels.length; i++){
|
for (var i = 0; i < currentPixels.length; i++){
|
||||||
if(pixelInRange(currentPixels[i], range)){
|
if(pixelInRange(currentPixels[i], range)){
|
||||||
let pixel2 = currentPixels[i]
|
let pixel2 = currentPixels[i]
|
||||||
|
if(!magnetPixels.includes(pixel2)){
|
||||||
|
magnetPixels.push(pixel2);
|
||||||
|
}
|
||||||
if(!pixel2.drag && pixel.elem.includes(pixel2.element)){pixel2.drag = true}
|
if(!pixel2.drag && pixel.elem.includes(pixel2.element)){pixel2.drag = true}
|
||||||
if(pixel2.drag && !pixel.elem.includes(pixel2.element) && !beamPixels.includes(pixel2) && ((draggingPixels && draggingPixels.includes(pixel2)) || !draggingPixels)){pixel2.drag = false;}
|
if(pixel2.drag && !pixel.elem.includes(pixel2.element) && !beamPixels.includes(pixel2) && ((draggingPixels && draggingPixels.includes(pixel2)) || !draggingPixels)){pixel2.drag = false;}
|
||||||
if(!magnetElems.includes(pixel2) && pixel.elem.includes(pixel2.element)){magnetElems.push(pixel2)}
|
if(!magnetElems.includes(pixel2) && pixel.elem.includes(pixel2.element)){magnetElems.push(pixel2)}
|
||||||
|
|
@ -1424,6 +1433,18 @@ elements.magnet = {
|
||||||
currentPixels[i].drag = false;
|
currentPixels[i].drag = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for(var i = 0; i < magnetPixels.length; i++){
|
||||||
|
if(magnetPixels.length != 0){
|
||||||
|
if(!pixel.elem.includes(magnetPixels[i].element)){
|
||||||
|
magnetPixels[i].drag = false;
|
||||||
|
magnetPixels.splice(i, 1);
|
||||||
|
}
|
||||||
|
if(!pixelInRange(magnetPixels[i], range)){
|
||||||
|
magnetPixels[i].drag = false;
|
||||||
|
magnetPixels.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onSelect: function(){
|
onSelect: function(){
|
||||||
attrElem = prompt("Enter the element you want to attract.", (attrElem || undefined));
|
attrElem = prompt("Enter the element you want to attract.", (attrElem || undefined));
|
||||||
|
|
@ -1537,6 +1558,44 @@ document.addEventListener("keydown", function(event){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(event.key.toLowerCase() == "v"){
|
||||||
|
for(var i = 0; i < UFOs.length; i++){
|
||||||
|
let pixel = UFOs[i];
|
||||||
|
let x = pixel.x
|
||||||
|
for (var y = pixel.y + 1; y < height; y++) {
|
||||||
|
if (outOfBounds(x, y)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (isEmpty(x, y)) {
|
||||||
|
if (Math.random() > 0.05) { continue }
|
||||||
|
createPixel("flash", x, y);
|
||||||
|
pixelMap[x][y].color = "#032dff";
|
||||||
|
pixelMap[x][y].temp = -3500;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (elements[pixelMap[x][y].element].isGas) { continue }
|
||||||
|
if (elements[pixelMap[x][y].element].id === elements.heat_ray.id) { break }
|
||||||
|
pixelMap[x][y].temp -= 10;
|
||||||
|
pixelTempCheck(pixelMap[x][y]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(event.key.toLowerCase() == "t"){
|
||||||
|
for(var i = 0; i < UFOs.length; i++){
|
||||||
|
for(var ii = 0; ii < adjacentCoords.length; ii++){
|
||||||
|
let x = UFOs[i].x + adjacentCoords[ii][0];
|
||||||
|
let y = UFOs[i].y + adjacentCoords[ii][1];
|
||||||
|
if(x == pixel.x || y == pixel.y) {continue;}
|
||||||
|
if(!outOfBounds(x,y) && !isEmpty(x,y)){
|
||||||
|
if(pixelMap[x][y].element == "ufo"){continue;}
|
||||||
|
deletePixel(x,y);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
function isArray(item) {
|
function isArray(item) {
|
||||||
return Object.prototype.toString.call(item) === '[object Array]';
|
return Object.prototype.toString.call(item) === '[object Array]';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue