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