testchamber changes, heal power size scales

This commit is contained in:
landgreen
2020-07-24 07:23:57 -07:00
parent e30f63ad94
commit b6e9410bad
7 changed files with 146 additions and 128 deletions

View File

@@ -2104,7 +2104,7 @@ const b = {
for (let i = 0, len = mob.length; i < len; ++i) { for (let i = 0, len = mob.length; i < len; ++i) {
if (mob[i].shield) { if (mob[i].shield) {
const dist = Vector.magnitude(Vector.sub(this.position, mob[i].position)) - mob[i].radius; const dist = Vector.magnitude(Vector.sub(this.position, mob[i].position)) - mob[i].radius;
if (dist < this.explodeRad) mob[i].health *= 0.8 if (dist < this.explodeRad) mob[i].health *= 0.2
} }
} }
const dist = Vector.magnitude(Vector.sub(this.position, player.position)) const dist = Vector.magnitude(Vector.sub(this.position, player.position))
@@ -2669,7 +2669,7 @@ const b = {
} else if (mech.energy > 0.005) { // charging on mouse down } else if (mech.energy > 0.005) { // charging on mouse down
mech.fireCDcycle = Infinity //can't fire until mouse is released mech.fireCDcycle = Infinity //can't fire until mouse is released
const lastCharge = this.charge const lastCharge = this.charge
let chargeRate = (mech.crouch) ? 0.975 : 0.987 let chargeRate = (mech.crouch) ? 0.98 : 0.984
chargeRate *= Math.pow(b.fireCD, 0.03) chargeRate *= Math.pow(b.fireCD, 0.03)
this.charge = this.charge * chargeRate + (1 - chargeRate) // this.charge converges to 1 this.charge = this.charge * chargeRate + (1 - chargeRate) // this.charge converges to 1
if (mod.isRailTimeSlow) { if (mod.isRailTimeSlow) {
@@ -2950,6 +2950,7 @@ const b = {
} }
} }
}, },
{ {
name: "pulse", name: "pulse",
description: "convert <strong>25%</strong> of your <strong class='color-f'>energy</strong> into a pulsed laser<br>instantly initiates a fusion <strong class='color-e'>explosion</strong>", description: "convert <strong>25%</strong> of your <strong class='color-f'>energy</strong> into a pulsed laser<br>instantly initiates a fusion <strong class='color-e'>explosion</strong>",
@@ -3101,6 +3102,41 @@ const b = {
} }
}, },
// { // {
// name: "maser",
// description: "emit a <strong>beam</strong> of collimated coherent <strong>light</strong><br>drains <strong class='color-f'>energy</strong> instead of ammunition",
// ammo: 0,
// ammoPack: Infinity,
// have: false,
// isEasyToAim: false,
// fire() {
// if (mech.energy < 0.002) {
// mech.fireCDcycle = mech.cycle + 100; // cool down if out of energy
// } else {
// // mech.energy -= mech.fieldRegen + 0.002 * mod.isLaserDiode
// let range = 2000
// const looking = Vector.mult(Vector.rotate({
// x: 1,
// y: 0
// }, mech.angle), range)
// const endpoint = Matter.Vector.add(mech.pos, looking)
// const hits = Matter.Query.ray(body, mech.pos, endpoint, 100)
// for (let i = 0; i < hits.length; i++) {
// }
// // console.log(hits, target, range)
// //draw beam
// ctx.beginPath();
// ctx.moveTo(mech.pos.x, mech.pos.y);
// ctx.lineTo(endpoint.x, endpoint.y);
// ctx.stroke();
// }
// }
// },
// {
// name: "dwarf star", //14 // name: "dwarf star", //14
// description: "drop a mine that gravitational pulls in matter", // description: "drop a mine that gravitational pulls in matter",
// ammo: 0, // ammo: 0,

View File

