destroy the world
This commit is contained in:
parent
7649dd6d4e
commit
c359b4a148
|
|
@ -0,0 +1,82 @@
|
|||
function planetCrackerHeat(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)}`);
|
||||
var reversedCloseness = ((radius / 6) ** 0.5) - 1; //mathematically inaccurate but properly correlated
|
||||
|
||||
pixel.temp += 500 * ((reversedCloseness * 2) + 1);
|
||||
if(pixel.vx) {
|
||||
pixel.vx *= 2;
|
||||
};
|
||||
if(pixel.vy) {
|
||||
pixel.vy *= 2;
|
||||
};
|
||||
};
|
||||
|
||||
function planetCrackerFinale(doColorChange=true) {
|
||||
var bottomFortyPercent = Math.round(height * 0.6);
|
||||
var bottomTwentyPercent = Math.round(height * 0.8);
|
||||
var bottomTenPercent = Math.round(height * 0.9);
|
||||
for(x = 1; x < width; x++) {
|
||||
for(y = bottomFortyPercent; y < height; y++) {
|
||||
var chance = y > bottomTwentyPercent ? 0.03 : 0.01
|
||||
var radius = y > bottomTwentyPercent ? 8 : 6
|
||||
if(enabledMods.includes("velocity.js") && !isEmpty(x,y,true)) {
|
||||
pixelMap[x][y].vy ??= 0;
|
||||
pixelMap[x][y].vy -= 20;
|
||||
};
|
||||
if(y > bottomTenPercent && !isEmpty(x,y,true)) {
|
||||
pixelMap[x][y].temp += 2000;
|
||||
};
|
||||
if(Math.random() < chance) {
|
||||
explodeAt(x,y,radius,"plasma");
|
||||
};
|
||||
};
|
||||
};
|
||||
if(doColorChange) {
|
||||
if(enabledMods.includes("mods/gradient_background_support.js")) {
|
||||
settings.bg = ["#000000","#000000","#000000","#000000","#29180e","#663814","#9e6f19","#f7af2a"];
|
||||
settings.bgAngle = 90;
|
||||
} else {
|
||||
settings.bg = "#642402";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
elements.planet_cracker = {
|
||||
color: ["#8f8f8f","3f3f3f"],
|
||||
behavior: behaviors.WALL,
|
||||
properties: {
|
||||
active: true,
|
||||
counter: 1,
|
||||
changeTemp: true
|
||||
},
|
||||
tick: function(pixel) {
|
||||
if(!pixel?.active) {
|
||||
return;
|
||||
};
|
||||
if(outOfBounds(pixel.x,pixel.y+pixel.counter)) {
|
||||
planetCrackerFinale();
|
||||
pixel.active = false;
|
||||
changePixel(pixel,"metal_scrap");
|
||||
};
|
||||
if(pixel.active) {
|
||||
var pixelDistanceFromBottom = height - pixel.y;
|
||||
var counterDistanceFromBottom = height - (pixel.y + pixel.counter);
|
||||
var closenessToBottom = 1 - (counterDistanceFromBottom / pixelDistanceFromBottom);
|
||||
//console.log(closenessToBottom);
|
||||
|
||||
var finalRadius = Math.round(((1 + closenessToBottom) ** 2) * 6);
|
||||
|
||||
if(typeof(explodeAtPlus) === "function") {
|
||||
explodeAtPlus(pixel.x,pixel.y+pixel.counter,finalRadius,"plasma","fire",null,planetCrackerHeat,pixel.changeTemp);
|
||||
} else {
|
||||
explodeAt(pixel.x,pixel.y+pixel.counter,finalRadius,"plasma");
|
||||
};
|
||||
pixel.counter++;
|
||||
};
|
||||
},
|
||||
state: "solid",
|
||||
density: 1000,
|
||||
category: "weapons",
|
||||
hardness: 1,
|
||||
};
|
||||
Loading…
Reference in New Issue