Merge branch 'main' of https://github.com/R74nCom/sandboxels
This commit is contained in:
commit
f1f39daac4
|
|
@ -117,7 +117,7 @@
|
||||||
|
|
||||||
<!----><tr><td class="modCat" colspan="3">Tools & Settings</td></tr><!---->
|
<!----><tr><td class="modCat" colspan="3">Tools & Settings</td></tr><!---->
|
||||||
<tr><td>adjustablepixelsize.js</td><td>Allows you to set the pixelSize with a URL parameter</td><td>Alice</td></tr>
|
<tr><td>adjustablepixelsize.js</td><td>Allows you to set the pixelSize with a URL parameter</td><td>Alice</td></tr>
|
||||||
<tr><td>betaworldgen.js</td><td>adds a more advanced world generation to the game</td><td>Alex</td></tr>
|
<tr><td>betaworldgen.js</td><td>adds a more advanced world generation to the game</td><td>Adora</td></tr>
|
||||||
<tr><td>betterModManager.js</td><td>Improvements to the Mod Manager</td><td>ggod</td></tr>
|
<tr><td>betterModManager.js</td><td>Improvements to the Mod Manager</td><td>ggod</td></tr>
|
||||||
<tr><td>betterSettings.js</td><td>Adds additional settings and functionality</td><td>ggod</td></tr>
|
<tr><td>betterSettings.js</td><td>Adds additional settings and functionality</td><td>ggod</td></tr>
|
||||||
<tr><td>betterStats.js</td><td>Separate “real” and “set” TPS, meaning you can see what the TPS actually is, instead of only seeing what it’s set to</td><td>mollthecoder</td></tr>
|
<tr><td>betterStats.js</td><td>Separate “real” and “set” TPS, meaning you can see what the TPS actually is, instead of only seeing what it’s set to</td><td>mollthecoder</td></tr>
|
||||||
|
|
@ -168,7 +168,7 @@
|
||||||
<tr><td>metals.js</td><td>Adds several metals</td><td>Alice</td></tr>
|
<tr><td>metals.js</td><td>Adds several metals</td><td>Alice</td></tr>
|
||||||
<tr><td>mixture.js</td><td>Allows many chemicals to be mixed</td><td>lllllllllwith10ls</td></tr>
|
<tr><td>mixture.js</td><td>Allows many chemicals to be mixed</td><td>lllllllllwith10ls</td></tr>
|
||||||
<tr><td>more_gold.js</td><td>Adds Green Gold</td><td>pixelegend4</td></tr>
|
<tr><td>more_gold.js</td><td>Adds Green Gold</td><td>pixelegend4</td></tr>
|
||||||
<tr><td>morechemistry.js</td><td>Adds many new chemicals and compounds as well as some new machines</td><td>Alex</td></tr>
|
<tr><td>morechemistry.js</td><td>Adds many new chemicals and compounds as well as some new machines</td><td>Adora</td></tr>
|
||||||
<tr><td>moreliquids.js</td><td>Adds various liquids</td><td>te-agma-at</td></tr>
|
<tr><td>moreliquids.js</td><td>Adds various liquids</td><td>te-agma-at</td></tr>
|
||||||
<tr><td>nellfire.js</td><td>Adds a weird transforming flame and several rock types</td><td>Alice</td></tr>
|
<tr><td>nellfire.js</td><td>Adds a weird transforming flame and several rock types</td><td>Alice</td></tr>
|
||||||
<tr><td>Neutronium Mod.js</td><td>Variety of scientific elements<br>Explosions</td><td>StellarX20</td></tr>
|
<tr><td>Neutronium Mod.js</td><td>Variety of scientific elements<br>Explosions</td><td>StellarX20</td></tr>
|
||||||
|
|
@ -235,6 +235,7 @@
|
||||||
<tr><td>nocancer2.js</td><td>Removes cancer from the game altogether. May be incompatible with other mods that spawn cancer</td><td>mollthecoder</td></tr>
|
<tr><td>nocancer2.js</td><td>Removes cancer from the game altogether. May be incompatible with other mods that spawn cancer</td><td>mollthecoder</td></tr>
|
||||||
<tr><td>nograssgrow.js</td><td>Prevents Grass from growing</td><td>mollthecoder</td></tr>
|
<tr><td>nograssgrow.js</td><td>Prevents Grass from growing</td><td>mollthecoder</td></tr>
|
||||||
<tr><td>pizzasstuff.js</td><td>New animals, foods, and plants</td><td>_ilikepizza_</td></tr>
|
<tr><td>pizzasstuff.js</td><td>New animals, foods, and plants</td><td>_ilikepizza_</td></tr>
|
||||||
|
<tr><td>plants.js</td><td>Adds a wide variety of new plants and fruits</td><td>Adora</td></tr>
|
||||||
<tr><td>primordial_birthpool.js</td><td>A cross between Primordial Soup and Birthpool. Requires F&M</td><td>Alice</td></tr>
|
<tr><td>primordial_birthpool.js</td><td>A cross between Primordial Soup and Birthpool. Requires F&M</td><td>Alice</td></tr>
|
||||||
<tr><td>spring.js</td><td>Many nature elements, like sakura trees, butterflies, beehives, and more</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>spring.js</td><td>Many nature elements, like sakura trees, butterflies, beehives, and more</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
<tr><td>the_ground_og.js</td><td>Simplified and more stable version of the_ground.js</td><td>Alice</td></tr>
|
<tr><td>the_ground_og.js</td><td>Simplified and more stable version of the_ground.js</td><td>Alice</td></tr>
|
||||||
|
|
@ -244,7 +245,7 @@
|
||||||
|
|
||||||
<!----><tr><td class="modCat" colspan="3">Fun & Games</td></tr><!---->
|
<!----><tr><td class="modCat" colspan="3">Fun & Games</td></tr><!---->
|
||||||
<tr><td>all_around_fillers.js</td><td>Adds directional Filler variants</td><td>idk73248</td></tr>
|
<tr><td>all_around_fillers.js</td><td>Adds directional Filler variants</td><td>idk73248</td></tr>
|
||||||
<tr><td>allliquids.js</td><td>Made all elements liquids</td><td>Alex</td></tr>
|
<tr><td>allliquids.js</td><td>Made all elements liquids</td><td>Adora</td></tr>
|
||||||
<tr><td>amogus.js</td><td>Adds a small amogus structure</td><td>Alice</td></tr>
|
<tr><td>amogus.js</td><td>Adds a small amogus structure</td><td>Alice</td></tr>
|
||||||
<tr><td>collab_mod.js</td><td>Created by multiple people, adds random things</td><td>mrapple, ilikepizza, stefanblox</td></tr>
|
<tr><td>collab_mod.js</td><td>Created by multiple people, adds random things</td><td>mrapple, ilikepizza, stefanblox</td></tr>
|
||||||
<tr><td>elem3.js</td><td>Adds all elements and combinations from Elemental 3 [Very Large]</td><td>Sophie</td></tr>
|
<tr><td>elem3.js</td><td>Adds all elements and combinations from Elemental 3 [Very Large]</td><td>Sophie</td></tr>
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,19 +1,33 @@
|
||||||
/*
|
/*
|
||||||
Created by SquareScreamYT and RealerRaddler
|
Created by SquareScreamYT <@918475812884344852> and RealerRaddler <@914371295561535508>
|
||||||
Thanks to Alice, nousernamefound and Fioushemastor for helping :)
|
Thanks to Alice <@697799964985786450>, nousernamefound <@316383921346707468>, Adora the Transfem <@778753696804765696> and Fioushemastor <@738828785482203189> for helping :)
|
||||||
|
|
||||||
|
v1.6
|
||||||
|
|
||||||
|
me trying to come up with stuff not in plants.js:
|
||||||
|
|
||||||
Upcoming Features:
|
Upcoming Features:
|
||||||
- onions
|
- onions
|
||||||
- spring onions
|
- spring onions
|
||||||
- soy sauce
|
- soy sauce
|
||||||
- rice
|
- rice and porridge (white rice noodles)
|
||||||
- seaweed and agar
|
- seaweed and agar
|
||||||
- pigs, ham and bacon
|
- pigs, ham and bacon
|
||||||
- garlic
|
- garlic
|
||||||
- msg
|
- msg
|
||||||
- stainless steel
|
- stainless steel
|
||||||
|
- chili
|
||||||
v1.5
|
- pepper plants
|
||||||
|
- pineapples
|
||||||
|
- mint
|
||||||
|
- vanilla
|
||||||
|
- cocoa beans and hot chocolate
|
||||||
|
- normal cookies and cookie dough
|
||||||
|
- cows and beef
|
||||||
|
- mangoes and passionfruits
|
||||||
|
- celery
|
||||||
|
- marshmallows, normal, cooked and burnt
|
||||||
|
- broccoli
|
||||||
|
|
||||||
Changelog (v1.0)
|
Changelog (v1.0)
|
||||||
- added chickens
|
- added chickens
|
||||||
|
|
@ -218,6 +232,27 @@ Changelog (v1.5)
|
||||||
- added cookies and cookie dough
|
- added cookies and cookie dough
|
||||||
- replaced cooking oil with nut oil
|
- replaced cooking oil with nut oil
|
||||||
- added boba and boba dough
|
- added boba and boba dough
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Changelog (v1.6)
|
||||||
|
- added freeze and warm tool
|
||||||
|
- added olive seeds
|
||||||
|
- juice mixing functionality
|
||||||
|
- wine can now be made by mixing grape juice and alcohol
|
||||||
|
- added bananas and related stuff
|
||||||
|
- bananas
|
||||||
|
- hanging banana peduncle and banana peduncle
|
||||||
|
- banana stem and banana stem top
|
||||||
|
- banana leaves
|
||||||
|
- cut banana
|
||||||
|
- banana juice
|
||||||
|
- banana bread
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -227,6 +262,19 @@ elements.test = {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
function interpolateRgb(rgb1, rgb2, ratio) {
|
||||||
|
const interpolatedRgb = {
|
||||||
|
r: Math.round(rgb1.r + (rgb2.r - rgb1.r) * ratio),
|
||||||
|
g: Math.round(rgb1.g + (rgb2.g - rgb1.g) * ratio),
|
||||||
|
b: Math.round(rgb1.b + (rgb2.b - rgb1.b) * ratio),
|
||||||
|
};
|
||||||
|
return interpolatedRgb;
|
||||||
|
}
|
||||||
|
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.knife = {
|
elements.knife = {
|
||||||
color: "#adb5bd",
|
color: "#adb5bd",
|
||||||
// other needed properties
|
// other needed properties
|
||||||
|
|
@ -245,6 +293,8 @@ elements.knife = {
|
||||||
desc: "Use on pixels to cut them, if possible."
|
desc: "Use on pixels to cut them, if possible."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eLists.JUICEMIXABLE = ["juice"];
|
||||||
|
|
||||||
elements.chicken = {
|
elements.chicken = {
|
||||||
color: ["#c29046", "#f5d271", "#d4bd7d"],
|
color: ["#c29046", "#f5d271", "#d4bd7d"],
|
||||||
behavior: [
|
behavior: [
|
||||||
|
|
@ -717,6 +767,53 @@ elements.olive = {
|
||||||
density: 1050,
|
density: 1050,
|
||||||
isFood: false
|
isFood: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
elements.olive_seed = {
|
||||||
|
color: "#854610",
|
||||||
|
tick: function(pixel) {
|
||||||
|
if (isEmpty(pixel.x,pixel.y+1)) {
|
||||||
|
movePixel(pixel,pixel.x,pixel.y+1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (Math.random() < 0.02 && pixel.age > 50 && pixel.temp < 100) {
|
||||||
|
if (!outOfBounds(pixel.x,pixel.y+1)) {
|
||||||
|
var dirtPixel = pixelMap[pixel.x][pixel.y+1];
|
||||||
|
if (dirtPixel.element === "dirt" || dirtPixel.element === "mud" || dirtPixel.element === "sand" || dirtPixel.element === "wet_sand" || dirtPixel.element === "clay_soil" || dirtPixel.element === "mycelium") {
|
||||||
|
changePixel(dirtPixel,"root");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x,pixel.y-1)) {
|
||||||
|
movePixel(pixel,pixel.x,pixel.y-1);
|
||||||
|
createPixel(Math.random() > 0.5 ? "olive_wood" : "olive_branch",pixel.x,pixel.y+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pixel.age > 1000) {
|
||||||
|
changePixel(pixel,"olive_wood");
|
||||||
|
}
|
||||||
|
pixel.age++;
|
||||||
|
}
|
||||||
|
doDefaults(pixel);
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
"age":0
|
||||||
|
},
|
||||||
|
tempHigh: 100,
|
||||||
|
stateHigh: "dead_plant",
|
||||||
|
tempLow: -2,
|
||||||
|
stateLow: "frozen_plant",
|
||||||
|
burn: 65,
|
||||||
|
burnTime: 15,
|
||||||
|
category: "life",
|
||||||
|
state: "solid",
|
||||||
|
density: 1500,
|
||||||
|
cooldown: defaultCooldown,
|
||||||
|
seed: true,
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|FX%10|XX",
|
||||||
|
"XX|M1|XX",
|
||||||
|
],
|
||||||
|
};
|
||||||
/*
|
/*
|
||||||
elements.cooking_oil = {
|
elements.cooking_oil = {
|
||||||
color: "#ffc844",
|
color: "#ffc844",
|
||||||
|
|
@ -951,12 +1048,21 @@ elements.apple_juice = {
|
||||||
density: 825,
|
density: 825,
|
||||||
hidden: true,
|
hidden: true,
|
||||||
temp: 30,
|
temp: 30,
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#ffde55")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
reactions: {
|
reactions: {
|
||||||
"sugar": { elem1:"apple_jam", elem2:null, chance:0.35 },
|
"sugar": { elem1:"apple_jam", elem2:null, chance:0.35 },
|
||||||
"yeast": { elem1:"apple_cider_vinegar", elem2:null, chance:0.35 }
|
"yeast": { elem1:"apple_cider_vinegar", elem2:null, chance:0.35 }
|
||||||
},
|
},
|
||||||
tempLow: 0
|
tempLow: 0
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("apple_juice");
|
||||||
|
|
||||||
elements.apple_jam = {
|
elements.apple_jam = {
|
||||||
color: "#ebc034",
|
color: "#ebc034",
|
||||||
|
|
@ -1251,6 +1357,14 @@ elements.orange_seed = {
|
||||||
|
|
||||||
elements.orange_juice = {
|
elements.orange_juice = {
|
||||||
color: "#ffb326",
|
color: "#ffb326",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#ffde55")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -1264,6 +1378,7 @@ elements.orange_juice = {
|
||||||
temp: 30,
|
temp: 30,
|
||||||
tempLow: 0
|
tempLow: 0
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("orange_juice");
|
||||||
|
|
||||||
elements.orange_peels = {
|
elements.orange_peels = {
|
||||||
color: "#d69c31",
|
color: "#d69c31",
|
||||||
|
|
@ -1708,6 +1823,14 @@ elements.watermelon_flesh = {
|
||||||
|
|
||||||
elements.watermelon_juice = {
|
elements.watermelon_juice = {
|
||||||
color: "#eb4034",
|
color: "#eb4034",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#eb4034")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -1721,6 +1844,7 @@ elements.watermelon_juice = {
|
||||||
temp: 30,
|
temp: 30,
|
||||||
tempLow: 0
|
tempLow: 0
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("watermelon_juice");
|
||||||
|
|
||||||
elements.grape = {
|
elements.grape = {
|
||||||
color: ["#b84b65","#a10e69","#a10e95","#8a3eab"],
|
color: ["#b84b65","#a10e69","#a10e95","#8a3eab"],
|
||||||
|
|
@ -1755,6 +1879,14 @@ elements.grape = {
|
||||||
elements.grape_juice = {
|
elements.grape_juice = {
|
||||||
color: "#6d2282",
|
color: "#6d2282",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel, "#6d2282")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
reactions: {
|
reactions: {
|
||||||
"dirt": { elem1: null, elem2: "mud" },
|
"dirt": { elem1: null, elem2: "mud" },
|
||||||
"sand": { elem1: null, elem2: "wet_sand" },
|
"sand": { elem1: null, elem2: "wet_sand" },
|
||||||
|
|
@ -1762,6 +1894,7 @@ elements.grape_juice = {
|
||||||
"seltzer": { elem1: "soda", elem2: "foam" },
|
"seltzer": { elem1: "soda", elem2: "foam" },
|
||||||
"carbon_dioxide": { elem1: "soda", elem2: "foam" },
|
"carbon_dioxide": { elem1: "soda", elem2: "foam" },
|
||||||
"milk": { elem1: "fruit_milk", elem2: "fruit_milk" },
|
"milk": { elem1: "fruit_milk", elem2: "fruit_milk" },
|
||||||
|
"alcohol": { elem1: "wine", elem2: "wine" },
|
||||||
"yeast": { elem1: ["wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","cream_of_tartar"], elem2: null, chance:80 },
|
"yeast": { elem1: ["wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","wine","cream_of_tartar"], elem2: null, chance:80 },
|
||||||
},
|
},
|
||||||
tempHigh: 160,
|
tempHigh: 160,
|
||||||
|
|
@ -1774,6 +1907,7 @@ elements.grape_juice = {
|
||||||
hidden: true,
|
hidden: true,
|
||||||
isFood: true
|
isFood: true
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("grape_juice");
|
||||||
|
|
||||||
elements.cream_of_tartar = {
|
elements.cream_of_tartar = {
|
||||||
color: ["#EFEFEF", "#EBEBEB", "#D8D8D6"],
|
color: ["#EFEFEF", "#EBEBEB", "#D8D8D6"],
|
||||||
|
|
@ -1817,6 +1951,14 @@ elements.wine = {
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
|
/*onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel, "#6D0112")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},*/
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
isFood: true,
|
isFood: true,
|
||||||
|
|
@ -1824,6 +1966,7 @@ elements.wine = {
|
||||||
hidden: true,
|
hidden: true,
|
||||||
tempLow: 0
|
tempLow: 0
|
||||||
}
|
}
|
||||||
|
//eLists.JUICEMIXABLE.push("wine");
|
||||||
|
|
||||||
elements.shrimp = {
|
elements.shrimp = {
|
||||||
color: ["#EE5422", "#E9683C", "#F3583F", "#EDA270"],
|
color: ["#EE5422", "#E9683C", "#F3583F", "#EDA270"],
|
||||||
|
|
@ -2118,6 +2261,14 @@ elements.cut_coconut = {
|
||||||
|
|
||||||
elements.coconut_juice = {
|
elements.coconut_juice = {
|
||||||
color: "#e9ebe4",
|
color: "#e9ebe4",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#e9ebe4")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
reactions: {
|
reactions: {
|
||||||
"dirt": { elem1: null, elem2: "mud" },
|
"dirt": { elem1: null, elem2: "mud" },
|
||||||
|
|
@ -2135,6 +2286,7 @@ elements.coconut_juice = {
|
||||||
hidden: true,
|
hidden: true,
|
||||||
isFood: true
|
isFood: true
|
||||||
}
|
}
|
||||||
|
eLists.JUICEMIXABLE.push("coconut_juice");
|
||||||
|
|
||||||
elements.lemon_wood = {
|
elements.lemon_wood = {
|
||||||
color: "#786531",
|
color: "#786531",
|
||||||
|
|
@ -2224,6 +2376,14 @@ elements.lemon = {
|
||||||
|
|
||||||
elements.lemon_juice = {
|
elements.lemon_juice = {
|
||||||
color: "#e0d358",
|
color: "#e0d358",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#e0d358")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -2241,9 +2401,18 @@ elements.lemon_juice = {
|
||||||
"sugar": {elem1:"lemonade", elem2: "null", chance:0.35}
|
"sugar": {elem1:"lemonade", elem2: "null", chance:0.35}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("lemon_juice");
|
||||||
|
|
||||||
elements.lemonade = {
|
elements.lemonade = {
|
||||||
color: "#fff378",
|
color: "#fff378",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#fff378")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -2259,6 +2428,8 @@ elements.lemonade = {
|
||||||
tempLow: 0
|
tempLow: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
eLists.JUICEMIXABLE.push("lemonade");
|
||||||
|
|
||||||
elements.lemon_zest = {
|
elements.lemon_zest = {
|
||||||
color: "#dbc535",
|
color: "#dbc535",
|
||||||
behavior: behaviors.POWDER,
|
behavior: behaviors.POWDER,
|
||||||
|
|
@ -2444,6 +2615,14 @@ elements.carrot = {
|
||||||
|
|
||||||
elements.carrot_juice = {
|
elements.carrot_juice = {
|
||||||
color: "#f5a742",
|
color: "#f5a742",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#f5a742")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -2457,9 +2636,18 @@ elements.carrot_juice = {
|
||||||
hidden: true,
|
hidden: true,
|
||||||
temp: 30,
|
temp: 30,
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("carrot_juice");
|
||||||
|
|
||||||
elements.apple_cider_vinegar = {
|
elements.apple_cider_vinegar = {
|
||||||
color: "#fffe75",
|
color: "#fffe75",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#fffe75")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -2473,6 +2661,7 @@ elements.apple_cider_vinegar = {
|
||||||
temp: 30,
|
temp: 30,
|
||||||
tempLow: 0
|
tempLow: 0
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("apple_cider_vinegar");
|
||||||
|
|
||||||
elements.turnip_seed = {
|
elements.turnip_seed = {
|
||||||
color: "#994828",
|
color: "#994828",
|
||||||
|
|
@ -2593,6 +2782,14 @@ elements.turnip = {
|
||||||
|
|
||||||
elements.turnip_juice = {
|
elements.turnip_juice = {
|
||||||
color: "#700f5d",
|
color: "#700f5d",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#700f5d")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -2606,6 +2803,7 @@ elements.turnip_juice = {
|
||||||
hidden: true,
|
hidden: true,
|
||||||
temp: 30,
|
temp: 30,
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("turnip_juice");
|
||||||
|
|
||||||
elements.corn = {
|
elements.corn = {
|
||||||
color: ["#f8d223","#d6ba2a","#f7f5ba","#dbd281","#cdb12d"],
|
color: ["#f8d223","#d6ba2a","#f7f5ba","#dbd281","#cdb12d"],
|
||||||
|
|
@ -2644,8 +2842,8 @@ elements.corn_starch = {
|
||||||
"seltzer": { elem1: "dough", elem2: null },
|
"seltzer": { elem1: "dough", elem2: null },
|
||||||
"pool_water": { elem1: "dough", elem2: null },
|
"pool_water": { elem1: "dough", elem2: null },
|
||||||
"juice": { elem1: "dough", elem2: null },
|
"juice": { elem1: "dough", elem2: null },
|
||||||
"yolk": { elem1: "batter", elem2: null },
|
"yolk": { elem1: "cookie_dough", elem2: null, color1:"#dbd19a" },
|
||||||
"yogurt": { elem1: "batter", elem2: null },
|
"yogurt": { elem1: "cookie_dough", elem2: null, color1:"#dbd19a" },
|
||||||
"broth": { elem1:"dough", elem2:null },
|
"broth": { elem1:"dough", elem2:null },
|
||||||
"soda": { elem1:"dough", elem2:null },
|
"soda": { elem1:"dough", elem2:null },
|
||||||
"tea": { elem1:"dough", elem2:null },
|
"tea": { elem1:"dough", elem2:null },
|
||||||
|
|
@ -2941,6 +3139,14 @@ elements.strawberry = {
|
||||||
}
|
}
|
||||||
elements.strawberry_juice = {
|
elements.strawberry_juice = {
|
||||||
color: "#e03a3a",
|
color: "#e03a3a",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#e03a3a")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -2957,6 +3163,7 @@ elements.strawberry_juice = {
|
||||||
"sugar": { elem1:"strawberry_jam", elem2:null, chance:0.35 },
|
"sugar": { elem1:"strawberry_jam", elem2:null, chance:0.35 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("strawberry_juice");
|
||||||
|
|
||||||
elements.cream = {
|
elements.cream = {
|
||||||
color: "#f7f7f7",
|
color: "#f7f7f7",
|
||||||
|
|
@ -3152,6 +3359,14 @@ elements.ginger_leaves = {
|
||||||
}
|
}
|
||||||
elements.ginger_juice = {
|
elements.ginger_juice = {
|
||||||
color: "#ccc056",
|
color: "#ccc056",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#ccc056")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -3169,6 +3384,7 @@ elements.ginger_juice = {
|
||||||
"bread": { elem1:"gingerbread", elem2:null },
|
"bread": { elem1:"gingerbread", elem2:null },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("ginger_juice");
|
||||||
|
|
||||||
|
|
||||||
elements.blueberry_seed = {
|
elements.blueberry_seed = {
|
||||||
|
|
@ -3314,6 +3530,14 @@ elements.blueberry = {
|
||||||
}
|
}
|
||||||
elements.blueberry_juice = {
|
elements.blueberry_juice = {
|
||||||
color: "#5030a1",
|
color: "#5030a1",
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#5030a1")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
tempHigh: 100,
|
tempHigh: 100,
|
||||||
|
|
@ -3331,6 +3555,8 @@ elements.blueberry_juice = {
|
||||||
"milk": { elem1:"fruit_milk", elem2:null, chance:0.35, color1: "#995fb3" },
|
"milk": { elem1:"fruit_milk", elem2:null, chance:0.35, color1: "#995fb3" },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
eLists.JUICEMIXABLE.push("blueberry_juice");
|
||||||
/*
|
/*
|
||||||
elements.fruit_slushie = {
|
elements.fruit_slushie = {
|
||||||
color: "#ffcc54",
|
color: "#ffcc54",
|
||||||
|
|
@ -3399,7 +3625,8 @@ elements.cut_blueberry = {
|
||||||
burn:15,
|
burn:15,
|
||||||
burnTime:60,
|
burnTime:60,
|
||||||
burnInto: "dead_plant",
|
burnInto: "dead_plant",
|
||||||
breakInto: "blueberry_juice",
|
breakInto: "juice",
|
||||||
|
breakIntoColor:"#add69a",
|
||||||
state: "solid",
|
state: "solid",
|
||||||
density: 1050,
|
density: 1050,
|
||||||
hidden: true
|
hidden: true
|
||||||
|
|
@ -3437,7 +3664,7 @@ elements.cookie_dough = {
|
||||||
category: "food",
|
category: "food",
|
||||||
tempHigh: 94,
|
tempHigh: 94,
|
||||||
stateHigh: "cookie",
|
stateHigh: "cookie",
|
||||||
stateHighColorMultiplier: 0.8,
|
stateHighColorMultiplier: 1.1,
|
||||||
burn:40,
|
burn:40,
|
||||||
burnTime:25,
|
burnTime:25,
|
||||||
burnInto:"ash",
|
burnInto:"ash",
|
||||||
|
|
@ -3465,7 +3692,7 @@ elements.cookie = {
|
||||||
|
|
||||||
elements.nut_oil.name = "cooking_oil"
|
elements.nut_oil.name = "cooking_oil"
|
||||||
|
|
||||||
// elements.fire.temp = 130
|
elements.fire.temp = 130
|
||||||
|
|
||||||
elements.bread.behavior = behaviors.SUPPORT
|
elements.bread.behavior = behaviors.SUPPORT
|
||||||
|
|
||||||
|
|
@ -3504,6 +3731,492 @@ elements.boba = {
|
||||||
burnInto: ["smoke","smoke","smoke","ash"],
|
burnInto: ["smoke","smoke","smoke","ash"],
|
||||||
breakIntoColor: "#7d6216",
|
breakIntoColor: "#7d6216",
|
||||||
state: "solid",
|
state: "solid",
|
||||||
density: 644,
|
density: 1500,
|
||||||
|
isFood: true
|
||||||
|
}
|
||||||
|
elements.caramel.density = 1500
|
||||||
|
elements.freeze = {
|
||||||
|
color: ["#42cbf5", "#42cbf5", "#42cbf5", "#75d3f0", "#42cbf5"],
|
||||||
|
tool: function (pixel) {
|
||||||
|
if (!shiftDown) {
|
||||||
|
pixel.temp -= 0.2;
|
||||||
|
pixelTempCheck(pixel);
|
||||||
|
} else {
|
||||||
|
pixel.temp -= 200;
|
||||||
|
pixelTempCheck(pixel);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
category: "energy",
|
||||||
|
canPlace: false,
|
||||||
|
excludeRandom: true,
|
||||||
|
desc: "Use on pixels to freeze them."
|
||||||
|
};
|
||||||
|
elements.warm = {
|
||||||
|
color: ["#c7634a", "#c7634a", "#c7634a", "#e38f7b", "#c7634a"],
|
||||||
|
tool: function (pixel) {
|
||||||
|
if (!shiftDown) {
|
||||||
|
pixel.temp += 0.2;
|
||||||
|
pixelTempCheck(pixel);
|
||||||
|
} else {
|
||||||
|
pixel.temp += 200;
|
||||||
|
pixelTempCheck(pixel);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
category: "energy",
|
||||||
|
canPlace: false,
|
||||||
|
excludeRandom: true,
|
||||||
|
desc: "Use on pixels to warm them."
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
elements.pineapple_seed = {
|
||||||
|
color: "#695531",
|
||||||
|
tick: function(pixel) {
|
||||||
|
if (isEmpty(pixel.x,pixel.y+1)) {
|
||||||
|
movePixel(pixel,pixel.x,pixel.y+1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (pixel.temp < 100 && pixel.temp > 20) {
|
||||||
|
if (Math.random() < 0.02 && pixel.age > 50) {
|
||||||
|
if (!outOfBounds(pixel.x,pixel.y+1)) {
|
||||||
|
var dirtPixel = pixelMap[pixel.x][pixel.y+1];
|
||||||
|
if (dirtPixel.element === "dirt" || dirtPixel.element === "mud" || dirtPixel.element === "sand" || dirtPixel.element === "wet_sand" || dirtPixel.element === "clay_soil" || dirtPixel.element === "mycelium") {
|
||||||
|
changePixel(dirtPixel,"root");
|
||||||
|
pixel.leaflength = pixel.leaflength+Math.round(Math.random())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x,pixel.y-1) && pixel.leafgrown==false) {
|
||||||
|
movePixel(pixel,pixel.x,pixel.y-1);
|
||||||
|
createPixel("pineapple_leaves",pixel.x,pixel.y+1);
|
||||||
|
if (isEmpty(pixel.x,pixel.y-1)) {
|
||||||
|
createPixel("pineapple",pixel.x,pixel.y-1);
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x+1,pixel.y) && Math.random() < 0.5) {
|
||||||
|
createPixel("pineapple_leaves",pixel.x+1,pixel.y);
|
||||||
|
if (isEmpty(pixel.x+2,pixel.y-1) && Math.random() < 0.5) {
|
||||||
|
createPixel("pineapple_leaves",pixel.x+2,pixel.y-1);
|
||||||
|
if (pixel.leaflength == 4 && isEmpty(pixel.x+3,pixel.y-2) && Math.random() < 0.5) {
|
||||||
|
createPixel("pineapple_leaves",pixel.x+3,pixel.y-2);
|
||||||
|
pixel.leafgrown = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x-1,pixel.y) && Math.random() < 0.5) {
|
||||||
|
createPixel("pineapple_leaves",pixel.x-1,pixel.y);
|
||||||
|
if (isEmpty(pixel.x-2,pixel.y-1) && Math.random() < 0.5) {
|
||||||
|
createPixel("pineapple_leaves",pixel.x-2,pixel.y-1);
|
||||||
|
if (pixel.leaflength = 3) {
|
||||||
|
pixel.leafgrown = true
|
||||||
|
}
|
||||||
|
if (pixel.leaflength = 4 && isEmpty(pixel.x-3,pixel.y-2) && isEmpty(pixel.x+3,pixel.y-2) && Math.random() < 0.5) {
|
||||||
|
createPixel("pineapple_leaves",pixel.x-3,pixel.y-2);
|
||||||
|
createPixel("pineapple_leaves",pixel.x+3,pixel.y-2);
|
||||||
|
pixel.leafgrown = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pixel.age > 500 && leafgrown == true && Math.random() < 0.1) {
|
||||||
|
changePixel(pixel,"pineapple_leaves");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pixel.age++;
|
||||||
|
}
|
||||||
|
doDefaults(pixel);
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
"age":0,
|
||||||
|
"leaflength":3,
|
||||||
|
"leafgrown":false,
|
||||||
|
},
|
||||||
|
tempHigh: 100,
|
||||||
|
stateHigh: "dead_plant",
|
||||||
|
tempLow: -2,
|
||||||
|
stateLow: "frozen_plant",
|
||||||
|
burn: 65,
|
||||||
|
burnTime: 15,
|
||||||
|
category: "life",
|
||||||
|
state: "solid",
|
||||||
|
density: 1500,
|
||||||
|
cooldown: defaultCooldown,
|
||||||
|
seed: true,
|
||||||
|
temp:25,
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|FX%10|XX",
|
||||||
|
"XX|M1|XX",
|
||||||
|
],
|
||||||
|
};
|
||||||
|
*//*
|
||||||
|
function averageHexColor(color1, color2) {
|
||||||
|
const rgb1 = hexToRgb(color1);
|
||||||
|
const rgb2 = hexToRgb(color2);
|
||||||
|
const avgRed = Math.floor((rgb1[0] + rgb2[0]) / 2);
|
||||||
|
const avgGreen = Math.floor((rgb1[1] + rgb2[1]) / 2);
|
||||||
|
const avgBlue = Math.floor((rgb1[2] + rgb2[2]) / 2);
|
||||||
|
const avgHex = rgbToHex(avgRed, avgGreen, avgBlue);
|
||||||
|
return avgHex;
|
||||||
|
}
|
||||||
|
|
||||||
|
function hexToRgb(hex) {
|
||||||
|
hex = hex.replace(/^#/, '');
|
||||||
|
const r = parseInt(hex.substring(0, 2), 16);
|
||||||
|
const g = parseInt(hex.substring(2, 4), 16);
|
||||||
|
const b = parseInt(hex.substring(4, 6), 16);
|
||||||
|
return [r, g, b];
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgbToHex(r, g, b) {
|
||||||
|
const rHex = r.toString(16).padStart(2, '0');
|
||||||
|
const gHex = g.toString(16).padStart(2, '0');
|
||||||
|
const bHex = b.toString(16).padStart(2, '0');
|
||||||
|
return `${rHex}${gHex}${bHex}`;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
// test
|
||||||
|
//var color1 = "#FF0000";
|
||||||
|
//var color2 = "#0000FF";
|
||||||
|
//var averageColor = averageHexColor(color1, color2);
|
||||||
|
//console.log(averageColor)
|
||||||
|
/*
|
||||||
|
eLists.JUICEMIXABLE.forEach(function(element){
|
||||||
|
elements[element].onMix = function(pixel1,pixel2) {
|
||||||
|
if (shiftDown && eLists.JUICEMIXABLE.indexOf(pixel2.element) !== -1) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
var hex1 = pixel1.color
|
||||||
|
var hex2 = pixel2.color
|
||||||
|
let rgb = pixel.color.replace("rgb(", "").replace(")", "").split(",");
|
||||||
|
let rgbObj = { r: parseInt(rgb[0]), g: parseInt(rgb[1]), b: parseInt(rgb[2]) } //use this as one of the rgb objects
|
||||||
|
var finalJuiceColor = interpolatedRgb(hex1,hex2,0.5)
|
||||||
|
changePixel(pixel1,"juice")
|
||||||
|
//pixel1.color = pixelColorPick(pixel,finalJuiceColor)
|
||||||
|
pixel1.color = rgb(rgbObj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})*/
|
||||||
|
elements.juice.onMix = function(pixel){
|
||||||
|
let num = Math.floor(Math.random() * 4);
|
||||||
|
let x = pixel.x + adjacentCoords[num][0];
|
||||||
|
let y = pixel.y + adjacentCoords[num][1];
|
||||||
|
if(!isEmpty(x,y) && !outOfBounds(x,y)){
|
||||||
|
let pixel2 = pixelMap[x][y];
|
||||||
|
if(pixel.color != pixel2.color && pixel2.element == "juice"){
|
||||||
|
let condition;
|
||||||
|
if(shiftDown == 0){
|
||||||
|
condition = (Math.floor(Math.random() * 2) == 1);
|
||||||
|
} else {
|
||||||
|
condition = true;
|
||||||
|
}
|
||||||
|
if(condition){
|
||||||
|
let newrgb = interpolateRgb(getRGB(pixel.color), getRGB(pixel2.color), 0.5);
|
||||||
|
pixel.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
|
||||||
|
pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elements.juice.stain = 0
|
||||||
|
|
||||||
|
elements.banana_seed = {
|
||||||
|
color: "#594129",
|
||||||
|
tick: function(pixel) {
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100) {
|
||||||
|
if (!outOfBounds(pixel.x,pixel.y+1)) {
|
||||||
|
var dirtPixel = pixelMap[pixel.x][pixel.y+1];
|
||||||
|
if (dirtPixel.element === "dirt" || dirtPixel.element === "mud" || dirtPixel.element === "sand" || dirtPixel.element === "wet_sand" || dirtPixel.element === "clay_soil" || dirtPixel.element === "mycelium") {
|
||||||
|
changePixel(dirtPixel,"root");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x,pixel.y-1) && pixel.height < 7) {
|
||||||
|
movePixel(pixel,pixel.x,pixel.y-1);
|
||||||
|
createPixel("banana_stem",pixel.x,pixel.y+1);
|
||||||
|
|
||||||
|
pixel.height++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pixel.age > 150 && pixel.height > 6 && Math.random() < 0.1) {
|
||||||
|
changePixel(pixel,"banana_tree_top");
|
||||||
|
}
|
||||||
|
pixel.age++;
|
||||||
|
doDefaults(pixel);
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
"age":0,
|
||||||
|
"height": 0
|
||||||
|
},
|
||||||
|
tempHigh: 100,
|
||||||
|
stateHigh: "dead_plant",
|
||||||
|
tempLow: -2,
|
||||||
|
stateLow: "frozen_plant",
|
||||||
|
burn: 65,
|
||||||
|
burnTime: 15,
|
||||||
|
category: "life",
|
||||||
|
state: "solid",
|
||||||
|
density: 1500,
|
||||||
|
cooldown: defaultCooldown,
|
||||||
|
seed: true,
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|M1|XX",
|
||||||
|
],
|
||||||
|
};
|
||||||
|
elements.banana_stem = {
|
||||||
|
color: "#698215",
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
tempHigh: 400,
|
||||||
|
stateHigh: ["ember","charcoal","fire","fire","fire"],
|
||||||
|
category: "life",
|
||||||
|
burn: 5,
|
||||||
|
burnTime: 300,
|
||||||
|
burnInto: ["ember","charcoal","fire"],
|
||||||
|
state: "solid",
|
||||||
|
hardness: 0.15,
|
||||||
|
breakInto: "sawdust",
|
||||||
|
breakIntoColor: ["#dba66e","#cc8a64"],
|
||||||
|
hidden: true
|
||||||
|
}
|
||||||
|
elements.banana_tree_top = {
|
||||||
|
color: "#718a21",
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
tempHigh: 400,
|
||||||
|
stateHigh: ["ember","charcoal","fire","fire","fire"],
|
||||||
|
category: "life",
|
||||||
|
burn: 5,
|
||||||
|
burnTime: 300,
|
||||||
|
burnInto: ["ember","charcoal","fire"],
|
||||||
|
state: "solid",
|
||||||
|
hardness: 0.15,
|
||||||
|
breakInto: "sawdust",
|
||||||
|
breakIntoColor: ["#dba66e","#cc8a64"],
|
||||||
|
properties:{
|
||||||
|
"leftleaves": 0,
|
||||||
|
"rightleaves": 0,
|
||||||
|
},
|
||||||
|
hidden: true,
|
||||||
|
tick: function(pixel) {
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 0) {
|
||||||
|
if (isEmpty(pixel.x+1,pixel.y)) {
|
||||||
|
createPixel("banana_leaves",pixel.x+1,pixel.y);
|
||||||
|
|
||||||
|
pixel.rightleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 1) {
|
||||||
|
if (isEmpty(pixel.x+2,pixel.y)) {
|
||||||
|
createPixel("banana_leaves",pixel.x+2,pixel.y);
|
||||||
|
|
||||||
|
pixel.rightleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 2) {
|
||||||
|
if (isEmpty(pixel.x+3,pixel.y)) {
|
||||||
|
createPixel("banana_leaves",pixel.x+3,pixel.y);
|
||||||
|
|
||||||
|
pixel.rightleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 3) {
|
||||||
|
if (isEmpty(pixel.x+4,pixel.y+1)) {
|
||||||
|
createPixel("banana_leaves",pixel.x+4,pixel.y+1);
|
||||||
|
|
||||||
|
pixel.rightleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 0) {
|
||||||
|
if (isEmpty(pixel.x-1,pixel.y)) {
|
||||||
|
createPixel("banana_leaves",pixel.x-1,pixel.y);
|
||||||
|
|
||||||
|
pixel.leftleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 1) {
|
||||||
|
if (isEmpty(pixel.x-2,pixel.y)) {
|
||||||
|
createPixel("banana_leaves",pixel.x-2,pixel.y);
|
||||||
|
|
||||||
|
pixel.leftleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 2) {
|
||||||
|
if (isEmpty(pixel.x-3,pixel.y)) {
|
||||||
|
createPixel("banana_leaves",pixel.x-3,pixel.y);
|
||||||
|
|
||||||
|
pixel.leftleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 3) {
|
||||||
|
if (isEmpty(pixel.x-4,pixel.y+1)) {
|
||||||
|
createPixel("banana_leaves",pixel.x-4,pixel.y+1);
|
||||||
|
|
||||||
|
pixel.leftleaves++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 70 && pixel.temp < 100 && pixel.leftleaves > 0 && pixel.rightleaves > 0) {
|
||||||
|
if (isEmpty(pixel.x+1,pixel.y+2)) {
|
||||||
|
createPixel("banana_peduncle",pixel.x+1,pixel.y+2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1 && pixel.age > 70 && pixel.temp < 100 && pixel.leftleaves > 0 && pixel.rightleaves > 0) {
|
||||||
|
if (isEmpty(pixel.x-1,pixel.y+2)) {
|
||||||
|
createPixel("banana_peduncle",pixel.x-1,pixel.y+2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pixel.age++;
|
||||||
|
doDefaults(pixel);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
elements.banana_leaves = {
|
||||||
|
color: ["#3da324","#3cbd1c"],
|
||||||
|
reactions: {
|
||||||
|
"vinegar": { elem1:"dead_plant", elem2:null, chance:0.035 },
|
||||||
|
"baking_soda": { elem1:"dead_plant", elem2:null, chance:0.01 },
|
||||||
|
"bleach": { elem1:"dead_plant", elem2:null, chance:0.05 },
|
||||||
|
"alcohol": { elem1:"dead_plant", elem2:null, chance:0.035 }
|
||||||
|
},
|
||||||
|
category:"life",
|
||||||
|
tempHigh: 100,
|
||||||
|
stateHigh: "dead_plant",
|
||||||
|
tempLow: -1.66,
|
||||||
|
stateLow: "frozen_plant",
|
||||||
|
burn:65,
|
||||||
|
burnTime:60,
|
||||||
|
burnInto: "dead_plant",
|
||||||
|
breakInto: "dead_plant",
|
||||||
|
state: "solid",
|
||||||
|
density: 1050,
|
||||||
|
hidden: true
|
||||||
|
}
|
||||||
|
elements.banana_peduncle = {
|
||||||
|
color: "#8bb81a",
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
tempHigh: 400,
|
||||||
|
stateHigh: ["ember","charcoal","fire","fire","fire"],
|
||||||
|
category: "life",
|
||||||
|
burn: 5,
|
||||||
|
burnTime: 300,
|
||||||
|
burnInto: ["ember","charcoal","fire"],
|
||||||
|
state: "solid",
|
||||||
|
hardness: 0.15,
|
||||||
|
breakInto: "sawdust",
|
||||||
|
hidden: true,
|
||||||
|
tick: function(pixel) {
|
||||||
|
if (Math.random() < 0.1 && pixel.temp < 100) {
|
||||||
|
if (isEmpty(pixel.x+1,pixel.y+1)) {
|
||||||
|
createPixel("hanging_banana_peduncle",pixel.x+1,pixel.y+1);
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x-1,pixel.y+1)) {
|
||||||
|
createPixel("hanging_banana_peduncle",pixel.x-1,pixel.y+1);
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x+1,pixel.y+2)) {
|
||||||
|
createPixel("hanging_banana_peduncle",pixel.x+1,pixel.y+2);
|
||||||
|
}
|
||||||
|
if (isEmpty(pixel.x-1,pixel.y+2)) {
|
||||||
|
createPixel("hanging_banana_peduncle",pixel.x-1,pixel.y+2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pixel.age++;
|
||||||
|
doDefaults(pixel);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
elements.hanging_banana_peduncle = {
|
||||||
|
color: "#8bb81a",
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"CR:banana%0.2|XX|CR:banana%0.2",
|
||||||
|
"XX|XX|XX",
|
||||||
|
],
|
||||||
|
tempHigh: 400,
|
||||||
|
stateHigh: ["ember","charcoal","fire","fire","fire"],
|
||||||
|
category: "life",
|
||||||
|
burn: 5,
|
||||||
|
burnTime: 300,
|
||||||
|
burnInto: ["ember","charcoal","fire"],
|
||||||
|
state: "solid",
|
||||||
|
hardness: 0.15,
|
||||||
|
breakInto: "sawdust",
|
||||||
|
hidden: true,
|
||||||
|
}
|
||||||
|
elements.banana = {
|
||||||
|
color: "#ebd834",
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"ST:hanging_banana_peduncle|XX|ST:hanging_banana_peduncle",
|
||||||
|
"XX|M1|XX",
|
||||||
|
],
|
||||||
|
category:"food",
|
||||||
|
tempHigh: 100,
|
||||||
|
stateHigh: "dead_plant",
|
||||||
|
burn:15,
|
||||||
|
burnTime:60,
|
||||||
|
burnInto: "dead_plant",
|
||||||
|
breakInto: "banana_juice",
|
||||||
|
state: "solid",
|
||||||
|
density: 1050,
|
||||||
|
cutInto: "cut_banana"
|
||||||
|
}
|
||||||
|
elements.cut_banana = {
|
||||||
|
color: "#f2e56b",
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|XX|XX",
|
||||||
|
"M2|M1|M2",
|
||||||
|
],
|
||||||
|
category:"food",
|
||||||
|
tempHigh: 100,
|
||||||
|
stateHigh: "dead_plant",
|
||||||
|
burn:15,
|
||||||
|
burnTime:60,
|
||||||
|
burnInto: "dead_plant",
|
||||||
|
breakInto: "banana_juice",
|
||||||
|
state: "solid",
|
||||||
|
density: 1050,
|
||||||
|
}
|
||||||
|
elements.banana_juice = {
|
||||||
|
color: "#dbc440",
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
category: "liquids",
|
||||||
|
tempHigh: 100,
|
||||||
|
stateHigh: ["steam","sugar"],
|
||||||
|
burn: 70,
|
||||||
|
burnTime: 300,
|
||||||
|
burnInto: ["steam", "smoke"],
|
||||||
|
state: "liquid",
|
||||||
|
density: 825,
|
||||||
|
hidden: true,
|
||||||
|
temp: 30,
|
||||||
|
onMix: function(pixel) {
|
||||||
|
if (shiftDown) {
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
changePixel(pixel,"juice")
|
||||||
|
pixel.color = pixelColorPick(pixel,"#dbc440")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
reactions: {
|
||||||
|
"bread": { elem1:"banana_bread", elem2:null, chance:0.35 },
|
||||||
|
},
|
||||||
|
tempLow: 0
|
||||||
|
};
|
||||||
|
eLists.JUICEMIXABLE.push("banana_juice");
|
||||||
|
|
||||||
|
elements.banana_bread = {
|
||||||
|
color: "#c2782f",
|
||||||
|
desc: "delicious banana bread",
|
||||||
|
behavior: behaviors.STURDYPOWDER,
|
||||||
|
tempHigh: 176,
|
||||||
|
stateHigh: "toast",
|
||||||
|
category: "food",
|
||||||
|
burn: 30,
|
||||||
|
burnTime: 200,
|
||||||
|
burnInto: ["smoke","smoke","smoke","ash"],
|
||||||
|
breakInto: "crumb",
|
||||||
|
state: "solid",
|
||||||
|
density: 233.96,
|
||||||
isFood: true
|
isFood: true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2136,9 +2136,9 @@ try {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function capitalizeFirstLetter(string,locale=null) {
|
function capitalizeFirstLetter(string,locale=null) {
|
||||||
return string[0][locale ? "toLocaleUpperCase" : "toUpperCase"](locale) + string.slice(1)
|
return string[0][locale ? "toLocaleUpperCase" : "toUpperCase"](locale) + string.slice(1)
|
||||||
};
|
};
|
||||||
|
|
||||||
//COLOR MANIPULATION TOOLS ##
|
//COLOR MANIPULATION TOOLS ##
|
||||||
|
|
||||||
|
|
@ -36321,7 +36321,7 @@ Make sure to save your command in a file if you want to add this preset again.`
|
||||||
newPixel.vx ??= 0;
|
newPixel.vx ??= 0;
|
||||||
newPixel.vy ??= 0;
|
newPixel.vy ??= 0;
|
||||||
newPixel.vx += (pixel.direction * 5)
|
newPixel.vx += (pixel.direction * 5)
|
||||||
newPixel.vy += 3;
|
newPixel.vy -= 3;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
pixel.fromX += pixel.direction
|
pixel.fromX += pixel.direction
|
||||||
|
|
@ -36406,7 +36406,7 @@ Make sure to save your command in a file if you want to add this preset again.`
|
||||||
newPixel.vx ??= 0;
|
newPixel.vx ??= 0;
|
||||||
newPixel.vy ??= 0;
|
newPixel.vy ??= 0;
|
||||||
newPixel.vx += (pixel.direction * 13)
|
newPixel.vx += (pixel.direction * 13)
|
||||||
newPixel.vy += 6;
|
newPixel.vy -= 6;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
pixel.fromX += pixel.direction
|
pixel.fromX += pixel.direction
|
||||||
|
|
@ -36503,7 +36503,7 @@ Make sure to save your command in a file if you want to add this preset again.`
|
||||||
newPixel.vx ??= 0;
|
newPixel.vx ??= 0;
|
||||||
newPixel.vy ??= 0;
|
newPixel.vy ??= 0;
|
||||||
newPixel.vx += (pixel.direction * 6)
|
newPixel.vx += (pixel.direction * 6)
|
||||||
newPixel.vy += 3;
|
newPixel.vy -= 3;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
pixel.fromX += pixel.direction
|
pixel.fromX += pixel.direction
|
||||||
|
|
@ -36598,7 +36598,7 @@ Make sure to save your command in a file if you want to add this preset again.`
|
||||||
newPixel.vx ??= 0;
|
newPixel.vx ??= 0;
|
||||||
newPixel.vy ??= 0;
|
newPixel.vy ??= 0;
|
||||||
newPixel.vx += (pixel.direction * 8)
|
newPixel.vx += (pixel.direction * 8)
|
||||||
newPixel.vy += 5;
|
newPixel.vy -= 5;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
pixel.fromX += pixel.direction
|
pixel.fromX += pixel.direction
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,24 @@
|
||||||
|
//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 liquid = [["XX", "XX", "XX"], ["M1", "XX", "M1"], ["M1", "M2", "M1"]]
|
let liquid = [["XX", "XX", "XX"], ["M1", "XX", "M1"], ["M1", "M2", "M1"]]
|
||||||
for (var element in elements){
|
runAfterLoad(function(){
|
||||||
|
for (var element in elements){
|
||||||
let a = elements[element].behavior;
|
elements[element].noMix = false;
|
||||||
console.log(a, elements[element], liquid)
|
let a = elements[element].behavior;
|
||||||
if(a != undefined && typeof a != 'function'){
|
console.log(a, elements[element], liquid)
|
||||||
let i = 0;
|
if(a != undefined && typeof a != 'function'){
|
||||||
while (i < a.length){
|
let i = 0;
|
||||||
if(typeof a[i] == "string"){
|
while (i < a.length){
|
||||||
a[i] = a[i].split("|");
|
if(typeof a[i] == "string"){
|
||||||
i += 1;
|
a[i] = a[i].split("|");
|
||||||
} else {
|
i += 1;
|
||||||
i += 1;
|
} else {
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
elements[element].behavior = [[a[0][0], a[0][1], a[0][2]], [`${a[1][0]} AND M1`, a[1][1], `${a[1][2]} AND M1`], [`${a[2][0]} AND M1`, `${a[2][1]} AND M2`, `${a[2][2]} AND M1`]];
|
||||||
|
} else {
|
||||||
|
elements[element].behavior = liquid;
|
||||||
}
|
}
|
||||||
elements[element].behavior = [[a[0][0], a[0][1], a[0][2]], [`${a[1][0]} AND M1`, a[1][1], `${a[1][2]} AND M1`], [`${a[2][0]} AND M1`, `${a[2][1]} AND M2`, `${a[2][2]} AND M1`]];
|
|
||||||
} else {
|
|
||||||
elements[element].behavior = liquid;
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,286 @@
|
||||||
|
//jaydstuff
|
||||||
|
elements.super_raincloud = {
|
||||||
|
color: "#0000ff",
|
||||||
|
behavior: [
|
||||||
|
"XX|M1%10|XX",
|
||||||
|
"M1%5|XX|M1%5",
|
||||||
|
"CR:water%40|CR:water%40|CR:water%40",
|
||||||
|
],
|
||||||
|
category: "gases",
|
||||||
|
state: "gas",
|
||||||
|
density: 50,
|
||||||
|
},
|
||||||
|
elements.deuterium = {
|
||||||
|
color: "#558bcf",
|
||||||
|
behavior: behaviors.GAS,
|
||||||
|
reactions: {
|
||||||
|
"oxygen": { elem1:null, elem2:"heavy_steam", tempMin:500 },
|
||||||
|
"tritium": { elem1:"neutron", elem2:"helium", tempMin:100000000, temp1:150000000, temp2:150000000 },
|
||||||
|
"fire": { elem1:"explosion", chance:0.005 },
|
||||||
|
},
|
||||||
|
category: "gases",
|
||||||
|
burn: 100,
|
||||||
|
burnTime: 2,
|
||||||
|
burnInto: ["fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","heavy_steam"],
|
||||||
|
tempLow: -253,
|
||||||
|
stateLow: "liquid_deuterium",
|
||||||
|
state: "gas",
|
||||||
|
density: 0.180,
|
||||||
|
conduct: 0.02,
|
||||||
|
colorOn: "#d6462d"
|
||||||
|
},
|
||||||
|
elements.liquid_deuterium = {
|
||||||
|
color: "#97afcf",
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
reactions: {
|
||||||
|
"liquid_oxygen": { elem1:"heavy_ice", elem2:null },
|
||||||
|
"oxygen": { elem1:"ice", elem2:null }
|
||||||
|
},
|
||||||
|
category: "states",
|
||||||
|
burn: 100,
|
||||||
|
burnTime: 2,
|
||||||
|
temp: -255.879,
|
||||||
|
tempHigh: -252.879,
|
||||||
|
stateHigh: "hydrogen",
|
||||||
|
tempLow: -259.2,
|
||||||
|
state: "liquid",
|
||||||
|
density: 163.83,
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
|
elements.tritium = {
|
||||||
|
color: "#558bcf",
|
||||||
|
behavior: [
|
||||||
|
"M2|M1 AND CR:radiation%1|M2",
|
||||||
|
"M1|XX|M1",
|
||||||
|
"M2|M1 AND CR:radiation%0.5|M2",
|
||||||
|
],
|
||||||
|
reactions: {
|
||||||
|
"oxygen": { elem1:null, elem2:"tritiated_steam", tempMin:500 },
|
||||||
|
"deuterium": { elem1:"neutron", elem2:"helium", tempMin:100000000, temp1:150000000, temp2:150000000 },
|
||||||
|
"fire": { elem1:"explosion", chance:0.005 },
|
||||||
|
},
|
||||||
|
category: "gases",
|
||||||
|
burn: 100,
|
||||||
|
burnTime: 2,
|
||||||
|
burnInto: ["fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","steam"],
|
||||||
|
tempLow: -253,
|
||||||
|
stateLow: "liquid_tritium",
|
||||||
|
state: "gas",
|
||||||
|
density: 0.269,
|
||||||
|
conduct: 0.02,
|
||||||
|
colorOn: "#d6462d"
|
||||||
|
},
|
||||||
|
elements.liquid_tritium = {
|
||||||
|
color: "#97afcf",
|
||||||
|
behavior: [
|
||||||
|
"XX|CR:radiation%1|XX",
|
||||||
|
"M2|XX|M2",
|
||||||
|
"M1|M1|M1",
|
||||||
|
],
|
||||||
|
reactions: {
|
||||||
|
"liquid_oxygen": { elem1:"tritiated_ice", elem2:null },
|
||||||
|
"oxygen": { elem1:"ice", elem2:null }
|
||||||
|
},
|
||||||
|
category: "states",
|
||||||
|
burn: 100,
|
||||||
|
burnTime: 2,
|
||||||
|
temp: -255.879,
|
||||||
|
tempHigh: -252.879,
|
||||||
|
stateHigh: "tritium",
|
||||||
|
tempLow: -259.2,
|
||||||
|
state: "liquid",
|
||||||
|
density: 213,
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
|
elements.heavy_water = {
|
||||||
|
color: "#2167ff",
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
tempHigh: 101.4,
|
||||||
|
stateHigh: "heavy_steam",
|
||||||
|
tempLow: 0,
|
||||||
|
stateLow: "heavy_ice",
|
||||||
|
category: "liquids",
|
||||||
|
heatCapacity: 4.184,
|
||||||
|
reactions: {
|
||||||
|
// electrolysis:
|
||||||
|
"aluminum": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0025 },
|
||||||
|
"zinc": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.015 },
|
||||||
|
"steel": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0125 },
|
||||||
|
"iron": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0125 },
|
||||||
|
"tin": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.01 },
|
||||||
|
"brass": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.001 },
|
||||||
|
"bronze": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.001 },
|
||||||
|
"copper": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0075 },
|
||||||
|
"silver": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0075 },
|
||||||
|
"gold": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0075 },
|
||||||
|
},
|
||||||
|
state: "liquid",
|
||||||
|
density: 1107,
|
||||||
|
conduct: 0.02,
|
||||||
|
stain: -0.5,
|
||||||
|
extinguish: true
|
||||||
|
},
|
||||||
|
elements.heavy_steam = {
|
||||||
|
color: "#abd6ff",
|
||||||
|
behavior: behaviors.GAS,
|
||||||
|
reactions: {
|
||||||
|
"copper": { elem1:"oxygen", elem2:"oxidized_copper", chance:0.01 },
|
||||||
|
"bronze": { elem1:"oxygen", elem2:"oxidized_copper", chance:0.005 },
|
||||||
|
"iron": { elem1:"oxygen", elem2:"rust", chance:0.005 },
|
||||||
|
"steel": { elem1:"oxygen", elem2:"rust", chance:0.004 },
|
||||||
|
},
|
||||||
|
temp: 150,
|
||||||
|
tempLow: 95,
|
||||||
|
extraTempLow: {
|
||||||
|
0: "heavy_rime"
|
||||||
|
},
|
||||||
|
stateLow: "heavy_water",
|
||||||
|
category: "gases",
|
||||||
|
state: "gas",
|
||||||
|
density: 1,
|
||||||
|
conduct: 0.002,
|
||||||
|
stain: -0.05,
|
||||||
|
alias: "heavy water vapor",
|
||||||
|
extinguish: true
|
||||||
|
},
|
||||||
|
elements.heavy_ice = {
|
||||||
|
color: "#b2daeb",
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
temp: -5,
|
||||||
|
tempHigh: 5,
|
||||||
|
stateHigh: "heavy_water",
|
||||||
|
category: "solids",
|
||||||
|
state: "solid",
|
||||||
|
density: 1014.202,
|
||||||
|
breakInto: "heavy_snow"
|
||||||
|
},
|
||||||
|
elements.tritiated_water = {
|
||||||
|
color: "#2167ff",
|
||||||
|
behavior: [
|
||||||
|
"XX|CR:radiation%1|XX",
|
||||||
|
"M2|XX|M2",
|
||||||
|
"M1|M1|M1",
|
||||||
|
],
|
||||||
|
tempHigh: 101.4,
|
||||||
|
stateHigh: "tritiated_steam",
|
||||||
|
tempLow: 0,
|
||||||
|
stateLow: "tritiated_ice",
|
||||||
|
category: "liquids",
|
||||||
|
heatCapacity: 4.184,
|
||||||
|
reactions: {
|
||||||
|
// electrolysis:
|
||||||
|
"aluminum": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0025 },
|
||||||
|
"zinc": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.015 },
|
||||||
|
"steel": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0125 },
|
||||||
|
"iron": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0125 },
|
||||||
|
"tin": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.01 },
|
||||||
|
"brass": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.001 },
|
||||||
|
"bronze": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.001 },
|
||||||
|
"copper": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0075 },
|
||||||
|
"silver": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0075 },
|
||||||
|
"gold": { elem1:["deuterium","deuterium","oxygen"], charged:true, chance:0.0075 },
|
||||||
|
},
|
||||||
|
state: "liquid",
|
||||||
|
density: 1107,
|
||||||
|
conduct: 0.02,
|
||||||
|
stain: -0.5,
|
||||||
|
extinguish: true
|
||||||
|
},
|
||||||
|
elements.tritiated_steam = {
|
||||||
|
color: "#abd6ff",
|
||||||
|
behavior: [
|
||||||
|
"M2|M1 AND CR:radiation%1|M2",
|
||||||
|
"M1|XX|M1",
|
||||||
|
"M2|M1 AND CR:radiation%0.5|M2",
|
||||||
|
],
|
||||||
|
reactions: {
|
||||||
|
"copper": { elem1:"oxygen", elem2:"oxidized_copper", chance:0.01 },
|
||||||
|
"bronze": { elem1:"oxygen", elem2:"oxidized_copper", chance:0.005 },
|
||||||
|
"iron": { elem1:"oxygen", elem2:"rust", chance:0.005 },
|
||||||
|
"steel": { elem1:"oxygen", elem2:"rust", chance:0.004 },
|
||||||
|
},
|
||||||
|
temp: 150,
|
||||||
|
tempLow: 95,
|
||||||
|
extraTempLow: {
|
||||||
|
0: "heavy_rime"
|
||||||
|
},
|
||||||
|
stateLow: "tritiated_water",
|
||||||
|
category: "gases",
|
||||||
|
state: "gas",
|
||||||
|
density: 0.6,
|
||||||
|
conduct: 0.002,
|
||||||
|
stain: -0.05,
|
||||||
|
alias: "tritiated water vapor",
|
||||||
|
extinguish: true
|
||||||
|
},
|
||||||
|
elements.tritiated_ice = {
|
||||||
|
color: "#b2daeb",
|
||||||
|
behavior: [
|
||||||
|
"XX|CR:radiation%0.25|XX",
|
||||||
|
"CR:radiation%0.25|XX|CR:radiation%0.25",
|
||||||
|
"XX|CR:radiation%0.25|XX",
|
||||||
|
],
|
||||||
|
temp: -5,
|
||||||
|
tempHigh: 5,
|
||||||
|
stateHigh: "tritiated_water",
|
||||||
|
category: "solids",
|
||||||
|
state: "solid",
|
||||||
|
density: 1014.202,
|
||||||
|
breakInto: "tritiated_snow"
|
||||||
|
},
|
||||||
|
elements.fusion = {
|
||||||
|
color: "#ffffff",
|
||||||
|
tool: function(pixel) {
|
||||||
|
pixel.temp = 100000000;
|
||||||
|
pixelTempCheck(pixel)
|
||||||
|
},
|
||||||
|
category: "tools",
|
||||||
|
},
|
||||||
|
elements.meese = {
|
||||||
|
color: "#996515",
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|FX%0.25|M2%0.5 AND BO",
|
||||||
|
"XX|M1|XX",
|
||||||
|
],
|
||||||
|
category: "life"
|
||||||
|
},
|
||||||
|
elements.fluoroantimonic_acid = {
|
||||||
|
color: ["#b5cf91","#a1ff5e","#288f2a"],
|
||||||
|
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",
|
||||||
|
],
|
||||||
|
ignore: ["glass","rad_glass","glass_shard","rad_shard","stained_glass","baked_clay","acid_gas","neutral_acid","copper","gold","porcelain"],
|
||||||
|
category: "liquids",
|
||||||
|
state: "liquid",
|
||||||
|
density: 2885,
|
||||||
|
hidden: true,
|
||||||
|
stain: -0.1,
|
||||||
|
},
|
||||||
|
elements.tritium_ice = {
|
||||||
|
color: "#b5d2ff",
|
||||||
|
behavior: [
|
||||||
|
"XX|CR:radiation%0.25|XX",
|
||||||
|
"CR:radiation%0.25|XX|CR:radiation%0.25",
|
||||||
|
"XX|CR:radiation%0.25|XX",
|
||||||
|
],
|
||||||
|
temp: -259,
|
||||||
|
tempHigh: -256,
|
||||||
|
stateHigh: "liquid_tritium",
|
||||||
|
category: "states",
|
||||||
|
state: "solid",
|
||||||
|
density: 258,
|
||||||
|
},
|
||||||
|
elements.unstain = {
|
||||||
|
category: "tools",
|
||||||
|
stain: -1,
|
||||||
|
tool: (pixel) => {
|
||||||
|
doStaining({
|
||||||
|
element: "unstain",
|
||||||
|
x: pixel.x,
|
||||||
|
y: pixel.y
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,481 @@
|
||||||
|
if (!enabledMods.includes("mods/betterSettings.js")) { enabledMods.unshift("mods/betterSettings.js"); localStorage.setItem("enabledMods", JSON.stringify(enabledMods)); alert("'betterSettings.js' is a dependency for 'moreViews.js' and has been added. Please reload for it to take effect.") }
|
||||||
|
else {
|
||||||
|
const views = [
|
||||||
|
// default sandboxels
|
||||||
|
"Default View",
|
||||||
|
"",
|
||||||
|
"Thermal View",
|
||||||
|
"Basic View",
|
||||||
|
"Smooth View",
|
||||||
|
// custom
|
||||||
|
"3D View",
|
||||||
|
"Inverted",
|
||||||
|
"Darker",
|
||||||
|
"Brighter",
|
||||||
|
"Gray scale",
|
||||||
|
"Sepia",
|
||||||
|
"Hue rotation 180°",
|
||||||
|
"Saturated",
|
||||||
|
"Time",
|
||||||
|
"Anaglyph",
|
||||||
|
"VHS (VCR)",
|
||||||
|
"Outline",
|
||||||
|
"Upside down",
|
||||||
|
"Vignette"
|
||||||
|
];
|
||||||
|
|
||||||
|
setView = (n) => {
|
||||||
|
if (n <= views.length - 1 && n > 1) {
|
||||||
|
view = n;
|
||||||
|
} else {
|
||||||
|
view = null;
|
||||||
|
}
|
||||||
|
setSetting('view', parseInt(view));
|
||||||
|
document.querySelector('span[setting="view"]').children[0].value = view ?? 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const i in views) {
|
||||||
|
if (i < 5) continue;
|
||||||
|
const option = document.createElement("option");
|
||||||
|
option.setAttribute("value", i);
|
||||||
|
option.innerText = views[i];
|
||||||
|
document.querySelector('.setting-span[setting="view"]').querySelector("select").appendChild(option);
|
||||||
|
viewKey[i] = views[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
const vcrFont = new FontFace("VCR", "url(mods/VCR_OSD_MONO.ttf)");
|
||||||
|
vcrFont.load().then(font => {
|
||||||
|
console.log(font);
|
||||||
|
document.fonts.add(font);
|
||||||
|
})
|
||||||
|
|
||||||
|
function blending(color, color2, t = 0.5) {
|
||||||
|
const [r, g, b] = parseColor(color).replace("#", "").match(/../g).map(a => parseInt(a, 16));
|
||||||
|
const [r2, g2, b2] = parseColor(color2).replace("#", "").match(/../g).map(a => parseInt(a, 16));
|
||||||
|
if ([r, g, b].includes(undefined) || [r, g, b, t].includes(NaN)) console.log([r, g, b, t], parseColor(color), color);
|
||||||
|
return `#${[
|
||||||
|
(1 - t) * r + t * r2,
|
||||||
|
(1 - t) * g + t * g2,
|
||||||
|
(1 - t) * b + t * b2
|
||||||
|
].map(a => Math.floor(a).toString(16).padStart(2, "0")).join("")}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cache = new Map();
|
||||||
|
|
||||||
|
function mixColors(color, color2) {
|
||||||
|
if (cache.has(`${color}_${color2}`) || cache.has(`${color2}_${color}`)) return cache.get(`${color}_${color2}`) ?? cache.get(`${color2}_${color}`);
|
||||||
|
const [r, g, b] = parseColor(color).replace("#", "").match(/../g).map(a => parseInt(a, 16));
|
||||||
|
const [r2, g2, b2] = parseColor(color2).replace("#", "").match(/../g).map(a => parseInt(a, 16));
|
||||||
|
const res = [
|
||||||
|
Math.max(r, r2),
|
||||||
|
Math.max(g, g2),
|
||||||
|
Math.max(b, b2)
|
||||||
|
];
|
||||||
|
cache.set(`${color}_${color2}`, `#${res.map(a => (Math.floor(a) % 256).toString(16).padStart(2, "0")).join("")}`);
|
||||||
|
return `#${res.map(a => (Math.floor(a) % 256).toString(16).padStart(2, "0")).join("")}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parseColor = (colorString) => {
|
||||||
|
if (colorString instanceof Array) return parseColor(colorString[0]);
|
||||||
|
if (typeof colorString != "string") return "#ffffff";
|
||||||
|
if (colorString.startsWith("rgb(")) {
|
||||||
|
const color = colorString.replace("rgb(", "").replace(")", "");
|
||||||
|
return `#${color.split(",").map(a => parseInt(a).toString(16).length == 1 ? `0${parseInt(a).toString(16)}` : parseInt(a).toString(16)).join("")}`;
|
||||||
|
} else if (colorString.startsWith("rgba(")) {
|
||||||
|
const color = colorString.replace("rgba(", "").replace(")", "");
|
||||||
|
return `#${color.split(",").filter((_, i) => i <= 2).map(a => parseInt(a).toString(16).length == 1 ? `0${parseInt(a).toString(16)}` : parseInt(a).toString(16)).join("")}`;
|
||||||
|
} else {
|
||||||
|
if (colorString.startsWith("#")) {
|
||||||
|
const color = colorString.slice(1);
|
||||||
|
if (color.length == 3) return `#${color.split(a => a.repeat(2)).join()}`;
|
||||||
|
else if (color.length >= 6) return `#${color.slice(0, 6)}`;
|
||||||
|
else return `#${color}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const rgbToHsl = (r, g, b) => {
|
||||||
|
const r1 = r / 255;
|
||||||
|
const g1 = g / 255;
|
||||||
|
const b1 = b / 255;
|
||||||
|
|
||||||
|
const cmax = Math.max(r1, g1, b1);
|
||||||
|
const cmin = Math.min(r1, g1, b1);
|
||||||
|
|
||||||
|
const delta = cmax - cmin;
|
||||||
|
const l = (cmax + cmin) / 2;
|
||||||
|
const s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));
|
||||||
|
let h = 0;
|
||||||
|
if (delta != 0) {
|
||||||
|
switch (cmax) {
|
||||||
|
case r1:
|
||||||
|
h = 60 * (((g1 - b1) / delta) % 6);
|
||||||
|
break;
|
||||||
|
case g1:
|
||||||
|
h = 60 * ((b1 - r1) / delta + 2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
h = 60 * ((r1 - g1) / delta + 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {h, s, l};
|
||||||
|
}
|
||||||
|
|
||||||
|
const thetaSetting = new Setting("3D View Angle (0-90)", "theta", settingType.NUMBER, false, parseFloat((Math.atan(2) * 180 / Math.PI).toPrecision(3)));
|
||||||
|
|
||||||
|
const tab = new SettingsTab("moreViews.js");
|
||||||
|
tab.registerSetting(thetaSetting);
|
||||||
|
|
||||||
|
let maxDistance = -1;
|
||||||
|
const colorCache = new Map();
|
||||||
|
|
||||||
|
function getModeColor(color, distance = 0) {
|
||||||
|
if (!colorCache.has(view)) colorCache.set(view, new Map());
|
||||||
|
if (view == 18) {
|
||||||
|
if (colorCache.get(view).has(color) && colorCache.get(view).get(color).has(distance)) return colorCache.get(view).get(color).get(distance);
|
||||||
|
} else if (colorCache.get(view).has(color)) return colorCache.get(view).get(color);
|
||||||
|
switch (view) {
|
||||||
|
case 6: {
|
||||||
|
const newColor = "#" + (parseInt(`0x1${parseColor(color).slice(1)}`) ^ 0xffffff).toString(16).slice(1);
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 7: {
|
||||||
|
const newColor = blending(pixel.color, "#000000");
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 8: {
|
||||||
|
const newColor = blending(pixel.color, "#ffffff");
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 9: {
|
||||||
|
const [r, g, b] = parseColor(color).slice(1).match(/.{1,2}/g).map(a => parseInt(a, 16)).slice(0, 3);
|
||||||
|
const {h, l} = rgbToHsl(r, g, b);
|
||||||
|
const newColor = `hsl(${Math.round(h)}, 0%, ${Math.round(l * 100)}%)`;
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 10: {
|
||||||
|
const [r, g, b] = parseColor(color).replace("#", "").match(/../g).map(a => parseInt(a, 16));
|
||||||
|
const [r2, g2, b2] = [
|
||||||
|
Math.min(255, (r * 0.393) + (g * 0.769) + (b * 0.189)),
|
||||||
|
Math.min(255, (r * 0.349) + (g * 0.686) + (b * 0.168)),
|
||||||
|
Math.min(255, (r * 0.272) + (g * 0.534) + (b * 0.131))
|
||||||
|
];
|
||||||
|
const newColor = `#${Math.floor(r2).toString(16).padStart(2, "0")}${Math.floor(g2).toString(16).padStart(2, "0")}${Math.floor(b2).toString(16).padStart(2, "0")}`;
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 11: {
|
||||||
|
const [r, g, b] = parseColor(color).slice(1).match(/.{1,2}/g).map(a => parseInt(a, 16)).slice(0, 3);
|
||||||
|
const {h, s, l} = rgbToHsl(r, g, b);
|
||||||
|
const newColor = `hsl(${(Math.round(h) + 180 % 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`;
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 12: {
|
||||||
|
const [r, g, b] = parseColor(color).slice(1).match(/.{1,2}/g).map(a => parseInt(a, 16)).slice(0, 3);
|
||||||
|
const {h, s, l} = rgbToHsl(r, g, b);
|
||||||
|
const newColor = `hsl(${Math.round(h)}, ${Math.round(s * 100) * 4}%, ${Math.round(l * 100)}%)`;
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 15: {
|
||||||
|
const [r, g, b] = parseColor(color).replace("#", "").match(/../g);
|
||||||
|
const [r2, g2, b2] = [parseInt(r, 16) * 0.75, parseInt(g, 16) * 0.75, parseInt(b, 16) * 0.75];
|
||||||
|
const newColor = `rgb(${r2}, ${g2}, ${b2})`;
|
||||||
|
colorCache.get(view).set(color, newColor);
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
case 18: {
|
||||||
|
const newColor = blending(pixel.color, "#000000", (1 / maxDistance) * distance);
|
||||||
|
colorCache.get(view).has(color)
|
||||||
|
? colorCache.get(view).get(color).set(distance, newColor)
|
||||||
|
: colorCache.get(view).set(color, new Map([[distance, newColor]]));
|
||||||
|
return newColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
settingsManager.registerTab(tab);
|
||||||
|
|
||||||
|
runAfterLoadList.push(() => drawPixels = (function() {
|
||||||
|
const oldDrawPixels = drawPixels;
|
||||||
|
|
||||||
|
return function(forceTick = false) {
|
||||||
|
if (view >= 5) {
|
||||||
|
if (maxDistance = -1) maxDistance = Math.sqrt((width / 2) ** 2 + (height / 2) ** 2) * 2;
|
||||||
|
|
||||||
|
const canvas = document.getElementById("game");
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
var newCurrentPixels = currentPixels.slice();
|
||||||
|
var pixelsFirst = [];
|
||||||
|
var pixelsLast = [];
|
||||||
|
if (!paused || forceTick) {
|
||||||
|
shuffleArray(newCurrentPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < newCurrentPixels.length; i++) {
|
||||||
|
pixel = newCurrentPixels[i];
|
||||||
|
if (pixel.del) {continue}
|
||||||
|
if (!paused || forceTick) {
|
||||||
|
if (elements[pixel.element].tick) {
|
||||||
|
elements[pixel.element].tick(pixel);
|
||||||
|
}
|
||||||
|
if (pixel.del) {continue}
|
||||||
|
if (elements[pixel.element].behavior) {
|
||||||
|
pixelTick(pixel);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (pixel.con) { pixel = pixel.con }
|
||||||
|
if (elements[pixel.element].isGas || elements[pixel.element].glow) {
|
||||||
|
pixelsLast.push(pixel);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pixelsFirst.push(pixel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hiding) {
|
||||||
|
if (ctx.globalAlpha < 1) {
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elements[currentElement].maxSize < mouseSize) {
|
||||||
|
var mouseOffset = Math.trunc(elements[currentElement].maxSize/2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var mouseOffset = Math.trunc(mouseSize/2);
|
||||||
|
}
|
||||||
|
var topLeft = [mousePos.x-mouseOffset,mousePos.y-mouseOffset];
|
||||||
|
var bottomRight = [mousePos.x+mouseOffset,mousePos.y+mouseOffset];
|
||||||
|
|
||||||
|
ctx.strokeStyle = "white";
|
||||||
|
ctx.strokeRect(topLeft[0]*pixelSize,topLeft[1]*pixelSize,(bottomRight[0]-topLeft[0]+1)*pixelSize,(bottomRight[1]-topLeft[1]+1)*pixelSize);
|
||||||
|
|
||||||
|
if (settings.precision) {
|
||||||
|
ctx.fillStyle = "rgba(255,255,255,0.5)";
|
||||||
|
ctx.fillRect(mousePos.x*pixelSize,mousePos.y*pixelSize,pixelSize,pixelSize);
|
||||||
|
}
|
||||||
|
if ((!paused) || forceTick) {pixelTicks++};
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!settings["bg"]) {ctx.clearRect(0, 0, canvas.width, canvas.height)}
|
||||||
|
else {
|
||||||
|
ctx.fillStyle = settings["bg"];
|
||||||
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
|
}
|
||||||
|
var pixelDrawList = pixelsFirst.concat(pixelsLast);
|
||||||
|
for (var i = 0; i < pixelDrawList.length; i++) {
|
||||||
|
pixel = pixelDrawList[i];
|
||||||
|
if (pixelMap[pixel.x][pixel.y] == undefined) {continue}
|
||||||
|
if (pixel.con) { pixel = pixel.con };
|
||||||
|
ctx.fillStyle = getModeColor(pixel.color, view == 18 ? Math.sqrt((width / 2 - pixel.x) ** 2 + (height / 2 - pixel.y) ** 2) : 0);
|
||||||
|
// 3D VIEW
|
||||||
|
if (view == 5) {
|
||||||
|
const neighborRight = !outOfBounds(pixel.x + 1, pixel.y) && !!pixelMap[pixel.x + 1][pixel.y];
|
||||||
|
const neighborUp = !outOfBounds(pixel.x, pixel.y - 1) && !!pixelMap[pixel.x][pixel.y - 1];
|
||||||
|
const neighborUpRight = !outOfBounds(pixel.x + 1, pixel.y - 1) && !!pixelMap[pixel.x + 1][pixel.y - 1];
|
||||||
|
let size = 0;
|
||||||
|
let currentY = pixel.y;
|
||||||
|
while (!outOfBounds(pixel.x, currentY) && pixelMap[pixel.x][currentY] && pixelMap[pixel.x][currentY].element == pixel.element) {
|
||||||
|
currentY++;
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
ctx.fillStyle = pixel.color;
|
||||||
|
ctx.fillRect(pixel.x * pixelSize, pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
const px = pixel.x * pixelSize;
|
||||||
|
const py = pixel.y * pixelSize;
|
||||||
|
const theta = Math.max(Math.min(thetaSetting.get(), 90), 0) * Math.PI / 180;
|
||||||
|
const a = Math.cos(theta);
|
||||||
|
const b = Math.sin(theta);
|
||||||
|
const w = pixelSize;
|
||||||
|
const px2 = px + a * w;
|
||||||
|
const py2 = py - b * w;
|
||||||
|
const parts = [[[px, py], [[px2, py2], [px + w, py2], [px + w, py]], !neighborUp], [[px + w, py + w], [[px2 + w, py2 + w], [px2 + w, py], [px + w, py]], !neighborRight], [[px + w, py], [[px + w, py2], [px2 + w, py2], [px + w, py]], !neighborUp && !neighborUpRight], [[px + w, py], [[px2 + w, py2], [px2 + w, py], [px + w, py]], !neighborRight && !neighborUpRight]]
|
||||||
|
for (const part of parts.filter(p => p[2])) {
|
||||||
|
ctx.fillStyle = blending(pixel.color, "#000000");
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(...part[0]);
|
||||||
|
for (const v of part[1]) {
|
||||||
|
ctx.lineTo(...v);
|
||||||
|
}
|
||||||
|
ctx.closePath();
|
||||||
|
ctx.fill();
|
||||||
|
}
|
||||||
|
} else if (view == 13) {
|
||||||
|
const hue = 225 - (Math.log(pixel.start) / Math.log(pixelTicks)) * 225;
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
ctx.fillStyle = `hsl(${Math.min(Math.round(hue), 250)}, 100%, 50%)`;
|
||||||
|
ctx.fillRect(pixel.x * pixelSize, pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
} else if (view == 14) {
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
ctx.fillStyle = pixel.color;
|
||||||
|
ctx.fillRect(pixel.x * pixelSize, pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
|
||||||
|
if (outOfBounds(pixel.x - 1, pixel.y) || !pixelMap[pixel.x - 1][pixel.y]) {
|
||||||
|
ctx.fillStyle = "#ff0000";
|
||||||
|
ctx.globalAlpha = 0.5;
|
||||||
|
ctx.fillRect(pixel.x * pixelSize - 0.5 * pixelSize, pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
}
|
||||||
|
if (outOfBounds(pixel.x + 1, pixel.y) || !pixelMap[pixel.x + 1][pixel.y]) {
|
||||||
|
ctx.fillStyle = "#00ffff";
|
||||||
|
ctx.globalAlpha = 0.5;
|
||||||
|
ctx.fillRect(pixel.x * pixelSize + 0.5 * pixelSize, pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
}
|
||||||
|
} else if (view == 15) {
|
||||||
|
const [r, g, b] = parseColor(pixel.color).replace("#", "").match(/../g);
|
||||||
|
const [r2, g2, b2] = [parseInt(r, 16) * 0.75, parseInt(g, 16) * 0.75, parseInt(b, 16) * 0.75]
|
||||||
|
// scrolling effect
|
||||||
|
const offset = (pixelTicks + 6) % height >= pixel.y && (pixelTicks - 3) % height <= pixel.y
|
||||||
|
|| (pixelTicks + 66) % height >= pixel.y && (pixelTicks - 57) % height <= pixel.y;
|
||||||
|
if (!pixelMap[pixel.x - 1] || !pixelMap[pixel.x - 1][pixel.y]) {
|
||||||
|
ctx.globalAlpha = 0.5;
|
||||||
|
ctx.fillStyle = `#${r.padStart(2, "0")}0000`;
|
||||||
|
ctx.fillRect(pixel.x * pixelSize - 0.75 * pixelSize - (offset ? 0.5 * pixelSize : 0) , pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
}
|
||||||
|
if (!pixelMap[pixel.x + 1] || !pixelMap[pixel.x + 1][pixel.y]) {
|
||||||
|
ctx.globalAlpha = 0.5;
|
||||||
|
ctx.fillStyle = `#0000${b.padStart(2, "0")}`;
|
||||||
|
ctx.fillRect(pixel.x * pixelSize + 0.75 * pixelSize - (offset ? 0.5 * pixelSize : 0), pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
}
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
ctx.fillStyle = `rgb(${r2}, ${g2}, ${b2})`
|
||||||
|
ctx.fillRect(pixel.x * pixelSize - (offset ? 0.5 * pixelSize : 0), pixel.y * pixelSize, pixelSize, pixelSize);
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
// i fucking hate it but at least it works
|
||||||
|
// and i dont feel like finding something that is fast and pretty
|
||||||
|
} else if (view == 16) {
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
ctx.strokeStyle = pixel.color;
|
||||||
|
ctx.lineWidth = 2;
|
||||||
|
const cond1 = outOfBounds(pixel.x - 1, pixel.y)
|
||||||
|
|| !pixelMap[pixel.x - 1][pixel.y]
|
||||||
|
|| pixelMap[pixel.x - 1][pixel.y].element != pixel.element;
|
||||||
|
const cond2 = outOfBounds(pixel.x + 1, pixel.y)
|
||||||
|
|| !pixelMap[pixel.x + 1][pixel.y]
|
||||||
|
|| pixelMap[pixel.x + 1][pixel.y].element != pixel.element;
|
||||||
|
const cond3 = outOfBounds(pixel.x, pixel.y - 1)
|
||||||
|
|| !pixelMap[pixel.x][pixel.y - 1]
|
||||||
|
|| pixelMap[pixel.x][pixel.y - 1].element != pixel.element;
|
||||||
|
const cond4 = outOfBounds(pixel.x, pixel.y + 1)
|
||||||
|
|| !pixelMap[pixel.x][pixel.y + 1]
|
||||||
|
|| pixelMap[pixel.x][pixel.y + 1].element != pixel.element;
|
||||||
|
const cond5 = outOfBounds(pixel.x - 1, pixel.y - 1)
|
||||||
|
|| !pixelMap[pixel.x - 1][pixel.y - 1]
|
||||||
|
|| pixelMap[pixel.x - 1][pixel.y - 1].element != pixel.element;
|
||||||
|
const cond6 = outOfBounds(pixel.x + 1, pixel.y - 1)
|
||||||
|
|| !pixelMap[pixel.x + 1][pixel.y - 1]
|
||||||
|
|| pixelMap[pixel.x + 1][pixel.y - 1].element != pixel.element;
|
||||||
|
const cond7 = outOfBounds(pixel.x - 1, pixel.y + 1)
|
||||||
|
|| !pixelMap[pixel.x - 1][pixel.y + 1]
|
||||||
|
|| pixelMap[pixel.x - 1][pixel.y + 1].element != pixel.element;
|
||||||
|
const cond8 = outOfBounds(pixel.x + 1, pixel.y + 1)
|
||||||
|
|| !pixelMap[pixel.x + 1][pixel.y + 1]
|
||||||
|
|| pixelMap[pixel.x + 1][pixel.y + 1].element != pixel.element;
|
||||||
|
|
||||||
|
if (cond1) {
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(pixel.x * pixelSize + ctx.lineWidth / 2, pixel.y * pixelSize);
|
||||||
|
ctx.lineTo(pixel.x * pixelSize + ctx.lineWidth / 2, (pixel.y + 1) * pixelSize);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
if (cond2) {
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo((pixel.x + 1) * pixelSize - ctx.lineWidth / 2, pixel.y * pixelSize);
|
||||||
|
ctx.lineTo((pixel.x + 1) * pixelSize - ctx.lineWidth / 2, (pixel.y + 1) * pixelSize);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
if (cond3) {
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(pixel.x * pixelSize, pixel.y * pixelSize + ctx.lineWidth / 2);
|
||||||
|
ctx.lineTo((pixel.x + 1) * pixelSize, pixel.y * pixelSize + ctx.lineWidth / 2);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
if (cond4) {
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(pixel.x * pixelSize, (pixel.y + 1) * pixelSize - ctx.lineWidth / 2);
|
||||||
|
ctx.lineTo((pixel.x + 1) * pixelSize, (pixel.y + 1) * pixelSize - ctx.lineWidth / 2);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
if (!cond2 && !cond4 && cond8) ctx.fillRect((pixel.x + 1) * pixelSize - ctx.lineWidth, (pixel.y + 1) * pixelSize - ctx.lineWidth, ctx.lineWidth, ctx.lineWidth);
|
||||||
|
if (!cond2 && !cond3 && cond6) ctx.fillRect((pixel.x + 1) * pixelSize - ctx.lineWidth, pixel.y * pixelSize, ctx.lineWidth, ctx.lineWidth);
|
||||||
|
if (!cond1 && !cond3 && cond5) ctx.fillRect(pixel.x * pixelSize, pixel.y * pixelSize, ctx.lineWidth, ctx.lineWidth);
|
||||||
|
if (!cond1 && !cond4 && cond7) ctx.fillRect(pixel.x * pixelSize, (pixel.y + 1) * pixelSize - ctx.lineWidth, ctx.lineWidth, ctx.lineWidth);
|
||||||
|
} else if (view == 17) {
|
||||||
|
ctx.fillRect(pixel.x * pixelSize, (height - pixel.y) * pixelSize, pixelSize, pixelSize);
|
||||||
|
} else {
|
||||||
|
ctx.fillRect(pixel.x*pixelSize, pixel.y*pixelSize, pixelSize, pixelSize);
|
||||||
|
}
|
||||||
|
if (pixel.charge && view !== 2) { // Yellow glow on charge
|
||||||
|
if (!elements[pixel.element].colorOn) {
|
||||||
|
ctx.fillStyle = "rgba(255,255,0,0.5)";
|
||||||
|
ctx.fillRect(pixel.x*pixelSize, pixel.y*pixelSize, pixelSize, pixelSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (view == 15) {
|
||||||
|
// TRACK READ NOISE
|
||||||
|
for (let n = 0; n < 3; n++) {
|
||||||
|
const number = Math.floor(Math.random() * height);
|
||||||
|
ctx.globalAlpha = Math.random();
|
||||||
|
ctx.fillStyle = "#fff";
|
||||||
|
ctx.fillRect(0, (number + 0.5) * pixelSize, width * pixelSize, 0.2);
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
}
|
||||||
|
const {font, textAlign} = ctx;
|
||||||
|
ctx.font = "30px VCR";
|
||||||
|
ctx.textAlign = "start";
|
||||||
|
ctx.fillText(paused ? "PAUSE" : "PLAY", (0.025 * width) * pixelSize, (0.025 * width) * pixelSize + 15);
|
||||||
|
if (paused) {
|
||||||
|
ctx.fillRect((0.05 * width) * pixelSize + ctx.measureText("PAUSE").width, (0.025 * width) * pixelSize - 7.5, 5, 22.5);
|
||||||
|
ctx.fillRect((0.05 * width) * pixelSize + ctx.measureText("PAUSE").width + 8, (0.025 * width) * pixelSize - 7.5, 5, 22.5);
|
||||||
|
} else {
|
||||||
|
ctx.fillStyle = "#fff";
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo((0.05 * width) * pixelSize + ctx.measureText("PLAY").width, (0.025 * width) * pixelSize - 7.5);
|
||||||
|
ctx.lineTo((0.05 * width) * pixelSize + ctx.measureText("PLAY").width, (0.025 * width) * pixelSize + 15);
|
||||||
|
ctx.lineTo((0.05 * width) * pixelSize + ctx.measureText("PLAY").width + 17.5, (0.025 * width) * pixelSize + 3.75);
|
||||||
|
ctx.lineTo((0.05 * width) * pixelSize + ctx.measureText("PLAY").width, (0.025 * width) * pixelSize - 7.5);
|
||||||
|
ctx.fill();
|
||||||
|
}
|
||||||
|
const base = Math.floor(pixelTicks / tps);
|
||||||
|
const seconds = base % 60 + "";
|
||||||
|
const minutes = Math.floor(base / 60) % 60 + "";
|
||||||
|
const hours = Math.floor(base / 60 / 60) + "";
|
||||||
|
ctx.textAlign = "end";
|
||||||
|
ctx.fillText(`${hours.padStart(2, "0")}:${minutes.padStart(2, "0")}:${seconds.padStart(2, "0")}`, (0.975 * width) * pixelSize, (0.025 * width) * pixelSize + 15);
|
||||||
|
ctx.font = font;
|
||||||
|
ctx.textAlign = textAlign;
|
||||||
|
}
|
||||||
|
if (ctx.globalAlpha < 1) {
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elements[currentElement].maxSize < mouseSize) {
|
||||||
|
var mouseOffset = Math.trunc(elements[currentElement].maxSize/2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var mouseOffset = Math.trunc(mouseSize/2);
|
||||||
|
}
|
||||||
|
var topLeft = [mousePos.x-mouseOffset,mousePos.y-mouseOffset];
|
||||||
|
var bottomRight = [mousePos.x+mouseOffset,mousePos.y+mouseOffset];
|
||||||
|
// Draw a square around the mouse
|
||||||
|
ctx.strokeStyle = "white";
|
||||||
|
ctx.strokeRect(topLeft[0]*pixelSize,topLeft[1]*pixelSize,(bottomRight[0]-topLeft[0]+1)*pixelSize,(bottomRight[1]-topLeft[1]+1)*pixelSize);
|
||||||
|
// draw one transparent pixel in the center
|
||||||
|
if (settings.precision) {
|
||||||
|
ctx.fillStyle = "rgba(255,255,255,0.5)";
|
||||||
|
ctx.fillRect(mousePos.x*pixelSize,mousePos.y*pixelSize,pixelSize,pixelSize);
|
||||||
|
}
|
||||||
|
if ((!paused) || forceTick) {pixelTicks++};
|
||||||
|
} else oldDrawPixels.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}()));
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
//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 pixelInRange(pixel, range){
|
function pixelInRange(pixel, range){
|
||||||
let i = 0;
|
let i = 0;
|
||||||
while (i < range.length) {
|
while (i < range.length) {
|
||||||
|
|
@ -635,11 +635,6 @@ elements.potassiumhydroxidecrystals = {
|
||||||
density: 2040,
|
density: 2040,
|
||||||
name: "PotassiumHydroxideCrystals",
|
name: "PotassiumHydroxideCrystals",
|
||||||
}
|
}
|
||||||
elements.supercooler = {
|
|
||||||
name: "SuperCooler",
|
|
||||||
category: "machines"
|
|
||||||
}
|
|
||||||
elements.supercooler.behavior = [["XX","CO:10","XX"],["CO:10","XX","CO:10"],["XX","CO:10","XX"]]
|
|
||||||
elements.iron_chloride = {
|
elements.iron_chloride = {
|
||||||
color: ["#010014", "#a2ff94"],
|
color: ["#010014", "#a2ff94"],
|
||||||
reactions: {
|
reactions: {
|
||||||
|
|
@ -695,7 +690,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,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,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,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.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",
|
||||||
|
|
@ -1057,52 +1052,12 @@ elements.specialmixer = {
|
||||||
mix(range, exclude);
|
mix(range, exclude);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let num4 = 0;
|
let num4 = 0;
|
||||||
let exclude2 = [];
|
let exclude2 = [];
|
||||||
let property1 = "";
|
let property1 = "";
|
||||||
let value2 = "";
|
let value2 = "";
|
||||||
elements.propmachine = {
|
|
||||||
name: "PropMachine",
|
|
||||||
behavior: behaviors.WALL,
|
|
||||||
category: "machines",
|
|
||||||
noMix: true,
|
|
||||||
onSelect: function(pixel) {
|
|
||||||
let item = prompt("enter range for prop changing.");
|
|
||||||
if(/^\d+$/.test(item)){
|
|
||||||
num4 = parseInt(item);
|
|
||||||
} else {
|
|
||||||
alert("that is not an integer.");
|
|
||||||
}
|
|
||||||
exclude2 = prompt("Enter elements to exclude, seperate them with commas.").replace(/\s/g, "").split(",");
|
|
||||||
exclude2.push("propmachine");
|
|
||||||
var answer1 = prompt("Warning - This tool may break the simulator if used incorrectly.\n\nEnter a pixel attribute to modify:",(currentProp||undefined));
|
|
||||||
if (!answer1) { return }
|
|
||||||
var answer2 = prompt("Now, enter a value for "+answer1+":",(currentPropValue||undefined));
|
|
||||||
if (!answer2) { return }
|
|
||||||
var valueL = answer2.toLowerCase();
|
|
||||||
if (valueL === "true") { answer2 = true }
|
|
||||||
else if (valueL === "false") { answer2 = false }
|
|
||||||
else if (valueL === "null") { answer2 = null }
|
|
||||||
else if (valueL === "undefined") { answer2 = undefined }
|
|
||||||
else if (answer1 === "color" && valueL[0] === "#") {
|
|
||||||
var rgb = hexToRGB(valueL);
|
|
||||||
answer2 = "rgb("+rgb.r+","+rgb.g+","+rgb.b+")";
|
|
||||||
}
|
|
||||||
currentProp = answer1;
|
|
||||||
var num = parseFloat(answer2);
|
|
||||||
if (!isNaN(num)) { answer2 = num }
|
|
||||||
currentPropValue = answer2;
|
|
||||||
logMessage("Prop: "+currentProp);
|
|
||||||
logMessage("Value: "+currentPropValue);
|
|
||||||
},
|
|
||||||
tick: function(pixel) {
|
|
||||||
if(pixel.start == pixelTicks) {
|
|
||||||
pixel.range = num4;
|
|
||||||
}
|
|
||||||
let range = mouseRange(pixel.x, pixel.y, pixel.range);
|
|
||||||
prop({ property: property1, value: value2 },range, exclude2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let item = "";
|
let item = "";
|
||||||
elements.improvedsensor = {
|
elements.improvedsensor = {
|
||||||
behavior: behaviors.WALL,
|
behavior: behaviors.WALL,
|
||||||
|
|
@ -1196,30 +1151,111 @@ elements.incinerator = {
|
||||||
color: 'rgb(255, 50, 0)',
|
color: 'rgb(255, 50, 0)',
|
||||||
noMix: true,
|
noMix: true,
|
||||||
}
|
}
|
||||||
function prop(obj, range, exclude = []){
|
function conditionTrue(condition, pixel){
|
||||||
|
let p = pixel;
|
||||||
|
let string = "";
|
||||||
|
condition = condition.split("!OR").join("||").split("&AND").join("&&").split("\"").join("")
|
||||||
|
|
||||||
|
condition = eval(condition);
|
||||||
|
return condition;
|
||||||
|
}
|
||||||
|
let ifCondition = "";
|
||||||
|
let currentProp = "";
|
||||||
|
let currentPropValue = "";
|
||||||
|
elements.propmachine = {
|
||||||
|
name: "PropMachine",
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
category: "machines",
|
||||||
|
noMix: true,
|
||||||
|
onSelect: function(pixel) {
|
||||||
|
|
||||||
|
let item = prompt("enter range for prop changing.");
|
||||||
|
if(/^\d+$/.test(item)){
|
||||||
|
num4 = parseInt(item);
|
||||||
|
} else {
|
||||||
|
alert("that is not an integer.");
|
||||||
|
}
|
||||||
|
exclude2 = prompt("Enter elements to exclude, seperate them with commas. You can also enter !IF if you wish to enter conditions for it to change the property and add the exclude elements.").replace(/\s/g, "");
|
||||||
|
if(exclude2.includes("!IF")){
|
||||||
|
exclude2.split("!IF").join("");
|
||||||
|
ifCondition = prompt("Enter the condition for the property to change. A list of variables can be seen at the bottom of the page. you cannot use \"\" but you can use `` and ''.");
|
||||||
|
} else { ifCondition = '1 == 1'; }
|
||||||
|
exclude2.split(",");
|
||||||
|
if(exclude2.constructor == [].constructor){
|
||||||
|
exclude2.push("propmachine");
|
||||||
|
} else {
|
||||||
|
exclude2 += "propmachine";
|
||||||
|
}
|
||||||
|
var answer1 = prompt("Warning - This tool may break the simulator if used incorrectly.\n\nEnter a pixel attribute to modify:",(currentProp||undefined));
|
||||||
|
console.log(answer1)
|
||||||
|
if (!answer1) { return }
|
||||||
|
var answer2 = prompt("Now, enter a value for "+answer1+":",(currentPropValue||undefined));
|
||||||
|
if (!answer2) { return }
|
||||||
|
var valueL = answer2.toLowerCase();
|
||||||
|
if (valueL === "true") { answer2 = true }
|
||||||
|
else if (valueL === "false") { answer2 = false }
|
||||||
|
else if (valueL === "null") { answer2 = null }
|
||||||
|
else if (valueL === "undefined") { answer2 = undefined }
|
||||||
|
else if (answer1 === "color" && valueL[0] === "#") {
|
||||||
|
var rgb = hexToRGB(valueL);
|
||||||
|
answer2 = "rgb("+rgb.r+","+rgb.g+","+rgb.b+")";
|
||||||
|
}
|
||||||
|
currentProp = answer1;
|
||||||
|
currentPropValue = answer2;
|
||||||
|
console.log(answer1);
|
||||||
|
var num = parseFloat(answer2);
|
||||||
|
if (!isNaN(num)) { answer2 = num }
|
||||||
|
currentPropValue = answer2;
|
||||||
|
logMessage("Prop: "+currentProp);
|
||||||
|
logMessage("Value: "+currentPropValue);
|
||||||
|
},
|
||||||
|
tick: function(pixel) {
|
||||||
|
if(pixel.start == pixelTicks) {
|
||||||
|
pixel.range = num4;
|
||||||
|
pixel.condition = ifCondition;
|
||||||
|
pixel.prop = currentProp;
|
||||||
|
pixel.val = currentPropValue;
|
||||||
|
}
|
||||||
|
let range = mouseRange(pixel.x, pixel.y, pixel.range);
|
||||||
|
prop({ property: pixel.prop, value: pixel.val },range, exclude2, pixel.condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function prop(obj, range, exclude = [], condition = ""){
|
||||||
|
let list = [];
|
||||||
for (var i = 0; i < range.length; i++) {
|
for (var i = 0; i < range.length; i++) {
|
||||||
if (!isEmpty(range[i][0], range[i][1], true)) {
|
var x = range[i][0];
|
||||||
var pixel = pixelMap[range[i][0]][range[i][1]];
|
var y = range[i][1];
|
||||||
if (!exclude.includes(pixel.element)){
|
if (!isEmpty(x,y,true)) {
|
||||||
|
var pixel = pixelMap[x][y];
|
||||||
|
list.push(pixel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var i = 0; i < list.length; i++) {
|
||||||
|
if (!isEmpty(list[i].x, list[i].y, true)) {
|
||||||
|
var pixel = list[i];
|
||||||
|
if (!exclude.includes(pixel.element) && conditionTrue(condition, pixel)){
|
||||||
if(/^\d+$/.test(obj.value)){
|
if(/^\d+$/.test(obj.value)){
|
||||||
obj.value = parseInt(obj.value);
|
obj.value = parseInt(obj.value);
|
||||||
}
|
}
|
||||||
if (!currentProp) { return }
|
if (!obj.property) { return }
|
||||||
if (pixel[currentProp] !== undefined && typeof pixel[currentProp] !== typeof currentPropValue) {
|
if (pixel[obj.property] !== undefined && typeof pixel[obj.property] !== typeof obj.value) {
|
||||||
logMessage("Error: "+currentProp+" type is "+typeof pixel[currentProp]+", not "+typeof currentPropValue+".");
|
logMessage("Error: "+obj.property+" type is "+typeof pixel[obj.property]+", not "+typeof obj.value+".");
|
||||||
currentProp = null;
|
obj.property = null;
|
||||||
currentPropValue = null;
|
obj.value = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (currentProp === "element") {
|
if (obj.property === "element") {
|
||||||
changePixel(pixel, currentPropValue);
|
changePixel(pixel, obj.value);
|
||||||
|
list.splice(list.indexOf(pixel),1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (currentProp === "burning" && currentPropValue === "true") {
|
if (obj.property === "burning" && obj.value === "true") {
|
||||||
pixel.burnStart = pixelTicks;
|
pixel.burnStart = pixelTicks;
|
||||||
|
list.splice(list.indexOf(pixel),1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pixel[currentProp] = currentPropValue;
|
pixel[obj.property] = obj.value;
|
||||||
|
list.splice(list.indexOf(pixel),1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1307,3 +1343,122 @@ function pull(range, pixel1, include = []){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let prevNum;
|
||||||
|
elements.etemper = {
|
||||||
|
name: "E-Temper",
|
||||||
|
category: "machines",
|
||||||
|
conduct: 1,
|
||||||
|
insulate: true,
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
onSelect: function(pixel){
|
||||||
|
prevNum = parseInt(prompt("Enter the temperature you want it set to.", (prevNum || undefined)));
|
||||||
|
},
|
||||||
|
tick: function(pixel){
|
||||||
|
if(pixel.start === pixelTicks){
|
||||||
|
pixel.clone = `Temp: ${prevNum}`;
|
||||||
|
pixel.Temp = prevNum;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < adjacentCoords.length; i++){
|
||||||
|
let x = pixel.x + adjacentCoords[i][0];
|
||||||
|
let y = pixel.y + adjacentCoords[i][1];
|
||||||
|
if(outOfBounds(x,y)){ continue; }
|
||||||
|
if(isEmpty(x,y)){ continue; }
|
||||||
|
let pixel2 = pixelMap[x][y];
|
||||||
|
|
||||||
|
if (pixel2.temp < pixel.Temp && pixel.charge > 0 ){
|
||||||
|
pixel2.temp += pixel.Temp / 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
let prevString;
|
||||||
|
elements.sign = {
|
||||||
|
name: "Sign",
|
||||||
|
category: "machines",
|
||||||
|
onSelect: function(){
|
||||||
|
prevString = prompt("Enter the text you want it to say.", (prevString || undefined));
|
||||||
|
},
|
||||||
|
tick: function(pixel){
|
||||||
|
if(pixel.start == pixelTicks){
|
||||||
|
pixel.clone = prevString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
runAfterLoad(function(){
|
||||||
|
document.body.innerHTML += `
|
||||||
|
these are all properties of the pixel. another way to find pixel properties is using debug on a pixel, it will tell you the property and the value, like x and y, or, in plants.js, fruit.
|
||||||
|
<table id="variables">
|
||||||
|
<thead>
|
||||||
|
<tr class="bold">
|
||||||
|
<th>
|
||||||
|
Variable
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Definition
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody><tr>
|
||||||
|
<th>
|
||||||
|
p.color
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
The color of the pixel. it is defined as an RGB value.
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
p.x and p.y
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
The x and y positions of the pixel.
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
p.element
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
The element of the pixel.
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
p.clone
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Specific to cloners, specifies what the cloner clones.
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
wc and lc
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Specific to saplings, specifies what colour the wood is (wc) and what colour the leaves are (lc).
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
p.start
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
The start tick of the pixel.
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
p.tick
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
the amount of ticks that have happened so far in the game.
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody></table>
|
||||||
|
`
|
||||||
|
document.getElementById("extraInfo").innerHTML = `
|
||||||
|
<small><a href="https://sandboxels.r74n.com/changelog" id="changelogButton" target="_blank">Changelog<span style="color:red">(NEW)</span></a> • <a href="https://sandboxels.R74n.com/feedback" target="_blank" style="color:lime;">Feedback</a> • <a href="https://sandboxels.wiki.gg/" target="_blank" id="wikiButton" title="Official Sandboxels Wiki - wiki.gg" style="color:white;">Wiki</a> • <a id="moreSocial" href="https://reddit.com/r/Sandboxels" rel="me" target="_blank"><span style="color:#FF5700">Reddit</span></a> • <a href="https://discord.gg/ejUc6YPQuS" target="_blank" style="color:#2f60ff;">Discord</a><span id="install-button" style="display: inline-block;"> • <a onclick="deferredPrompt.prompt(); return false" href="#" style="text-shadow: 0px 2px 10px #ff00ff; cursor:pointer">Install Offline</a> • <a href = "https://sandboxels.r74n.com/#variables">Variables</a></span><!--<br><br><a style="color:lime" target="_blank" href="https://docs.google.com/forms/d/e/1FAIpQLSf8pVMSdC6oSnBSaTpzjPQa8Ef-vxG_eXL99UITnMSQtJFTJA/viewform?usp=sf_link">FILL OUT THE CENSUS<span style="color:red">(NEW)</span></a>--></small><small><p>v1.9.3 • 559 elements, with <span id="hiddenCount">0</span> hidden.</p><p>©2021-2024. <a href="https://sandboxels.R74n.com/license.txt" rel="license" target="_blank">All Rights Reserved</a>. <a style="color:#00ffff" rel="author" href="https://r74n.com">R74n</a></p></small>
|
||||||
|
`
|
||||||
|
});
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -69,6 +69,7 @@ try {
|
||||||
width: width,
|
width: width,
|
||||||
height: height,
|
height: height,
|
||||||
pixelSize: pixelSize,
|
pixelSize: pixelSize,
|
||||||
|
pixelTicks: pixelTicks,
|
||||||
settings: settings,
|
settings: settings,
|
||||||
version: 1,
|
version: 1,
|
||||||
enabledMods: localStorage.enabledMods,
|
enabledMods: localStorage.enabledMods,
|
||||||
|
|
@ -322,6 +323,7 @@ try {
|
||||||
width = json.width;
|
width = json.width;
|
||||||
height = json.height;
|
height = json.height;
|
||||||
pixelSize = json.pixelSize;
|
pixelSize = json.pixelSize;
|
||||||
|
pixelTicks = (json.pixelTicks ?? 0);
|
||||||
//currentPixels = json.currentPixels;
|
//currentPixels = json.currentPixels;
|
||||||
for(i = 0; i < json.pixelMap.length; i++) {
|
for(i = 0; i < json.pixelMap.length; i++) {
|
||||||
json.pixelMap[i] = json.pixelMap[i].map(x => zeroToNull(x));
|
json.pixelMap[i] = json.pixelMap[i].map(x => zeroToNull(x));
|
||||||
|
|
|
||||||
160
mods/sbstuff.js
160
mods/sbstuff.js
|
|
@ -3,7 +3,7 @@ elements.cooked_rice = {
|
||||||
tempMin: 20,
|
tempMin: 20,
|
||||||
stateMin: "rice",
|
stateMin: "rice",
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
stateHigh: ["ash", "charcoal"],
|
stateHigh: "charcoal",
|
||||||
density: 699,
|
density: 699,
|
||||||
color: "#c2b6b6",
|
color: "#c2b6b6",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
|
|
@ -16,37 +16,39 @@ elements.cooked_rice = {
|
||||||
|
|
||||||
elements.rice = {
|
elements.rice = {
|
||||||
breakInto: "flour",
|
breakInto: "flour",
|
||||||
viscosity: 10000,
|
|
||||||
isFood: true,
|
isFood: true,
|
||||||
density: 696,
|
density: 696,
|
||||||
tempHigh: 232,
|
tempHigh: 232,
|
||||||
stateHigh: "cooked_rice",
|
stateHigh: "cooked_rice",
|
||||||
color: "#c8c8c8",
|
color: "#c8c8c8",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.POWDER,
|
||||||
category: "food",
|
category: "food",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.moth = {
|
elements.moth = {
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
stateHigh: "ash",
|
stateHigh: "dead_bug",
|
||||||
|
breakInto: "dead_bug",
|
||||||
color: "#57381a",
|
color: "#57381a",
|
||||||
behavior: behaviors.FLY,
|
behavior: behaviors.FLY,
|
||||||
category: "life",
|
category: "life",
|
||||||
state: "solid",
|
state: "liquid",
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.cotton_candy = {
|
elements.cotton_candy = {
|
||||||
isFood: true,
|
isFood: true,
|
||||||
tempHigh: 500,
|
tempHigh: 200,
|
||||||
stateHigh: "ash",
|
stateHigh: "sugar",
|
||||||
density: 1000,
|
density: 1000,
|
||||||
color: "#b6c7e3",
|
color: ["#b6c7e3", "#c54b4b", "#e7769c"],
|
||||||
|
singleColor: true,
|
||||||
behavior: behaviors.POWDER,
|
behavior: behaviors.POWDER,
|
||||||
category: "food",
|
category: "food",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
reactions: {
|
reactions: {
|
||||||
"water": { elem1: "sugar", elem2: null },
|
"water": { elem1: "sugar", elem2: "water" },
|
||||||
|
"sugar_water": { elem1: "sugar", elem2:"sugar_water", chance: 10 }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -192,6 +194,8 @@ elements.green_berries = {
|
||||||
elements.meth = {
|
elements.meth = {
|
||||||
hardness: 1,
|
hardness: 1,
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
|
tempLow: -50,
|
||||||
|
stateLowColorMultiplier: 0.9,
|
||||||
stateHigh: "melted_meth",
|
stateHigh: "melted_meth",
|
||||||
color: "#0affef",
|
color: "#0affef",
|
||||||
behavior: behaviors.POWDER,
|
behavior: behaviors.POWDER,
|
||||||
|
|
@ -199,6 +203,18 @@ elements.meth = {
|
||||||
state: "liquid"
|
state: "liquid"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
elements.melted_meth = {
|
||||||
|
viscosity: 1000,
|
||||||
|
tempHigh: 100000,
|
||||||
|
tempLow: -20,
|
||||||
|
stateHigh: "beans",
|
||||||
|
stateLow: "meth",
|
||||||
|
color: "#00a2ff",
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
category: "joke",
|
||||||
|
state: "solid",
|
||||||
|
};
|
||||||
|
|
||||||
elements.garlic = {
|
elements.garlic = {
|
||||||
isFood: true,
|
isFood: true,
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
|
|
@ -217,7 +233,7 @@ elements.garlic_bread = {
|
||||||
breakInto: "crumb",
|
breakInto: "crumb",
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
stateHigh: "ash",
|
stateHigh: "ash",
|
||||||
color: ["#db9b56", "#288a0c", "#db9b56", "#db9b56", "#db9b56", "#db9b56"],
|
color: ["#e9be90", "#288a0c", "#e0c6aa", "#b49e85", "#b6926b", "#ccac8b"],
|
||||||
behavior: behaviors.STURDYPOWDER,
|
behavior: behaviors.STURDYPOWDER,
|
||||||
category: "food",
|
category: "food",
|
||||||
state: "solid",
|
state: "solid",
|
||||||
|
|
@ -249,6 +265,8 @@ elements.lemon = {
|
||||||
elements.lemonade = {
|
elements.lemonade = {
|
||||||
isFood: true,
|
isFood: true,
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
|
tempLow: -15,
|
||||||
|
tempLowColor: "#f8eb35",
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
color: "#fff41c",
|
color: "#fff41c",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
|
|
@ -269,6 +287,18 @@ elements.poop = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
elements.diarrhea = {
|
||||||
|
hardness: 1,
|
||||||
|
viscosity: 10000,
|
||||||
|
tempHigh: 500,
|
||||||
|
stateHigh: ["ash", "ash", "ash", "ash", "ash", "ash", "ash", "steam",],
|
||||||
|
color: "#523718",
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
category: "joke",
|
||||||
|
state: "solid",
|
||||||
|
desc: "riddle me this, libshart, if theres liquid poop then wheres the solid piss?"
|
||||||
|
};
|
||||||
|
|
||||||
elements.marshmallow = {
|
elements.marshmallow = {
|
||||||
isFood: true,
|
isFood: true,
|
||||||
tempHigh: 50,
|
tempHigh: 50,
|
||||||
|
|
@ -330,6 +360,7 @@ elements.cereal = {
|
||||||
behavior: behaviors.STURDYPOWDER,
|
behavior: behaviors.STURDYPOWDER,
|
||||||
category: "food",
|
category: "food",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
|
stain: 0.005
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.sushi = {
|
elements.sushi = {
|
||||||
|
|
@ -355,6 +386,7 @@ elements.diamond_ore = {
|
||||||
elements.coca_cola = {
|
elements.coca_cola = {
|
||||||
isFood: true,
|
isFood: true,
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
|
tempLow: -10,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
color: "#381e13",
|
color: "#381e13",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
|
|
@ -365,6 +397,7 @@ elements.coca_cola = {
|
||||||
elements.pepsi = {
|
elements.pepsi = {
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
|
tempLow: -10,
|
||||||
color: "#2b1717",
|
color: "#2b1717",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
|
|
@ -374,6 +407,7 @@ elements.pepsi = {
|
||||||
elements.piss = {
|
elements.piss = {
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
|
tempLow: -10,
|
||||||
color: "#ffff00",
|
color: "#ffff00",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "joke",
|
category: "joke",
|
||||||
|
|
@ -405,17 +439,10 @@ elements.pastry = {
|
||||||
state: "solid",
|
state: "solid",
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.melted_meth = {
|
|
||||||
tempHigh: 100000,
|
|
||||||
stateHigh: "beans",
|
|
||||||
color: "#00a2ff",
|
|
||||||
behavior: behaviors.LIQUID,
|
|
||||||
category: "joke",
|
|
||||||
state: "solid",
|
|
||||||
};
|
|
||||||
|
|
||||||
elements.expired_milk = {
|
elements.spoiled_milk = {
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
|
tempLow: -20,
|
||||||
stateHigh: "ash",
|
stateHigh: "ash",
|
||||||
color: "#b8c2b4",
|
color: "#b8c2b4",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
|
|
@ -523,6 +550,8 @@ elements.mashed_pea = {
|
||||||
elements.burnt_beans = {
|
elements.burnt_beans = {
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
stateHigh: "ash",
|
stateHigh: "ash",
|
||||||
|
tempLow: -0,
|
||||||
|
stateLow: "beans",
|
||||||
isFood: true,
|
isFood: true,
|
||||||
viscosity: 10000,
|
viscosity: 10000,
|
||||||
density: 721,
|
density: 721,
|
||||||
|
|
@ -801,6 +830,7 @@ elements.barbecue_sauce = {
|
||||||
viscosity: 3000,
|
viscosity: 3000,
|
||||||
density: 1800,
|
density: 1800,
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
|
tempLow: 0,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
color: "#420400",
|
color: "#420400",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
|
|
@ -907,6 +937,7 @@ elements.porridge = {
|
||||||
viscosity: 3000,
|
viscosity: 3000,
|
||||||
density: 500,
|
density: 500,
|
||||||
tempHigh: 500,
|
tempHigh: 500,
|
||||||
|
tempLow: -10,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
color: "#b8a254",
|
color: "#b8a254",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
|
|
@ -938,7 +969,7 @@ elements.chocolate_grape = {
|
||||||
viscosity: 10000,
|
viscosity: 10000,
|
||||||
tempHigh: 300,
|
tempHigh: 300,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
color: ["#9e3475", "#6e4d36"],
|
color: ["#7e600d", "#6e4d36"],
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "food",
|
category: "food",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
|
|
@ -949,7 +980,7 @@ elements.sprinkles = {
|
||||||
stateHigh: "ash",
|
stateHigh: "ash",
|
||||||
cooldown: 0.2,
|
cooldown: 0.2,
|
||||||
color: ["#ff5e5e", "#ffea5e", "#73ff5e", "#5efcff", "#995eff", "#ff5ed1"],
|
color: ["#ff5e5e", "#ffea5e", "#73ff5e", "#5efcff", "#995eff", "#ff5ed1"],
|
||||||
behavior: behaviors.STURDYPOWDER,
|
behavior: behaviors.POWDER,
|
||||||
category: "powders",
|
category: "powders",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
maxSize: 1,
|
maxSize: 1,
|
||||||
|
|
@ -965,6 +996,7 @@ elements.incinerator = {
|
||||||
category: "machines",
|
category: "machines",
|
||||||
state: "solid",
|
state: "solid",
|
||||||
insulate: true,
|
insulate: true,
|
||||||
|
excludeRandom: true,
|
||||||
reactions: {
|
reactions: {
|
||||||
"fart": { elem1: null, elem2: "ohio" },
|
"fart": { elem1: null, elem2: "ohio" },
|
||||||
}
|
}
|
||||||
|
|
@ -1113,6 +1145,7 @@ elements.strawberry = {
|
||||||
elements.beer = {
|
elements.beer = {
|
||||||
tempHigh: 300,
|
tempHigh: 300,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
|
tempLow: -10,
|
||||||
color: "#b39329",
|
color: "#b39329",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
|
|
@ -1140,8 +1173,10 @@ elements.carrot = {
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.wine = {
|
elements.wine = {
|
||||||
|
hidden: true,
|
||||||
tempHigh: 400,
|
tempHigh: 400,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
|
tempLow: -10,
|
||||||
color: "#2e0206",
|
color: "#2e0206",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
|
|
@ -1173,6 +1208,7 @@ elements.dark_energy = {
|
||||||
],
|
],
|
||||||
category: "special",
|
category: "special",
|
||||||
state: "gas",
|
state: "gas",
|
||||||
|
excludeRandom: true
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.ohio = {
|
elements.ohio = {
|
||||||
|
|
@ -1189,6 +1225,7 @@ elements.ohio = {
|
||||||
category: "joke",
|
category: "joke",
|
||||||
state: "gas",
|
state: "gas",
|
||||||
desc: "use at own risk",
|
desc: "use at own risk",
|
||||||
|
excludeRandom: true
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.papaya = {
|
elements.papaya = {
|
||||||
|
|
@ -1279,6 +1316,9 @@ elements.heavy_water = {
|
||||||
behavior: behaviors.LIQUID_OLD,
|
behavior: behaviors.LIQUID_OLD,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
|
reactions: {
|
||||||
|
"sand": { elem1: null, elem2: "quicksand" },
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.blood_orange = {
|
elements.blood_orange = {
|
||||||
|
|
@ -1308,6 +1348,7 @@ elements.cranberry = {
|
||||||
hidden: true,
|
hidden: true,
|
||||||
tempHigh: 300,
|
tempHigh: 300,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
|
tempLow: -15,
|
||||||
color: "#ad2a1d",
|
color: "#ad2a1d",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "food",
|
category: "food",
|
||||||
|
|
@ -1441,6 +1482,7 @@ elements.uraniumaniumaniumaniumanium_popcornicecream_plutoniumeptunium_238239 =
|
||||||
elements.coffee_milk = {
|
elements.coffee_milk = {
|
||||||
tempHigh: 300,
|
tempHigh: 300,
|
||||||
stateHigh: "steam",
|
stateHigh: "steam",
|
||||||
|
tempLow: -30,
|
||||||
color: "#5c4c42",
|
color: "#5c4c42",
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
|
|
@ -1565,6 +1607,7 @@ elements.electron = {
|
||||||
};
|
};
|
||||||
|
|
||||||
elements.sned = {
|
elements.sned = {
|
||||||
|
desc: "slowly expanding...",
|
||||||
color: "#dfe0d9",
|
color: "#dfe0d9",
|
||||||
behavior: [
|
behavior: [
|
||||||
"XX|XX AND CR:sned%1|XX",
|
"XX|XX AND CR:sned%1|XX",
|
||||||
|
|
@ -1580,7 +1623,7 @@ elements.uranium_tea = {
|
||||||
temp: 60,
|
temp: 60,
|
||||||
tempHigh: 400,
|
tempHigh: 400,
|
||||||
stateHigh: "molten_uranium",
|
stateHigh: "molten_uranium",
|
||||||
color: ["#0f8b15", "#316624", "#59864b", "#502e0f"],
|
color: ["#526306", "#40530c", "#80320e", "#502e0f"],
|
||||||
behavior: behaviors.RADLIQUID,
|
behavior: behaviors.RADLIQUID,
|
||||||
category: "liquids",
|
category: "liquids",
|
||||||
state: "liquid"
|
state: "liquid"
|
||||||
|
|
@ -1598,19 +1641,19 @@ elements.powerlaser = {
|
||||||
if (Math.random() > 0.05) { continue }
|
if (Math.random() > 0.05) { continue }
|
||||||
createPixel("flash", x, y);
|
createPixel("flash", x, y);
|
||||||
pixelMap[x][y].color = "#b80ced";
|
pixelMap[x][y].color = "#b80ced";
|
||||||
pixelMap[x][y].temp = 1001000;
|
pixelMap[x][y].temp = 11000;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (elements[pixelMap[x][y].element].isGas) { continue }
|
if (elements[pixelMap[x][y].element].isGas) { continue }
|
||||||
if (elements[pixelMap[x][y].element].id === elements.heat_ray.id) { break }
|
if (elements[pixelMap[x][y].element].id === elements.heat_ray.id) { break }
|
||||||
pixelMap[x][y].temp += 901000;
|
pixelMap[x][y].temp += 9000;
|
||||||
pixelTempCheck(pixelMap[x][y]);
|
pixelTempCheck(pixelMap[x][y]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deletePixel(pixel.x, pixel.y);
|
deletePixel(pixel.x, pixel.y);
|
||||||
},
|
},
|
||||||
temp: 1000000,
|
temp: 10000,
|
||||||
category: "energy",
|
category: "energy",
|
||||||
state: "gas",
|
state: "gas",
|
||||||
excludeRandom: true,
|
excludeRandom: true,
|
||||||
|
|
@ -1629,6 +1672,70 @@ elements.magma_bomb = {
|
||||||
state: "liquid"
|
state: "liquid"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
elements.quicksand = {
|
||||||
|
viscosity: 10000,
|
||||||
|
tempHigh: 1000,
|
||||||
|
stateHigh: ["molten_glass", "molten_glass", "molten_glass", "molten_glass", "steam"],
|
||||||
|
color: ["#b1873a", "#cea250"],
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
category: "land",
|
||||||
|
state: "liquid",
|
||||||
|
density: 1400,
|
||||||
|
stain: 0.02
|
||||||
|
};
|
||||||
|
|
||||||
|
elements.liquid_filler = {
|
||||||
|
color: "#ae00ff",
|
||||||
|
behavior: [
|
||||||
|
"XX|XX AND CR:liquid_filler%50|XX",
|
||||||
|
"M2 AND CR:liquid_filler%50|XX|M2 AND CR:liquid_filler%50",
|
||||||
|
"M1|M1 AND CH:liquid_filler%50|M1",
|
||||||
|
],
|
||||||
|
category: "special",
|
||||||
|
state: "liquid"
|
||||||
|
};
|
||||||
|
|
||||||
|
elements.antimony = {
|
||||||
|
color: ["#4b90b8", "#a3bfd8", "#89a0b6", "#8798a7", "#738092"],
|
||||||
|
behavior: behaviors.WALL,
|
||||||
|
category: "solids",
|
||||||
|
state: "solid",
|
||||||
|
density: 6697,
|
||||||
|
tempHigh: 630,
|
||||||
|
stateHigh: "melted_antimony",
|
||||||
|
alias: "...sb?!"
|
||||||
|
};
|
||||||
|
|
||||||
|
elements.melted_antimony = {
|
||||||
|
color: ["#8fb2c7", "#7494b1", "#72a1cc", "#a3aaaf", "#a4aab3"],
|
||||||
|
behavior: behaviors.LIQUID,
|
||||||
|
category: "liquids",
|
||||||
|
state: "liquid",
|
||||||
|
density: 6697,
|
||||||
|
stain: 0.1,
|
||||||
|
tempLow: -270,
|
||||||
|
stateLowName: "antimony_ice"
|
||||||
|
};
|
||||||
|
|
||||||
|
elements.unstain = {
|
||||||
|
color: "#729fff",
|
||||||
|
behavior: [
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|XX|XX",
|
||||||
|
"XX|XX|XX"
|
||||||
|
],
|
||||||
|
stain: -1,
|
||||||
|
tool: (pixel) => {
|
||||||
|
doStaining({
|
||||||
|
element: "unstain",
|
||||||
|
x: pixel.x,
|
||||||
|
y: pixel.y
|
||||||
|
})
|
||||||
|
},
|
||||||
|
category: "tools",
|
||||||
|
state: "solid",
|
||||||
|
};
|
||||||
|
|
||||||
elements.incinerate.category = "tools",
|
elements.incinerate.category = "tools",
|
||||||
elements.cook.category = "tools",
|
elements.cook.category = "tools",
|
||||||
elements.room_temp.category = "tools",
|
elements.room_temp.category = "tools",
|
||||||
|
|
@ -1663,6 +1770,9 @@ elements.potato.reactions.steam = {elem1: "fries", tempMin: 100, chance:50}
|
||||||
if (!elements.water.reactions) elements.water.reactions = {};
|
if (!elements.water.reactions) elements.water.reactions = {};
|
||||||
elements.water.reactions.cocaine = { elem1: "solid_water", elem2: null }
|
elements.water.reactions.cocaine = { elem1: "solid_water", elem2: null }
|
||||||
|
|
||||||
|
if (!elements.alcohol.reactions) elements.alcohol.reactions = {};
|
||||||
|
elements.alcohol.reactions.juice = {elem1:"wine", elem2:null, chance:5}
|
||||||
|
|
||||||
if (!elements.paper.reactions) elements.paper.reactions = {};
|
if (!elements.paper.reactions) elements.paper.reactions = {};
|
||||||
elements.paper.reactions.bless = { elem1: "robux", elem2: null, chance: 0.0000001 }
|
elements.paper.reactions.bless = { elem1: "robux", elem2: null, chance: 0.0000001 }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1 @@
|
||||||
for (var element in elements) {
|
window.addEventListener('load', function() {for (var element in elements) {elements[element].singleColor = true;}});
|
||||||
elements[element].singleColor = true;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue