diff --git a/js/bullet.js b/js/bullet.js index 258e83e..3be32f1 100644 --- a/js/bullet.js +++ b/js/bullet.js @@ -1065,7 +1065,7 @@ const b = { onEnd() {}, do() { if (this.lastLookCycle < game.cycle && !mech.isCloak) { - this.lastLookCycle = game.cycle + 80 - this.isUpgraded * 50 + this.lastLookCycle = game.cycle + 80 - this.isUpgraded * 55 let target for (let i = 0, len = mob.length; i < len; i++) { const dist = Vector.magnitudeSquared(Vector.sub(this.position, mob[i].position)); @@ -1130,7 +1130,7 @@ const b = { const radius = 6 + 7 * Math.random() const SPEED = 29 - radius * 0.5; //(mech.crouch ? 32 : 20) - radius * 0.7; const velocity = Vector.mult(Vector.normalise(Vector.sub(target, this.position)), SPEED) - b.foam(this.position, velocity, radius + 9 * this.isUpgraded) + b.foam(this.position, velocity, radius + 11 * this.isUpgraded) break; } } @@ -1230,7 +1230,7 @@ const b = { bestVertexDistance = dist } } - const dmg = b.dmgScale * (0.06 + 0.075 * this.isUpgraded); + const dmg = b.dmgScale * (0.06 + 0.08 * this.isUpgraded); this.lockedOn.damage(dmg); this.lockedOn.locatePlayer(); @@ -1280,7 +1280,7 @@ const b = { explode: 0, onDmg() { if (this.lockedOn) { - const explosionRadius = Math.min(170 + 130 * this.isUpgraded, Vector.magnitude(Vector.sub(this.position, mech.pos)) - 30) + const explosionRadius = Math.min(170 + 140 * this.isUpgraded, Vector.magnitude(Vector.sub(this.position, mech.pos)) - 30) if (explosionRadius > 60) { this.explode = explosionRadius // @@ -2575,8 +2575,13 @@ const b = { ammoPack: 14, have: false, fire() { - b.drone(mech.crouch ? 45 : 1) - mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 13 : 5) * b.fireCD); // cool down + if (mech.crouch) { + b.drone(45) + mech.fireCDcycle = mech.cycle + Math.floor(17 * b.fireCD); // cool down + } else { + b.drone(1) + mech.fireCDcycle = mech.cycle + Math.floor(10 * b.fireCD); // cool down + } } }, { diff --git a/js/mods.js b/js/mods.js index 9f3cd8e..6f26819 100644 --- a/js/mods.js +++ b/js/mods.js @@ -94,6 +94,7 @@ const mod = { if (mod.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.0038 if (mod.isRerollDamage) dmg *= 1 + 0.05 * powerUps.reroll.rerolls if (mod.isOneGun && b.inventory.length < 2) dmg *= 1.25 + if (mod.isNoFireDamage && mech.cycle > mech.fireCDcycle + 120) dmg *= 1.5 return dmg * mod.slowFire * mod.aimDamage }, totalBots() { @@ -502,7 +503,7 @@ const mod = { }, { name: "nail-bot upgrade", - description: "100% increased nail-bot fire rate
applies to all current and future nail-bots", + description: "125% increased fire rate
applies to all current and future nail-bots", maxCount: 1, count: 0, allowed() { @@ -541,7 +542,7 @@ const mod = { }, { name: "foam-bot upgrade", - description: "100% increased foam-bot foam size
applies to all current and future foam-bots", + description: "125% increased foam size
applies to all current and future foam-bots", maxCount: 1, count: 0, allowed() { @@ -580,7 +581,7 @@ const mod = { }, { name: "boom-bot upgrade", - description: "100% increased boom-bot explosion size
applies to all current and future boom-bots", + description: "125% increased explosion damage and size
applies to all current and future boom-bots", maxCount: 1, count: 0, allowed() { @@ -619,7 +620,7 @@ const mod = { }, { name: "laser-bot upgrade", - description: "100% increased laser-bot damage
applies to all current and future laser-bots", + description: "125% increased laser damage
applies to all current and future laser-bots", maxCount: 1, count: 0, allowed() { @@ -765,6 +766,38 @@ const mod = { mod.collisionImmuneCycles = 25; } }, + { + name: "decorrelation", + description: "reduce harm by 40%
after not using your gun or field for 2 seconds", + maxCount: 1, + count: 0, + allowed() { + return true + }, + requires: "", + effect() { + mod.isNoFireDefense = true + }, + remove() { + mod.isNoFireDefense = false + } + }, + { + name: "anticorrelation", + description: "increase damage by 50%
after not using your gun or field for 2 seconds", + maxCount: 1, + count: 0, + allowed() { + return mod.isNoFireDefense + }, + requires: "full annealing", + effect() { + mod.isNoFireDamage = true + }, + remove() { + mod.isNoFireDamage = false + } + }, { name: "non-Newtonian armor", description: "for 10 seconds after receiving harm
reduce harm by 50%", @@ -895,7 +928,7 @@ const mod = { }, { name: "1st ionization energy", - description: "each heal power up you collect
increases your maximum energy by 4%", + description: "each heal power up you collect
increases your maximum energy by 4%", maxCount: 1, count: 0, allowed() { @@ -1298,7 +1331,7 @@ const mod = { }, { name: "gun turret", - description: "reduce harm by 40% when crouching", + description: "reduce harm by 50% when crouching", maxCount: 1, count: 0, allowed() { @@ -2413,7 +2446,7 @@ const mod = { }, { name: "plasma jet", - description: "increase plasma torch's range by 27%", + description: "increase plasma torch's range by 27%", maxCount: 9, count: 0, allowed() { @@ -2429,7 +2462,7 @@ const mod = { }, { name: "plasma-bot", - description: "a bot uses energy to emit short range plasma
that damages and pushes mobs", + description: "a bot uses energy to emit plasma
that damages and pushes mobs", maxCount: 1, count: 0, allowed() { @@ -2884,5 +2917,7 @@ const mod = { bonusEnergy: null, healGiveMaxEnergy: null, healMaxEnergyBonus: null, - aimDamage: null + aimDamage: null, + isNoFireDefense: null, + isNoFireDamage: null } \ No newline at end of file diff --git a/js/player.js b/js/player.js index 904a41d..5d9e4f6 100644 --- a/js/player.js +++ b/js/player.js @@ -486,8 +486,9 @@ const mech = { if (mod.isHarmReduce && mech.fieldUpgrades[mech.fieldMode].name === "negative mass field" && mech.isFieldActive) dmg *= 0.6 if (mod.isBotArmor) dmg *= 0.95 ** mod.totalBots() if (mod.isHarmArmor && mech.lastHarmCycle + 600 > mech.cycle) dmg *= 0.5; + if (mod.isNoFireDefense && mech.cycle > mech.fireCDcycle + 120) dmg *= 0.6 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 *= 0.6; + if (mod.isTurret && mech.crouch) dmg *= 0.5; if (mod.isEntanglement && b.inventory[0] === b.activeGun) { for (let i = 0, len = b.inventory.length; i < len; i++) { dmg *= 0.85 // 1 - 0.15 @@ -846,6 +847,7 @@ const mech = { } }, holding() { + if (mech.fireCDcycle < mech.cycle) mech.fireCDcycle = mech.cycle if (mech.holdingTarget) { mech.energy -= mech.fieldRegen; if (mech.energy < 0) mech.energy = 0; @@ -863,7 +865,7 @@ const mech = { if (mech.holdingTarget) { if (keys[32] || game.mouseDownRight) { if (mech.energy > 0.001) { - mech.fireCDcycle = mech.cycle + if (mech.fireCDcycle < mech.cycle) mech.fireCDcycle = mech.cycle mech.energy -= 0.001 / mod.throwChargeRate; mech.throwCharge += 0.5 * mod.throwChargeRate / mech.holdingTarget.mass //draw charge @@ -976,6 +978,7 @@ const mech = { ctx.stroke(); }, grabPowerUp() { //look for power ups to grab with field + if (mech.fireCDcycle < mech.cycle) mech.fireCDcycle = mech.cycle for (let i = 0, len = powerUp.length; i < len; ++i) { const dxP = mech.pos.x - powerUp[i].position.x; const dyP = mech.pos.y - powerUp[i].position.y; @@ -1226,7 +1229,7 @@ const mech = { }, fieldUpgrades: [{ name: "field emitter", - description: "use energy to push mobs away
throw blocks to damage mobs
pick up power ups", + description: "use energy to block mobs
throw blocks to damage mobs
pick up power ups", effect: () => { game.replaceTextLog = true; //allow text over write mech.hold = function () { @@ -1254,7 +1257,7 @@ const mech = { name: "standing wave harmonics", description: "three oscillating shields are permanently active
blocking has no cool down
reduce harm by 20%", effect: () => { - mech.fieldHarmReduction = 0.20; + mech.fieldHarmReduction = 0.80; mech.fieldBlockCD = 0; mech.hold = function () { if (mech.isHolding) { @@ -1527,7 +1530,7 @@ const mech = { }, { name: "plasma torch", - description: "use energy to emit short range plasma
plasma damages mobs
plasma pushes mobs and blocks away", + description: "use energy to emit short range plasma
damages mobs
pushes mobs and blocks away", effect() { mech.fieldMeterColor = "#f0f" mech.hold = function () { @@ -1790,11 +1793,9 @@ const mech = { mech.drawHold(mech.holdingTarget); mech.holding(); mech.throwBlock(); - if (mech.fireCDcycle < mech.cycle) mech.fireCDcycle = mech.cycle //to disable cloak } else if ((keys[32] || game.mouseDownRight && mech.fieldCDcycle < mech.cycle)) { //not hold and field button is pressed mech.grabPowerUp(); mech.lookForPickUp(); - if (mech.fireCDcycle < mech.cycle) mech.fireCDcycle = mech.cycle //to disable cloak } else if (mech.holdingTarget && mech.fieldCDcycle < mech.cycle) { //holding target exists, and field button is not pressed mech.pickUp(); } else { diff --git a/js/spawn.js b/js/spawn.js index 8d154d5..763a1c0 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -233,7 +233,7 @@ const spawn = { me.isBoss = true; me.frictionAir = 0.025 me.seeAtDistance2 = 9000000; - me.accelMag = 0.0006 * game.accelScale; + me.accelMag = 0.0005 * game.accelScale; Matter.Body.setDensity(me, 0.002); //normal is 0.001 me.collisionFilter.mask = cat.bullet | cat.player me.memory = Infinity; diff --git a/style.css b/style.css index 56f5f00..cc33c84 100644 --- a/style.css +++ b/style.css @@ -469,6 +469,17 @@ em { letter-spacing: 1px; } +.color-plasma { + /* opacity: 0.5; */ + color: #c0e; + /* color: #000; */ + letter-spacing: 1px; + background-color: rgba(132, 0, 255, 0.04); + padding: 2px; + border-radius: 4px; + letter-spacing: 1px; +} + .color-harm { /* color: */ /* text-shadow: #FC0 1px 0 10px; */ diff --git a/todo.txt b/todo.txt index 9b7b833..d6c71aa 100644 --- a/todo.txt +++ b/todo.txt @@ -1,8 +1,8 @@ -mod: ionization energy - heal power ups give you 4% max energy - requires mass-energy equivalence +mod: decorrelation - 2 seconds after you don't use your gun or field get 40% harm reduction + +mod: anticorrelation - 2 seconds after you don't use your gun or field get 50% damage + requires decorrelation -mod: discrete optimization - 50% damage and 50% slow fire rotates - requires cloaking field ************** TODO - n-gon ************** @@ -12,8 +12,6 @@ getting stuck above a mob can immobilize player add a knock to player mob collisions even while player is immune to damage keep the knock very small -Mod to buff mass-energy-equivalence (maybe take no damage some % and do that dmb to a mob) - bug - mine spawned one new mine every second after sticking to the top right corner of a wall notes: had only gun mine, mod mine reclamation, field plasma, @@ -33,16 +31,6 @@ add some more computer / AI stuff to the level lore text mod - mines stun targets nearby when they explode -cloaking field mods - much longer delay in firing, but a very large bonus - larger vision - return to stealth faster - +damage to nearby mobs - +damage to unaware mobs (code for this doesn't seem to work) - -mod - negative mass field intangibility - doesn't seem that interesting - mod - do something for 2 seconds after firing if (mech.fireCDcycle + 120)