various adjustments
This commit is contained in:
@@ -40,7 +40,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Anti-Matter Cores",
|
name: "Anti-Matter Cores",
|
||||||
description: "your <strong>explosions</strong> are larger and more dangerous",
|
description: "The radius of your <strong>explosions</strong> is doubled",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
b.mod = 1
|
b.mod = 1
|
||||||
b.modText();
|
b.modText();
|
||||||
@@ -50,7 +50,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "High Caliber Bullets",
|
name: "Depleted Uranium Rounds",
|
||||||
description: "your bullets are <strong>larger</strong> and do more physical damage",
|
description: "your bullets are <strong>larger</strong> and do more physical damage",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
b.mod = 2
|
b.mod = 2
|
||||||
@@ -69,7 +69,7 @@ const b = {
|
|||||||
b.mod = 3
|
b.mod = 3
|
||||||
b.modText();
|
b.modText();
|
||||||
b.setModDefaults(); //good with laser, and all fields
|
b.setModDefaults(); //good with laser, and all fields
|
||||||
b.modEnergySiphon = 0.2;
|
b.modEnergySiphon = 0.25;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -94,12 +94,12 @@ const b = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Decay Resistant Topology",
|
name: "Decay Resistant Topology",
|
||||||
description: "your bullets <strong>last 30% longer</strong>",
|
description: "your bullets <strong>last 40% longer</strong>",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
b.mod = 6
|
b.mod = 6
|
||||||
b.modText();
|
b.modText();
|
||||||
b.setModDefaults(); //good with: drones, super balls, spore, missiles, wave beam(range), rapid fire(range), flak(range)
|
b.setModDefaults(); //good with: drones, super balls, spore, missiles, wave beam(range), rapid fire(range), flak(range)
|
||||||
b.modBulletsLastLonger = 1.30
|
b.modBulletsLastLonger = 1.40
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
/* TODO: *******************************************
|
/* TODO: *******************************************
|
||||||
*****************************************************
|
*****************************************************
|
||||||
|
|
||||||
make player legs just slide if the player is above the normal speed
|
|
||||||
like when you fire the one shot
|
|
||||||
|
|
||||||
make power ups keep moving to player if the field is turned off
|
make power ups keep moving to player if the field is turned off
|
||||||
|
|
||||||
levels spawn by having the map aspects randomly fly into place
|
levels spawn by having the map aspects randomly fly into place
|
||||||
@@ -12,11 +9,9 @@ levels spawn by having the map aspects randomly fly into place
|
|||||||
new map with repeating endlessness
|
new map with repeating endlessness
|
||||||
get ideas from Manifold Garden game
|
get ideas from Manifold Garden game
|
||||||
if falling, get teleported above the map
|
if falling, get teleported above the map
|
||||||
|
I tried it, but had trouble getting the camera to adjust
|
||||||
this can apply to blocks mobs, and power ups as well
|
this can apply to blocks mobs, and power ups as well
|
||||||
|
|
||||||
|
|
||||||
when paused show details on field, mods, guns?
|
|
||||||
|
|
||||||
Find a diegetic way to see player damage (and or field meter too)
|
Find a diegetic way to see player damage (and or field meter too)
|
||||||
a health meter, like the field meter above player? (doesn't work with the field meter)
|
a health meter, like the field meter above player? (doesn't work with the field meter)
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const level = {
|
|||||||
onLevel: 0,
|
onLevel: 0,
|
||||||
start() {
|
start() {
|
||||||
if (game.levelsCleared === 0) {
|
if (game.levelsCleared === 0) {
|
||||||
// game.levelsCleared = 6; //for testing to simulate possible mobs spawns
|
// game.levelsCleared = 16; //for testing to simulate possible mobs spawns
|
||||||
// b.giveGuns("all", 1000)
|
// b.giveGuns("all", 1000)
|
||||||
// b.giveGuns(3) // set a starting gun for testing
|
// b.giveGuns(3) // set a starting gun for testing
|
||||||
// mech.fieldUpgrades[2].effect(); //give a field power up for testing
|
// mech.fieldUpgrades[2].effect(); //give a field power up for testing
|
||||||
|
|||||||
72
js/player.js
72
js/player.js
@@ -359,12 +359,11 @@ const mech = {
|
|||||||
alive: true,
|
alive: true,
|
||||||
death() {
|
death() {
|
||||||
if (b.modIsImmortal) { //if player has the immortality buff, spawn on the same level with randomized stats
|
if (b.modIsImmortal) { //if player has the immortality buff, spawn on the same level with randomized stats
|
||||||
//remove mod
|
//remove mods
|
||||||
b.mod = null
|
b.mod = null
|
||||||
b.setModDefaults();
|
b.setModDefaults();
|
||||||
b.modText();
|
b.modText();
|
||||||
|
|
||||||
|
|
||||||
function randomizeField() {
|
function randomizeField() {
|
||||||
if (game.levelsCleared > 5) {
|
if (game.levelsCleared > 5) {
|
||||||
mech.fieldUpgrades[Math.floor(Math.random() * (mech.fieldUpgrades.length))].effect();
|
mech.fieldUpgrades[Math.floor(Math.random() * (mech.fieldUpgrades.length))].effect();
|
||||||
@@ -383,17 +382,23 @@ const mech = {
|
|||||||
b.inventory = []; //removes guns and ammo
|
b.inventory = []; //removes guns and ammo
|
||||||
for (let i = 0, len = b.guns.length; i < len; ++i) {
|
for (let i = 0, len = b.guns.length; i < len; ++i) {
|
||||||
b.guns[i].have = false;
|
b.guns[i].have = false;
|
||||||
if (b.guns[i].ammo != Infinity) b.guns[i].ammo = 0;
|
if (b.guns[i].ammo !== Infinity) b.guns[i].ammo = 0;
|
||||||
}
|
}
|
||||||
if (game.levelsCleared > 0) powerUps.gun.effect();
|
if (game.levelsCleared > 0) powerUps.gun.effect();
|
||||||
if (game.levelsCleared > 1) powerUps.gun.effect();
|
if (game.levelsCleared > 1) powerUps.gun.effect();
|
||||||
if (game.levelsCleared > 3) powerUps.gun.effect();
|
if (game.levelsCleared > 3) powerUps.gun.effect();
|
||||||
if (game.levelsCleared > 6) powerUps.gun.effect();
|
if (game.levelsCleared > 6) powerUps.gun.effect();
|
||||||
game.makeGunHUD();
|
//randomize ammo
|
||||||
|
for (let i = 0, len = b.inventory.length; i < len; i++) {
|
||||||
|
if (b.guns[b.inventory[i]].ammo !== Infinity) {
|
||||||
|
b.guns[b.inventory[i]].ammo = Math.max(0, Math.floor(2.2 * b.guns[b.inventory[i]].ammo * (Math.random() - 0.15)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
game.makeGunHUD(); //update gun HUD
|
||||||
}
|
}
|
||||||
|
|
||||||
game.wipe = function () { //set wipe to have trails
|
game.wipe = function () { //set wipe to have trails
|
||||||
ctx.fillStyle = "rgba(255,255,255,0.005)";
|
ctx.fillStyle = "rgba(255,255,255,0)";
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -730,33 +735,29 @@ const mech = {
|
|||||||
grabPowerUp() {
|
grabPowerUp() {
|
||||||
//look for power ups to grab
|
//look for power ups to grab
|
||||||
if (mech.fieldCDcycle < mech.cycle) {
|
if (mech.fieldCDcycle < mech.cycle) {
|
||||||
const grabPowerUpRange2 = (this.grabRange + 200) * (this.grabRange + 200)
|
const grabPowerUpRange2 = (this.grabRange + 220) * (this.grabRange + 220)
|
||||||
for (let i = 0, len = powerUp.length; i < len; ++i) {
|
for (let i = 0, len = powerUp.length; i < len; ++i) {
|
||||||
const dxP = mech.pos.x - powerUp[i].position.x;
|
const dxP = mech.pos.x - powerUp[i].position.x;
|
||||||
const dyP = mech.pos.y - powerUp[i].position.y;
|
const dyP = mech.pos.y - powerUp[i].position.y;
|
||||||
const dist2 = dxP * dxP + dyP * dyP;
|
const dist2 = dxP * dxP + dyP * dyP;
|
||||||
|
// float towards player if looking at and in range or if very close to player
|
||||||
// float towards player if looking at and in range or if very close to player
|
if (dist2 < grabPowerUpRange2 && this.lookingAt(powerUp[i]) || dist2 < 16000) {
|
||||||
if (dist2 < grabPowerUpRange2 && this.lookingAt(powerUp[i]) || dist2 < 14000) {
|
if (dist2 < 5000) { //use power up if it is close enough
|
||||||
|
Matter.Body.setVelocity(player, { //player knock back, after grabbing power up
|
||||||
|
x: player.velocity.x + ((powerUp[i].velocity.x * powerUp[i].mass) / player.mass) * 0.3,
|
||||||
|
y: player.velocity.y + ((powerUp[i].velocity.y * powerUp[i].mass) / player.mass) * 0.3
|
||||||
|
});
|
||||||
|
mech.usePowerUp(i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.fieldMeter -= this.fieldRegen * 0.5;
|
this.fieldMeter -= this.fieldRegen * 0.5;
|
||||||
powerUp[i].force.x += 7 * (dxP / dist2) * powerUp[i].mass;
|
powerUp[i].force.x += 7 * (dxP / dist2) * powerUp[i].mass;
|
||||||
powerUp[i].force.y += 7 * (dyP / dist2) * powerUp[i].mass - powerUp[i].mass * game.g; //negate gravity
|
powerUp[i].force.y += 7 * (dyP / dist2) * powerUp[i].mass - powerUp[i].mass * game.g; //negate gravity
|
||||||
//extra friction
|
//extra friction
|
||||||
Matter.Body.setVelocity(powerUp[i], {
|
Matter.Body.setVelocity(powerUp[i], {
|
||||||
x: powerUp[i].velocity.x * 0.4,
|
x: powerUp[i].velocity.x * 0.11,
|
||||||
y: powerUp[i].velocity.y * 0.4
|
y: powerUp[i].velocity.y * 0.11
|
||||||
});
|
});
|
||||||
if (dist2 < 5000) { //use power up if it is close enough
|
|
||||||
//player knockback
|
|
||||||
Matter.Body.setVelocity(player, {
|
|
||||||
x: player.velocity.x + ((powerUp[i].velocity.x * powerUp[i].mass) / player.mass) * 0.2,
|
|
||||||
y: player.velocity.y + ((powerUp[i].velocity.y * powerUp[i].mass) / player.mass) * 0.2
|
|
||||||
});
|
|
||||||
mech.usePowerUp(i);
|
|
||||||
// this.fireCDcycle = mech.cycle + 10; //cool down
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -775,7 +776,6 @@ const mech = {
|
|||||||
//mob and player knock back
|
//mob and player knock back
|
||||||
const angle = Math.atan2(player.position.y - mob[i].position.y, player.position.x - mob[i].position.x);
|
const angle = Math.atan2(player.position.y - mob[i].position.y, player.position.x - mob[i].position.x);
|
||||||
const mass = Math.min(Math.sqrt(mob[i].mass), 4);
|
const mass = Math.min(Math.sqrt(mob[i].mass), 4);
|
||||||
// console.log(mob[i].mass, Math.sqrt(mob[i].mass), mass)
|
|
||||||
Matter.Body.setVelocity(mob[i], {
|
Matter.Body.setVelocity(mob[i], {
|
||||||
x: player.velocity.x - (15 * Math.cos(angle)) / mass,
|
x: player.velocity.x - (15 * Math.cos(angle)) / mass,
|
||||||
y: player.velocity.y - (15 * Math.sin(angle)) / mass
|
y: player.velocity.y - (15 * Math.sin(angle)) / mass
|
||||||
@@ -860,21 +860,21 @@ const mech = {
|
|||||||
pickUp() {
|
pickUp() {
|
||||||
//triggers when a hold target exits and field button is released
|
//triggers when a hold target exits and field button is released
|
||||||
this.isHolding = true;
|
this.isHolding = true;
|
||||||
if (this.holdingTarget) {
|
|
||||||
this.holdingTarget.collisionFilter.category = 0x010000;
|
|
||||||
this.holdingTarget.collisionFilter.mask = 0x011111;
|
|
||||||
}
|
|
||||||
//combine momentum
|
|
||||||
const px = player.velocity.x * player.mass + this.holdingTarget.velocity.x * this.holdingTarget.mass;
|
|
||||||
const py = player.velocity.y * player.mass + this.holdingTarget.velocity.y * this.holdingTarget.mass;
|
|
||||||
Matter.Body.setVelocity(player, {
|
|
||||||
x: px / (player.mass + this.holdingTarget.mass),
|
|
||||||
y: py / (player.mass + this.holdingTarget.mass)
|
|
||||||
});
|
|
||||||
this.definePlayerMass(5 + this.holdingTarget.mass * this.holdingMassScale)
|
this.definePlayerMass(5 + this.holdingTarget.mass * this.holdingMassScale)
|
||||||
//collide with nothing
|
//collide with nothing
|
||||||
this.holdingTarget.collisionFilter.category = 0x000000;
|
this.holdingTarget.collisionFilter.category = 0x000000;
|
||||||
this.holdingTarget.collisionFilter.mask = 0x000000;
|
this.holdingTarget.collisionFilter.mask = 0x000000;
|
||||||
|
// if (this.holdingTarget) {
|
||||||
|
// this.holdingTarget.collisionFilter.category = 0x010000;
|
||||||
|
// this.holdingTarget.collisionFilter.mask = 0x011111;
|
||||||
|
// }
|
||||||
|
// combine momentum // this doesn't feel right in game
|
||||||
|
// const px = player.velocity.x * player.mass + this.holdingTarget.velocity.x * this.holdingTarget.mass;
|
||||||
|
// const py = player.velocity.y * player.mass + this.holdingTarget.velocity.y * this.holdingTarget.mass;
|
||||||
|
// Matter.Body.setVelocity(player, {
|
||||||
|
// x: px / (player.mass + this.holdingTarget.mass),
|
||||||
|
// y: py / (player.mass + this.holdingTarget.mass)
|
||||||
|
// });
|
||||||
},
|
},
|
||||||
wakeCheck() {
|
wakeCheck() {
|
||||||
if (mech.isBodiesAsleep) {
|
if (mech.isBodiesAsleep) {
|
||||||
@@ -1007,7 +1007,7 @@ const mech = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Electrostatic Force Field",
|
name: "Electrostatic Field",
|
||||||
description: "field does <strong>damage</strong> on contact<br> blocks are thrown at a higher velocity<br> increased field regeneration",
|
description: "field does <strong>damage</strong> on contact<br> blocks are thrown at a higher velocity<br> increased field regeneration",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
mech.fieldMode = 2;
|
mech.fieldMode = 2;
|
||||||
@@ -1016,7 +1016,7 @@ const mech = {
|
|||||||
//throw quicker and harder
|
//throw quicker and harder
|
||||||
mech.grabRange = 225;
|
mech.grabRange = 225;
|
||||||
mech.fieldShieldingScale = 2;
|
mech.fieldShieldingScale = 2;
|
||||||
mech.fieldRegen *= 3;
|
mech.fieldRegen *= 2;
|
||||||
mech.throwChargeRate = 3;
|
mech.throwChargeRate = 3;
|
||||||
mech.throwChargeMax = 140;
|
mech.throwChargeMax = 140;
|
||||||
mech.fieldDamage = 5; //passive field does extra damage
|
mech.fieldDamage = 5; //passive field does extra damage
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
effect() {
|
effect() {
|
||||||
const previousMode = b.mod
|
const previousMode = b.mod
|
||||||
|
|
||||||
if (this.mode === null) { //this.mode is set if the power up has been ejected from player
|
if (this.mode === null) { //this.mode is set if the power up has been ejected from player
|
||||||
mode = b.mod //start with current mob
|
mode = b.mod //start with current mob
|
||||||
while (mode === b.mod) {
|
while (mode === b.mod) {
|
||||||
@@ -102,7 +101,7 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
gun: {
|
gun: {
|
||||||
name: "gun",
|
name: "gun",
|
||||||
color: "#0cf",
|
color: "#0bf",
|
||||||
size() {
|
size() {
|
||||||
return 30;
|
return 30;
|
||||||
},
|
},
|
||||||
@@ -231,38 +230,4 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
World.add(engine.world, powerUp[i]); //add to world
|
World.add(engine.world, powerUp[i]); //add to world
|
||||||
},
|
},
|
||||||
attractionLoop() {
|
|
||||||
for (let i = 0, len = powerUp.length; i < len; ++i) {
|
|
||||||
const dxP = player.position.x - powerUp[i].position.x;
|
|
||||||
const dyP = player.position.y - powerUp[i].position.y;
|
|
||||||
const dist2 = dxP * dxP + dyP * dyP;
|
|
||||||
//gravitation for pickup
|
|
||||||
if (dist2 < 100000 && (powerUp[i].name != "heal" || mech.health < 1)) {
|
|
||||||
if (dist2 < 2000) {
|
|
||||||
//knock back from grabbing power up
|
|
||||||
Matter.Body.setVelocity(player, {
|
|
||||||
x: player.velocity.x + ((powerUp[i].velocity.x * powerUp[i].mass) / player.mass) * 0.25,
|
|
||||||
y: player.velocity.y + ((powerUp[i].velocity.y * powerUp[i].mass) / player.mass) * 0.25
|
|
||||||
});
|
|
||||||
mech.usePowerUp(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//power up needs to be able to see player to gravitate
|
|
||||||
if (Matter.Query.ray(map, powerUp[i].position, player.position).length === 0) { // && Matter.Query.ray(body, powerUp[i].position, player.position).length === 0
|
|
||||||
//extra friction
|
|
||||||
Matter.Body.setVelocity(powerUp[i], {
|
|
||||||
x: powerUp[i].velocity.x * 0.97,
|
|
||||||
y: powerUp[i].velocity.y * 0.97
|
|
||||||
});
|
|
||||||
//float towards player
|
|
||||||
powerUp[i].force.x += (dxP / dist2) * powerUp[i].mass * 1.6;
|
|
||||||
powerUp[i].force.y += (dyP / dist2) * powerUp[i].mass * 1.6 - powerUp[i].mass * game.g; //negate gravity
|
|
||||||
//draw the pulling effect
|
|
||||||
ctx.globalAlpha = 0.2;
|
|
||||||
mech.drawHold(powerUp[i], false);
|
|
||||||
ctx.globalAlpha = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
@@ -137,7 +137,7 @@ summary {
|
|||||||
top: 15px;
|
top: 15px;
|
||||||
right: 15px;
|
right: 15px;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
font-size: 19px;
|
font-size: 20px;
|
||||||
color: #000;
|
color: #000;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
@@ -158,7 +158,7 @@ summary {
|
|||||||
line-height: 150%;
|
line-height: 150%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
font-size: 1.3em;
|
font-size: 1.25em;
|
||||||
color: #000;
|
color: #000;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 0.5s;
|
transition: opacity 0.5s;
|
||||||
|
|||||||
Reference in New Issue
Block a user