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.jsAdds Bio-Ooze from Frackin’ Universe and several heat-producing materials from various games’ modsAlice boiling_things.jsAllows for various elements to be vaporizedAlice bouncing_balls.jsAdds new types of balls that bounce accurately and roll.Nekonico +bromine.jsAdds bromine which emits an orange gasSuss chalcopyrite.jsAdds the chalcopyrite oreSophie chem.jsAdds several chemistry and physics-related elementslllllllllwith10ls clf3.jsAdds Chlorine TrifluorideAlice @@ -214,6 +215,7 @@ random_rocks.jsRandomly generates rocks on game loadAlice roseyiede.jsAdds several variants of a substance called roseyiedeAlice some_tf_liquids.jsAdds various liquids from the Thermal Foundation Minecraft modAlice +stickyslime.jsAllows slime to stick to other elementsSuss the_ground.jsAdds several rock types, worldgen settings, and gemstonesAlice Machines & Technology @@ -329,6 +331,7 @@ funnynames.jsAdds various ways to mess with the names of elementsnousernamefound haseulite.jsAdds Loona-related materials with various propertiesAlice lactose_intolerance_and_celiac.jsMakes humans explode on contact with milk, wheat, bread, or toastNubo318 +lattice_filler.jsAdds a combination of lattice and filler and adds a destructive variantSuss lone_urea.jsAdds urea without the rest of the piss modAlice maze.jsAdds a solvable maze generatorggod memelists.jsMakes it so you must select elements through a list at the bottom of the page.
We like listsmollthecoder 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