diff --git a/mod-list.html b/mod-list.html
index 1312c8fc..b91092d2 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -200,6 +200,8 @@
| Food & Cooking |
| bananas.js | Adds bananas and banana plants | Alice |
| ketchup_mod.js | Adds a bunch of ketchup related stuff, plus a few other condiments | Nubo318 (main dev), Devi, Alice (contributors) |
+| pizzasstuff.js | New animals, foods, and plants | _ilikepizza_ |
+| sbstuff.js | Adds Rice | Stefan Blox |
| Life & Nature |
| apioforms_pre.js | An incomplete implementation of elements from the Apioform Game | Alice |
@@ -209,6 +211,7 @@
| crimson.js | Adds elements relating to the Crimson from Terraria | Alice |
| fairy_chain.js | Adds way too many fairies to fey_and_more.js | Alice |
| fantastic_creatures.js | Adds various animals | Melecie |
+| fantasy_elements.js | Fantasy creatures and substances | pixelegend4 |
| fey_and_more.js | Adds fairies, magic, and a lot of other things | Melecie |
| fwibblen.js | Adds a flying creature that turns nickel into itself, and a second creature that does the same to the first one | Alice |
| human_edit.js | Improvements to humans | Alice |
@@ -216,10 +219,11 @@
| mobs.js | Adds Creepers, Zombies, and Skeletons | Alice |
| nocancer.js | Removes cancer from the game one tick after it is created | mollthecoder |
| nocancer2.js | Removes cancer from the game altogether. May be incompatible with other mods that spawn cancer | mollthecoder |
+| pizzasstuff.js | New animals, foods, and plants | _ilikepizza_ |
| primordial_birthpool.js | A cross between Primordial Soup and Birthpool. Requires F&M | Alice |
| spring.js | Many nature elements, like sakura trees, butterflies, beehives, and more | R74n |
-| the_ground.js | Adds several rock types, worldgen settings, and gemstones | Alice |
| the_ground_og.js | Simplified and more stable version of the_ground.js | Alice |
+| the_ground.js | Adds several rock types, worldgen settings, and gemstones | Alice |
| toothpaste.js | Teeth and paste | Alice |
| Fun & Games |
diff --git a/mods/a_mod_by_alice.js b/mods/a_mod_by_alice.js
index bc0d7e3b..6593c196 100644
--- a/mods/a_mod_by_alice.js
+++ b/mods/a_mod_by_alice.js
@@ -3669,8 +3669,13 @@ color1 and color2 spread through striped paint like dye does with itself. col
}
}
- //New elements
+ //No changeTemp for fire=>smoke
+ elements.fire.tick = function(pixel){
+ behaviors.UL_UR_OPTIMIZED(pixel);
+ if (!pixel.del && settings.burn===0 && (pixelTicks-pixel.start > 70) && Math.random() < 0.1 ) { changePixel(pixel,"smoke",false) }
+ };
+ //New elements
elements.cold_fire.burning = true;
elements.cold_fire.burnTempChange = -1;
elements.cold_fire.burnTime = 25;
@@ -7986,7 +7991,7 @@ color1 and color2 spread through striped paint like dye does with itself. col
behavior: behaviors.WALL,
state: "solid",
category: "rainbow variants",
- };
+ }; //7989 yay soshi!
elements.lavashimmer = {
color: ["#ff3f00","#200800","#ff3f00","#200800"],
@@ -8216,7 +8221,7 @@ color1 and color2 spread through striped paint like dye does with itself. col
}
},
reactions: {
- dye: elements.rainbow.reactions.dye, //7989 yay soshi!
+ dye: elements.rainbow.reactions.dye,
},
behavior: behaviors.WALL,
state: "solid",
@@ -9648,7 +9653,7 @@ color1 and color2 spread through striped paint like dye does with itself. col
for(y = bottomFortyPercent; y < height; y++) {
var chance = y > bottomTwentyPercent ? 0.03 : 0.01
var radius = y > bottomTwentyPercent ? 8 : 6
- if(enabledMods.includes("velocity.js") && !isEmpty(x,y,true)) {
+ if(!isEmpty(x,y,true)) {
pixelMap[x][y].vy ??= 0;
pixelMap[x][y].vy -= 20;
};
@@ -11275,10 +11280,11 @@ color1 and color2 spread through striped paint like dye does with itself. col
pixelMap: structuredClone ? structuredClone(pixelMap) : JSON.parse(JSON.stringify(pixelMap)),
width: width,
height: height,
+ pixelTicks: pixelTicks,
pixelSize: pixelSize,
settings: settings,
version: 1,
- enabledMods: localStorage.enabledMods,
+ enabledMods: localStorage.enabledMods
};
for(i = 0; i < simulationState.pixelMap.length; i++) {
var column = simulationState.pixelMap[i];
@@ -11529,6 +11535,7 @@ color1 and color2 spread through striped paint like dye does with itself. col
width = json.width;
height = json.height;
pixelSize = json.pixelSize;
+ pixelTicks = (json.pixelTicks ?? 0);
//currentPixels = json.currentPixels;
for(i = 0; i < json.pixelMap.length; i++) {
json.pixelMap[i] = json.pixelMap[i].map(x => zeroToNull(x));
@@ -13430,12 +13437,13 @@ Pixel size (rendering only): (Use if the save looks cut o
elements.lamp_oil.density = 810;
elements.lamp_oil.name = "kerosene";
elements.lamp_oil.forceAutoGen = true;
+ elements.lamp_oil.burnInto = "smoke,smoke,fire,fire,fire,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(",");
elements.lamp_oil_gas = {
name: "kerosene gas",
burn: 100,
density: 4.5,
tick: elements.lamp_oil.tick,
- burnInto: "explosion,fire,fire,fire,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(",")
+ burnInto: "explosion,smoke,smoke,fire,fire,fire,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(",")
};
elements.gasoline = {
@@ -13461,7 +13469,7 @@ Pixel size (rendering only): (Use if the save looks cut o
tempLow: -60,
burn: 20,
burnTime: 500,
- burnInto: "explosion,fire,fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
+ burnInto: "fire,fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
viscosity: 7.04,
state: "liquid",
density: 755,
@@ -13499,7 +13507,7 @@ Pixel size (rendering only): (Use if the save looks cut o
forceAutoGen: true,
burn: 80,
burnTime: 500,
- burnInto: "explosion,fire,fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
+ burnInto: "fire,fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
viscosity: 5.77,
state: "liquid",
density: 740
@@ -13533,7 +13541,7 @@ Pixel size (rendering only): (Use if the save looks cut o
tempLow: -25,
burn: 20,
burnTime: 500,
- burnInto: "explosion,fire,fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
+ burnInto: "fire,fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
viscosity: 7.04,
state: "liquid",
density: 755,
@@ -13562,7 +13570,7 @@ Pixel size (rendering only): (Use if the save looks cut o
burn: 20,
burnTime: 600,
forceAutoGen: true,
- burnInto: "explosion,fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
+ burnInto: "fire,fire,fire,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,steam,steam".split(","),
viscosity: 7.04,
state: "liquid",
density: 800,
@@ -13578,6 +13586,7 @@ Pixel size (rendering only): (Use if the save looks cut o
elements.heavy_fuel_oil = {
color: "#1c1a18",
+ stain: 0.3,
behavior: behaviors.LIQUID,
tick: function(pixel) {
if (pixel.temp > 407 && !pixel.burning) {
@@ -13611,7 +13620,7 @@ Pixel size (rendering only): (Use if the save looks cut o
viscosity: 700,
burnTime: 800,
fireElement: ["fire","fire","fire","smoke","smoke","carbon_dioxide","carbon_dioxide","carbon_dioxide","carbon_monoxide","carbon_monoxide","carbon_monoxide","sulfur_dioxide","sulfur_trioxide_gas","poison_gas"],
- burnInto: "explosion,fire,fire,fire,fire,fire,fire,ash,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,poison_gas".split(","),
+ burnInto: "fire,fire,fire,fire,fire,fire,ash,ash,ash,carbon_monoxide,carbon_monoxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,carbon_dioxide,steam,steam,steam,poison_gas".split(","),
viscosity: 7.04,
state: "liquid",
density: 755,
@@ -22516,28 +22525,30 @@ Pixel size (rendering only): (Use if the save looks cut o
newConcreteTick = elements.concrete.tick;
- if(elements.hanging_concrete) {
- elements.hanging_concrete.tick = function(pixel) {
- newConcreteTick(pixel);
+ runAfterLoad(function() { //mamma mia that's some tasty spaghetti
+ if(elements.hanging_concrete) {
+ elements.hanging_concrete.tick = function(pixel) {
+ newConcreteTick(pixel);
+ };
};
- };
- if(elements.attach_concrete) {
- oldAttachConcreteTick = elements.attach_concrete.tick ;
- elements.attach_concrete.tick = function(pixel) {
- oldAttachConcreteTick(pixel);
- newConcreteTick(pixel);
+ if(elements.attach_concrete) {
+ oldAttachConcreteTick = elements.attach_concrete.tick ;
+ elements.attach_concrete.tick = function(pixel) {
+ oldAttachConcreteTick(pixel);
+ newConcreteTick(pixel);
+ };
};
- };
- if(elements.crumbling_concrete) {
- oldCrumblingConcreteTick = elements.crumbling_concrete.tick ;
- newConcreteTick = elements.concrete.tick ;
- elements.crumbling_concrete.tick = function(pixel) {
- oldCrumblingConcreteTick(pixel);
- newConcreteTick(pixel);
- };
- };
+ if(elements.crumbling_concrete) {
+ oldCrumblingConcreteTick = elements.crumbling_concrete.tick ;
+ newConcreteTick = elements.concrete.tick ;
+ elements.crumbling_concrete.tick = function(pixel) {
+ oldCrumblingConcreteTick(pixel);
+ newConcreteTick(pixel);
+ }
+ }
+ });
//Crimson
//Made-up lore: Crimson naturally drives rocks towards a somewhat mafic comp.
@@ -23995,14 +24006,20 @@ Pixel size (rendering only): (Use if the save looks cut o
breakInto: "alumina",
};
+
+ elements.molten_titanium ??= {}; elements.molten_titanium.tempHigh = 3287;
+ elements.molten_iron ??= {}; elements.molten_iron.tempHigh = 2861;
+ elements.molten_chromium ??= {}; elements.molten_chromium.tempHigh = 2671;
+ elements.molten_copper ??= {}; elements.molten_molten_copper.tempHigh = 4700;
elements.molten_alumina ??= {};
+ elements.molten_alumina.tempHigh = 5400;
elements.molten_alumina.reactions ??= {};
- elements.molten_alumina.reactions.iron_scrap = {elem1: "molten_sapphire", elem2: ["molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron",null] };
- elements.molten_alumina.reactions.molten_iron = {elem1: "molten_sapphire", elem2: ["molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron",null] };
- elements.molten_alumina.reactions.titanium_scrap = {elem1: "molten_sapphire", elem2: ["molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium",null] };
- elements.molten_alumina.reactions.molten_titanium = {elem1: "molten_sapphire", elem2: ["molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium",null] };
- elements.molten_alumina.reactions.chromium_scrap = {elem1: "molten_ruby", elem2: ["molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium",null] };
- elements.molten_alumina.reactions.molten_chromium = {elem1: "molten_ruby", elem2: ["molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium",null] };
+ elements.molten_alumina.reactions.iron_scrap = {elem1: "molten_sapphire", elem2: ["molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron",null] };
+ elements.molten_alumina.reactions.molten_iron = {elem1: "molten_sapphire", elem2: ["molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron","molten_iron",null] };
+ elements.molten_alumina.reactions.titanium_scrap = {elem1: "molten_sapphire", elem2: ["molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium",null] };
+ elements.molten_alumina.reactions.molten_titanium = {elem1: "molten_sapphire", elem2: ["molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium","molten_titanium",null] };
+ elements.molten_alumina.reactions.chromium_scrap = {elem1: "molten_ruby", elem2: ["molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium",null] };
+ elements.molten_alumina.reactions.molten_chromium = {elem1: "molten_ruby", elem2: ["molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium","molten_chromium",null] };
elements.molten_alumina.stateLow = "corundum";
//Sapphire
@@ -24018,6 +24035,16 @@ Pixel size (rendering only): (Use if the save looks cut o
hardness: 0.9,
};
+ elements.molten_sapphire ??= {}; elements.molten_sapphire.tick = function(pixel) {
+ if(pixel.temp >= 5040) {
+ if(Math.random() < 0.005) { //the real proportion of 0.01% is so low that you'd just melt sapphire and get back corundum
+ changePixel(pixel,Math.random() < 0.5 ? "titanium_gas" : "iron_gas",false)
+ } else {
+ changePixel(pixel,"alumina_gas",false)
+ }
+ };
+ };
+
standaloneBrokenFormMaker("sapphire","shard",true,"powders","auto","auto","molten_sapphire",["alumina","alumina","alumina","alumina","alumina","alumina","alumina","alumina","alumina","iron_scrap","titanium_scrap"]).hidden = true;
//Ruby
@@ -24033,6 +24060,16 @@ Pixel size (rendering only): (Use if the save looks cut o
hardness: 0.9,
};
+ elements.molten_ruby ??= {}; elements.molten_ruby.tick = function(pixel) {
+ if(pixel.temp >= 5040) {
+ if(Math.random() < 0.02) { //1% also too low
+ changePixel(pixel,"chromium_gas",false)
+ } else {
+ changePixel(pixel,"alumina_gas",false)
+ }
+ };
+ };
+
standaloneBrokenFormMaker("ruby","shard",true,"powders","auto","auto","molten_sapphire",["alumina","alumina","alumina","alumina","alumina","alumina","alumina","alumina","alumina","chromium_scrap"]).hidden = true;
//Spinel (kek)
@@ -26326,6 +26363,7 @@ Make sure to save your command in a file if you want to add this preset again.`
function changeElementPrompt() {
var cmToElement = prompt("Enter what you want to change pixels to");
+ if(cmToElement == null) { return };
// replace spaces with underscores
cmToElement = cmToElement.replace(/ /g, "_");
cmToElementS = mostSimilarElement(cmToElement);
@@ -26805,6 +26843,169 @@ Make sure to save your command in a file if you want to add this preset again.`
}
}
};
+
+ rayAbsorbElements = [];
+ rayPassElements = [];
+
+ function summonRay(element,xIn,intensity,radius) {
+ var forMin = 0 - radius;
+ var forMax = radius + 1;
+ if(intensity < 1) { return };
+ for(var i = forMin; i < forMax; i++) {
+ for(var j = 1; j < intensity + 1; j++) {
+ var pos = {x: xIn + i, y: j};
+ if(isEmpty(pos.x,pos.y)) {
+ createPixel(element,pos.x,pos.y)
+ } else {
+ if(outOfBounds(pos.x,pos.y)) {
+ break
+ } else {
+ var pixel = pixelMap[pos.x][pos.y];
+ var pElem = pixel.element;
+ var data = elements[pElem];
+ if(rayAbsorbElements.includes(pElem)) {
+ break
+ } else if(rayPassElements.includes(pElem)) {
+ continue
+ } else {
+ if(data.state == "gas") {
+ continue
+ } else {
+ break
+ }
+ }
+ }
+ }
+ }
+ }
+ };
+
+ elements.orbital_ray_beacon = {
+ color: "#ebdf91",
+ behavior: [
+ "XX|M2 AND SA|XX",
+ "SA|XX|SA",
+ "XX|M1|XX"
+ ],
+ breakInto: ["steel_scrap","iron_scrap","copper_scrap","gold_scrap","battery","sapphire","magic"],
+ temp: 0,
+ tempHigh: 5010,
+ insulate: true,
+ conduct: 1,
+ stateHigh: ["molten_steel","molten_iron","molten_copper","molten_gold","acid_gas","titanium_gas","molten_sapphire","magic"],
+ tick: function(pixel) {
+ pixelTempCheck(pixel);
+ if(!pixel.charge) { return };
+ if(pixel.charge) {
+ //var intensity = Math.max(1,Math.floor((pixel.temp + 1) / 100));
+ if(isEmpty(pixel.x,pixel.y+1,true)) { return };
+ var pixelUnder = pixelMap[pixel.x]?.[pixel.y+1];
+ if(!pixelUnder) { return };
+ switch(pixelUnder.element) {
+ case "fire":
+ summonRay("heat_ray",pixel.x,10,5);
+ break;
+ case "ultramafic_magma":
+ case "magma":
+ case "intermediate_magma":
+ case "intermediate_felsic_magma":
+ case "felsic_magma":
+ case "nellish_magma":
+ case "rainbow_magma":
+ case "crimson_magma":
+ summonRay("heat_ray",pixel.x,16,10);
+ break;
+ case "vaporized_ultramafic_magma":
+ case "vaporized_magma":
+ case "vaporized_intermediate_magma":
+ case "vaporized_intermediate_felsic_magma":
+ case "vaporized_felsic_magma":
+ case "vaporized_nellish_magma":
+ case "vaporized_rainbow_magma":
+ case "vaporized_crimson_magma":
+ summonRay("heat_ray",pixel.x,24,18);
+ break;
+ case "greek_fire":
+ summonRay("heat_ray",pixel.x,16,25);
+ break;
+ case "quark_matter":
+ summonRay("heat_ray",pixel.x,45,80);
+ break;
+ case "cold_fire":
+ summonRay("cold_ray",pixel.x,10,5);
+ break;
+ case "chilly_water":
+ summonRay("cold_ray",pixel.x,14,8);
+ break;
+ case "frostwind":
+ summonRay("cold_ray",pixel.x,20,15);
+ break;
+ case "liquid_frostwind":
+ summonRay("cold_ray",pixel.x,30,20);
+ break;
+ case "gelid_cryotheum":
+ summonRay("cold_ray",pixel.x,36,25);
+ break;
+ case "snow":
+ summonRay("freeze_ray",pixel.x,3,6);
+ break;
+ case "slush":
+ summonRay("freeze_ray",pixel.x,4,6);
+ break;
+ case "packed_snow":
+ summonRay("freeze_ray",pixel.x,4,7);
+ break;
+ case "ice":
+ summonRay("freeze_ray",pixel.x,4,8);
+ break;
+ case "alcohol_ice":
+ summonRay("freeze_ray",pixel.x,6,11);
+ break;
+ case "liquid_nitrogen":
+ summonRay("freeze_ray",pixel.x,9,18);
+ break;
+ case "nitrogen_ice":
+ summonRay("freeze_ray",pixel.x,11,19);
+ break;
+ case "liquid_hydrogen":
+ summonRay("freeze_ray",pixel.x,14,26);
+ break;
+ case "hydrogen_ice":
+ summonRay("freeze_ray",pixel.x,15,27);
+ break;
+ case "liquid_helium":
+ summonRay("freeze_ray",pixel.x,18,34);
+ break;
+ case "tectonic_petrotheum":
+ summonRay("smash_ray",pixel.x,2,10);
+ break;
+ case "bomb":
+ case "tnt":
+ summonRay("smash_ray",pixel.x,5,7);
+ break;
+ case "cluster_bomb":
+ summonRay("death_ray",pixel.x,7,11);
+ break;
+ case "nuke":
+ summonRay("annihilation_ray",pixel.x,20,40);
+ break;
+ case "cluster_nuke":
+ summonRay("annihilation_ray",pixel.x,30,60);
+ break;
+ case "armageddon":
+ summonRay("annihilation_ray",pixel.x,40,80);
+ break;
+ };
+ //if(pixelUnder) { deletePixel(pixelUnder.x,pixelUnder.y) };
+ delete pixel.charge;
+ pixel.chargeCD = 4;
+ return true;
+ }
+ },
+ conduct: 1,
+ category: "machines",
+ hardness: 0.6
+ };
//PUSHERS ##
@@ -39388,6 +39589,8 @@ Make sure to save your command in a file if you want to add this preset again.`
if(!supports) {
behaviors.POWDER(pixel);
};
+
+ elements.concrete.tick
doDefaults(pixel);
},
@@ -41507,25 +41710,25 @@ Make sure to save your command in a file if you want to add this preset again.`
}
}
};
- if(enabledMods.includes("mods/paint_event.js")) {
- randomEvents.paint = function() {
- // set the color of a random circle to a random color
- var x = Math.floor(Math.random()*(width-1))+1;
- var y = Math.floor(Math.random()*(height-1))+1;
- var randomR = Math.floor(Math.random() * 256);
- var randomG = Math.floor(Math.random() * 256);
- var randomB = Math.floor(Math.random() * 256);
- var radius = Math.floor(Math.random()*19)+1;
- var rColor = "rgb(" + randomR + "," + randomG + "," + randomB + ")";
- var coords = circleCoords(x,y,radius);
- for (var i = 0; i < coords.length; i++) {
- var coord = coords[i];
- if (!outOfBounds(coord.x,coord.y) && !isEmpty(coord.x,coord.y)) {
- pixelMap[coord.x][coord.y].color = rColor;
- };
+
+ randomEvents.paint = function() {
+ // set the color of a random circle to a random color
+ var x = Math.floor(Math.random()*(width-1))+1;
+ var y = Math.floor(Math.random()*(height-1))+1;
+ var randomR = Math.floor(Math.random() * 256);
+ var randomG = Math.floor(Math.random() * 256);
+ var randomB = Math.floor(Math.random() * 256);
+ var radius = Math.floor(Math.random()*19)+1;
+ var rColor = "rgb(" + randomR + "," + randomG + "," + randomB + ")";
+ var coords = circleCoords(x,y,radius);
+ for (var i = 0; i < coords.length; i++) {
+ var coord = coords[i];
+ if (!outOfBounds(coord.x,coord.y) && !isEmpty(coord.x,coord.y)) {
+ pixelMap[coord.x][coord.y].color = rColor;
};
};
};
+
//Buff mob events
if(typeof(maximumCreeperTries) !== "undefined") {
minimumCreeperTries = 10;
diff --git a/mods/betterMenuScreens.js b/mods/betterMenuScreens.js
index 1c0509f1..dc18861c 100644
--- a/mods/betterMenuScreens.js
+++ b/mods/betterMenuScreens.js
@@ -106,7 +106,7 @@ const inject = () => {
/**
*
- * @param {string} menu Menu do be opened
+ * @param {string} menu Menu to be opened
* @param {boolean} [closeCurrent] Whether it should forcefully close the current screen
*/
const openMenu = (menu, closeCurrent = false) => {
@@ -130,6 +130,7 @@ class MenuScreen {
this.showCloseButton = true;
this.closeButtonText = "-";
this.closeButtonClass = "XButton";
+ this.titleId = null;
}
/**
@@ -141,6 +142,15 @@ class MenuScreen {
return this;
}
+ /**
+ * Sets screen title ID
+ * @param {string} [id] Screen title element ID
+ */
+ setTitleId(id) {
+ this.titleId = id;
+ return this;
+ }
+
/**
* Sets close button visibility. When false the close button will not be added to the menu screen
* @param {boolean} show Visibility of the close button
@@ -253,7 +263,7 @@ class MenuScreen {
const inner = document.createElement("div");
inner.className = this.innerDivClass ?? "menuScreen";
inner.innerHTML = `${this.showCloseButton ? `
-
";
+
";
this.nodes.forEach(n => inner.querySelector(".menuText").appendChild(n));
parent.appendChild(inner);
document.getElementById(id).appendChild(parent);
diff --git a/mods/chess.js b/mods/chess.js
index c5d1d0d6..83be06f1 100644
--- a/mods/chess.js
+++ b/mods/chess.js
@@ -1396,9 +1396,7 @@ class GameScreen {
}
onKey(ev) {
- if (!this.menuScreen) {
- player.update(ev);
- } else {
+ if (this.menuScreen) {
this.menuScreen.onKey(ev);
}
}
diff --git a/mods/fantasy_elements.js b/mods/fantasy_elements.js
index 278ee252..87cc8f4e 100644
--- a/mods/fantasy_elements.js
+++ b/mods/fantasy_elements.js
@@ -151,7 +151,6 @@ elements.dragon_scale = {
reactions: {
"fire": { elem1: null, elem2: "dragon_breath" },
"plasma": { elem1: null, elem2: "dragon_breath" },
- "incinerate": { elem1: null, elem2: "ash" },
"goblins_delight": { elem1: "dragon_breath", elem2: null },
"pulsium": { elem1: "dragon_breath", elem2: null },
"oil": { elem1: null, elem2: "dragon_breath" },
@@ -179,7 +178,7 @@ elements.mystic_runes = {
},
reactions: {
"heat_ray": { elem1: null, elem2: "mystic_runes" },
- "god_ray": { elem1: dragon_scale, elem2: "dragon_scale" },
+ "god_ray": { elem1: null, elem2: "mystic_runes" },
"laser": { elem1: null, elem2: "mystic_runes" },
"helium": { elem1: null, elem2: "mystic_runes" },
"oxygen": { elem1: null, elem2: "mystic_runes" },
@@ -203,7 +202,7 @@ elements.enchanted_wood = {
// Update the element's behavior
},
reactions: {
- "fire": { elem1: null, elem2: "mystic_runes" },
+ "fire": { elem1: null, elem2: "charcoal" },
"plasma": { elem1: null, elem2: "charcoal" },
"water": { elem1: null, elem2: "mystic_runes" },
},
@@ -211,7 +210,7 @@ elements.enchanted_wood = {
// update 1.1 below
// adds 3 more extra elements
-// by pixelegend4
+// by hackerpro908
// main game by R74N called sandboxels
elements.quartzium = {
@@ -223,7 +222,6 @@ elements.quartzium = {
weight: 100,
reactions: {
"fire": { elem1: "quartz", elem2: "quartz" },
- "plasma": { elem1: "quartz", elem2: "quartz" },
},
};
elements.quartz = {
@@ -243,101 +241,3 @@ elements.moonite = {
density: 8076,
weight: 100,
};
-elements.faustium = {
- color: "#8B008B",
- behavior: behaviors.SUPERFLUID,
- category: "fantasy",
- state: "liquid",
- density: 800,
- viscosity: 0.01,
- weight: 300,
- reactions: {
- "water": { elem1: "moonite", elem2: "moonite" },
- },
-};
-
-// update 1.2
-// adds more below
-// added faustium reaction
-
-elements.nebulaflare = {
- color: ["#7500FF", "#00FFFB", "#FF00FC"],
- behavior: behaviors.GAS,
- state: "gas",
- density: 0.1,
- weight: 0.1,
- category: "fantasy",
- reactions: {
- "fire": { elem1: "moonite", elem2: "moonite" },
- "moonite": { elem1: "quartzium", elem2: "quartzium" },
-
- },
-};
-
-elements.flaro = {
- color: ["#ff4d4d", "#ff9933", "#ffd11a", "#ff9933", "#ff4d4d"],
- behavior: behaviors.GAS,
- category: "fantasy",
- state: "gas",
- density: 8076,
- weight: 100,
-};
-
-elements.aurorium = {
- color: ["#75c0e0", "#00ff00", "#ffffff", "#00ff00", "#75c0e0"],
- behavior: behaviors.GAS,
- category: "fantasy",
- state: "gas",
- density: 55,
- weight: 1,
- reactions: {
- "plasma": { elem1: "explosion", elem2: "explosion" },
- "flaro": { elem1: "nebulaflare", elem2: "nebulaflare" },
-
- }
-};
-
-elements.glimmerium = {
- color: ["#ff3333", "#ff6666", "#ff9999", "#ffcc99", "#ff6633"],
- behavior: behaviors.LIGHT,
- category: "fantasy",
- state: "gas",
- density: 0.01,
- weight: 0.5,
- temperature: 3000,
- reactions: {
- "aurorium": { elem1: "sodium", elem2: "sodium" },
- "flaro": { elem1: "nebulaflare", elem2: "nebulaflare" },
- "pulsium": { elem1: "water", elem2: "water" },
- }
-};
-
-elements.goblin = {
- "color": "#2ae856",
- "state": "solid",
- "category":"fantasy",
- "behavior": [
- "XX|XX|DL",
- "XX|FX%0.5|M2%3 AND DL",
- "XX|M1|XX",
- ],
- reactions: {
- "goblins_delight": { elem2:null, chance:0.9 },
-
- },
-};
-
-elements.osmoz = {
- color: "#1ff099",
- behavior: behaviors.SOLID,
- category: "fantasy",
- state: "solid",
- density: 5000,
- weight: 300,
- reactions: {
- "fire": { elem1: "nebulaflare", elem2: "nebulaflare" },
- }
-};
-
-
-
diff --git a/mods/jaydsmods.js b/mods/jaydsmods.js
new file mode 100644
index 00000000..1070777b
--- /dev/null
+++ b/mods/jaydsmods.js
@@ -0,0 +1,31 @@
+elements.test_element = {
+ color: "#ff0000",
+ behavior: behaviors.POWDER,
+ category: "land",
+ state: "solid",
+ reactions: {
+ "dirt": { elem1: null, elem2: "mud" },
+ }
+ },
+elements.tsar_bomba = {
+ color: "#524c41",
+ behavior: [
+ "XX|EX:150>plasma|XX",
+ "XX|XX|XX",
+ "M2|M1 AND EX:150>plasma|M2",
+ ],
+ category: "weapons",
+ state: "solid",
+ density: 1300,
+ excludeRandom: true,
+ cooldown: defaultCooldown
+}
+elements.meese = {
+ color: "#996515",
+ behavior: [
+ "XX|XX|XX",
+ "XX|FX%0.25|M2%0.5 AND BO",
+ "XX|M1|XX",
+ ],
+ category: "life"
+ }
\ No newline at end of file
diff --git a/mods/morefoodsmod.js b/mods/morefoodsmod.js
new file mode 100644
index 00000000..9791eb3b
--- /dev/null
+++ b/mods/morefoodsmod.js
@@ -0,0 +1,47 @@
+elements.chowder = {
+ color: "#c7c98b",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ reactions: {
+ "water": { elem1: null, elem2: "soup" },
+ },
+ };
+
+ elements.soup = {
+ color: "#c28719",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "liquid",
+ stateHigh: "chowder",
+ tempHigh: 100
+ };
+
+ elements.rice = {
+ color: "#f6f8ed",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ reactions: {
+ "broth": { elem1: "risotto", elem2: null },
+ "beans": { elem1: null, elem2: "feijoada"},
+ },
+ };
+
+ elements.risotto = {
+ color: "#f8f4e9",
+ behavior: behaviors.SUPPORTPOWDER,
+ category: "food",
+ state: "solid",
+ };
+
+ elements.feijoada = {
+ color: "#291800",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "liquid",
+ viscosity: 9
+ };
+
+ if (!elements.milk.reactions) elements.milk.reactions = {};
+elements.milk.reactions.corn = { elem1: null, elem2: "chowder" }
\ No newline at end of file
diff --git a/mods/nastystuff.js b/mods/nastystuff.js
new file mode 100644
index 00000000..92e4c9f0
--- /dev/null
+++ b/mods/nastystuff.js
@@ -0,0 +1,57 @@
+elements.poop = {
+ color: "#411900",
+ density: 200,
+ state: "solid",
+ burn: 5,
+ tempHigh: 400,
+ burnTime: 200,
+ burnInto: ["driedPoop"],
+ category: "gross stuff",
+}
+
+elements.driedPoop = {
+ behavior: behaviors.POWDER,
+ color: '#181100',
+ state: 'powder',
+ category: "gross stuff",
+ reactions: {
+ "water": { elem1: null, elem2: "wetPoop" },
+ "milk": { elem1: null, elem2: "poopyMilk" },
+
+ },
+ density: 10
+}
+
+elements.wetPoop = {
+ behavior: behaviors.LIQUID,
+ color: "#A9844F",
+ state: 'liquid',
+ category: 'gross stuff',
+ density: '25'
+}
+
+elements.poopyMilk = {
+ behavior: behaviors.LIQUID,
+ color: '#BEB2AD',
+ state: 'liquid',
+ category: "gross stuff",
+ density: 10
+}
+
+elements.peePee = {
+ behavior: behaviors.LIQUID,
+ color: '#f1ed00',
+ state: 'liquid',
+ category: "gross stuff",
+ tempHigh: 100,
+ stateHigh: ["ammonia", "fragrance"],
+ density: 25
+}
+
+elements.ammonia = {
+ behavior: behaviors.GAS,
+ color: '#E5E4E2',
+ category: 'gross stuff',
+ density: .86,
+ state: 'gas',
+}
\ No newline at end of file
diff --git a/mods/nousersthings.js b/mods/nousersthings.js
index 583e8012..b2c6d531 100644
--- a/mods/nousersthings.js
+++ b/mods/nousersthings.js
@@ -1527,4 +1527,101 @@ elements.invisiblewall = {
}
},
category: "solids",
+},
+elements.bismuth = {
+ color: ["#818181","#989898","#b0b0b0","#c9c9c9"],
+ behavior: behaviors.WALL,
+ category: "solids",
+ tempHigh: 271.4,
+ stateHigh: "molten_bismuth",
+ density: 9780,
+ state: "solid"
+}
+function RGBtoHSV(r, g, b) {
+ if (arguments.length === 1) {
+ g = r.g, b = r.b, r = r.r;
+ }
+ var max = Math.max(r, g, b), min = Math.min(r, g, b),
+ d = max - min,
+ h,
+ s = (max === 0 ? 0 : d / max),
+ v = max / 255;
+
+ switch (max) {
+ case min: h = 0; break;
+ case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break;
+ case g: h = (b - r) + d * 2; h /= 6 * d; break;
+ case b: h = (r - g) + d * 4; h /= 6 * d; break;
+ }
+
+ return {
+ h: h,
+ s: s,
+ v: v
+ };
+}
+function HSVtoRGB(h, s, v) {
+ var r, g, b, i, f, p, q, t;
+ if (arguments.length === 1) {
+ s = h.s, v = h.v, h = h.h;
+ }
+ i = Math.floor(h * 6);
+ f = h * 6 - i;
+ p = v * (1 - s);
+ q = v * (1 - f * s);
+ t = v * (1 - (1 - f) * s);
+ switch (i % 6) {
+ case 0: r = v, g = t, b = p; break;
+ case 1: r = q, g = v, b = p; break;
+ case 2: r = p, g = v, b = t; break;
+ case 3: r = p, g = q, b = v; break;
+ case 4: r = t, g = p, b = v; break;
+ case 5: r = v, g = p, b = q; break;
+ }
+ return {
+ r: Math.round(r * 255),
+ g: Math.round(g * 255),
+ b: Math.round(b * 255)
+ };
+}
+elements.molten_bismuth = {
+ color: ["#ee8d63", "#ef7e5e", "#f06e5c", "#f05c5c"],
+ behavior: behaviors.MOLTEN,
+ category: "states",
+ state: "liquid",
+ temp: 280,
+ tick: function(pixel){
+ if (pixel.temp <= 261.4){
+ pixel.tHue = 0;
+ for (var i = 0; i < squareCoords.length; i++) {
+ var coord = squareCoords[i];
+ var x = pixel.x+coord[0];
+ var y = pixel.y+coord[1];
+ if (!isEmpty(x, y, true)){
+ if (pixelMap[x][y].element == "bismuth"){
+ var otherPixel = pixelMap[x][y]
+ var nR = parseInt(otherPixel.color.slice(4, otherPixel.color.indexOf(',')), 10)
+ var nG = parseInt(otherPixel.color.slice(otherPixel.color.indexOf(',') + 1, otherPixel.color.lastIndexOf(',')), 10)
+ var nB = parseInt(otherPixel.color.slice(otherPixel.color.lastIndexOf(',') + 1, -1), 10)
+ var hsvResult = RGBtoHSV(nR, nG, nB)
+ if ((pixel.tHue+1)%1 < hsvResult.h){
+ pixel.tHue = hsvResult.h;
+ }
+ }
+ }
+ }
+ changePixel(pixel, "bismuth")
+ if (1 == 1){
+ var rgbResult = HSVtoRGB(pixel.tHue + 0.02, 0.8, 0.8);
+ } else {
+ var rgbResult = HSVtoRGB(pixel.tHue, 0.8, 0.8);
+ }
+ const hexR = rgbResult.r.toString(16).padStart(2, '0');
+ const hexG = rgbResult.g.toString(16).padStart(2, '0');
+ const hexB = rgbResult.b.toString(16).padStart(2, '0');
+ const hexCode = `#${hexR}${hexG}${hexB}`;
+ pixel.color = pixelColorPick(pixel, hexCode)
+ }
+ },
+ density: 10049,
}
diff --git a/mods/obsidian.js b/mods/obsidian.js
new file mode 100644
index 00000000..929e0050
--- /dev/null
+++ b/mods/obsidian.js
@@ -0,0 +1,29 @@
+elements.obsidian = {
+ color: ["#343434", "#313639"],
+ behavior: behaviors.SOLID,
+ category: "solids",
+ state: "solid",
+ reactions: {
+ "sand": { elem1: "obsidian_shard" },
+ "dirt": { elem1: "obsidian_shard" },
+ "rock": { elem1: "obsidian_shard" },
+ "mudstone": { elem1: "obsidian_shard" },
+ "packed_snow": { elem1: "obsidian_shard" },
+ "gravel": { elem1: "obsidian_shard" },
+ "clay": { elem1: "obsidian_shard" },
+ "clay_soil": { elem1: "obsidian_shard" },
+ "permafrost": { elem1: "obsidian_shard" },
+ "mulch": { elem1: "obsidian_shard" },
+ "basalt": { elem1: "obsidian_shard" },
+ "tuff": { elem1: "mud" },
+ "limestone": { elem1: "obsidian_shard" },
+ "quicklime": { elem1: "obsidian_shard" },
+ "slaked_lime": { elem1: "obsidian_shard" },
+ }
+ },
+ elements.obsidian_shard = {
+ color: ["#343434" , "#313639"],
+ behavior: behaviors.POWDER,
+ category: "powders",
+ state: "solid",
+ }
\ No newline at end of file
diff --git a/mods/pizzasstuff.js b/mods/pizzasstuff.js
new file mode 100644
index 00000000..f887dc5b
--- /dev/null
+++ b/mods/pizzasstuff.js
@@ -0,0 +1,332 @@
+elements.fruit_slushy = {
+ color: "#b867cf",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.mold = {
+ color: "#86ab29",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.chocolate_slushy = {
+ color: "#4f2e16",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.chocolate_sauce = {
+ color: "#754828",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.chocolate_ice_cream = {
+ color: "#704b3a",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.fruit_ice_cream = {
+ color: "#de6ab7",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.chocolate_yogurt = {
+ color: "#825c4b",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+ tempLow: 0,
+ stateLow: "frozen_chocolate_yogurt",
+};
+
+elements.fruit_yogurt = {
+ color: "#f587d0",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+ tempLow: 0,
+ stateLow: "frozen_fruit_yogurt",
+};
+
+elements.frozen_fruit_yogurt = {
+ color: "#ffc2ea",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.frozen_chocolate_yogurt = {
+ color: "#ad8776",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.cooking_oil = {
+ color: "#c4ab4f",
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ state: "solid",
+ reactions: {
+ "meat": { elem1: null, elem2: "chicken_nuggets" },
+ "potato": { elem1: null, elem2: "fries" },
+ }
+};
+
+elements.chicken_nuggets = {
+ color: "#967242",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.fries = {
+ color: "#ebba34",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.rose_sauce = {
+ color: "#f0340e",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.rose_sauce = {
+ color: "#f0340e",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "solid",
+ hidden: "TRUE",
+};
+
+elements.smashed_ice = {
+ color: "#c3d4e6",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "solid",
+ reactions: {
+ "grape": { elem1: null, elem2: "fruit_slushy" },
+ "green_grape": { elem1: null, elem2: "fruit_slushy" },
+ "cherry": { elem1: null, elem2: "fruit_slushy" },
+ "chocolate": { elem1: null, elem2: "chocolate_slushy" },
+ "juice": { elem1: null, elem2: "fruit_slushy" },
+ "chocolate_sauce": { elem1: null, elem2: "chocolate_slushy" },
+ },
+ density: 100,
+ tempHigh: 25,
+ stateHigh: "water",
+ tempLow: -100,
+ stateLow: "snow",
+};
+
+elements.moss = {
+ color: "#389639",
+ behavior: behaviors.STURDYPOWDER,
+ category: "life",
+ state: "solid",
+ burn: 5,
+ burnTime: 15,
+ density: 1400,
+ breakInto: "dead_plant",
+ tempHigh: 120,
+ stateHigh: "dead_plant",
+ tempLow: -4,
+ stateLow: "frozen_plant",
+
+ reactions: {
+ "dna": { elem1: "moth", elem2: null },
+ }
+
+};
+
+elements.moth = {
+ color: "#665233",
+ behavior: behaviors.BOUNCY,
+ category: "life",
+ state: "solid",
+ burn: 95,
+ burnTime: 25,
+ density: 600,
+ breakInto: "dead_bug",
+ tempHigh: 100,
+ stateHigh: "ash",
+ tempLow: 0,
+ stateLow: "dead_bug",
+};
+
+elements.cherry = {
+ color: "#c41428",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ breakInto: "juice",
+ tempHigh: 256,
+ stateHigh: "steam",
+ breakIntoColor: "#450008",
+};
+
+elements.orange = {
+ color: "#ff9100",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ breakInto: "juice",
+ tempHigh: 256,
+ stateHigh: "steam",
+ breakIntoColor: "#d69c4f",
+};
+
+elements.kiwi = {
+ color: "#34611a",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ breakInto: "juice",
+ tempHigh: 256,
+ stateHigh: "steam",
+ breakIntoColor: "#517a38",
+};
+
+elements.green_grape = {
+ color: "#b6eb7f",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+ breakInto: "juice",
+ breakIntoColor: "#5f8536",
+ tempHigh: 256,
+ stateHigh: "steam",
+};
+
+if (!elements.lettuce.reactions) elements.lettuce.reactions = {};
+elements.lettuce.reactions.ice_cream = { elem1: "moss", elem2: null }
+
+if (!elements.ketchup.reactions) elements.ketchup.reactions = {};
+elements.ketchup.reactions.yolk = { elem1: "rose_sauce", elem2: null }
+
+
+if (!elements.bread.reactions) elements.bread.reactions = {};
+elements.bread.reactions.rotten_cheese = { elem1: "mold", elem2: null }
+
+if (!elements.bread.reactions) elements.bread.reactions = {};
+elements.bread.reactions.dirty_water = { elem1: "mold", elem2: null }
+
+if (!elements.toast.reactions) elements.toast.reactions = {};
+elements.toast.reactions.rotten_cheese = { elem1: "mold", elem2: null }
+
+if (!elements.toast.reactions) elements.toast.reactions = {};
+elements.toast.reactions.dirty_water = { elem1: "mold", elem2: null }
+
+if (!elements.baked_batter.reactions) elements.baked_batter.reactions = {};
+elements.baked_batter.reactions.rotten_cheese = { elem1: "mold", elem2: null }
+
+if (!elements.baked_batter.reactions) elements.baked_batter.reactions = {};
+elements.baked_batter.reactions.dirty_water = { elem1: "mold", elem2: null }
+
+if (!elements.bread.reactions) elements.bread.reactions = {};
+elements.bread.reactions.worm = { elem1: "mold", elem2: null }
+
+if (!elements.bread.reactions) elements.bread.reactions = {};
+elements.bread.reactions.mud = { elem1: "mold", elem2: null }
+
+if (!elements.toast.reactions) elements.toast.reactions = {};
+elements.toast.reactions.worm = { elem1: "mold", elem2: null }
+
+if (!elements.toast.reactions) elements.toast.reactions = {};
+elements.toast.reactions.mud = { elem1: "mold", elem2: null }
+
+if (!elements.baked_batter.reactions) elements.baked_batter.reactions = {};
+elements.baked_batter.reactions.worm = { elem1: "mold", elem2: null }
+
+if (!elements.baked_batter.reactions) elements.baked_batter.reactions = {};
+elements.baked_batter.reactions.mud = { elem1: "mold", elem2: null }
+
+elements.sugar_ice.breakInto = "smashed_ice"
+
+elements.chocolate.breakInto = "chocolate_sauce"
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.juice = { elem1: "fruit_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.grape = { elem1: "fruit_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.jelly = { elem1: "fruit_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.cherry = { elem1: "fruit_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.orange = { elem1: "fruit_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.kiwi = { elem1: "fruit_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.green_grape = { elem1: "fruit_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.chocolate = { elem1: "chocolate_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.chocolate_sauce = { elem1: "chocolate_ice_cream", elem2: null }
+
+if (!elements.ice_cream.reactions) elements.ice_cream.reactions = {};
+elements.ice_cream.reactions.melted_chocolate = { elem1: "chocolate_ice_cream", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.grape = { elem1: "fruit_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.juice = { elem1: "fruit_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.green_grape = { elem1: "fruit_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.cherry = { elem1: "fruit_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.kiwi = { elem1: "fruit_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.orange = { elem1: "fruit_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.jelly = { elem1: "fruit_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.chocolate = { elem1: "chocolate_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.chocolate_sauce = { elem1: "chocolate_yogurt", elem2: null }
+
+if (!elements.yogurt.reactions) elements.yogurt.reactions = {};
+elements.yogurt.reactions.melted_chocolate = { elem1: "chocolate_yogurt", elem2: null }
diff --git a/mods/sbstuff.js b/mods/sbstuff.js
new file mode 100644
index 00000000..45bb4c84
--- /dev/null
+++ b/mods/sbstuff.js
@@ -0,0 +1,276 @@
+elements.burnt_rice = {
+ tempHigh: 999,
+ stateHigh: "ash",
+ density: 699,
+ color: "#242424",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "liquid",
+ reactions: {
+ "water": { elem1: null, elem2: "dirty_water" }
+ }
+};
+
+elements.rice = {
+ isFood: true,
+ burnInto: "burnt_rice",
+ density: 696,
+ tempHigh: 232,
+ stateHigh: "burnt_rice",
+ color: "#d1d1d1",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "liquid",
+};
+
+elements.moth = {
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#57381a",
+ behavior: behaviors.GAS,
+ category: "life",
+ state: "solid",
+};
+
+elements.moss = {
+ tempHigh: 500,
+ stateHigh: "ash",
+ density: 1000,
+ color: "#2d571a",
+ behavior: behaviors.POWDER,
+ category: "land",
+ state: "solid",
+};
+
+elements.mc_donalds = {
+ tempHigh: 6969,
+ stateHigh: "void",
+ density: 69,
+ color: "#ff0000",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.maple_syrup = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "steam",
+ density: 1333,
+ hardness: 1,
+ color: "#9c6000",
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ state: "liquid",
+};
+
+elements.boiled_egg = {
+ isFood: true,
+ density: 700,
+ breakInto: "yolk",
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#fff9d1",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "liquid",
+};
+
+elements.dark_oak = {
+ breakInto: "dark_oak_wood",
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#302216",
+ behavior: behaviors.WALL,
+ category: "solids",
+ state: "solid",
+};
+
+elements.dark_oak_wood = {
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#573e28",
+ behavior: behaviors.SUPPORT,
+ category: "land",
+ state: "solid",
+};
+
+elements.avocado = {
+ isFood: true,
+ tempHigh: 500,
+ breakInto: "guacamole",
+ stateHigh: "ash",
+ color: "#254a22",
+ behavior: behaviors.SUPPORTPOWDER,
+ category: "food",
+ state: "liquid",
+};
+
+elements.guacamole = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#a2e09d",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "liquid",
+};
+
+elements.watermelon = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ breakInto: "water_from_the_melon",
+ color: "#40993f",
+ behavior: behaviors.SUPPORT,
+ category: "food",
+ state: "solid",
+};
+
+elements.water_from_the_melon = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "steam",
+ color: "#ff5d47",
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ state: "liquid",
+};
+
+elements.nachos = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#bd7b26",
+ behavior: behaviors.SUPPORTPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.cherry = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#ff0f0f",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.green_cherry = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#5ce344",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.meth = {
+ hardness: 1,
+ tempHigh: 5000,
+ stateHigh: "steam",
+ color: "#0affef",
+ behavior: behaviors.POWDER,
+ category: "powders",
+ state: "solid",
+};
+
+elements.garlic = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#ffebbd",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ reactions: {
+ "bread": { elem1: null, elem2: "garlic_bread" },
+ }
+};
+
+elements.garlic_bread = {
+ isFood: true,
+ breakInto: "crumb",
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: ["#db9b56", "#288a0c", "#db9b56", "#db9b56", "#db9b56", "#db9b56"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.kiwi = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: ["#0f4700", "#0f4700", "#0f4700", "#0f4700", "#0f4700", "#0f4700", "#0f4700", "#0f4700", "#0f4700", "#210a00"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.peanut_butter = {
+ isFood: true,
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#d4903d",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.poop = {
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#331600",
+ behavior: behaviors.STURDYPOWDER,
+ category: "special",
+ state: "solid",
+};
+
+elements.marshmallow = {
+ tempHigh: 50,
+ stateHigh: "cooked_marshmallow",
+ color: "#ffe4e3",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.cooked_marshmallow = {
+ tempHigh: 150,
+ stateHigh: "burnt_marshmallow",
+ color: "#d49e9d",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "liquid",
+};
+
+elements.burnt_marshmallow = {
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#1c1212",
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.ramen = {
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: "#fae34d",
+ behavior: behaviors.POWDER,
+ category: "food",
+ state: "solid",
+};
+
+elements.cereal = {
+ tempHigh: 500,
+ stateHigh: "ash",
+ color: ["#ba3425", "#baa31e", "#26ba1e", "#1e9dba", "#6f1eba"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "liquid",
+};