bug fixes
This commit is contained in:
30
js/bullet.js
30
js/bullet.js
@@ -1587,7 +1587,7 @@ const b = {
|
|||||||
ctx.globalAlpha = 1;
|
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) {
|
for (let i = 0, len = mob.length; i < len; ++i) {
|
||||||
if (mob[i].alive && !mob[i].isShielded && !mob[i].shield && !mob[i].isBadTarget) {
|
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)
|
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(map, this.position, mob[i].position).length === 0 &&
|
||||||
Matter.Query.ray(body, 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.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
|
// if (this.angularSpeed < 0.01) this.torque += this.inertia * this.torqueMagnitude * 5 //spin
|
||||||
this.isArmed = true
|
this.isArmed = true
|
||||||
break
|
break
|
||||||
@@ -1668,17 +1668,20 @@ const b = {
|
|||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 3; i++) {
|
||||||
const where = this.vertices[i]
|
const where = this.vertices[i]
|
||||||
const endPoint = Vector.add(where, Vector.mult(Vector.normalise(Vector.sub(where, this.position)), 2500))
|
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.stroke();
|
||||||
// ctx.globalAlpha = 1;
|
// ctx.globalAlpha = 1;
|
||||||
}
|
}
|
||||||
}
|
if (this.endCycle - 60 < simulation.cycle) {
|
||||||
|
this.do = () => {} //no nothing, no laser, no spin
|
||||||
|
}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
Matter.Body.setVelocity(bullet[me], velocity);
|
Matter.Body.setVelocity(bullet[me], velocity);
|
||||||
Composite.add(engine.world, bullet[me]); //add bullet to world
|
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;
|
const bIndex = bullet.length;
|
||||||
bullet[bIndex] = Bodies.rectangle(where.x, where.y, 45, 16, {
|
bullet[bIndex] = Bodies.rectangle(where.x, where.y, 45, 16, {
|
||||||
angle: angle,
|
angle: angle,
|
||||||
@@ -1744,9 +1747,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (this.speed < 1 && this.angularSpeed < 0.01 && !m.isBodiesAsleep) {
|
if (this.speed < 1 && this.angularSpeed < 0.01 && !m.isBodiesAsleep) this.stillCount++
|
||||||
this.stillCount++
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (this.stillCount > 25) this.arm();
|
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(map, this.position, mob[i].position).length === 0 &&
|
||||||
Matter.Query.ray(body, 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) {
|
if (tech.isMineSentry) {
|
||||||
this.lookFrequency = 8 + Math.floor(3 * Math.random())
|
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.do = function() { //overwrite the do method for this bullet
|
||||||
this.force.y += this.mass * 0.002; //extra gravity
|
this.force.y += this.mass * 0.002; //extra gravity
|
||||||
if (!(simulation.cycle % this.lookFrequency) && !m.isBodiesAsleep) { //find mob targets
|
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))) {
|
if (!(simulation.cycle % (this.lookFrequency * 6))) {
|
||||||
simulation.drawList.push({
|
simulation.drawList.push({
|
||||||
x: this.position.x,
|
x: this.position.x,
|
||||||
@@ -1851,7 +1852,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
onEnd() {
|
onEnd() {
|
||||||
if (this.isArmed) {
|
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
|
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
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
@@ -3854,8 +3855,9 @@ const b = {
|
|||||||
}) //position, velocity, damage
|
}) //position, velocity, damage
|
||||||
if (tech.isIceCrystals) {
|
if (tech.isIceCrystals) {
|
||||||
bullet[bullet.length - 1].beforeDmg = function(who) {
|
bullet[bullet.length - 1].beforeDmg = function(who) {
|
||||||
|
console.log(who)
|
||||||
mobs.statusSlow(who, 60)
|
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) {
|
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
|
b.explosion(this.position, 150 + 30 * Math.random()); //makes bullet do explosive damage at end
|
||||||
}
|
}
|
||||||
|
|||||||
15
js/level.js
15
js/level.js
@@ -14,12 +14,11 @@ const level = {
|
|||||||
// localSettings.levelsClearedLastGame = 10
|
// localSettings.levelsClearedLastGame = 10
|
||||||
// level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why
|
// level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why
|
||||||
// simulation.isHorizontalFlipped = true
|
// simulation.isHorizontalFlipped = true
|
||||||
// tech.isFieldFree = true
|
|
||||||
// m.setField("time dilation")
|
|
||||||
// b.giveGuns("mine")
|
// b.giveGuns("mine")
|
||||||
// tech.giveTech("laser-mines")
|
|
||||||
// b.giveGuns("nail gun")
|
// 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")
|
// for (let i = 0; i < 9; i++) tech.giveTech("MIRV")
|
||||||
|
|
||||||
level.intro(); //starting level
|
level.intro(); //starting level
|
||||||
@@ -2272,10 +2271,10 @@ const level = {
|
|||||||
// spawn.laserBombingBoss(1900, -500)
|
// spawn.laserBombingBoss(1900, -500)
|
||||||
// for (let i = 0; i < 5; i++) spawn.focuser(1900, -500)
|
// for (let i = 0; i < 5; i++) spawn.focuser(1900, -500)
|
||||||
|
|
||||||
// spawn.growBossCulture(1900, -500)
|
spawn.sniper(1900, -500)
|
||||||
spawn.sneaker(1900, -500)
|
spawn.grenadier(1900, -500)
|
||||||
spawn.sneaker(1900, -500)
|
// spawn.sneaker(1900, -500)
|
||||||
spawn.shield(mob[mob.length - 1], 1900, -500, 1);
|
// spawn.shield(mob[mob.length - 1], 1900, -500, 1);
|
||||||
// mob[mob.length - 1].isShielded = true
|
// mob[mob.length - 1].isShielded = true
|
||||||
// spawn.historyBoss(1200, -500)
|
// spawn.historyBoss(1200, -500)
|
||||||
// spawn.laserTargetingBoss(1600, -400)
|
// spawn.laserTargetingBoss(1600, -400)
|
||||||
|
|||||||
@@ -693,7 +693,7 @@ const powerUps = {
|
|||||||
powerUps.research.currentRerollCount = 0
|
powerUps.research.currentRerollCount = 0
|
||||||
if (tech.isTechDamage && who.name === "tech") m.damage(0.11)
|
if (tech.isTechDamage && who.name === "tech") m.damage(0.11)
|
||||||
if (tech.isMassEnergy) m.energy += 2;
|
if (tech.isMassEnergy) m.energy += 2;
|
||||||
if (tech.isMineDrop && b.length < 150) {
|
if (tech.isMineDrop && bullet.length < 150) {
|
||||||
if (tech.isLaserMine && m.crouch) {
|
if (tech.isLaserMine && m.crouch) {
|
||||||
b.laserMine(who.position)
|
b.laserMine(who.position)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -610,6 +610,8 @@ const simulation = {
|
|||||||
document.getElementById("fade-out").style.opacity = 0;
|
document.getElementById("fade-out").style.opacity = 0;
|
||||||
document.title = "n-gon";
|
document.title = "n-gon";
|
||||||
|
|
||||||
|
document.getElementById("health").style.display = "inline"
|
||||||
|
document.getElementById("health-bg").style.display = "inline"
|
||||||
m.alive = true;
|
m.alive = true;
|
||||||
m.setMaxHealth()
|
m.setMaxHealth()
|
||||||
m.health = 0;
|
m.health = 0;
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ const spawn = {
|
|||||||
secondaryBossChance(x, y) {
|
secondaryBossChance(x, y) {
|
||||||
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) {
|
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) {
|
||||||
spawn.randomLevelBoss(x, y);
|
spawn.randomLevelBoss(x, y);
|
||||||
|
return true
|
||||||
} else if (tech.isResearchBoss) {
|
} else if (tech.isResearchBoss) {
|
||||||
if (powerUps.research.count > 3) {
|
if (powerUps.research.count > 3) {
|
||||||
powerUps.research.changeRerolls(-4)
|
powerUps.research.changeRerolls(-4)
|
||||||
@@ -98,9 +99,10 @@ const spawn = {
|
|||||||
} else {
|
} else {
|
||||||
tech.addJunkTechToPool(49)
|
tech.addJunkTechToPool(49)
|
||||||
}
|
}
|
||||||
console.log('hi')
|
|
||||||
spawn.randomLevelBoss(x, y);
|
spawn.randomLevelBoss(x, y);
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
},
|
},
|
||||||
//mob templates *********************************************************************************************
|
//mob templates *********************************************************************************************
|
||||||
//***********************************************************************************************************
|
//***********************************************************************************************************
|
||||||
|
|||||||
@@ -178,7 +178,7 @@
|
|||||||
if (tech.isMaxEnergyTech) dmg *= 1.5
|
if (tech.isMaxEnergyTech) dmg *= 1.5
|
||||||
if (tech.isEnergyNoAmmo) dmg *= 1.6
|
if (tech.isEnergyNoAmmo) dmg *= 1.6
|
||||||
if (tech.isDamageForGuns) dmg *= 1 + 0.14 * b.inventory.length
|
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.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3;
|
||||||
if (tech.isEnergyLoss) dmg *= 1.55;
|
if (tech.isEnergyLoss) dmg *= 1.55;
|
||||||
if (tech.isAcidDmg && m.health > 1) dmg *= 1.35;
|
if (tech.isAcidDmg && m.health > 1) dmg *= 1.35;
|
||||||
@@ -4455,7 +4455,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "sentry",
|
name: "sentry",
|
||||||
description: "instead of detonating, <strong>mines</strong> <strong>target</strong> mobs<br>with a stream of nails for about <strong>14</strong> seconds",
|
description: "instead of detonating, <strong>mines</strong> <strong>target</strong> mobs<br>with a stream of nails for about <strong>15</strong> seconds",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4474,7 +4474,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "blast mines",
|
name: "blast mines",
|
||||||
description: "when a <strong>mine</strong> <strong>activates</strong><br>it <strong>stuns</strong> nearby mobs for up to <strong>3</strong> seconds",
|
description: "when a <strong>mine</strong> <strong>activates</strong><br>it <strong>stuns</strong> nearby mobs for <strong>2-4</strong> seconds",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4494,6 +4494,7 @@
|
|||||||
{
|
{
|
||||||
name: "booby trap",
|
name: "booby trap",
|
||||||
description: "drop a <strong>mine</strong> after picking up a <strong>power up</strong><br><strong>+30</strong> <strong class='color-j'>JUNK</strong> to the potential <strong class='color-m'>tech</strong> pool",
|
description: "drop a <strong>mine</strong> after picking up a <strong>power up</strong><br><strong>+30</strong> <strong class='color-j'>JUNK</strong> to the potential <strong class='color-m'>tech</strong> pool",
|
||||||
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
|
|||||||
15
todo.txt
15
todo.txt
@@ -1,22 +1,12 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** 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)
|
20% damage for all mine modes
|
||||||
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
|
|
||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
look into 360 wave beam lag
|
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
|
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,
|
shooter, shielding,
|
||||||
|
|
||||||
buff rail gun
|
buff rail gun
|
||||||
buff mines
|
|
||||||
|
|
||||||
make the player get a buff after using wormhole
|
make the player get a buff after using wormhole
|
||||||
while energy lasts: drain energy and give damage buff
|
while energy lasts: drain energy and give damage buff
|
||||||
|
|||||||
Reference in New Issue
Block a user