From a4c670b26c5759ec83e63c1d5ebeab5bc48f49da Mon Sep 17 00:00:00 2001
From: slweeb <91897291+slweeb@users.noreply.github.com>
Date: Thu, 15 Dec 2022 10:18:01 -0500
Subject: [PATCH] 1.7
---
changelog.txt | 45 +++-
index.html | 476 ++++++++++++++++++++++++++++++++++-----
mods/classic_textures.js | 85 +++++++
3 files changed, 551 insertions(+), 55 deletions(-)
create mode 100644 mods/classic_textures.js
diff --git a/changelog.txt b/changelog.txt
index e175c979..8d6cc6a3 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -3,6 +3,49 @@
+ Baking Update
+ More plans / suggestions at https://docs.google.com/document/u/4/d/1R8xljj_J-K5oU-9y4louwplQmM-ZBvUfXmhbgj5LYdk/edit
+[Version 1.7 - December 15, 2022 - Anniversary Update]
+ + Confetti
+ + Party Popper
+ + Balloon
+ + Evergreen Trees
+ + Pinecone, sapling equivalent
+ + Evergreen (Hidden)
+ + Gingerbread, a sturdy building material
+ + Slush, made when snow mixes with water
+ + Snow world gen type
+ + Taiga world gen type
+ + Tide Pool world gen type
+ + New party-themed random events
+ + Molten Ash
+ + AlGa alloy (Hidden)
+ + Eggnog (Hidden)
+ + Pilk (Hidden)
+ + Supporters list below game, donate to be added for life!
+ [Changes]
+ ~ Snow more resilient to heat
+ ~ Tweaked Ice color
+ ~ Improved world gen for: Flower Field, Wheat Field, Forest, Jungle, Ocean
+ ~ Dyanmite must now be triggered to explode
+ ~ Plague now dissipates over time
+ ~ Plague now dies at high temperatures
+ + Snails and Slugs can now eat Dead Plant
+ + Rats killed by Soap
+ + Soap can damage Cancer
+ + Cancer dirties Water
+ + Cancer can now be frozen
+ + Roots can freeze to death
+ + Milk and variants can wet Dirt and Sand
+ + Wet Sand can freeze
+ + Cheerful Mode for when tragedy hits
+ - Removed Yolk random event
+ [Bug Fixes]
+ ~ Fixed: Gallium freezing point too low
+ ~ Fixed: Clouds getting stuck on each other
+ ~ Fixed: Molten conductivity not being set properly
+ ~ Fixed: Dead Bug button color not showing
+ [Technical]
+ + "decor" world gen property, see "forest" or "tide_pool"
+
[Version 1.6.5 - November 16, 2022]
+ Radiated Glass
+ Gallium
@@ -12,7 +55,7 @@
+ Added Sandboxels introduction and controls underneath game
+ Loading screen
[Bug Fixes]
- ~ Fixed: Yeast immediately killed by yeast it ferments
+ ~ Fixed: Yeast immediately killed by alcohol it ferments
[Technical]
~ Revamped CSS, report any bugs on the Discord
+ New "attr1" and "attr2" reaction property
diff --git a/index.html b/index.html
index 4cf76a2e..e5b52360 100644
--- a/index.html
+++ b/index.html
@@ -603,6 +603,7 @@
"radiation": { "elem1": "dirty_water", chance:0.25 },
"uranium": { "elem1": "dirty_water", chance:0.25 },
"rotten_meat": { "elem1": "dirty_water", chance:0.25 },
+ "cancer": { "elem1": "dirty_water", chance:0.25 },
"quicklime": { "elem1": null, "elem2": "slaked_lime", },
"rock": { "elem2": "wet_sand", "chance": 0.00035 },
"ruins": { "elem2": "rock", "chance": 0.00035 },
@@ -646,6 +647,7 @@
"firefly": { "elem2":"dead_bug", "chance":0.1, "oneway":true },
"bee": { "elem2":"dead_bug", "chance":0.05, "oneway":true },
"stink_bug": { "elem2":"dead_bug", "chance":0.1, "oneway":true },
+ "cancer": { "elem1": "dirty_water", chance:0.25 },
},
state: "liquid",
density: 1026,
@@ -755,6 +757,7 @@
"sand": { "elem1": null, "elem2": "wet_sand", },
"rock": { "elem2": "wet_sand", "chance": 0.001 },
"plant": { "elem2":"dead_plant", "chance":0.05 },
+ "evergreen": { "elem2":"dead_plant", "chance":0.05 },
"grass": { "elem2":"dead_plant", "chance":0.05 },
"algae": { "elem2":null, "chance":0.05 },
"cell": { "elem2":null, "chance":0.05 },
@@ -822,6 +825,8 @@
},
tempHigh: 100,
stateHigh: "packed_sand",
+ tempLow: -50,
+ stateLow: "packed_sand",
category: "land",
state: "solid",
density: 1905,
@@ -1064,9 +1069,9 @@
density: 0.6,
},
"ice": {
- color: "#c5e9f0",
+ color: "#b2daeb",
behavior: behaviors.WALL,
- temp: 0,
+ temp: -5,
tempHigh: 5,
stateHigh: "water",
category: "solids",
@@ -1077,8 +1082,16 @@
"snow": {
color: "#e1f8fc",
behavior: behaviors.POWDER,
- temp: 0,
- tempHigh: 5,
+ reactions: {
+ "water": { "elem1":"slush", "elem2":"slush" },
+ "salt_water": { "elem1":"slush" },
+ "dirty_water": { "elem1":"slush" },
+ "pool_water": { "elem1":"slush" },
+ "sugar_water": { "elem1":"slush" },
+ "seltzer": { "elem1":"slush" },
+ },
+ temp: -5,
+ tempHigh: 18,
tempLow: -100,
stateLow: "packed_snow",
stateHigh: "water",
@@ -1086,6 +1099,24 @@
state: "solid",
density: 100,
},
+ "slush": {
+ color: "#81bcd4",
+ behavior: behaviors.LIQUID,
+ reactions: {
+ "dirt": { "elem1": null, "elem2": "mud" },
+ "sand": { "elem1": null, "elem2": "wet_sand", },
+ },
+ temp: -5,
+ tempHigh: 18,
+ tempLow: -20,
+ stateLow: "ice",
+ stateHigh: "water",
+ category: "liquids",
+ state: "liquid",
+ density: 95,
+ viscosity: 100,
+ hidden: true
+ },
"packed_snow": {
color: "#bcdde3",
behavior: behaviors.SUPPORTPOWDER,
@@ -1580,10 +1611,13 @@
},
tempHigh: 80,
stateHigh: "plague",
+ tempLow: -30,
+ stateLow: "dirty_water",
state: "solid",
density: 1000.2,
category: "life",
- breakInto: ["dirty_water","dna","dna","dna","dna"]
+ breakInto: ["dirty_water","dna","dna","dna","dna"],
+ nocheer: true
},
"dna": {
color: ["#ffe3e3","#e3e3ff","#ffffe3","#e3ffe3"],
@@ -1602,7 +1636,11 @@
},
"plague": {
color: "#36005c",
- behavior: behaviors.GAS,
+ behavior: [
+ "M2|M1|M2",
+ "M1|DL%1|M1",
+ "M2|M1|M2",
+ ],
reactions: {
"frog": { "elem2":"plague", "chance":0.05 },
"ant": { "elem2":"plague", "chance":0.05 },
@@ -1612,6 +1650,8 @@
"chlorine": { "elem1":null },
"liquid_chlorine": { "elem1":null },
},
+ tempHigh: 300,
+ stateHigh: null,
category: "life",
state: "gas",
density: 600,
@@ -1722,6 +1762,7 @@
"dead_plant": { "elem2":"dirt", "chance":0.1, func:behaviors.FEEDPIXEL },
"hyphae": { "elem2":"mycelium", "chance":0.1, func:behaviors.FEEDPIXEL },
"plant": { "elem2":"root", "chance":0.1, func:behaviors.FEEDPIXEL },
+ "evergreen": { "elem2":"root", "chance":0.1, func:behaviors.FEEDPIXEL },
"grass": { "elem2":"dirt", "chance":0.1, func:behaviors.FEEDPIXEL },
"limestone": { "elem2":"calcium", "chance":0.1, func:behaviors.FEEDPIXEL },
"quicklime": { "elem2":"calcium", "chance":0.1, func:behaviors.FEEDPIXEL },
@@ -1752,6 +1793,7 @@
],
reactions: {
"plant": { "elem2":null, chance:0.15, func:behaviors.FEEDPIXEL },
+ "evergreen": { "elem2":null, chance:0.15, func:behaviors.FEEDPIXEL },
"dead_plant": { "elem2":null, chance:0.15, func:behaviors.FEEDPIXEL },
"meat": { "elem2":null, chance:0.15, func:behaviors.FEEDPIXEL },
"cooked_meat": { "elem2":null, chance:0.15, func:behaviors.FEEDPIXEL },
@@ -1918,7 +1960,7 @@
conduct: 0.15,
},
"dead_bug": {
- color: ["#38302a","403732","#453a2e","#241d15","#242e23"],
+ color: ["#38302a","#403732","#453a2e","#241d15","#242e23"],
behavior: behaviors.POWDER,
tempHigh: 100,
stateHigh: "ash",
@@ -2210,6 +2252,7 @@
"cheese": { "elem2":null, "chance":0.2, func:behaviors.FEEDPIXEL },
"melted_cheese": { "elem2":null, "chance":0.3, func:behaviors.FEEDPIXEL },
"plant": { "elem2":null, "chance":0.1, func:behaviors.FEEDPIXEL },
+ "evergreen": { "elem2":null, "chance":0.1, func:behaviors.FEEDPIXEL },
"algae": { "elem2":null, "chance":0.2, func:behaviors.FEEDPIXEL },
"grass_seed": { "elem2":null, "chance":0.3 , func:behaviors.FEEDPIXEL},
"wheat_seed": { "elem2":null, "chance":0.3, func:behaviors.FEEDPIXEL },
@@ -2359,6 +2402,8 @@
"potassium_salt": { "elem1": "slime", "elem2": null },
"epsom_salt": { "elem1": "slime", "elem2": null },
"plant": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
+ "evergreen": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
+ "dead_plant": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
"worm": { "elem2":null, "chance":0.01, func:behaviors.FEEDPIXEL },
"mushroom_spore": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
"grass": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
@@ -2395,6 +2440,8 @@
"potassium_salt": { "elem1": "calcium", "elem2": null },
"epsom_salt": { "elem1": "calcium", "elem2": null },
"plant": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
+ "evergreen": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
+ "dead_plant": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
"worm": { "elem2":null, "chance":0.01, func:behaviors.FEEDPIXEL },
"mushroom_spore": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
"grass": { "elem2":null, "chance":0.05, func:behaviors.FEEDPIXEL },
@@ -2540,6 +2587,23 @@
hardness: 0.5,
breakInto: "calcium",
},
+ "balloon": {
+ color: ["#FE4A75","#267CB0","#1A743C","#FF6FFA","#EAEDE5","#1DC9F3","#FF0101","#F4CD32","#BEE347","#FAB937","#91C7CC"],
+ behavior: [
+ "M1%50|M1%50|M1%50",
+ "M2%5|XX|M2%5",
+ "M2%5|M2%5|M2%5",
+ ],
+ category:"special",
+ tempHigh: 120,
+ stateHigh: "pop",
+ burn: 20,
+ burnTime: 2,
+ burnInto: "pop",
+ state: "solid",
+ density: 0.164,
+ breakInto: ["confetti","helium","helium","helium"],
+ },
"antipowder": {
color: "#ebd1d8",
behavior: behaviors.AGPOWDER,
@@ -2664,6 +2728,13 @@
category:"powders",
state: "solid",
density: 700,
+ tempHigh: 2000,
+ forceAutoGen: true,
+ stateHigh: ["molten_ash","smoke","smoke","smoke"]
+ },
+ "molten_ash": {
+ tempHigh: 3550,
+ stateHigh: "smoke"
},
"light": {
color: "#fffdcf",
@@ -2944,6 +3015,7 @@
reactions: {
"methane": { "elem1":null, "elem2":"cyanide", "chance":0.25 },
"plant": { "elem1":"plant", "chance":0.05 },
+ "evergreen": { "elem1":"evergreen", "chance":0.05 },
"wheat_seed": { "elem1":"wheat", "chance":0.05 },
"grass": { "elem1":"grass", "chance":0.05 },
"grass_seed": { "elem1":"grass", "chance":0.05 },
@@ -2977,6 +3049,7 @@
behavior: behaviors.GAS,
reactions: {
"plant": { "elem1":"oxygen" },
+ "evergreen": { "elem1":"oxygen" },
"algae": { "elem1":"oxygen" },
},
category: "gases",
@@ -3207,6 +3280,81 @@
cooldown: defaultCooldown,
seed: true
},
+ "pinecone": {
+ color: ["#5c3e33","#472f27","#31211b"],
+ tick: function(pixel) {
+ if (!tryMove(pixel,pixel.x,pixel.y+1) && pixelTicks-pixel.start > 50) {
+ if (pixel.h === undefined) { // set to even number between 6 and 20
+ pixel.h = Math.floor(Math.random()*7)*2+6;
+ }
+ if (Math.random() < 0.02 && pixel.h > 0 && pixel.temp < 100) {
+ if (!outOfBounds(pixel.x,pixel.y+1)) { // grow roots
+ 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);
+ if (pixel.h % 2 && pixel.h < 12) {
+ createPixel("evergreen",pixel.x,pixel.y+1);
+ pixelMap[pixel.x][pixel.y+1].h = pixel.h;
+ }
+ else {
+ createPixel("wood",pixel.x,pixel.y+1);
+ }
+ pixel.h --;
+ }
+ }
+ else if (pixel.h === 0) {
+ changePixel(pixel,"evergreen");
+ }
+ }
+ doDefaults(pixel);
+ },
+ tempHigh: 400,
+ stateHigh: "fire",
+ burn: 65,
+ burnTime: 15,
+ category: "life",
+ state: "solid",
+ density: 1500,
+ cooldown: defaultCooldown,
+ seed: true
+ },
+ "evergreen": {
+ color: "#006300",
+ tick: function (pixel) {
+ if (pixel.h > 0 && pixelTicks % (50+pixel.h) === 0) {
+ // extend to the left and right, giving the next evergreen h-1
+ if (isEmpty(pixel.x-1,pixel.y)) {
+ createPixel("evergreen",pixel.x-1,pixel.y);
+ pixelMap[pixel.x-1][pixel.y].h = pixel.h-2;
+ }
+ if (isEmpty(pixel.x+1,pixel.y)) {
+ createPixel("evergreen",pixel.x+1,pixel.y);
+ pixelMap[pixel.x+1][pixel.y].h = pixel.h-2;
+ }
+ }
+ 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 },
+ },
+ category:"life",
+ tempHigh: 120,
+ stateHigh: "dead_plant",
+ burn:45,
+ burnTime:75,
+ burnInto: "dead_plant",
+ state: "solid",
+ density: 1050,
+ seed: "pinecone",
+ hidden: true
+ },
"seeds": {
color: ["#359100","#74b332","#b9d461","#dede7a"],
tick: function(pixel) {
@@ -3763,6 +3911,7 @@
"wood": { "elem2":"dirt", "chance":0.04 },
"tree_brake": { "elem2":"dirt", "chance":0.04 },
"plant": { "elem2":"dirt", "chance":0.07 },
+ "evergreen": { "elem2":"dirt", "chance":0.07 },
"root": { "elem2":"dirt", "chance":0.07 },
"grass": { "elem2":"dirt", "chance":0.08 },
"grass_seed": { "elem2":"dirt", "chance":0.08 },
@@ -3788,6 +3937,7 @@
"wood": { "elem2":"dirt", "chance":0.04 },
"tree_brake": { "elem2":"dirt", "chance":0.04 },
"plant": { "elem2":"dirt", "chance":0.07 },
+ "evergreen": { "elem2":"dirt", "chance":0.07 },
"root": { "elem2":"dirt", "chance":0.07 },
"grass": { "elem2":"dirt", "chance":0.08 },
"grass_seed": { "elem2":"dirt", "chance":0.08 },
@@ -3870,6 +4020,7 @@
"wood": { "elem2":"dirt", "chance":0.04 },
"tree_brake": { "elem2":"dirt", "chance":0.04 },
"plant": { "elem2":"dirt", "chance":0.07 },
+ "evergreen": { "elem2":"dirt", "chance":0.07 },
"root": { "elem2":"dirt", "chance":0.07 },
"grass": { "elem2":"dirt", "chance":0.08 },
"grass_seed": { "elem2":"dirt", "chance":0.08 },
@@ -4130,7 +4281,7 @@
hardness: 0.4,
},
"zinc": {
- color: ["#7C7A7B","#9D9D9F","#F8F8F3"],
+ color: ["#8d8c8e","#f6f6f1","#c7c7c5","#ccccca","#6b6a6a","#848382"],
behavior: behaviors.WALL,
tempHigh: 419.53,
category: "solids",
@@ -4238,9 +4389,11 @@
color: ["#f7f7f7","#d9d7d7"],
behavior: behaviors.LIQUID,
tempHigh: 2400,
+ tempLow: 29.76,
+ stateLow: "gallium",
reactions: {
- "aluminum": { "elem2":null, chance:0.005 },
- "molten_aluminum": { "elem2":null, chance:0.025 },
+ "aluminum": { "elem2":["alga",null], chance:0.01 },
+ "molten_aluminum": { "elem2":["molten_alga",null], chance:0.05 },
"sodium": { "elem1":"hydrogen", "elem2":"salt", chance:0.005 },
"steel": { "elem2":"iron", chance:0.005 },
},
@@ -4345,6 +4498,10 @@
"melted_chocolate": { "elem1":"chocolate_milk", "elem2":null },
"chocolate": { "elem1":"chocolate_milk", "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 },
+ "dirt": { "elem1": null, "elem2": "mud" },
+ "sand": { "elem1": null, "elem2": "wet_sand", },
},
tempHigh: 93,
stateHigh: "yogurt",
@@ -4356,6 +4513,10 @@
"chocolate_milk": {
color: "#664934",
behavior: behaviors.LIQUID,
+ reactions: {
+ "dirt": { "elem1": null, "elem2": "mud" },
+ "sand": { "elem1": null, "elem2": "wet_sand", },
+ },
tempHigh: 200,
stateHigh: "smoke",
viscosity: 1.5,
@@ -4367,6 +4528,10 @@
"fruit_milk": {
color: "#c9988f",
behavior: behaviors.LIQUID,
+ reactions: {
+ "dirt": { "elem1": null, "elem2": "mud" },
+ "sand": { "elem1": null, "elem2": "wet_sand", },
+ },
tempHigh: 200,
stateHigh: "smoke",
viscosity: 1.5,
@@ -4375,6 +4540,36 @@
density: 1045,
hidden: true,
},
+ "pilk": {
+ color: "#E9CBA3",
+ behavior: behaviors.LIQUID,
+ reactions: {
+ "dirt": { "elem1": null, "elem2": "mud" },
+ "sand": { "elem1": null, "elem2": "wet_sand", },
+ },
+ tempHigh: 200,
+ stateHigh: ["smoke","smoke","sugar","steam","carbon_dioxide"],
+ viscosity: 1.25,
+ category: "liquids",
+ state: "liquid",
+ density: 1033,
+ hidden: true,
+ },
+ "eggnog": {
+ color: "#DDBF98",
+ behavior: behaviors.LIQUID,
+ reactions: {
+ "dirt": { "elem1": null, "elem2": "mud" },
+ "sand": { "elem1": null, "elem2": "wet_sand", },
+ },
+ tempHigh: 200,
+ stateHigh: "smoke",
+ viscosity: 1.5,
+ category: "liquids",
+ state: "liquid",
+ density: 1033,
+ hidden: true,
+ },
"yogurt": {
color: "#f0efe6",
behavior: [
@@ -4617,6 +4812,8 @@
},
tempHigh: 275,
stateHigh: "dirt",
+ tempLow: -50,
+ stateLow: "fiber",
burn: 20,
burnTime: 60,
burnInto: "dirt",
@@ -4673,6 +4870,10 @@
"bread": {
color: "#F2CF99",
behavior: behaviors.STURDYPOWDER,
+ reactions: {
+ "honey": { "elem1":"gingerbread", "elem2":null },
+ "molasses": { "elem1":"gingerbread", "elem2":null },
+ },
tempHigh: 176,
stateHigh: "toast",
category: "food",
@@ -4694,6 +4895,18 @@
state: "solid",
density: 233.96,
},
+ "gingerbread": {
+ color: ["#a66530","#BF773D","#cc7d41"],
+ behavior: behaviors.SUPPORT,
+ tempHigh: 875,
+ stateHigh: "ash",
+ category: "food",
+ burn: 30,
+ burnTime: 200,
+ burnInto: ["smoke","smoke","smoke","ash"],
+ state: "solid",
+ density: 233.96,
+ },
"wheat": {
color: ["#F1B569","#EDB864","#DE9C45","#C2853D"],
behavior: behaviors.WALL,
@@ -4889,6 +5102,8 @@
"soda": { "elem2": "sugar_water" },
"ink": { "elem2": null },
"dye": { "elem2": null },
+ "cancer": { "elem2": null, "chance":0.01 },
+ "rat": { "elem2": null, "chance":0.01 },
},
tempHigh: 100,
stateHigh: "bubble",
@@ -5020,7 +5235,11 @@
"cancer": { "elem1":"infection" },
"cyanide": { "elem1":"infection", "elem2":null },
"mushroom_spore": { "elem1":"infection", "elem2":null },
+ "mushroom_gill": { "elem1":"infection" },
"dirty_water": { "elem1":"infection", "elem2":null },
+ "rad_steam": { "elem1":"infection" },
+ "rad_glass": { "elem1":"infection" },
+ "rad_cloud": { "elem1":"infection" },
"rust": { "elem1":"infection", "chance":0.05 },
"oxidized_copper": { "elem1":"infection", "chance":0.05 },
"rat": { "elem1":"infection", "chance":0.075 },
@@ -5106,6 +5325,7 @@
"water": { "elem1":null, "elem2":"dirty_water" },
"soap": { "elem1":null, "chance":0.02 },
"plant": { "elem1":null, "elem2":"dead_plant" },
+ "evergreen": { "elem1":null, "elem2":"dead_plant" },
"grass": { "elem1":null, "elem2":"dead_plant" },
"vine": { "elem1":null, "elem2":"dead_plant" },
"algae": { "elem1":null, "elem2":null },
@@ -5813,6 +6033,7 @@
"snow_cloud": { "elem2":"rad_cloud", "chance":0.4 },
"hail_cloud": { "elem2":"rad_cloud", "chance":0.4 },
"plant": { "elem2":"dead_plant", "chance":0.4 },
+ "evergreen": { "elem2":["dead_plant","plant"], "chance":0.4 },
"frozen_plant": { "elem2":"dead_plant", "chance":0.4 },
"grass": { "elem2":["dead_plant","straw","grass_seed","wheat_seed"], "chance":0.4 },
"algae": { "elem2":["mushroom_spore","lichen","yeast"], "chance":0.4 },
@@ -6035,6 +6256,19 @@
conduct: 0.85,
hardness: 0.2
},
+ "alga": {
+ name: "AlGa",
+ color: ["#bab2ab","#a3ab9d","#a5a4a6","#bcc7b3","#d4c5b8","#cac6cf"],
+ behavior: behaviors.SUPPORT,
+ tempHigh: 345.03,
+ category: "powders",
+ state: "solid",
+ density: 3905,
+ conduct: 0.39,
+ hardness: 0.1,
+ alias: "gallanylidynealumane",
+ hidden: true
+ },
"metal_scrap": {
color: ["#b0afb4","#8c8f98","#cbcdcd","#6c6c6a","#fef9ff"],
behavior: behaviors.POWDER,
@@ -6093,6 +6327,22 @@
state: "solid",
density: 500,
},
+ "confetti": {
+ color: ["#DC2C37","#EDCE66","#0DBF62","#0679EA","#7144B2","#D92097"],
+ behavior: [
+ "XX|XX|XX",
+ "XX|FX%0.25|XX",
+ "M2%25|M1%25|M1%25",
+ ],
+ category: "powders",
+ tempHigh: 248,
+ stateHigh: ["ash","smoke","smoke","fire"],
+ burn:15,
+ burnTime:150,
+ burnInto: ["ash","smoke","smoke","smoke"],
+ state: "solid",
+ density: 1201,
+ },
"glitter": {
color: ["#ACE4FB","#D9FCFF","#8F6EB2","#FDEAFC","#180E1C","#6B2778"],
behavior: behaviors.POWDER,
@@ -6336,20 +6586,26 @@
stateHigh: "molten_steel",
excludeRandom: true,
conduct: 1,
- cooldown: defaultCooldown
+ cooldown: defaultCooldown,
+ nocheer: true
},
"dynamite": {
color: ["#de5050","#c92a2a","#a61919"],
- behavior: [
- "XX|EX:15%1|XX",
+ behavior: behaviors.POWDER,
+ behaviorOn: [
+ "XX|XX|XX",
+ "XX|CH:explosion|XX",
"XX|XX|XX",
- "M2|M1 AND EX:15%1|M2",
],
+ conduct: 1,
category: "weapons",
- state: "solid",
- density: 1300,
tempHigh: 600,
stateHigh: "explosion",
+ burn: 100,
+ burnTime: 1,
+ burnInto: "explosion",
+ state: "solid",
+ density: 1300,
breakInto: "explosion",
excludeRandom: true,
},
@@ -6621,6 +6877,19 @@
excludeRandom: true,
cooldown: defaultCooldown
},
+ "party_popper": {
+ color: ["#DC2C37","#EDCE66","#0DBF62","#0679EA","#7144B2","#D92097"],
+ behavior: [
+ "XX|EX:15>confetti,flash,flash,smoke|XX",
+ "XX|XX|XX",
+ "M2|M1 AND EX:15>confetti,flash,flash,smoke|M2",
+ ],
+ category: "weapons",
+ state: "solid",
+ density: 1300,
+ excludeRandom: true,
+ cooldown: defaultCooldown
+ },
"flashbang": {
color: "#65665c",
behavior: [
@@ -6670,7 +6939,8 @@
tempHigh: 1455.5,
stateHigh: "molten_steel",
excludeRandom: true,
- cooldown: defaultCooldown
+ cooldown: defaultCooldown,
+ nocheer: true
},
"fireball": {
color: ["#782828","#783b28","#784b28"],
@@ -6708,7 +6978,8 @@
tempHigh: 1455.5,
stateHigh: "molten_steel",
excludeRandom: true,
- cooldown: defaultCooldown
+ cooldown: defaultCooldown,
+ nocheer: true
},
"cluster_bomb": {
color: "#7d776d",
@@ -6730,7 +7001,7 @@
behavior: [
"XX|XX|XX",
"XX|EX:10>armageddon,fire,fire,fire,fire,fire,fire,fire,fire,fire,fire,fire,fire%25 AND DL%10|XX",
- "M2|M1|M2",
+ "XX|XX|XX",
],
category: "weapons",
state: "solid",
@@ -6845,7 +7116,7 @@
density: 955,
},
"molten_slag": {
- ignore: ["salt","plastic","sulfur","epsom_salt","potassium_salt","borax","solder"]
+ ignore: ["salt","plastic","sulfur","epsom_salt","potassium_salt","borax","solder","ash"]
},
"molten_dirt": {
stateLow: "mudstone"
@@ -7682,7 +7953,7 @@
}
// Bounce
else if (b === "BO") {
- if (!isEmpty(newCoords.x,newCoords.y) && (outOfBounds(newCoords.x,newCoords.y) || elements[pixelMap[newCoords.x][newCoords.y].element].state === "solid")) {
+ if (!isEmpty(newCoords.x,newCoords.y) && (outOfBounds(newCoords.x,newCoords.y) || elements[pixelMap[newCoords.x][newCoords.y].element].id === elements[pixel.element].id || elements[pixelMap[newCoords.x][newCoords.y].element].state === "solid")) {
if (info.flippableX) {
pixel.flipX = !pixel.flipX;
}
@@ -8378,6 +8649,16 @@
[array[i], array[j]] = [array[j], array[i]];
}
}
+ adjacentCoords = [
+ [0,1],
+ [0,-1],
+ [1,0],
+ [-1,0]
+ ];
+ biCoords = [
+ [0,1],
+ [1,0]
+ ];
function drawPixels(forceTick=false) {
// newCurrentPixels = shuffled currentPixels
var newCurrentPixels = currentPixels.slice();
@@ -8409,16 +8690,6 @@
pixelsFirst.push(pixel);
}
}
- adjacentCoords = [
- [0,1],
- [0,-1],
- [1,0],
- [-1,0]
- ];
- biCoords = [
- [0,1],
- [1,0]
- ];
// Draw the current pixels
var canvas = document.getElementById("game");
var ctx = canvas.getContext("2d");
@@ -8934,12 +9205,14 @@
// if the element has the attribute "name", use that as the button's text, otherwise use the element with underscores replaced by spaces
if (elements[element].name) {
button.innerHTML = elements[element].name;
+ // make sure the first letter is capitalized
+ button.innerHTML = button.innerHTML.charAt(0).toUpperCase() + button.innerHTML.slice(1);
}
else {
button.innerHTML = element.replace(/_/g, " ");
+ //capitalize first letter of each word
+ button.innerHTML = button.innerHTML.replace("."," ").replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}).replace(" ",".").replace(/ /g, "");
}
- //capitalize first letter of each word
- button.innerHTML = button.innerHTML.replace("."," ").replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}).replace(" ",".").replace(/ /g, "");
//set attribute of element to the element
button.setAttribute("element", element);
button.setAttribute("current", "false");
@@ -9028,22 +9301,41 @@
},
"flower_field": {
layers: [
- [0.85, "flower_seed", 0.1],
- [0.85, "grass"],
+ [0.90, "grass"],
[0.50, "dirt"],
[0.05, "rock"],
[0, "basalt"],
- ]
+ ],
+ decor: [
+ ["flower_seed", 0.1]
+ ],
},
"wheat_field": {
layers: [
- [0.95, "wheat_seed"],
[0.50, "mud"],
[0.25, "rock"],
[0, "basalt"],
],
+ decor: [
+ ["wheat_seed", 0.25]
+ ],
baseHeight: 0.35
},
+ "tide_pool": {
+ layers: [
+ [0.98, "primordial_soup"],
+ [0.92, "water"],
+ [0.50, "sand"],
+ [0.25, "rock"],
+ [0, "basalt"],
+ ],
+ decor: [
+ ["methane", 0.1],
+ ["rain_cloud", 0.75]
+ ],
+ baseHeight: 0.35,
+ temperature: 30,
+ },
"dirt": {
layers: [
[0.50, "dirt"],
@@ -9051,31 +9343,64 @@
[0, "basalt"],
]
},
- "forest": {
+ "snow": {
layers: [
- [0.85, "sapling", 0.1],
- [0.85, "grass"],
+ [0.85, "snow"],
[0.50, "dirt"],
[0.05, "rock"],
[0, "basalt"],
],
+ decor: [
+ ["pinecone", 0.05],
+ ["snow_cloud", 0.75]
+ ],
+ baseHeight: 0.25,
+ temperature: -5,
+ },
+ "forest": {
+ layers: [
+ [0.95, "grass"],
+ [0.50, "dirt"],
+ [0.05, "rock"],
+ [0, "basalt"],
+ ],
+ decor: [ // [element, chance, distance from top]
+ ["sapling", 0.075],
+ ["bird", 0.025, 10],
+ ],
baseHeight: 0.25,
},
"jungle": {
layers: [
- [0.85, "sapling", 0.1],
- [0.85, "grass"],
+ [0.95, "grass"],
[0.50, "mud"],
[0.05, "gravel"],
[0, "basalt"],
],
+ decor: [
+ ["sapling", 0.075],
+ ["bamboo_plant", 0.05],
+ ["frog", 0.05, 10],
+ ["bird", 0.05, 5, ["#ff0000","#00ff00","#00ffff","#0000ff"]],
+ ],
baseHeight: 0.25,
},
+ "taiga": {
+ layers: [
+ [0.95, "mud"],
+ [0.50, "dirt"],
+ [0.05, "rock"],
+ [0, "basalt"],
+ ],
+ decor: [
+ ["pinecone", 0.075],
+ ["snow_cloud", 0.75]
+ ],
+ baseHeight: 0.25,
+ temperature: -5,
+ },
"ocean": {
layers: [
- [0.9, "fish", 0.1],
- [0.9, "snail", 0.01],
- [0.9, "algae", 0.4],
[0.25, "water"],
[0.1, "clay", 0.1],
[0.1, "gravel", 0.2],
@@ -9083,6 +9408,11 @@
[0.03, "gravel", 0.5],
[0.03, "rock"],
[0, "basalt"],
+ ],
+ decor: [
+ ["fish", 0.1, 10],
+ ["snail", 0.01, 10],
+ ["algae", 0.4, 10],
]
},
"rock": {
@@ -9097,6 +9427,9 @@
[0.2, "basalt", 0.5],
[0, "magma"]
],
+ decor: [
+ ["pyrocumulus", 0.75]
+ ],
baseHeight: 0.4,
temperature: 950
},
@@ -9191,6 +9524,28 @@
}
}
}
+ // decor
+ if (worldtype.decor) {
+ for (var i = 0; i < worldtype.decor.length; i++) {
+ var decor = worldtype.decor[i];
+ var element = decor[0];
+ var chance = decor[1];
+ for (var x = 1; x < width; x++) {
+ var y = decor[2] || 5;
+ // add or subtract worldtype.decorVariance from y
+ y += Math.round(Math.random()*(worldtype.decorVariance||2) - (worldtype.decorVariance||2)/2);
+ if (Math.random() < chance && isEmpty(x,y)) {
+ createPixel(element,x,y);
+ if (worldtype.temperature) {
+ pixelMap[x][y].temp = worldtype.temperature;
+ }
+ if (decor[3]) {
+ pixelMap[x][y].color = pixelColorPick(pixelMap[x][y],decor[3])
+ }
+ }
+ }
+ }
+ }
}
randomEvents = {
@@ -9250,9 +9605,9 @@
}
}
randomEventChoices = {
- "falling_pixel": ["fireball","fallout","seeds",["bomb","cold_bomb","cluster_bomb"],"human","gold_coin","feather","glitter","homunculus","egg","frozen_frog","sapling","smoke_grenade"],
- "element_circle": ["carbon_dioxide","primordial_soup","fly","steam","oxygen","dye","yolk","sugar","bee","firefly","tadpole","flash","foam"],
- "explosion": ["fire","cold_fire","methane","electric","light","laser","radiation","plasma","liquid_nitrogen","liquid_helium","liquid_neon","acid_gas","fw_ember","malware",["stench","plague"],["firework","fire","fire"],"bubble"],
+ "falling_pixel": ["fireball","fallout","seeds",["bomb","cold_bomb","cluster_bomb"],"human","gold_coin","feather","glitter","homunculus","egg","frozen_frog","sapling","smoke_grenade","party_popper"],
+ "element_circle": ["carbon_dioxide","primordial_soup","fly","steam","oxygen","sugar","bee","firefly","tadpole","flash","foam"],
+ "explosion": ["fire","cold_fire","methane","electric","light","laser","radiation","plasma","liquid_nitrogen","liquid_helium","liquid_neon","acid_gas","fw_ember","malware",["stench","plague"],["firework","fire","fire"],"bubble","confetti","balloon","dye"],
}
function doRandomEvents() {
var chance = settings.events;
@@ -9861,7 +10216,7 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
newelem.colorObject = colorObjectList;
var multiplier = 1.1;
if (autoInfo.type === "high") {
- elements[element].stateHigh = newname;
+ if (!elements[element].stateHigh) {elements[element].stateHigh = newname;}
newelem.temp = elements[element].tempHigh;
newelem.tempLow = elements[element].tempHigh+(autoInfo.tempDiff || 0);
newelem.stateLow = element;
@@ -9869,7 +10224,7 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
if (elements[element].density) { newelem.density = Math.round(elements[element].density * 0.9 * 10) / 10; }
}
else if (autoInfo.type === "low") {
- elements[element].stateLow = newname;
+ if (!elements[element].stateLow) {elements[element].stateLow = newname;}
newelem.temp = elements[element].tempLow;
newelem.tempHigh = elements[element].tempLow+(autoInfo.tempDiff || 0);
newelem.stateHigh = element;
@@ -9883,7 +10238,7 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
newelem.viscosity = elements[element].viscosity || autoInfo.viscosity;
}
// Change by *multiplier
- if (elements[element].conduct) { newelem.conductivity = Math.round(elements[element].conduct * multiplier * 10) / 10; }
+ if (elements[element].conduct) { newelem.conduct = Math.round(elements[element].conduct * multiplier * 10) / 10; }
if (elements[element].burn) { newelem.burn = Math.round(elements[element].burn * multiplier * 10) / 10; }
if (elements[element].burnTime) { newelem.burnTime = Math.round(elements[element].burnTime * multiplier * 10) / 10; }
if (elements[element].burnInto) { newelem.burnInto = elements[element].burnInto; }
@@ -9908,7 +10263,7 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
}
// Loop through each element. If it has a tempHigh, but not a stateHigh, create a new molten element
for (element in elements) {
- if (elements[element].tempHigh!==undefined && elements[element].stateHigh===undefined) {
+ if (elements[element].tempHigh!==undefined && (elements[element].stateHigh===undefined||elements[element].forceAutoGen)) {
var newname = elements[element].stateHighName;
if ((elements[element].state==="solid" || !elements[element].state)) { // Melting
if (!newname) { newname = "molten_"+element }
@@ -9924,7 +10279,7 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
autoGen(newname,element,"evaporate");
}
}
- if (elements[element].tempLow!==undefined && elements[element].stateLow===undefined) {
+ if (elements[element].tempLow!==undefined && (elements[element].stateLow===undefined||elements[element].forceAutoGen)) {
var newname = elements[element].stateLowName;
if (elements[element].state==="liquid") { // Freezing
if (!newname) {
@@ -10448,6 +10803,11 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
categoryList = [];
for (var element in elements) {
elementCount++;
+ if (settings.cheerful && elements[element].nocheer) {
+ elements[element].hidden = true;
+ hiddenCount++;
+ continue;
+ }
var category = elements[element].category;
if (category==null) {category="other"}
if (categoryList.indexOf(category) === -1) {
@@ -10610,6 +10970,14 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
+
+ Cheerful Mode ?
+
+
@@ -10622,7 +10990,6 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
-
@@ -10639,6 +11006,7 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
Sandboxels has many applications in education. It can give students an understanding of emerging phenomena in many fields, such as biology, chemistry, ecology, geology, and even virology. There are countless aspects to discover.
We have a thriving community on Discord! There you can post feedback or share your creations.
If you'd like to support us, consider donating on PayPal or CashApp.
+Thanks to our supporters: Serioustar the Beholder
This game is developed by R74n. Check out our other projects!