diff --git a/js/bullet.js b/js/bullet.js
index 6474798..d9a8ec3 100644
--- a/js/bullet.js
+++ b/js/bullet.js
@@ -1030,7 +1030,7 @@ const b = {
},
onEnd() {
if (mod.isMutualism && this.isMutualismActive && !mod.isEnergyHealth) {
- mech.health += 0.01
+ mech.health += 0.005
if (mech.health > mech.maxHealth) mech.health = mech.maxHealth;
mech.displayHealth();
}
@@ -1111,7 +1111,7 @@ const b = {
World.add(engine.world, bullet[bIndex]); //add bullet to world
if (mod.isMutualism && mech.health > 0.02) {
- mech.health -= 0.01
+ mech.health -= 0.005
mech.displayHealth();
bullet[bIndex].isMutualismActive = true
}
diff --git a/js/engine.js b/js/engine.js
index d3cde95..bd35d71 100644
--- a/js/engine.js
+++ b/js/engine.js
@@ -108,7 +108,7 @@ function collisionChecks(event) {
return
}
mech.damage(dmg);
- if (mod.isPiezo) mech.energy += 200;
+ if (mod.isPiezo) mech.energy += 2;
if (mod.isBayesian) powerUps.ejectMod()
if (mob[k].onHit) mob[k].onHit(k);
mech.immuneCycle = mech.cycle + mod.collisionImmuneCycles; //player is immune to collision damage for 30 cycles
diff --git a/js/game.js b/js/game.js
index 99f4569..1fd5551 100644
--- a/js/game.js
+++ b/js/game.js
@@ -588,7 +588,7 @@ const game = {
if (mod.isMutualism && !mod.isEnergyHealth) {
for (let i = 0; i < bullet.length; i++) {
if (bullet[i].isMutualismActive) {
- mech.health += 0.01
+ mech.health += 0.005
if (mech.health > mech.maxHealth) mech.health = mech.maxHealth;
mech.displayHealth();
}
diff --git a/js/mods.js b/js/mods.js
index 4bd7c35..4ab8ffd 100644
--- a/js/mods.js
+++ b/js/mods.js
@@ -163,7 +163,7 @@ const mod = {
allowed() {
return mod.isEnergyLoss && mech.maxEnergy === 1 && !mod.isMissileField && !mod.isSporeField && !mod.isRewindAvoidDeath
},
- requires: "heat engine, not max energy increase, CPT, missile or spore nano-scale",
+ requires: "exothermic process, not max energy increase, CPT, missile or spore nano-scale",
effect() {
mod.isMaxEnergyMod = true;
mech.setMaxEnergy()
@@ -181,7 +181,7 @@ const mod = {
allowed() {
return mod.isEnergyLoss && mech.maxEnergy < 1.1
},
- requires: "heat engine",
+ requires: "exothermic process",
effect() {
mod.isLowEnergyDamage = true;
},
@@ -374,7 +374,7 @@ const mod = {
},
{
name: "fragmentation",
- description: "detonation or collision ejects nails
rail gun, grenades, shotgun slugs, blocks",
+ description: "detonation or collisions with mobs eject nails
blocks, rail gun, grenades, shotgun slugs",
maxCount: 9,
count: 0,
allowed() {
@@ -1113,7 +1113,7 @@ const mod = {
requires: "not mass-energy equivalence",
effect() {
mod.isPiezo = true;
- mech.energy += 200;
+ mech.energy += 2;
},
remove() {
mod.isPiezo = false;
@@ -1635,7 +1635,7 @@ const mod = {
},
{
name: "catabolism",
- description: "gain ammo when you fire while out of ammo
drains 2.3% of max health",
+ description: "gain ammo when you fire while out of ammo
drains 2% of max health",
maxCount: 1,
count: 0,
allowed() {
@@ -1643,7 +1643,7 @@ const mod = {
},
requires: "not mass-energy equivalence
not exciton-lattice",
effect: () => {
- mod.isAmmoFromHealth = 0.023;
+ mod.isAmmoFromHealth = 0.02;
},
remove() {
mod.isAmmoFromHealth = 0;
@@ -1739,13 +1739,13 @@ const mod = {
},
{
name: "many-worlds",
- description: "if you have no rerolls spawn one
after choosing a mod, field, or gun",
+ description: "after choosing a mod, field, or gun
if you have no rerolls spawn 2",
maxCount: 1,
count: 0,
allowed() {
- return powerUps.reroll.rerolls < 3 && !mod.isSuperDeterminism && !mod.isRerollHaste
+ return powerUps.reroll.rerolls === 0 && !mod.isSuperDeterminism && !mod.isRerollHaste
},
- requires: "not superdeterminism or Ψ(t) collapse
fewer than 3 rerolls",
+ requires: "not superdeterminism or Ψ(t) collapse
no rerolls",
effect: () => {
mod.manyWorlds = true;
},
@@ -2597,7 +2597,7 @@ const mod = {
},
{
name: "mutualism",
- description: "increase spore damage by 100%
spores borrow 1 health until they die",
+ description: "increase spore damage by 100%
spores borrow 0.5 health until they die",
maxCount: 1,
count: 0,
allowed() {
@@ -2995,6 +2995,40 @@ const mod = {
//************************************************** field
//************************************************** mods
//**************************************************
+ {
+ name: "bremsstrahlung radiation",
+ description: "blocking with standing wave harmonics
does damage to mobs",
+ maxCount: 9,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics"
+ },
+ requires: "standing wave harmonics",
+ effect() {
+ mod.blockDmg += 0.75 //if you change this value also update the for loop in the electricity graphics in mech.pushMass
+ },
+ remove() {
+ mod.blockDmg = 0;
+ }
+ },
+ {
+ name: "frequency resonance",
+ description: "standing wave harmonics shield is retuned
increase size and blocking efficiency by 40%",
+ maxCount: 9,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics"
+ },
+ requires: "standing wave harmonics",
+ effect() {
+ mech.fieldRange += 175 * 0.2
+ mech.fieldShieldingScale *= 0.55
+ },
+ remove() {
+ mech.fieldRange = 175;
+ mech.fieldShieldingScale = 1;
+ }
+ },
{
name: "flux pinning",
description: "blocking with perfect diamagnetism
stuns mobs for +1 second",
@@ -3043,196 +3077,91 @@ const mod = {
mod.isCrit = false;
}
},
- {
- name: "timelike world line",
- description: "time dilation doubles your relative time rate
and makes you immune to harm",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "time dilation field"
- },
- requires: "time dilation field",
- effect() {
- mod.isTimeSkip = true;
- b.setFireCD();
- },
- remove() {
- mod.isTimeSkip = false;
- b.setFireCD();
- }
- },
- {
- name: "Lorentz transformation",
- description: "permanently increase your relative time rate
move, jump, and shoot 40% faster",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "time dilation field"
- },
- requires: "time dilation field",
- effect() {
- mod.fastTime = 1.40;
- mod.fastTimeJump = 1.11;
- mech.setMovement();
- b.setFireCD();
- },
- remove() {
- mod.fastTime = 1;
- mod.fastTimeJump = 1;
- mech.setMovement();
- b.setFireCD();
- }
- },
- {
- name: "time crystals",
- description: "quadruple your default energy regeneration",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "time dilation field" && mod.energyRegen !== 0;
- },
- requires: "time dilation field",
- effect: () => {
- mod.energyRegen = 0.004;
- mech.fieldRegen = mod.energyRegen;
- },
- remove() {
- mod.energyRegen = 0.001;
- mech.fieldRegen = mod.energyRegen;
- }
- },
- {
- name: "plasma jet",
- description: "increase plasma torch's range by 27%",
- maxCount: 9,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "plasma torch"
- },
- requires: "plasma torch",
- effect() {
- mod.isPlasmaRange += 0.27;
- },
- remove() {
- mod.isPlasmaRange = 1;
- }
- },
- {
- name: "plasma-bot",
- description: "a bot uses energy to emit plasma
that damages and pushes mobs",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "plasma torch"
- },
- requires: "plasma torch",
- effect() {
- mod.plasmaBotCount++;
- b.plasmaBot();
- },
- remove() {
- mod.plasmaBotCount = 0;
- }
- },
- {
- name: "degenerate matter",
- description: "reduce harm by 40%
while negative mass field is active",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field"
- },
- requires: "negative mass field",
- effect() {
- mod.isHarmReduce = true
- },
- remove() {
- mod.isHarmReduce = false;
- // if (mech.fieldUpgrades[mech.fieldMode].name === "negative mass field") mech.setField("negative mass field") //reset harm reduction
- }
- },
- {
- name: "annihilation",
- description: "after touching mobs, they are annihilated
drains 33% of maximum energy",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field"
- },
- requires: "negative mass field",
- effect() {
- mod.isAnnihilation = true
- },
- remove() {
- mod.isAnnihilation = false;
- }
- },
- {
- name: "negative temperature",
- description: "negative mass field uses energy
to freeze each mob caught in it's effect",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field"
- },
- requires: "negative mass field",
- effect() {
- mod.isFreezeMobs = true;
- },
- remove() {
- mod.isFreezeMobs = false;
- }
- },
- {
- name: "bremsstrahlung radiation",
- description: "blocking with standing wave harmonics
does damage to mobs",
- maxCount: 9,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics"
- },
- requires: "standing wave harmonics",
- effect() {
- mod.blockDmg += 0.75 //if you change this value also update the for loop in the electricity graphics in mech.pushMass
- },
- remove() {
- mod.blockDmg = 0;
- }
- },
- {
- name: "frequency resonance",
- description: "standing wave harmonics shield is retuned
increase size and blocking efficiency by 40%",
- maxCount: 9,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics"
- },
- requires: "standing wave harmonics",
- effect() {
- mech.fieldRange += 175 * 0.2
- mech.fieldShieldingScale *= 0.55
- },
- remove() {
- mech.fieldRange = 175;
- mech.fieldShieldingScale = 1;
- }
- },
{
name: "pair production",
- description: "power ups overload your energy
to 250% of your maximum energy",
+ description: "power ups overfill your energy by 300",
maxCount: 1,
count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "nano-scale manufacturing" || mech.fieldUpgrades[mech.fieldMode].name === "pilot wave"
+ },
+ requires: "nano-scale manufacturing",
+ effect: () => {
+ mod.isMassEnergy = true // used in mech.grabPowerUp
+ mech.energy += 3
+ },
+ remove() {
+ mod.isMassEnergy = false;
+ }
+ },
+ {
+ name: "bot manufacturing",
+ description: "use nano-scale manufacturing
to build 3 random bots",
+ maxCount: 1,
+ count: 0,
+ isNonRefundable: true,
+ isCustomHide: true,
allowed() {
return mech.fieldUpgrades[mech.fieldMode].name === "nano-scale manufacturing"
},
requires: "nano-scale manufacturing",
effect: () => {
- mod.isMassEnergy = true // used in mech.grabPowerUp
- mech.energy += mech.maxEnergy * 2.5
+ mech.energy = 0.01;
+ b.randomBot()
+ b.randomBot()
+ b.randomBot()
},
- remove() {
- mod.isMassEnergy = false;
- }
+ remove() {}
+ },
+ {
+ name: "bot prototypes",
+ description: "use nano-scale manufacturing to upgrade
all bots of a random type and build 2 of that bot",
+ maxCount: 1,
+ count: 0,
+ isNonRefundable: true,
+ isCustomHide: true,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "nano-scale manufacturing" && !(mod.isNailBotUpgrade && mod.isFoamBotUpgrade && mod.isBoomBotUpgrade && mod.isLaserBotUpgrade && mod.isOrbitBotUpgrade)
+ },
+ requires: "nano-scale manufacturing",
+ effect: () => {
+ mech.energy = 0.01;
+ //fill array of available bots
+ const notUpgradedBots = []
+ if (!mod.isNailBotUpgrade) {
+ notUpgradedBots.push(() => {
+ mod.giveMod("nail-bot upgrade")
+ for (let i = 0; i < 2; i++) mod.giveMod("nail-bot")
+ })
+ }
+ if (!mod.isFoamBotUpgrade) {
+ notUpgradedBots.push(() => {
+ mod.giveMod("foam-bot upgrade")
+ for (let i = 0; i < 2; i++) mod.giveMod("foam-bot")
+ })
+ }
+ if (!mod.isBoomBotUpgrade) {
+ notUpgradedBots.push(() => {
+ mod.giveMod("boom-bot upgrade")
+ for (let i = 0; i < 2; i++) mod.giveMod("boom-bot")
+ })
+ }
+ if (!mod.isLaserBotUpgrade) {
+ notUpgradedBots.push(() => {
+ mod.giveMod("laser-bot upgrade")
+ for (let i = 0; i < 2; i++) mod.giveMod("laser-bot")
+ })
+ }
+ if (!mod.isOrbitBotUpgrade) {
+ notUpgradedBots.push(() => {
+ mod.giveMod("orbital-bot upgrade")
+ for (let i = 0; i < 2; i++) mod.giveMod("orbital-bot")
+ })
+ }
+ //choose random function from the array and run it
+ notUpgradedBots[Math.floor(Math.random() * notUpgradedBots.length)]()
+ },
+ remove() {}
},
{
name: "mycelium manufacturing",
@@ -3282,6 +3211,146 @@ const mod = {
mod.isIceField = false;
}
},
+ {
+ name: "degenerate matter",
+ description: "reduce harm by 40%
while negative mass field is active",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field"
+ },
+ requires: "negative mass field",
+ effect() {
+ mod.isHarmReduce = true
+ },
+ remove() {
+ mod.isHarmReduce = false;
+ // if (mech.fieldUpgrades[mech.fieldMode].name === "negative mass field") mech.setField("negative mass field") //reset harm reduction
+ }
+ },
+ {
+ name: "annihilation",
+ description: "after touching mobs, they are annihilated
drains 33% of maximum energy",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field" || mech.fieldUpgrades[mech.fieldMode].name === "pilot wave"
+ },
+ requires: "negative mass field",
+ effect() {
+ mod.isAnnihilation = true
+ },
+ remove() {
+ mod.isAnnihilation = false;
+ }
+ },
+ {
+ name: "negative temperature",
+ description: "negative mass field uses energy
to freeze each mob caught in it's effect",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field"
+ },
+ requires: "negative mass field",
+ effect() {
+ mod.isFreezeMobs = true;
+ },
+ remove() {
+ mod.isFreezeMobs = false;
+ }
+ },
+ {
+ name: "plasma jet",
+ description: "increase plasma torch's range by 27%",
+ maxCount: 9,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "plasma torch"
+ },
+ requires: "plasma torch",
+ effect() {
+ mod.isPlasmaRange += 0.27;
+ },
+ remove() {
+ mod.isPlasmaRange = 1;
+ }
+ },
+ {
+ name: "plasma-bot",
+ description: "a bot uses energy to emit plasma
that damages and pushes mobs",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "plasma torch"
+ },
+ requires: "plasma torch",
+ effect() {
+ mod.plasmaBotCount++;
+ b.plasmaBot();
+ },
+ remove() {
+ mod.plasmaBotCount = 0;
+ }
+ },
+ {
+ name: "timelike world line",
+ description: "time dilation doubles your relative time rate
and makes you immune to harm",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "time dilation field"
+ },
+ requires: "time dilation field",
+ effect() {
+ mod.isTimeSkip = true;
+ b.setFireCD();
+ },
+ remove() {
+ mod.isTimeSkip = false;
+ b.setFireCD();
+ }
+ },
+ {
+ name: "Lorentz transformation",
+ description: "permanently increase your relative time rate
move, jump, and shoot 40% faster",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "time dilation field" || mech.fieldUpgrades[mech.fieldMode].name === "pilot wave"
+ },
+ requires: "time dilation field",
+ effect() {
+ mod.fastTime = 1.40;
+ mod.fastTimeJump = 1.11;
+ mech.setMovement();
+ b.setFireCD();
+ },
+ remove() {
+ mod.fastTime = 1;
+ mod.fastTimeJump = 1;
+ mech.setMovement();
+ b.setFireCD();
+ }
+ },
+ {
+ name: "time crystals",
+ description: "quadruple your default energy regeneration",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return (mech.fieldUpgrades[mech.fieldMode].name === "time dilation field" || mech.fieldUpgrades[mech.fieldMode].name === "pilot wave") && mod.energyRegen !== 0;
+ },
+ requires: "time dilation field",
+ effect: () => {
+ mod.energyRegen = 0.004;
+ mech.fieldRegen = mod.energyRegen;
+ },
+ remove() {
+ mod.energyRegen = 0.001;
+ mech.fieldRegen = mod.energyRegen;
+ }
+ },
{
name: "phase decoherence",
description: "become intangible while cloaked
but, passing through mobs drains your energy",
@@ -3320,7 +3389,7 @@ const mod = {
maxCount: 1,
count: 0,
allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "metamaterial cloaking"
+ return mech.fieldUpgrades[mech.fieldMode].name === "metamaterial cloaking" || mech.fieldUpgrades[mech.fieldMode].name === "pilot wave"
},
requires: "metamaterial cloaking",
effect() {
diff --git a/js/player.js b/js/player.js
index 81d395b..909c28f 100644
--- a/js/player.js
+++ b/js/player.js
@@ -1484,7 +1484,7 @@ const mech = {
mech.energy -= 0.057;
b.iceIX(1)
} else {
- mech.energy -= 0.4;
+ mech.energy -= 0.45;
b.drone(1)
}
}
@@ -2152,7 +2152,7 @@ const mech = {
// },
{
name: "pilot wave",
- description: "use energy to push blocks with your mouse
field radius decreases out of line of sight",
+ description: "use energy to push blocks with your mouse
field radius decreases out of line of sight
allows mods that normally require other fields",
effect: () => {
game.replaceTextLog = true; //allow text over write
mech.fieldPhase = 0;
diff --git a/js/powerup.js b/js/powerup.js
index 21317de..5aac736 100644
--- a/js/powerup.js
+++ b/js/powerup.js
@@ -57,8 +57,8 @@ const powerUps = {
game.makeTextLog(`about ${Math.max(0,powerUps.mod.lastTotalChoices - powerUps.mod.banishLog.length)} estimated mods left`, 300)
}
}
- if (mod.manyWorlds && powerUps.reroll.rerolls < 1) {
- powerUps.spawn(mech.pos.x + 40 * (Math.random() - 0.5), mech.pos.y + 40 * (Math.random() - 0.5), "reroll", false);
+ if (mod.manyWorlds && powerUps.reroll.rerolls === 0) {
+ for (let i = 0; i < 2; i++) powerUps.spawn(mech.pos.x + 40 * (Math.random() - 0.5), mech.pos.y + 40 * (Math.random() - 0.5), "reroll", false);
}
document.getElementById("choose-grid").style.display = "none"
document.getElementById("choose-background").style.display = "none"
@@ -435,7 +435,7 @@ const powerUps = {
}
},
onPickUp(where) {
- if (mod.isMassEnergy && mech.energy < mech.maxEnergy * 2.5) mech.energy = mech.maxEnergy * 2.5;
+ if (mod.isMassEnergy && mech.energy < mech.maxEnergy * 2.5) mech.energy += 3;
if (mod.isMineDrop) b.mine({
x: where.x,
y: where.y
diff --git a/todo.txt b/todo.txt
index 27113b6..2c84171 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,11 +1,18 @@
******************************************************** NEXT PATCH ********************************************************
-so many bug fixes around CPT
-mod: fragments - blocks, grenades, rail gun, shotgun slugs can all eject nails on collisions, or detonation
+catabolism - 2% (was 2.3%) of max health removed
+many worlds - spawns 2 rerolls (was 1)
+pilot wave field- now has access to several mods that normally require other fields
+ this plus the fragmenting block mod are a big buff for late game pilot wave
+ let me know if it is too strong
+
+mod nano-scale: bot prototypes - upgrade a bot type and build 2 of that bot
+mod nano-scale: bot manufacturing - build 3 random bots
+ these mods don't show up in custom
******************************************************** BUGS ********************************************************
-possible bug with neutron rewind
+(not able to reproduce, might be fixed) possible bug with neutron rewind
status doesn't apply correctly for spawned neutron bombs that are stuck to a shield
also saw neutron bombs bounce off shield, for normal bullets
test this more
@@ -17,11 +24,12 @@ mod and mob are too similar
(always) is there a way to check if the player is stuck inside the map or block
trigger a short term non-collide if that occurs
-(4+ reports before potential fix) bug - crouch and worm hole? -> crouch locked in
+(8+ reports before potential fix) bug - crouch and worm hole? -> crouch locked in
+ test this on a slower computer, doesn't occur on my computer
players have extra gravity
might be from the short jump code
add in a check every 7 seconds to try and fix it
- this fix was added and it is working
+ this fix was added and it is working for some cases
maybe move the fix to once a second?
(intermittent, but almost every time) bug - capping the fps causes random slow downs, that can be fixed with pause
@@ -34,7 +42,11 @@ mod and mob are too similar
******************************************************** TODO ********************************************************
-combine fragmentation grenades, railguns fragment and apply to shotgun slug
+be able to open up custom mode in the normal game
+ might need to be rebuilt from scratch
+ while in through testing mode?
+ have a way to make limited changes as allowed by mods you pick up in game
+ disable the in custom setting flag
mod: power up magnetism - power ups drift towards player
where would this code go?
@@ -44,9 +56,6 @@ super balls start at 3, not 4
RPG might need a buff, now that it disables the other cool grenade mods
-retrocausality bomb should fire 3 grenades at once that spread out a small bit before they explode?
- this means you'd have to make grenades a method.
-
make different move methods
mod: crouch charge jump
mod: double jump
@@ -66,8 +75,6 @@ mod - move super fast, go intangible, drain energy very fast
this is like a dodge roll
mod for standing wave?, cloaking?
-spawn a few power ups on the final boss level
-
mod pilot wave: mini black hole - pull mobs and blocks in with more force
also from farther away
also do damage?
@@ -79,8 +86,6 @@ bullet mechanic - a bullet that swims through the air
rotate the velocity vector towards the normalized facing vector
use the cross product > 0 to determine which direction to rotate the velocity
-lower recoil on nail shot gun?
-
in custom make a top bar that is fixed
use media rules to make the layout look nice