diff --git a/js/bullets.js b/js/bullets.js index fbccb22..f291555 100644 --- a/js/bullets.js +++ b/js/bullets.js @@ -185,7 +185,22 @@ const b = { b.isModImmuneExplosion = false; } }, - + { + name: "thermal runaway", + description: "mobs explode when they die", + maxCount: 1, + count: 0, + allowed() { + return b.isModImmuneExplosion + }, + requires: "electric reactive armour", + effect: () => { + b.isModExplodeMob = true; + }, + remove() { + b.isModExplodeMob = false; + } + }, { name: "auto-loading heuristics", description: "your delay after firing is +14% shorter", @@ -323,22 +338,6 @@ const b = { b.modMobDieAtHealth = 0.05; } }, - { - name: "thermal runaway", - description: "mobs explode when they die", - maxCount: 1, - count: 0, - allowed() { - return b.modMobDieAtHealth > 0.05 - }, - requires: "reaction inhibitor", - effect: () => { - b.isModExplodeMob = true; - }, - remove() { - b.isModExplodeMob = false; - } - }, { name: "waste energy recovery", description: "regen 7% of max energy every second
active for 5 seconds after a mob dies", @@ -1002,7 +1001,7 @@ const b = { }, { name: "perfect diamagnetism", - description: "when blocking with the basic field emitter
gain energy instead losing it", + description: "when blocking with the starting field emitter
gain energy instead losing it", maxCount: 1, count: 0, allowed() { @@ -1051,19 +1050,21 @@ const b = { } }, { - name: "field superposition", - description: "increase field radii by 40%", - maxCount: 1, + name: "frequency resonance", + description: "standing wave harmonics shield is retuned
increase size and blocking efficiency by 30%", + maxCount: 9, count: 0, allowed() { return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics" }, requires: "standing wave harmonics", effect() { - mech.fieldRange = 175 * 1.4 + mech.fieldRange += 175 * 0.2 + mech.fieldShieldingScale *= 0.7 }, remove() { mech.fieldRange = 175; + mech.fieldShieldingScale = 1; } }, { @@ -1329,7 +1330,7 @@ const b = { if (dist < radius) { if (b.isModImmuneExplosion) { - const drain = Math.max(radius * 0.0006, 0.2) + const drain = Math.max(radius * 0.0004, 0.2) if (mech.energy > drain) { mech.energy -= drain } else { @@ -2091,7 +2092,7 @@ const b = { name: "super balls", //2 description: "fire four balls in a wide arc
balls bounce with no momentum loss", ammo: 0, - ammoPack: 9, + ammoPack: 10, have: false, num: 5, isStarterGun: true, @@ -2105,7 +2106,7 @@ const b = { let dir = mech.angle - SPREAD * (b.modSuperBallNumber - 1) / 2; for (let i = 0; i < b.modSuperBallNumber; i++) { const me = bullet.length; - bullet[me] = Bodies.polygon(mech.pos.x + 30 * Math.cos(mech.angle), mech.pos.y + 30 * Math.sin(mech.angle), 10, 7 * b.modBulletSize, b.fireAttributes(dir, false)); + bullet[me] = Bodies.polygon(mech.pos.x + 30 * Math.cos(mech.angle), mech.pos.y + 30 * Math.sin(mech.angle), 12, 7 * b.modBulletSize, b.fireAttributes(dir, false)); World.add(engine.world, bullet[me]); //add bullet to world Matter.Body.setVelocity(bullet[me], { x: SPEED * Math.cos(dir), @@ -2182,7 +2183,7 @@ const b = { const me = bullet.length; const dir = mech.angle const SPEED = 10 - const wiggleMag = mech.crouch ? 4 : 11 + const wiggleMag = mech.crouch ? 3 : 10 bullet[me] = Bodies.polygon(mech.pos.x + 25 * Math.cos(dir), mech.pos.y + 25 * Math.sin(dir), 7, 5 * b.modBulletSize, { angle: dir, cycle: 0, diff --git a/js/level.js b/js/level.js index 9764606..e16b253 100644 --- a/js/level.js +++ b/js/level.js @@ -15,7 +15,7 @@ const level = { if (level.levelsCleared === 0) { // level.difficultyIncrease(9) // b.giveGuns("wave beam") - // mech.setField("negative mass field") + // mech.setField("plasma torch") // b.giveMod("wave phase velocity"); // b.giveMod("reflective cavity"); diff --git a/js/player.js b/js/player.js index 9c9e6af..d93c920 100644 --- a/js/player.js +++ b/js/player.js @@ -664,6 +664,7 @@ const mech = { fieldEnergyMax: 1, //can be increased by a mod holdingTarget: null, fieldShieldingScale: 1, + fieldRange: 175, // these values are set on reset by setHoldDefaults() energy: 0, fieldRegen: 0, @@ -672,7 +673,6 @@ const mech = { holdingMassScale: 0, throwChargeRate: 0, throwChargeMax: 0, - fieldRange: 175, fieldArc: 0, fieldThreshold: 0, calculateFieldThreshold() { @@ -681,6 +681,7 @@ const mech = { setHoldDefaults() { if (mech.energy < mech.fieldEnergyMax) mech.energy = mech.fieldEnergyMax; mech.fieldRegen = 0.001; + mech.fieldShieldingScale = 1; mech.fieldFire = false; mech.fieldCDcycle = 0; mech.isStealth = false; @@ -1148,7 +1149,6 @@ const mech = { isEasyToAim: true, effect: () => { mech.fieldFire = true; - // mech.fieldRange = 130 mech.isBodiesAsleep = false; mech.hold = function () { if (mech.isHolding) { @@ -1346,7 +1346,8 @@ const mech = { let y = mech.pos.y + 20 * Dy; ctx.beginPath(); ctx.moveTo(x, y); - const step = range / 10 + const step = Vector.magnitude(Vector.sub(path[0], path[1])) / 10 + for (let i = 0; i < 8; i++) { x += step * (Dx + 1.5 * (Math.random() - 0.5)) y += step * (Dy + 1.5 * (Math.random() - 0.5)) @@ -1538,13 +1539,12 @@ const mech = { if (mech.energy > mech.fieldEnergyMax - 0.02 && mech.fieldCDcycle < mech.cycle) { mech.fieldCDcycle = mech.cycle + 17; // set cool down to prevent +energy from making huge numbers of drones if (b.isModSporeField) { - const len = Math.floor(7 + 3 * Math.random()) - mech.energy -= len * 0.1; + const len = Math.floor(6 + 3 * Math.random()) + mech.energy -= len * 0.08; for (let i = 0; i < len; i++) { b.spore(player) } - } - if (b.isModMissileField) { + } else if (b.isModMissileField) { mech.energy -= 0.55; b.missile({ x: mech.pos.x + 40 * Math.cos(mech.angle), @@ -1582,7 +1582,6 @@ const mech = { description: "become intangible and invisible
drains energy as you move", isEasyToAim: true, effect: () => { - // mech.fieldRange = 230 mech.hold = function () { mech.isStealth = false //isStealth disables most uses of foundPlayer() player.collisionFilter.mask = cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield //normal collisions @@ -1630,7 +1629,6 @@ const mech = { // mech.fieldText(); // mech.setHoldDefaults(); // mech.hackProgress = 0; - // // mech.fieldRange = 230 // mech.hold = function () { // mech.isStealth = false //isStealth is checked in mob foundPlayer() // player.collisionFilter.mask = 0x010011 diff --git a/todo.txt b/todo.txt index 2aea42b..1d8143c 100644 --- a/todo.txt +++ b/todo.txt @@ -3,11 +3,13 @@ mobs - add in a function to the main loops that does injected code for each mob each mob would get an object with a game.cycle for ending and a method to run each cycle until the end is met this could be a DOT, graphics, slow + mod - flechettes mod for poison damage mod - get your next recursive mod 3 times are players aware of what a recursive mod is? too much of a nova drift rip off? +mod - vacuum bomb needs a mod mod - grenade needs a mod mod - time dilation field needs a mod mod - phase decoherence field needs a mod @@ -21,12 +23,6 @@ mod - rocket propelled grenades grenades do +20% damage and move in an accelerating path maybe explode on collision with map? -mod - negative mass field does damage to mobs in zone - -mod - flechettes mod for poison damage - other flechettes multi-shot is disabled -mod - flechettes are guided towards targets - gun - buff vacuum bomb its weak late game can't spam it faster