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