block throwing
throwing blocks works better for larger blocks, even with no mods new mod - mass driver: blocks do 3x damage and charge 3x faster negative mass field moves faster horizontally doesn't increase throw speed (but still lets you move with huge blocks) can't block take 66% less damage while field is active
This commit is contained in:
@@ -63,6 +63,8 @@ const b = {
|
|||||||
isModHawking: null,
|
isModHawking: null,
|
||||||
modBabyMissiles: null,
|
modBabyMissiles: null,
|
||||||
isModIceCrystals: null,
|
isModIceCrystals: null,
|
||||||
|
modThrowChargeRate: null,
|
||||||
|
isModBlockStun: null,
|
||||||
modOnHealthChange() { //used with acid mod
|
modOnHealthChange() { //used with acid mod
|
||||||
if (b.isModAcidDmg && mech.health > 0.8) {
|
if (b.isModAcidDmg && mech.health > 0.8) {
|
||||||
game.playerDmgColor = "rgba(0,80,80,0.9)"
|
game.playerDmgColor = "rgba(0,80,80,0.9)"
|
||||||
@@ -235,6 +237,22 @@ const b = {
|
|||||||
b.modNoAmmo = 0;
|
b.modNoAmmo = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "mass driver",
|
||||||
|
description: "<strong>blocks</strong> do <strong>3x</strong> more <strong class='color-d'>damage</strong> to mobs<br>charge block <strong>throws</strong> in <strong>3x</strong> less time",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
b.modThrowChargeRate = 3
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
b.modThrowChargeRate = 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "laser-bot",
|
name: "laser-bot",
|
||||||
description: "a bot <strong>defends</strong> the space around you<br>uses a <strong>short range</strong> laser that drains <strong class='color-f'>energy</strong>",
|
description: "a bot <strong>defends</strong> the space around you<br>uses a <strong>short range</strong> laser that drains <strong class='color-f'>energy</strong>",
|
||||||
|
|||||||
@@ -200,15 +200,12 @@ function collisionChecks(event) {
|
|||||||
if (obj.classType === "body" && obj.speed > 6) {
|
if (obj.classType === "body" && obj.speed > 6) {
|
||||||
const v = Vector.magnitude(Vector.sub(mob[k].velocity, obj.velocity));
|
const v = Vector.magnitude(Vector.sub(mob[k].velocity, obj.velocity));
|
||||||
if (v > 9) {
|
if (v > 9) {
|
||||||
let dmg = b.dmgScale * (v * obj.mass * 0.07);
|
let dmg = b.dmgScale * (v * obj.mass * 0.07) * b.modThrowChargeRate;
|
||||||
if (b.isModCrit && !mob[k].seePlayer.recall && !mob[k].shield) dmg *= 5
|
if (b.isModCrit && !mob[k].seePlayer.recall && !mob[k].shield) dmg *= 5
|
||||||
if (mob[k].isShielded) dmg *= 0.5
|
if (mob[k].isShielded) dmg *= 0.5
|
||||||
mob[k].damage(dmg, true);
|
mob[k].damage(dmg, true);
|
||||||
if (mob[k].distanceToPlayer2() < 1000000) mob[k].foundPlayer();
|
if (mob[k].distanceToPlayer2() < 1000000) mob[k].foundPlayer();
|
||||||
// mobs.statusStun(mob[k], 120)
|
|
||||||
|
|
||||||
game.drawList.push({
|
game.drawList.push({
|
||||||
//add dmg to draw queue
|
|
||||||
x: pairs[i].activeContacts[0].vertex.x,
|
x: pairs[i].activeContacts[0].vertex.x,
|
||||||
y: pairs[i].activeContacts[0].vertex.y,
|
y: pairs[i].activeContacts[0].vertex.y,
|
||||||
radius: Math.log(2 * dmg + 1.1) * 40,
|
radius: Math.log(2 * dmg + 1.1) * 40,
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ const mobs = {
|
|||||||
who.status.push({
|
who.status.push({
|
||||||
effect() {
|
effect() {
|
||||||
who.seePlayer.yes = false;
|
who.seePlayer.yes = false;
|
||||||
|
who.seePlayer.recall = 0;
|
||||||
who.seePlayer.position = {
|
who.seePlayer.position = {
|
||||||
x: who.position.x + 100 * (Math.random() - 0.5),
|
x: who.position.x + 100 * (Math.random() - 0.5),
|
||||||
y: who.position.y + 100 * (Math.random() - 0.5)
|
y: who.position.y + 100 * (Math.random() - 0.5)
|
||||||
|
|||||||
19
js/player.js
19
js/player.js
@@ -674,8 +674,6 @@ const mech = {
|
|||||||
fieldFire: false,
|
fieldFire: false,
|
||||||
fieldDamageResistance: 1,
|
fieldDamageResistance: 1,
|
||||||
holdingMassScale: 0,
|
holdingMassScale: 0,
|
||||||
throwChargeRate: 0,
|
|
||||||
throwChargeMax: 0,
|
|
||||||
fieldArc: 0,
|
fieldArc: 0,
|
||||||
fieldThreshold: 0,
|
fieldThreshold: 0,
|
||||||
calculateFieldThreshold() {
|
calculateFieldThreshold() {
|
||||||
@@ -691,8 +689,6 @@ const mech = {
|
|||||||
mech.isStealth = false;
|
mech.isStealth = false;
|
||||||
player.collisionFilter.mask = cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield
|
player.collisionFilter.mask = cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield
|
||||||
mech.holdingMassScale = 0.5;
|
mech.holdingMassScale = 0.5;
|
||||||
mech.throwChargeRate = 2;
|
|
||||||
mech.throwChargeMax = 50;
|
|
||||||
mech.fieldArc = 0.2; //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
mech.fieldArc = 0.2; //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
||||||
mech.calculateFieldThreshold(); //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
mech.calculateFieldThreshold(); //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
|
||||||
mech.isBodiesAsleep = true;
|
mech.isBodiesAsleep = true;
|
||||||
@@ -796,12 +792,12 @@ const mech = {
|
|||||||
if (keys[32] || game.mouseDownRight) {
|
if (keys[32] || game.mouseDownRight) {
|
||||||
if (mech.energy > 0.0007) {
|
if (mech.energy > 0.0007) {
|
||||||
mech.energy -= 0.0007;
|
mech.energy -= 0.0007;
|
||||||
mech.throwCharge += mech.throwChargeRate;;
|
mech.throwCharge += 1 / mech.holdingTarget.mass * b.modThrowChargeRate
|
||||||
//draw charge
|
//draw charge
|
||||||
const x = mech.pos.x + 15 * Math.cos(mech.angle);
|
const x = mech.pos.x + 15 * Math.cos(mech.angle);
|
||||||
const y = mech.pos.y + 15 * Math.sin(mech.angle);
|
const y = mech.pos.y + 15 * Math.sin(mech.angle);
|
||||||
const len = mech.holdingTarget.vertices.length - 1;
|
const len = mech.holdingTarget.vertices.length - 1;
|
||||||
const edge = mech.throwCharge * mech.throwCharge * 0.02;
|
const edge = mech.throwCharge * mech.throwCharge * mech.throwCharge;
|
||||||
const grd = ctx.createRadialGradient(x, y, edge, x, y, edge + 5);
|
const grd = ctx.createRadialGradient(x, y, edge, x, y, edge + 5);
|
||||||
grd.addColorStop(0, "rgba(255,50,150,0.3)");
|
grd.addColorStop(0, "rgba(255,50,150,0.3)");
|
||||||
grd.addColorStop(1, "transparent");
|
grd.addColorStop(1, "transparent");
|
||||||
@@ -840,8 +836,9 @@ const mech = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
setTimeout(solid, 150, mech.holdingTarget);
|
setTimeout(solid, 150, mech.holdingTarget);
|
||||||
//throw speed scales a bit with mass
|
|
||||||
const speed = Math.min(85, Math.min(54 / mech.holdingTarget.mass + 5, 48) * Math.min(mech.throwCharge, mech.throwChargeMax) / 50);
|
const charge = Math.min(mech.throwCharge / 5, 1)
|
||||||
|
const speed = charge * Math.min(80, 64 / Math.pow(mech.holdingTarget.mass, 0.25));
|
||||||
|
|
||||||
mech.throwCharge = 0;
|
mech.throwCharge = 0;
|
||||||
Matter.Body.setVelocity(mech.holdingTarget, {
|
Matter.Body.setVelocity(mech.holdingTarget, {
|
||||||
@@ -1378,13 +1375,11 @@ const mech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "negative mass field",
|
name: "negative mass field",
|
||||||
description: "use <strong class='color-f'>energy</strong> to nullify <strong style='letter-spacing: 12px;'>gravity</strong><br>and reduce <strong>harm</strong> by <strong>50%</strong>", //<br><strong>launch</strong> larger blocks at much higher speeds
|
description: "use <strong class='color-f'>energy</strong> to nullify <strong style='letter-spacing: 12px;'>gravity</strong><br>and reduce <strong>harm</strong> by <strong>66%</strong>", //<br><strong>launch</strong> larger blocks at much higher speeds
|
||||||
fieldDrawRadius: 0,
|
fieldDrawRadius: 0,
|
||||||
isEasyToAim: true,
|
isEasyToAim: true,
|
||||||
effect: () => {
|
effect: () => {
|
||||||
mech.fieldFire = true;
|
mech.fieldFire = true;
|
||||||
// mech.throwChargeRate = 3;
|
|
||||||
// mech.throwChargeMax = 110;
|
|
||||||
mech.holdingMassScale = 0.03; //can hold heavier blocks with lower cost to jumping
|
mech.holdingMassScale = 0.03; //can hold heavier blocks with lower cost to jumping
|
||||||
|
|
||||||
mech.hold = function () {
|
mech.hold = function () {
|
||||||
@@ -1396,7 +1391,7 @@ const mech = {
|
|||||||
} else if ((keys[32] || game.mouseDownRight) && mech.fieldCDcycle < mech.cycle) { //push away
|
} else if ((keys[32] || game.mouseDownRight) && mech.fieldCDcycle < mech.cycle) { //push away
|
||||||
const DRAIN = 0.00035
|
const DRAIN = 0.00035
|
||||||
if (mech.energy > DRAIN) {
|
if (mech.energy > DRAIN) {
|
||||||
mech.fieldDamageResistance = 0.5;
|
mech.fieldDamageResistance = 0.66;
|
||||||
mech.grabPowerUp();
|
mech.grabPowerUp();
|
||||||
mech.lookForPickUp();
|
mech.lookForPickUp();
|
||||||
// mech.pushMobs360();
|
// mech.pushMobs360();
|
||||||
|
|||||||
25
todo.txt
25
todo.txt
@@ -1,10 +1,18 @@
|
|||||||
|
new patch
|
||||||
|
throwing blocks works better for larger blocks, even with no mods
|
||||||
|
new mod - mass driver: blocks do 3x damage and charge 3x faster
|
||||||
|
negative mass field
|
||||||
|
moves faster horizontally
|
||||||
|
doesn't increase throw speed (but still lets you move with huge blocks)
|
||||||
|
can't block
|
||||||
|
take 66% less damage while field is active
|
||||||
|
bremsstrahlung radiation only applies to the harmonic field
|
||||||
|
|
||||||
************** TODO - n-gon **************
|
************** TODO - n-gon **************
|
||||||
|
|
||||||
|
mod - nails do poison damage
|
||||||
mod - increase laser bot range, and reduce energy drain
|
mod - increase laser bot range, and reduce energy drain
|
||||||
|
|
||||||
scale block throwing by mech.holdingMassScale
|
|
||||||
(and simplify the code in throw)
|
|
||||||
|
|
||||||
mod - mines become a turret that fires nails
|
mod - mines become a turret that fires nails
|
||||||
it could float to the mouse location on fire
|
it could float to the mouse location on fire
|
||||||
|
|
||||||
@@ -12,20 +20,9 @@ dash - mod when pressing left or right on the ground, teleport to the right unt
|
|||||||
do repeated horizontal zone queries until they hit map or block
|
do repeated horizontal zone queries until they hit map or block
|
||||||
up to a max range of like 10 player widths
|
up to a max range of like 10 player widths
|
||||||
|
|
||||||
weak anthropic principle - sets health to 3% if it's lower than 3% when triggered.
|
|
||||||
|
|
||||||
bug - mech.fieldShieldingScale doesn't reset when switching fields
|
bug - mech.fieldShieldingScale doesn't reset when switching fields
|
||||||
|
|
||||||
negative mass field needs a buff
|
|
||||||
repel blocks away
|
|
||||||
scale repulsion force with speed of projectile
|
|
||||||
choose clockwise or counter clock wise base on which force direction makes the smallest angle with the velocity
|
|
||||||
no longer blocks, but the player takes 50% less damage from all sources while the field is active
|
|
||||||
allow player to hold larger block, but give throwing blocks at high speed for no energy to a mob
|
|
||||||
|
|
||||||
mod - blocks stun mobs
|
mod - blocks stun mobs
|
||||||
mod - throwing blocks at full power converts the block into nails
|
|
||||||
would this cause problems for block based puzzles?
|
|
||||||
mod or field - turn blocks into spores or drones
|
mod or field - turn blocks into spores or drones
|
||||||
|
|
||||||
mod - robot that attack nearby mobs, and delivers a stun status effect
|
mod - robot that attack nearby mobs, and delivers a stun status effect
|
||||||
|
|||||||
Reference in New Issue
Block a user