diff --git a/js/bullets.js b/js/bullets.js
index 2be890f..41199cb 100644
--- a/js/bullets.js
+++ b/js/bullets.js
@@ -63,6 +63,8 @@ const b = {
isModHawking: null,
modBabyMissiles: null,
isModIceCrystals: null,
+ modThrowChargeRate: null,
+ isModBlockStun: null,
modOnHealthChange() { //used with acid mod
if (b.isModAcidDmg && mech.health > 0.8) {
game.playerDmgColor = "rgba(0,80,80,0.9)"
@@ -235,6 +237,22 @@ const b = {
b.modNoAmmo = 0;
}
},
+ {
+ name: "mass driver",
+ description: "blocks do 3x more damage to mobs
charge block throws in 3x less time",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return true
+ },
+ requires: "",
+ effect() {
+ b.modThrowChargeRate = 3
+ },
+ remove() {
+ b.modThrowChargeRate = 1
+ }
+ },
{
name: "laser-bot",
description: "a bot defends the space around you
uses a short range laser that drains energy",
diff --git a/js/engine.js b/js/engine.js
index ed7d06c..fa8d0e4 100644
--- a/js/engine.js
+++ b/js/engine.js
@@ -200,15 +200,12 @@ function collisionChecks(event) {
if (obj.classType === "body" && obj.speed > 6) {
const v = Vector.magnitude(Vector.sub(mob[k].velocity, obj.velocity));
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 (mob[k].isShielded) dmg *= 0.5
mob[k].damage(dmg, true);
if (mob[k].distanceToPlayer2() < 1000000) mob[k].foundPlayer();
- // mobs.statusStun(mob[k], 120)
-
game.drawList.push({
- //add dmg to draw queue
x: pairs[i].activeContacts[0].vertex.x,
y: pairs[i].activeContacts[0].vertex.y,
radius: Math.log(2 * dmg + 1.1) * 40,
diff --git a/js/mobs.js b/js/mobs.js
index 5b8794b..dcde5df 100644
--- a/js/mobs.js
+++ b/js/mobs.js
@@ -94,6 +94,7 @@ const mobs = {
who.status.push({
effect() {
who.seePlayer.yes = false;
+ who.seePlayer.recall = 0;
who.seePlayer.position = {
x: who.position.x + 100 * (Math.random() - 0.5),
y: who.position.y + 100 * (Math.random() - 0.5)
diff --git a/js/player.js b/js/player.js
index 2c35c6a..7c95fad 100644
--- a/js/player.js
+++ b/js/player.js
@@ -674,8 +674,6 @@ const mech = {
fieldFire: false,
fieldDamageResistance: 1,
holdingMassScale: 0,
- throwChargeRate: 0,
- throwChargeMax: 0,
fieldArc: 0,
fieldThreshold: 0,
calculateFieldThreshold() {
@@ -691,8 +689,6 @@ const mech = {
mech.isStealth = false;
player.collisionFilter.mask = cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield
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.calculateFieldThreshold(); //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob)
mech.isBodiesAsleep = true;
@@ -796,12 +792,12 @@ const mech = {
if (keys[32] || game.mouseDownRight) {
if (mech.energy > 0.0007) {
mech.energy -= 0.0007;
- mech.throwCharge += mech.throwChargeRate;;
+ mech.throwCharge += 1 / mech.holdingTarget.mass * b.modThrowChargeRate
//draw charge
const x = mech.pos.x + 15 * Math.cos(mech.angle);
const y = mech.pos.y + 15 * Math.sin(mech.angle);
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);
grd.addColorStop(0, "rgba(255,50,150,0.3)");
grd.addColorStop(1, "transparent");
@@ -840,8 +836,9 @@ const mech = {
}
};
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;
Matter.Body.setVelocity(mech.holdingTarget, {
@@ -1378,13 +1375,11 @@ const mech = {
},
{
name: "negative mass field",
- description: "use energy to nullify gravity
and reduce harm by 50%", //
launch larger blocks at much higher speeds
+ description: "use energy to nullify gravity
and reduce harm by 66%", //
launch larger blocks at much higher speeds
fieldDrawRadius: 0,
isEasyToAim: true,
effect: () => {
mech.fieldFire = true;
- // mech.throwChargeRate = 3;
- // mech.throwChargeMax = 110;
mech.holdingMassScale = 0.03; //can hold heavier blocks with lower cost to jumping
mech.hold = function () {
@@ -1396,7 +1391,7 @@ const mech = {
} else if ((keys[32] || game.mouseDownRight) && mech.fieldCDcycle < mech.cycle) { //push away
const DRAIN = 0.00035
if (mech.energy > DRAIN) {
- mech.fieldDamageResistance = 0.5;
+ mech.fieldDamageResistance = 0.66;
mech.grabPowerUp();
mech.lookForPickUp();
// mech.pushMobs360();
diff --git a/todo.txt b/todo.txt
index a307547..74b1631 100644
--- a/todo.txt
+++ b/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 **************
+mod - nails do poison damage
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
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
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
-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 - 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 - robot that attack nearby mobs, and delivers a stun status effect