final boss
missile moves slightly differently it used to slow when locked on to a target now it slows when turning missiles explode when near any mob wormhole mod: cosmic string - now stuns mobs and applies radiation damage mod time dilation: - quadruple your default energy regeneration added final boss level, it's still in progress so I'd love some feedback also the game loops back to the intro level after the boss I'll be working on the ending in the next patch, so the intro level is just a placeholder
This commit is contained in:
6675
js/bullet.js
6675
js/bullet.js
File diff suppressed because it is too large
Load Diff
2297
js/game.js
2297
js/game.js
File diff suppressed because it is too large
Load Diff
1578
js/index.js
1578
js/index.js
File diff suppressed because it is too large
Load Diff
9241
js/level.js
9241
js/level.js
File diff suppressed because it is too large
Load Diff
102
js/mods.js
102
js/mods.js
@@ -87,12 +87,12 @@ const mod = {
|
|||||||
if (mod.isDamageForGuns) dmg *= 1 + 0.07 * b.inventory.length
|
if (mod.isDamageForGuns) dmg *= 1 + 0.07 * b.inventory.length
|
||||||
if (mod.isLowHealthDmg) dmg *= 1 + 0.6 * Math.max(0, 1 - mech.health)
|
if (mod.isLowHealthDmg) dmg *= 1 + 0.6 * Math.max(0, 1 - mech.health)
|
||||||
if (mod.isHarmDamage && mech.lastHarmCycle + 600 > mech.cycle) dmg *= 2;
|
if (mod.isHarmDamage && mech.lastHarmCycle + 600 > mech.cycle) dmg *= 2;
|
||||||
if (mod.isEnergyLoss) dmg *= 1.43;
|
if (mod.isEnergyLoss) dmg *= 1.5;
|
||||||
if (mod.isAcidDmg && mech.health > 1) dmg *= 1.4;
|
if (mod.isAcidDmg && mech.health > 1) dmg *= 1.4;
|
||||||
if (mod.restDamage > 1 && player.speed < 1) dmg *= mod.restDamage
|
if (mod.restDamage > 1 && player.speed < 1) dmg *= mod.restDamage
|
||||||
if (mod.isEnergyDamage) dmg *= 1 + mech.energy / 5.5;
|
if (mod.isEnergyDamage) dmg *= 1 + mech.energy / 5.5;
|
||||||
if (mod.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.0038
|
if (mod.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.0038
|
||||||
if (mod.isRerollDamage) dmg *= 1 + 0.05 * powerUps.reroll.rerolls
|
if (mod.isRerollDamage) dmg *= 1 + 0.06 * powerUps.reroll.rerolls
|
||||||
if (mod.isOneGun && b.inventory.length < 2) dmg *= 1.25
|
if (mod.isOneGun && b.inventory.length < 2) dmg *= 1.25
|
||||||
if (mod.isNoFireDamage && mech.cycle > mech.fireCDcycle + 120) dmg *= 1.5
|
if (mod.isNoFireDamage && mech.cycle > mech.fireCDcycle + 120) dmg *= 1.5
|
||||||
return dmg * mod.slowFire * mod.aimDamage
|
return dmg * mod.slowFire * mod.aimDamage
|
||||||
@@ -149,7 +149,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "acute stress response",
|
name: "acute stress response",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>43%</strong><br>if a mob <strong>dies</strong> drain stored <strong class='color-f'>energy</strong> by <strong>25%</strong>",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>50%</strong><br>if a mob <strong>dies</strong> drain stored <strong class='color-f'>energy</strong> by <strong>25%</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -245,7 +245,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "perturbation theory",
|
name: "perturbation theory",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>5%</strong><br>for each of your <strong class='color-r'>rerolls</strong>",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>6%</strong><br>for each of your <strong class='color-r'>rerolls</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -259,26 +259,6 @@ const mod = {
|
|||||||
mod.isRerollDamage = false;
|
mod.isRerollDamage = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "Ψ(t) collapse",
|
|
||||||
description: "<strong>60%</strong> decreased <strong>delay</strong> after firing<br>if you have no <strong class='color-r'>rerolls</strong>",
|
|
||||||
maxCount: 1,
|
|
||||||
count: 0,
|
|
||||||
allowed() {
|
|
||||||
return powerUps.reroll.rerolls === 0 && !mod.manyWorlds
|
|
||||||
},
|
|
||||||
requires: "no rerolls",
|
|
||||||
effect() {
|
|
||||||
mod.isRerollHaste = true;
|
|
||||||
mod.rerollHaste = 0.4;
|
|
||||||
b.setFireCD();
|
|
||||||
},
|
|
||||||
remove() {
|
|
||||||
mod.isRerollHaste = false;
|
|
||||||
mod.rerollHaste = 1;
|
|
||||||
b.setFireCD();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "electrostatic discharge",
|
name: "electrostatic discharge",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>20%</strong><br><strong>20%</strong> increased <strong>delay</strong> after firing",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>20%</strong><br><strong>20%</strong> increased <strong>delay</strong> after firing",
|
||||||
@@ -296,6 +276,26 @@ const mod = {
|
|||||||
b.setFireCD();
|
b.setFireCD();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Ψ(t) collapse",
|
||||||
|
description: "<strong>66%</strong> decreased <strong>delay</strong> after firing<br>if you have no <strong class='color-r'>rerolls</strong>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return powerUps.reroll.rerolls === 0 && !mod.manyWorlds
|
||||||
|
},
|
||||||
|
requires: "no rerolls",
|
||||||
|
effect() {
|
||||||
|
mod.isRerollHaste = true;
|
||||||
|
mod.rerollHaste = 0.33;
|
||||||
|
b.setFireCD();
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mod.isRerollHaste = false;
|
||||||
|
mod.rerollHaste = 1;
|
||||||
|
b.setFireCD();
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "auto-loading heuristics",
|
name: "auto-loading heuristics",
|
||||||
description: "<strong>30%</strong> decreased <strong>delay</strong> after firing",
|
description: "<strong>30%</strong> decreased <strong>delay</strong> after firing",
|
||||||
@@ -558,7 +558,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "foam-bot upgrade",
|
name: "foam-bot upgrade",
|
||||||
description: "<strong>200%</strong> increased <strong>foam size</strong><br><em>applies to all current and future foam-bots</em>",
|
description: "<strong>150%</strong> increased <strong>foam size</strong><br><em>applies to all current and future foam-bots</em>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -675,7 +675,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "orbital-bot upgrade",
|
name: "orbital-bot upgrade",
|
||||||
description: "<strong>125%</strong> increased <strong class='color-d'>damage</strong><br><em>applies to all current and future orbit-bots</em>",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>100%</strong> and <strong>radius</strong> by <strong>30%</strong><br><em>applies to all current and future orbit-bots</em>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -684,15 +684,24 @@ const mod = {
|
|||||||
requires: "2 or more orbital bots",
|
requires: "2 or more orbital bots",
|
||||||
effect() {
|
effect() {
|
||||||
mod.isOrbitBotUpgrade = true
|
mod.isOrbitBotUpgrade = true
|
||||||
|
const range = 190 + 60 * mod.isOrbitBotUpgrade
|
||||||
for (let i = 0; i < bullet.length; i++) {
|
for (let i = 0; i < bullet.length; i++) {
|
||||||
if (bullet[i].botType === 'orbit') bullet[i].isUpgraded = true
|
if (bullet[i].botType === 'orbit') {
|
||||||
|
bullet[i].isUpgraded = true
|
||||||
|
bullet[i].range = range
|
||||||
|
bullet[i].orbitalSpeed = Math.sqrt(0.25 / range)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
mod.isOrbitBotUpgrade = false
|
mod.isOrbitBotUpgrade = false
|
||||||
|
const range = 190 + 60 * mod.isOrbitBotUpgrade
|
||||||
for (let i = 0; i < bullet.length; i++) {
|
for (let i = 0; i < bullet.length; i++) {
|
||||||
if (bullet[i].botType === 'orbit') bullet[i].isUpgraded = false
|
if (bullet[i].botType === 'orbit') {
|
||||||
|
bullet[i].range = range
|
||||||
|
bullet[i].orbitalSpeed = Math.sqrt(0.25 / range)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -946,7 +955,7 @@ const mod = {
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return mod.isPiezo
|
return mod.isPiezo && !mod.timeEnergyRegen
|
||||||
},
|
},
|
||||||
requires: "piezoelectricity",
|
requires: "piezoelectricity",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
@@ -1169,7 +1178,7 @@ const mod = {
|
|||||||
name: "anthropic principle",
|
name: "anthropic principle",
|
||||||
nameInfo: "<span id = 'mod-anthropic'></span>",
|
nameInfo: "<span id = 'mod-anthropic'></span>",
|
||||||
addNameInfo() {
|
addNameInfo() {
|
||||||
setTimeout(function () {
|
setTimeout(function() {
|
||||||
powerUps.reroll.changeRerolls(0)
|
powerUps.reroll.changeRerolls(0)
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
@@ -1182,7 +1191,7 @@ const mod = {
|
|||||||
requires: "at least 1 reroll",
|
requires: "at least 1 reroll",
|
||||||
effect() {
|
effect() {
|
||||||
mod.isDeathAvoid = true;
|
mod.isDeathAvoid = true;
|
||||||
setTimeout(function () {
|
setTimeout(function() {
|
||||||
powerUps.reroll.changeRerolls(0)
|
powerUps.reroll.changeRerolls(0)
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
@@ -1254,7 +1263,7 @@ const mod = {
|
|||||||
name: "entanglement",
|
name: "entanglement",
|
||||||
nameInfo: "<span id = 'mod-entanglement'></span>",
|
nameInfo: "<span id = 'mod-entanglement'></span>",
|
||||||
addNameInfo() {
|
addNameInfo() {
|
||||||
setTimeout(function () {
|
setTimeout(function() {
|
||||||
game.boldActiveGunHUD();
|
game.boldActiveGunHUD();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
@@ -1267,7 +1276,7 @@ const mod = {
|
|||||||
requires: "at least 2 guns",
|
requires: "at least 2 guns",
|
||||||
effect() {
|
effect() {
|
||||||
mod.isEntanglement = true
|
mod.isEntanglement = true
|
||||||
setTimeout(function () {
|
setTimeout(function() {
|
||||||
game.boldActiveGunHUD();
|
game.boldActiveGunHUD();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
@@ -1893,7 +1902,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "wave packet",
|
name: "wave packet",
|
||||||
description: "<strong>wave beam</strong> emits <strong>two</strong> oscillating particles<br>decrease wave <strong class='color-d'>damage</strong> by <strong>33%</strong>",
|
description: "<strong>wave beam</strong> emits <strong>two</strong> oscillating particles<br>decrease wave <strong class='color-d'>damage</strong> by <strong>20%</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -1943,7 +1952,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "recursion",
|
name: "recursion",
|
||||||
description: "after <strong>missiles</strong> <strong class='color-e'>explode</strong> they have a<br><strong>30%</strong> chance to launch a larger <strong>missile</strong>",
|
description: "after <strong>missiles</strong> <strong class='color-e'>explode</strong> they have a<br><strong>20%</strong> chance to launch a larger <strong>missile</strong>",
|
||||||
maxCount: 6,
|
maxCount: 6,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -2622,6 +2631,24 @@ const mod = {
|
|||||||
b.setFireCD();
|
b.setFireCD();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "time crystals",
|
||||||
|
description: "<strong>quadruple</strong> your default <strong class='color-f'>energy</strong> regeneration",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return mech.fieldUpgrades[mech.fieldMode].name === "time dilation field"
|
||||||
|
},
|
||||||
|
requires: "time dilation field",
|
||||||
|
effect: () => {
|
||||||
|
mod.energyRegen = 0.004;
|
||||||
|
mech.fieldRegen = mod.energyRegen;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
mod.energyRegen = 0.001;
|
||||||
|
mech.fieldRegen = mod.energyRegen;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "plasma jet",
|
name: "plasma jet",
|
||||||
description: "increase <strong class='color-plasma'>plasma</strong> <strong>torch's</strong> range by <strong>27%</strong>",
|
description: "increase <strong class='color-plasma'>plasma</strong> <strong>torch's</strong> range by <strong>27%</strong>",
|
||||||
@@ -2871,7 +2898,7 @@ const mod = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "cosmic string",
|
name: "cosmic string",
|
||||||
description: "when you <strong> tunnel</strong> through a <strong class='color-worm'>wormhole</strong><br>mobs between the <strong>endpoints</strong> take <strong class='color-d'>damage</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>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -3178,5 +3205,6 @@ const mod = {
|
|||||||
isWormBullets: null,
|
isWormBullets: null,
|
||||||
isWideLaser: null,
|
isWideLaser: null,
|
||||||
wideLaser: null,
|
wideLaser: null,
|
||||||
isPulseLaser: null
|
isPulseLaser: null,
|
||||||
|
timeEnergyRegen: null
|
||||||
}
|
}
|
||||||
4823
js/player.js
4823
js/player.js
File diff suppressed because it is too large
Load Diff
5676
js/spawn.js
5676
js/spawn.js
File diff suppressed because it is too large
Load Diff
61
todo.txt
61
todo.txt
@@ -1,10 +1,46 @@
|
|||||||
neutron bomb does 60% more damage
|
missile moves slightly differently
|
||||||
powerUpBoss has a shorter vision range, and accelerates slower
|
it used to slow when locked on to a target
|
||||||
custom mode has the option to disable mod, guns, and fields
|
now it slows when turning
|
||||||
several changes to community maps (by Francois 👑)
|
missiles explode when near any mob
|
||||||
|
|
||||||
|
wormhole mod: cosmic string - now stuns mobs and applies radiation damage
|
||||||
|
mod time dilation: - quadruple your default energy regeneration
|
||||||
|
|
||||||
|
added final boss level, it's still in progress so I'd love some feedback
|
||||||
|
also the game loops back to the intro level after the boss
|
||||||
|
I'll be working on the ending in the next patch, so the intro level is just a placeholder
|
||||||
|
|
||||||
************** TODO - n-gon **************
|
************** TODO - n-gon **************
|
||||||
|
|
||||||
|
final boss has elements of other bosses
|
||||||
|
laser mode
|
||||||
|
if player is on left rotate counter clockwise
|
||||||
|
if player is on right rotate clockwise
|
||||||
|
start of laser mode
|
||||||
|
push block either left or right, not away
|
||||||
|
vibrating shape
|
||||||
|
grow and shrink
|
||||||
|
oscillate elliptical deformation (not sure how)
|
||||||
|
|
||||||
|
a bot that eats ammo and converts them into rerolls
|
||||||
|
or 2 ammo power ups = 1 reroll
|
||||||
|
|
||||||
|
been getting some fps slow down after playing for a few minutes
|
||||||
|
|
||||||
|
new status effect: fear - push mob away from player for a time
|
||||||
|
|
||||||
|
new status effect - apply status effect to mobs that makes blocks attracted to them
|
||||||
|
only lasts a few cycles
|
||||||
|
|
||||||
|
in hard and why have some mobs spawn in later in the level
|
||||||
|
where
|
||||||
|
at defined points in array levelSpawns = [{x:0,y:0},{x:0,y:0}]
|
||||||
|
store the locations of mobs when the level starts to use as respawn points
|
||||||
|
remove the locations that are close to player
|
||||||
|
when?
|
||||||
|
after some mobs are dead
|
||||||
|
after the boss is killed
|
||||||
|
|
||||||
mod - explosions apply radiation damage over time
|
mod - explosions apply radiation damage over time
|
||||||
or spawn a neutron bomb with a short timer
|
or spawn a neutron bomb with a short timer
|
||||||
|
|
||||||
@@ -13,26 +49,15 @@ mod self destruct - drones explode when they die
|
|||||||
|
|
||||||
add an ending to the game
|
add an ending to the game
|
||||||
add a final boss battle level
|
add a final boss battle level
|
||||||
final boss has elements of other bosses
|
|
||||||
alternate between black hole aura and laser beams
|
|
||||||
fire seeker bullets
|
|
||||||
drop bombs
|
|
||||||
tail of shielded mobs
|
|
||||||
shield
|
|
||||||
mirror ending (if no cheats)
|
mirror ending (if no cheats)
|
||||||
level after final boss battle is the intro level, but flipped left right, with a fake player
|
level after final boss battle is the intro level, but flipped left right, with a fake player
|
||||||
damage the fake player to end the game?
|
damage the fake player to end the game
|
||||||
|
message about go outside
|
||||||
no ending (if cheats)
|
no ending (if cheats)
|
||||||
game goes on forever
|
game goes on forever
|
||||||
|
also game goes on if player attacks, the fake player
|
||||||
around level 15
|
|
||||||
game never ends if you have used cheats
|
game never ends if you have used cheats
|
||||||
|
|
||||||
new status effect - push mob away from player for a time
|
|
||||||
|
|
||||||
new status effect - apply status effect to mobs that makes blocks attracted to them
|
|
||||||
only lasts a few cycles
|
|
||||||
|
|
||||||
foam or spore bullet on dmg shrink effect
|
foam or spore bullet on dmg shrink effect
|
||||||
it might mess with the foam position of other bullets on the mob
|
it might mess with the foam position of other bullets on the mob
|
||||||
shrink when foam bullets end while attached, or shrink on collision?
|
shrink when foam bullets end while attached, or shrink on collision?
|
||||||
|
|||||||
Reference in New Issue
Block a user