2025-05-14 17:31:19 -04:00
async function _weaponsjsprompt ( message , defaultValue = "" ) {
return new Promise ( resolve => {
promptInput ( message , ( result ) => {
resolve ( result ) ;
} , "weapons.js is asking you..." , defaultValue ) ;
} )
}
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
} ,
2024-05-25 23:21:04 -04:00
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
] ,
2024-05-25 23:21:04 -04: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
] ,
2024-05-25 23:21:04 -04: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
2024-01-24 21:08:01 -05:00
} ,
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 ,
2024-05-25 23:21:04 -04:00
} ,
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" ,
2024-05-25 23:21:04 -04:00
"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" ,
2024-05-25 23:21:04 -04:00
"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" ,
2025-05-14 17:35:35 -04:00
"M1 AND EX:10>bomb|M1%10 AND EX:10>bomb|XX" ,
2024-05-25 23:21:04 -04:00
] ,
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" ,
2025-05-14 17:35:35 -04:00
"XX|M1%10 AND EX:10>bomb|M1 AND EX:10>bomb" ,
2024-05-25 23:21:04 -04:00
] ,
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" ,
2025-05-14 17:31:19 -04:00
onSelect : async function ( ) {
var answer1 = await _weaponsjsprompt ( "Please input the x value." , ( createAtXvar || undefined ) ) ;
2024-05-25 23:21:04 -04:00
if ( ! answer1 ) { return }
createAtXvar = parseInt ( answer1 ) ;
2025-05-14 17:31:19 -04:00
var answer2 = await _weaponsjsprompt ( "Please input the y value." , ( createAtYvar || undefined ) ) ;
2024-05-25 23:21:04 -04:00
if ( ! answer2 ) { return }
createAtYvar = parseInt ( answer2 ) ;
2025-05-14 17:31:19 -04:00
var answer3 = await _weaponsjsprompt ( "Please input what element should spawn." , ( create1var || undefined ) ) ;
2024-05-25 23:21:04 -04:00
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 ) {
/ * i f ( v X = = = 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 ,
2025-05-14 17:31:19 -04:00
} ,
elements . cluster _nuke = {
color : "#323232" ,
ignore : "cluster_nuke" ,
category : "weapons" ,
behavior : behaviors . POWDER ,
maxSize : 1 ,
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" , ] )
}
}
}
2024-12-15 18:20:32 -05:00
}