diff --git a/js/bullets.js b/js/bullets.js
index fbccb22..f291555 100644
--- a/js/bullets.js
+++ b/js/bullets.js
@@ -185,7 +185,22 @@ const b = {
b.isModImmuneExplosion = false;
}
},
-
+ {
+ name: "thermal runaway",
+ description: "mobs explode when they die",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return b.isModImmuneExplosion
+ },
+ requires: "electric reactive armour",
+ effect: () => {
+ b.isModExplodeMob = true;
+ },
+ remove() {
+ b.isModExplodeMob = false;
+ }
+ },
{
name: "auto-loading heuristics",
description: "your delay after firing is +14% shorter",
@@ -323,22 +338,6 @@ const b = {
b.modMobDieAtHealth = 0.05;
}
},
- {
- name: "thermal runaway",
- description: "mobs explode when they die",
- maxCount: 1,
- count: 0,
- allowed() {
- return b.modMobDieAtHealth > 0.05
- },
- requires: "reaction inhibitor",
- effect: () => {
- b.isModExplodeMob = true;
- },
- remove() {
- b.isModExplodeMob = false;
- }
- },
{
name: "waste energy recovery",
description: "regen 7% of max energy every second
active for 5 seconds after a mob dies",
@@ -1002,7 +1001,7 @@ const b = {
},
{
name: "perfect diamagnetism",
- description: "when blocking with the basic field emitter
gain energy instead losing it",
+ description: "when blocking with the starting field emitter
gain energy instead losing it",
maxCount: 1,
count: 0,
allowed() {
@@ -1051,19 +1050,21 @@ const b = {
}
},
{
- name: "field superposition",
- description: "increase field radii by 40%",
- maxCount: 1,
+ name: "frequency resonance",
+ description: "standing wave harmonics shield is retuned
increase size and blocking efficiency by 30%",
+ maxCount: 9,
count: 0,
allowed() {
return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics"
},
requires: "standing wave harmonics",
effect() {
- mech.fieldRange = 175 * 1.4
+ mech.fieldRange += 175 * 0.2
+ mech.fieldShieldingScale *= 0.7
},
remove() {
mech.fieldRange = 175;
+ mech.fieldShieldingScale = 1;
}
},
{
@@ -1329,7 +1330,7 @@ const b = {
if (dist < radius) {
if (b.isModImmuneExplosion) {
- const drain = Math.max(radius * 0.0006, 0.2)
+ const drain = Math.max(radius * 0.0004, 0.2)
if (mech.energy > drain) {
mech.energy -= drain
} else {
@@ -2091,7 +2092,7 @@ const b = {
name: "super balls", //2
description: "fire four balls in a wide arc
balls bounce with no momentum loss",
ammo: 0,
- ammoPack: 9,
+ ammoPack: 10,
have: false,
num: 5,
isStarterGun: true,
@@ -2105,7 +2106,7 @@ const b = {
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));
+ bullet[me] = Bodies.polygon(mech.pos.x + 30 * Math.cos(mech.angle), mech.pos.y + 30 * Math.sin(mech.angle), 12, 7 * b.modBulletSize, b.fireAttributes(dir, false));
World.add(engine.world, bullet[me]); //add bullet to world
Matter.Body.setVelocity(bullet[me], {
x: SPEED * Math.cos(dir),
@@ -2182,7 +2183,7 @@ const b = {
const me = bullet.length;
const dir = mech.angle
const SPEED = 10
- const wiggleMag = mech.crouch ? 4 : 11
+ const wiggleMag = mech.crouch ? 3 : 10
bullet[me] = Bodies.polygon(mech.pos.x + 25 * Math.cos(dir), mech.pos.y + 25 * Math.sin(dir), 7, 5 * b.modBulletSize, {
angle: dir,
cycle: 0,
diff --git a/js/level.js b/js/level.js
index 9764606..e16b253 100644
--- a/js/level.js
+++ b/js/level.js
@@ -15,7 +15,7 @@ const level = {
if (level.levelsCleared === 0) {
// level.difficultyIncrease(9)
// b.giveGuns("wave beam")
- // mech.setField("negative mass field")
+ // mech.setField("plasma torch")
// b.giveMod("wave phase velocity");
// b.giveMod("reflective cavity");
diff --git a/js/player.js b/js/player.js
index 9c9e6af..d93c920 100644
--- a/js/player.js
+++ b/js/player.js
@@ -664,6 +664,7 @@ const mech = {
fieldEnergyMax: 1, //can be increased by a mod
holdingTarget: null,
fieldShieldingScale: 1,
+ fieldRange: 175,
// these values are set on reset by setHoldDefaults()
energy: 0,
fieldRegen: 0,
@@ -672,7 +673,6 @@ const mech = {
holdingMassScale: 0,
throwChargeRate: 0,
throwChargeMax: 0,
- fieldRange: 175,
fieldArc: 0,
fieldThreshold: 0,
calculateFieldThreshold() {
@@ -681,6 +681,7 @@ const mech = {
setHoldDefaults() {
if (mech.energy < mech.fieldEnergyMax) mech.energy = mech.fieldEnergyMax;
mech.fieldRegen = 0.001;
+ mech.fieldShieldingScale = 1;
mech.fieldFire = false;
mech.fieldCDcycle = 0;
mech.isStealth = false;
@@ -1148,7 +1149,6 @@ const mech = {
isEasyToAim: true,
effect: () => {
mech.fieldFire = true;
- // mech.fieldRange = 130
mech.isBodiesAsleep = false;
mech.hold = function () {
if (mech.isHolding) {
@@ -1346,7 +1346,8 @@ const mech = {
let y = mech.pos.y + 20 * Dy;
ctx.beginPath();
ctx.moveTo(x, y);
- const step = range / 10
+ const step = Vector.magnitude(Vector.sub(path[0], path[1])) / 10
+
for (let i = 0; i < 8; i++) {
x += step * (Dx + 1.5 * (Math.random() - 0.5))
y += step * (Dy + 1.5 * (Math.random() - 0.5))
@@ -1538,13 +1539,12 @@ const mech = {
if (mech.energy > mech.fieldEnergyMax - 0.02 && mech.fieldCDcycle < mech.cycle) {
mech.fieldCDcycle = mech.cycle + 17; // set cool down to prevent +energy from making huge numbers of drones
if (b.isModSporeField) {
- const len = Math.floor(7 + 3 * Math.random())
- mech.energy -= len * 0.1;
+ const len = Math.floor(6 + 3 * Math.random())
+ mech.energy -= len * 0.08;
for (let i = 0; i < len; i++) {
b.spore(player)
}
- }
- if (b.isModMissileField) {
+ } else if (b.isModMissileField) {
mech.energy -= 0.55;
b.missile({
x: mech.pos.x + 40 * Math.cos(mech.angle),
@@ -1582,7 +1582,6 @@ const mech = {
description: "become intangible and invisible
drains energy as you move",
isEasyToAim: true,
effect: () => {
- // mech.fieldRange = 230
mech.hold = function () {
mech.isStealth = false //isStealth disables most uses of foundPlayer()
player.collisionFilter.mask = cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield //normal collisions
@@ -1630,7 +1629,6 @@ const mech = {
// mech.fieldText();
// mech.setHoldDefaults();
// mech.hackProgress = 0;
- // // mech.fieldRange = 230
// mech.hold = function () {
// mech.isStealth = false //isStealth is checked in mob foundPlayer()
// player.collisionFilter.mask = 0x010011
diff --git a/todo.txt b/todo.txt
index 2aea42b..1d8143c 100644
--- a/todo.txt
+++ b/todo.txt
@@ -3,11 +3,13 @@
mobs - add in a function to the main loops that does injected code for each mob
each mob would get an object with a game.cycle for ending and a method to run each cycle until the end is met
this could be a DOT, graphics, slow
+ mod - flechettes mod for poison damage
mod - get your next recursive mod 3 times
are players aware of what a recursive mod is?
too much of a nova drift rip off?
+mod - vacuum bomb needs a mod
mod - grenade needs a mod
mod - time dilation field needs a mod
mod - phase decoherence field needs a mod
@@ -21,12 +23,6 @@ mod - rocket propelled grenades
grenades do +20% damage and move in an accelerating path
maybe explode on collision with map?
-mod - negative mass field does damage to mobs in zone
-
-mod - flechettes mod for poison damage
- other flechettes multi-shot is disabled
-mod - flechettes are guided towards targets
-
gun - buff vacuum bomb
its weak late game
can't spam it faster