diff --git a/js/bullets.js b/js/bullets.js index e5043f1..20d01f3 100644 --- a/js/bullets.js +++ b/js/bullets.js @@ -35,6 +35,7 @@ const b = { isModPiezo: null, isModFastDrones: null, isModStomp: null, + modSuperBallNumber: null, setModDefaults() { b.modCount = 0; b.modFireRate = 1; @@ -68,6 +69,7 @@ const b = { b.isModPiezo = false; b.isModStomp = false; b.modCollisionImmuneCycles = 30; + b.modSuperBallNumber = 4; mech.Fx = 0.015; mech.jumpForce = 0.38; mech.maxHealth = 1; @@ -173,7 +175,7 @@ const b = { { name: "auto-loading heuristics", description: "your delay after firing is +14% shorter", - maxCount: 3, + maxCount: 9, count: 0, allowed() { return true @@ -289,20 +291,20 @@ const b = { { name: "squirrel-cage rotor", description: "jump higher and move faster
reduced harm from falling ", - maxCount: 1, + maxCount: 9, count: 0, allowed() { return true }, effect() { // good with melee builds, content skipping builds - b.modSquirrelFx = 1.2; + b.modSquirrelFx += 0.2; mech.Fx = 0.015 * b.modSquirrelFx; - mech.jumpForce = 0.38 * 1.1; + mech.jumpForce += 0.038; } }, { - name: "ground stomp", - description: "hard landings release spores", + name: "Calvatia", + description: "hard landings disrupt spores from the ground", maxCount: 1, count: 0, allowed() { @@ -314,7 +316,7 @@ const b = { }, { name: "Pauli exclusion", - description: `unable to collide with enemies for +120 seconds
activates after being harmed from a collision`, + description: `unable to collide with enemies for +2 seconds
activates after being harmed from a collision`, maxCount: 9, count: 0, allowed() { @@ -490,6 +492,19 @@ const b = { b.isModFastDrones = true } }, + { + name: "super duper balls", + description: "your super balls fire +1 extra ball", + maxCount: 9, + count: 0, + allowed() { + return b.haveGunCheck("super balls") + }, + effect() { + b.modSuperBallNumber++ + } + }, + ], giveMod(index = 'random') { if (index === 'random') { @@ -907,7 +922,7 @@ const b = { angle: Math.random() * 2 * Math.PI, friction: 0, frictionAir: 0.025, - dmg: 2.5, //damage done in addition to the damage from momentum + dmg: 2.2, //damage done in addition to the damage from momentum classType: "bullet", collisionFilter: { category: cat.bullet, @@ -1340,17 +1355,18 @@ const b = { name: "super balls", //2 description: "fire five balls in a wide arc
balls bounce with no momentum loss", ammo: 0, - ammoPack: 6, + ammoPack: 8, have: false, + num: 5, isStarterGun: true, fire() { mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 30 : 20) * b.modFireRate); // cool down b.muzzleFlash(20); // mobs.alert(450); - const SPEED = mech.crouch ? 45 : 35 + const SPEED = mech.crouch ? 40 : 30 const SPREAD = mech.crouch ? 0.04 : 0.15 - let dir = mech.angle - SPREAD * 2; - for (let i = 0; i < 5; i++) { + let dir = mech.angle - SPREAD * (b.modSuperBallNumber - 1) / 2; + for (let i = 0; i < b.modSuperBallNumber; i++) { const me = bullet.length; bullet[me] = Bodies.polygon(mech.pos.x + 30 * Math.cos(mech.angle), mech.pos.y + 30 * Math.sin(mech.angle), 10, 7 * b.modBulletSize, b.fireAttributes(dir, false)); World.add(engine.world, bullet[me]); //add bullet to world @@ -1359,7 +1375,7 @@ const b = { y: SPEED * Math.sin(dir) }); // Matter.Body.setDensity(bullet[me], 0.0001); - bullet[me].endCycle = game.cycle + Math.floor(360 * b.isModBulletsLastLonger); + bullet[me].endCycle = game.cycle + Math.floor((300 + 60 * Math.random()) * b.isModBulletsLastLonger); bullet[me].dmg = 0; bullet[me].minDmgSpeed = 0; bullet[me].restitution = 0.99; @@ -1742,7 +1758,7 @@ const b = { name: "mine", //9 description: "toss a proximity mine that sticks to walls
fires nails at enemies within range", ammo: 0, - ammoPack: 3, + ammoPack: (game.difficultyMode > 3) ? 2 : 3, have: false, isStarterGun: false, fire() { @@ -1761,7 +1777,7 @@ const b = { name: "spores", //10 description: "fire orbs that discharge spores
spores seek out enemies", ammo: 0, - ammoPack: 4, + ammoPack: (game.difficultyMode > 3) ? 3 : 4, have: false, isStarterGun: false, fire() { @@ -1806,7 +1822,7 @@ const b = { name: "drones", //11 description: "deploy drones that crash into enemies
collisions reduce drone cycles by 1 second", ammo: 0, - ammoPack: 10, + ammoPack: (game.difficultyMode > 3) ? 8 : 10, have: false, isStarterGun: true, fire() { diff --git a/js/index.js b/js/index.js index 285cdfc..e30340e 100644 --- a/js/index.js +++ b/js/index.js @@ -2,12 +2,16 @@ /* TODO: ******************************************* ***************************************************** +phase decoherence energy drain is proportional to player speed + +add recursive mod counts to pause screen + +key required to open the exit to some levels + must hold key like a block + could the key be any block? + css transition for pause menu -mod: bullets neutralize forward mob velocity on hit - -boss: bacteria boss, duplicates when player is in range - mod: remove all guns from the game, but double health, shields, and damage mod: like Born rule, but for guns @@ -18,13 +22,6 @@ field that pushes everything back, and can destroy smaller blocks mod: make player invisible when... use the flag from phase field -mod: ground stomp on enterLand() - immunity to falling damage - triggers when you press down - maybe rewrite the function to look for down key - with added down speed - spawn spores - field: a larger radius that attracted enemies still deflected them near the robot convert the health of mobs into energy when they are being attracted diff --git a/js/level.js b/js/level.js index 096671c..2696a64 100644 --- a/js/level.js +++ b/js/level.js @@ -14,10 +14,13 @@ const level = { start() { if (level.levelsCleared === 0) { // level.difficultyIncrease(15) - // b.giveGuns("minigun") + b.giveGuns("super balls") // mech.setField("phase decoherence field") - b.giveMod("squirrel-cage rotor"); - b.giveMod("ground stomp"); + // b.giveMod("squirrel-cage rotor"); + b.giveMod("super duper balls"); + b.giveMod("super duper balls"); + b.giveMod("super duper balls"); + // level.intro(); //starting level level.testingMap(); @@ -128,7 +131,7 @@ const level = { // powerUps.spawn(450, -400, "mod", false); // spawn.bodyRect(-45, -100, 40, 50); // spawn.bomberBoss(800, -450); - // spawn.cellBoss(400, -750); + spawn.cellBoss(400, -750); // spawn.randomLevelBoss(400, -750) diff --git a/js/mobs.js b/js/mobs.js index ad42cf9..cb492e4 100644 --- a/js/mobs.js +++ b/js/mobs.js @@ -357,7 +357,7 @@ const mobs = { if (!mech.isStealth) vertexCollision(this.position, look, [player]); // hitting player if (best.who === player) { - dmg = 0.002 * game.dmgScale; + dmg = 0.0015 * game.dmgScale; mech.damage(dmg); //draw damage ctx.fillStyle = "#f00"; diff --git a/js/powerups.js b/js/powerups.js index d6e1fd8..6962fd7 100644 --- a/js/powerups.js +++ b/js/powerups.js @@ -212,9 +212,14 @@ const powerUps = { giveRandomAmmo() { const ammoTarget = Math.floor(Math.random() * (b.guns.length)); const ammo = Math.ceil(b.guns[ammoTarget].ammoPack * 6); - b.guns[ammoTarget].ammo += ammo; - game.updateGunHUD(); - game.makeTextLog("+" + ammo + " ammo for " + b.guns[ammoTarget].name + "", 300); + if (ammo === Infinity) { + b.guns[ammoTarget].ammo += ammo; + game.makeTextLog("+energy", 300); + } else { + b.guns[ammoTarget].ammo += ammo; + game.updateGunHUD(); + game.makeTextLog("+" + ammo + " ammo for " + b.guns[ammoTarget].name + "", 300); + } }, spawnRandomPowerUp(x, y) { //mostly used after mob dies if (Math.random() * Math.random() - 0.3 > Math.sqrt(mech.health) || Math.random() < 0.035) { //spawn heal chance is higher at low health