working on mods, added death at 12% mod
This commit is contained in:
@@ -40,6 +40,7 @@ const b = {
|
||||
modLaserReflections: null,
|
||||
isModNoAmmo: null,
|
||||
isModAmmoFromHealth: null,
|
||||
mobDieAtHealth: null,
|
||||
setModDefaults() {
|
||||
b.modCount = 0;
|
||||
b.modFireRate = 1;
|
||||
@@ -78,6 +79,7 @@ const b = {
|
||||
b.modLaserReflections = 2;
|
||||
b.isModNoAmmo = false;
|
||||
b.isModAmmoFromHealth = 0;
|
||||
b.mobDieAtHealth = 0.05;
|
||||
mech.Fx = 0.015;
|
||||
mech.jumpForce = 0.38;
|
||||
mech.maxHealth = 1;
|
||||
@@ -219,6 +221,18 @@ const b = {
|
||||
b.isModBulletsLastLonger += 0.33
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "reaction inhibitor",
|
||||
description: "mobs <strong>die</strong> if their life goes below <strong>12%</strong>",
|
||||
maxCount: 3,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
effect: () => {
|
||||
b.mobDieAtHealth = 0.15
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "zoospore vector",
|
||||
description: "enemies discharge <strong style='letter-spacing: 2px;'>spores</strong> on <strong>death</strong><br>+11% chance",
|
||||
@@ -587,6 +601,18 @@ const b = {
|
||||
}
|
||||
}
|
||||
},
|
||||
// {
|
||||
// name: "super mines",
|
||||
// description: "mines fire super balls when triggered",
|
||||
// maxCount: 1,
|
||||
// count: 0,
|
||||
// allowed() {
|
||||
// return b.haveGunCheck("mines")
|
||||
// },
|
||||
// effect() {
|
||||
|
||||
// }
|
||||
// },
|
||||
],
|
||||
giveMod(index = 'random') {
|
||||
if (index === 'random') {
|
||||
@@ -893,7 +919,6 @@ const b = {
|
||||
if (collide.length > 0) {
|
||||
for (let i = 0; i < collide.length; i++) {
|
||||
if (collide[i].bodyA.collisionFilter.category === cat.map || collide[i].bodyB.collisionFilter.category === cat.map) {
|
||||
// console.log(collide)
|
||||
const angle = Matter.Vector.angle(collide[i].normal, {
|
||||
x: 1,
|
||||
y: 0
|
||||
|
||||
12
js/game.js
12
js/game.js
@@ -12,7 +12,7 @@ const game = {
|
||||
level.checkQuery();
|
||||
mech.move();
|
||||
mech.look();
|
||||
game.fallChecks();
|
||||
game.checks();
|
||||
ctx.save();
|
||||
game.camera();
|
||||
mech.draw();
|
||||
@@ -34,7 +34,7 @@ const game = {
|
||||
level.checkQuery();
|
||||
mech.move();
|
||||
mech.look();
|
||||
game.fallChecks();
|
||||
game.checks();
|
||||
ctx.save();
|
||||
game.camera();
|
||||
level.drawFillBGs();
|
||||
@@ -634,7 +634,7 @@ const game = {
|
||||
}
|
||||
}
|
||||
},
|
||||
fallChecks() {
|
||||
checks() {
|
||||
// if 4000px deep
|
||||
if (mech.pos.y > game.fallHeight) {
|
||||
mech.death();
|
||||
@@ -664,7 +664,11 @@ const game = {
|
||||
// }
|
||||
}
|
||||
|
||||
if (!(mech.cycle % 420)) {
|
||||
if (!(mech.cycle % 60)) { //once a second check
|
||||
|
||||
}
|
||||
|
||||
if (!(game.cycle % 420)) { //once every 7 seconds
|
||||
fallCheck = function (who) {
|
||||
let i = who.length;
|
||||
while (i--) {
|
||||
|
||||
164
js/index.js
164
js/index.js
@@ -1,168 +1,4 @@
|
||||
"use strict";
|
||||
/* TODO: *******************************************
|
||||
*****************************************************
|
||||
|
||||
mod - mobs die at 15% life (default is 5%)
|
||||
|
||||
mod - negative mass field - mke block orbit player, like black hole boss
|
||||
named rotational frame-dragging
|
||||
|
||||
mod - energy recharges faster when not moving
|
||||
|
||||
lore - a mech gains self awareness
|
||||
each mod/gun/field is a new tech
|
||||
all the technology leads to the singularity
|
||||
each game run is actually the mech simulating a possible escape
|
||||
this is why the graphics are so bad, its just a simulation
|
||||
final mod is "this is just a simulation"
|
||||
you get immortality and Infinity damage
|
||||
the next level is the final level
|
||||
atmosphere levels that explore lore
|
||||
give the user a rest, between combat
|
||||
low combat more graphics
|
||||
large rotating fan that the player has to move through
|
||||
nonaggressive mobs one mob attacking the passive mobs
|
||||
in the final level you see your self at the starting level, with the wires
|
||||
you shoot your self to wake up?
|
||||
|
||||
wave beam - needs a serious buff, its not fun, and it needs more damage
|
||||
shorter range, higher dmg, faster wiggle
|
||||
mod: wave beam - speed up the wave beam and reduce the wave amplitude to improve targeting at range
|
||||
|
||||
shotgun - even more short range effects
|
||||
|
||||
mod: flechettes - each burst fires an extra flechette
|
||||
mod: flechettes - stick into mobs and do poison damage, like foam
|
||||
|
||||
mod: foam - does extra poison dmg (to get past shields)
|
||||
|
||||
mod: vacuum bomb - does a constant suck
|
||||
|
||||
mod: shield harmonics - large field radius
|
||||
|
||||
mod: shotgun - fire extra shot
|
||||
but also increase spread?
|
||||
|
||||
speed up movement
|
||||
higher gravity, larger jump force
|
||||
faster horizontal acceleration
|
||||
only increase top speed a bit
|
||||
|
||||
mob: targeting laser, then a high speed, no gravity bullet
|
||||
|
||||
add difficulty slider to custom?
|
||||
|
||||
add recursive mod counts to pause screen
|
||||
|
||||
key required to open the exit to some levels
|
||||
must hold key like a block
|
||||
could the key be any block?
|
||||
|
||||
css transition for pause menu
|
||||
|
||||
field that pushes everything back, and can destroy smaller blocks
|
||||
converts blocks into ammo power ups
|
||||
|
||||
mod: make player invisible when...
|
||||
use the flag from phase field
|
||||
when health is low?
|
||||
|
||||
field: a larger radius that attracted enemies
|
||||
still deflected them near the robot
|
||||
convert the health of mobs into energy when they are being attracted
|
||||
|
||||
mod: chance to not die from fatal damage
|
||||
also push mobs and bodies away?
|
||||
also heal?
|
||||
|
||||
mod: bot that fires minigun bullets
|
||||
only fires when your mouse is held down
|
||||
|
||||
mod: do extra damage based on your speed
|
||||
do more damage when not moving?
|
||||
take less damage when not moving?
|
||||
|
||||
gun/field: portals
|
||||
use the code from mines to get them to stick to walls
|
||||
or lasers
|
||||
alternate red and blue portals
|
||||
|
||||
missiles don't explode reliably enough
|
||||
they can bounce, which is cool, but they should still explode right after a bounce
|
||||
|
||||
weekly random challenge where everyone playing each week gets the same random setup.
|
||||
The randomness would be determined by the date so it would sync everyone.
|
||||
power ups still drop, but the drops are determined by a preset list that changes each week.
|
||||
|
||||
mod: do something at the end of each level
|
||||
heal to full
|
||||
should still be effected by the heal reduction at higher difficulty
|
||||
give ammo to current gun
|
||||
give goals/quests for each level
|
||||
how to track goals?
|
||||
take no damage
|
||||
don't shoot
|
||||
|
||||
gun: Spirit Bomb (singularity)
|
||||
use charge up like rail gun
|
||||
electricity graphics like plasma torch
|
||||
suck in nearby mobs, power ups?, blocks?
|
||||
sucked in stuff increase size
|
||||
uses energy
|
||||
hold above the player's head
|
||||
|
||||
Boss levels
|
||||
sensor that locks you in after you enter the boss room
|
||||
boss that eats other mobs and gains stats from them
|
||||
chance to spawn on any level (past level 5)
|
||||
|
||||
add a key that player picks up and needs to set on the exit door to open it
|
||||
|
||||
make power ups keep moving to player if the pickup field is turned off before they get picked up
|
||||
not sure how to do this without adding a constant check
|
||||
|
||||
animate new level spawn by having the map aspects randomly fly into place
|
||||
|
||||
new map with repeating endlessness
|
||||
get ideas from Manifold Garden game
|
||||
if falling, get teleported above the map
|
||||
I tried it, but had trouble getting the camera to adjust to the teleportation
|
||||
this can apply to blocks mobs, and power ups as well
|
||||
|
||||
field power up effects
|
||||
field allows player to hold and throw living mobs
|
||||
and hack mobs
|
||||
|
||||
give mobs more animal-like behaviors
|
||||
like rain world
|
||||
give mobs something to do when they don't see player
|
||||
explore map
|
||||
eat power ups
|
||||
drop power up (if killed after eating one)
|
||||
mobs some times aren't aggressive
|
||||
when low on life or after taking a large hit
|
||||
mobs can fight each other
|
||||
this might be hard to code
|
||||
isolated mobs try to group up.
|
||||
|
||||
game mechanics
|
||||
mechanics that support the physics engine
|
||||
add rope/constraint
|
||||
get ideas from game: limbo / inside
|
||||
environmental hazards
|
||||
laser
|
||||
lava
|
||||
button / switch
|
||||
door
|
||||
fizzler
|
||||
moving platform
|
||||
map zones
|
||||
water
|
||||
low friction ground
|
||||
bouncy ground
|
||||
|
||||
*/
|
||||
|
||||
//collision groups
|
||||
// cat.player | cat.map | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet | cat.mobShield
|
||||
const cat = {
|
||||
|
||||
@@ -14,10 +14,10 @@ const level = {
|
||||
start() {
|
||||
if (level.levelsCleared === 0) {
|
||||
// level.difficultyIncrease(5)
|
||||
b.giveGuns("wave beam")
|
||||
// mech.setField("phase decoherence field")
|
||||
// b.giveGuns("wave beam")
|
||||
// mech.setField("negative mass field")
|
||||
// for (let i = 0; i < 9; i++) {
|
||||
// b.giveMod("auto-loading heuristics");
|
||||
// b.giveMod("reaction inhibitor");
|
||||
// }
|
||||
|
||||
level.intro(); //starting level
|
||||
|
||||
104
js/mobs.js
104
js/mobs.js
@@ -523,57 +523,57 @@ const mobs = {
|
||||
// time: game.drawTime
|
||||
// });
|
||||
},
|
||||
zoom() {
|
||||
this.zoomMode--;
|
||||
if (this.zoomMode > 150) {
|
||||
this.drawTrail();
|
||||
if (this.seePlayer.recall) {
|
||||
//attraction to player
|
||||
const forceMag = this.accelMag * this.mass;
|
||||
const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
||||
this.force.x += forceMag * Math.cos(angle);
|
||||
this.force.y += forceMag * Math.sin(angle);
|
||||
}
|
||||
} else if (this.zoomMode < 0) {
|
||||
this.zoomMode = 300;
|
||||
this.setupTrail();
|
||||
}
|
||||
},
|
||||
setupTrail() {
|
||||
this.trail = [];
|
||||
for (let i = 0; i < this.trailLength; ++i) {
|
||||
this.trail.push({
|
||||
x: this.position.x,
|
||||
y: this.position.y
|
||||
});
|
||||
}
|
||||
},
|
||||
drawTrail() {
|
||||
//dont' forget to run setupTrail() after mob spawn
|
||||
const t = this.trail;
|
||||
const len = t.length;
|
||||
t.pop();
|
||||
t.unshift({
|
||||
x: this.position.x,
|
||||
y: this.position.y
|
||||
});
|
||||
//draw
|
||||
ctx.strokeStyle = this.trailFill;
|
||||
ctx.beginPath();
|
||||
// ctx.moveTo(t[0].x, t[0].y);
|
||||
// ctx.lineTo(t[0].x, t[0].y);
|
||||
// ctx.globalAlpha = 0.2;
|
||||
// ctx.lineWidth = this.radius * 3;
|
||||
// ctx.stroke();
|
||||
ctx.globalAlpha = 0.5 / len;
|
||||
ctx.lineWidth = this.radius * 1.95;
|
||||
for (let i = 0; i < len; ++i) {
|
||||
// ctx.lineWidth *= 0.96;
|
||||
ctx.lineTo(t[i].x, t[i].y);
|
||||
ctx.stroke();
|
||||
}
|
||||
ctx.globalAlpha = 1;
|
||||
},
|
||||
// zoom() {
|
||||
// this.zoomMode--;
|
||||
// if (this.zoomMode > 150) {
|
||||
// this.drawTrail();
|
||||
// if (this.seePlayer.recall) {
|
||||
// //attraction to player
|
||||
// const forceMag = this.accelMag * this.mass;
|
||||
// const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
||||
// this.force.x += forceMag * Math.cos(angle);
|
||||
// this.force.y += forceMag * Math.sin(angle);
|
||||
// }
|
||||
// } else if (this.zoomMode < 0) {
|
||||
// this.zoomMode = 300;
|
||||
// this.setupTrail();
|
||||
// }
|
||||
// },
|
||||
// setupTrail() {
|
||||
// this.trail = [];
|
||||
// for (let i = 0; i < this.trailLength; ++i) {
|
||||
// this.trail.push({
|
||||
// x: this.position.x,
|
||||
// y: this.position.y
|
||||
// });
|
||||
// }
|
||||
// },
|
||||
// drawTrail() {
|
||||
// //dont' forget to run setupTrail() after mob spawn
|
||||
// const t = this.trail;
|
||||
// const len = t.length;
|
||||
// t.pop();
|
||||
// t.unshift({
|
||||
// x: this.position.x,
|
||||
// y: this.position.y
|
||||
// });
|
||||
// //draw
|
||||
// ctx.strokeStyle = this.trailFill;
|
||||
// ctx.beginPath();
|
||||
// // ctx.moveTo(t[0].x, t[0].y);
|
||||
// // ctx.lineTo(t[0].x, t[0].y);
|
||||
// // ctx.globalAlpha = 0.2;
|
||||
// // ctx.lineWidth = this.radius * 3;
|
||||
// // ctx.stroke();
|
||||
// ctx.globalAlpha = 0.5 / len;
|
||||
// ctx.lineWidth = this.radius * 1.95;
|
||||
// for (let i = 0; i < len; ++i) {
|
||||
// // ctx.lineWidth *= 0.96;
|
||||
// ctx.lineTo(t[i].x, t[i].y);
|
||||
// ctx.stroke();
|
||||
// }
|
||||
// ctx.globalAlpha = 1;
|
||||
// },
|
||||
curl(range = 1000, mag = -10) {
|
||||
//cause all mobs, and bodies to rotate in a circle
|
||||
applyCurl = function (center, array) {
|
||||
@@ -946,7 +946,7 @@ const mobs = {
|
||||
this.health -= dmg
|
||||
//this.fill = this.color + this.health + ')';
|
||||
this.onDamage(dmg); //custom damage effects
|
||||
if (this.health < 0.05 && this.alive) this.death();
|
||||
if (this.health < b.mobDieAtHealth && this.alive) this.death();
|
||||
}
|
||||
},
|
||||
onDamage() {
|
||||
|
||||
157
todo.md
Normal file
157
todo.md
Normal file
@@ -0,0 +1,157 @@
|
||||
make a var that tracks the last time a kill was made
|
||||
mod - squirrel cage rotor - effect is only active for 10 seconds after killing a mob
|
||||
turn this off in game.checks()
|
||||
mod - do more damage for 10 seconds after killing a mob
|
||||
mod - energy or health regeneration for 10 seconds after killing a mob
|
||||
run this effect in game.checks()
|
||||
|
||||
|
||||
mod - mines - fire something instead of needles on activation
|
||||
foam?, flak?, vacuum bomb, super balls
|
||||
make a different mod for each type of bullet mine can fire
|
||||
|
||||
mod - energy recharges faster when not moving
|
||||
|
||||
lore - a robot (the player) gains self awareness
|
||||
each mod/gun/field is a new tech
|
||||
all the technology leads to the singularity
|
||||
each game run is actually the mech simulating a possible escape
|
||||
this is why the graphics are so bad, its just a simulation
|
||||
final mod is "this is just a simulation"
|
||||
you get immortality and Infinity damage
|
||||
the next level is the final level
|
||||
atmosphere levels that explore lore
|
||||
give the user a rest, between combat
|
||||
low combat more graphics
|
||||
large rotating fan that the player has to move through
|
||||
nonaggressive mobs one mob attacking the passive mobs
|
||||
in the final level you see your self at the starting level, with the wires
|
||||
you shoot your self to wake up?
|
||||
|
||||
shotgun - even more short range effects
|
||||
|
||||
mod: flechettes - each burst fires an extra flechettes
|
||||
mod: flechettes - stick into mobs and do poison damage, like foam
|
||||
|
||||
mod: foam - does extra poison dmg (to get past shields)
|
||||
|
||||
mod: vacuum bomb - does a constant suck
|
||||
|
||||
mod: shield harmonics - large field radius
|
||||
|
||||
mod: shotgun - fire extra shot
|
||||
but also increase spread?
|
||||
|
||||
speed up movement for all gameplay
|
||||
higher gravity, larger jump force
|
||||
faster horizontal acceleration
|
||||
only increase top speed a bit
|
||||
|
||||
mob: targeting laser, then a high speed, no gravity bullet
|
||||
|
||||
add difficulty slider to custom?
|
||||
|
||||
add recursive mod counts to pause screen
|
||||
|
||||
css transition for pause menu
|
||||
|
||||
field that pushes everything back, and can destroy smaller blocks
|
||||
converts blocks into ammo power ups
|
||||
|
||||
mod: make player invisible when...
|
||||
use the flag from phase field
|
||||
when health is low?
|
||||
|
||||
field: a larger radius that attracted enemies
|
||||
still deflected them near the robot
|
||||
convert the health of mobs into energy when they are being attracted
|
||||
|
||||
mod: chance to not die from fatal damage
|
||||
also push mobs and bodies away?
|
||||
also heal?
|
||||
|
||||
mod: bot that fires minigun bullets
|
||||
only fires when your mouse is held down
|
||||
|
||||
mod: do extra damage based on your speed
|
||||
do more damage when not moving?
|
||||
take less damage when not moving?
|
||||
|
||||
gun/field: portals
|
||||
use the code from mines to get them to stick to walls
|
||||
or lasers
|
||||
alternate red and blue portals
|
||||
|
||||
missiles don't explode reliably enough
|
||||
they can bounce, which is cool, but they should still explode right after a bounce
|
||||
|
||||
weekly random challenge where everyone playing each week gets the same random setup.
|
||||
The randomness would be determined by the date so it would sync everyone.
|
||||
power ups still drop, but the drops are determined by a preset list that changes each week.
|
||||
|
||||
mod: do something at the end of each level
|
||||
heal to full
|
||||
should still be effected by the heal reduction at higher difficulty
|
||||
give ammo to current gun
|
||||
give goals/quests for each level
|
||||
how to track goals?
|
||||
take no damage
|
||||
don't shoot
|
||||
|
||||
gun: Spirit Bomb (singularity)
|
||||
use charge up like rail gun
|
||||
electricity graphics like plasma torch
|
||||
suck in nearby mobs, power ups?, blocks?
|
||||
sucked in stuff increase size
|
||||
uses energy
|
||||
hold above the player's head
|
||||
|
||||
Boss levels
|
||||
sensor that locks you in after you enter the boss room
|
||||
boss that eats other mobs and gains stats from them
|
||||
chance to spawn on any level (past level 5)
|
||||
|
||||
add a key that player picks up and needs to set on the exit door to open it
|
||||
|
||||
make power ups keep moving to player if the pickup field is turned off before they get picked up
|
||||
not sure how to do this without adding a constant check
|
||||
|
||||
animate new level spawn by having the map aspects randomly fly into place
|
||||
|
||||
new map with repeating endlessness
|
||||
get ideas from Manifold Garden game
|
||||
if falling, get teleported above the map
|
||||
I tried it, but had trouble getting the camera to adjust to the teleportation
|
||||
this can apply to blocks mobs, and power ups as well
|
||||
|
||||
field power up effects
|
||||
field allows player to hold and throw living mobs
|
||||
and hack mobs
|
||||
|
||||
give mobs more animal-like behaviors
|
||||
like rain world
|
||||
give mobs something to do when they don't see player
|
||||
explore map
|
||||
eat power ups
|
||||
drop power up (if killed after eating one)
|
||||
mobs some times aren't aggressive
|
||||
when low on life or after taking a large hit
|
||||
mobs can fight each other
|
||||
this might be hard to code
|
||||
isolated mobs try to group up.
|
||||
|
||||
game mechanics
|
||||
mechanics that support the physics engine
|
||||
add rope/constraint
|
||||
get ideas from game: limbo / inside
|
||||
environmental hazards
|
||||
laser
|
||||
lava
|
||||
button / switch
|
||||
door
|
||||
fizzler
|
||||
moving platform
|
||||
map zones
|
||||
water
|
||||
low friction ground
|
||||
bouncy ground
|
||||
Reference in New Issue
Block a user