@@ -18,7 +18,7 @@ const level = {
// mech.isStealth = true; // mech.isStealth = true;
// mod.giveMod("bot upgrades"); // mod.giveMod("bot upgrades");
// mod.nailBotCount += 10 // mod.nailBotCount += 10
// b.giveGuns("ice IX") // b.giveGuns("maser")
// mech.setField("plasma torch") // mech.setField("plasma torch")
// level.testing(); // level.testing();
@@ -50,8 +50,8 @@ 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.66 * game.healScale) { if (mod.isHealLowHealth && mech.health < mech.maxHealth * game.healScale) {
mech.health = mech.maxHealth * 0.66 * game.healScale mech.health = mech.maxHealth * game.healScale
mech.displayHealth(); mech.displayHealth();
} }
}, },
@@ -188,15 +188,15 @@ const level = {
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 20); spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 20);
level.defaultZoom = 2000 level.defaultZoom = 2000
game.zoomTransition(level.defaultZoom) game.zoomTransition(level.defaultZoom)
document.body.style.backgroundColor = "#444"; document.body.style.backgroundColor = "#d5d5d5";
level.fillBG.push({ //full map white // level.fillBG.push({ //full map white
x: -375, // x: -375,
y: -3700, // y: -3700,
width: 2975, // width: 2975,
height: 3800, // height: 3800,
color: "#ddd" // color: "#ddd"
}); // });
level.fillBG.push({ //exit room level.fillBG.push({ //exit room
x: -300, x: -300,
@@ -223,13 +223,13 @@ const level = {
const portal3 = level.portal({ const portal3 = level.portal({
x: 1850, x: 1850,
y: -550 y: -585
}, -Math.PI / 2, { //up }, -Math.PI / 2, { //up
x: 2425, x: 2425,
y: -600 y: -600
}, -2 * Math.PI / 3) //up left }, -2 * Math.PI / 3) //up left
const hazard = level.hazard(175, -2050, 1050, 10, 0.15, "hsl(0, 100%, 50%)") //laser const hazard = level.hazard(350, -2025, 700, 10, 0.4, "hsl(0, 100%, 50%)") //laser
const hazard2 = level.hazard(1775, -2550, 150, 10, 0.15, "hsl(0, 100%, 50%)") //laser const hazard2 = level.hazard(1775, -2550, 150, 10, 0.4, "hsl(0, 100%, 50%)") //laser
const button = level.button(2100, -2600) const button = level.button(2100, -2600)
level.custom = () => { level.custom = () => {
@@ -287,11 +287,13 @@ const level = {
powerUps.chooseRandomPowerUp(powerUpPos[1].x, powerUpPos[1].y); powerUps.chooseRandomPowerUp(powerUpPos[1].x, powerUpPos[1].y);
//outer wall //outer wall
spawn.mapRect(-500, -3800, 200, 4000); //left map wall spawn.mapRect(-1400, -3800, 1100, 3900); //left map wall
spawn.mapRect(2500, -2975, 200, 2825); //right map middle wall above right portal spawn.mapRect(2500, -2975, 1200, 2825); //right map middle wall above right portal
spawn.mapRect(2700, -3600, 1000, 3650);
// far far right wall right of portals
// spawn.mapRect(2500, -1425, 200, 1275); // below right portal // spawn.mapRect(2500, -1425, 200, 1275); // below right portal
spawn.mapRect(-400, -3800, 3100, 200); //map ceiling spawn.mapRect(-1400, -4800, 5100, 1200); //map ceiling
spawn.mapRect(-400, 0, 3100, 200); //floor spawn.mapRect(-1400, 0, 5100, 1200); //floor
//lower entrance /exit //lower entrance /exit
// spawn.mapRect(300, -550, 50, 350); //right entrance wall // spawn.mapRect(300, -550, 50, 350); //right entrance wall
@@ -299,19 +301,26 @@ const level = {
// spawn.mapRect(1075, -100, 575, 200); // spawn.mapRect(1075, -100, 575, 200);
// spawn.bodyRect(312, -200, 25, 200); // spawn.bodyRect(312, -200, 25, 200);
// spawn.bodyRect(1775, -75, 100, 100); // spawn.bodyRect(1775, -75, 100, 100);
spawn.mapRect(1075, -375, 50, 225); spawn.mapRect(300, -375, 50, 225);
spawn.bodyRect(1087, -150, 25, 150); spawn.bodyRect(312, -150, 25, 140);
spawn.mapRect(300, -10, 50, 50);
//upper entrance / exit //upper entrance / exit
spawn.mapRect(-400, -1050, 750, 50); spawn.mapRect(-400, -1050, 750, 50);
spawn.mapRect(300, -1050, 50, 300); spawn.mapRect(300, -1050, 50, 300);
spawn.bodyRect(312, -750, 25, 200); spawn.bodyRect(312, -750, 25, 190);
spawn.mapRect(300, -560, 50, 50);
// spawn.mapRect(1400, -1025, 50, 300); // spawn.mapRect(1400, -1025, 50, 300);
// spawn.mapRect(1400, -1025, 50, 825); // spawn.mapRect(1400, -1025, 50, 825);
spawn.mapRect(600, -600, 275, 75); spawn.mapRect(600, -600, 275, 75);
spawn.bodyRect(675, -725, 125, 125); spawn.bodyRect(675, -725, 125, 125);
spawn.mapRect(1075, -1050, 550, 400); // spawn.mapRect(1075, -1050, 550, 400);
spawn.mapRect(-400, -550, 2175, 250); // spawn.mapRect(1150, -1000, 150, 575);
spawn.mapRect(1150, -1000, 250, 575);
spawn.mapRect(1600, -550, 175, 250);
spawn.mapRect(-400, -550, 1800, 250);
spawn.mapRect(-200, -1700, 150, 25); //platform above exit room spawn.mapRect(-200, -1700, 150, 25); //platform above exit room
spawn.mapRect(-200, -1325, 350, 25); spawn.mapRect(-200, -1325, 350, 25);
@@ -319,7 +328,8 @@ const level = {
// spawn.mapRect(1425, -550, 350, 250); // spawn.mapRect(1425, -550, 350, 250);
spawn.mapRect(1925, -550, 500, 250); spawn.mapRect(1925, -550, 500, 250);
spawn.mapRect(2425, -450, 100, 150); spawn.mapRect(2425, -450, 100, 150);
spawn.mapRect(1750, -360, 225, 60); spawn.mapRect(1750, -390, 225, 90);
//portal 1 bottom //portal 1 bottom
spawn.mapRect(2525, -200, 175, 250); //right portal back wall spawn.mapRect(2525, -200, 175, 250); //right portal back wall
@@ -333,14 +343,15 @@ const level = {
spawn.mapRect(1400, -3625, 50, 200); spawn.mapRect(1400, -3625, 50, 200);
spawn.mapRect(350, -3625, 50, 225); spawn.mapRect(350, -3625, 50, 225);
spawn.mapRect(350, -3260, 50, 60); spawn.mapRect(350, -3260, 50, 60);
spawn.bodyRect(362, -3400, 25, 140); // spawn.bodyRect(362, -3400, 25, 140);
spawn.mapRect(200, -3250, 1250, 50); spawn.mapRect(200, -3250, 1250, 50);
spawn.mapRect(1400, -3260, 50, 310); spawn.mapRect(1400, -3260, 50, 310);
spawn.bodyRect(1412, -3425, 25, 165); spawn.bodyRect(1412, -3425, 25, 165);
spawn.mapRect(-150, -3000, 150, 25); // spawn.mapRect(-150, -3000, 150, 25);
spawn.mapRect(-350, -2750, 175, 200); // spawn.mapRect(-350, -2925, 175, 25);
spawn.mapRect(-150, -2925, 150, 25);
//portal 2 //portal 2
spawn.mapRect(-300, -2600, 300, 675); //left platform spawn.mapRect(-300, -2600, 300, 675); //left platform
@@ -350,18 +361,18 @@ const level = {
spawn.mapRect(0, -1975, 175, 50); spawn.mapRect(0, -1975, 175, 50);
spawn.mapRect(1225, -1975, 175, 50); spawn.mapRect(1225, -1975, 175, 50);
spawn.mapRect(150, -2150, 25, 225); spawn.mapRect(150, -2100, 200, 175);
spawn.mapRect(1225, -2150, 25, 225); spawn.mapRect(1050, -2100, 200, 175);
//mobs //mobs
spawn.randomMob(1075, -3500, 0); spawn.randomMob(1075, -3500, -0.3);
// spawn.randomMob(-75, -3425, 0.2); // spawn.randomMob(-75, -3425, 0.2);
spawn.randomMob(1475, -225, 0); spawn.randomMob(1475, -225, -0.3);
spawn.randomMob(2075, -150, 0); spawn.randomMob(2075, -150, -0.2);
spawn.randomMob(2175, -700, 0); spawn.randomMob(2175, -700, -0.2);
spawn.randomMob(-75, -850, 0.1); spawn.randomMob(-75, -850, -0.1);
spawn.randomMob(1300, -600, 0.1); spawn.randomMob(1300, -600, -0.1);
spawn.randomMob(550, -3400, 0.1); spawn.randomMob(550, -3400, 0);
if (game.difficulty > 50) { if (game.difficulty > 50) {
spawn.randomMob(2300, -2775, -0.5); spawn.randomMob(2300, -2775, -0.5);
spawn.randomMob(600, -925, -0.5); spawn.randomMob(600, -925, -0.5);
@@ -370,7 +381,7 @@ const level = {
spawn.randomMob(-75, -1475, 0); spawn.randomMob(-75, -1475, 0);
spawn.randomBoss(600, -2600, 0); spawn.randomBoss(600, -2600, 0);
} }
if (game.difficulty < 30) { if (game.difficulty < 32) {
spawn.randomMob(700, -1650, 0); spawn.randomMob(700, -1650, 0);
spawn.randomMob(600, -3500, 0.2); spawn.randomMob(600, -3500, 0.2);
spawn.randomMob(-75, -1175, 0.2); spawn.randomMob(-75, -1175, 0.2);
@@ -604,7 +615,7 @@ const level = {
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump
spawn.boost(1500, 0, 900); spawn.boost(1500, 0, 900);
spawn.bomberBoss(2900, -500) // spawn.bomberBoss(2900, -500)
// spawn.launcherBoss(1200, -500) // spawn.launcherBoss(1200, -500)
// spawn.laserTargetingBoss(1600, -400) // spawn.laserTargetingBoss(1600, -400)
// spawn.spawner(1600, -500) // spawn.spawner(1600, -500)
@@ -613,7 +624,7 @@ const level = {
// spawn.sniper(1800, -120) // spawn.sniper(1800, -120)
// spawn.sniper(2200, -120) // spawn.sniper(2200, -120)
// spawn.cellBossCulture(1600, -500) // spawn.cellBossCulture(1600, -500)
// spawn.shooter(1600, -500) spawn.starter(1600, -500, 60)
// spawn.striker(1600, -500) // spawn.striker(1600, -500)
// spawn.shield(mob[mob.length - 1], 1200, -500, 1); // spawn.shield(mob[mob.length - 1], 1200, -500, 1);

View File

@@ -1007,7 +1007,7 @@ const mobs = {
this.removeConsBB(); this.removeConsBB();
this.alive = false; //triggers mob removal in mob[i].replace(i) this.alive = false; //triggers mob removal in mob[i].replace(i)
if (this.dropPowerUp) { if (this.dropPowerUp) {
if (mod.isEnergyLoss) mech.energy *= 0.66; if (mod.isEnergyLoss) mech.energy *= 0.75;
powerUps.spawnRandomPowerUp(this.position.x, this.position.y); powerUps.spawnRandomPowerUp(this.position.x, this.position.y);
mech.lastKillCycle = mech.cycle; //tracks the last time a kill was made, mostly used in game.checks() mech.lastKillCycle = mech.cycle; //tracks the last time a kill was made, mostly used in game.checks()
if (Math.random() < mod.sporesOnDeath) { if (Math.random() < mod.sporesOnDeath) {

View File

@@ -91,9 +91,9 @@ const mod = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
return true return mech.maxEnergy > 1 || mod.isEnergyRecovery || mod.isPiezo || mod.energySiphon > 0
}, },
requires: "", requires: "increased energy regen or max energy",
effect: () => { effect: () => {
mod.isEnergyDamage = true // used in mech.grabPowerUp mod.isEnergyDamage = true // used in mech.grabPowerUp
}, },
@@ -103,7 +103,7 @@ const mod = {
}, },
{ {
name: "acute stress response", name: "acute stress response",
description: "increase <strong class='color-d'>damage</strong> by <strong>33%</strong><br>after a mob <strong>dies</strong> drain <strong>33%</strong> <strong class='color-f'>energy</strong>", description: "increase <strong class='color-d'>damage</strong> by <strong>33%</strong><br>if a mob <strong>dies</strong> drain stored <strong class='color-f'>energy</strong> by <strong>25%</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
@@ -232,16 +232,16 @@ const mod = {
}, },
{ {
name: "Ψ(t) collapse", name: "Ψ(t) collapse",
description: "<strong>33%</strong> decreased <strong>delay</strong> after firing<br>if you have no <strong class='color-r'>rerolls</strong>", description: "<strong>40%</strong> decreased <strong>delay</strong> after firing<br>if you have no <strong class='color-r'>rerolls</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
return powerUps.reroll.rerolls === 0 return powerUps.reroll.rerolls === 0 && !mod.manyWorlds
}, },
requires: "no rerolls", requires: "no rerolls",
effect() { effect() {
mod.isRerollHaste = true; mod.isRerollHaste = true;
mod.rerollHaste = 0.666; mod.rerollHaste = 0.6;
b.setFireCD(); b.setFireCD();
}, },
remove() { remove() {
@@ -269,7 +269,7 @@ const mod = {
}, },
{ {
name: "auto-loading heuristics", name: "auto-loading heuristics",
description: "<strong>20%</strong> decreased <strong>delay</strong> after firing", description: "<strong>25%</strong> decreased <strong>delay</strong> after firing",
maxCount: 9, maxCount: 9,
count: 0, count: 0,
allowed() { allowed() {
@@ -277,7 +277,7 @@ const mod = {
}, },
requires: "", requires: "",
effect() { effect() {
mod.fireRate *= 0.8 mod.fireRate *= 0.75
b.setFireCD(); b.setFireCD();
}, },
remove() { remove() {
@@ -441,23 +441,6 @@ const mod = {
mod.laserBotCount = 0; mod.laserBotCount = 0;
} }
}, },
{
name: "plasma-bot",
description: "a bot uses <strong class='color-f'>energy</strong> to emit short range <strong>plasma</strong><br>plasma <strong class='color-d'>damages</strong> and <strong>pushes</strong> mobs",
maxCount: 1,
count: 0,
allowed() {
return mech.fieldUpgrades[mech.fieldMode].name === "plasma torch"
},
requires: "plasma torch",
effect() {
mod.plasmaBotCount++;
b.plasmaBot();
},
remove() {
mod.plasmaBotCount = 0;
}
},
{ {
name: "bot fabrication", name: "bot fabrication",
description: "anytime you collect <strong>4</strong> <strong class='color-r'>rerolls</strong><br>use them to build a random <strong>bot</strong>", description: "anytime you collect <strong>4</strong> <strong class='color-r'>rerolls</strong><br>use them to build a random <strong>bot</strong>",
@@ -531,7 +514,7 @@ const mod = {
}, },
{ {
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>all</strong> of your <strong class='color-g'>ammo</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
// isNonRefundable: true, // isNonRefundable: true,
@@ -542,9 +525,7 @@ const mod = {
effect() { effect() {
//remove ammo //remove ammo
for (let i = 0, len = b.guns.length; i < len; ++i) { for (let i = 0, len = b.guns.length; i < len; ++i) {
if (b.guns[i].ammo != Infinity) { if (b.guns[i].ammo != Infinity) b.guns[i].ammo = 0;
b.guns[i].ammo = Math.floor(b.guns[i].ammo * 0.1);
}
} }
game.updateGunHUD(); game.updateGunHUD();
//double bots //double bots
@@ -577,9 +558,9 @@ const mod = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
return true return mech.harmReduction() < 1
}, },
requires: "", requires: "some harm reduction",
effect() { effect() {
mod.isDroneOnDamage = true; mod.isDroneOnDamage = true;
for (let i = 0; i < 4; i++) { for (let i = 0; i < 4; i++) {
@@ -812,7 +793,7 @@ const mod = {
}, },
{ {
name: "waste energy recovery", name: "waste energy recovery",
description: "regen <strong>6%</strong> of max <strong class='color-f'>energy</strong> every second<br>active for <strong>5 seconds</strong> after any mob <strong>dies</strong>", description: "if a mob has <strong>died</strong> in the last <strong>5 seconds</strong><br>regen <strong>6%</strong> of max <strong class='color-f'>energy</strong> every second",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
@@ -828,7 +809,7 @@ const mod = {
}, },
{ {
name: "scrap recycling", name: "scrap recycling",
description: "<strong class='color-h'>heal</strong> up to <strong>1%</strong> of max health every second<br>active for <strong>5 seconds</strong> after any mob <strong>dies</strong>", description: "if a mob has <strong>died</strong> in the last <strong>5 seconds</strong><br><strong class='color-h'>heal</strong> up to <strong>1%</strong> of max health every second",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
@@ -925,19 +906,19 @@ const mod = {
// } // }
// }, // },
{ {
name: "recursive healing", name: "adiabatic healing",
description: "<strong class='color-h'>healing</strong> <strong>power ups</strong> trigger <strong>1</strong> more time", description: "<strong class='color-h'>heal</strong> <strong>power ups</strong> are <strong>100%</strong> more effective",
maxCount: 9, maxCount: 3,
count: 0, count: 0,
allowed() { allowed() {
return (mech.health < 0.7 || build.isCustomSelection) && !mod.isEnergyHealth return (mech.health < 0.7 || build.isCustomSelection) && !mod.isEnergyHealth
}, },
requires: "not mass-energy equivalence", requires: "not mass-energy equivalence",
effect() { effect() {
mod.recursiveHealing += 1 mod.largerHeals++;
}, },
remove() { remove() {
mod.recursiveHealing = 1; mod.largerHeals = 1;
} }
}, },
{ {
@@ -1147,9 +1128,9 @@ const mod = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
return !mod.isSuperDeterminism return !mod.isSuperDeterminism && !mod.isRerollHaste
}, },
requires: "not superdeterminism", requires: "not superdeterminism or Ψ(t) collapse",
effect: () => { effect: () => {
mod.manyWorlds = true; mod.manyWorlds = true;
}, },
@@ -2062,6 +2043,23 @@ const mod = {
mod.isPlasmaRange = 1; mod.isPlasmaRange = 1;
} }
}, },
{
name: "plasma-bot",
description: "a bot uses <strong class='color-f'>energy</strong> to emit short range <strong>plasma</strong><br>plasma <strong class='color-d'>damages</strong> and <strong>pushes</strong> mobs",
maxCount: 1,
count: 0,
allowed() {
return mech.fieldUpgrades[mech.fieldMode].name === "plasma torch"
},
requires: "plasma torch",
effect() {
mod.plasmaBotCount++;
b.plasmaBot();
},
remove() {
mod.plasmaBotCount = 0;
}
},
{ {
name: "degenerate matter", name: "degenerate matter",
description: "reduce <strong class='color-harm'>harm</strong> by <strong>40%</strong><br>while <strong>negative mass field</strong> is active", description: "reduce <strong class='color-harm'>harm</strong> by <strong>40%</strong><br>while <strong>negative mass field</strong> is active",
@@ -2361,7 +2359,7 @@ const mod = {
isDroneOnDamage: null, isDroneOnDamage: null,
isAcidDmg: null, isAcidDmg: null,
isAnnihilation: null, isAnnihilation: null,
recursiveHealing: null, largerHeals: null,
squirrelFx: null, squirrelFx: null,
isCrit: null, isCrit: null,
bayesian: null, bayesian: null,

View File

@@ -454,27 +454,21 @@ const mech = {
return dmg return dmg
}, },
damage(dmg) { damage(dmg) {
// , noTransition = false
mech.lastHarmCycle = mech.cycle mech.lastHarmCycle = mech.cycle
if (mod.isDroneOnDamage) { //chance to build a drone on damage from mod if (mod.isDroneOnDamage) { //chance to build a drone on damage from mod
const len = (dmg - 0.06 * Math.random()) * 40 const len = (dmg - 0.06 * Math.random()) * 40
for (let i = 0; i < len; i++) { for (let i = 0; i < len; i++) {
if (Math.random() < 0.5) b.drone() //spawn drone if (Math.random() < 0.5) b.drone() //spawn drone
} }
} }
if (mod.isEnergyHealth) { if (mod.isEnergyHealth) {
mech.energy -= dmg; mech.energy -= dmg * 1.2; //20% extra damage for energy as health for balance reasons
if (mech.energy < 0 || isNaN(mech.energy)) { if (mech.energy < 0 || isNaN(mech.energy)) { //taking deadly damage
if (mod.isDeathAvoid && powerUps.reroll.rerolls) { //&& Math.random() < 0.5 if (mod.isDeathAvoid && powerUps.reroll.rerolls) {
powerUps.reroll.changeRerolls(-1) powerUps.reroll.changeRerolls(-1)
mech.energy = mech.maxEnergy mech.energy = mech.maxEnergy
// 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/${powerUps.reroll.rerolls}</strong> <strong class='color-r'>rerolls</strong> consumed</span>`, 420) game.makeTextLog(`<span style='font-size:115%;'> <strong>death</strong> avoided<br><strong>1/${powerUps.reroll.rerolls}</strong> <strong class='color-r'>rerolls</strong> consumed</span>`, 420)
game.wipe = function () { //set wipe to have trails game.wipe = function () { //set wipe to have trails
ctx.fillStyle = "rgba(255,255,255,0.03)"; ctx.fillStyle = "rgba(255,255,255,0.03)";
ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.fillRect(0, 0, canvas.width, canvas.height);
@@ -486,7 +480,7 @@ const mech = {
}, 2000); }, 2000);
return; return;
} else { } else { //death
mech.health = 0; mech.health = 0;
mech.energy = 0; mech.energy = 0;
mech.death(); mech.death();

View File

@@ -106,12 +106,11 @@ const powerUps = {
name: "heal", name: "heal",
color: "#0eb", color: "#0eb",
size() { size() {
return 40 * Math.sqrt(0.1 + Math.random() * 0.5); return 40 * (game.healScale ** 0.25) * Math.sqrt(mod.largerHeals) * Math.sqrt(0.1 + Math.random() * 0.5); //(game.healScale ** 0.25) gives a smaller radius as heal scale goes down
}, },
effect() { effect() {
if (!mod.isEnergyHealth && mech.alive) { if (!mod.isEnergyHealth && mech.alive) {
let heal = 0 const heal = mod.largerHeals * (this.size / 40 / Math.sqrt(mod.largerHeals) / (game.healScale ** 0.25)) ** 2 //heal scale is undone here because heal scale is properly affected on mech.addHealth()
for (let i = 0; i < mod.recursiveHealing; i++) heal += ((this.size / 40) ** 2)
if (heal > 0) { if (heal > 0) {
game.makeTextLog("<div class='circle heal'></div> &nbsp; <span style='font-size:115%;'> <strong style = 'letter-spacing: 2px;'>heal</strong> " + (Math.min(mech.maxHealth - mech.health, heal) * game.healScale * 100).toFixed(0) + "%</span>", 300) game.makeTextLog("<div class='circle heal'></div> &nbsp; <span style='font-size:115%;'> <strong style = 'letter-spacing: 2px;'>heal</strong> " + (Math.min(mech.maxHealth - mech.health, heal) * game.healScale * 100).toFixed(0) + "%</span>", 300)
mech.addHealth(heal); mech.addHealth(heal);
@@ -432,7 +431,7 @@ const powerUps = {
if (game.difficultyMode < 2) { //easy and normal mode if (game.difficultyMode < 2) { //easy and normal mode
powerUps.randomPowerUpCounter += 0.5; powerUps.randomPowerUpCounter += 0.5;
} else if (game.difficultyMode === 3) { //hard mode } else if (game.difficultyMode === 2) { //hard mode
powerUps.randomPowerUpCounter += 1; powerUps.randomPowerUpCounter += 1;
} else { //why mode } else { //why mode
powerUps.randomPowerUpCounter += 1.33; powerUps.randomPowerUpCounter += 1.33;

View File

@@ -1,23 +1,17 @@
mod: upgrade all bots (current and future bots) heal power ups scale in size to indicate mod effects, and level based heal scaling
some difficulty scaling changes (harm ramps a bit faster at high levels) testingChamber changes
************** TODO - n-gon ************** ************** TODO - n-gon **************
new gun - deploy a turret that last for 20 seconds
fire nails at nearby targets once a second.
use mine code and bot code
too many mods are dropping at high levels on hard minigun: high caliber - rework
slow down the bullets even more and increase the size?
remove and actually make a full gun like this?
mod: upgrade all your current bots gun: hit scan bullets?
upgrade should be equal to a 50% increases in value for the bot
nail-bot fires faster
foam bot fires larger radius foam
larger boom-bot explosions
laser-bot does more damage
plasma-bot uses less energy
testChamber
too much block clutter near portals
make reverse path viable
removing block from button releases boss?
portals: portals:
portal while holding block sometimes send player back to original portal portal while holding block sometimes send player back to original portal
@@ -66,26 +60,12 @@ button: blocks that are on the button at an angle will slowly slide off the butt
hazards should slow blocks, bullets, mobs? hazards should slow blocks, bullets, mobs?
mob damage? mob damage?
rotor doesn't work with
plasma torch
seems to have no effect
pilot wave
maybe rewrite pilot wave to apply a force from an angle, like plasma torch
this would be probably too much work, but worth a try
time dilation field (mostly fixed, but it would be nice if it started up faster after a pause)
sporangium and neutron bomb (mostly fixed, but it would be nice if it sticked instead of bounced)
new gun - deploy a turret that last for 20 seconds
fire nails at nearby targets once a second.
use mine code and bot code
field that pushes blocks and mobs away field that pushes blocks and mobs away
charges up on mouse down and triggers on mouse up charges up on mouse down and triggers on mouse up
drain mana while charging up drain mana while charging up
maybe push effect should last 10 cycles to give a more gentle feeling maybe push effect should last 10 cycles to give a more gentle feeling
mod - AoE radiation might work when the effect ends
mod - AoE radiation might work when the effect ends or maybe just anytime another mob is near
or maybe just anytime another mob is near
mob that flashes the player (makes the graphics not update for a couple seconds) mob that flashes the player (makes the graphics not update for a couple seconds)