diff --git a/mod-list.html b/mod-list.html
index 8ad490b1..c06bbae9 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -171,6 +171,7 @@
| nellfire.js | Adds a weird transforming flame and several rock types | Alice |
| Neutronium Mod.js | Variety of scientific elements Explosions | StellarX20 |
| neutronium_compressor.js | Adds a compressor (in reference to Minecraft’s Avaritia mod) that compresses 10,000 pixels of an element into a “singularity” | Alice |
+| noblegas.js | Adds the missing noble gases | nousernamefound |
| random_rocks.js | Randomly generates rocks on game load | Alice |
| roseyiede.js | Adds several variants of a substance called roseyiede | Alice |
| some_tf_liquids.js | Adds various liquids from the Thermal Foundation Minecraft mod | Alice |
@@ -242,6 +243,7 @@
| all_around_fillers.js | Adds directional Filler variants | idk73248 |
| allliquids.js | Made all elements liquids | Alex |
| amogus.js | Adds a small amogus structure | Alice |
+| collab_mod.js | Created by multiple people, adds random things | mrapple, ilikepizza, stefanblox |
| elem3.js | Adds all elements and combinations from Elemental 3 [Very Large] | Sophie |
| funny elements 2022-11-15.js | Adds a few curated randomly-generated elements | Alice |
| funny_liquid_2.js | Adds urine | Alice |
@@ -277,6 +279,7 @@
| Technical Libraries & Tests |
| a_bundle_of_tests.js | Several test functions | Alice |
+| all_stain.js | Makes every element stain solids | stefanblox |
| betterMenuScreens.js | Library for mods to create their own menus | ggod |
| changePixelDebug.js | Makes the changePixel() function abort and log to console when it tries to change to a non-existent element | Alice |
| changeTempReactionParameter.js | Adds the changeTemp property to modded reactions | Alice |
diff --git a/mods/aChefsDream.js b/mods/aChefsDream.js
index e026916d..800c9e8a 100644
--- a/mods/aChefsDream.js
+++ b/mods/aChefsDream.js
@@ -2,7 +2,7 @@
Created by SquareScreamYT and RealerRaddler
Thanks to Alice, nousernamefound and Fioushemastor for helping :)
-v1.3.2
+v1.4
Changelog (v1.0)
- added chickens
@@ -170,6 +170,28 @@ Changelog (v1.3.2)
- added turnips
- added turnip seeds and leaves
- added turnip juice
+
+
+
+Changelog (v1.4)
+ - added baking powder
+ - added corn starch
+ - added maple syrup
+ - added pancakes
+ - added pancake mix
+ - added pancake batter
+ - added normal pancakes
+ - added crispy pancakes
+ - added burnt pancakes
+ - added strawberries
+ - added strawberries
+ - added strawberry seeds, stem, and leaves
+ - added strawberry juice
+ - added whipped cream
+ - chicken eggs no longer hatch under 20 degrees
+ - added ginger
+ - added ginger juice
+ - added ginger rhizomes, pseudostems and leaves
*/
/*
@@ -262,16 +284,22 @@ elements.chicken_egg = {
color: ["#e0d3ab","#d9cdb5"],
behavior: [
"XX|XX|XX",
- "XX|FX%5 AND CH:chick%0.1|XX",
+ "XX|FX%5|XX",
"M2%30|M1|M2%30",
],
+ tick: function(pixel) {
+ if (Math.random() < 0.1 && pixel.temp > 20) {
+ changePixel(pixel,"chick")
+ }
+ doDefaults(pixel);
+ },
category: "food",
state: "solid",
- temp: 30,
+ temp: 20,
tempLow: -18,
stateLow: "frozen_chicken_egg",
breakInto: ["yolk"],
- tempHigh: 500,
+ tempHigh: 400,
stateHigh: ["calcium", "ash"],
burn:50,
burnTime:450,
@@ -1700,7 +1728,7 @@ elements.grape = {
stateHigh: ["steam","sugar"],
category: "food",
state: "solid",
- density: 1154,
+ density: 825,
breakInto: "grape_juice",
ignoreAir: true,
isFood: true
@@ -2013,7 +2041,6 @@ elements.coconut_milk = {
reactions: {
"melted_chocolate": { elem1:"chocolate_milk", elem2:null },
"chocolate": { elem1:"chocolate_milk", elem2:"melted_chocolate", chance:0.05 },
- "coffee_ground": { elem1:"chocolate_milk", chance:0.05 },
"juice": { elem1:"fruit_milk", elem2:null, chance:0.05 },
"soda": { elem1:"pilk", elem2:null, chance:0.1 },
"yolk": { elem1:"eggnog", elem2:null, chance:0.1 },
@@ -2529,7 +2556,7 @@ elements.turnip_leaves = {
}
elements.turnip = {
color: ["#945bb3","#a05cbd","#a053b8","#b364c4"],
- behavior: behaviors.STURDYPOWDER,
+ behavior: behaviors.POWDER,
category:"food",
tempHigh: 100,
stateHigh: ["steam"],
@@ -2557,3 +2584,567 @@ elements.turnip_juice = {
hidden: true,
temp: 30,
};
+
+elements.corn = {
+ color: ["#f8d223","#d6ba2a","#f7f5ba","#dbd281","#cdb12d"],
+ tick: function(pixel) {
+ if (pixel.temp >= 180) {
+ changePixel(pixel,"popcorn");
+ if (isEmpty(pixel.x,pixel.y-1)) {
+ tryMove(pixel,pixel.x,pixel.y-1);
+ if (isEmpty(pixel.x-1,pixel.y)) { createPixel("pop",pixel.x-1,pixel.y) }
+ if (isEmpty(pixel.x+1,pixel.y)) { createPixel("pop",pixel.x+1,pixel.y) }
+ if (isEmpty(pixel.x,pixel.y-1)) { createPixel("pop",pixel.x,pixel.y-1) }
+ if (isEmpty(pixel.x,pixel.y+1)) { createPixel("pop",pixel.x,pixel.y+1) }
+ }
+ }
+ doDefaults(pixel)
+ },
+ category: "food",
+ burn: 10,
+ burnTime: 200,
+ breakInto: "corn_starch",
+ breakIntoColor: ["#ffe9a8","#ffecb3","#ffe28a"],
+ state: "solid",
+ density: 721,
+ seed: "corn_seed",
+ isFood: true,
+ movable: false,
+}
+
+elements.corn_starch = {
+ color: ["#fcf2e1","#f2e7d3","#fcf3de"],
+ behavior: behaviors.POWDER,
+ reactions: {
+ "water": { elem1: "dough", elem2: null },
+ "salt_water": { elem1: "dough", elem2: null },
+ "sugar_water": { elem1: "dough", elem2: null },
+ "seltzer": { elem1: "dough", elem2: null },
+ "pool_water": { elem1: "dough", elem2: null },
+ "juice": { elem1: "dough", elem2: null },
+ "yolk": { elem1: "batter", elem2: null },
+ "yogurt": { elem1: "batter", elem2: null },
+ "honey": { elem1:"gingerbread", elem2:null },
+ "molasses": { elem1:"gingerbread", elem2:null },
+ "sap": { elem1:"gingerbread", elem2:null },
+ "caramel": { elem1:"gingerbread", elem2:null },
+ "broth": { elem1:"dough", elem2:null },
+ "soda": { elem1:"dough", elem2:null },
+ "tea": { elem1:"dough", elem2:null },
+ "blood": { elem1:"dough", elem2:null },
+ "infection": { elem1:"dough", elem2:null },
+ "antibody": { elem1:"dough", elem2:null },
+ "milk": { elem1:"dough", elem2:null },
+ "cream": { elem1:"dough", elem2:null },
+ "melted_butter": { elem1:"sauce", elem2:null, color1:"#DF8D32" },
+ },
+ category: "food",
+ tempHigh: 400,
+ stateHigh: "fire",
+ burn:40,
+ burnTime:25,
+ state: "solid",
+ density: 600,
+ isFood: true
+}
+
+elements.baking_powder = {
+ color: "#fffaf0",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ burn: 40,
+ tempHigh: 400,
+ stateHigh: ["salt","carbon_dioxide"],
+ burnTime: 25,
+ density: 600,
+ isFood: true,
+ reactions: {
+ "flour": { elem1: "pancake_mix", elem2: null, color1: "#e8b77b"},
+ },
+};
+
+if (!elements.baking_soda.reactions) elements.baking_soda.reactions = {};
+elements.baking_soda.reactions.neutral_acid = { elem1: "baking_powder", elem2: null }
+
+elements.pancake_mix = {
+ color: ["#f2e9c7","#f7ebbe"],
+ behavior: behaviors.POWDER,
+ reactions: {
+ "water": { elem1: "pancake_batter", elem2: null },
+ },
+ category: "food",
+ tempHigh: 400,
+ stateHigh: "fire",
+ burn:40,
+ burnTime:25,
+ state: "solid",
+ density: 600,
+ isFood: true
+},
+
+elements.pancake_batter = {
+ color: "#e6da9e",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ tempHigh: 70,
+ stateHigh: "pancake",
+ stateHighColorMultiplier: 0.9,
+ burn:40,
+ burnTime:25,
+ burnInto:"ash",
+ state: "liquid",
+ viscosity: 10000,
+ density: 1001,
+ hidden: true,
+ isFood: true
+}
+elements.sap = {
+ color: ["#b67f18","#c86305","#cf7a19","#e4ae3a"],
+ behavior: behaviors.LIQUID,
+ reactions: {
+ "dead_bug": { elem1:"amber", elem2:null, chance:0.1 },
+ "ant": { elem1:"amber", elem2:null, chance:0.1 },
+ "fly": { elem1:"amber", elem2:null, chance:0.1 },
+ "flea": { elem1:"amber", elem2:null, chance:0.1 },
+ "termite": { elem1:"amber", elem2:null, chance:0.1 },
+ "worm": { elem1:"amber", elem2:null, chance:0.1 },
+ "bee": { elem1:"amber", elem2:null, chance:0.1 },
+ "firefly": { elem1:"amber", elem2:null, chance:0.1 },
+ "stinkbug": { elem1:"amber", elem2:null, chance:0.1 },
+ "slug": { elem1:"amber", elem2:null, chance:0.1 },
+ "snail": { elem1:"amber", elem2:null, chance:0.1 },
+ },
+ tempHigh: 104,
+ stateHigh: ["maple_syrup","maple_syrup","maple_syrup","sap"],
+ tempLow: 0,
+ stateLowName: "amber",
+ category:"liquids",
+ state: "liquid",
+ viscosity: 15,
+ density: 1400
+}
+elements.maple_syrup = {
+ color: ["#fabb34","#facc34","#fabb34"],
+ behavior: behaviors.LIQUID,
+ tempHigh: 170,
+ stateHigh: ["sugar","smoke","smoke"],
+ tempLow: 0,
+ category:"liquids",
+ state: "liquid",
+ viscosity: 15,
+ hidden: true,
+ density: 1400
+}
+elements.pancake = {
+ color: "#e0d080",
+ behavior: behaviors.STURDYPOWDER,
+ tempHigh: 95,
+ stateHigh: "crispy_pancake",
+ category: "food",
+ burn: 10,
+ burnTime: 400,
+ burnInto: ["smoke","smoke","smoke","ash"],
+ breakInto: "crumb",
+ state: "solid",
+ density: 233.96,
+ hidden: true,
+ isFood: true
+}
+elements.crispy_pancake = {
+ color: "#c7a34a",
+ behavior: behaviors.STURDYPOWDER,
+ tempHigh: 150,
+ stateHigh: "burnt_pancake",
+ category: "food",
+ burn: 10,
+ burnTime: 400,
+ burnInto: ["smoke","smoke","smoke","ash"],
+ breakInto: "crumb",
+ state: "solid",
+ density: 233.96,
+ hidden: true,
+ isFood: true
+}
+elements.burnt_pancake = {
+ color: "#332709",
+ behavior: behaviors.STURDYPOWDER,
+ tempHigh: 550,
+ stateHigh: "ash",
+ category: "food",
+ burn: 10,
+ burnTime: 400,
+ burnInto: ["smoke","smoke","smoke","ash"],
+ breakInto: "crumb",
+ state: "solid",
+ density: 233.96,
+ hidden: true,
+ isFood: true
+}
+elements.strawberry_seed = {
+ color: "#7a7133",
+ behavior: behaviors.STURDYPOWDER,
+ 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 },
+ "mercury": { elem1:"dead_plant", elem2:null, chance:0.01 },
+ "stench": { elem2:null, chance:0.25 },
+ },
+ tick: function(pixel) {
+ if (isEmpty(pixel.x,pixel.y+1)) {
+ movePixel(pixel,pixel.x,pixel.y+1);
+ }
+ else {
+ if (Math.random() < 0.02 && 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(pixel,"strawberry_stem");
+ }
+ }
+ }
+ pixel.age++;
+ }
+ doDefaults(pixel);
+ },
+ category:"life",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -1.66,
+ stateLow: "frozen_plant",
+ burn:15,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "dead_plant",
+ state: "solid",
+ density: 1050,
+ cooldown: defaultCooldown
+}
+elements.strawberry_stem = {
+ color: "#419c2f",
+ behavior: [
+ "CR:strawberry_stem,strawberry_leaves,strawberry_leaves,strawberry_leaves,strawberry_leaves%3|CR:strawberry_stem,strawberry_leaves,strawberry_leaves,strawberry_leaves,strawberry_leaves%3|CR:strawberry_stem,strawberry_leaves,strawberry_leaves,strawberry_leaves,strawberry_leaves%3",
+ "CR:strawberry_stem,strawberry_leaves,strawberry_leaves,strawberry_leaves,strawberry_leaves%3|XX|CR:strawberry_stem,strawberry_leaves,strawberry_leaves,strawberry_leaves,strawberry_leaves%3",
+ "XX|M1|XX",
+ ],
+ 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");
+ }
+ }
+ }
+ pixel.age++;
+ }
+ doDefaults(pixel);
+ },
+ 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 },
+ "mercury": { elem1:"dead_plant", elem2:null, chance:0.01 },
+ "stench": { elem2:null, chance:0.25 },
+ },
+ properties: {
+ "age":0
+ },
+ category:"life",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -1.66,
+ stateLow: "frozen_plant",
+ burn:15,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "dead_plant",
+ state: "solid",
+ density: 1050,
+}
+elements.strawberry_leaves = {
+ color: "#4bad37",
+ behavior: [
+ "XX|CR:strawberry%2|XX",
+ "CR:strawberry%2|XX|CR:strawberry%2",
+ "M2|M1|M2",
+ ],
+ 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 },
+ "mercury": { elem1:"dead_plant", elem2:null, chance:0.01 },
+ "stench": { elem2:null, chance:0.25 },
+ },
+ category:"life",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -1.66,
+ stateLow: "frozen_plant",
+ burn:15,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "dead_plant",
+ state: "solid",
+ density: 1050
+}
+elements.strawberry = {
+ color: "#f04b3c",
+ behavior: [
+ "XX|ST:strawberry_stem,strawberry_leaves|XX",
+ "ST:strawberry_stem,strawberry_leaves|XX|ST:strawberry_stem,strawberry_leaves",
+ "M2|M1|M2",
+ ],
+ 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 },
+ "mercury": { elem1:"dead_plant", elem2:null, chance:0.01 },
+ "stench": { elem2:null, chance:0.25 },
+ },
+ category:"food",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ burn:15,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "strawberry_juice",
+ state: "solid",
+ density: 1050
+}
+elements.strawberry_juice = {
+ color: "#e03a3a",
+ 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,
+ tempLow: 0
+};
+
+elements.cream = {
+ color: "#f7f7f7",
+ behavior: behaviors.LIQUID,
+ onMix: function(cream1, cream2) {
+ if ((shiftDown && Math.random() < 0.01) || (elements[cream2.element].id === elements.cream.id && Math.random() < 0.1)) {
+ changePixel(cream1,"whipped_cream")
+ }
+ },
+ reactions: {
+ "dirt": { elem1: null, elem2: "mud" },
+ "sand": { elem1: null, elem2: "wet_sand" },
+ "clay_soil": { elem1: null, elem2: "clay" },
+ "melted_chocolate": { color1:"#664934", elem2:null },
+ "chocolate": { color1:"#664934", elem2:"melted_chocolate", chance:0.05 },
+ "juice": { elem1:"fruit_milk", elem2:null, chance:0.05 },
+ "soda": { elem1:"pilk", elem2:null, chance:0.1 },
+ "yolk": { elem1:"#eggnog", elem2:null, chance:0.1 },
+ "caramel": { color1:"#C8B39A", chance:0.05 },
+ "sugar": { elem2:null, chance:0.005},
+ },
+ viscosity: 1.5,
+ tempHigh: 1000,
+ stateHigh: ["smoke","smoke","smoke","steam","steam","calcium"],
+ tempLow: 0,
+ stateLow: "ice_cream",
+ stateLowColorMultiplier: 0.97,
+ category: "liquids",
+ hidden: true,
+ isFood: true,
+ state: "liquid",
+ density: 959.97,
+}
+elements.whipped_cream = {
+ color: "#fafafa",
+ behavior: behaviors.LIQUID,
+ reactions: {
+ "dirt": { elem1: null, elem2: "mud" },
+ "sand": { elem1: null, elem2: "wet_sand" },
+ "clay_soil": { elem1: null, elem2: "clay" },
+ "melted_chocolate": { color1:"#664934", elem2:null },
+ "chocolate": { color1:"#664934", elem2:"melted_chocolate", chance:0.05 },
+ "juice": { elem1:"fruit_milk", elem2:null, chance:0.05 },
+ "soda": { elem1:"pilk", elem2:null, chance:0.1 },
+ "yolk": { elem1:"#eggnog", elem2:null, chance:0.1 },
+ "caramel": { color1:"#C8B39A", chance:0.05 },
+ "sugar": { elem2:null, chance:0.005},
+ },
+ viscosity: 1.5,
+ tempHigh: 1000,
+ stateHigh: ["smoke","smoke","smoke","steam","steam","calcium"],
+ tempLow: 0,
+ stateLow: "ice_cream",
+ stateLowColorMultiplier: 0.97,
+ category: "food",
+ hidden: true,
+ isFood: true,
+ state: "liquid",
+ density: 959.97,
+ viscosity: 2500000
+}
+
+elements.ginger = {
+ color: ["#b88f30","#d6a73a"],
+ behavior: [
+ "XX|XX|XX",
+ "XX|XX|XX",
+ "M2 AND CH:dirt,mud,sand,wet_sand,clay_soil,clay,mycelium,grass,color_sand>ginger,fiber%0.5|M1 AND CH:dirt,mud,sand,wet_sand,clay_soil,clay,mycelium,grass,color_sand>ginger,fiber,fiber%0.5|M2 AND CH:dirt,mud,sand,wet_sand,clay_soil,clay,mycelium,grass,color_sand>ginger,fiber%0.5",
+ ],
+ reactions: {
+ "flour": { elem1:"gingerbread", elem2:null },
+ "bread": { elem1:"gingerbread", elem2:null },
+ },
+ tempHigh: 275,
+ stateHigh: "dirt",
+ tempLow: -50,
+ stateLow: "fiber",
+ burn: 20,
+ burnTime: 60,
+ burnInto: "dirt",
+ breakInto: "ginger_juice",
+ category: "food",
+ state: "solid",
+ density: 1250,
+ conduct: 0.1,
+ hidden: true
+}
+
+elements.ginger_rhizome = {
+ color: "#c7ad58",
+ 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,"ginger");
+ }
+ }
+ if (isEmpty(pixel.x,pixel.y-1)) {
+ movePixel(pixel,pixel.x,pixel.y-1);
+ createPixel("ginger_pseudostem",pixel.x,pixel.y+1);
+ }
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() < 0.2) {
+ createPixel("ginger_leaves",pixel.x+1,pixel.y);
+ }
+ if (isEmpty(pixel.x-1,pixel.y) && Math.random() < 0.2) {
+ createPixel("ginger_leaves",pixel.x-1,pixel.y);
+ }
+ }
+ else if (pixel.age > 250) {
+ changePixel(pixel,"ginger_leaves");
+ }
+ 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,
+ breakInto: "ginger_juice",
+ cooldown: defaultCooldown,
+ seed: true,
+ behavior: [
+ "XX|XX|XX",
+ "XX|FX%10|XX",
+ "XX|M1|XX",
+ ],
+ reactions: {
+ "flour": { elem1:"gingerbread", elem2:null },
+ "bread": { elem1:"gingerbread", elem2:null },
+ },
+};
+
+elements.ginger_pseudostem = {
+ color: "#69a82d",
+ behavior: behaviors.STURDYPOWDER,
+ 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 },
+ "mercury": { elem1:"dead_plant", elem2:null, chance:0.01 },
+ "stench": { elem2:null, chance:0.25 },
+ },
+ category:"life",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -1.66,
+ stateLow: "frozen_plant",
+ burn:15,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "dead_plant",
+ state: "solid",
+ density: 1050
+}
+elements.ginger_leaves = {
+ color: "#52bd31",
+ behavior: behaviors.WALL,
+ 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 },
+ "mercury": { elem1:"dead_plant", elem2:null, chance:0.01 },
+ "stench": { elem2:null, chance:0.25 },
+ "carbon_dioxide": { elem2:"oxygen", chance:0.25 },
+ },
+ category:"life",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -1.66,
+ stateLow: "frozen_plant",
+ burn:15,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "dead_plant",
+ state: "solid",
+ density: 1050
+}
+elements.ginger_juice = {
+ color: "#ccc056",
+ 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,
+ tempLow: 0,
+ reactions: {
+ "flour": { elem1:"gingerbread", elem2:null },
+ "bread": { elem1:"gingerbread", elem2:null },
+ },
+};
diff --git a/mods/a_mod_by_alice.js b/mods/a_mod_by_alice.js
index bc37daca..9a880696 100644
--- a/mods/a_mod_by_alice.js
+++ b/mods/a_mod_by_alice.js
@@ -4177,7 +4177,6 @@ color1 and color2 spread through striped paint like dye does with itself. col
return
})
};
-
doDefaults(pixel);
},
temp:6000,
@@ -4195,6 +4194,39 @@ color1 and color2 spread through striped paint like dye does with itself. col
ignoreAir: true
};
+ elements.holy_bomb = {
+ color: ["#dbb260", "#94591e"],
+ tick: function(pixel) {
+ if(!isEmpty(pixel.x,pixel.y-1,true)) { //[0][1] EX (ignore bounds)
+ var newPixel = pixelMap[pixel.x][pixel.y-1];
+ var newElement = newPixel.element;
+ var newInfo = elements[newElement];
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
+ explodeAtPlus(pixel.x,pixel.y,13,"holy_fire","plasma",null,firebombFire);
+ };
+ };
+ if(!isEmpty(pixel.x,pixel.y+1,true)) { //[2][1] EX (don't ignore bounds, non-bound case)
+ var newPixel = pixelMap[pixel.x][pixel.y+1];
+ var newElement = newPixel.element;
+ var newInfo = elements[newElement];
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
+ explodeAtPlus(pixel.x,pixel.y,13,"holy_fire","plasma",null,firebombFire);
+ };
+ };
+ if(outOfBounds(pixel.x,pixel.y+1)) { //[2][1] EX (don't ignore bounds, bound case)
+ explodeAtPlus(pixel.x,pixel.y,13,"holy_fire","plasma",null,firebombFire);
+ };
+ if(!tryMove(pixel,pixel.x,pixel.y+1)) { //behaviors.POWDER
+ Math.random() < 0.5 ? tryMove(pixel,pixel.x-1,pixel.y+1) : tryMove(pixel,pixel.x+1,pixel.y+1);
+ };
+ },
+ category: "weapons",
+ state: "solid",
+ density: 4000,
+ excludeRandom: true,
+ desc: "A bomb that burns the world to pure ash.
To enable automatic bomb generation, set the generateBombs query parameter.",
+ };
+
elements.bless.ignore ??= [];
elements.bless.ignore.push("holy_fire");
@@ -4288,6 +4320,39 @@ color1 and color2 spread through striped paint like dye does with itself. col
ignoreAir: true
};
+ elements.god_slayer_bomb = {
+ color: ["#a43dcc", "#49b6d1"],
+ tick: function(pixel) {
+ if(!isEmpty(pixel.x,pixel.y-1,true)) { //[0][1] EX (ignore bounds)
+ var newPixel = pixelMap[pixel.x][pixel.y-1];
+ var newElement = newPixel.element;
+ var newInfo = elements[newElement];
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
+ explodeAtPlus(pixel.x,pixel.y,40,"god_slayer_fire","plasma");
+ };
+ };
+ if(!isEmpty(pixel.x,pixel.y+1,true)) { //[2][1] EX (don't ignore bounds, non-bound case)
+ var newPixel = pixelMap[pixel.x][pixel.y+1];
+ var newElement = newPixel.element;
+ var newInfo = elements[newElement];
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
+ explodeAtPlus(pixel.x,pixel.y,40,"god_slayer_fire","plasma");
+ };
+ };
+ if(outOfBounds(pixel.x,pixel.y+1)) { //[2][1] EX (don't ignore bounds, bound case)
+ explodeAtPlus(pixel.x,pixel.y,40,"god_slayer_fire","plasma");
+ };
+ if(!tryMove(pixel,pixel.x,pixel.y+1)) { //behaviors.POWDER
+ Math.random() < 0.5 ? tryMove(pixel,pixel.x-1,pixel.y+1) : tryMove(pixel,pixel.x+1,pixel.y+1);
+ };
+ },
+ category: "weapons",
+ state: "solid",
+ density: 4500,
+ excludeRandom: true,
+ desc: "A bomb that makes gods tremble.
To enable automatic bomb generation, set the generateBombs query parameter.",
+ };
+
elements.cloner.burnTime = Infinity;
elements.cloner.burnInto = "cloner";
@@ -28481,6 +28546,7 @@ Make sure to save your command in a file if you want to add this preset again.`
})
});
lightlikes = ["light","flash","laser","radiation","insulate_flash"];
+ firelikes = ["fire","plasma","smoke","stellar_plasma","liquid_plasma","liquid_stellar_plasma"];
grbBreakIntos = Object.keys(elements).filter(function(elemName) {
var to = typeof(elements[elemName]);
if(to == "undefined") {
@@ -28661,6 +28727,75 @@ Make sure to save your command in a file if you want to add this preset again.`
noMix: true
};
+ elements.melt_ray = {
+ color: ["#ffbf7f","#ffffbf"],
+ tick: function(pixel) {
+ var x = pixel.x;
+ for (var y = pixel.y; y < height; y++) {
+ if (outOfBounds(x, y)) {
+ break;
+ }
+ if (isEmpty(x, y)) {
+ if (Math.random() > 0.02) { continue }
+ createPixel("insulate_flash", x, y);
+ pixelMap[x][y].color = "#e1f8fc";
+ }
+ else {
+ var otherPixel = pixelMap[x][y];
+ var otherInfo = elements[otherPixel.element];
+ //Gas: Heat, always penetrate
+ if (otherInfo.isGas) {
+ if(Math.random() < 0.05 && otherInfo.stateLow) {
+ meltPixel(otherPixel)
+ };
+ if(elements[otherPixel.element].isSun) {
+ otherPixel.temp += 0.5;
+ } else {
+ otherPixel.temp += 50;
+ };
+ continue;
+ };
+
+ //Self: Break
+ if (otherInfo.id === elements.melt_ray.id) { break }
+
+ //Non-gas, Melt chance, heat more, half penetrate
+ if(Math.random() < 0.05 && !otherInfo.isGas) {
+ meltPixel(otherPixel)
+ };
+ pixelMap[x][y].temp += 200;
+
+ if(Math.random() < 0.05) {
+
+ if(!isEmpty(x,y-1,false)) {
+ if(pixelMap[x]?.[y-1]?.element && lightlikes.includes(pixelMap[x][y-1].element)) {
+ deletePixel(x,y-1);
+ };
+ };
+ var newPlasma = tryCreatePixelReturn("liquid_plasma",x,y-1);
+ if(newPlasma) { newPlasma.temp += 500 };
+ };
+
+ //Penetrate snow and ice
+ if(firelikes && firelikes.includes(otherPixel.element)) {
+ continue;
+ };
+
+ if(Math.random() < 0.7) { //thanks, I hate random continue
+ continue;
+ };
+ break;
+ }
+ }
+ deletePixel(pixel.x, pixel.y);
+ },
+ temp: 4000,
+ category: "energy",
+ state: "gas",
+ excludeRandom: true,
+ noMix: true
+ };
+
elements.smash_ray = {
color: ["#ff9999", "#8c8279"],
tick: function(pixel) {
diff --git a/mods/alchemy.js b/mods/alchemy.js
index f0a61288..31a69de7 100644
--- a/mods/alchemy.js
+++ b/mods/alchemy.js
@@ -1,11 +1,30 @@
-// Warning: This mod will remove all of your previously unlocked elements.
+// unhide oxygen (air), dirt (earth), fire, and water
+if (!settings.alchemyUnlocked) {
+ settings.alchemyUnlocked = {
+ "oxygen": true,
+ "dirt": true,
+ "fire": true,
+ "water": true,
+ };
+}
+if (settings.unlocked.alchemymod) {
+ for (var element in settings.unlocked) {
+ if (settings.unlocked[element]) {
+ settings.alchemyUnlocked[element] = true
+ }
+ }
+}
// loop through the elements object
if (elements.explosion) {
elements.explosion.category = "tools";
}
for (var element in elements) {
- if (elements[element].category !== "tools") {
+ if (settings.alchemyUnlocked[element]) {
+ elements[element].hidden = false;
+ if (elements[element].category !== "tools") { elements[element].category = "alchemy mod"; }
+ }
+ else if (elements[element].category !== "tools") {
// give the element the hidden attribute true
elements[element].hidden = true;
// set its category to "alchemy mod"
@@ -16,13 +35,35 @@ for (var element in elements) {
// set the unhide setting to Unlock as Discovered (2)
settings.unhide = 2;
-// unhide oxygen (air), dirt (earth), fire, and water
-if (!settings.unlocked.alchemymod) {
- settings.unlocked = {
- "oxygen": true,
- "dirt": true,
- "fire": true,
- "water": true,
- "alchemymod": true,
- };
-}
\ No newline at end of file
+runAfterLoad(function(){
+ checkUnlock = function(element) {
+ if (elements[element] && elements[element].hidden && !settings.alchemyUnlocked[element]) {
+ settings.alchemyUnlocked[element] = true;
+ if (settings.unhide === 2) {
+ createElementButton(element)
+ var categoryButton = document.querySelector(".categoryButton[current='true']");
+ var currentCategory = categoryButton.getAttribute("category");
+ if (currentCategory !== elements[element].category) {
+ document.getElementById("categoryButton-"+elements[element].category).classList.add("notify");
+ }
+ // add notify to the elementButton of the element
+ document.getElementById("elementButton-"+element).classList.add("notify");
+ }
+ saveSettings();
+ }
+ }
+})
+runAfterAutogen(function(){
+ for (var element in elements) {
+ if (elements[element].category === "states") {
+ elements[element].category = "alchemy mod"
+ }
+ }
+})
+window.addEventListener("load",function(){
+ for (var element in elements) {
+ if (elements[element].hidden && document.getElementById("elementButton-"+element)) {
+ document.getElementById("elementButton-"+element).remove()
+ }
+ }
+})
\ No newline at end of file
diff --git a/mods/all_stain.js b/mods/all_stain.js
new file mode 100644
index 00000000..46bb1fbb
--- /dev/null
+++ b/mods/all_stain.js
@@ -0,0 +1,7 @@
+window.addEventListener('load', function() {
+ for (var element in elements) {
+ elements[element].stain = 0.1;
+ }
+});
+
+// sorry alice
\ No newline at end of file
diff --git a/mods/applestuff.js b/mods/applestuff.js
new file mode 100644
index 00000000..c8f74992
--- /dev/null
+++ b/mods/applestuff.js
@@ -0,0 +1,80 @@
+elements.cat = {
+ color: ["#ffffff", "#494949", "#ffc505"],
+ behavior: [
+ "XX|XX|XX",
+ "M2%25|XX|M2%25",
+ "XX|M1|XX",
+ ],
+ category: "life",
+ state: "solid",
+ desc: "cat.",
+ tempHigh: 100,
+ stateHigh: "meat",
+ tempLow: 0,
+ stateLow: "frozen_meat"
+};
+
+elements.the_hot_destroyer = {
+ color: "#ff0000",
+ behavior: behaviors.POWDER,
+ category: "weapons",
+ state: "solid",
+ desc: "literally just is super hot, destroys anything that can be melted",
+ temp: Infinity,
+ reactions: {
+ "the_cold_destroyer": {elem1: null, elem2: null}
+ }
+};
+
+elements.the_cold_destroyer = {
+ color: "#00ccff",
+ behavior: behaviors.POWDER,
+ category: "weapons",
+ state: "solid",
+ desc: "literally just is super cold, freezes anything that can be frozen",
+ temp: -Infinity,
+ reactions: {
+ "the_hot_destroyer": {elem1: null, elem2: null}
+ }
+};
+
+elements.plutoneeum = {
+ color: ["#38a30e", "#0d662b", "#5d995d"],
+ behavior: behaviors.RADPOWDER,
+ category: "powders",
+ state: "solid",
+ desc: "misspelled on purpose to avoid conflicts with other mods",
+};
+
+elements.lipstick = {
+ color: "#a30000",
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ state: "liquid",
+ viscosity: 650,
+ tempHigh: 100,
+ stateHigh: "steam",
+ desc: "this mod is meant to have a description to everything but i don't know what to put here... its lipstick i guess?"
+};
+
+elements.very_hot_gold = {
+ color: ["#fff0b5","#986a1a","#f0bb62"],
+ behavior: behaviors.WALL,
+ category: "solids",
+ density: 19300,
+ conduct: 0.81,
+ hardness: 0.25,
+ breakInto: "gold_coin",
+ temp: Infinity,
+ desc: "i'm running out of ideas, have this i guess"
+};
+
+elements.sour_patch_kids = {
+ color:["#ff0000", "#00ff00", "#c8ff02", "#ff00c8"],
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ desc: "don't think their meant to be purple"
+};
+
+// this piece of text is gonna change every update
diff --git a/mods/noblegas.js b/mods/noblegas.js
new file mode 100644
index 00000000..4d5a2540
--- /dev/null
+++ b/mods/noblegas.js
@@ -0,0 +1,105 @@
+elements.argon = {
+ color: elements.neon.color,
+ behavior: behaviors.GAS,
+ colorOn: ["#c831ee","#d683eb","#7a258f"],
+ category: "gases",
+ state: "gas",
+ tempLow: -185.8,
+ stateLow: "liquid_argon",
+ density: 1.784,
+ conduct: 0.8
+}
+elements.liquid_argon = {
+ color: elements.neon.color,
+ behavior: behaviors.LIQUID,
+ colorOn: ["#c831ee","#d683eb","#7a258f"],
+ category: "states",
+ state: "liquid",
+ tempHigh: -183.8,
+ stateHigh: "argon",
+ density: 1401,
+ tempLow: -189.3,
+ stateLow: "frozen_argon",
+ conduct: 0.8
+}
+elements.frozen_argon = {
+ color: elements.neon.color,
+ behavior: behaviors.WALL,
+ colorOn: ["#c831ee","#d683eb","#7a258f"],
+ category: "states",
+ state: "solid",
+ tempHigh: -187.3,
+ stateHigh: "liquid_argon",
+ density: 1616,
+ conduct: 0.8
+}
+elements.krypton = {
+ color: elements.neon.color,
+ behavior: behaviors.GAS,
+ colorOn: ["#c49dce","#ac8ab4","#715579"],
+ category: "gases",
+ state: "gas",
+ tempLow: -153.22,
+ stateLow: "liquid_krypton",
+ density: 3.75,
+ conduct: 0.8
+}
+elements.liquid_krypton = {
+ color: elements.neon.color,
+ behavior: behaviors.LIQUID,
+ colorOn: ["#c49dce","#ac8ab4","#715579"],
+ category: "states",
+ state: "liquid",
+ tempHigh: -150.22,
+ stateHigh: "krypton",
+ density: 2423,
+ tempLow: -157.36,
+ stateLow: "frozen_krypton",
+ conduct: 0.8
+}
+elements.frozen_krypton = {
+ color: elements.neon.color,
+ behavior: behaviors.WALL,
+ colorOn: ["#c49dce","#ac8ab4","#715579"],
+ category: "states",
+ state: "solid",
+ tempHigh: -154.36,
+ stateHigh: "liquid_krypton",
+ density: 2160,
+ conduct: 0.8
+}
+elements.xenon = {
+ color: elements.neon.color,
+ behavior: behaviors.GAS,
+ colorOn: ["#627eca","#4572d3","#333cb1"],
+ category: "gases",
+ state: "gas",
+ tempLow: -108,
+ stateLow: "liquid_xenon",
+ density: 5.9,
+ conduct: 0.8
+}
+elements.liquid_xenon = {
+ color: elements.neon.color,
+ behavior: behaviors.LIQUID,
+ colorOn: ["#627eca","#4572d3","#333cb1"],
+ category: "states",
+ state: "liquid",
+ tempHigh: -104,
+ stateHigh: "xenon",
+ density: 2948,
+ tempLow: -111.8,
+ stateLow: "frozen_xenon",
+ conduct: 0.8
+}
+elements.frozen_xenon = {
+ color: elements.neon.color,
+ behavior: behaviors.WALL,
+ colorOn: ["#627eca","#4572d3","#333cb1"],
+ category: "states",
+ state: "solid",
+ tempHigh: -109.8,
+ stateHigh: "liquid_xenon",
+ density: 3410,
+ conduct: 0.8
+}
\ No newline at end of file