diff --git a/mod-list.html b/mod-list.html
index 41153a67..6e09f5ed 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -184,6 +184,7 @@
| bioooze_and_pyrogens.js | Adds Bio-Ooze from Frackin’ Universe and several heat-producing materials from various games’ mods | Alice |
| boiling_things.js | Allows for various elements to be vaporized | Alice |
| bouncing_balls.js | Adds new types of balls that bounce accurately and roll. | Nekonico |
+| bromine.js | Adds bromine which emits an orange gas | Suss |
| chalcopyrite.js | Adds the chalcopyrite ore | Sophie |
| chem.js | Adds several chemistry and physics-related elements | lllllllllwith10ls |
| clf3.js | Adds Chlorine Trifluoride | Alice |
@@ -214,6 +215,7 @@
| 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 |
+| stickyslime.js | Allows slime to stick to other elements | Suss |
| the_ground.js | Adds several rock types, worldgen settings, and gemstones | Alice |
| Machines & Technology |
@@ -329,6 +331,7 @@
| funnynames.js | Adds various ways to mess with the names of elements | nousernamefound |
| haseulite.js | Adds Loona-related materials with various properties | Alice |
| lactose_intolerance_and_celiac.js | Makes humans explode on contact with milk, wheat, bread, or toast | Nubo318 |
+| lattice_filler.js | Adds a combination of lattice and filler and adds a destructive variant | Suss |
| lone_urea.js | Adds urea without the rest of the piss mod | Alice |
| maze.js | Adds a solvable maze generator | ggod |
| memelists.js | Makes it so you must select elements through a list at the bottom of the page. We like lists | mollthecoder |
diff --git a/mods/biology.js b/mods/biology.js
index ac78d0f3..077b920c 100644
--- a/mods/biology.js
+++ b/mods/biology.js
@@ -2797,6 +2797,10 @@ elements.acid_vessel = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
else if (isEmpty(pixel.x, pixel.y-1) && Math.random() > 0.75) {
@@ -2821,6 +2825,10 @@ elements.acid_vessel = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
else if (isEmpty(pixel.x, pixel.y+1) && Math.random() > 0.75) {
@@ -2845,6 +2853,10 @@ elements.acid_vessel = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
else if (isEmpty(pixel.x-1, pixel.y) && Math.random() > 0.75) {
@@ -2869,6 +2881,10 @@ elements.acid_vessel = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
else if (isEmpty(pixel.x+1, pixel.y) && Math.random() > 0.75) {
@@ -2961,6 +2977,10 @@ elements.heart = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && hitPixel.heartAttached === false && Math.random() > 0.5) {
hitPixel.heartAttached = true
}
@@ -2984,6 +3004,10 @@ elements.heart = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && hitPixel.heartAttached === false && Math.random() > 0.5) {
hitPixel.heartAttached = true
}
@@ -3007,6 +3031,10 @@ elements.heart = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && hitPixel.heartAttached === false && Math.random() > 0.5) {
hitPixel.heartAttached = true
}
@@ -3030,6 +3058,10 @@ elements.heart = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && hitPixel.heartAttached === false && Math.random() > 0.5) {
hitPixel.heartAttached = true
}
@@ -3055,7 +3087,7 @@ elements.heart = {
burn: 20,
burnTime: 160,
burnInto: "meat",
- breakInto: "blood",
+ breakInto: ["meat","blood","blood",],
category: "circulation",
state: "solid",
density: 1250,
@@ -3081,24 +3113,24 @@ elements.kidney = {
}
if (Math.random() > 0.5 && (pixel.nutrition < 1 || pixel.oxygen < 1 || pixel.speed < -100)) {
if (pixel.temp > 95) {
- if (Math.random() < 0.75) {
- changePixel(pixel,"meat");
+ if (Math.random() > 0.9 && pixel.pee > 0) {
+ changePixel(pixel,"urine");
}
else {
changePixel(pixel,"cooked_meat");
}
}
else if (pixel.temp < -15) {
- if (Math.random() < 0.75) {
- changePixel(pixel,"meat");
+ if (Math.random() > 0.9 && pixel.pee > 0) {
+ changePixel(pixel,"urine");
}
else {
changePixel(pixel,"frozen_meat");
}
}
else {
- if (Math.random() < 0.999) {
- changePixel(pixel,"meat");
+ if (Math.random() > 0.9 && pixel.pee > 0) {
+ changePixel(pixel,"urine");
}
else {
changePixel(pixel,"rotten_meat");
@@ -3125,13 +3157,26 @@ elements.kidney = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
- if (elements[hitPixel.element].id === elements.infected_vessel.id && Math.random() > 0.75) {
- if (Math.random() > 0.5 && Math.random() < (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2020))) {
- changePixel(hitPixel,"blood_vessel");
- }
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
+ if (hitPixel.pee < pixel.pee && elements[hitPixel.element].isKidney === true) {
+ hitPixel.pee += 1
+ pixel.pee -= 1
+ }
+ if (elements[hitPixel.element].isBlood === true && Math.random() < 0.025 && (hitPixel.speed < 1 || Math.random() < 0.00025) && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ hitPixel.speed++
+ pixel.pee += 1
}
}
}
+ else if (pixel.pee > 4 && Math.random() > 0.95) {
+ if (Math.random() > 0.8) {
+ createPixel("urine",pixel.x,pixel.y-1)
+ }
+ pixel.pee -= 5
+ }
if (!isEmpty(pixel.x, pixel.y+1, true)) {
var hitPixel = pixelMap[pixel.x][pixel.y+1]
if (elements[hitPixel.element].isBio === true && Math.random() > 0.5) {
@@ -3143,13 +3188,26 @@ elements.kidney = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
- if (elements[hitPixel.element].id === elements.infected_vessel.id && Math.random() > 0.75) {
- if (Math.random() > 0.5 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
- changePixel(hitPixel,"blood_vessel");
- }
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
+ if (hitPixel.pee < pixel.pee && elements[hitPixel.element].isKidney === true) {
+ hitPixel.pee += 1
+ pixel.pee -= 1
+ }
+ if (elements[hitPixel.element].isBlood === true && Math.random() < 0.025 && (hitPixel.speed < 1 || Math.random() < 0.00025) && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ hitPixel.speed++
+ pixel.pee += 1
}
}
}
+ else if (pixel.pee > 4 && Math.random() > 0.95) {
+ if (Math.random() > 0.8) {
+ createPixel("urine",pixel.x,pixel.y+1)
+ }
+ pixel.pee -= 5
+ }
if (!isEmpty(pixel.x-1, pixel.y, true)) {
var hitPixel = pixelMap[pixel.x-1][pixel.y]
if (elements[hitPixel.element].isBio === true && Math.random() > 0.5) {
@@ -3161,13 +3219,26 @@ elements.kidney = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
- if (elements[hitPixel.element].id === elements.infected_vessel.id && Math.random() > 0.75) {
- if (Math.random() > 0.5 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
- changePixel(hitPixel,"blood_vessel");
- }
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
+ if (hitPixel.pee < pixel.pee && elements[hitPixel.element].isKidney === true) {
+ hitPixel.pee += 1
+ pixel.pee -= 1
+ }
+ if (elements[hitPixel.element].isBlood === true && Math.random() < 0.025 && (hitPixel.speed < 1 || Math.random() < 0.00025) && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ hitPixel.speed++
+ pixel.pee += 1
}
}
}
+ else if (pixel.pee > 4 && Math.random() > 0.95) {
+ if (Math.random() > 0.8) {
+ createPixel("urine",pixel.x-1,pixel.y)
+ }
+ pixel.pee -= 5
+ }
if (!isEmpty(pixel.x+1, pixel.y, true)) {
var hitPixel = pixelMap[pixel.x+1][pixel.y]
if (elements[hitPixel.element].isBio === true && Math.random() > 0.5) {
@@ -3179,18 +3250,38 @@ elements.kidney = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
- if (elements[hitPixel.element].id === elements.infected_vessel.id && Math.random() > 0.75) {
- if (Math.random() > 0.5 && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
- changePixel(hitPixel,"blood_vessel");
- }
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
+ if (hitPixel.pee < pixel.pee && elements[hitPixel.element].isKidney === true) {
+ hitPixel.pee += 1
+ pixel.pee -= 1
+ }
+ if (elements[hitPixel.element].isBlood === true && Math.random() < 0.025 && (hitPixel.speed < 1 || Math.random() < 0.00025) && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ hitPixel.speed++
+ pixel.pee += 1
}
}
}
+ else if (pixel.pee > 4 && Math.random() > 0.95) {
+ if (Math.random() > 0.8) {
+ createPixel("urine",pixel.x+1,pixel.y)
+ }
+ pixel.pee -= 5
+ }
},
properties: {
oxygen: 1000,
nutrition: 1000,
speed: 0,
+ pee: 0,
+ },
+ renderer: function(pixel,ctx) {
+ drawDefault(ctx,pixel);
+ if (pixel.pee > 0) {
+ drawSquare(ctx,"#E9BE3C",pixel.x,pixel.y,undefined,Math.min(0.8,pixel.pee/10));
+ }
},
tempHigh: 175,
stateHigh: "meat",
@@ -3199,13 +3290,14 @@ elements.kidney = {
burn: 20,
burnTime: 160,
burnInto: "meat",
- breakInto: "blood",
+ breakInto: ["meat","urine","blood"],
category: "circulation",
state: "solid",
density: 1250,
conduct: .001,
movable: false,
isBio: true,
+ isKidney: true,
}
elements.liver = {
@@ -3272,6 +3364,10 @@ elements.liver = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
if (!isEmpty(pixel.x, pixel.y+1, true)) {
@@ -3285,6 +3381,10 @@ elements.liver = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
if (!isEmpty(pixel.x-1, pixel.y, true)) {
@@ -3298,6 +3398,10 @@ elements.liver = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
if (!isEmpty(pixel.x+1, pixel.y, true)) {
@@ -3311,6 +3415,10 @@ elements.liver = {
hitPixel.nutrition += 20
pixel.nutrition -= 20
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
}
}
},
@@ -3326,7 +3434,7 @@ elements.liver = {
burn: 20,
burnTime: 160,
burnInto: "meat",
- breakInto: "blood",
+ breakInto: ["meat","rotten_meat","blood",],
category: "nutrition",
state: "solid",
density: 1250,
@@ -3835,6 +3943,10 @@ elements.white_blood_cell = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && Math.random() > 0.25) {
if (elements[hitPixel.element].id === elements.infected_vessel.id) {
changePixel(hitPixel,"blood_vessel")
@@ -3860,6 +3972,10 @@ elements.white_blood_cell = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && Math.random() > 0.25) {
if (elements[hitPixel.element].id === elements.infected_vessel.id) {
changePixel(hitPixel,"blood_vessel")
@@ -3885,6 +4001,10 @@ elements.white_blood_cell = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && Math.random() > 0.25) {
if (elements[hitPixel.element].id === elements.infected_vessel.id) {
changePixel(hitPixel,"blood_vessel")
@@ -3910,6 +4030,10 @@ elements.white_blood_cell = {
hitPixel.speed += 1
pixel.speed -= 1
}
+ if (hitPixel.speed < pixel.speed) {
+ hitPixel.speed += 1
+ pixel.speed -= 1
+ }
if (elements[hitPixel.element].isBlood === true && Math.random() > 0.25) {
if (elements[hitPixel.element].id === elements.infected_vessel.id) {
changePixel(hitPixel,"blood_vessel")
@@ -3986,10 +4110,6 @@ elements.eye = {
if (elements[hitPixel.element].id === elements.light.id) {
pixel.saw = true
}
- else if (pixel.saw === true && elements[hitPixel.element].id === elements.eye.id && Math.random() > 0.5) {
- pixel.saw = false
- hitPixel.saw = true
- }
else if (pixel.saw === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4020,10 +4140,6 @@ elements.eye = {
if (elements[hitPixel.element].id === elements.light.id && Math.random() > 0.5) {
pixel.saw = true
}
- else if (pixel.saw === true && elements[hitPixel.element].id === elements.eye.id && Math.random() > 0.5) {
- pixel.saw = false
- hitPixel.saw = true
- }
else if (pixel.saw === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4054,10 +4170,6 @@ elements.eye = {
if (elements[hitPixel.element].id === elements.light.id && Math.random() > 0.5) {
pixel.saw = true
}
- else if (pixel.saw === true && elements[hitPixel.element].id === elements.eye.id && Math.random() > 0.5) {
- pixel.saw = false
- hitPixel.saw = true
- }
else if (pixel.saw === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4088,10 +4200,6 @@ elements.eye = {
if (elements[hitPixel.element].id === elements.light.id && Math.random() > 0.5) {
pixel.saw = true
}
- else if (pixel.saw === true && elements[hitPixel.element].id === elements.eye.id && Math.random() > 0.5) {
- pixel.saw = false
- hitPixel.saw = true
- }
else if (pixel.saw === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4116,6 +4224,9 @@ elements.eye = {
}
}
}
+ if (pixel.saw === true && Math.random() > 0.8) {
+ pixel.saw = false
+ }
},
density: 2710,
state: "solid",
@@ -4186,10 +4297,6 @@ elements.olfactory_bulb = {
pixel.oxygen -= 50
pixel.nutrition -= 50
}
- else if (pixel.smell === true && elements[hitPixel.element].id === elements.olfactory_bulb.id && Math.random() > 0.5) {
- pixel.smell = false
- hitpixel.smell = true
- }
else if (pixel.smell === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4223,10 +4330,6 @@ elements.olfactory_bulb = {
pixel.oxygen -= 50
pixel.nutrition -= 50
}
- else if (pixel.smell === true && elements[hitPixel.element].id === elements.olfactory_bulb.id && Math.random() > 0.5) {
- pixel.smell = false
- hitpixel.smell = true
- }
else if (pixel.smell === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4260,10 +4363,6 @@ elements.olfactory_bulb = {
pixel.oxygen -= 50
pixel.nutrition -= 50
}
- else if (pixel.smell === true && elements[hitPixel.element].id === elements.olfactory_bulb.id && Math.random() > 0.5) {
- pixel.smell = false
- hitpixel.smell = true
- }
else if (pixel.smell === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4297,10 +4396,6 @@ elements.olfactory_bulb = {
pixel.oxygen -= 50
pixel.nutrition -= 50
}
- else if (pixel.smell === true && elements[hitPixel.element].id === elements.olfactory_bulb.id && Math.random() > 0.5) {
- pixel.smell = false
- hitpixel.smell = true
- }
else if (pixel.smell === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
if (!hitPixel.charge) {
hitPixel.charge = 0.1
@@ -4321,6 +4416,9 @@ elements.olfactory_bulb = {
}
}
}
+ if (pixel.smell === true && Math.random() > 0.8) {
+ pixel.smell = false
+ }
},
density: 2710,
state: "solid",
@@ -4347,6 +4445,222 @@ elements.olfactory_bulb = {
movable: false,
}
+elements.taste_bud = {
+ color: "#DB6767",
+ category: "nervous system",
+ hoverStat: function(pixel) {
+ return "Ntr:"+pixel.nutrition+" O2:"+pixel.oxygen
+ },
+ tick: function(pixel) {
+ doHeat(pixel);
+ doBurning(pixel);
+ doElectricity(pixel);
+ if ((Math.random() > 0.895 && pixel.nutrition > 0 && pixel.oxygen > 0) || (pixel.burning === true && pixel.nutrition > 0 && pixel.oxygen > 0) || (pixel.temp > 43 && pixel.nutrition > 0 && pixel.oxygen > 0) || (pixel.temp < -10 && pixel.nutrition > 0 && pixel.oxygen > 0)) {
+ pixel.nutrition--
+ pixel.oxygen--
+ }
+ if (Math.random() > 0.5 && (pixel.nutrition < 1 || pixel.oxygen < 1 || pixel.speed < -100)) {
+ if (Math.random() < 0.95) {
+ changePixel(pixel,"meat");
+ }
+ else {
+ changePixel(pixel,"rotten_meat");
+ }
+ }
+ if (pixel.nutrition === null || isNaN(pixel.nutrition)) {
+ pixel.nutrition = 500
+ }
+ if (pixel.oxygen === null || isNaN(pixel.oxygen)) {
+ pixel.oxygen = 500
+ }
+ if (pixel.speed === null || isNaN(pixel.speed)) {
+ pixel.speed = 0
+ }
+ if (!isEmpty(pixel.x, pixel.y-1, true)) {
+ var hitPixel = pixelMap[pixel.x][pixel.y-1]
+ doElectricity(hitPixel);
+ if ((
+ elements[hitPixel.element].id === elements.sugar.id || elements[hitPixel.element].id === elements.salt.id || elements[hitPixel.element].id === elements.grease.id || elements[hitPixel.element].id === elements.cooked_meat.id || elements[hitPixel.element].id === elements.chocolate.id || elements[hitPixel.element].id === elements.chocolate_powder.id || elements[hitPixel.element].id === elements.cheese.id || elements[hitPixel.element].id === elements.cheese_powder.id || elements[hitPixel.element].id === elements.pickle.id || elements[hitPixel.element].id === elements.herb.id || elements[hitPixel.element].id === elements.juice.id || elements[hitPixel.element].id === elements.gingerbread.id || elements[hitPixel.element].id === elements.ketchup.id || elements[hitPixel.element].id === elements.mayo.id || elements[hitPixel.element].id === elements.sauce.id || elements[hitPixel.element].id === elements.chocolate_milk.id || elements[hitPixel.element].id === elements.grape.id || elements[hitPixel.element].id === elements.pilk.id || elements[hitPixel.element].id === elements.fruit_milk.id || elements[hitPixel.element].id === elements.nut_milk.id || elements[hitPixel.element].id === elements.soda.id || elements[hitPixel.element].id === elements.sugar_water.id
+ ) && Math.random() > 0.5 && hitPixel.tasted != true) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ }
+ else if ((elements[hitPixel.element].id === elements.alcohol.id || elements[hitPixel.element].id === elements.rotten_cheese.id || elements[hitPixel.element].id === elements.rotten_meat.id || elements[hitPixel.element].id === elements.pool_water.id || elements[hitPixel.element].id === elements.poison.id || elements[hitPixel.element].id === elements.bleach.id || elements[hitPixel.element].id === elements.cyanide.id || elements[hitPixel.element].id === elements.infection.id) && Math.random() > 0.5) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ pixel.oxygen--
+ pixel.nutrition--
+ }
+ else if (pixel.taste === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ if (!hitPixel.charge) {
+ hitPixel.charge = 0.1
+ }
+ else if (hitPixel.charge) {
+ hitPixel.charge += 0.1
+ }
+ pixel.taste = false
+ }
+ else if (elements[hitPixel.element].isBio === true && Math.random() > 0.5) {
+ if (hitPixel.oxygen < pixel.oxygen) {
+ hitPixel.oxygen += 20
+ pixel.oxygen -= 20
+ }
+ if (hitPixel.nutrition < pixel.nutrition) {
+ hitPixel.nutrition += 20
+ pixel.nutrition -= 20
+ }
+ }
+ }
+ if (!isEmpty(pixel.x, pixel.y+1, true)) {
+ var hitPixel = pixelMap[pixel.x][pixel.y+1]
+ doElectricity(hitPixel);
+ if ((
+ elements[hitPixel.element].id === elements.sugar.id || elements[hitPixel.element].id === elements.salt.id || elements[hitPixel.element].id === elements.grease.id || elements[hitPixel.element].id === elements.cooked_meat.id || elements[hitPixel.element].id === elements.chocolate.id || elements[hitPixel.element].id === elements.chocolate_powder.id || elements[hitPixel.element].id === elements.cheese.id || elements[hitPixel.element].id === elements.cheese_powder.id || elements[hitPixel.element].id === elements.pickle.id || elements[hitPixel.element].id === elements.herb.id || elements[hitPixel.element].id === elements.juice.id || elements[hitPixel.element].id === elements.gingerbread.id || elements[hitPixel.element].id === elements.ketchup.id || elements[hitPixel.element].id === elements.mayo.id || elements[hitPixel.element].id === elements.sauce.id || elements[hitPixel.element].id === elements.chocolate_milk.id || elements[hitPixel.element].id === elements.grape.id || elements[hitPixel.element].id === elements.pilk.id || elements[hitPixel.element].id === elements.fruit_milk.id || elements[hitPixel.element].id === elements.nut_milk.id || elements[hitPixel.element].id === elements.soda.id || elements[hitPixel.element].id === elements.sugar_water.id
+ ) && Math.random() > 0.5 && hitPixel.tasted != true) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ }
+ else if ((elements[hitPixel.element].id === elements.alcohol.id || elements[hitPixel.element].id === elements.rotten_cheese.id || elements[hitPixel.element].id === elements.rotten_meat.id || elements[hitPixel.element].id === elements.pool_water.id || elements[hitPixel.element].id === elements.poison.id || elements[hitPixel.element].id === elements.bleach.id || elements[hitPixel.element].id === elements.cyanide.id || elements[hitPixel.element].id === elements.infection.id) && Math.random() > 0.5) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ pixel.oxygen--
+ pixel.nutrition--
+ }
+ else if (pixel.taste === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ if (!hitPixel.charge) {
+ hitPixel.charge = 0.1
+ }
+ else if (hitPixel.charge) {
+ hitPixel.charge += 0.1
+ }
+ pixel.taste = false
+ }
+ else if (elements[hitPixel.element].isBio === true && Math.random() > 0.5) {
+ if (hitPixel.oxygen < pixel.oxygen) {
+ hitPixel.oxygen += 20
+ pixel.oxygen -= 20
+ }
+ if (hitPixel.nutrition < pixel.nutrition) {
+ hitPixel.nutrition += 20
+ pixel.nutrition -= 20
+ }
+ }
+ }
+ if (!isEmpty(pixel.x-1, pixel.y, true)) {
+ var hitPixel = pixelMap[pixel.x-1][pixel.y]
+ doElectricity(hitPixel);
+ if ((
+ elements[hitPixel.element].id === elements.sugar.id || elements[hitPixel.element].id === elements.salt.id || elements[hitPixel.element].id === elements.grease.id || elements[hitPixel.element].id === elements.cooked_meat.id || elements[hitPixel.element].id === elements.chocolate.id || elements[hitPixel.element].id === elements.chocolate_powder.id || elements[hitPixel.element].id === elements.cheese.id || elements[hitPixel.element].id === elements.cheese_powder.id || elements[hitPixel.element].id === elements.pickle.id || elements[hitPixel.element].id === elements.herb.id || elements[hitPixel.element].id === elements.juice.id || elements[hitPixel.element].id === elements.gingerbread.id || elements[hitPixel.element].id === elements.ketchup.id || elements[hitPixel.element].id === elements.mayo.id || elements[hitPixel.element].id === elements.sauce.id || elements[hitPixel.element].id === elements.chocolate_milk.id || elements[hitPixel.element].id === elements.grape.id || elements[hitPixel.element].id === elements.pilk.id || elements[hitPixel.element].id === elements.fruit_milk.id || elements[hitPixel.element].id === elements.nut_milk.id || elements[hitPixel.element].id === elements.soda.id || elements[hitPixel.element].id === elements.sugar_water.id
+ ) && Math.random() > 0.5 && hitPixel.tasted != true) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ }
+ else if ((elements[hitPixel.element].id === elements.alcohol.id || elements[hitPixel.element].id === elements.rotten_cheese.id || elements[hitPixel.element].id === elements.rotten_meat.id || elements[hitPixel.element].id === elements.pool_water.id || elements[hitPixel.element].id === elements.poison.id || elements[hitPixel.element].id === elements.bleach.id || elements[hitPixel.element].id === elements.cyanide.id || elements[hitPixel.element].id === elements.infection.id) && Math.random() > 0.5) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ pixel.oxygen--
+ pixel.nutrition--
+ }
+ else if (pixel.taste === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ if (!hitPixel.charge) {
+ hitPixel.charge = 0.1
+ }
+ else if (hitPixel.charge) {
+ hitPixel.charge += 0.1
+ }
+ pixel.taste = false
+ }
+ else if (elements[hitPixel.element].isBio === true && Math.random() > 0.5) {
+ if (hitPixel.oxygen < pixel.oxygen) {
+ hitPixel.oxygen += 20
+ pixel.oxygen -= 20
+ }
+ if (hitPixel.nutrition < pixel.nutrition) {
+ hitPixel.nutrition += 20
+ pixel.nutrition -= 20
+ }
+ }
+ }
+ if (!isEmpty(pixel.x+1, pixel.y, true)) {
+ var hitPixel = pixelMap[pixel.x+1][pixel.y]
+ doElectricity(hitPixel);
+ if ((
+ elements[hitPixel.element].id === elements.sugar.id || elements[hitPixel.element].id === elements.salt.id || elements[hitPixel.element].id === elements.grease.id || elements[hitPixel.element].id === elements.cooked_meat.id || elements[hitPixel.element].id === elements.chocolate.id || elements[hitPixel.element].id === elements.chocolate_powder.id || elements[hitPixel.element].id === elements.cheese.id || elements[hitPixel.element].id === elements.cheese_powder.id || elements[hitPixel.element].id === elements.pickle.id || elements[hitPixel.element].id === elements.herb.id || elements[hitPixel.element].id === elements.juice.id || elements[hitPixel.element].id === elements.gingerbread.id || elements[hitPixel.element].id === elements.ketchup.id || elements[hitPixel.element].id === elements.mayo.id || elements[hitPixel.element].id === elements.sauce.id || elements[hitPixel.element].id === elements.chocolate_milk.id || elements[hitPixel.element].id === elements.grape.id || elements[hitPixel.element].id === elements.pilk.id || elements[hitPixel.element].id === elements.fruit_milk.id || elements[hitPixel.element].id === elements.nut_milk.id || elements[hitPixel.element].id === elements.soda.id || elements[hitPixel.element].id === elements.sugar_water.id
+ ) && Math.random() > 0.5 && hitPixel.tasted != true) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ }
+ else if ((elements[hitPixel.element].id === elements.alcohol.id || elements[hitPixel.element].id === elements.rotten_cheese.id || elements[hitPixel.element].id === elements.rotten_meat.id || elements[hitPixel.element].id === elements.pool_water.id || elements[hitPixel.element].id === elements.poison.id || elements[hitPixel.element].id === elements.bleach.id || elements[hitPixel.element].id === elements.cyanide.id || elements[hitPixel.element].id === elements.infection.id) && Math.random() > 0.5) {
+ pixel.taste = true
+ if (Math.random() > 0.5) {
+ hitPixel.tasted = false
+ }
+ pixel.oxygen--
+ pixel.nutrition--
+ }
+ else if (pixel.taste === true && elements[hitPixel.element].id === elements.nerve.id && Math.random() > (1 - ((pixel.nutrition + pixel.oxygen + pixel.speed) / 2050))) {
+ if (!hitPixel.charge) {
+ hitPixel.charge = 0.1
+ }
+ else if (hitPixel.charge) {
+ hitPixel.charge += 0.1
+ }
+ pixel.taste = false
+ }
+ else if (elements[hitPixel.element].isBio === true && Math.random() > 0.5) {
+ if (hitPixel.oxygen < pixel.oxygen) {
+ hitPixel.oxygen += 20
+ pixel.oxygen -= 20
+ }
+ if (hitPixel.nutrition < pixel.nutrition) {
+ hitPixel.nutrition += 20
+ pixel.nutrition -= 20
+ }
+ }
+ }
+ if (pixel.taste === true && Math.random() > 0.8) {
+ pixel.taste = false
+ }
+ },
+ density: 2710,
+ state: "solid",
+ tempHigh: 200,
+ stateHigh: ["cooked_meat","meat","blood"],
+ tempLow: -25,
+ stateLow: ["meat","blood","blood","frozen_meat"],
+ burn: 5,
+ burnTime: 350,
+ conduct: .001,
+ burnInto: ["cooked_meat","meat","blood"],
+ breakInto: ["blood","blood","meat","meat","meat","meat","blood","meat"],
+ forceSaveColor: true,
+ reactions: {
+ "cancer": { elem1:"cancer", chance:0.0005 },
+ "radiation": { elem1:["ash","ash","meat","rotten_meat","cooked_meat","flesh"], chance:0.5 },
+ },
+ properties: {
+ oxygen: 1000,
+ nutrition: 1000,
+ taste: false,
+ },
+ isBio: true,
+ movable: false,
+}
+
elements.brain = {
color: ["#fce3e3","#deb6c5","#f5ced5","#e87b8f"],
category: "nervous system",
@@ -7222,7 +7536,7 @@ elements.stomach_valve = {
behavior: [
"XX|XX|XX",
"XX|XX|XX",
- "XX|CR:intestine_bacteria%0.01|XX",
+ "XX|CR:intestine_bacteria%0.001|XX",
],
hoverStat: function(pixel) {
return "Ntr:"+pixel.nutrition+" O2:"+pixel.oxygen
@@ -7907,8 +8221,8 @@ elements.poop = {
color: "#593001",
behavior: [
"CR:stench%0.0002|CR:stench%0.001|CR:stench%0.0002",
- "M2%45|XX|M2%45",
- "M2%55|M1|M2%55",
+ "M2%75|XX|M2%75",
+ "M2|M1|M2",
],
reactions: {
"soap": { elem1:null, chance:0.2 },
@@ -7922,16 +8236,14 @@ elements.poop = {
},
category: "nutrition",
state: "liquid",
- viscosity: 1000,
+ viscosity: 500,
density: 200,
- conduct: 0.25,
+ conduct: 0.005,
darkText: true,
hidden: true,
- tempHigh: 160,
- stateHigh: ["ash","stench","steam","steam","carbon_dioxide"],
- burn: 5,
- burnTime: 30,
- burnInto: ["ash","stench","steam","steam","carbon_dioxide","fire","fire"],
+ isWaste: true,
+ tempHigh: 90,
+ stateHigh: "excreted_poop",
tempLow: -30,
stain: 0.005,
stateLowName: "frozen_poop",
@@ -7941,7 +8253,7 @@ elements.excreted_poop = {
color: "#593001",
behavior: [
"CR:stench,stench,stench,stench,bacteria,stench,stench,fly,stench,stench,fly,stench,stench%0.0002|CR:stench,stench,stench,stench,bacteria,stench,stench,fly,stench,stench,fly,stench,stench%0.001|CR:stench,stench,stench,stench,bacteria,stench,stench,fly,stench,stench,fly,stench,stench%0.0002",
- "XX|XX|XX",
+ "M2%0.5|XX|M2%0.5",
"M2%55|M1|M2%55",
],
reactions: {
@@ -7958,9 +8270,9 @@ elements.excreted_poop = {
state: "liquid",
viscosity: 1000,
density: 200,
- conduct: 0.25,
darkText: true,
hidden: true,
+ isWaste: true,
tempHigh: 160,
stateHigh: ["ash","stench","steam","steam","carbon_dioxide"],
burn: 5,
@@ -7981,8 +8293,8 @@ elements.intestine_bacteria = {
reactions: {
"water": { elem1:null, elem2:"dirty_water", chance:0.01 },
"poop": { elem2:null, chance:0.01, func:behaviors.FEEDPIXEL },
- "bacteria": { elem2:[null,"intestine_bacteria","intestine_bacteria","intestine_bacteria","intestine_bacteria","intestine_bacteria","intestine_bacteria","intestine_bacteria"], chance:0.5, func:behaviors.FEEDPIXEL },
- "intestine_bacteria": { elem2:["intestine_bacteria",null,null,null,null,null,null,null], chance:0.001, func:behaviors.FEEDPIXEL },
+ "bacteria": { elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
+ "intestine_bacteria": { elem2:null, chance:0.001, func:behaviors.FEEDPIXEL },
"mercury": { elem1:[null,null,null,null,null,null,null,null,null,"dna"], chance:0.1 },
"bleach": { elem1:[null,null,null,null,null,null,null,null,null,"dna"], chance:0.1 },
"uranium": { elem1:[null,null,null,null,null,null,null,null,null,"dna"], chance:0.1 },
@@ -7992,7 +8304,7 @@ elements.intestine_bacteria = {
"vinegar": { elem1:[null,null,null,null,null,null,null,null,null,"dna"], chance:0.01 },
"mouthwash": { elem1:[null,null,null,null,null,null,null,null,null,"dna"], chance:0.001 },
},
- foodNeed: 15,
+ foodNeed: 25,
egg: "intestine_bacteria",
tempHigh: 80,
stateHigh: "dna",
@@ -8024,7 +8336,8 @@ elements.stomach_acid = {
"salt_water": { elem1:null, elem2:"digested_material", attr2:{"nutrition":5, "speed":-1}, chance:0.02 },
"sugar_water": { elem1:null, elem2:"digested_material", attr2:{"nutrition":10, "speed":-1}, chance:0.02 },
"tree_branch": { elem1:null, elem2:"wood", chance:0.02 },
- "sugar": { elem2:"digested_material", attr2:{"nutrition":30, "speed":5}, chance:0.02 },
+ "sugar": { elem2:"digested_material", attr2:{"nutrition":25, "speed":5}, chance:0.02 },
+ "molasses": { elem2:"digested_material", attr2:{"nutrition":10, "speed":8}, chance:0.02 },
"dead_plant": { elem2:"digested_material", attr2:{"nutrition":15, "speed":1}, chance:0.02 },
"meat": { elem2:"digested_material", attr2:{"nutrition":30, "speed":-1}, chance:0.02 },
"cooked_meat": { elem2:"digested_material", attr2:{"nutrition":60}, chance:0.02 },
@@ -8032,6 +8345,7 @@ elements.stomach_acid = {
"rotten_meat": { elem2:["digested_material","ammonia",null,null,null], attr2:{"nutrition":-10, "speed":-10}, chance:0.02 },
"cured_meat": { elem2:"digested_material", attr2:{"nutrition":50}, chance:0.02 },
"cheese": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
+ "cheese_powder": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"lettuce": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02 },
"herb": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"toast": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02 },
@@ -8039,6 +8353,11 @@ elements.stomach_acid = {
"hard_yolk": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02 },
"yolk": { elem2:"gaseous_material", attr2:{"nutrition":5, "speed":-2}, chance:0.02 },
"milk": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
+ "eggnog": { elem2:"digested_material", attr2:{"nutrition":25, "speed":-1}, chance:0.02 },
+ "nut_milk": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
+ "chocolate_milk": { elem2:"digested_material", attr2:{"nutrition":25, "speed":1}, chance:0.02 },
+ "fruit_milk": { elem2:"digested_material", attr2:{"nutrition":30, "speed":1}, chance:0.02 },
+ "pilk": { elem2:"digested_material", attr2:{"nutrition":30, "speed":5}, chance:0.02 },
"crumb": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"pickle": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"salt": { elem2:"digested_material", attr2:{"nutrition":5, "speed":-1}, chance:0.02 },
@@ -8070,6 +8389,7 @@ elements.stomach_acid = {
"melted_chocolate": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
"melted_butter": { elem2:"digested_material", attr2:{"nutrition":10}, chance:0.02 },
"chocolate": { elem2:"digested_material", attr2:{"nutrition":35, "speed":2}, chance:0.02 },
+ "chocolate_powder": { elem2:"digested_material", attr2:{"nutrition":35, "speed":2}, chance:0.02 },
"rice": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"dough": { elem2:"digested_material", attr2:{"nutrition":5, "speed":-1}, chance:0.02 },
"batter": { elem2:"digested_material", attr2:{"nutrition":5, "speed":-1}, chance:0.02 },
@@ -8091,6 +8411,9 @@ elements.stomach_acid = {
"honey": { elem2:"digested_material", attr2:{"nutrition":35, "speed":3}, chance:0.02 },
"blood": { elem2:"digested_material", attr2:{"nutrition":5, "speed":-1}, chance:0.02 },
"poop": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
+ "excreted_poop": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
+ "urine": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
+ "tea": { elem2:"digested_material", attr2:{"nutrition":10, "speed":10}, chance:0.02 },
"infection": { elem2:"digested_material", attr2:{"nutrition":-15, "speed":-5}, chance:0.02 },
"cancer": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-15}, chance:0.02 },
"plague": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
@@ -8123,7 +8446,8 @@ elements.herbi_acid = {
"sugar_water": { elem1:null, elem2:"digested_material", attr2:{"nutrition":10, "speed":1}, chance:0.02 },
"plant": { elem2:"digested_material", attr2:{"nutrition":80, "speed":1}, chance:0.02},
"tree_branch": { elem1:null, elem2:"wood", attr2:{"nutrition":10, "speed":1}, chance:0.02 },
- "sugar": { elem2:"digested_material", attr2:{"nutrition":30, "speed":5}, chance:0.02 },
+ "sugar": { elem2:"digested_material", attr2:{"nutrition":25, "speed":5}, chance:0.02 },
+ "molasses": { elem2:"digested_material", attr2:{"nutrition":10, "speed":8}, chance:0.02 },
"dead_plant": { elem2:"digested_material", attr2:{"nutrition":75}, chance:0.02 },
"meat": { elem2:"gaseous_material", attr2:{"nutrition":-10, "speed":-1}, chance:0.02 },
"cooked_meat": { elem2:"digested_material", attr2:{"nutrition":-5, "speed":1}, chance:0.02 },
@@ -8131,6 +8455,7 @@ elements.herbi_acid = {
"rotten_meat": { elem2:["digested_material","ammonia",null,null,null], attr2:{"nutrition":-25, "speed":-20}, chance:0.02 },
"cured_meat": { elem2:"digested_material", attr2:{"nutrition":-5, "speed":-1}, chance:0.02 },
"cheese": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02 },
+ "cheese_powder": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"vine": { elem2:"digested_material", attr2:{"nutrition":60}, chance:0.02 },
"grass": { elem2:"digested_material", attr2:{"nutrition":60}, chance:0.02 },
"kelp": { elem2:"digested_material", attr2:{"nutrition":60}, chance:0.02 },
@@ -8142,6 +8467,11 @@ elements.herbi_acid = {
"hard_yolk": { elem2:"digested_material", attr2:{"nutrition":30}, chance:0.02 },
"yolk": { elem2:"digested_material", attr2:{"nutrition":10, "speed":5}, chance:0.02 },
"milk": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
+ "eggnog": { elem2:"digested_material", attr2:{"nutrition":25, "speed":-1}, chance:0.02 },
+ "nut_milk": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
+ "chocolate_milk": { elem2:"digested_material", attr2:{"nutrition":35, "speed":1}, chance:0.02 },
+ "fruit_milk": { elem2:"digested_material", attr2:{"nutrition":40, "speed":1}, chance:0.02 },
+ "pilk": { elem2:"digested_material", attr2:{"nutrition":25, "speed":5}, chance:0.02 },
"crumb": { elem2:"digested_material", attr2:{"nutrition":15}, chance:0.02 },
"pickle": { elem2:"digested_material", attr2:{"nutrition":45}, chance:0.02 },
"salt": { elem2:"digested_material", attr2:{"nutrition":10}, chance:0.02 },
@@ -8173,6 +8503,7 @@ elements.herbi_acid = {
"melted_chocolate": { elem2:"digested_material", attr2:{"nutrition":10}, chance:0.02 },
"melted_butter": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"chocolate": { elem2:"digested_material", attr2:{"nutrition":20, "speed":2}, chance:0.02 },
+ "chocolate_powder": { elem2:"digested_material", attr2:{"nutrition":20, "speed":2}, chance:0.02 },
"rice": { elem2:"digested_material", attr2:{"nutrition":45}, chance:0.02 },
"dough": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"batter": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
@@ -8194,6 +8525,9 @@ elements.herbi_acid = {
"honey": { elem2:"digested_material", attr2:{"nutrition":35, "speed":3}, chance:0.02 },
"blood": { elem2:"digested_material", attr2:{"nutrition":-5, "speed":-1}, chance:0.02 },
"poop": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
+ "excreted_poop": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
+ "urine": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
+ "tea": { elem2:"digested_material", attr2:{"nutrition":10, "speed":10}, chance:0.02 },
"infection": { elem2:"digested_material", attr2:{"nutrition":-20, "speed":-5}, chance:0.02 },
"cancer": { elem2:"gaseous_material", attr2:{"nutrition":-25, "speed":-15}, chance:0.02 },
"plague": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
@@ -8227,6 +8561,7 @@ elements.carni_acid = {
"plant": { elem2:"digested_material", attr2:{"nutrition":5, "speed":-5}, chance:0.02},
"tree_branch": { elem1:null, elem2:"wood", chance:0.02 },
"sugar": { elem2:"digested_material", attr2:{"nutrition":10, "speed":3}, chance:0.02 },
+ "molasses": { elem2:"digested_material", attr2:{"nutrition":5, "speed":5}, chance:0.02 },
"dead_plant": { elem2:"digested_material", attr2:{"nutrition":5, "speed":-1}, chance:0.02 },
"meat": { elem2:"digested_material", attr2:{"nutrition":70, "speed":5}, chance:0.02 },
"cooked_meat": { elem2:"digested_material", attr2:{"nutrition":60, "speed":4}, chance:0.02 },
@@ -8234,6 +8569,7 @@ elements.carni_acid = {
"rotten_meat": { elem2:["digested_material","ammonia",null,null,null], attr2:{"nutrition":5, "speed":-5}, chance:0.02 },
"cured_meat": { elem2:"digested_material", attr2:{"nutrition":50, "speed":-1}, chance:0.02 },
"cheese": { elem2:"digested_material", attr2:{"nutrition":35, "speed":-1}, chance:0.02 },
+ "cheese_powder": { elem2:"digested_material", attr2:{"nutrition":35, "speed":-1}, chance:0.02 },
"lettuce": { elem2:"digested_material", attr2:{"nutrition":20}, chance:0.02 },
"herb": { elem2:"digested_material", attr2:{"nutrition":5, "speed":-1}, chance:0.02 },
"toast": { elem2:"digested_material", attr2:{"nutrition":20}, chance:0.02 },
@@ -8241,6 +8577,11 @@ elements.carni_acid = {
"hard_yolk": { elem2:"digested_material", attr2:{"nutrition":50}, chance:0.02 },
"yolk": { elem2:"digested_material", attr2:{"nutrition":50}, chance:0.02 },
"milk": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
+ "eggnog": { elem2:"digested_material", attr2:{"nutrition":20, "speed":-1}, chance:0.02 },
+ "nut_milk": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
+ "chocolate_milk": { elem2:"digested_material", attr2:{"nutrition":25, "speed":1}, chance:0.02 },
+ "fruit_milk": { elem2:"digested_material", attr2:{"nutrition":30, "speed":1}, chance:0.02 },
+ "pilk": { elem2:"digested_material", attr2:{"nutrition":30, "speed":5}, chance:0.02 },
"crumb": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"pickle": { elem2:"digested_material", attr2:{"nutrition":15}, chance:0.02 },
"salt": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
@@ -8277,6 +8618,7 @@ elements.carni_acid = {
"melted_chocolate": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
"melted_butter": { elem2:"gaseous_material", attr2:{"nutrition":-10}, chance:0.02 },
"chocolate": { elem2:"digested_material", attr2:{"nutrition":15}, chance:0.02 },
+ "chocolate_powder": { elem2:"digested_material", attr2:{"nutrition":15}, chance:0.02 },
"rice": { elem2:"digested_material", attr2:{"nutrition":15}, chance:0.02 },
"dough": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"batter": { elem2:"digested_material", attr2:{"nutrition":-5}, chance:0.02 },
@@ -8297,6 +8639,9 @@ elements.carni_acid = {
"honey": { elem2:"digested_material", attr2:{"nutrition":35, "speed":5}, chance:0.02 },
"blood": { elem2:"digested_material", attr2:{"nutrition":15, "speed":3}, chance:0.02 },
"poop": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-5}, chance:0.02 },
+ "excreted_poop": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-5}, chance:0.02 },
+ "urine": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
+ "tea": { elem2:"digested_material", attr2:{"nutrition":5, "speed":10}, chance:0.02 },
"infection": { elem2:"digested_material", attr2:{"nutrition":-5}, chance:0.02 },
"cancer": { elem2:"digested_material", attr2:{"nutrition":-5, "speed":-5}, chance:0.02 },
"plague": { elem2:"gaseous_material", attr2:{"nutrition":-15, "speed":-10}, chance:0.02 },
@@ -8330,6 +8675,7 @@ elements.explosive_acid = {
"plant": { elem2:"digested_material", attr2:{"nutrition":10, "speed":5}, chance:0.02},
"tree_branch": { elem1:null, elem2:"wood", chance:0.02 },
"sugar": { elem2:"digested_material", attr2:{"nutrition":30, "speed":5}, chance:0.02 },
+ "molasses": { elem2:"digested_material", attr2:{"nutrition":15, "speed":8}, chance:0.02 },
"dead_plant": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
"meat": { elem2:"digested_material", attr2:{"nutrition":30, "speed":5}, chance:0.02 },
"cooked_meat": { elem2:"digested_material", attr2:{"nutrition":60}, chance:0.02 },
@@ -8344,6 +8690,11 @@ elements.explosive_acid = {
"hard_yolk": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02 },
"yolk": { elem2:"digested_material", attr2:{"nutrition":10}, chance:0.02 },
"milk": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
+ "eggnog": { elem2:"digested_material", attr2:{"nutrition":25, "speed":1}, chance:0.02 },
+ "nut_milk": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
+ "chocolate_milk": { elem2:"digested_material", attr2:{"nutrition":25, "speed":1}, chance:0.02 },
+ "fruit_milk": { elem2:"digested_material", attr2:{"nutrition":30, "speed":1}, chance:0.02 },
+ "pilk": { elem2:"digested_material", attr2:{"nutrition":30, "speed":5}, chance:0.02 },
"crumb": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"pickle": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"salt": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
@@ -8375,6 +8726,8 @@ elements.explosive_acid = {
"melted_chocolate": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
"melted_butter": { elem2:"digested_material", attr2:{"nutrition":10}, chance:0.02 },
"chocolate": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
+ "cheese_powder": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02 },
+ "chocolate_powder": { elem2:"digested_material", attr2:{"nutrition":35, "speed":2}, chance:0.02 },
"rice": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"dough": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"batter": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
@@ -8395,6 +8748,9 @@ elements.explosive_acid = {
"honey": { elem2:"digested_material", attr2:{"nutrition":35}, chance:0.02 },
"blood": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"poop": { elem2:"gaseous_material", attr2:{"nutrition":5}, chance:0.02 },
+ "excreted_poop": { elem2:"gaseous_material", attr2:{"nutrition":5}, chance:0.02 },
+ "urine": { elem2:"gaseous_material", attr2:{"nutrition":5}, chance:0.02 },
+ "tea": { elem2:"digested_material", attr2:{"nutrition":5, "speed":5}, chance:0.02 },
"infection": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"cancer": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"plague": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
@@ -8430,6 +8786,7 @@ elements.decomposer_acid = {
"plant": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02},
"tree_branch": { elem1:null, elem2:"wood", attr2:{"nutrition":30}, chance:0.02 },
"sugar": { elem2:"digested_material", attr2:{"nutrition":30}, chance:0.02 },
+ "molasses": { elem2:"digested_material", attr2:{"nutrition":20}, chance:0.02 },
"dead_plant": { elem2:"digested_material", attr2:{"nutrition":90, "speed":5}, chance:0.02 },
"meat": { elem2:"digested_material", attr2:{"nutrition":20}, chance:0.02 },
"cooked_meat": { elem2:"digested_material", attr2:{"nutrition":-5}, chance:0.02 },
@@ -8479,6 +8836,8 @@ elements.decomposer_acid = {
"melted_chocolate": { elem2:"digested_material", attr2:{"nutrition":10}, chance:0.02 },
"melted_butter": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"chocolate": { elem2:"digested_material", attr2:{"nutrition":30, "speed":1}, chance:0.02 },
+ "cheese_powder": { elem2:"digested_material", attr2:{"nutrition":40}, chance:0.02 },
+ "chocolate_powder": { elem2:"digested_material", attr2:{"nutrition":35, "speed":1}, chance:0.02 },
"rice": { elem2:"digested_material", attr2:{"nutrition":45}, chance:0.02 },
"dough": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
"batter": { elem2:"digested_material", attr2:{"nutrition":5}, chance:0.02 },
@@ -8504,6 +8863,8 @@ elements.decomposer_acid = {
"glue": { elem2:"gaseous_material", attr2:{"nutrition":-10, "speed":-15}, chance:0.02 },
"poop": { elem2:"digested_material", attr2:{"nutrition":25, "speed":1}, chance:0.02 },
"excreted_poop": { elem2:"digested_material", attr2:{"nutrition":25}, chance:0.02 },
+ "urine": { elem2:"gaseous_material", attr2:{"nutrition":5, "speed":1}, chance:0.02 },
+ "tea": { elem2:"digested_material", attr2:{"nutrition":10, "speed":10}, chance:0.02 },
"dead_bug": { elem2:"digested_material", attr2:{"nutrition":35, "speed":5}, chance:0.02 },
},
category: "nutrition",
@@ -9163,6 +9524,63 @@ elements.cerebrospinal_fluid = {
isBio: true
}
+elements.urine = {
+ color: ["#E9BE3C","#D0B937"],
+ behavior: behaviors.LIQUID,
+ tempHigh: 102,
+ stateHigh: ["steam","salt"],
+ tempLow: -2,
+ stateLowName: "pee_ice",
+ category: "liquids",
+ reactions: {
+ "dust": { elem1: "dirty_water", elem2: null },
+ "ash": { elem1: "dirty_water", elem2: null },
+ "carbon_dioxide": { elem1: "dirty_water", elem2: null },
+ "sulfur": { elem1: "dirty_water", elem2: null },
+ "rat": { elem1: "dirty_water", chance:0.005 },
+ "plague": { elem1: "dirty_water", elem2: null },
+ "fallout": { elem1: "dirty_water", chance:0.25 },
+ "radiation": { elem1: "dirty_water", chance:0.25 },
+ "rust": { elem1: "dirty_water", chance:0.005 },
+ "lead": { elem1: "dirty_water", chance:0.005 },
+ "solder": { elem1: "dirty_water", chance:0.005 },
+ "rock": { elem2: "wet_sand", chance: 0.0005 },
+ "limestone": { elem2: "wet_sand", chance: 0.0005 },
+ "fly": { elem2:"dead_bug", chance:0.1, oneway:true },
+ "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 },
+ "oil": { elem1: "dirty_water", chance:0.005 },
+ "uranium": { elem1: "dirty_water", chance:0.25 },
+ "wet_sand": { oneway:true, chance:0.007, func:function(pixel){
+ if (isEmpty(pixel.x,pixel.y-1) || isEmpty(pixel.x,pixel.y-2) || isEmpty(pixel.x,pixel.y-3)) {
+ changePixel(pixel,"foam");
+ pixel.clone = "salt_water";
+ }
+ }},
+ "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001, tempMin:85 },
+ // electrolysis:
+ "aluminum": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.0025 },
+ "zinc": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.015 },
+ "steel": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.0125 },
+ "iron": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.0125 },
+ "tin": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.01 },
+ "brass": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.001 },
+ "bronze": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.001 },
+ "copper": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.0075 },
+ "silver": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.0075 },
+ "gold": { elem1:["hydrogen","hydrogen","oxygen","chlorine","salt"], charged:true, chance:0.0075 },
+ },
+ state: "liquid",
+ density: 1026,
+ conduct: 0.1,
+ stain: 0.01,
+ stainSelf: true,
+ isWaste: true,
+ extinguish: true
+}
+
elements.elixir = {
color: "#8CB6AA",
behavior: behaviors.LIQUID,
@@ -9359,6 +9777,7 @@ elements.bacteria = {
}
elements.tract = {
+ name: "bio-pipe",
color: ["#7C4941","#83594C"],
onSelect: function() {
logMessage("Draw a pipe, wait for walls to appear, then erase the exit hole.");
@@ -9773,7 +10192,7 @@ elements.bioplate = {
tick: function(pixel) {
if (!isEmpty(pixel.x, pixel.y-1, true)){
if (pixel.min && elements[pixelMap[pixel.x][pixel.y-1].element].density < pixel.min) {}
- else if (pixelMap[pixel.x][pixel.y-1].element != "pressure_plate" || pixelMap[pixel.x][pixel.y-1].on) {
+ else if (pixelMap[pixel.x][pixel.y-1].element != "bioplate" || pixelMap[pixel.x][pixel.y-1].on) {
pixel.on = true;
var coordsToShock = [
[pixel.x, pixel.y+1],
@@ -10467,6 +10886,37 @@ elements.drain_health = {
category: "tools",
}
+elements.toilet = {
+ color: "#e1e4dd",
+ behavior: behaviors.WALL,
+ category: "solids",
+ state: "solid",
+ density: 2403,
+ hardness: 0.4,
+ breakInto: ["porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","urine","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","excreted_poop"],
+ noMix: true,
+ movable: false,
+ tempHigh: 900,
+ stateHigh: ["porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","urine","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","water","porcelain_shard","porcelain_shard","porcelain_shard","excreted_poop"],
+ tick: function(pixel) {
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+3);
+ for (var i = 0; i < coords.length; i++) { // Burn adjacent pixels
+ var x = coords[i].x;
+ var y = coords[i].y;
+ if (!isEmpty(x,y,true)) {
+ elements.toilet.tool(pixelMap[x][y]);
+ }
+ }
+ },
+ tool: function(pixel) {
+ if (elements[pixel.element].isWaste === true) {
+ deletePixel(pixel.x,pixel.y)
+ }
+ },
+ canPlace: true,
+ hidden: true,
+}
+
if (!elements.cancer.reactions) { elements.cancer.reactions = {} }
elements.cancer.reactions.attached_hair = { "elem2": "loose_hair", chance:0.4 };
elements.cancer.reactions.hair_end = { "elem2": "loose_hair", chance:0.4 };
@@ -10659,6 +11109,7 @@ elements.stench.reactions.stomach_valve = { elem1:[null,null,null,null,null,null
elements.bless.reactions.poop = { elem2:null }
elements.bless.reactions.excreted_poop = { elem2:null }
elements.bless.reactions.infected_vessel = { elem2:["blood_vessel","blood_vessel","blood_vessel","blood_vessel","blood_vessel","blood_vessel","white_blood_cell"] }
+elements.bless.reactions.urine = { elem2:"water" }
elements.bless.tool = function(pixel) {
if (elements.bless.ignore.indexOf(pixel.element) !== -1) { return; }
if (pixel.burning && !elements[pixel.element].burning) { // stop burning
@@ -10717,3 +11168,5 @@ elements.bless.tool = function(pixel) {
elements.dna.reactions.juice = { "elem1": null, "elem2": "elixir", chance:0.01 };
elements.acid.ignore = ["herbi_stomach","carni_stomach","decomposer_stomach","amphib_skin","amphib_dermis","acidic_flesh","acid_vessel","explosive_stomach","stomach_valve","stomach_lining","throat_lining","glass","rad_glass","glass_shard","rad_shard","stained_glass","baked_clay","acid_gas","neutral_acid","acid_cloud","water","salt_water","sugar_water","dirty_water","copper","gold","porcelain","plastic","bead","microplastic","molten_plastic","pool_water","chlorine","hydrogen","gold_coin","silver","nickel","calcium","bone","earthquake","tornado","tsunami","liquid_light","sensor"]
+
+elements.dirty_water.isWaste = true;
diff --git a/mods/flying_fish.js b/mods/flying_fish.js
new file mode 100644
index 00000000..24497448
--- /dev/null
+++ b/mods/flying_fish.js
@@ -0,0 +1,49 @@
+elements.flying_fish = {
+ color: ["#0077be", "#00aaff"], // Цвета для летающей рыбы
+ behavior: [
+ "SW:water AND M2%10|M2%10|SW:water AND M2%10", // Может прыгать в воздух и возвращаться в воду
+ "SW:water|XX|SW:water", // Движение влево и вправо в воде
+ "SW:water AND M1%10|M1%10|SW:water AND M1%10" // Лёгкое спускание, если в воздухе
+ ],
+ category: "life", // Категория, в которой будет находиться элемент
+ state: "liquid", // Условное состояние рыбы
+ density: 997, // Плотность, близкая к воде
+ tempHigh: 50, // Температура, при которой рыба погибает
+ stateHigh: "meat",
+ tempLow: -10, // Температура, при которой рыба замерзает
+ stateLow: "frozen_fish",
+ reactions: {
+ "fire": {elem1: "meat"}, // Рыба "сгорает" при контакте с огнём
+ "acid": {elem1: null } // Рыба исчезает в кислоте
+ },
+ properties: {
+ energy: 100, // Энергия рыбы, уменьшается со временем
+ },
+ tick: function(pixel) {
+ // Уменьшение энергии
+ pixel.energy -= 0.1;
+
+ // Если энергия исчерпана, рыба превращается в "мертвую рыбу"
+ if (pixel.energy <= 0) {
+ changePixel(pixel, "dead_fish");
+ }
+
+ // Восстановление энергии в воде
+ if (pixel.currentState === "water") {
+ pixel.energy += 0.5;
+ }
+
+ // Поведение прыжков: при контакте с водой рыбка "прыгает" в воздух
+ if (pixel.y < height - 1 && isEmpty(pixel.x, pixel.y + 1)) {
+ pixel.energy += 0.2; // Лёгкое восстановление энергии
+ }
+ },
+};
+
+elements.dead_fish = {
+ color: "#555555", // Серый цвет для мертвой рыбы
+ behavior: behaviors.STATIC, // Никакого движения
+ category: "life", // Категория остаётся той же
+ state: "solid", // Мёртвая рыба становится твёрдой
+ density: 1100, // Немного плотнее воды
+};
\ No newline at end of file
diff --git a/mods/prairie.js b/mods/prairie.js
new file mode 100644
index 00000000..a3aa4221
--- /dev/null
+++ b/mods/prairie.js
@@ -0,0 +1,200 @@
+elements.bison = {
+ color: ["#8B4513", "#A0522D"], // Цвета для бизонов
+ behavior: [
+ "XX|XX|XX", // Едят траву вокруг
+ "M2%1|XX|M2%1", // Медленное движение влево и вправо
+ "M1|M1%1|M1" // Лёгкое спускание, если нет опоры
+ ],
+ category: "life", // Категория для бизонов
+ state: "solid", // Бизоны — твёрдые существа
+ density: 1200, // Плотность, выше чем у воды
+ tempHigh: 60, // Температура, при которой бизон "умирает"
+ stateHigh: "dead_bison",
+ tempLow: -20, // Температура, при которой бизон замерзает
+ stateLow: "frozen_meat",
+ reactions: {
+ "water": {elem1: "bison_wet" }, // Бизон становится мокрым в воде
+ "grass": {elem2: null, chance: 0.3, func:behaviors.FEEDPIXEL},
+ "shepherdia": {elem2: null, chance: 0.3, func:behaviors.FEEDPIXEL}
+ },
+ properties: {
+ energy: 200, // Энергия бизона
+ },
+ burn: 50,
+ burnTime: 500,
+ burnInto: "dead_bison",
+ tick: function(pixel) {
+ // Уменьшение энергии со временем
+ pixel.energy -= 0.05;
+
+ // Если энергия исчерпана, бизон умирает
+ if (pixel.energy <= 0) {
+ changePixel(pixel, "dead_bison");
+ }
+
+ // Еда (травы добавляет энергию)
+ if (pixel.currentState === "grass") {
+ pixel.energy += 5;
+ }
+
+ // Восстановление энергии при отдыхе
+ if (!pixel.moving) {
+ pixel.energy += 0.1;
+ }
+ },
+};
+
+elements.dead_bison = {
+ color: "#654321", // Коричневый цвет для мёртвого бизона
+ behavior: [
+ "XX|XX|XX",
+ "XX|CH:rotten_meat%0.1|XX",
+ "M2|M1|M2"
+ ], // Никакого движения
+ category: "life", // Категория остаётся той же
+ state: "solid", // Мёртвый бизон остаётся твёрдым
+ density: 1300, // Немного плотнее живого бизона
+ burn: 100,
+ burnTime: 1000,
+ burnInto: "ash",
+ hidden: true
+};
+
+elements.bison_wet = {
+ color: "#5F4C40", // Темный цвет для мокрого бизона
+ behavior: [
+ "XX|XX|XX", // Едят траву вокруг
+ "M2%1|XX|M2%1", // Медленное движение влево и вправо
+ "M1|M1%1|M1" // Лёгкое спускание, если нет опоры
+ ], // Поведение такое же, как у обычного бизона
+ category: "life", // Категория та же
+ state: "solid", // Мокрый бизон остаётся твёрдым
+ density: 1250, // Немного тяжелее, чем сухой бизон
+ tempHigh: 60, // Тот же предел температуры
+ stateHigh: "dead_bison",
+ tempLow: -20, // Тот же предел температуры
+ stateLow: "frozen_meat",
+ properties: {
+ energy: 150, // Мокрый бизон теряет немного энергии
+ },
+ reactions: {
+ "grass": {elem2: null, chance: 0.3, func:behaviors.FEEDPIXEL},
+ "shepherdia": {elem2: null, chance: 0.3, func:behaviors.FEEDPIXEL}
+ },
+ tick: function(pixel) {
+ // Постепенное "высыхание"
+ pixel.energy -= 0.1;
+ if (pixel.energy <= 0) {
+ changePixel(pixel, "bison");
+ }
+ },
+ burn: 100,
+ burnTime: 1000,
+ burnInto: "ash",
+ hidden: true
+};
+
+elements.shepherdia = {
+ color: "#FF6347", // Ярко-красный цвет ягоды
+ behavior: [
+ "XX|XX|XX", // Остаётся статичной
+ "XX|XX|XX", // Не двигается
+ "M2|M1|M2" // Остаётся на месте
+ ],
+ category: "food", // Категория еды
+ state: "solid", // Твёрдое состояние
+ density: 800, // Лёгкий элемент
+ tempHigh: 40, // Портится при высокой температуре
+ stateHigh: "rotten_fruit",
+ tempLow: -5, // Замерзает при низкой температуре
+ stateLow: "frozen_fruit",
+ properties: {
+ nutrition: 50, // Восстанавливает энергию при поедании
+ },
+ burn: 100,
+ burnTime: 1000,
+ burnInto: "ash",
+ hidden: true
+};
+
+elements.rotten_fruit = {
+ color: "#8B0000", // Тёмно-красный цвет испорченной ягоды
+ behavior: behaviors.POWDER, // Никакого движения
+ category: "food", // Остаётся в категории еды
+ state: "solid", // Всё ещё твёрдое состояние
+ density: 800, // Такая же плотность
+ hidden: true
+};
+
+elements.frozen_fruit = {
+ color: "#ADD8E6", // Светло-голубой цвет замороженной ягоды
+ behavior: behaviors.POWDER, // Никакого движения
+ category: "food", // Остаётся в категории еды
+ state: "solid", // Твёрдое состояние
+ density: 850, // Немного тяжелее
+ hidden: true
+};
+
+elements.shepherdia_bush = {
+ color: "#228B22", // Зелёный цвет куста
+ behavior: [
+ "XX|XX|XX", // Остаётся статичным
+ "CR:shepherdia%1|XX|CR:shepherdia%1", // Не двигается
+ "XX|XX|XX" // Остаётся на месте
+ ],
+ category: "plant", // Категория растений
+ state: "solid", // Твёрдое состояние
+ density: 1000, // Средняя плотность для растения
+ tempHigh: 50, // Горит при высокой температуре
+ stateHigh: "ash",
+ reactions: {
+ "water": { elem1: "wet_bush" } // Куст становится мокрым при контакте с водой
+ },
+ burn: 100,
+ burnTime: 1000,
+ burnInto: "ash",
+ hidden: true,
+ seed: "shepherdia_seed"
+};
+
+elements.wet_bush = {
+ color: "#2E8B57", // Тёмно-зелёный цвет мокрого куста
+ behavior: behaviors.WALL, // Никакого движения
+ category: "plant", // Остаётся в категории растений
+ state: "solid", // Твёрдое состояние
+ density: 1020, // Немного тяжелее из-за воды
+ tempHigh: 50, // Также горит при высокой температуре
+ stateHigh: "ash",
+ properties: {
+ energy: 150, // Мокрый куст теряет немного энергии
+ },
+ tick: function(pixel) {
+ // Постепенное "высыхание"
+ pixel.energy -= 0.1;
+ if (pixel.energy <= 0) {
+ changePixel(pixel, "shepherdia_bush");
+ }
+ },
+ burn: 100,
+ burnTime: 1000,
+ burnInto: "ash",
+ hidden: true
+};
+
+elements.shepherdia_seed = {
+ color: "#8B4513", // Коричневый цвет семени
+ behavior: [
+ "XX|XX|XX", // Остаётся статичным
+ "XX|XX|XX", // Не двигается
+ "XX|M1|XX" // Падает вниз
+ ],
+ category: "plant", // Категория растений
+ state: "solid", // Твёрдое состояние
+ density: 900, // Лёгкая плотность
+ tempHigh: 50, // Горит при высокой температуре
+ stateHigh: "ash",
+ reactions: {
+ "water": { elem1: "shepherdia_bush" } // При контакте с водой превращается в куст
+ },
+ seed: true
+};
\ No newline at end of file
diff --git a/weapons.js b/weapons.js
deleted file mode 100644
index c44cb455..00000000
--- a/weapons.js
+++ /dev/null
@@ -1,1255 +0,0 @@
-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.little_boy = {
- color: "#F5F5DC",
- behavior: [
- "XX|EX:20>plasma|XX",
- "XX|XX|XX",
- "M2|M1 AND EX:70>plasma,plasma,plasma,plasma,radiation,fallout|M2",
- ],
- category: "weapons",
- state: "solid",
- density: 500,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.fat_man = {
- color: ["#ffff00","#333333"],
- behavior: [
- "XX|EX:28>plasma|XX",
- "XX|XX|XX",
- "M2|M1 AND EX:98>plasma,plasma,plasma,plasma,radiation,fallout|M2",
- ],
- category: "weapons",
- state: "solid",
- density: 1000,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.self_propelled_bomb = {
- color: "#71797E",
- tick: function(pixel) {
- if ((pixel.temp > 1000 || pixel.charge) && !pixel.burning) {
- pixel.burning = true;
- pixel.burnStart = pixelTicks;
- }
- if (pixel.burning) {
- if (!tryMove(pixel, pixel.x, pixel.y-1)) {
- // tryMove again to the top left or top right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y-1);
- }
- if (pixelTicks-pixel.burnStart > 50 && Math.random() < 0.1) {
- explodeAt(pixel.x, pixel.y, 10, "bomb");
- }
- }
- else {
- if (!tryMove(pixel, pixel.x, pixel.y+1)) {
- // tryMove again to the bottom left or bottom right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y+1);
- }
- }
- doDefaults(pixel);
- },
- burn: 90,
- burnTime: 100,
- density: 2000,
- conduct: 1,
- state: "solid",
- category: "weapons"
-},
-elements.left_missile = {
- color: "#4c4e42",
- behavior: [
- "M2|EX:10|XX",
- "M1 AND EX:10|XX|EX:10",
- "M2|EX:10|XX",
- ],
- state: "solid",
- category:"ammunition",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.right_missile = {
- color: "#4c4e42",
- behavior: [
- "XX|EX:10|M2",
- "EX:10|XX|M1 AND EX:10",
- "XX|EX:10|M2",
- ],
- state: "solid",
- category:"ammunition",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.up_missile = {
- color: "#4c4e42",
- behavior: [
- "M2|M1 AND EX:10|M2",
- "EX:10|XX|EX:10",
- "XX|EX:10|XX",
- ],
- state: "solid",
- category:"ammunition",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
- elements.cluster_munition = {
- color: "#444444",
- behavior: [
- "XX|EX:10>smoke,smoke,smoke,smoke,bomb,bomb|XX",
- "XX|XX|XX",
- "M2|M1 AND EX:10>smoke,smoke,smoke,smoke,bomb,cluster_munition|M2",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
-},
- elements.RL_cluster_munition = {
- color: "#444444",
- behavior: [
- "XX|XX|XX",
- "CRcluster%20|XX|CR:cluster%20",
- "M2|M1|M2",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
-},
- elements.cluster = {
- color: "#444444",
- behavior: [
- "XX|EX:10%10|XX",
- "XX|XX|XX",
- "M2|M1 AND EX:10%10|M2",
- ],
- category: "ammunition",
- state: "solid",
- density: 1300,
- hidden: true,
-},
- elements.machine_gun_left = {
- color: "#C0C0C0",
- behavior: [
- "XX|XX|XX",
- "CR:left_bullet|XX|XX",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
-},
- elements.machine_gun_right = {
- color: "#C0C0C0",
- behavior: [
- "XX|XX|XX",
- "XX|XX|CR:right_bullet",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
-},
-elements.left_bullet = {
- color: "#4c4e42",
- behavior: [
- "M2|XX|XX",
- "M1 AND DB|XX|XX",
- "M2|XX|XX",
- ],
- state: "solid",
- category:"ammunition",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
- elements.right_bullet = {
- color: "#4c4e42",
- behavior: [
- "XX|XX|M2",
- "XX|XX|M1 AND DB",
- "XX|XX|M2",
- ],
- state: "solid",
- category:"ammunition",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
- elements.e_gun_left = {
- color: "#C0C0C0",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "CR:left_bullet|XX|XX",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- conduct: 1,
- density: 1300,
-},
- elements.e_gun_right = {
- color: "#C0C0C0",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "XX|XX|CR:right_bullet",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- conduct: 1,
- density: 1300,
-},
- elements.auto_rocket_launcher_left = {
- color: "#C0C0C0",
- behavior: [
- "XX|XX|XX",
- "CR:left_rocket|XX|XX",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
-},
- elements.auto_rocket_launcher_right = {
- color: "#C0C0C0",
- behavior: [
- "XX|XX|XX",
- "XX|XX|CR:right_rocket",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
-},
-elements.left_rocket = {
- color: "#4c4e42",
- behavior: [
- "XX|XX|XX",
- "M1 AND EX:10|XX|XX",
- "XX|XX|XX",
- ],
- state: "solid",
- category:"ammunition",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
- elements.right_rocket = {
- color: "#4c4e42",
- behavior: [
- "XX|XX|XX",
- "XX|XX|M1 AND EX:10",
- "XX|XX|XX",
- ],
- state: "solid",
- category:"ammunition",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
- elements.e_rocket_launcher_left = {
- color: "#C0C0C0",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "CR:left_rocket|XX|XX",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- conduct: 1,
- density: 1300,
-},
- elements.e_rocket_launcher_right = {
- color: "#C0C0C0",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "XX|XX|CR:right_rocket",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- conduct: 1,
- density: 1300,
-},
-elements.gaster_blast_left = {
- color: "#c5e9f0",
- behavior: [
- "DL|DL|XX",
- "DL AND CR:gaster_blast_left%5|XX|XX",
- "DL|DL|XX",
- ],
- tick: function(pixel) {
- for (var i=0; i<3; i++) {
- if (!tryMove(pixel, pixel.x-2, pixel.y)) {
- if (!isEmpty(pixel.x-2, pixel.y,true)) {
- var newPixel = pixelMap[pixel.x-2][pixel.y];
- if (newPixel.element === "gaster_blast_left") { break; }
- if (elements[newPixel.element].state == "gas") {
- if (Math.random() > (elements[newPixel.element].hardness || 0)) {
- if (elements[newPixel.element].breakInto) {
- breakPixel(newPixel);
- }
- else {
- deletePixel(newPixel.x, newPixel.y);
- }}}}
- deletePixel(pixel.x,pixel.y);
- break;
- }}},
- category: "energy",
- state: "gas",
- insulate: true,
-},
-elements.gaster_blast_right = {
- color: "#c5e9f0",
- behavior: [
- "XX|DL|DL",
- "XX|XX|DL AND CR:gaster_blast_right%5",
- "XX|DL|DL",
- ],
- tick: function(pixel) {
- for (var i=0; i<3; i++) {
- if (!tryMove(pixel, pixel.x+2, pixel.y)) {
- if (!isEmpty(pixel.x+2, pixel.y,true)) {
- var newPixel = pixelMap[pixel.x+2][pixel.y];
- if (newPixel.element === "gaster_blast_right") { break; }
- if (elements[newPixel.element].state == "gas") {
- if (Math.random() > (elements[newPixel.element].hardness || 0)) {
- if (elements[newPixel.element].breakInto) {
- breakPixel(newPixel);
- }
- else {
- deletePixel(newPixel.x, newPixel.y);
- }}}}
- deletePixel(pixel.x,pixel.y);
- break;
- }}},
- category: "energy",
- state: "gas",
- insulate: true,
-},
- elements.gaster_blaster_left = {
- color: "#ffffff",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "CR:gaster_blast_left|XX|XX",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- conduct: 20,
-},
- elements.gaster_blaster_right = {
- color: "#ffffff",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "XX|XX|CR:gaster_blast_right",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- conduct: 20,
-},
-elements.fast_bullet_left = {
- color: "#4c4e42",
- behavior: [
- "XX|DL|XX",
- "XX|XX|XX",
- "XX|DL|XX",
- ],
-tick: function(pixel) {
- for (var i=0; i<3; i++) {
- if (!tryMove(pixel, pixel.x-3, pixel.y)) {
- if (!isEmpty(pixel.x-3, pixel.y,true)) {
- var newPixel = pixelMap[pixel.x-3][pixel.y];
- if (newPixel.element === "fast_bullet_left") { break; }
- if (elements[newPixel.element].state == "solid") {
- if (Math.random() > (elements[newPixel.element].hardness || 0)) {
- if (elements[newPixel.element].breakInto) {
- breakPixel(newPixel);
- }
- else {
- deletePixel(newPixel.x, newPixel.y);
- }}}}
- deletePixel(pixel.x,pixel.y);
- break;
- }}},
- category: "ammunition",
- state: "solid",
- insulate: true,
-},
-elements.fast_bullet_right = {
- color: "#4c4e42",
- behavior: [
- "XX|DL|XX",
- "XX|XX|XX",
- "XX|DL|XX",
- ],
- tick: function(pixel) {
- for (var i=0; i<3; i++) {
- if (!tryMove(pixel, pixel.x+3, pixel.y)) {
- if (!isEmpty(pixel.x+3, pixel.y,true)) {
- var newPixel = pixelMap[pixel.x+3][pixel.y];
- if (newPixel.element === "fast_bullet_right") { break; }
- if (elements[newPixel.element].state == "solid") {
- if (Math.random() > (elements[newPixel.element].hardness || 0)) {
- if (elements[newPixel.element].breakInto) {
- breakPixel(newPixel);
- }
- else {
- deletePixel(newPixel.x, newPixel.y);
- }}}}
- deletePixel(pixel.x,pixel.y);
- break;
- }}},
- category: "ammunition",
- state: "solid",
- insulate: true,
-},
-elements.flak_cannon = {
- color: "#C0C0C0",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|CR:flak|XX",
- "XX|XX|XX",
- "XX|XX|XX",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
- conduct: 1,
-},
- elements.flak = {
- color: "#f0f0f0",
- tick: function(pixel) {
- if ((pixel.temp > 10 || pixel.charge) && !pixel.burning) {
- pixel.burning = true;
- pixel.burnStart = pixelTicks;
- }
- if (pixel.burning) {
- if (!tryMove(pixel, pixel.x, pixel.y-1)) {
- // tryMove again to the top left or top right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y-1);
- }
- if (pixelTicks-pixel.burnStart > 50 && Math.random() < 0.005) {
- explodeAt(pixel.x, pixel.y, 10, "flak_shrapnel");
- }
- }
- else {
- if (!tryMove(pixel, pixel.x, pixel.y+1)) {
- // tryMove again to the bottom left or bottom right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y+1);
- }
- }
- doDefaults(pixel);
- },
- burn: 90,
- burnTime: 100,
- density: 2000,
- conduct: 1,
- state: "solid",
- category: "ammunition"
-},
- elements.flak_shrapnel = {
- color: "#71797E",
- behavior: [
- "XX|XX|XX",
- "XX|EX:5 %10|XX",
- "M2|M1|M2",
- ],
- burn: 90,
- burnTime: 100,
- density: 2000,
- conduct: 1,
- state: "solid",
- category: "ammunition"
-},
-elements.fighter_jet_left = {
- color: "#bcc6cc",
- behavior: [
- "M1%0.2|M2%0.005 AND EX:5>metal_scrap|M2%0.005 AND EX:5>metal_scrap",
- "M1 AND CR:fast_bullet_left|XX|CR:smoke AND EX:5>metal_scrap",
- "M1%0.2|M2%0.005 AND EX:5>metal_scrap|M2%0.005 AND EX:5>metal_scrap",
- ],
-tick: function(pixel) {
- for (var i=0; i<2; i++) {
- if (!tryMove(pixel, pixel.x-1, pixel.y)) {
- if (!isEmpty(pixel.x-1, pixel.y,true)) {
- var newPixel = pixelMap[pixel.x-1][pixel.y];
- if (newPixel.element === "fast_bullet_left") { break; }
- if (elements[newPixel.element].state == "solid") {
- if (Math.random() > (elements[newPixel.element].hardness || 0)) {
- if (elements[newPixel.element].breakInto) {
- breakPixel(newPixel);
- }
- else {
- deletePixel(newPixel.x, newPixel.y);
- }}}}
- deletePixel(pixel.x,pixel.y);
- break;
- }}},
- category: "aircrafts",
- breakInto: "metal_scrap"
- },
-elements.fighter_jet_right = {
- color: "#bcc6cc",
- behavior: [
- "M2%0.005 AND EX:5>metal_scrap|M2%0.005 AND EX:5>metal_scrap|M1%0.2",
- "CR:smoke AND EX:5>metal_scrap|XX|M1 AND CR:fast_bullet_right",
- "M2%0.005 AND EX:5>metal_scrap|M2%0.005 AND EX:5>metal_scrap|M1%0.2",
- ],
-tick: function(pixel) {
- for (var i=0; i<2; i++) {
- if (!tryMove(pixel, pixel.x+1, pixel.y)) {
- if (!isEmpty(pixel.x+1, pixel.y,true)) {
- var newPixel = pixelMap[pixel.x+1][pixel.y];
- if (newPixel.element === "fast_bullet_right") { break; }
- if (elements[newPixel.element].state == "solid") {
- if (Math.random() > (elements[newPixel.element].hardness || 0)) {
- if (elements[newPixel.element].breakInto) {
- breakPixel(newPixel);
- }
- else {
- deletePixel(newPixel.x, newPixel.y);
- }}}}
- deletePixel(pixel.x,pixel.y);
- break;
- }}},
- category: "aircrafts",
- breakInto: "metal_scrap"
- },
-elements.machine_for_throwing_bombs_at_you_left = {
- color: "#524c41",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "CR:bombs_for_throwing_at_you_left|XX|XX",
- "XXXX|XX",
- ],
- category: "weapons",
- conduct: 1
-},
-elements.bombs_for_throwing_at_you_left = {
- color: "#524c41",
- category: "ammunition",
- behavior: [
- "XX|EX:10>bomb|XX",
- "XX|XX|XX",
- "M1|M1%10 AND EX:10>bomb|XX",
- ],
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-}
-elements.machine_for_throwing_bombs_at_right = {
- color: "#524c41",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "XX|XX|CR:bombs_for_throwing_at_you_right",
- "XXXX|XX",
- ],
- category: "weapons",
- conduct: 1
-},
-elements.bombs_for_throwing_at_you_right = {
- color: "#524c41",
- category: "ammunition",
- behavior: [
- "XX|EX:10>bomb|XX",
- "XX|XX|XX",
- "XX|M1%10 AND EX:10>bomb|M1",
- ],
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.energized_orb_left = {
- color: ["#e0e000","#f3f300"],
- category: "energy",
- behavior: [
- "XX|EX:50>electric|XX",
- "M1 AND EX:50>electric|XX|EX:50>electric",
- "XX|EX:50>electric|XX"
- ],
- state: "gas",
-},
-elements.energized_orb_right = {
- color: ["#e0e000","#f3f300"],
- category: "energy",
- behavior: [
- "XX|EX:50>electric|XX",
- "EX:50>electric|XX|M1 AND EX:50>electric",
- "XX|EX:50>electric|XX"
- ],
- state: "gas",
-},
-elements.fast_bomb = {
- color: "#524c41",
- category: "weapons",
- state: "solid",
- behavior: [
- "XX|EX:10>explosion|XX",
- "XX|XX|XX",
- "M2|M1 AND EX:10>explosion|M2",
- ],
- tick: function(pixel) {
- for (var i=0; i<3; i++) {
- if (!tryMove(pixel, pixel.x, pixel.y+1)) {
- if (!isEmpty(pixel.x, pixel.y+1,true)) {
- }
- }
- }
- },
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.liquid_bomb = {
- color: "#524c41",
- tick: function(pixel) {
- if (pixel.start === pixelTicks) {return}
- if (pixel.charge && elements[pixel.element].behaviorOn) {
- pixelTick(pixel)
- }
- if (elements[pixel.element].viscosity && (!((Math.random()*100) < 100 / Math.pow(elements[pixel.element].viscosity, 0.25)))) {
- var move1Spots = [
- [pixel.x, pixel.y+1]
- ]
- }
- else {
- var move1Spots = [
- [pixel.x+1, pixel.y+1],
- [pixel.x, pixel.y+1],
- [pixel.x-1, pixel.y+1],
- ]
- }
- var moved = false;
- for (var i = 0; i < move1Spots.length; i++) {
- var coords = move1Spots[Math.floor(Math.random()*move1Spots.length)];
- if (tryMove(pixel, coords[0], coords[1])) { moved = true; break; }
- else { move1Spots.splice(move1Spots.indexOf(coords), 1); }
- }
- if (!moved) {
- if (elements[pixel.element].viscosity===undefined || !(!((Math.random()*100) < 100 / Math.pow(elements[pixel.element].viscosity, 0.25)))) {
- if (Math.random() < 0.5) {
- if (!tryMove(pixel, pixel.x+1, pixel.y)) {
- tryMove(pixel, pixel.x-1, pixel.y);
- }
- } else {
- if (!tryMove(pixel, pixel.x-1, pixel.y)) {
- tryMove(pixel, pixel.x+1, pixel.y);
- }
- }
- }
- }
- doDefaults(pixel);
- },
- category: "weapons",
- state: "liquid",
- behavior: [
- "XX|EX:10>explosion|XX",
- "XX|XX|XX",
- "XX|EX:10>explosion|XX",
- ],
- density: 1300,
- excludeRandom: true,
- ignore: "gas_bomb",
- cooldown: defaultCooldown
-},
-elements.gas_bomb = {
- color: "#524c41",
- tick: function(pixel) {
- if (pixel.start === pixelTicks) {return}
- if (pixel.charge && elements[pixel.element].behaviorOn) {
- pixelTick(pixel)
- }
- var move1Spots = [
- [pixel.x, pixel.y+1],
- [pixel.x, pixel.y-1],
- [pixel.x+1, pixel.y],
- [pixel.x-1, pixel.y],
- ]
- var moved = false;
- for (var i = 0; i < move1Spots.length; i++) {
- var coords = move1Spots[Math.floor(Math.random()*move1Spots.length)];
- if (tryMove(pixel, coords[0], coords[1])) { moved = true; break; }
- else { move1Spots.splice(move1Spots.indexOf(coords), 1);}
- }
- if (!moved) {
- var move2Spots = [
- [pixel.x+1, pixel.y+1],
- [pixel.x-1, pixel.y+1],
- [pixel.x+1, pixel.y-1],
- [pixel.x-1, pixel.y-1],
- ]
- for (var i = 0; i < move2Spots.length; i++) {
- var coords = move2Spots[Math.floor(Math.random()*move2Spots.length)];
- if (tryMove(pixel, coords[0], coords[1])) { break; }
- else { move2Spots.splice(move2Spots.indexOf(coords), 1); }
- }
- }
- doDefaults(pixel);
- },
- category: "weapons",
- state: "gas",
- behavior: [
- "XX|EX:10>explosion|XX",
- "XX|XX|XX",
- "XX|EX:10>explosion|XX",
- ],
- density: 1300,
- excludeRandom: true,
- ignore: "liquid_bomb",
- cooldown: defaultCooldown
-}
-elements.tank_left = {
- color: "#bcc6cc",
- category: "vehicles",
- behavior: [
- "M2 AND CR:fast_bullet_left|XX|XX",
- "M1|XX|XX",
- "M1|M1|XX",
- ],
-},
-elements.tank_right = {
- color: "#bcc6cc",
- category: "vehicles",
- behavior: [
- "XX|XX|M2 AND CR:fast_bullet_right",
- "XX|XX|M1",
- "XX|M1|M1",
- ],
-},
-elements.realistic_missile_left = {
- color: "#524c41",
- category: "weapons",
- state: "solid",
- behavior: [
- "XX|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|M2 AND EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|M1 AND EX:20>missile_shrapnel|XX|EX:20>missile_shrapnel|CR:smoke AND EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|M2 AND EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "XX|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX",
- ],
- tick: function(pixel) {
- for (var i=0; i<3; i++) {
- if (!tryMove(pixel, pixel.x-1, pixel.y)) {
- if (!isEmpty(pixel.x-1, pixel.y,true)) {
- }
- }
- }
- },
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.realistic_missile_right = {
- color: "#524c41",
- category: "weapons",
- state: "solid",
- behavior: [
- "XX|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|M2 AND EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|CR:smoke AND EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX|M1|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|M2 AND EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "XX|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX",
- ],
- tick: function(pixel) {
- for (var i=0; i<3; i++) {
- if (!tryMove(pixel, pixel.x+1, pixel.y)) {
- if (!isEmpty(pixel.x+1, pixel.y,true)) {
- }
- }
- }
- },
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
- elements.missile_shrapnel = {
- color: "#71797E",
- behavior: [
- "XX|XX|XX",
- "XX|EX:5 %20|XX",
- "M2%20|M1%20|M2%20",
- ],
- burn: 90,
- burnTime: 100,
- density: 2000,
- conduct: 1,
- state: "solid",
- category: "ammunition"
-},
-elements.vlms_left = {
- color: "#71797E",
- tick: function(pixel) {
- if ((pixel.temp > 1000 || pixel.charge) && !pixel.burning) {
- pixel.burning = true;
- pixel.burnStart = pixelTicks;
- }
- if (pixel.burning) {
- if (!tryMove(pixel, pixel.x, pixel.y-1)) {
- // tryMove again to the top left or top right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y-1);
- }
- if (pixelTicks-pixel.burnStart > 50 && Math.random() < 0.1) {
- explodeAt(pixel.x, 10, 4, "realistic_missile_left");
- deletePixel(pixel.x,pixel.y)
- }
- }
- else {
- if (!tryMove(pixel, pixel.x, pixel.y+1)) {
- // tryMove again to the bottom left or bottom right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y+1);
- }
- }
- doDefaults(pixel);
- },
- burn: 90,
- burnTime: 100,
- density: 2000,
- conduct: 1,
- state: "solid",
- category: "weapons"
-},
-elements.vlms_right = {
- color: "#71797E",
- tick: function(pixel) {
- if ((pixel.temp > 1000 || pixel.charge) && !pixel.burning) {
- pixel.burning = true;
- pixel.burnStart = pixelTicks;
- }
- if (pixel.burning) {
- if (!tryMove(pixel, pixel.x, pixel.y-1)) {
- // tryMove again to the top left or top right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y-1);
- }
- if (pixelTicks-pixel.burnStart > 50 && Math.random() < 0.1) {
- explodeAt(pixel.x, 10, 4, "realistic_missile_right");
- deletePixel(pixel.x,pixel.y)
- }
- }
- else {
- if (!tryMove(pixel, pixel.x, pixel.y+1)) {
- // tryMove again to the bottom left or bottom right
- tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y+1);
- }
- }
- doDefaults(pixel);
- },
- burn: 90,
- burnTime: 100,
- density: 2000,
- conduct: 1,
- state: "solid",
- category: "weapons"
-},
-createAtXvar = 0;
-createAtYvar = 0;
-create1var = "";
-elements.element_spawner = {
- color: "#71797E",
- onSelect: function() {
- var answer1 = prompt("Please input the x value.",(createAtXvar||undefined));
- if (!answer1) {return}
- createAtXvar = parseInt(answer1);
- var answer2 = prompt("Please input the y value.",(createAtYvar||undefined));
- if (!answer2) {return}
- createAtYvar = parseInt(answer2);
- var answer3 = prompt("Please input what element should spawn.",(create1var||undefined));
- if (!answer3) {return}
- create1var = answer3;
- },
- tick: function(pixel) {
- if (pixel.charge){
- createPixel(create1var, createAtXvar, createAtYvar);
- }
- doDefaults(pixel);
- },
- density: 1,
- conduct: 1,
- state: "solid",
- category: "machines"
-},
-elements.railgun_beam_left = {
- color: ["#ff0000","#ff5e00"],
- tick: function(pixel) {
- var y = pixel.y;
- for (var x = pixel.x; x < width; x--) {
- if (outOfBounds(x, y)) {
- break;
- }
- if (isEmpty(x, y)) {
- createPixel("railgun_ammo_left", x, y);
- pixelMap[x][y].temp = 3500;
- }
- else {
- if (elements[pixelMap[x][y].element].isGas) { continue }
- if (elements[pixelMap[x][y].element].id === elements.railgun_beam_left.id) { break }
- pixelMap[x][y].temp += 100;
- pixelTempCheck(pixelMap[x][y]);
- break;
- }
- }
- deletePixel(pixel.x, pixel.y);
- },
- temp: 3500,
- category: "ammunition",
- state: "gas",
- density: 1,
- excludeRandom: true,
- noMix: true
-},
-elements.railgun_beam_right = {
- color: ["#ff0000","#ff5e00"],
- tick: function(pixel) {
- var y = pixel.y;
- for (var x = pixel.x; x < width; x++) {
- if (outOfBounds(x, y)) {
- break;
- }
- if (isEmpty(x, y)) {
- createPixel("railgun_ammo_right", x, y);
- pixelMap[x][y].temp = 3500;
- }
- else {
- if (elements[pixelMap[x][y].element].isGas) { continue }
- if (elements[pixelMap[x][y].element].id === elements.railgun_beam_right.id) { break }
- pixelMap[x][y].temp += 100;
- pixelTempCheck(pixelMap[x][y]);
- break;
- }
- }
- deletePixel(pixel.x, pixel.y);
- },
- temp: 3500,
- category: "ammunition",
- state: "gas",
- density: 1,
- excludeRandom: true,
- noMix: true
-},
-elements.railgun_ammo_left = {
- color: ["#ff0000","#ff5e00"],
- category: "ammunition",
- state: "solid",
- density: 1300,
- tick: function(pixel) {
- explodeAt(pixel.x, pixel.y, 10)
- doHeat(pixel);
- },
-},
-elements.railgun_ammo_right = {
- color: ["#ff0000","#ff5e00"],
- category: "ammunition",
- state: "solid",
- density: 1300,
- tick: function(pixel) {
- explodeAt(pixel.x, pixel.y, 10)
- doHeat(pixel);
- },
-},
-elements.railgun_left = {
- category: "weapons",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "CR:railgun_beam_left|XX|XX",
- "XX|XX|XX",
- ],
- color: "#71797E",
- conduct: 1,
- hardness: 1,
-},
-elements.railgun_right = {
- category: "weapons",
- behavior: behaviors.WALL,
- behaviorOn: [
- "XX|XX|XX",
- "XX|XX|CR:railgun_beam_right",
- "XX|XX|XX",
- ],
- color: "#71797E",
- conduct: 1,
- hardness: 1,
-},
-elements.static_bomb = {
- color: "#524c41",
- behavior: [
- "XX|EX:10|XX",
- "EX:10|XX|EX:10",
- "XX|EX:10|XX",
- ],
- category: "weapons",
- state: "solid",
- density: 1300,
- excludeRandom: true,
- cooldown: defaultCooldown
-}
-var target =[,];
-var tgt = "head";
-elements.tracking_missile = {
- color: "#323232",
- category: "weapons",
- behavior: [
- "XX|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel",
- "XX|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|EX:20>missile_shrapnel|XX",
- ],
- onSelect: function() {
- var answer1 = prompt("Please input the target element.",(tgt||undefined));
- if (!answer1) {return}
- tgt = answer1;
- },
- tick: (pixel) => {
- for (var x = 1; x < width; x++) {
- for (var y = 1; y < height; y++) {
- if (!isEmpty(x,y)) {
- if (pixelMap[x][y].element===tgt) {
- target = [pixelMap[x][y].x, pixelMap[x][y].y];
- }
- }
- }
- }
- if (pixel.x != target[0] || pixel.y != target[1]) {
- let {x, y} = pixel;
- const empty = checkForEmptyPixels(x, y);
- const [tX, tY] = target;
- let bestVal = Math.sqrt(Math.pow(tX - x, 2) + Math.pow(tY - y, 2));
- let best = null;
- for (const pixelPair of empty) {
- const [x_, y_] = [x + pixelPair[0], y + pixelPair[1]];
- const c = Math.sqrt(Math.pow(tX - x_, 2) + Math.pow(tY - y_, 2));
- if (c < bestVal) {
- bestVal = c;
- best = pixelPair;
- }
- }
- if (best) {
- tryMove(pixel, x + best[0]*2, y + best[1]*2, undefined, true);
- }
- }
- }
-},
-elements.laser_bomb = {
- category: "weapons",
- color: "#524c41",
- tick: function(pixel) {
- var x = pixel.x;
- for (var y = pixel.y; y < height+1; y++) {
- if (outOfBounds(x, y)) {
- if (isEmpty(x, y-1)) { createPixel("smoke", x, y-1); }
- break;
- }
- if (isEmpty(x, y)) {
-
- createPixel("flash", x, y);
- pixelMap[x][y].color = "#ff0000";
- pixelMap[x][y].temp = 35000;
- pixelMap[x][y].delay = (y + pixel.y) / 8;
- }
- }
- for (var y = pixel.y; y < height-1; y--) {
- if (outOfBounds(x, y)) {
- if (isEmpty(x, y+1)) { createPixel("smoke", x, y+1); }
- break;
- }
- if (isEmpty(x, y)) {
-
- createPixel("flash", x, y);
- pixelMap[x][y].color = "#ff0000";
- pixelMap[x][y].temp = 35000;
- pixelMap[x][y].delay = (y + pixel.y) / 8;
- }
- }
- var y = pixel.y;
- for (var x = pixel.x; x < width+1; x++) {
- if (outOfBounds(x, y)) {
- if (isEmpty(x-1, y)) { createPixel("smoke", x-1, y); }
- break;
- }
- if (isEmpty(x, y)) {
-
- createPixel("flash", x, y);
- pixelMap[x][y].color = "#ff0000";
- pixelMap[x][y].temp = 35000;
- pixelMap[x][y].delay = (x + pixel.x) / 8;
- }
- }
- for (var x = pixel.x; x < width-1; x--) {
- if (outOfBounds(x, y)) {
- if (isEmpty(x+1, y)) { createPixel("smoke", x+1, y); }
- break;
- }
- if (isEmpty(x, y)) {
-
- createPixel("flash", x, y);
- pixelMap[x][y].color = "#ff0000";
- pixelMap[x][y].temp = 35000;
- pixelMap[x][y].delay = (x + pixel.x) / 8;
- }
- }
- deletePixel(pixel.x, pixel.y);
- },
-},
-elements.cluster_nuke = {
- color: "#323232",
- category: "weapons",
- behavior: behaviors.POWDER,
- tick: (pixel) => {
- for (var y = 1; y < 50; y++) {
- if (!isEmpty(pixel.x, pixel.y + y, false)) {
- explodeAt(pixel.x,pixel.y,50,["dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","dirty_bomb","nuke",])
- }
- }
- }
-}
-document.onkeydown = function(ki)/*keyboard_input*/ {
- //a
- if (ki.keyCode == 65) {
- KA = true;
- //vX ++;
- }
- //d
- if (ki.keyCode == 68) {
- KD = true;
- //vX ++;
- }
- //w
- if (ki.keyCode == 87) {
- KW = true;
- //vY ++;
- }
- //s
- if (ki.keyCode == 83) {
- KS = true;
- //vY ++;
- }
-}
-document.onkeyup = function(i2)/*keyboard_input*/ {
- //a
- if (i2.keyCode == 65) {
- KA = false;
- //vX --;
- }
- //d
- if (i2.keyCode == 68) {
- KD = false;
- //vX --;
- }
- //w
- if (i2.keyCode == 87) {
- KW = false;
- //vY = 0;
- }
- //s
- if (i2.keyCode == 83) {
- KS = false;
- //vY = 0;
- }
-}
-var KA = false;
-var KD = false;
-var KW = false;
-var KS = false;
-var vX = 1;
-var vY = 1;
-elements.heli_bomb = {
- behavior: [
- "XX|EX:10|XX",
- "EX:10|XX|EX:10",
- "XX|EX:10|XX",
- ],
- tick: function(pixel) {
- /*if (vX === 3) {
- vX --;
- }
- if (vY === 3) {
- vY --;
- }*/
- if (KA === true) {
- tryMove (pixel,pixel.x-vX,pixel.y)
- }
- if (KD === true) {
- tryMove (pixel,pixel.x+vX,pixel.y)
- }
- if (KW === true) {
- tryMove (pixel,pixel.x,pixel.y-vY)
- }
- if (KS === true) {
- tryMove (pixel,pixel.x,pixel.y+vY)
- }
- },
- category: "weapons",
- states:"solid",
- color: "#524c41",
-},
-elements.mini_nuke = {
- color: "#534636",
- behavior: [
- "XX|XX|XX",
- "XX|XX|XX",
- "M2|M1 AND EX:20>plasma,plasma,plasma,plasma,radiation,rad_steam|M2",
- ],
- category: "weapons",
- state: "solid",
- density: 1500,
- excludeRandom: true,
- cooldown: defaultCooldown
-},
-elements.left_uranium_bullet = {
- color: "#406040",
- behavior: [
- "M2|XX|XX",
- "M1 AND EX:4>fallout|XX|XX",
- "M2|XX|XX",
- ],
- state: "solid",
- category:"ammunition",
- density: 2100,
- excludeRandom: true,
- cooldown: defaultCooldown,
- temp: 4000,
-},
-elements.right_uranium_bullet = {
- color: "#406040",
- behavior: [
- "XX|XX|M2",
- "XX|XX|M1 AND EX:4>fallout",
- "XX|XX|M2",
- ],
- state: "solid",
- category:"ammunition",
- density: 2100,
- excludeRandom: true,
- cooldown: defaultCooldown,
- temp: 4000,
-}
\ No newline at end of file