diff --git a/index.html b/index.html
index 1784764..4c20cc3 100644
--- a/index.html
+++ b/index.html
@@ -104,15 +104,18 @@
-
+
-
+
+
+
+
diff --git a/js/bullets.js b/js/bullets.js
index f69054f..df328d3 100644
--- a/js/bullets.js
+++ b/js/bullets.js
@@ -57,6 +57,7 @@ const b = {
isModMissileField: null,
isModFlechetteMultiShot: null,
isModMineAmmoBack: null,
+ isModPlasmaRange: null,
isModRailNails: null,
isModHawking: null,
modBabyMissiles: null,
@@ -538,22 +539,6 @@ const b = {
b.modBlockDmg = 0;
}
},
- {
- name: "field superposition",
- description: "increase your field radius by 40%",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name !== "time dilation field" && mech.fieldUpgrades[mech.fieldMode].name !== "phase decoherence field"
- },
- requires: "not time dilation field
requires not phase decoherence field",
- effect() {
- mech.fieldRange = 175 * 1.4
- },
- remove() {
- mech.fieldRange = 175;
- }
- },
{
name: "energy conservation",
description: "gain energy proportional to damage done",
@@ -672,7 +657,7 @@ const b = {
},
{
name: "catabolism",
- description: "when you fire while out of ammo
convert 3% of current health into ammo",
+ description: "gain ammo when you fire while out of ammo
drains 3% of current remaining health",
maxCount: 1,
count: 0,
allowed() {
@@ -783,7 +768,7 @@ const b = {
},
{
name: "shotgun spin-statistics",
- description: "firing your shotgun makes you
immune to collisions for 1/2 a second",
+ description: "firing the shotgun makes you
immune to collisions for 1/2 a second",
maxCount: 1,
count: 0,
allowed() {
@@ -799,7 +784,7 @@ const b = {
},
{
name: "super duper",
- description: "you fire +1 additional super ball",
+ description: "fire +1 additional super ball",
maxCount: 9,
count: 0,
allowed() {
@@ -847,7 +832,7 @@ const b = {
},
{
name: "wave phase velocity",
- description: "your wave beam propagates faster through solids",
+ description: "the wave beam propagates faster in solids",
maxCount: 1,
count: 0,
allowed() {
@@ -863,9 +848,25 @@ const b = {
b.modWaveSpeedBody = 0.25
}
},
+ {
+ name: "pocket universe",
+ description: "wave beam bullets last 4 times longer
bullets are confined to a region around player",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return b.haveGunCheck("wave beam")
+ },
+ requires: "wave beam",
+ effect() {
+ b.isModWaveReflect = true
+ },
+ remove() {
+ b.isModWaveReflect = false
+ }
+ },
{
name: "self-replication",
- description: "when your missiles explode
they fire +1 smaller missiles",
+ description: "when missiles explode
they fire +1 smaller missiles",
maxCount: 9,
count: 0,
allowed() {
@@ -901,7 +902,7 @@ const b = {
},
{
name: "mine reclamation",
- description: "ammo from undetonated mines is returned
at the end of a level or after 2000 second",
+ description: "retrieve ammo from all undetonated mines
and 20% of mines after detonation",
maxCount: 1,
count: 0,
allowed() {
@@ -917,7 +918,7 @@ const b = {
},
{
name: "tinsellated flagella",
- description: "your spores accelerate 33% faster",
+ description: "spores accelerate 33% faster",
maxCount: 1,
count: 0,
allowed() {
@@ -981,7 +982,7 @@ const b = {
},
{
name: "specular reflection",
- description: "your laser gains +1 reflection
+33% laser damage and energy drain",
+ description: "the laser gains +1 reflection
+33% laser damage and energy drain",
maxCount: 9,
count: 0,
allowed() {
@@ -1005,7 +1006,7 @@ const b = {
maxCount: 1,
count: 0,
allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "field emitter"
+ return mech.fieldUpgrades[mech.fieldMode].name === "field emitter" && !game.isEasyToAimMode
},
requires: "basic field emitter",
effect() {
@@ -1017,6 +1018,54 @@ const b = {
if (mech.fieldUpgrades[mech.fieldMode].name === "field emitter") mech.fieldShieldingScale = b.modFieldEfficiency;
}
},
+ {
+ name: "plasma torch",
+ description: "increase plasma torch's range by 33%",
+ maxCount: 9,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "plasma torch"
+ },
+ requires: "plasma torch",
+ effect() {
+ b.isModPlasmaRange += 0.33;
+ },
+ remove() {
+ b.isModPlasmaRange = 1;
+ }
+ },
+ {
+ name: "Hawking radiation",
+ description: "negative mass field leaks virtual particles
mobs inside the field take damage",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field"
+ },
+ requires: "negative mass field",
+ effect() {
+ b.isModHawking = true;
+ },
+ remove() {
+ b.isModHawking = 0;
+ }
+ },
+ {
+ name: "field superposition",
+ description: "increase field radii by 40%",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return mech.fieldUpgrades[mech.fieldMode].name === "standing wave harmonics"
+ },
+ requires: "standing wave harmonics",
+ effect() {
+ mech.fieldRange = 175 * 1.4
+ },
+ remove() {
+ mech.fieldRange = 175;
+ }
+ },
{
name: "mycelium manufacturing",
description: "nano-scale manufacturing is repurposed
excess energy used to grow spores",
@@ -1049,22 +1098,6 @@ const b = {
b.isModMissileField = false;
}
},
- {
- name: "hawking radiation",
- description: "negative mass field can no longer block
instead it damages mobs within range",
- maxCount: 1,
- count: 0,
- allowed() {
- return mech.fieldUpgrades[mech.fieldMode].name === "negative mass field"
- },
- requires: "negative mass field",
- effect() {
- b.isModHawking = true;
- },
- remove() {
- b.isModHawking = false;
- }
- },
],
removeMod(index) {
b.mods[index].remove();
@@ -1484,7 +1517,7 @@ const b = {
minDmgSpeed: 5,
stillCount: 0,
isArmed: false,
- endCycle: game.cycle + 2000 + 360 * Math.random(),
+ endCycle: Infinity,
lookFrequency: 41 + Math.floor(23 * Math.random()),
range: 700,
onDmg() {},
@@ -1557,23 +1590,13 @@ const b = {
Matter.Query.ray(map, this.position, mob[i].position).length === 0 &&
Matter.Query.ray(body, this.position, mob[i].position).length === 0) {
this.endCycle = 0 //end life if mob is near and visible
- isAmmoBack = false;
+ if (Math.random() < 0.8) isAmmoBack = false; //20% chance to get ammo back from undetonated mines
}
}
}
}
},
onEnd() {
- if (isAmmoBack) {
- for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
- if (b.guns[i].name === "mine") {
- b.guns[i].ammo++
- game.updateGunHUD();
- break;
- }
- }
- return
- }
if (this.isArmed) {
const targets = [] //target nearby mobs
for (let i = 0, len = mob.length; i < len; i++) {
@@ -1605,6 +1628,15 @@ const b = {
}
}
}
+ if (isAmmoBack) {
+ for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
+ if (b.guns[i].name === "mine") {
+ b.guns[i].ammo++
+ game.updateGunHUD();
+ break;
+ }
+ }
+ }
}
});
bullet[bIndex].torque += bullet[bIndex].inertia * 0.0002 * (0.5 - Math.random())
@@ -2002,6 +2034,7 @@ const b = {
recordedAmmo: 0,
have: false,
isStarterGun: true,
+ isEasyToAim: false,
fire() {
const me = bullet.length;
b.muzzleFlash(15);
@@ -2024,6 +2057,7 @@ const b = {
ammoPack: 8,
have: false,
isStarterGun: true,
+ isEasyToAim: true,
fire() {
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 55 : 30) * b.modFireRate); // cool down
if (b.isModShotgunImmune) mech.collisionImmuneCycle = mech.cycle + 30; //player is immune to collision damage for 30 cycles
@@ -2055,12 +2089,13 @@ const b = {
},
{
name: "super balls", //2
- description: "fire five balls in a wide arc
balls bounce with no momentum loss",
+ description: "fire four balls in a wide arc
balls bounce with no momentum loss",
ammo: 0,
- ammoPack: 8,
+ ammoPack: 9,
have: false,
num: 5,
isStarterGun: true,
+ isEasyToAim: true,
fire() {
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 25 : 20) * b.modFireRate); // cool down
b.muzzleFlash(20);
@@ -2093,10 +2128,11 @@ const b = {
name: "fléchettes", //3
description: "fire a volley of precise high velocity needles",
ammo: 0,
- ammoPack: 24,
- defaultAmmoPack: 24,
+ ammoPack: 22,
+ defaultAmmoPack: 22,
have: false,
isStarterGun: true,
+ isEasyToAim: false,
count: 0, //used to track how many shots are in a volley before a big CD
lastFireCycle: 0, //use to remember how longs its been since last fire, used to reset count
fire() {
@@ -2116,7 +2152,7 @@ const b = {
const me = bullet.length;
bullet[me] = Bodies.rectangle(mech.pos.x + 40 * Math.cos(mech.angle), mech.pos.y + 40 * Math.sin(mech.angle), 45 * b.modBulletSize, 1.4 * b.modBulletSize, b.fireAttributes(angle));
bullet[me].endCycle = game.cycle + 180;
- bullet[me].dmg = 1.15;
+ bullet[me].dmg = 1.3;
bullet[me].do = function () {
if (this.speed < 10) this.force.y += this.mass * 0.0003; //no gravity until it slows don to improve aiming
};
@@ -2141,6 +2177,7 @@ const b = {
ammoPack: 100,
have: false,
isStarterGun: true,
+ isEasyToAim: false,
fire() {
const me = bullet.length;
const dir = mech.angle
@@ -2149,12 +2186,13 @@ const b = {
bullet[me] = Bodies.polygon(mech.pos.x + 25 * Math.cos(dir), mech.pos.y + 25 * Math.sin(dir), 7, 5 * b.modBulletSize, {
angle: dir,
cycle: 0,
- endCycle: game.cycle + Math.floor(120 * b.isModBulletsLastLonger),
+ endCycle: game.cycle + Math.floor((b.isModWaveReflect ? 480 : 120) * b.isModBulletsLastLonger),
inertia: Infinity,
frictionAir: 0,
slow: 0,
minDmgSpeed: 0,
dmg: 0,
+ isJustReflected: false,
classType: "bullet",
collisionFilter: {
category: 0,
@@ -2177,9 +2215,9 @@ const b = {
for (let i = 0; i < q.length; i++) {
slowCheck = 0.3;
Matter.Body.setPosition(this, Vector.add(this.position, q[i].velocity)) //move with the medium
- let dmg = b.dmgScale * 0.1
- q[i].foundPlayer();
+ let dmg = b.dmgScale * 0.5 / Math.sqrt(q[i].mass)
q[i].damage(dmg);
+ q[i].foundPlayer();
game.drawList.push({ //add dmg to draw queue
x: this.position.x,
y: this.position.y,
@@ -2198,6 +2236,40 @@ const b = {
const wiggle = Vector.mult(transverse, wiggleMag * Math.cos(this.cycle * 0.35))
Matter.Body.setPosition(this, Vector.add(this.position, wiggle))
}
+ // if (b.isModWaveReflect) { //single reflection
+ // const sub = Vector.sub(this.position, mech.pos)
+ // if (Vector.magnitude(sub) > 630) {
+ // // Matter.Body.setPosition(this, Vector.add(this.position, Vector.mult(Vector.normalise(sub), -2 * POCKET_RANGE))) //teleport to opposite side
+ // if (!this.isJustReflected) {
+ // Matter.Body.setVelocity(this, Vector.mult(this.velocity, -1)); //reflect
+ // this.isJustReflected = true;
+ // }
+ // }
+ // }
+
+ if (b.isModWaveReflect) {
+ Matter.Body.setPosition(this, Vector.add(this.position, player.velocity)) //bullets move with player
+ const sub = Vector.sub(this.position, mech.pos)
+ if (Vector.magnitude(sub) > 630) {
+ Matter.Body.setPosition(this, Vector.add(this.position, Vector.mult(Vector.normalise(sub), -2 * 630))) //teleport to opposite side
+ }
+ }
+
+ // if (b.isModWaveReflect) {
+ // Matter.Body.setPosition(this, Vector.add(this.position, player.velocity)) //bullets move with player
+
+ // Matter.Body.setPosition(this, Vector.add(this.position, Vector.mult(Vector.normalise(sub), -2 * POCKET_RANGE))) //teleport to opposite side
+
+ // const sub = Vector.sub(this.position, mech.pos)
+ // if (Vector.magnitude(sub) > 630) {
+ // if (!this.isJustReflected) {
+ // Matter.Body.setVelocity(this, Vector.mult(this.velocity, -1)); //reflect
+ // this.isJustReflected = true;
+ // }
+ // } else {
+ // this.isJustReflected = false
+ // }
+ // }
}
});
World.add(engine.world, bullet[me]); //add bullet to world
@@ -2216,6 +2288,7 @@ const b = {
ammoPack: 4,
have: false,
isStarterGun: false,
+ isEasyToAim: true,
fireCycle: 0,
ammoLoaded: 0,
fire() {
@@ -2238,6 +2311,7 @@ const b = {
defaultAmmoPack: 6, //use to revert ammoPack after mod changes drop rate
have: false,
isStarterGun: true,
+ isEasyToAim: false,
fire() {
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 25 : 10) * b.modFireRate); // cool down
b.muzzleFlash(30);
@@ -2282,6 +2356,7 @@ const b = {
ammoPack: 7,
have: false,
isStarterGun: false,
+ isEasyToAim: false,
fire() {
const me = bullet.length;
const dir = mech.angle; // + Math.random() * 0.05;
@@ -2312,6 +2387,7 @@ const b = {
ammoPack: 2,
have: false,
isStarterGun: false,
+ isEasyToAim: false,
fire() {
const me = bullet.length;
const dir = mech.angle;
@@ -2419,6 +2495,7 @@ const b = {
ammoPack: (game.difficultyMode > 3) ? 2 : 3,
have: false,
isStarterGun: false,
+ isEasyToAim: true,
fire() {
const speed = mech.crouch ? 36 : 22
b.mine({
@@ -2438,6 +2515,7 @@ const b = {
ammoPack: (game.difficultyMode > 3) ? 3 : 4,
have: false,
isStarterGun: false,
+ isEasyToAim: true,
fire() {
const me = bullet.length;
const dir = mech.angle;
@@ -2483,6 +2561,7 @@ const b = {
ammoPack: 10,
have: false,
isStarterGun: true,
+ isEasyToAim: true,
fire() {
b.drone(mech.crouch ? 45 : 1)
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 25 : 5) * b.modFireRate); // cool down
@@ -2495,6 +2574,7 @@ const b = {
ammoPack: 35,
have: false,
isStarterGun: true,
+ isEasyToAim: false,
fire() {
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 12 : 5) * b.modFireRate); // cool down
const me = bullet.length;
@@ -2594,6 +2674,7 @@ const b = {
ammoPack: 2.84,
have: false,
isStarterGun: false,
+ isEasyToAim: false,
fire() {
const me = bullet.length;
bullet[me] = Bodies.rectangle(0, 0, 0.015 * b.modBulletSize, 0.0015 * b.modBulletSize, {
@@ -2836,6 +2917,7 @@ const b = {
ammoPack: Infinity,
have: false,
isStarterGun: true,
+ isEasyToAim: false,
fire() {
const reflectivity = 1 - 1 / (b.modLaserReflections * 1.5)
let damage = b.dmgScale * b.modLaserDamage
@@ -2994,6 +3076,7 @@ const b = {
ammoPack: Infinity,
have: false,
isStarterGun: true,
+ isEasyToAim: false,
fire() {
//calculate laser collision
let best;
diff --git a/js/game.js b/js/game.js
index f2ba711..375dd43 100644
--- a/js/game.js
+++ b/js/game.js
@@ -69,10 +69,11 @@ const game = {
onTitlePage: true,
paused: false,
isChoosing: false,
- testing: false, //testing mode: shows wireframe and some variables
+ testing: false, //testing mode: shows wire frame and some variables
cycle: 0, //total cycles, 60 per second
fpsCap: null, //limits frames per second to 144/2=72, on most monitors the fps is capped at 60fps by the hardware
fpsCapDefault: 72, //use to change fpsCap back to normal after a hit from a mob
+ isEasyToAimMode: true, //removes power ups that don't work well with a track pad
cyclePaused: 0,
fallHeight: 3000, //below this y position the player dies
lastTimeStamp: 0, //tracks time stamps for measuring delta
@@ -571,7 +572,6 @@ const game = {
},
clearNow: false,
clearMap() {
-
if (b.isModMineAmmoBack) {
let count = 0;
for (i = 0, len = bullet.length; i < len; i++) { //count mines left on map
diff --git a/js/index.js b/js/index.js
index f5d9d81..74b043d 100644
--- a/js/index.js
+++ b/js/index.js
@@ -244,6 +244,9 @@ if (localSettings) {
game.isBodyDamage = localSettings.isBodyDamage
document.getElementById("body-damage").checked = localSettings.isBodyDamage
+ game.isEasyToAimMode = localSettings.isEasyToAimMode
+ document.getElementById("track-pad-mode").checked = localSettings.isEasyToAimMode
+
game.difficultyMode = localSettings.difficultyMode
document.getElementById("difficulty-select").value = localSettings.difficultyMode
@@ -256,11 +259,13 @@ if (localSettings) {
} else {
localSettings = {
isBodyDamage: true,
+ isEasyToAimMode: false,
difficultyMode: '1',
- fpsCapDefault: '72',
+ fpsCapDefault: 'max',
};
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
document.getElementById("body-damage").checked = localSettings.isBodyDamage
+ document.getElementById("track-pad-mode").checked = localSettings.isEasyToAimMode
document.getElementById("difficulty-select").value = localSettings.difficultyMode
document.getElementById("fps-select").value = localSettings.fpsCapDefault
}
@@ -358,6 +363,12 @@ document.getElementById("body-damage").addEventListener("input", () => {
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
});
+document.getElementById("track-pad-mode").addEventListener("input", () => {
+ game.isEasyToAimMode = document.getElementById("track-pad-mode").checked
+ localSettings.isEasyToAimMode = game.isEasyToAimMode
+ localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
+});
+
// difficulty-select-custom event listener is set in build.makeGrid
document.getElementById("difficulty-select").addEventListener("input", () => {
game.difficultyMode = Number(document.getElementById("difficulty-select").value)
diff --git a/js/level.js b/js/level.js
index 15a1bf3..9764606 100644
--- a/js/level.js
+++ b/js/level.js
@@ -14,9 +14,10 @@ const level = {
start() {
if (level.levelsCleared === 0) {
// level.difficultyIncrease(9)
- // b.giveGuns("missiles")
+ // b.giveGuns("wave beam")
// mech.setField("negative mass field")
- // b.giveMod("self-replication");
+ // b.giveMod("wave phase velocity");
+ // b.giveMod("reflective cavity");
level.intro(); //starting level
// level.testingMap();
@@ -676,7 +677,7 @@ const level = {
level.fill.push({
x: 1760,
y: -1550,
- width: 1290,
+ width: 1390,
height: 550,
color: "rgba(0,0,0,0.1)"
});
@@ -735,7 +736,7 @@ const level = {
spawn.bodyRect(2710, -1250, 125, 125, 0.8);
spawn.bodyRect(2705, -1350, 75, 100, 0.8);
spawn.mapRect(3500, -1600, 350, 50);
- spawn.mapRect(1750, -1600, 1310, 50);
+ spawn.mapRect(1750, -1600, 1410, 50);
spawn.bodyRect(3100, -1015, 375, 15);
spawn.bodyRect(3500, -850, 75, 125, 0.8);
spawn.mapRect(3450, -1000, 50, 580); //left building wall
diff --git a/js/player.js b/js/player.js
index 1fee99e..9c9e6af 100644
--- a/js/player.js
+++ b/js/player.js
@@ -1119,6 +1119,7 @@ const mech = {
fieldUpgrades: [{
name: "field emitter",
description: "use energy to shield yourself from damage
lets you pick up and throw objects",
+ isEasyToAim: false,
effect: () => {
mech.fieldShieldingScale = Number(b.modFieldEfficiency);
game.replaceTextLog = true; //allow text over write
@@ -1144,6 +1145,7 @@ const mech = {
{
name: "time dilation field",
description: "use energy to stop time
can fire bullets while field is active",
+ isEasyToAim: true,
effect: () => {
mech.fieldFire = true;
// mech.fieldRange = 130
@@ -1210,6 +1212,7 @@ const mech = {
{
name: "plasma torch",
description: "use energy to emit damaging plasma
effective at close range",
+ isEasyToAim: false,
effect: () => {
mech.hold = function () {
if (mech.isHolding) {
@@ -1226,7 +1229,7 @@ const mech = {
//calculate laser collision
let best;
- let range = mech.fieldRange * 0.5 + (mech.crouch ? 500 : 300) * Math.sqrt(Math.random()) //+ 100 * Math.sin(mech.cycle * 0.3);
+ let range = b.isModPlasmaRange * (175 + (mech.crouch ? 450 : 350) * Math.sqrt(Math.random())) //+ 100 * Math.sin(mech.cycle * 0.3);
const dir = mech.angle // + 0.04 * (Math.random() - 0.5)
const path = [{
x: mech.pos.x + 20 * Math.cos(dir),
@@ -1373,6 +1376,7 @@ const mech = {
name: "negative mass field",
description: "use energy to nullify gravity
launch larger blocks at much higher speeds",
fieldDrawRadius: 0,
+ isEasyToAim: true,
effect: () => {
mech.fieldFire = true;
mech.throwChargeRate = 3;
@@ -1389,6 +1393,7 @@ const mech = {
if (mech.energy > DRAIN) {
mech.grabPowerUp();
mech.lookForPickUp();
+ mech.pushMobs360();
//look for nearby objects to make zero-g
function zeroG(who, range, mag = 1.06) {
for (let i = 0, len = who.length; i < len; ++i) {
@@ -1443,7 +1448,7 @@ const mech = {
if (b.isModHawking) {
for (let i = 0, len = mob.length; i < len; i++) {
if (mob[i].distanceToPlayer2() < this.fieldDrawRadius * this.fieldDrawRadius && Matter.Query.ray(map, mech.pos, mob[i].position).length === 0 && Matter.Query.ray(body, mech.pos, mob[i].position).length === 0) {
- mob[i].damage(b.dmgScale * 0.09);
+ mob[i].damage(b.dmgScale * 0.08);
mob[i].locatePlayer();
//draw electricity
@@ -1466,13 +1471,8 @@ const mech = {
}
}
- } else {
- mech.pushMobs360();
}
ctx.globalCompositeOperation = "source-over";
-
-
-
} else {
//trigger cool down
mech.fieldCDcycle = mech.cycle + 120;
@@ -1491,6 +1491,7 @@ const mech = {
{
name: "standing wave harmonics",
description: "three oscillating shields are permanently active
energy regenerates while field is active",
+ isEasyToAim: true,
effect: () => {
mech.hold = function () {
if (mech.isHolding) {
@@ -1530,6 +1531,7 @@ const mech = {
{
name: "nano-scale manufacturing",
description: "excess energy used to build drones
2x energy regeneration",
+ isEasyToAim: true,
effect: () => {
mech.fieldRegen *= 2;
mech.hold = function () {
@@ -1578,6 +1580,7 @@ const mech = {
{
name: "phase decoherence field",
description: "become intangible and invisible
drains energy as you move",
+ isEasyToAim: true,
effect: () => {
// mech.fieldRange = 230
mech.hold = function () {
diff --git a/js/powerups.js b/js/powerups.js
index bc94259..4b03e36 100644
--- a/js/powerups.js
+++ b/js/powerups.js
@@ -102,7 +102,7 @@ const powerUps = {
function pick(who, skip1 = -1, skip2 = -1, skip3 = -1) {
let options = [];
for (let i = 1; i < who.length; i++) {
- if (i !== mech.fieldMode && i !== skip1 && i !== skip2 && i !== skip3) options.push(i);
+ if (i !== mech.fieldMode && (!game.isEasyToAimMode || mech.fieldUpgrades[i].isEasyToAim) && i !== skip1 && i !== skip2 && i !== skip3) options.push(i);
}
if (options.length > 0) return options[Math.floor(Math.random() * options.length)]
}
@@ -183,7 +183,7 @@ const powerUps = {
function pick(who, skip1 = -1, skip2 = -1, skip3 = -1) {
let options = [];
for (let i = 0; i < who.length; i++) {
- if (!who[i].have && i !== skip1 && i !== skip2 && i !== skip3) options.push(i);
+ if (!who[i].have && (!game.isEasyToAimMode || b.guns[i].isEasyToAim) && i !== skip1 && i !== skip2 && i !== skip3) options.push(i);
}
if (options.length > 0) return options[Math.floor(Math.random() * options.length)]
}
diff --git a/style.css b/style.css
index daa7600..3322b5b 100644
--- a/style.css
+++ b/style.css
@@ -74,7 +74,7 @@ summary {
}
.SVG-button:hover {
- background-color: #efeff5;
+ background-color: #e8e8ee;
}
#build-button {
diff --git a/todo.txt b/todo.txt
index 13eaa1d..a4b6d25 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,8 +1,17 @@
************** TODO - n-gon **************
-mod - missiles release smaller missiles after 2s hits
+mod - get your next recursive mod 3 times
+ are players aware of what a recursive mod is?
+ too much of a nova drift rip off?
-mod - grenades release smaller explosions
+mod - grenade needs a mod
+mod - time dilation field needs a mod
+mod - phase decoherence field needs a mod
+
+buff mod field radius for standing wave harmonics
+
+settings - auto aim at nearest mob
+settings - custom keys binding
mod - rocket propelled grenades
grenades do +20% damage and move in an accelerating path
@@ -51,6 +60,9 @@ lore - a robot (the player) gains self awareness
atmosphere levels: change the pace, give the user a rest between combat
low or no combat, but more graphics
explore lore
+ find power ups in "wrecked" mechs representing previous simulations
+ how you could leave something in one simulation that effects a different simulation
+ Maybe some strange quantum physics principle.
add text for player thoughts?
simple puzzles
cool looking stuff