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