harmonic mod balance

This commit is contained in:
landgreen
2020-03-03 06:01:44 -08:00
parent 596739cbd1
commit c642cfcac2
4 changed files with 37 additions and 42 deletions

View File

@@ -185,7 +185,22 @@ const b = {
b.isModImmuneExplosion = false; b.isModImmuneExplosion = false;
} }
}, },
{
name: "thermal runaway",
description: "mobs <strong class='color-e'>explode</strong> when they <strong>die</strong>",
maxCount: 1,
count: 0,
allowed() {
return b.isModImmuneExplosion
},
requires: "electric reactive armour",
effect: () => {
b.isModExplodeMob = true;
},
remove() {
b.isModExplodeMob = false;
}
},
{ {
name: "auto-loading heuristics", name: "auto-loading heuristics",
description: "your <strong>delay</strong> after firing is <strong>+14% shorter</strong>", description: "your <strong>delay</strong> after firing is <strong>+14% shorter</strong>",
@@ -323,22 +338,6 @@ const b = {
b.modMobDieAtHealth = 0.05; b.modMobDieAtHealth = 0.05;
} }
}, },
{
name: "thermal runaway",
description: "mobs <strong class='color-e'>explode</strong> when they <strong>die</strong>",
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", name: "waste energy recovery",
description: "regen <strong>7%</strong> of max <strong class='color-f'>energy</strong> every second<br>active for <strong>5 seconds</strong> after a mob <strong>dies</strong>", description: "regen <strong>7%</strong> of max <strong class='color-f'>energy</strong> every second<br>active for <strong>5 seconds</strong> after a mob <strong>dies</strong>",
@@ -1002,7 +1001,7 @@ const b = {
}, },
{ {
name: "perfect diamagnetism", name: "perfect diamagnetism",
description: "when <strong>blocking</strong> with the basic <strong>field emitter</strong><br>gain <strong class='color-f'>energy</strong> instead losing it", description: "when <strong>blocking</strong> with the starting <strong>field emitter</strong><br>gain <strong class='color-f'>energy</strong> instead losing it",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
@@ -1051,19 +1050,21 @@ const b = {
} }
}, },
{ {
name: "field superposition", name: "frequency resonance",
description: "increase <strong>field radii</strong> by <strong>40%</strong>", description: "<strong>standing wave harmonics</strong> shield is retuned<br>increase <strong>size</strong> and <strong>blocking</strong> efficiency by <strong>30%</strong>",
maxCount: 1, maxCount: 9,
count: 0, count: 0,
allowed() { allowed() {
return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics" return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics"
}, },
requires: "standing wave harmonics", requires: "standing wave harmonics",
effect() { effect() {
mech.fieldRange = 175 * 1.4 mech.fieldRange += 175 * 0.2
mech.fieldShieldingScale *= 0.7
}, },
remove() { remove() {
mech.fieldRange = 175; mech.fieldRange = 175;
mech.fieldShieldingScale = 1;
} }
}, },
{ {
@@ -1329,7 +1330,7 @@ const b = {
if (dist < radius) { if (dist < radius) {
if (b.isModImmuneExplosion) { 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) { if (mech.energy > drain) {
mech.energy -= drain mech.energy -= drain
} else { } else {
@@ -2091,7 +2092,7 @@ const b = {
name: "super balls", //2 name: "super balls", //2
description: "fire <strong>four</strong> balls in a wide arc<br>balls <strong>bounce</strong> with no momentum loss", description: "fire <strong>four</strong> balls in a wide arc<br>balls <strong>bounce</strong> with no momentum loss",
ammo: 0, ammo: 0,
ammoPack: 9, ammoPack: 10,
have: false, have: false,
num: 5, num: 5,
isStarterGun: true, isStarterGun: true,
@@ -2105,7 +2106,7 @@ const b = {
let dir = mech.angle - SPREAD * (b.modSuperBallNumber - 1) / 2; let dir = mech.angle - SPREAD * (b.modSuperBallNumber - 1) / 2;
for (let i = 0; i < b.modSuperBallNumber; i++) { for (let i = 0; i < b.modSuperBallNumber; i++) {
const me = bullet.length; 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 World.add(engine.world, bullet[me]); //add bullet to world
Matter.Body.setVelocity(bullet[me], { Matter.Body.setVelocity(bullet[me], {
x: SPEED * Math.cos(dir), x: SPEED * Math.cos(dir),
@@ -2182,7 +2183,7 @@ const b = {
const me = bullet.length; const me = bullet.length;
const dir = mech.angle const dir = mech.angle
const SPEED = 10 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, { bullet[me] = Bodies.polygon(mech.pos.x + 25 * Math.cos(dir), mech.pos.y + 25 * Math.sin(dir), 7, 5 * b.modBulletSize, {
angle: dir, angle: dir,
cycle: 0, cycle: 0,

View File

@@ -15,7 +15,7 @@ const level = {
if (level.levelsCleared === 0) { if (level.levelsCleared === 0) {
// level.difficultyIncrease(9) // level.difficultyIncrease(9)
// b.giveGuns("wave beam") // b.giveGuns("wave beam")
// mech.setField("negative mass field") // mech.setField("plasma torch")
// b.giveMod("wave phase velocity"); // b.giveMod("wave phase velocity");
// b.giveMod("reflective cavity"); // b.giveMod("reflective cavity");

View File

@@ -664,6 +664,7 @@ const mech = {
fieldEnergyMax: 1, //can be increased by a mod fieldEnergyMax: 1, //can be increased by a mod
holdingTarget: null, holdingTarget: null,
fieldShieldingScale: 1, fieldShieldingScale: 1,
fieldRange: 175,
// these values are set on reset by setHoldDefaults() // these values are set on reset by setHoldDefaults()
energy: 0, energy: 0,
fieldRegen: 0, fieldRegen: 0,
@@ -672,7 +673,6 @@ const mech = {
holdingMassScale: 0, holdingMassScale: 0,
throwChargeRate: 0, throwChargeRate: 0,
throwChargeMax: 0, throwChargeMax: 0,
fieldRange: 175,
fieldArc: 0, fieldArc: 0,
fieldThreshold: 0, fieldThreshold: 0,
calculateFieldThreshold() { calculateFieldThreshold() {
@@ -681,6 +681,7 @@ const mech = {
setHoldDefaults() { setHoldDefaults() {
if (mech.energy < mech.fieldEnergyMax) mech.energy = mech.fieldEnergyMax; if (mech.energy < mech.fieldEnergyMax) mech.energy = mech.fieldEnergyMax;
mech.fieldRegen = 0.001; mech.fieldRegen = 0.001;
mech.fieldShieldingScale = 1;
mech.fieldFire = false; mech.fieldFire = false;
mech.fieldCDcycle = 0; mech.fieldCDcycle = 0;
mech.isStealth = false; mech.isStealth = false;
@@ -1148,7 +1149,6 @@ const mech = {
isEasyToAim: true, isEasyToAim: true,
effect: () => { effect: () => {
mech.fieldFire = true; mech.fieldFire = true;
// mech.fieldRange = 130
mech.isBodiesAsleep = false; mech.isBodiesAsleep = false;
mech.hold = function () { mech.hold = function () {
if (mech.isHolding) { if (mech.isHolding) {
@@ -1346,7 +1346,8 @@ const mech = {
let y = mech.pos.y + 20 * Dy; let y = mech.pos.y + 20 * Dy;
ctx.beginPath(); ctx.beginPath();
ctx.moveTo(x, y); 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++) { for (let i = 0; i < 8; i++) {
x += step * (Dx + 1.5 * (Math.random() - 0.5)) x += step * (Dx + 1.5 * (Math.random() - 0.5))
y += step * (Dy + 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) { 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 mech.fieldCDcycle = mech.cycle + 17; // set cool down to prevent +energy from making huge numbers of drones
if (b.isModSporeField) { if (b.isModSporeField) {
const len = Math.floor(7 + 3 * Math.random()) const len = Math.floor(6 + 3 * Math.random())
mech.energy -= len * 0.1; mech.energy -= len * 0.08;
for (let i = 0; i < len; i++) { for (let i = 0; i < len; i++) {
b.spore(player) b.spore(player)
} }
} } else if (b.isModMissileField) {
if (b.isModMissileField) {
mech.energy -= 0.55; mech.energy -= 0.55;
b.missile({ b.missile({
x: mech.pos.x + 40 * Math.cos(mech.angle), x: mech.pos.x + 40 * Math.cos(mech.angle),
@@ -1582,7 +1582,6 @@ const mech = {
description: "become <strong>intangible</strong> and <strong>invisible</strong><br>drains <strong class='color-f'>energy</strong> as you move", description: "become <strong>intangible</strong> and <strong>invisible</strong><br>drains <strong class='color-f'>energy</strong> as you move",
isEasyToAim: true, isEasyToAim: true,
effect: () => { effect: () => {
// mech.fieldRange = 230
mech.hold = function () { mech.hold = function () {
mech.isStealth = false //isStealth disables most uses of foundPlayer() mech.isStealth = false //isStealth disables most uses of foundPlayer()
player.collisionFilter.mask = cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield //normal collisions player.collisionFilter.mask = cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield //normal collisions
@@ -1630,7 +1629,6 @@ const mech = {
// mech.fieldText(); // mech.fieldText();
// mech.setHoldDefaults(); // mech.setHoldDefaults();
// mech.hackProgress = 0; // mech.hackProgress = 0;
// // mech.fieldRange = 230
// mech.hold = function () { // mech.hold = function () {
// mech.isStealth = false //isStealth is checked in mob foundPlayer() // mech.isStealth = false //isStealth is checked in mob foundPlayer()
// player.collisionFilter.mask = 0x010011 // player.collisionFilter.mask = 0x010011

View File

@@ -3,11 +3,13 @@
mobs - add in a function to the main loops that does injected code for each mob 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 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 this could be a DOT, graphics, slow
mod - flechettes mod for poison damage
mod - get your next recursive mod 3 times mod - get your next recursive mod 3 times
are players aware of what a recursive mod is? are players aware of what a recursive mod is?
too much of a nova drift rip off? too much of a nova drift rip off?
mod - vacuum bomb needs a mod
mod - grenade needs a mod mod - grenade needs a mod
mod - time dilation field needs a mod mod - time dilation field needs a mod
mod - phase decoherence 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 grenades do +20% damage and move in an accelerating path
maybe explode on collision with map? 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 gun - buff vacuum bomb
its weak late game its weak late game
can't spam it faster can't spam it faster