harmonic mod balance
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|
||||||
|
|||||||
16
js/player.js
16
js/player.js
@@ -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
|
||||||
|
|||||||
8
todo.txt
8
todo.txt
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user