diff --git a/.DS_Store b/.DS_Store index 6e8737f..de4d8a8 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/js/bullet.js b/js/bullet.js index e612f7a..3213672 100644 --- a/js/bullet.js +++ b/js/bullet.js @@ -1587,7 +1587,7 @@ const b = { ctx.globalAlpha = 1; } }, - AoEStunEffect(where, range, cycles = 100 + 80 * Math.random()) { + AoEStunEffect(where, range, cycles = 150 + 120 * Math.random()) { for (let i = 0, len = mob.length; i < len; ++i) { if (mob[i].alive && !mob[i].isShielded && !mob[i].shield && !mob[i].isBadTarget) { if (Vector.magnitude(Vector.sub(where, mob[i].position)) - mob[i].radius < range) mobs.statusStun(mob[i], cycles) @@ -1643,9 +1643,9 @@ const b = { Matter.Query.ray(map, this.position, mob[i].position).length === 0 && Matter.Query.ray(body, this.position, mob[i].position).length === 0 ) { - b.AoEStunEffect(this.position, 1300); + if (tech.isMineStun) b.AoEStunEffect(this.position, 1300); this.do = this.laserSpin - this.endCycle = simulation.cycle + 360 + this.endCycle = simulation.cycle + 360 + 120 // if (this.angularSpeed < 0.01) this.torque += this.inertia * this.torqueMagnitude * 5 //spin this.isArmed = true break @@ -1668,17 +1668,20 @@ const b = { for (let i = 0; i < 3; i++) { const where = this.vertices[i] const endPoint = Vector.add(where, Vector.mult(Vector.normalise(Vector.sub(where, this.position)), 2500)) - b.laser(where, endPoint, tech.laserDamage * 12, this.reflections, true) + b.laser(where, endPoint, tech.laserDamage * 14, this.reflections, true) } ctx.stroke(); // ctx.globalAlpha = 1; } - } + if (this.endCycle - 60 < simulation.cycle) { + this.do = () => {} //no nothing, no laser, no spin + } + }, }) Matter.Body.setVelocity(bullet[me], velocity); Composite.add(engine.world, bullet[me]); //add bullet to world }, - mine(where, velocity, angle = 0, isAmmoBack = false) { + mine(where, velocity, angle = 0) { const bIndex = bullet.length; bullet[bIndex] = Bodies.rectangle(where.x, where.y, 45, 16, { angle: angle, @@ -1744,9 +1747,7 @@ const b = { } } } else { - if (this.speed < 1 && this.angularSpeed < 0.01 && !m.isBodiesAsleep) { - this.stillCount++ - } + if (this.speed < 1 && this.angularSpeed < 0.01 && !m.isBodiesAsleep) this.stillCount++ } if (this.stillCount > 25) this.arm(); }, @@ -1815,14 +1816,14 @@ const b = { Matter.Query.ray(map, this.position, mob[i].position).length === 0 && Matter.Query.ray(body, this.position, mob[i].position).length === 0 ) { - b.AoEStunEffect(this.position, 700 + mob[i].radius + random); + if (tech.isMineStun) b.AoEStunEffect(this.position, 700 + mob[i].radius + random); if (tech.isMineSentry) { this.lookFrequency = 8 + Math.floor(3 * Math.random()) - this.endCycle = simulation.cycle + 900 + this.endCycle = simulation.cycle + 960 this.do = function() { //overwrite the do method for this bullet this.force.y += this.mass * 0.002; //extra gravity if (!(simulation.cycle % this.lookFrequency) && !m.isBodiesAsleep) { //find mob targets - b.targetedNail(this.position, 1, 45 + 5 * Math.random(), 1100, false, 2) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) { + b.targetedNail(this.position, 1, 45 + 5 * Math.random(), 1100, false, 2.3) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) { if (!(simulation.cycle % (this.lookFrequency * 6))) { simulation.drawList.push({ x: this.position.x, @@ -1851,7 +1852,7 @@ const b = { }, onEnd() { if (this.isArmed) { - b.targetedNail(this.position, tech.isMineSentry ? 7 : 22, 40 + 10 * Math.random(), 1200, true, 1.9) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) { + b.targetedNail(this.position, tech.isMineSentry ? 7 : 22, 40 + 10 * Math.random(), 1200, true, 2.2) //targetedNail(position, num = 1, speed = 40 + 10 * Math.random(), range = 1200, isRandomAim = true, damage = 1.4) { } if (tech.isMineAmmoBack && (!this.isArmed || Math.random() < 0.2)) { //get ammo back from tech.isMineAmmoBack for (i = 0, len = b.guns.length; i < len; i++) { //find which gun @@ -3854,8 +3855,9 @@ const b = { }) //position, velocity, damage if (tech.isIceCrystals) { bullet[bullet.length - 1].beforeDmg = function(who) { + console.log(who) mobs.statusSlow(who, 60) - if (tech.isNailRadiation) mobs.statusDoT(who, dmg * (tech.isFastRadiation ? 2.6 : 0.65), tech.isSlowRadiation ? 240 : (tech.isFastRadiation ? 30 : 120)) // one tick every 30 cycles + if (tech.isNailRadiation) mobs.statusDoT(who, 1 * (tech.isFastRadiation ? 2.6 : 0.65), tech.isSlowRadiation ? 240 : (tech.isFastRadiation ? 30 : 120)) // one tick every 30 cycles if (tech.isNailCrit && !who.shield && Vector.dot(Vector.normalise(Vector.sub(who.position, this.position)), Vector.normalise(this.velocity)) > 0.94) { b.explosion(this.position, 150 + 30 * Math.random()); //makes bullet do explosive damage at end } diff --git a/js/level.js b/js/level.js index 8e58d9d..895dcb9 100644 --- a/js/level.js +++ b/js/level.js @@ -14,12 +14,11 @@ const level = { // localSettings.levelsClearedLastGame = 10 // level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why // simulation.isHorizontalFlipped = true - // tech.isFieldFree = true - // m.setField("time dilation") // b.giveGuns("mine") - // tech.giveTech("laser-mines") // b.giveGuns("nail gun") - // tech.giveTech("Lenz's law") + // m.setField("wormhole") + // tech.giveTech("ice crystal nucleation") + // tech.giveTech("irradiated nails") // for (let i = 0; i < 9; i++) tech.giveTech("MIRV") level.intro(); //starting level @@ -2272,10 +2271,10 @@ const level = { // spawn.laserBombingBoss(1900, -500) // for (let i = 0; i < 5; i++) spawn.focuser(1900, -500) - // spawn.growBossCulture(1900, -500) - spawn.sneaker(1900, -500) - spawn.sneaker(1900, -500) - spawn.shield(mob[mob.length - 1], 1900, -500, 1); + spawn.sniper(1900, -500) + spawn.grenadier(1900, -500) + // spawn.sneaker(1900, -500) + // spawn.shield(mob[mob.length - 1], 1900, -500, 1); // mob[mob.length - 1].isShielded = true // spawn.historyBoss(1200, -500) // spawn.laserTargetingBoss(1600, -400) diff --git a/js/powerup.js b/js/powerup.js index b8a5894..e862a0f 100644 --- a/js/powerup.js +++ b/js/powerup.js @@ -693,7 +693,7 @@ const powerUps = { powerUps.research.currentRerollCount = 0 if (tech.isTechDamage && who.name === "tech") m.damage(0.11) if (tech.isMassEnergy) m.energy += 2; - if (tech.isMineDrop && b.length < 150) { + if (tech.isMineDrop && bullet.length < 150) { if (tech.isLaserMine && m.crouch) { b.laserMine(who.position) } else { diff --git a/js/simulation.js b/js/simulation.js index 25cbf5c..ade7bae 100644 --- a/js/simulation.js +++ b/js/simulation.js @@ -610,6 +610,8 @@ const simulation = { document.getElementById("fade-out").style.opacity = 0; document.title = "n-gon"; + document.getElementById("health").style.display = "inline" + document.getElementById("health-bg").style.display = "inline" m.alive = true; m.setMaxHealth() m.health = 0; diff --git a/js/spawn.js b/js/spawn.js index 62d8bfd..a7ee047 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -91,6 +91,7 @@ const spawn = { secondaryBossChance(x, y) { if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) { spawn.randomLevelBoss(x, y); + return true } else if (tech.isResearchBoss) { if (powerUps.research.count > 3) { powerUps.research.changeRerolls(-4) @@ -98,9 +99,10 @@ const spawn = { } else { tech.addJunkTechToPool(49) } - console.log('hi') spawn.randomLevelBoss(x, y); + return true } + return false }, //mob templates ********************************************************************************************* //*********************************************************************************************************** diff --git a/js/tech.js b/js/tech.js index 0870598..8c4c2fc 100644 --- a/js/tech.js +++ b/js/tech.js @@ -178,7 +178,7 @@ if (tech.isMaxEnergyTech) dmg *= 1.5 if (tech.isEnergyNoAmmo) dmg *= 1.6 if (tech.isDamageForGuns) dmg *= 1 + 0.14 * b.inventory.length - if (tech.isLowHealthDmg) dmg *= 1 + 0.5 * Math.max(0, 1 - m.health) + if (tech.isLowHealthDmg) dmg *= 1 + Math.max(0, 1 - m.health) * 0.5 if (tech.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3; if (tech.isEnergyLoss) dmg *= 1.55; if (tech.isAcidDmg && m.health > 1) dmg *= 1.35; @@ -4455,7 +4455,7 @@ }, { name: "sentry", - description: "instead of detonating, mines target mobs
with a stream of nails for about 14 seconds", + description: "instead of detonating, mines target mobs
with a stream of nails for about 15 seconds", isGunTech: true, maxCount: 1, count: 0, @@ -4474,7 +4474,7 @@ }, { name: "blast mines", - description: "when a mine activates
it stuns nearby mobs for up to 3 seconds", + description: "when a mine activates
it stuns nearby mobs for 2-4 seconds", isGunTech: true, maxCount: 1, count: 0, @@ -4494,6 +4494,7 @@ { name: "booby trap", description: "drop a mine after picking up a power up
+30 JUNK to the potential tech pool", + isGunTech: true, maxCount: 1, count: 0, frequency: 2, diff --git a/todo.txt b/todo.txt index 458b709..eb8e79c 100644 --- a/todo.txt +++ b/todo.txt @@ -1,22 +1,12 @@ ******************************************************** NEXT PATCH ************************************************** -tech: blast mines - mines stun when they activate -laser mines only fire if crouching (so you can fire normal mines when energy is low) -mines now includes the radius of the mob when calculating mobs in range - so it will detonate from the final boss from farther away -mines have a small random chance to detonate from targets up to 40% father away - -time dilation field drains less energy for the first few seconds, but linearly ramps up energy drain as you stay frozen in time - unfreezing time returns you the normal drain rate in half the time to ramp up - this should be a buff for all situations, except someone who has a huge external source of energy - -360 wave beam has reduced mob slow effect +20% damage for all mine modes ******************************************************** TODO ******************************************************** look into 360 wave beam lag -mines stun mobs in range +aoe effect pushes mobs away, then rapidly pulls them in tech: shrapnel - nails have an larger randomized 3 point shape triangle shape and they do more damage @@ -31,7 +21,6 @@ make non moving bosses not move after getting hit shooter, shielding, buff rail gun -buff mines make the player get a buff after using wormhole while energy lasts: drain energy and give damage buff