diff --git a/img/depolarization.webp b/img/depolarization.webp
index 2932607..1ff8484 100644
Binary files a/img/depolarization.webp and b/img/depolarization.webp differ
diff --git a/img/hyperpolarization.webp b/img/hyperpolarization.webp
new file mode 100644
index 0000000..2932607
Binary files /dev/null and b/img/hyperpolarization.webp differ
diff --git a/js/bullet.js b/js/bullet.js
index 320ba5e..674bfd5 100644
--- a/js/bullet.js
+++ b/js/bullet.js
@@ -800,7 +800,7 @@ const b = {
requestAnimationFrame(cycle)
} else {
count++
- if (count < 110) requestAnimationFrame(cycle);
+ if (count < 130) requestAnimationFrame(cycle);
if (!(count % 10)) {
const unit = Vector.rotate({
x: 1,
diff --git a/js/mob.js b/js/mob.js
index 58f7ad5..6f5b85c 100644
--- a/js/mob.js
+++ b/js/mob.js
@@ -1372,7 +1372,7 @@ const mobs = {
}
if (tech.isAddRemoveMaxHealth) {
if (!this.isBoss) {
- const amount = 0.005
+ const amount = 0.0025
if (tech.isEnergyHealth) {
if (m.maxEnergy > amount) {
tech.healMaxEnergyBonus -= amount
diff --git a/js/player.js b/js/player.js
index d9e7a83..5a9876d 100644
--- a/js/player.js
+++ b/js/player.js
@@ -580,36 +580,24 @@ const m = {
},
rewind(steps) { // m.rewind(Math.floor(Math.min(599, 137 * m.energy)))
if (tech.isRewindGrenade) {
- const immunityDuration = 65
+ const immunityDuration = 50
const immunityCycle = m.cycle + immunityDuration + 10 + tech.isPetalsExplode * 30 + tech.isCircleExplode * 21
if (m.immuneCycle < immunityCycle) m.immuneCycle = immunityCycle; //player is immune to damage until after grenades might explode...
for (let i = 1, len = Math.floor(4 + steps / 40); i < len; i++) {
- b.grenade(Vector.add(m.pos, {
- x: 10 * (Math.random() - 0.5),
- y: 10 * (Math.random() - 0.5)
- }), -i * Math.PI / len) //fire different angles for each grenade
+ b.grenade(Vector.add(m.pos, { x: 10 * (Math.random() - 0.5), y: 10 * (Math.random() - 0.5) }), -i * Math.PI / len) //fire different angles for each grenade
const who = bullet[bullet.length - 1]
if (tech.isNeutronBomb) {
- Matter.Body.setVelocity(who, {
- x: who.velocity.x * 0.3,
- y: who.velocity.y * 0.3
- });
+ Matter.Body.setVelocity(who, { x: who.velocity.x * 0.3, y: who.velocity.y * 0.3 });
} else if (tech.isVacuumBomb) {
- Matter.Body.setVelocity(who, {
- x: who.velocity.x * 0.5,
- y: who.velocity.y * 0.5
- });
+ Matter.Body.setVelocity(who, { x: who.velocity.x * 0.5, y: who.velocity.y * 0.5 });
who.endCycle = simulation.cycle + immunityDuration
} else if (tech.isRPG) {
who.endCycle = simulation.cycle + 10
} else {
- Matter.Body.setVelocity(who, {
- x: who.velocity.x * 0.5,
- y: who.velocity.y * 0.5
- });
+ Matter.Body.setVelocity(who, { x: who.velocity.x * 0.5, y: who.velocity.y * 0.5 });
who.endCycle = simulation.cycle + immunityDuration
}
}
@@ -1091,7 +1079,7 @@ const m = {
m.calcLeg(Math.PI, -3);
- const diff = (m.lastKillCycle - m.cycle + 240) / 240
+ const diff = (m.lastKillCycle - m.cycle + tech.isDamageCooldownTime) / tech.isDamageCooldownTime
const color = diff < 0 ? "#fff" : "#aaa"
const hue = 220 + 20 * Math.sin(0.01 * m.cycle)
const colorInverse = diff < 0 ? `hsl(${hue}, 80%, 40%)` : "#fff"
@@ -4285,7 +4273,7 @@ const m = {
if (tech.isCloakStun) { //stun nearby mobs after exiting cloak
let isMobsAround = false
const stunRange = m.fieldDrawRadius * 1.5
- const drain = 0.14
+ const drain = 0.1
if (m.energy > drain) {
for (let i = 0, len = mob.length; i < len; ++i) {
if (Vector.magnitude(Vector.sub(mob[i].position, m.pos)) < stunRange && Matter.Query.ray(map, mob[i].position, m.pos).length === 0 && !mob[i].isBadTarget) {
diff --git a/js/simulation.js b/js/simulation.js
index fdb0940..1dfeb9c 100644
--- a/js/simulation.js
+++ b/js/simulation.js
@@ -1287,7 +1287,7 @@ const simulation = {
for (let i = 0, len = mob.length; i < len; i++) {
if (mob[i].isDropPowerUp && mob[i].alive) count++
}
- count *= 0.22 //to fake the 20% chance, this makes it not random, and more predictable
+ count *= 0.25 //to fake the 25% chance, this makes it not random, and more predictable
let cycle = () => { //run after waiting a cycle for the map to be cleared
const types = ["heal", "ammo", "heal", "ammo", "research", "coupling", "boost", "tech", "gun", "field"]
for (let i = 0; i < count; i++) powerUps.spawnDelay(types[Math.floor(Math.random() * types.length)], 1)
diff --git a/js/tech.js b/js/tech.js
index 4a66256..7900dfa 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -231,7 +231,7 @@ const tech = {
// }
// }
// }
- if (tech.isDamageCooldown) dmg *= m.lastKillCycle + 240 > m.cycle ? 0.5 : 4
+ if (tech.isDamageCooldown) dmg *= m.lastKillCycle + tech.isDamageCooldownTime > m.cycle ? 0.45 : 4.33
if (tech.isDamageAfterKillNoRegen && m.lastKillCycle + 300 > m.cycle) dmg *= 1.93
if (tech.isDivisor && b.activeGun !== undefined && b.activeGun !== null && b.guns[b.activeGun].ammo % 3 === 0) dmg *= 1.77
if (tech.isNoGroundDamage) dmg *= m.onGround ? 0.85 : 2
@@ -366,30 +366,6 @@ const tech = {
if (this.count) m.resetSkin();
}
},
- {
- name: "depolarization",
- descriptionFunction() {
- // return `+300% damage or -50% damage
if a mob has died in the last 5 seconds`
- return `+300% damage if no mobs died in the last 4 seconds
-50% damage if a mob died in the last 4 seconds`
- },
- maxCount: 1,
- count: 0,
- frequency: 1,
- frequencyDefault: 1,
- isSkin: true,
- allowed() {
- return !m.isAltSkin
- },
- requires: "not skinned",
- effect() {
- m.skin.polar();
- tech.isDamageCooldown = true;
- },
- remove() {
- tech.isDamageCooldown = false;
- if (this.count) m.resetSkin();
- }
- },
{
name: "Higgs mechanism",
description: "+77% fire rate
while firing your position is fixed",
@@ -419,7 +395,7 @@ const tech = {
},
{
name: "Hilbert space",
- description: "+142% damage
after a collision enter an alternate reality",
+ description: "+300% damage
after a collision enter an alternate reality",
maxCount: 1,
count: 0,
frequency: 1,
@@ -430,7 +406,7 @@ const tech = {
return !m.isAltSkin && !tech.isResearchReality && !tech.isSwitchReality
},
requires: "not skinned, Ψ(t) collapse, many-worlds",
- damage: 2.42,
+ damage: 4, //1+300%
effect() {
m.skin.anodize();
tech.damage *= this.damage
@@ -527,20 +503,20 @@ const tech = {
name: "1st ionization energy",
link: `1st ionization energy`,
// description: `after you collect ${powerUps.orb.heal()}
+${0.1 * tech.largerHeals} maximum energy`,
- // descriptionFunction: `convert current and future ${powerUps.orb.heal()} into