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, }