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