bug fixes
This commit is contained in:
30
js/bullet.js
30
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
|
||||
}
|
||||
|
||||
15
js/level.js
15
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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 *********************************************************************************************
|
||||
//***********************************************************************************************************
|
||||
|
||||
@@ -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, <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,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -4474,7 +4474,7 @@
|
||||
},
|
||||
{
|
||||
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,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -4494,6 +4494,7 @@
|
||||
{
|
||||
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",
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
|
||||
15
todo.txt
15
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
|
||||
|
||||
Reference in New Issue
Block a user