2022-11-02 13:02:53 -04:00
var modName = "mods/more_bombs.js" ;
var explodeAtPlusMod = "mods/explodeAtPlus.js" ;
2022-10-11 12:46:51 -04:00
2022-11-02 13:02:53 -04:00
if ( enabledMods . includes ( explodeAtPlusMod ) ) {
urlParams = new URLSearchParams ( window . location . search ) ;
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
if ( urlParams . get ( 'bombAmount' ) != null ) { //null check
bombAmount = urlParams . get ( 'bombAmount' )
if ( isNaN ( bombAmount ) || bombAmount === "" || bombAmount === null ) { //NaN check
bombAmount = 10
2022-10-10 14:08:59 -04:00
}
2022-11-02 13:02:53 -04:00
bombAmount = parseInt ( bombAmount )
if ( bombAmount > 50 ) {
alert ( "Maximum amount of additional bomb/anti-bomb pairs is 50.\nOnly 50 were added." )
} else if ( bombAmount < 1 ) {
alert ( "Minimum amount of additional bomb/anti-bomb pairs is 1.\n1 pair was added." )
}
bombAmount = Math . min ( 50 , Math . max ( bombAmount , 1 ) )
} else {
bombAmount = 10
}
if ( typeof ( runAfterAutogen ) === "function" ) {
runAfterAutogen ( function ( ) {
if ( typeof ( elements . vaporized _rock ) === "object" ) {
elements . molten _dirt . tempHigh = 3000 ;
elements . molten _dirt . stateHigh = "vaporized_rock" ;
2022-10-10 14:08:59 -04:00
} ;
2022-11-02 13:02:53 -04:00
} ) ;
2022-10-10 14:08:59 -04:00
} ;
2022-11-02 13:02:53 -04:00
function hotterBomb ( pixel , x , y , radius , fire , smoke , power , damage ) {
//console.log(`Radius: ${radius}\nPower: ${power}\nPixel: (${pixel.x},${pixel.y})\nDamage: ${damage}`);
//console.log(`Expected temperature increase for pixel at (${pixel.x},${pixel.y}): ${800 * ((1 + (7 * damage)) ** 2) * ((power ** 2) * 1.5)}`);
pixel . temp += ( 800 * ( ( 1 + ( 7 * damage ) ) * * 2 ) * ( ( power * * 2 ) * 1.5 ) ) ;
} ;
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
elements . cluster _nuke = {
color : "#e3f636" ,
behavior : [
"CR:radiation%5|EX:90>plasma,plasma,plasma,nuke,nuke,nuke,radiation,radiation,radiation,rad_steam,rad_steam,radiation,rad_steam AND CR:radiation%5|CR:radiation%5" ,
"CR:radiation%5|XX|CR:radiation%5" ,
"M2 AND CR:radiation%5|M1 AND EX:90>plasma,plasma,plasma,nuke,nuke,nuke,radiation,radiation,radiation,rad_steam,rad_steam,radiation,rad_steam AND CR:radiation%5|M2 AND CR:radiation%5" ,
] ,
category : "weapons" ,
state : "solid" ,
density : 1500 ,
excludeRandom : true ,
} ;
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
elements . anti _bomb = {
color : "#525c61" ,
behavior : [
"M2|M1 AND EX:10|M2" ,
"XX|XX|XX" ,
"XX|EX:10|XX" ,
] ,
category : "weapons" ,
state : "solid" ,
density : 1300 ,
excludeRandom : true ,
} ;
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
elements . electric _bomblet = {
color : "#ffffff" ,
behavior : [
"SH%50|EX:8>electric AND SH%50|SH%50" ,
"SH%50|EX:9>electric%0.5|SH%50" ,
"M2 AND SH%50|M1 AND SH%50 AND EX:8>electric AND SW:electric|M2 AND SH%50" ,
] ,
category : "weapons" ,
state : "solid" ,
density : 1200 ,
hidden : true ,
excludeRandom : true ,
hardness : 0.3 ,
} ;
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
elements . electric _cluster _bomb = {
color : "#ffffff" ,
behavior : [
"SH%50|EX:8>electric_bomblet AND SH%50|SH%50" ,
"SH%50|XX|SH%50" ,
"M2 AND SH%50|M1 AND SH%50 AND EX:8>electric_bomblet AND SW:electric|M2 AND SH%50" ,
] ,
category : "weapons" ,
state : "solid" ,
density : 1800 ,
hidden : true ,
excludeRandom : true ,
hardness : 0.3 ,
} ;
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
elements . radioactive _popper = {
color : "#d6ce72" ,
behavior : [
"XX|EX:7>radiation|XX" ,
"XX|XX|XX" ,
"M2|M1 AND EX:7>radiation|M2" ,
] ,
category : "weapons" ,
state : "solid" ,
density : 1200 ,
hidden : true ,
excludeRandom : true ,
hardness : 0.3 ,
cooldown : 3 ,
} ;
2022-10-11 12:46:51 -04:00
2022-11-02 13:02:53 -04:00
elements . acid _bomb = {
color : "#7d8a63" ,
behavior : [
"XX|EX:15>acid_gas|XX" ,
"XX|XX|XX" ,
"M2|M1 AND EX:15>acid_gas|M2" ,
] ,
category : "weapons" ,
state : "solid" ,
density : 1400 ,
excludeRandom : true ,
cooldown : defaultCooldown ,
} ;
2022-10-11 12:46:51 -04:00
2022-11-02 13:02:53 -04:00
amalgamatedBombFire = "plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,smoke,plasma,plasma,fire,smoke,fire,smoke,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,acid,acid,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,plasma,smoke,plasma,plasma,fire,smoke,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,flash,flash,flash,flash,flash,acid_gas,acid_gas,acid_gas,acid,oil,oil,oil,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,acid,acid,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,plasma,smoke,plasma,plasma,fire,smoke,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,electric_cluster_bomb,electric_cluster_bomb,flash,flash,flash,flash,flash,acid_gas,acid_gas,acid_gas,acid,oil,oil,oil,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,plague,plague,plague,plague,plague,plague,radiation,radiation,radiation,radiation,radiation,radiation,radiation,radiation,uranium,uranium,uranium,uranium,uranium,uranium,greek_fire,greek_fire,greek_fire,greek_fire,greek_fire,antimatter,antimatter,antimatter,antimatter,antimatter,smoke_grenade,antimatter,smoke_grenade,fireball,flash,acid_gas,acid_gas,acid_gas,plague,plague,plague,plague,plague,plague,radiation,radiation,radiation,radiation,radiation,radiation,radiation,radiation,uranium,uranium,uranium,uranium,uranium,uranium,greek_fire,greek_fire,greek_fire,greek_fire,greek_fire,antimatter,antimatter,antimatter,antimatter,antimatter,smoke_grenade,antimatter,flash,acid_gas,acid_gas,acid_gas,radiation,radiation,radiation,radiation,plague,acid_gas,acid_gas,acid_gas,chlorine,chlorine,chlorine"
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
elements . amalgamated _bomb = {
color : [ "#FF0000" , "#FF0000" , "#FFFF00" , "#FFFF00" , "#00FF00" , "#00FF00" , "#0000FF" , "#0000FF" ] ,
tick : function ( pixel ) {
doDefaults ( pixel ) ;
if ( ! isEmpty ( pixel . x , pixel . y - 1 , true ) ) { //[0][1] EX (ignore bounds)
var newPixel = pixelMap [ pixel . x ] [ pixel . y - 1 ] ;
var newElement = newPixel . element ;
var newInfo = elements [ newElement ] ;
if ( newInfo . state !== "gas" && newElement !== pixel . element ) {
explodeAtPlus ( pixel . x , pixel . y , 70 , amalgamatedBombFire , amalgamatedBombFire ) ;
} ;
2022-10-10 14:08:59 -04:00
} ;
2022-11-02 13:02:53 -04:00
if ( ! isEmpty ( pixel . x , pixel . y + 1 , true ) ) { //[2][1] EX (don't ignore bounds, non-bound case)
var newPixel = pixelMap [ pixel . x ] [ pixel . y + 1 ] ;
var newElement = newPixel . element ;
var newInfo = elements [ newElement ] ;
if ( newInfo . state !== "gas" && newElement !== pixel . element ) {
explodeAtPlus ( pixel . x , pixel . y , 70 , amalgamatedBombFire , amalgamatedBombFire ) ;
} ;
} ;
if ( outOfBounds ( pixel . x , pixel . y + 1 ) ) { //[2][1] EX (don't ignore bounds, bound case)
2022-10-10 14:08:59 -04:00
explodeAtPlus ( pixel . x , pixel . y , 70 , amalgamatedBombFire , amalgamatedBombFire ) ;
} ;
2022-11-02 13:02:53 -04:00
if ( ! tryMove ( pixel , pixel . x , pixel . y + 1 ) ) { //behaviors.POWDER
Math . random ( ) < 0.5 ? tryMove ( pixel , pixel . x - 1 , pixel . y + 1 ) : tryMove ( pixel , pixel . x + 1 , pixel . y + 1 ) ;
} ;
} ,
category : "weapons" ,
state : "solid" ,
temp : 7065 ,
density : 158000 ,
excludeRandom : true ,
} ;
2022-10-10 14:08:59 -04:00
2022-11-02 13:02:53 -04:00
elements . op _hottester _bomb = {
color : "#cc436e" ,
properties : {
radius : 15 , //just so people can edit it per pixel to be stupidly high
} ,
tick : function ( pixel ) {
doDefaults ( pixel ) ;
if ( ! isEmpty ( pixel . x , pixel . y - 1 , true ) ) { //[0][1] EX (ignore bounds)
var newPixel = pixelMap [ pixel . x ] [ pixel . y - 1 ] ;
var newElement = newPixel . element ;
var newInfo = elements [ newElement ] ;
if ( newInfo . state !== "gas" && newElement !== pixel . element ) {
explodeAtPlus ( pixel . x , pixel . y , pixel . radius , "plasma" , "plasma" , hotterBomb , hotterBomb , false ) ;
} ;
2022-10-10 14:08:59 -04:00
} ;
2022-11-02 13:02:53 -04:00
if ( ! isEmpty ( pixel . x , pixel . y + 1 , true ) ) { //[2][1] EX (don't ignore bounds, non-bound case)
var newPixel = pixelMap [ pixel . x ] [ pixel . y + 1 ] ;
var newElement = newPixel . element ;
var newInfo = elements [ newElement ] ;
if ( newInfo . state !== "gas" && newElement !== pixel . element ) {
explodeAtPlus ( pixel . x , pixel . y , pixel . radius , "plasma" , "plasma" , hotterBomb , hotterBomb , false ) ;
} ;
} ;
if ( outOfBounds ( pixel . x , pixel . y + 1 ) ) { //[2][1] EX (don't ignore bounds, bound case)
2022-10-10 14:08:59 -04:00
explodeAtPlus ( pixel . x , pixel . y , pixel . radius , "plasma" , "plasma" , hotterBomb , hotterBomb , false ) ;
} ;
2022-11-02 13:02:53 -04:00
if ( ! tryMove ( pixel , pixel . x , pixel . y + 1 ) ) { //behaviors.POWDER
Math . random ( ) < 0.5 ? tryMove ( pixel , pixel . x - 1 , pixel . y + 1 ) : tryMove ( pixel , pixel . x + 1 , pixel . y + 1 ) ;
} ;
} ,
2022-10-11 12:46:51 -04:00
category : "weapons" ,
2022-11-02 13:02:53 -04:00
state : "solid" ,
temp : 7065 ,
density : 1900 ,
excludeRandom : true ,
2022-10-11 12:46:51 -04:00
} ;
2022-11-02 13:02:53 -04:00
for ( var i = 2 ; i <= bombAmount + 1 ; i ++ ) {
elements [ ` bomb_ ${ i } ` ] = {
name : ` bomb ${ i } ` ,
color : "#624c41" ,
behavior : [
` XX|EX: ${ 5 * ( i + 1 ) } >fire|XX ` ,
"XX|XX|XX" ,
` M2|M1 AND EX: ${ 5 * ( i + 1 ) } >fire|M2 ` ,
] ,
state : "solid" ,
density : 1300 * 8 * * ( ( i - 1 ) / 2 ) ,
excludeRandom : true ,
category : "weapons" ,
desc : ` ${ 5 * ( i + 1 ) / 10 } times the radius of the regular bomb ` ,
cooldown : defaultCooldown ,
} ;
} ;
2022-10-11 12:46:51 -04:00
2022-11-02 13:02:53 -04:00
elements . anti _bomb = {
2022-10-11 12:46:51 -04:00
color : "#625c71" ,
behavior : [
2022-11-02 13:02:53 -04:00
"M2|M1 AND EX:10|M2" ,
2022-10-11 12:46:51 -04:00
"XX|XX|XX" ,
2022-11-02 13:02:53 -04:00
"XX|EX:10|XX" ,
2022-10-11 12:46:51 -04:00
] ,
category : "weapons" ,
2022-11-02 13:02:53 -04:00
state : "solid" ,
density : 1300 ,
excludeRandom : true ,
2022-10-11 12:46:51 -04:00
cooldown : defaultCooldown ,
} ;
2022-11-02 13:02:53 -04:00
for ( var i = 2 ; i <= bombAmount + 1 ; i ++ ) {
elements [ ` anti_bomb_ ${ i } ` ] = {
color : "#625c71" ,
behavior : [
` M2|M1 AND EX: ${ 5 * ( i + 1 ) } >fire|M2 ` ,
"XX|XX|XX" ,
` XX|EX: ${ 5 * ( i + 1 ) } >fire|XX ` ,
] ,
state : "solid" ,
density : 1300 * 8 * * ( ( i - 1 ) / 2 ) ,
excludeRandom : true ,
category : "weapons" ,
desc : ` ${ 5 * ( i + 1 ) / 10 } times the radius of the regular anti-bomb ` ,
cooldown : defaultCooldown ,
} ;
} ;
runAfterLoad ( function ( ) {
if ( enabledMods . includes ( "mods/fey_and_more.js" ) ) {
elements . lower _color _copy . breakInto . push ( "magic" )
amalgamatedBombFire += ",poisonwater" . repeat ( 8 ) ;
amalgamatedBombFire += ",mystic_fire" . repeat ( 4 ) ;
amalgamatedBombFire += ",firesea" . repeat ( 6 ) ;
amalgamatedBombFire += ",lektre" . repeat ( 6 ) ;
} ;
if ( enabledMods . includes ( "mods/Neutronium Mod.js" ) ) {
amalgamatedBombFire += ",flamer" . repeat ( 3 ) ;
amalgamatedBombFire += ",flamebomb" . repeat ( 3 ) ;
amalgamatedBombFire += ",toxin" . repeat ( 3 ) ;
} ;
if ( enabledMods . includes ( "mods/randomness.js" ) ) {
amalgamatedBombFire += ",burning_unnamed_gas" . repeat ( 4 ) ;
amalgamatedBombFire += ",warp" . repeat ( 6 ) ;
amalgamatedBombFire += ",bomb_3" . repeat ( 3 ) ;
amalgamatedBombFire += ",op_hottester_bomb" . repeat ( 3 ) ;
} ;
if ( enabledMods . includes ( "mods/glenn_gases.js" ) ) {
amalgamatedBombFire += ",electric_gas" . repeat ( 3 ) ;
amalgamatedBombFire += ",corrosive_gas" . repeat ( 3 ) ;
amalgamatedBombFire += ",iocalfaeus_gas" . repeat ( 3 ) ;
amalgamatedBombFire += ",ignited_gas" . repeat ( 3 ) ;
amalgamatedBombFire += ",finine" . repeat ( 3 ) ;
amalgamatedBombFire += ",acidic_vapour" . repeat ( 3 ) ;
amalgamatedBombFire += ",nitrous_gas" . repeat ( 3 ) ;
amalgamatedBombFire += ",void_gas" . repeat ( 3 ) ;
amalgamatedBombFire += ",black_damp" . repeat ( 3 ) ;
} ;
if ( enabledMods . includes ( "mods/some_tf_liquids.js" ) ) {
amalgamatedBombFire += ",blazing_pyrotheum" . repeat ( 5 ) ;
amalgamatedBombFire += ",tectonic_petrotheum" . repeat ( 7 ) ;
amalgamatedBombFire += ",resonant_ender" . repeat ( 5 ) ;
} ;
if ( enabledMods . includes ( "mods/chem.js" ) ) {
amalgamatedBombFire += ",FOOF" . repeat ( 8 ) ;
} ;
if ( enabledMods . includes ( "mods/the_ground.js" ) ) {
amalgamatedBombFire += ",liquid_irradium" . repeat ( 7 ) ;
} ;
if ( enabledMods . includes ( "mods/bioooze.js" ) ) {
amalgamatedBombFire += ",bioooze" . repeat ( 8 ) ;
} ;
} ) ;
} else {
alert ( ` The ${ explodeAtPlusMod } mod is required and has been automatically inserted (reload for this to take effect). ` )
enabledMods . splice ( enabledMods . indexOf ( modName ) , 0 , explodeAtPlusMod )
localStorage . setItem ( "enabledMods" , JSON . stringify ( enabledMods ) ) ;
} ;