WIMPs for wormhole

tech: WIMPs now requires wormhole
  gives 3-9 research now (was 2-3)

tech: eddy current brake - is 15% larger and caps mob speeds at 20% slower

bug fixes
This commit is contained in:
landgreen
2021-06-13 18:45:53 -07:00
parent 36d44c2569
commit a285375e2b
7 changed files with 78 additions and 99 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -3308,7 +3308,7 @@ const b = {
if (tech.isNailRadiation) { if (tech.isNailRadiation) {
mobs.statusDoT(who, tech.isFastRadiation ? 12 : 3, tech.isSlowRadiation ? 240 : (tech.isFastRadiation ? 30 : 120)) // one tick every 30 cycles mobs.statusDoT(who, tech.isFastRadiation ? 12 : 3, tech.isSlowRadiation ? 240 : (tech.isFastRadiation ? 30 : 120)) // one tick every 30 cycles
} else { } else {
let dmg = b.dmgScale * 4.5 let dmg = b.dmgScale * 5
if (tech.isCrit && who.isStunned) dmg *= 4 if (tech.isCrit && who.isStunned) dmg *= 4
who.damage(dmg, tech.isNeedleShieldPierce); who.damage(dmg, tech.isNeedleShieldPierce);
simulation.drawList.push({ //add dmg to draw queue simulation.drawList.push({ //add dmg to draw queue

View File

@@ -5956,7 +5956,7 @@ const level = {
//top right //top right
spawn.randomGroup(2000, -5700, 0.6); spawn.randomGroup(2000, -5700, 0.6);
powerUps.addRerollToLevel() //needs to run after mobs are spawned powerUps.addResearchToLevel() //needs to run after mobs are spawned
let bosses = ["shooterBoss", "launcherBoss", "laserTargetingBoss", "streamBoss", "pulsarBoss", "spawnerBossCulture", "laserBoss"]; let bosses = ["shooterBoss", "launcherBoss", "laserTargetingBoss", "streamBoss", "pulsarBoss", "spawnerBossCulture", "laserBoss"];
let abc = Math.random(); let abc = Math.random();
if (simulation.difficulty > 3) { if (simulation.difficulty > 3) {

View File

@@ -308,10 +308,9 @@ const m = {
//remove all tech and count current tech total //remove all tech and count current tech total
let totalTech = 0; let totalTech = 0;
for (let i = 0, len = tech.tech.length; i < len; i++) { for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].isJunk) tech.tech[i].frequency = 0
if (tech.tech[i].count > 0 && !tech.tech[i].isLore) { if (tech.tech[i].count > 0 && !tech.tech[i].isLore) {
if (tech.tech[i].isJunk) { if (tech.tech[i].frequencyDefault) {
tech.tech[i].frequency = 0
} else if (tech.tech[i].frequencyDefault) {
tech.tech[i].frequency = tech.tech[i].frequencyDefault tech.tech[i].frequency = tech.tech[i].frequencyDefault
} else { } else {
tech.tech[i].frequency = 1 tech.tech[i].frequency = 1
@@ -1506,12 +1505,12 @@ const m = {
}, },
{ {
name: "standing wave harmonics", name: "standing wave harmonics",
description: "<strong>3</strong> oscillating <strong>shields</strong> are permanently active<br><strong>deflecting</strong> drains <strong class='color-f'>energy</strong> with no <strong>cool down</strong><br><strong>deflecting</strong> has <strong>75%</strong> less <strong>recoil</strong>", //<strong class='color-harm'>harm</strong> and description: "<strong>3</strong> oscillating <strong>shields</strong> are permanently active<br><strong>deflecting</strong> drains <strong class='color-f'>energy</strong> with no <strong>cool down</strong><br><strong>deflecting</strong> has <strong>50%</strong> less <strong>recoil</strong>", //<strong class='color-harm'>harm</strong> and
effect: () => { effect: () => {
// m.fieldHarmReduction = 0.80; // m.fieldHarmReduction = 0.80;
m.fieldBlockCD = 0; m.fieldBlockCD = 0;
// m.fieldHarmReduction = 0.75; // m.fieldHarmReduction = 0.75;
m.blockingRecoil = 1 //4 is normal m.blockingRecoil = 2 //4 is normal
m.fieldRange = 175 m.fieldRange = 175
m.fieldShieldingScale = Math.pow(0.5, (tech.harmonics - 3)) m.fieldShieldingScale = Math.pow(0.5, (tech.harmonics - 3))
m.harmonicRadius = 1 //for smoothing function when player holds mouse (for harmonicAtomic) m.harmonicRadius = 1 //for smoothing function when player holds mouse (for harmonicAtomic)
@@ -1548,7 +1547,11 @@ const m = {
} }
m.pushMobs360(radius); m.pushMobs360(radius);
} }
if (tech.harmonics === 2) {
m.harmonicShield = m.harmonic3Phase m.harmonicShield = m.harmonic3Phase
} else {
m.harmonicShield = m.harmonicAtomic
}
m.hold = function() { m.hold = function() {
if (m.isHolding) { if (m.isHolding) {
m.drawHold(m.holdingTarget); m.drawHold(m.holdingTarget);
@@ -1633,11 +1636,11 @@ const m = {
m.drawFieldMeter() m.drawFieldMeter()
if (tech.isPerfectBrake) { //cap mob speed around player if (tech.isPerfectBrake) { //cap mob speed around player
const range = 160 + 140 * wave + 150 * m.energy const range = 160 + 140 * wave + 200 * m.energy
for (let i = 0; i < mob.length; i++) { for (let i = 0; i < mob.length; i++) {
const distance = Vector.magnitude(Vector.sub(m.pos, mob[i].position)) const distance = Vector.magnitude(Vector.sub(m.pos, mob[i].position))
if (distance < range) { if (distance < range) {
const cap = mob[i].isShielded ? 8.5 : 4.5 const cap = mob[i].isShielded ? 8 : 4
if (mob[i].speed > cap && Vector.dot(mob[i].velocity, Vector.sub(m.pos, mob[i].position)) > 0) { // if velocity is directed towards player if (mob[i].speed > cap && Vector.dot(mob[i].velocity, Vector.sub(m.pos, mob[i].position)) > 0) { // if velocity is directed towards player
Matter.Body.setVelocity(mob[i], Vector.mult(Vector.normalise(mob[i].velocity), cap)); //set velocity to cap, but keep the direction Matter.Body.setVelocity(mob[i], Vector.mult(Vector.normalise(mob[i].velocity), cap)); //set velocity to cap, but keep the direction
} }

View File

@@ -1194,6 +1194,7 @@ const spawn = {
//teleport everything to center //teleport everything to center
function toMe(who, where, range) { function toMe(who, where, range) {
for (let i = 0, len = who.length; i < len; i++) { for (let i = 0, len = who.length; i < len; i++) {
if (!who[i].isNotHoldable) {
const SUB = Vector.sub(who[i].position, where) const SUB = Vector.sub(who[i].position, where)
const DISTANCE = Vector.magnitude(SUB) const DISTANCE = Vector.magnitude(SUB)
if (DISTANCE < range) { if (DISTANCE < range) {
@@ -1201,6 +1202,7 @@ const spawn = {
} }
} }
} }
}
toMe(body, this.position, this.eventHorizon) toMe(body, this.position, this.eventHorizon)
toMe(mob, this.position, this.eventHorizon) toMe(mob, this.position, this.eventHorizon)
// toMe(bullet, this.position, this.eventHorizon) // toMe(bullet, this.position, this.eventHorizon)

View File

@@ -165,7 +165,7 @@
if (tech.isLowEnergyDamage) dmg *= 1 + Math.max(0, 1 - m.energy) * 0.5 if (tech.isLowEnergyDamage) dmg *= 1 + Math.max(0, 1 - m.energy) * 0.5
if (tech.isMaxEnergyTech) dmg *= 1.5 if (tech.isMaxEnergyTech) dmg *= 1.5
if (tech.isEnergyNoAmmo) dmg *= 1.6 if (tech.isEnergyNoAmmo) dmg *= 1.6
if (tech.isDamageForGuns) dmg *= 1 + 0.1 * b.inventory.length if (tech.isDamageForGuns) dmg *= 1 + 0.12 * b.inventory.length
if (tech.isLowHealthDmg) dmg *= 1 + 0.5 * Math.max(0, 1 - m.health) if (tech.isLowHealthDmg) dmg *= 1 + 0.5 * Math.max(0, 1 - m.health)
if (tech.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3; if (tech.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3;
if (tech.isEnergyLoss) dmg *= 1.55; if (tech.isEnergyLoss) dmg *= 1.55;
@@ -250,7 +250,7 @@
}, },
{ {
name: "arsenal", name: "arsenal",
description: "increase <strong class='color-d'>damage</strong> by <strong>10%</strong><br>for each <strong class='color-g'>gun</strong> in your inventory", description: "increase <strong class='color-d'>damage</strong> by <strong>12%</strong><br>for each <strong class='color-g'>gun</strong> in your inventory",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 2, frequency: 2,
@@ -2572,7 +2572,7 @@
}, },
{ {
name: "Ψ(t) collapse", name: "Ψ(t) collapse",
description: "enter an <strong class='alt'>alternate reality</strong> after you <strong class='color-r'>research</strong><br>spawn <strong>15</strong> <strong class='color-r'>research</strong>", description: "enter an <strong class='alt'>alternate reality</strong> after you <strong class='color-r'>research</strong><br>spawn <strong>16</strong> <strong class='color-r'>research</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 1, frequency: 1,
@@ -2583,7 +2583,7 @@
requires: "not quantum immortality, many-worlds, non-unitary", requires: "not quantum immortality, many-worlds, non-unitary",
effect() { effect() {
tech.isResearchReality = true; tech.isResearchReality = true;
for (let i = 0; i < 15; i++) powerUps.spawn(m.pos.x + Math.random() * 60, m.pos.y + Math.random() * 60, "research", false); for (let i = 0; i < 16; i++) powerUps.spawn(m.pos.x + Math.random() * 60, m.pos.y + Math.random() * 60, "research", false);
}, },
remove() { remove() {
tech.isResearchReality = false; tech.isResearchReality = false;
@@ -2712,25 +2712,6 @@
}, },
remove() {} remove() {}
}, },
{
name: "WIMPs",
//<strong class='color-harm'>harmful</strong>
description: "a <strong class='color-harm'>harmful</strong> particle slowly <strong>chases</strong> you<br>spawn <strong>2-6</strong> <strong class='color-r'>research</strong> at the end of each <strong>level</strong>",
maxCount: 9,
count: 0,
frequency: 1,
frequencyDefault: 1,
allowed() {
return true
},
requires: "",
effect: () => {
tech.wimpCount++
},
remove() {
tech.wimpCount = 0
}
},
{ {
name: "bubble fusion", name: "bubble fusion",
description: "after destroying a mob's natural <strong>shield</strong><br>spawn <strong>1-2</strong> <strong class='color-h'>heals</strong>, <strong class='color-g'>ammo</strong>, or <strong class='color-r'>research</strong>", description: "after destroying a mob's natural <strong>shield</strong><br>spawn <strong>1-2</strong> <strong class='color-h'>heals</strong>, <strong class='color-g'>ammo</strong>, or <strong class='color-r'>research</strong>",
@@ -5193,6 +5174,25 @@
tech.pilotForce = 0.00002 tech.pilotForce = 0.00002
} }
}, },
{
name: "WIMPs",
description: "a <strong class='color-harm'>harmful</strong> particle slowly <strong>chases</strong> you<br>spawn <strong>3-9</strong> <strong class='color-r'>research</strong> at the end of each <strong>level</strong>",
isFieldTech: true,
maxCount: 9,
count: 0,
frequency: 1,
frequencyDefault: 1,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "wormhole"
},
requires: "wormhole",
effect: () => {
tech.wimpCount++
},
remove() {
tech.wimpCount = 0
}
},
{ {
name: "cosmic string", name: "cosmic string",
description: "<strong>stun</strong> and do <strong class='color-p'>radioactive</strong> <strong class='color-d'>damage</strong> to <strong>mobs</strong><br>if you tunnel through them with a <strong class='color-worm'>wormhole</strong>", description: "<strong>stun</strong> and do <strong class='color-p'>radioactive</strong> <strong class='color-d'>damage</strong> to <strong>mobs</strong><br>if you tunnel through them with a <strong class='color-worm'>wormhole</strong>",

View File

@@ -1,58 +1,18 @@
******************************************************** NEXT PATCH ******************************************************** ******************************************************** NEXT PATCH ********************************************************
over all game difficulty scaling occurs faster
your damage will feel lower, and you will take more harm,
so you should probably play on a lower difficulty
tech: Higgs manism gives 50% reduced fire delay instead of harm reduction tech: WIMPs now requires wormhole
tech: inertial frame is removed gives 3-9 research now (was 2-3)
tech: automatic is now a junk tech
balance:
dead reckoning gives 36% damage when at rest (was 30%)
overcharge gives 10 more energy, but adds 10 junk tech
1st ionization energy gives 6 energy per heal (was 5)
dormancy increases damage by 100% but lowers it by 33% if no recent kills (was +50%, -15%)
torpor decreases harm by 66% increases harm by 15% if no recent kills (was -50%, +10%)
Ψ(t) collapse spawns 3 more research, so it's at 15
fragmentation gives 30% more nails for railgun
ammonium nitrate +25% (was 20%)
generalist gives 8 guns (was 6)
arsenal gives 10% per gun (was 14%)
rivet gun fires 25% faster, rivets are 15% larger
shotgun slug is 33% bigger
missile bot fires 10% more often
tinsellated flagella gives 40% speed increase (was 50%), base spore speed is 10% faster
beamSplitter has a 20% lower divergence
nano manufacturing tech is all buffed 15%
traversable geodesics gives 2 guns and ammo (was 1)
mines have 25% more nails, laser mines use 20% less energy sentry mines last 33% seconds longer
zoospore vector has an 11% chance to spawn (was 9%)
negentropy spawns a heal for every 33 missing health (was 50 health)
exciton-lattice gives 60% damage
thermocouple spawns 1-8 ice-IX (was 1-5)
WIMPs spawn 2-6 research (was 2-3)
quantum immortality reduces harm by 33% (was 23%)
commodities exchange gives 10 power ups (was 8)
super balls are 17% bigger (this means they do about 25% more damage)
exothermic process increases damage by (was 45%)
heat engine increases damage by 50% (was 40%)
replication gives 10% duplication chance (was 8%)
stimulated emission gives 22% duplication chance
futures exchange gives 4.7% duplication chance per cancel (was 4.3%)
needles are 10% slower and do 15% more damage
bug fixes:
reduced tolerances text rewritten to clarify that it gives more ammo per ammo pack
hazards on horizontal flipped levels now correctly do damage
ship mode aims properly after you die
although it still doesn't reset
experiment mode selections are highlighted better
tech: eddy current brake - is 15% larger and caps mob speeds at 20% slower
bug fixes
******************************************************** BUGS ******************************************************** ******************************************************** BUGS ********************************************************
sharing 1 stack of spherical harmonics doesn't activate visually
https://landgreen.github.io/sidescroller/index.html?&tech0=crystallizer&tech1=thermoelectric%20effect&tech2=thermoelectric%20effect&tech3=spherical%20harmonics&tech4=expansion&tech5=triple%20point&tech6=triple%20point&tech7=flux%20pinning&field=standing%20wave%20harmonics&difficulty=4&level=0&noPower=0
a couple times people have reported the final boss dropping extra bodies on death a couple times people have reported the final boss dropping extra bodies on death
figure out how to undo ship mode figure out how to undo ship mode
@@ -75,8 +35,36 @@ is there a way to check if the player is stuck inside the map or block
(intermittent, but almost every time) bug - capping the fps causes random slow downs, that can be fixed with pause (intermittent, but almost every time) bug - capping the fps causes random slow downs, that can be fixed with pause
******************************************************** LEVELS ********************************************************
labs - procedural generation
science theme, with a cool technology showcased
layout:
6 total rooms
3x2, 2x3, 4 2, 2 4
1500px, 3000px per room
room types
entrance - no mobs, starting power ups`
exit - plenty of mobs
up, down - 2 paired rooms - boost, elevator, portal
boss - standard random boss spawns
empty - just a dead end - possible duplication boss spawn location
button - opens door to exit room
room ideas -
gravity room
portal room
endlessly falling blocks down a slide, that the player has to climb up
portal + rotor + falling blocks = perpetual motion
laser room
slime radiation room
******************************************************** TODO ******************************************************** ******************************************************** TODO ********************************************************
standing wave harmonics - can block too often on the same mob if you push it into a corner
add a small cooldown
return to normal knock back // 4
let standing wave harmonics get tech decorrelation
* inductive coupling - sucks without catabolism, too much delayed gratification. should probably be bundled with transceiver chip * inductive coupling - sucks without catabolism, too much delayed gratification. should probably be bundled with transceiver chip
tech: cloaking field - decrease/increase cooldown on sneak attack? tech: cloaking field - decrease/increase cooldown on sneak attack?
@@ -160,21 +148,6 @@ tech plasma field - plasma field becomes an aoe damage field with the same radiu
200% more energy drain, 100% more damage 200% more energy drain, 100% more damage
draw a square (or two) that rapidly spins draw a square (or two) that rapidly spins
new level: procedural generation
several small rooms are linked by portals
the portals have a randomized pattern
the rooms can be set out in a grid and linked by physical doors,tunnels,wells
choose bosses that can move though walls, so it can track you while you portal
the map shuffles it's pattern when the player get to a button
shuffle portals or shuffle the physical layout of rooms
and then have the player go back through to get to the end?
gravity room
portal room
endlessly falling blocks down a slide, that the player has to climb
portal + rotor + falling blocks = perpetual motion
laser room
slime radiation room
look into improving mouse lag with pointer lock? look into improving mouse lag with pointer lock?
https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
https://www.vsynctester.com/game.html https://www.vsynctester.com/game.html
@@ -397,6 +370,7 @@ possible names for tech
counterfactual - something false counterfactual - something false
axion - maybe a 3rd dark matter type tech axion - maybe a 3rd dark matter type tech
Pigeonhole principle - if there are several things that are matched up Pigeonhole principle - if there are several things that are matched up
regression to the mean