mod - bot fab
bubble fusion drops 2-3 power ups (down from 3) perturbation theory: damage is 5% (down from 6%) per reroll but the mod will not show up until you have 4 rerolls stockpiled sporeangium grow faster when stuck to a mob mod: liquid cooling - freeze all mobs for 6 seconds after receiving harm mod: perimeter defense - gain 6% harm reduction for each bot mod: bot fabrication - anytime you have 3 rerolls, convert them into a random bot mod: Ψ(x) collapse - 33% haste, if you have no rerolls mod: mine synthesis - drop a mine after picking up a power up
This commit is contained in:
37
js/bullet.js
37
js/bullet.js
@@ -84,7 +84,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
fireCD: 1,
|
fireCD: 1,
|
||||||
setFireCD() {
|
setFireCD() {
|
||||||
b.fireCD = mod.fireRate * mod.slowFire / mod.fastTime
|
b.fireCD = mod.fireRate * mod.slowFire * mod.rerollHaste / mod.fastTime
|
||||||
},
|
},
|
||||||
fireAttributes(dir, rotate = true) {
|
fireAttributes(dir, rotate = true) {
|
||||||
if (rotate) {
|
if (rotate) {
|
||||||
@@ -458,7 +458,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
onEnd() {
|
onEnd() {
|
||||||
if (this.isArmed) {
|
if (this.isArmed) {
|
||||||
b.targetedNail(this.position, 14)
|
b.targetedNail(this.position, 15)
|
||||||
}
|
}
|
||||||
if (isAmmoBack) { //get ammo back from mod.isMineAmmoBack
|
if (isAmmoBack) { //get ammo back from mod.isMineAmmoBack
|
||||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
@@ -727,7 +727,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!this.lockedOn && !mod.isAmmoFromHealth) {
|
if (!this.lockedOn && !mod.isArmorFromPowerUps) {
|
||||||
//grab a power up if it is (ammo) or (a heal when player is low)
|
//grab a power up if it is (ammo) or (a heal when player is low)
|
||||||
let closeDist = Infinity;
|
let closeDist = Infinity;
|
||||||
for (let i = 0, len = powerUp.length; i < len; ++i) {
|
for (let i = 0, len = powerUp.length; i < len; ++i) {
|
||||||
@@ -965,6 +965,24 @@ const b = {
|
|||||||
};
|
};
|
||||||
bullet[me].do = function () {};
|
bullet[me].do = function () {};
|
||||||
},
|
},
|
||||||
|
randomBot(where = mech.pos, isKeep = true) {
|
||||||
|
if (Math.random() < 0.05) { //very low chance of plasma bot
|
||||||
|
b.plasmaBot(where)
|
||||||
|
if (isKeep) mod.plasmaBotCount++;
|
||||||
|
} else if (Math.random() < 0.25) {
|
||||||
|
b.nailBot(where)
|
||||||
|
if (isKeep) mod.nailBotCount++;
|
||||||
|
} else if (Math.random() < 0.33) {
|
||||||
|
b.laserBot(where)
|
||||||
|
if (isKeep) mod.laserBotCount++;
|
||||||
|
} else if (Math.random() < 0.5) {
|
||||||
|
b.foamBot(where)
|
||||||
|
if (isKeep) mod.foamBotCount++;
|
||||||
|
} else {
|
||||||
|
b.boomBot(where)
|
||||||
|
if (isKeep) mod.boomBotCount++;
|
||||||
|
}
|
||||||
|
},
|
||||||
nailBot(position = mech.pos) {
|
nailBot(position = mech.pos) {
|
||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
const dir = mech.angle;
|
const dir = mech.angle;
|
||||||
@@ -1965,8 +1983,8 @@ const b = {
|
|||||||
name: "flak",
|
name: "flak",
|
||||||
description: "fire a <strong>cluster</strong> of short range <strong>projectiles</strong><br><strong class='color-e'>explodes</strong> on <strong>contact</strong> or after half a second",
|
description: "fire a <strong>cluster</strong> of short range <strong>projectiles</strong><br><strong class='color-e'>explodes</strong> on <strong>contact</strong> or after half a second",
|
||||||
ammo: 0,
|
ammo: 0,
|
||||||
ammoPack: 9,
|
ammoPack: 7,
|
||||||
defaultAmmoPack: 9, //use to revert ammoPack after mod changes drop rate
|
defaultAmmoPack: 7, //use to revert ammoPack after mod changes drop rate
|
||||||
have: false,
|
have: false,
|
||||||
isEasyToAim: false,
|
isEasyToAim: false,
|
||||||
fire() {
|
fire() {
|
||||||
@@ -2361,7 +2379,7 @@ const b = {
|
|||||||
x: speed * Math.cos(mech.angle),
|
x: speed * Math.cos(mech.angle),
|
||||||
y: speed * Math.sin(mech.angle)
|
y: speed * Math.sin(mech.angle)
|
||||||
}, 0, mod.isMineAmmoBack)
|
}, 0, mod.isMineAmmoBack)
|
||||||
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 70 : 45) * b.fireCD); // cool down
|
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 60 : 20) * b.fireCD); // cool down
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2460,9 +2478,10 @@ const b = {
|
|||||||
bullet[me].grow = function () {
|
bullet[me].grow = function () {
|
||||||
this.stuck(); //runs different code based on what the bullet is stuck to
|
this.stuck(); //runs different code based on what the bullet is stuck to
|
||||||
if (!mech.isBodiesAsleep) {
|
if (!mech.isBodiesAsleep) {
|
||||||
const SCALE = 1.013
|
let scale = 1.01
|
||||||
Matter.Body.scale(this, SCALE, SCALE);
|
if (this.stuckTo && this.stuckTo.alive) scale = 1.03
|
||||||
this.radius *= SCALE
|
Matter.Body.scale(this, scale, scale);
|
||||||
|
this.radius *= scale
|
||||||
if (this.radius > this.maxRadius) this.endCycle = 0;
|
if (this.radius > this.maxRadius) this.endCycle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ function collisionChecks(event) {
|
|||||||
if (obj.classType === "body" && obj.speed > 6) {
|
if (obj.classType === "body" && obj.speed > 6) {
|
||||||
const v = Vector.magnitude(Vector.sub(mob[k].velocity, obj.velocity));
|
const v = Vector.magnitude(Vector.sub(mob[k].velocity, obj.velocity));
|
||||||
if (v > 9) {
|
if (v > 9) {
|
||||||
let dmg = b.dmgScale * (v * obj.mass * 0.07) * mod.throwChargeRate;
|
let dmg = b.dmgScale * v * obj.mass * 0.065 * mod.throwChargeRate;
|
||||||
if (mod.isCrit && !mob[k].seePlayer.recall && !mob[k].shield) dmg *= 5
|
if (mod.isCrit && !mob[k].seePlayer.recall && !mob[k].shield) dmg *= 5
|
||||||
if (mob[k].isShielded) dmg *= 0.5
|
if (mob[k].isShielded) dmg *= 0.5
|
||||||
mob[k].damage(dmg, true);
|
mob[k].damage(dmg, true);
|
||||||
|
|||||||
99
js/level.js
99
js/level.js
@@ -11,15 +11,15 @@ const level = {
|
|||||||
start() {
|
start() {
|
||||||
if (build.isURLBuild && level.levelsCleared === 0) build.onLoadPowerUps();
|
if (build.isURLBuild && level.levelsCleared === 0) build.onLoadPowerUps();
|
||||||
if (level.levelsCleared === 0) { //this code only runs on the first level
|
if (level.levelsCleared === 0) { //this code only runs on the first level
|
||||||
// game.enableConstructMode() //used to build maps in testing mode
|
|
||||||
// level.difficultyIncrease(4)
|
// level.difficultyIncrease(4)
|
||||||
|
// game.enableConstructMode() //used to build maps in testing mode
|
||||||
// mech.isStealth = true;
|
// mech.isStealth = true;
|
||||||
// mod.giveMod("superfluidity");
|
// mod.giveMod("superfluidity");
|
||||||
// b.giveGuns("ice IX")
|
// b.giveGuns("ice IX")
|
||||||
// mech.setField("plasma torch")
|
// mech.setField("plasma torch")
|
||||||
|
|
||||||
level.intro(); //starting level
|
level.intro(); //starting level
|
||||||
// level.sewer()
|
// level.sewers();
|
||||||
// level.testing();
|
// level.testing();
|
||||||
// level.template()
|
// level.template()
|
||||||
// level.bosses();
|
// level.bosses();
|
||||||
@@ -64,20 +64,26 @@ const level = {
|
|||||||
mech.maxHealth += 0.05 * powerUps.totalPowerUps
|
mech.maxHealth += 0.05 * powerUps.totalPowerUps
|
||||||
if (powerUps.totalPowerUps) game.makeTextLog("<span style='font-size:115%;'> max health increased by " + (0.05 * powerUps.totalPowerUps * 100).toFixed(0) + "%</span>", 300)
|
if (powerUps.totalPowerUps) game.makeTextLog("<span style='font-size:115%;'> max health increased by " + (0.05 * powerUps.totalPowerUps * 100).toFixed(0) + "%</span>", 300)
|
||||||
}
|
}
|
||||||
|
if (mod.isHealLowHealth && mech.health < mech.maxHealth * 0.5 * game.healScale) {
|
||||||
|
mech.health = mech.maxHealth * 0.5 * game.healScale
|
||||||
|
mech.displayHealth();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
//******************************************************************************************************************
|
//******************************************************************************************************************
|
||||||
//******************************************************************************************************************
|
//******************************************************************************************************************
|
||||||
//******************************************************************************************************************
|
//******************************************************************************************************************
|
||||||
//******************************************************************************************************************
|
//******************************************************************************************************************
|
||||||
rotor(x, y, rotate = 0, radius = 900, width = 50, density = 0.001) {
|
rotor(x, y, rotate = 0, radius = 900, width = 50, density = 0.0005) {
|
||||||
const rotor1 = Matter.Bodies.rectangle(x, y, width, radius, {
|
const rotor1 = Matter.Bodies.rectangle(x, y, width, radius, {
|
||||||
density: density,
|
density: density,
|
||||||
isNotSticky: true
|
isNotSticky: true,
|
||||||
|
isNotHoldable: true
|
||||||
});
|
});
|
||||||
const rotor2 = Matter.Bodies.rectangle(x, y, width, radius, {
|
const rotor2 = Matter.Bodies.rectangle(x, y, width, radius, {
|
||||||
angle: Math.PI / 2,
|
angle: Math.PI / 2,
|
||||||
density: density,
|
density: density,
|
||||||
isNotSticky: true
|
isNotSticky: true,
|
||||||
|
isNotHoldable: true
|
||||||
});
|
});
|
||||||
rotor = Body.create({ //combine rotor1 and rotor2
|
rotor = Body.create({ //combine rotor1 and rotor2
|
||||||
parts: [rotor1, rotor2],
|
parts: [rotor1, rotor2],
|
||||||
@@ -129,7 +135,6 @@ const level = {
|
|||||||
},
|
},
|
||||||
button(x, y, width = 70, height = 20) {
|
button(x, y, width = 70, height = 20) {
|
||||||
spawn.mapVertex(x + 35, y + 27, "70 10 -70 10 -40 -10 40 -10");
|
spawn.mapVertex(x + 35, y + 27, "70 10 -70 10 -40 -10 40 -10");
|
||||||
// map[map.length - 1].friction = 1;
|
|
||||||
return {
|
return {
|
||||||
isUp: false,
|
isUp: false,
|
||||||
min: {
|
min: {
|
||||||
@@ -174,7 +179,7 @@ const level = {
|
|||||||
height: height,
|
height: height,
|
||||||
maxHeight: height,
|
maxHeight: height,
|
||||||
query() {
|
query() {
|
||||||
if (this.height > 0 && Matter.Query.region([player], this).length) {
|
if (this.height > 0 && Matter.Query.region([player], this).length && !mech.isStealth) {
|
||||||
mech.damage(damage)
|
mech.damage(damage)
|
||||||
const drain = 0.005
|
const drain = 0.005
|
||||||
if (mech.energy > drain) mech.energy -= drain
|
if (mech.energy > drain) mech.energy -= drain
|
||||||
@@ -242,11 +247,11 @@ const level = {
|
|||||||
color: "hsl(138, 10%, 80%)" //c4f4f4
|
color: "hsl(138, 10%, 80%)" //c4f4f4
|
||||||
});
|
});
|
||||||
|
|
||||||
spawn.mapRect(-400, -500, 100, 600); //left entrance wall
|
spawn.mapRect(-500, -600, 200, 800); //left entrance wall
|
||||||
spawn.mapRect(-400, -500, 3550, 100); //ceiling
|
spawn.mapRect(-400, -600, 3550, 200); //ceiling
|
||||||
spawn.mapRect(-400, 0, 3000, 100); //floor
|
spawn.mapRect(-400, 0, 3000, 200); //floor
|
||||||
spawn.mapRect(300, -500, 100, 400); //right entrance wall
|
spawn.mapRect(300, -500, 50, 400); //right entrance wall
|
||||||
spawn.bodyRect(340, -100, 25, 100);
|
spawn.bodyRect(312, -100, 25, 100);
|
||||||
spawn.bodyRect(1450, -300, 150, 50);
|
spawn.bodyRect(1450, -300, 150, 50);
|
||||||
|
|
||||||
const xPos = shuffle([600, 1250, 2000]);
|
const xPos = shuffle([600, 1250, 2000]);
|
||||||
@@ -257,9 +262,9 @@ const level = {
|
|||||||
spawn.bodyRect(3100, 410, 75, 100);
|
spawn.bodyRect(3100, 410, 75, 100);
|
||||||
spawn.bodyRect(2450, -25, 250, 25);
|
spawn.bodyRect(2450, -25, 250, 25);
|
||||||
|
|
||||||
spawn.mapRect(3050, -500, 100, 700); //right down tube wall
|
spawn.mapRect(3050, -600, 200, 800); //right down tube wall
|
||||||
spawn.mapRect(3050, 100, 1250, 100); //tube right exit ceiling
|
spawn.mapRect(3100, 0, 1200, 200); //tube right exit ceiling
|
||||||
spawn.mapRect(4200, 100, 100, 1800);
|
spawn.mapRect(4200, 0, 200, 1900);
|
||||||
spawn.mapRect(3000, 400, 1000, 1250);
|
spawn.mapRect(3000, 400, 1000, 1250);
|
||||||
spawn.mapRect(3000, 1925, 1000, 150);
|
spawn.mapRect(3000, 1925, 1000, 150);
|
||||||
|
|
||||||
@@ -268,21 +273,20 @@ const level = {
|
|||||||
spawn.mapRect(3100, 350, 800, 100);
|
spawn.mapRect(3100, 350, 800, 100);
|
||||||
spawn.mapRect(3100, 2025, 800, 100);
|
spawn.mapRect(3100, 2025, 800, 100);
|
||||||
|
|
||||||
spawn.mapRect(2500, 0, 100, 1950); //left down tube wall
|
spawn.mapRect(2400, 0, 200, 1950); //left down tube wall
|
||||||
spawn.mapRect(600, 2300, 3750, 100);
|
spawn.mapRect(600, 2300, 3750, 200);
|
||||||
spawn.bodyRect(3800, 275, 125, 125);
|
spawn.bodyRect(3800, 275, 125, 125);
|
||||||
|
|
||||||
spawn.mapRect(4200, 1800, 5000, 100);
|
spawn.mapRect(4200, 1700, 5000, 200);
|
||||||
spawn.mapRect(4250, 2300, 100, 400);
|
spawn.mapRect(4150, 2300, 200, 400);
|
||||||
spawn.mapRect(4250, 2300, 100, 400);
|
|
||||||
|
|
||||||
spawn.mapRect(600, 1800, 2000, 100); //bottom left room ceiling
|
spawn.mapRect(600, 1700, 2000, 200); //bottom left room ceiling
|
||||||
spawn.mapRect(600, 1800, 100, 600); //left wall
|
spawn.mapRect(500, 1700, 200, 800); //left wall
|
||||||
spawn.mapRect(1775, 2225, 550, 125);
|
spawn.mapRect(1775, 2225, 550, 125);
|
||||||
spawn.mapRect(675, 1875, 325, 150);
|
spawn.mapRect(675, 1875, 325, 150);
|
||||||
|
|
||||||
spawn.mapRect(4450, 2900, 4900, 100); //boss room floor
|
spawn.mapRect(4450, 2900, 4900, 200); //boss room floor
|
||||||
spawn.mapRect(4250, 2600, 300, 400);
|
spawn.mapRect(4150, 2600, 400, 500);
|
||||||
spawn.mapRect(6250, 2675, 700, 325);
|
spawn.mapRect(6250, 2675, 700, 325);
|
||||||
spawn.mapRect(8000, 2600, 600, 400);
|
spawn.mapRect(8000, 2600, 600, 400);
|
||||||
spawn.bodyRect(5875, 2725, 200, 200);
|
spawn.bodyRect(5875, 2725, 200, 200);
|
||||||
@@ -293,30 +297,33 @@ const level = {
|
|||||||
spawn.mapRect(6250, 1875, 700, 150);
|
spawn.mapRect(6250, 1875, 700, 150);
|
||||||
spawn.mapRect(8000, 1875, 600, 150);
|
spawn.mapRect(8000, 1875, 600, 150);
|
||||||
|
|
||||||
spawn.mapRect(9100, 1800, 900, 400); //exit
|
spawn.mapRect(9100, 1700, 900, 500); //exit
|
||||||
spawn.mapRect(9100, 2600, 900, 400);
|
spawn.mapRect(9100, 2600, 900, 500);
|
||||||
spawn.mapRect(9900, 2125, 100, 575); //back wall
|
spawn.mapRect(9900, 1700, 200, 1400); //back wall
|
||||||
spawn.mapRect(9300, 2150, 50, 250);
|
spawn.mapRect(9300, 2150, 50, 250);
|
||||||
spawn.mapRect(9300, 2590, 650, 25);
|
spawn.mapRect(9300, 2590, 650, 25);
|
||||||
spawn.mapRect(9700, 2580, 100, 50);
|
spawn.mapRect(9700, 2580, 100, 50);
|
||||||
|
|
||||||
spawn.randomBoss(1300, 2100, 0.6);
|
spawn.randomBoss(1300, 2100, 0.5);
|
||||||
spawn.randomMob(8300, 2100, 0.3);
|
spawn.randomMob(8300, 2100, 0.2);
|
||||||
spawn.randomSmallMob(2575, -75, 0.3); //entrance
|
spawn.randomSmallMob(2575, -75, 0.2); //entrance
|
||||||
spawn.randomMob(8125, 2450, 0.3);
|
spawn.randomMob(8125, 2450, 0.25);
|
||||||
spawn.randomSmallMob(3200, 250, 0.4);
|
spawn.randomSmallMob(3200, 250, 0.3);
|
||||||
spawn.randomMob(2425, 2150, 0.4);
|
spawn.randomMob(2425, 2150, 0.3);
|
||||||
spawn.randomSmallMob(3825, 300, 0.4);
|
spawn.randomSmallMob(3500, 250, 0.4);
|
||||||
spawn.randomMob(3800, 2175, 0.5);
|
spawn.randomMob(3800, 2175, 0.4);
|
||||||
spawn.randomSmallMob(1100, -300, 0.5); //entrance
|
spawn.randomSmallMob(1100, -300, 0.4); //entrance
|
||||||
spawn.randomMob(4450, 2500, 0.6);
|
spawn.randomMob(4450, 2500, 0.5);
|
||||||
spawn.randomMob(6350, 2525, 0.6);
|
spawn.randomMob(6350, 2525, 0.5);
|
||||||
spawn.randomBoss(9200, 2400, 0.5);
|
spawn.randomBoss(9200, 2400, 0.6);
|
||||||
spawn.randomSmallMob(1900, -250, 0.7); //entrance
|
spawn.randomSmallMob(1900, -250, 0.6); //entrance
|
||||||
spawn.randomMob(1500, 2100, 0.8);
|
spawn.randomMob(1500, 2100, 0.7);
|
||||||
spawn.randomSmallMob(1700, -150, 0.8); //entrance
|
spawn.randomSmallMob(1700, -150, 0.7); //entrance
|
||||||
spawn.randomMob(8800, 2725, 0.9);
|
spawn.randomMob(8800, 2725, 0.8);
|
||||||
if (game.difficulty > 3) spawn.randomLevelBoss(6000, 2300, ["shooterBoss", "spiderBoss", "launcherBoss", "laserTargetingBoss"]);
|
spawn.randomMob(7300, 2200, 0.8);
|
||||||
|
spawn.randomMob(2075, 2025, 0.8);
|
||||||
|
spawn.randomMob(3475, 2175, 0.8);
|
||||||
|
if (game.difficulty > 3) spawn.randomLevelBoss(6000, 2300, ["spiderBoss", "launcherBoss", "laserTargetingBoss"]);
|
||||||
},
|
},
|
||||||
template() {
|
template() {
|
||||||
level.custom = () => {
|
level.custom = () => {
|
||||||
@@ -2167,10 +2174,6 @@ const level = {
|
|||||||
level.difficultyIncrease(game.difficultyMode) //increase difficulty based on modes
|
level.difficultyIncrease(game.difficultyMode) //increase difficulty based on modes
|
||||||
if (game.isEasyMode && level.levelsCleared % 2) level.difficultyDecrease(1);
|
if (game.isEasyMode && level.levelsCleared % 2) level.difficultyDecrease(1);
|
||||||
game.clearNow = true; //triggers in game.clearMap to remove all physics bodies and setup for new map
|
game.clearNow = true; //triggers in game.clearMap to remove all physics bodies and setup for new map
|
||||||
if (mod.isHealLowHealth && mech.health < mech.maxHealth * 0.5) {
|
|
||||||
mech.health = mech.maxHealth * 0.5
|
|
||||||
mech.displayHealth();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
playerExitCheck() {
|
playerExitCheck() {
|
||||||
if (
|
if (
|
||||||
|
|||||||
17
js/mob.js
17
js/mob.js
@@ -1016,20 +1016,7 @@ const mobs = {
|
|||||||
b.spore(this.position)
|
b.spore(this.position)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Math.random() < mod.isBotSpawner) {
|
if (Math.random() < mod.isBotSpawner) b.randomBot(this.position, false)
|
||||||
if (Math.random() < 0.1) { //very low chance of plasma bot
|
|
||||||
b.plasmaBot(this.position)
|
|
||||||
} else if (Math.random() < 0.25) {
|
|
||||||
b.nailBot(this.position)
|
|
||||||
} else if (Math.random() < 0.33) {
|
|
||||||
b.laserBot(this.position)
|
|
||||||
} else if (Math.random() < 0.5) {
|
|
||||||
b.foamBot(this.position)
|
|
||||||
} else {
|
|
||||||
b.boomBot(this.position)
|
|
||||||
}
|
|
||||||
// if (mech.energy > 0.33) mech.energy -= 0.33
|
|
||||||
}
|
|
||||||
if (mod.isExplodeMob) b.explosion(this.position, Math.min(450, Math.sqrt(this.mass + 3) * 80))
|
if (mod.isExplodeMob) b.explosion(this.position, Math.min(450, Math.sqrt(this.mass + 3) * 80))
|
||||||
if (mod.nailsDeathMob) b.targetedNail(this.position, mod.nailsDeathMob)
|
if (mod.nailsDeathMob) b.targetedNail(this.position, mod.nailsDeathMob)
|
||||||
} else if (mod.isShieldAmmo && this.shield) {
|
} else if (mod.isShieldAmmo && this.shield) {
|
||||||
@@ -1039,7 +1026,7 @@ const mobs = {
|
|||||||
} else if (Math.random() < 0.5 && !mod.isSuperDeterminism) {
|
} else if (Math.random() < 0.5 && !mod.isSuperDeterminism) {
|
||||||
type = "reroll"
|
type = "reroll"
|
||||||
}
|
}
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0, len = 1 + Math.ceil(2 * Math.random()); i < len; i++) {
|
||||||
powerUps.spawn(this.position.x, this.position.y, type);
|
powerUps.spawn(this.position.x, this.position.y, type);
|
||||||
if (Math.random() < mod.bayesian) powerUps.spawn(this.position.x, this.position.y, type);
|
if (Math.random() < mod.bayesian) powerUps.spawn(this.position.x, this.position.y, type);
|
||||||
}
|
}
|
||||||
|
|||||||
169
js/mods.js
169
js/mods.js
@@ -78,9 +78,12 @@ const mod = {
|
|||||||
if (mod.isRest && player.speed < 1) dmg *= 1.20;
|
if (mod.isRest && player.speed < 1) dmg *= 1.20;
|
||||||
if (mod.isEnergyDamage) dmg *= 1 + mech.energy / 5.5;
|
if (mod.isEnergyDamage) dmg *= 1 + mech.energy / 5.5;
|
||||||
if (mod.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.006
|
if (mod.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.006
|
||||||
if (mod.isRerollDamage) dmg *= 1 + 0.06 * powerUps.reroll.rerolls
|
if (mod.isRerollDamage) dmg *= 1 + 0.05 * powerUps.reroll.rerolls
|
||||||
return dmg * mod.slowFire
|
return dmg * mod.slowFire
|
||||||
},
|
},
|
||||||
|
totalBots() {
|
||||||
|
return mod.foamBotCount + mod.nailBotCount + mod.laserBotCount + mod.boomBotCount + mod.plasmaBotCount
|
||||||
|
},
|
||||||
mods: [{
|
mods: [{
|
||||||
name: "capacitor",
|
name: "capacitor",
|
||||||
// nameInfo: "<span id='mod-capacitor'></span>",
|
// nameInfo: "<span id='mod-capacitor'></span>",
|
||||||
@@ -131,22 +134,6 @@ const mod = {
|
|||||||
mod.isRest = false;
|
mod.isRest = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "perturbation theory",
|
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>6%</strong><br>for each <strong class='color-r'>reroll</strong> in your inventory",
|
|
||||||
maxCount: 1,
|
|
||||||
count: 0,
|
|
||||||
allowed() {
|
|
||||||
return powerUps.reroll.rerolls > 1 || build.isCustomSelection
|
|
||||||
},
|
|
||||||
requires: "at least 2 rerolls",
|
|
||||||
effect() {
|
|
||||||
mod.isRerollDamage = true;
|
|
||||||
},
|
|
||||||
remove() {
|
|
||||||
mod.isRerollDamage = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "kinetic bombardment",
|
name: "kinetic bombardment",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by up to <strong>33%</strong><br>at a <strong>distance</strong> of 40 steps from the target",
|
description: "increase <strong class='color-d'>damage</strong> by up to <strong>33%</strong><br>at a <strong>distance</strong> of 40 steps from the target",
|
||||||
@@ -227,6 +214,42 @@ const mod = {
|
|||||||
mod.isHarmDamage = false;
|
mod.isHarmDamage = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "perturbation theory",
|
||||||
|
description: "increase <strong class='color-d'>damage</strong> by <strong>5%</strong><br>for each of your <strong class='color-r'>rerolls</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return powerUps.reroll.rerolls > 3 || build.isCustomSelection
|
||||||
|
},
|
||||||
|
requires: "at least 4 rerolls",
|
||||||
|
effect() {
|
||||||
|
mod.isRerollDamage = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mod.isRerollDamage = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ψ(t) collapse",
|
||||||
|
description: "<strong>33%</strong> decreased <strong>delay</strong> after firing<br>if you have no <strong class='color-r'>rerolls</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return powerUps.reroll.rerolls === 0
|
||||||
|
},
|
||||||
|
requires: "no rerolls",
|
||||||
|
effect() {
|
||||||
|
mod.isRerollHaste = true;
|
||||||
|
mod.rerollHaste = 0.666;
|
||||||
|
b.setFireCD();
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mod.isRerollHaste = false;
|
||||||
|
mod.rerollHaste = 1;
|
||||||
|
b.setFireCD();
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "electrostatic discharge",
|
name: "electrostatic discharge",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>25%</strong><br><strong>25%</strong> increased <strong>delay</strong> after firing",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>25%</strong><br><strong>25%</strong> increased <strong>delay</strong> after firing",
|
||||||
@@ -435,13 +458,29 @@ const mod = {
|
|||||||
mod.plasmaBotCount = 0;
|
mod.plasmaBotCount = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "bot fabrication",
|
||||||
|
description: "anytime you collect <strong>3</strong> <strong class='color-r'>rerolls</strong><br>use them to build a random <strong>bot</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return powerUps.reroll.rerolls > 2 || build.isCustomSelection
|
||||||
|
},
|
||||||
|
requires: "at least 3 rerolls",
|
||||||
|
effect() {
|
||||||
|
mob.isRerollBots = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mob.isRerollBots = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "scrap bots",
|
name: "scrap bots",
|
||||||
description: "<strong>12%</strong> chance to build a <strong>bot</strong> after killing a mob<br>the bot only functions until the end of the level",
|
description: "<strong>12%</strong> chance to build a <strong>bot</strong> after killing a mob<br>the bot only functions until the end of the level",
|
||||||
maxCount: 6,
|
maxCount: 6,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return mod.foamBotCount + mod.nailBotCount + mod.laserBotCount + mod.boomBotCount + mod.plasmaBotCount > 0
|
return mod.totalBots() > 0
|
||||||
},
|
},
|
||||||
requires: "a bot",
|
requires: "a bot",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -451,6 +490,22 @@ const mod = {
|
|||||||
mod.isBotSpawner = 0;
|
mod.isBotSpawner = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "perimeter defense",
|
||||||
|
description: "reduce <strong class='color-harm'>harm</strong> by <strong>6%</strong><br>for each of your permanent <strong>bots</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return mod.totalBots() > 1
|
||||||
|
},
|
||||||
|
requires: "2 or more bots",
|
||||||
|
effect() {
|
||||||
|
mod.isBotArmor = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mod.isBotArmor = false
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "bot replication",
|
name: "bot replication",
|
||||||
description: "<strong>duplicate</strong> your permanent <strong>bots</strong><br>remove <strong>90%</strong> of your <strong class='color-g'>ammo</strong>",
|
description: "<strong>duplicate</strong> your permanent <strong>bots</strong><br>remove <strong>90%</strong> of your <strong class='color-g'>ammo</strong>",
|
||||||
@@ -458,7 +513,7 @@ const mod = {
|
|||||||
count: 0,
|
count: 0,
|
||||||
// isNonRefundable: true,
|
// isNonRefundable: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return mod.foamBotCount + mod.nailBotCount + mod.laserBotCount + mod.boomBotCount + mod.plasmaBotCount > 1
|
return mod.totalBots() > 1
|
||||||
},
|
},
|
||||||
requires: "2 or more bots",
|
requires: "2 or more bots",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -468,7 +523,6 @@ const mod = {
|
|||||||
b.guns[i].ammo = Math.floor(b.guns[i].ammo * 0.1);
|
b.guns[i].ammo = Math.floor(b.guns[i].ammo * 0.1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//double bots
|
//double bots
|
||||||
for (let i = 0; i < mod.nailBotCount; i++) {
|
for (let i = 0; i < mod.nailBotCount; i++) {
|
||||||
b.nailBot();
|
b.nailBot();
|
||||||
@@ -493,29 +547,6 @@ const mod = {
|
|||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// name: "ablative mines",
|
|
||||||
// description: "rebuild your broken parts as a <strong>mine</strong><br>chance to occur after being <strong>harmed</strong>",
|
|
||||||
// maxCount: 1,
|
|
||||||
// count: 0,
|
|
||||||
// allowed() {
|
|
||||||
// return true
|
|
||||||
// },
|
|
||||||
// requires: "",
|
|
||||||
// effect() {
|
|
||||||
// mod.isMineOnDamage = true;
|
|
||||||
// b.mine({
|
|
||||||
// x: mech.pos.x,
|
|
||||||
// y: mech.pos.y - 80
|
|
||||||
// }, {
|
|
||||||
// x: 0,
|
|
||||||
// y: 0
|
|
||||||
// })
|
|
||||||
// },
|
|
||||||
// remove() {
|
|
||||||
// mod.isMineOnDamage = false;
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
name: "ablative drones",
|
name: "ablative drones",
|
||||||
description: "rebuild your broken parts as <strong>drones</strong><br>chance to occur after receiving <strong class='color-harm'>harm</strong>",
|
description: "rebuild your broken parts as <strong>drones</strong><br>chance to occur after receiving <strong class='color-harm'>harm</strong>",
|
||||||
@@ -535,6 +566,22 @@ const mod = {
|
|||||||
mod.isDroneOnDamage = false;
|
mod.isDroneOnDamage = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "mine synthesis",
|
||||||
|
description: "drop a <strong>mine</strong> after picking up a <strong>power up</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
mod.isMineDrop = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mod.isMineDrop = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "squirrel-cage rotor",
|
name: "squirrel-cage rotor",
|
||||||
description: "<strong>jump</strong> higher and <strong>move</strong> faster",
|
description: "<strong>jump</strong> higher and <strong>move</strong> faster",
|
||||||
@@ -557,7 +604,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Pauli exclusion",
|
name: "Pauli exclusion",
|
||||||
description: `after receiving <strong class='color-harm'>harm</strong> from a collision<br><strong>immune</strong> to <strong class='color-harm'>harm</strong> for <strong>1</strong> second`,
|
description: `<strong>immune</strong> to <strong class='color-harm'>harm</strong> for <strong>1</strong> second<br>after receiving <strong class='color-harm'>harm</strong> from a collision`,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -604,6 +651,22 @@ const mod = {
|
|||||||
mod.isSlowFPS = false;
|
mod.isSlowFPS = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "liquid cooling",
|
||||||
|
description: `<strong class='color-s'>freeze</strong> all mobs for <strong>6</strong> seconds<br>after receiving <strong class='color-harm'>harm</strong>`,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return mod.isSlowFPS
|
||||||
|
},
|
||||||
|
requires: "clock gating",
|
||||||
|
effect() {
|
||||||
|
mod.isHarmFreeze = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mod.isHarmFreeze = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "entanglement",
|
name: "entanglement",
|
||||||
nameInfo: "<span id = 'mod-entanglement'></span>",
|
nameInfo: "<span id = 'mod-entanglement'></span>",
|
||||||
@@ -790,7 +853,7 @@ const mod = {
|
|||||||
{
|
{
|
||||||
name: "negentropy",
|
name: "negentropy",
|
||||||
description: "at the start of each <strong>level</strong><br><strong class='color-h'>heal</strong> up to <strong>50%</strong> of <strong>maximum health</strong>",
|
description: "at the start of each <strong>level</strong><br><strong class='color-h'>heal</strong> up to <strong>50%</strong> of <strong>maximum health</strong>",
|
||||||
maxCount: 9,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return mech.maxHealth > 1 || mod.isArmorFromPowerUps
|
return mech.maxHealth > 1 || mod.isArmorFromPowerUps
|
||||||
@@ -843,7 +906,7 @@ const mod = {
|
|||||||
powerUps.reroll.changeRerolls(0)
|
powerUps.reroll.changeRerolls(0)
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
description: "<strong class='color-h'>heal</strong> to <strong>60%</strong> health instead of <strong>dying</strong><br>consumes <strong>1</strong> <strong class='color-r'>reroll</strong>",
|
description: "<strong class='color-h'>heal</strong> to full <strong>health</strong> instead of <strong>dying</strong><br>consumes <strong>1</strong> <strong class='color-r'>reroll</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -862,7 +925,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "bubble fusion",
|
name: "bubble fusion",
|
||||||
description: "after destroying a mob's <strong>shield</strong><br>spawn <strong>3</strong> <strong class='color-h'>heals</strong>, <strong class='color-g'>ammo</strong>, or <strong class='color-r'>rerolls</strong>",
|
description: "after destroying a mob's <strong>shield</strong><br>spawn <strong>2-3</strong> <strong class='color-h'>heals</strong>, <strong class='color-g'>ammo</strong>, or <strong class='color-r'>rerolls</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -894,7 +957,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "logistics",
|
name: "logistics",
|
||||||
description: "<strong class='color-g'>ammo</strong> power ups add to your <strong>current gun</strong><br>spawn <strong>5 ammo</strong>",
|
description: "<strong class='color-g'>ammo</strong> power ups add to your <strong>current gun</strong><br>spawn <strong>6 ammo</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -903,7 +966,7 @@ const mod = {
|
|||||||
requires: "at least 2 guns",
|
requires: "at least 2 guns",
|
||||||
effect() {
|
effect() {
|
||||||
mod.isAmmoForGun = true;
|
mod.isAmmoForGun = true;
|
||||||
for (let i = 0; i < 5; i++) {
|
for (let i = 0; i < 6; i++) {
|
||||||
powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
||||||
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
||||||
}
|
}
|
||||||
@@ -2313,5 +2376,11 @@ const mod = {
|
|||||||
isAoESlow: null,
|
isAoESlow: null,
|
||||||
isHarmArmor: null,
|
isHarmArmor: null,
|
||||||
isTurret: null,
|
isTurret: null,
|
||||||
isRerollDamage: null
|
isRerollDamage: null,
|
||||||
|
isHarmFreeze: null,
|
||||||
|
isBotArmor: null,
|
||||||
|
isRerollHaste: null,
|
||||||
|
rerollHaste: null,
|
||||||
|
isMineDrop: null,
|
||||||
|
isRerollBots: null
|
||||||
}
|
}
|
||||||
18
js/player.js
18
js/player.js
@@ -306,6 +306,7 @@ const mech = {
|
|||||||
if (mod.mods[i].count < mod.mods[i].maxCount &&
|
if (mod.mods[i].count < mod.mods[i].maxCount &&
|
||||||
!mod.mods[i].isNonRefundable &&
|
!mod.mods[i].isNonRefundable &&
|
||||||
mod.mods[i].name !== "quantum immortality" &&
|
mod.mods[i].name !== "quantum immortality" &&
|
||||||
|
mod.mods[i].name !== "Born rule" &&
|
||||||
mod.mods[i].allowed()
|
mod.mods[i].allowed()
|
||||||
) options.push(i);
|
) options.push(i);
|
||||||
}
|
}
|
||||||
@@ -440,6 +441,7 @@ const mech = {
|
|||||||
let dmg = 1
|
let dmg = 1
|
||||||
dmg *= mech.fieldHarmReduction
|
dmg *= mech.fieldHarmReduction
|
||||||
dmg *= mod.isSlowFPS ? 0.85 : 1
|
dmg *= mod.isSlowFPS ? 0.85 : 1
|
||||||
|
if (mod.isBotArmor) dmg *= 0.94 ** mod.totalBots()
|
||||||
if (mod.isHarmArmor && mech.lastHarmCycle + 600 > mech.cycle) dmg *= 0.5;
|
if (mod.isHarmArmor && mech.lastHarmCycle + 600 > mech.cycle) dmg *= 0.5;
|
||||||
if (mod.energyRegen === 0) dmg *= 0.5 //0.22 + 0.78 * mech.energy //77% damage reduction at zero energy
|
if (mod.energyRegen === 0) dmg *= 0.5 //0.22 + 0.78 * mech.energy //77% damage reduction at zero energy
|
||||||
if (mod.isTurret && mech.crouch) dmg /= 2;
|
if (mod.isTurret && mech.crouch) dmg /= 2;
|
||||||
@@ -467,7 +469,7 @@ const mech = {
|
|||||||
if (mod.isDeathAvoid && powerUps.reroll.rerolls) { //&& Math.random() < 0.5
|
if (mod.isDeathAvoid && powerUps.reroll.rerolls) { //&& Math.random() < 0.5
|
||||||
powerUps.reroll.changeRerolls(-1)
|
powerUps.reroll.changeRerolls(-1)
|
||||||
|
|
||||||
mech.energy = mech.maxEnergy * 0.6
|
mech.energy = mech.maxEnergy
|
||||||
// if (mech.energy < 0.05) mech.energy = 0.05
|
// if (mech.energy < 0.05) mech.energy = 0.05
|
||||||
mech.immuneCycle = mech.cycle + 120 //disable this.immuneCycle bonus seconds
|
mech.immuneCycle = mech.cycle + 120 //disable this.immuneCycle bonus seconds
|
||||||
game.makeTextLog("<span style='font-size:115%;'> <strong>death</strong> avoided<br><strong>1</strong> <strong class='color-r'>reroll</strong> consumed</span>", 420)
|
game.makeTextLog("<span style='font-size:115%;'> <strong>death</strong> avoided<br><strong>1</strong> <strong class='color-r'>reroll</strong> consumed</span>", 420)
|
||||||
@@ -496,7 +498,7 @@ const mech = {
|
|||||||
if (mech.health < 0 || isNaN(mech.health)) {
|
if (mech.health < 0 || isNaN(mech.health)) {
|
||||||
if (mod.isDeathAvoid && powerUps.reroll.rerolls > 0) { //&& Math.random() < 0.5
|
if (mod.isDeathAvoid && powerUps.reroll.rerolls > 0) { //&& Math.random() < 0.5
|
||||||
powerUps.reroll.changeRerolls(-1)
|
powerUps.reroll.changeRerolls(-1)
|
||||||
mech.health = mech.maxHealth * 0.6
|
mech.health = mech.maxHealth * game.healScale
|
||||||
// if (mech.health < 0.05) mech.health = 0.05
|
// if (mech.health < 0.05) mech.health = 0.05
|
||||||
mech.immuneCycle = mech.cycle + 120 //disable this.immuneCycle bonus seconds
|
mech.immuneCycle = mech.cycle + 120 //disable this.immuneCycle bonus seconds
|
||||||
game.makeTextLog("<span style='font-size:115%;'> <strong>death</strong> avoided<br><strong>1</strong> <strong class='color-r'>reroll</strong> consumed</span>", 420)
|
game.makeTextLog("<span style='font-size:115%;'> <strong>death</strong> avoided<br><strong>1</strong> <strong class='color-r'>reroll</strong> consumed</span>", 420)
|
||||||
@@ -540,6 +542,11 @@ const mech = {
|
|||||||
game.fpsInterval = 1000 / game.fpsCap;
|
game.fpsInterval = 1000 / game.fpsCap;
|
||||||
//how long to wait to return to normal fps
|
//how long to wait to return to normal fps
|
||||||
mech.defaultFPSCycle = mech.cycle + 20 + Math.min(90, Math.floor(200 * dmg))
|
mech.defaultFPSCycle = mech.cycle + 20 + Math.min(90, Math.floor(200 * dmg))
|
||||||
|
if (mod.isHarmFreeze) { //freeze all mobs
|
||||||
|
for (let i = 0, len = mob.length; i < len; i++) {
|
||||||
|
mobs.statusSlow(mob[i], 360)
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (dmg > 0.05) { // freeze game for high damage hits
|
if (dmg > 0.05) { // freeze game for high damage hits
|
||||||
game.fpsCap = 4 //40 - Math.min(25, 100 * dmg)
|
game.fpsCap = 4 //40 - Math.min(25, 100 * dmg)
|
||||||
@@ -938,6 +945,13 @@ const mech = {
|
|||||||
});
|
});
|
||||||
if (dist2 < 5000 && !game.isChoosing) { //use power up if it is close enough
|
if (dist2 < 5000 && !game.isChoosing) { //use power up if it is close enough
|
||||||
if (mod.isMassEnergy) mech.energy = mech.maxEnergy * 3;
|
if (mod.isMassEnergy) mech.energy = mech.maxEnergy * 3;
|
||||||
|
if (mod.isMineDrop) b.mine({
|
||||||
|
x: mech.pos.x,
|
||||||
|
y: mech.pos.y
|
||||||
|
}, {
|
||||||
|
x: 0,
|
||||||
|
y: 0
|
||||||
|
}, 0, mod.isMineAmmoBack)
|
||||||
Matter.Body.setVelocity(player, { //player knock back, after grabbing power up
|
Matter.Body.setVelocity(player, { //player knock back, after grabbing power up
|
||||||
x: player.velocity.x + ((powerUp[i].velocity.x * powerUp[i].mass) / player.mass) * 0.3,
|
x: player.velocity.x + ((powerUp[i].velocity.x * powerUp[i].mass) / player.mass) * 0.3,
|
||||||
y: player.velocity.y + ((powerUp[i].velocity.y * powerUp[i].mass) / player.mass) * 0.3
|
y: player.velocity.y + ((powerUp[i].velocity.y * powerUp[i].mass) / player.mass) * 0.3
|
||||||
|
|||||||
@@ -54,9 +54,27 @@ const powerUps = {
|
|||||||
changeRerolls(amount) {
|
changeRerolls(amount) {
|
||||||
powerUps.reroll.rerolls += amount
|
powerUps.reroll.rerolls += amount
|
||||||
if (powerUps.reroll.rerolls < 0) powerUps.reroll.rerolls = 0
|
if (powerUps.reroll.rerolls < 0) powerUps.reroll.rerolls = 0
|
||||||
|
|
||||||
|
if (mob.isRerollBots) {
|
||||||
|
const limit = 3
|
||||||
|
for (; powerUps.reroll.rerolls > limit - 1; powerUps.reroll.rerolls -= limit) {
|
||||||
|
b.randomBot()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (mod.isDeathAvoid && document.getElementById("mod-anthropic")) {
|
if (mod.isDeathAvoid && document.getElementById("mod-anthropic")) {
|
||||||
document.getElementById("mod-anthropic").innerHTML = `(${powerUps.reroll.rerolls})`
|
document.getElementById("mod-anthropic").innerHTML = `(${powerUps.reroll.rerolls})`
|
||||||
}
|
}
|
||||||
|
if (mod.isRerollHaste) {
|
||||||
|
if (powerUps.reroll.rerolls === 0) {
|
||||||
|
mod.rerollHaste = 0.66;
|
||||||
|
b.setFireCD();
|
||||||
|
} else {
|
||||||
|
mod.rerollHaste = 1;
|
||||||
|
b.setFireCD();
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
diceText() {
|
diceText() {
|
||||||
const r = powerUps.reroll.rerolls
|
const r = powerUps.reroll.rerolls
|
||||||
|
|||||||
27
todo.txt
27
todo.txt
@@ -1,15 +1,34 @@
|
|||||||
|
|
||||||
|
bubble fusion drops 2-3 power ups (down from 3)
|
||||||
|
perturbation theory: damage is 5% (down from 6%) per reroll
|
||||||
|
but the mod will not show up until you have 4 rerolls stockpiled
|
||||||
|
sporeangium grow faster when stuck to a mob
|
||||||
|
|
||||||
|
mod: liquid cooling - freeze all mobs for 6 seconds after receiving harm
|
||||||
|
mod: perimeter defense - gain 6% harm reduction for each bot
|
||||||
|
mod: bot fabrication - anytime you have 3 rerolls, convert them into a random bot
|
||||||
|
mod: Ψ(x) collapse - 33% haste, if you have no rerolls
|
||||||
|
mod: mine synthesis - drop a mine after picking up a power up
|
||||||
|
|
||||||
************** TODO - n-gon **************
|
************** TODO - n-gon **************
|
||||||
|
|
||||||
mod: taking damage slows (or stuns) all mobs on the map
|
map: laboratory
|
||||||
requires the mod that slows time, overclock
|
rooms with switches that change physics
|
||||||
|
gravity room
|
||||||
|
portal room
|
||||||
|
laser room
|
||||||
|
radiation room
|
||||||
|
|
||||||
|
map: prison
|
||||||
|
doors linked to buttons
|
||||||
|
mobs inside the doors?
|
||||||
|
|
||||||
button: blocks that are on the button at an angle will slowly slide off the button
|
button: blocks that are on the button at an angle will slowly slide off the button
|
||||||
maybe just avoid long blocks near the button?
|
maybe just avoid long blocks near the button?
|
||||||
maybe actively hold the button in place?
|
maybe actively hold the button in place?
|
||||||
|
|
||||||
hazards should affect blocks, bullets, mobs
|
hazards should slow blocks, bullets, mobs?
|
||||||
and do mob damage?
|
mob damage?
|
||||||
|
|
||||||
rotor doesn't work with
|
rotor doesn't work with
|
||||||
plasma torch
|
plasma torch
|
||||||
|
|||||||
Reference in New Issue
Block a user