sandboxels/mods/weapons.js

1255 lines
38 KiB
JavaScript
Raw Normal View History

2024-01-23 23:31:01 -05:00
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 = {
2024-01-25 21:42:15 -05:00
color: ["#ffff00","#333333"],
2024-01-23 23:31:01 -05:00
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 = {
2024-01-23 23:31:01 -05:00
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 = {
2024-01-25 21:42:15 -05:00
color: "#4c4e42",
2024-01-23 23:31:01 -05:00
behavior: [
2024-01-25 21:42:15 -05:00
"M2|EX:10|XX",
"M1 AND EX:10|XX|EX:10",
"M2|EX:10|XX",
2024-01-23 23:31:01 -05:00
],
state: "solid",
category:"ammunition",
density: 1300,
excludeRandom: true,
cooldown: defaultCooldown
2024-01-23 23:31:01 -05:00
},
elements.right_missile = {
2024-01-25 21:42:15 -05:00
color: "#4c4e42",
2024-01-23 23:31:01 -05:00
behavior: [
2024-01-25 21:42:15 -05:00
"XX|EX:10|M2",
"EX:10|XX|M1 AND EX:10",
"XX|EX:10|M2",
2024-01-23 23:31:01 -05:00
],
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",
2024-12-15 18:20:32 -05:00
"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",
2024-12-15 18:20:32 -05:00
"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"
2024-05-27 18:37:04 -04:00
},
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,
2024-12-15 18:20:32 -05:00
},
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 ++;
}
2024-12-03 23:43:05 -05:00
}
2024-12-15 18:20:32 -05:00
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,
}