zoom now only works in testing mode with keys: i / o

minigun is now nailgun  (higher damage, lower ammo)
mod: pneumatic actuator - nail gun's ramp up time is 50% shorter
mod: powder-actuated - removes ramp up time and increases nail speed

removed mod depleted uranium
mod: super size - larger super balls
This commit is contained in:
landgreen
2020-08-29 08:54:32 -07:00
parent d3514ee4f1
commit 00859f15ed
8 changed files with 175 additions and 108 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -112,14 +112,13 @@
<input type="checkbox" id="body-damage" name="body-damage" checked style="width:17px; height:17px;"> --> <input type="checkbox" id="body-damage" name="body-damage" checked style="width:17px; height:17px;"> -->
<br> <br>
<label for="classic-select" title="play older versions of n-gon">classic n-gon:</label> <label for="classic-select" title="play older versions of n-gon">classic n-gon:</label>
<select name="classic-select" id="fps-select" onChange="window.location.href=this.value"> <select name="classic-select" id="classic-select" onChange="window.location.href=this.value">
<option value="https://codepen.io/lilgreenland/full/ozXNWZ" selected>9-6-2016</option> <option value="https://codepen.io/lilgreenland/full/ozXNWZ" selected>9-6-2016</option>
<option value="https://codepen.io/lilgreenland/full/wzARJY">10-2-2016</option> <option value="https://codepen.io/lilgreenland/full/wzARJY">10-2-2016</option>
<option value="classic/7-1-2017/">7-1-2017</option> <option value="classic/7-1-2017/">7-1-2017</option>
<option value="classic/1-4-2018/">1-4-2018</option> <option value="classic/1-4-2018/">1-4-2018</option>
<option value="classic/7-11-2019/">7-11-2019</option> <option value="classic/7-11-2019/">7-11-2019</option>
<option value="classic/9-8-2019/">9-8-2019</option> <option value="classic/9-8-2019/">9-8-2019</option>
<option value="classic/3-13-2020/">3-13-2020</option>
</select> </select>
<br> <br>
<label for="fps-select" title="use this to slow the game down">limit frames per second:</label> <label for="fps-select" title="use this to slow the game down">limit frames per second:</label>
@@ -155,10 +154,10 @@
<th>GUNS</th> <th>GUNS</th>
<td>Q / E / mouse wheel</td> <td>Q / E / mouse wheel</td>
</tr> </tr>
<tr> <!-- <tr>
<th>ZOOM</th> <th>ZOOM</th>
<td>- / + or i / o</td> <td>- / + or i / o</td>
</tr> </tr> -->
<tr> <tr>
<th>PAUSE</th> <th>PAUSE</th>
<td>P</td> <td>P</td>

View File

@@ -797,7 +797,7 @@ const b = {
}); });
}, },
foam(position, velocity, radius) { foam(position, velocity, radius) {
radius *= Math.sqrt(mod.bulletSize) // radius *= Math.sqrt(mod.bulletSize)
const me = bullet.length; const me = bullet.length;
bullet[me] = Bodies.polygon(position.x, position.y, 20, radius, { bullet[me] = Bodies.polygon(position.x, position.y, 20, radius, {
// angle: 0, // angle: 0,
@@ -807,7 +807,7 @@ const b = {
// friction: 0.2, // friction: 0.2,
// restitution: 0.2, // restitution: 0.2,
dmg: mod.isFastFoam ? 0.02 : 0.0055, //damage done in addition to the damage from momentum dmg: mod.isFastFoam ? 0.02 : 0.0055, //damage done in addition to the damage from momentum
scale: 1 - 0.005 / mod.isBulletsLastLonger * (mod.isFastFoam ? 1.7 : 1), scale: 1 - 0.005 / mod.isBulletsLastLonger * (mod.isFastFoam ? 1.6 : 1),
classType: "bullet", classType: "bullet",
collisionFilter: { collisionFilter: {
category: cat.bullet, category: cat.bullet,
@@ -1534,56 +1534,78 @@ const b = {
game.makeGunHUD(); game.makeGunHUD();
}, },
guns: [{ guns: [{
name: "minigun", name: "nail gun",
description: "<strong>rapidly</strong> fire a stream of small <strong>bullets</strong><br>fire <strong>delay</strong> decreases as you shoot", description: "use compressed air to fire a stream of <strong>nails</strong><br><strong>delay</strong> after firing <strong>decreases</strong> as you shoot",
ammo: 0, ammo: 0,
ammoPack: 65, ammoPack: 60,
defaultAmmoPack: 65, defaultAmmoPack: 60,
recordedAmmo: 0, recordedAmmo: 0,
have: false, have: false,
nextFireCycle: 0, //use to remember how longs its been since last fire, used to reset count nextFireCycle: 0, //use to remember how longs its been since last fire, used to reset count
startingHoldCycle: 0, startingHoldCycle: 0,
fire() { fire() {
//fire delay decreases as you hold fire, down to 3 from 15 let CD
const pos = { if (mod.nailFireRate) { //fire delay decreases as you hold fire, down to 3 from 15
x: mech.pos.x + 23 * Math.cos(mech.angle), if (mod.nailInstantFireRate) {
y: mech.pos.y + 23 * Math.sin(mech.angle) CD = 2
}
if (mod.nailGun) {
mech.fireCDcycle = mech.cycle + Math.floor(2.1 * b.fireCD); // cool down
const speed = 33 + 10 * Math.random()
const angle = mech.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (mech.crouch ? 0.22 : 0.65)
const velocity = {
x: speed * Math.cos(angle),
y: speed * Math.sin(angle)
}
b.nail(pos, velocity, 1) //position, velocity, damage
} else { } else {
if (this.nextFireCycle + 1 < mech.cycle) this.startingHoldCycle = mech.cycle //reset if not constantly firing if (this.nextFireCycle + 1 < mech.cycle) this.startingHoldCycle = mech.cycle //reset if not constantly firing
const CD = Math.max(11 - 0.06 * (mech.cycle - this.startingHoldCycle), 2) //CD scales with cycles fire is held down CD = Math.max(5 - 0.06 * (mech.cycle - this.startingHoldCycle), 2) //CD scales with cycles fire is held down
this.nextFireCycle = mech.cycle + CD * b.fireCD //predict next fire cycle if the fire button is held down this.nextFireCycle = mech.cycle + CD * b.fireCD //predict next fire cycle if the fire button is held down
}
} else {
if (this.nextFireCycle + 1 < mech.cycle) this.startingHoldCycle = mech.cycle //reset if not constantly firing
CD = Math.max(11 - 0.06 * (mech.cycle - this.startingHoldCycle), 2) //CD scales with cycles fire is held down
this.nextFireCycle = mech.cycle + CD * b.fireCD //predict next fire cycle if the fire button is held down
}
mech.fireCDcycle = mech.cycle + Math.floor(CD * b.fireCD); // cool down
const me = bullet.length; const speed = 28 + 8 * Math.random() + 6 * mod.nailInstantFireRate
const dir = mech.angle + (Math.random() - 0.5) * ((mech.crouch) ? 0.01 : 0.1); const angle = mech.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (mech.crouch ? 1.35 : 3.2) / CD
bullet[me] = Bodies.rectangle(pos.x, pos.y, 20 * mod.bulletSize, 6 * mod.bulletSize, b.fireAttributes(dir)); b.nail({
b.fireProps(CD, mech.crouch ? 38 : 34, dir, me); //cd , speed x: mech.pos.x + 23 * Math.cos(mech.angle),
y: mech.pos.y + 23 * Math.sin(mech.angle)
}, {
x: mech.Vx / 2 + speed * Math.cos(angle),
y: mech.Vy / 2 + speed * Math.sin(angle)
}, 0.9) //position, velocity, damage
bullet[me].endCycle = game.cycle + 70;
bullet[me].dmg = 0.25;
bullet[me].frictionAir = mech.crouch ? 0.001 : 0.003;
if (mod.isIceCrystals) { if (mod.isIceCrystals) {
bullet[me].onDmg = function (who) { bullet[bullet.length - 1].onDmg = function (who) {
mobs.statusSlow(who, 30) mobs.statusSlow(who, 30)
}; };
mech.energy -= mech.fieldRegen + 0.0075 mech.energy -= mech.fieldRegen + 0.008
if (mech.energy < 0.02) { if (mech.energy < 0.02) mech.fireCDcycle = mech.cycle + 60; // cool down
mech.fireCDcycle = mech.cycle + 60; // cool down
}
}
bullet[me].do = function () {
this.force.y += this.mass * 0.0003;
};
} }
// } else {
// if (this.nextFireCycle + 1 < mech.cycle) this.startingHoldCycle = mech.cycle //reset if not constantly firing
// const CD = Math.max(11 - 0.06 * (mech.cycle - this.startingHoldCycle), 2) //CD scales with cycles fire is held down
// this.nextFireCycle = mech.cycle + CD * b.fireCD //predict next fire cycle if the fire button is held down
// const me = bullet.length;
// const dir = mech.angle + (Math.random() - 0.5) * ((mech.crouch) ? 0.01 : 0.1);
// bullet[me] = Bodies.rectangle(pos.x, pos.y, 20 * mod.bulletSize, 6 * mod.bulletSize, b.fireAttributes(dir));
// b.fireProps(CD, mech.crouch ? 38 : 34, dir, me); //cd , speed
// bullet[me].endCycle = game.cycle + 70;
// bullet[me].dmg = 0.25;
// bullet[me].frictionAir = mech.crouch ? 0.001 : 0.003;
// if (mod.isIceCrystals) {
// bullet[me].onDmg = function (who) {
// mobs.statusSlow(who, 30)
// };
// mech.energy -= mech.fieldRegen + 0.0075
// if (mech.energy < 0.02) {
// mech.fireCDcycle = mech.cycle + 60; // cool down
// }
// }
// bullet[me].do = function () {
// this.force.y += this.mass * 0.0003;
// };
// }
} }
}, },
{ {
@@ -1632,7 +1654,7 @@ const b = {
b.nail(pos, velocity, 1) b.nail(pos, velocity, 1)
} }
} else { } else {
const side = 21 * mod.bulletSize const side = 21
for (let i = 0; i < 17; i++) { for (let i = 0; i < 17; i++) {
const me = bullet.length; const me = bullet.length;
const dir = mech.angle + (Math.random() - 0.5) * spread const dir = mech.angle + (Math.random() - 0.5) * spread
@@ -2559,7 +2581,7 @@ const b = {
have: false, have: false,
fire() { fire() {
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 20 : 6) * b.fireCD); // cool down mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 20 : 6) * b.fireCD); // cool down
const radius = mech.crouch ? 10 + 7 * Math.random() : 4 + 6 * Math.random() //(4 + (mech.crouch ? 15 : 6) * Math.random()) const radius = (mech.crouch ? 10 + 7 * Math.random() : 4 + 6 * Math.random())
const dir = mech.angle + 0.2 * (Math.random() - 0.5) const dir = mech.angle + 0.2 * (Math.random() - 0.5)
const position = { const position = {
x: mech.pos.x + 30 * Math.cos(mech.angle), x: mech.pos.x + 30 * Math.cos(mech.angle),

View File

@@ -286,18 +286,6 @@ const game = {
// mech.drop(); // mech.drop();
}, },
keyPress() { //runs on key down event keyPress() { //runs on key down event
if (keys[189] || keys[79]) {
// - key
game.isAutoZoom = false;
game.zoomScale /= 0.9;
game.setZoom();
} else if (keys[187] || keys[73]) {
// = key
game.isAutoZoom = false;
game.zoomScale *= 0.9;
game.setZoom();
}
//full screen toggle //full screen toggle
// if (keys[13]) { // if (keys[13]) {
// //enter key // //enter key
@@ -314,8 +302,6 @@ const game = {
// } // }
// setupCanvas(); // setupCanvas();
// } // }
if (keys[69]) { // e swap to next active gun if (keys[69]) { // e swap to next active gun
game.nextGun(); game.nextGun();
} else if (keys[81]) { //q swap to previous active gun } else if (keys[81]) { //q swap to previous active gun
@@ -359,6 +345,19 @@ const game = {
} }
//in testing mode //in testing mode
if (game.testing) { if (game.testing) {
if (keys[79]) {
// - key
game.isAutoZoom = false;
game.zoomScale /= 0.9;
game.setZoom();
} else if (keys[73]) {
// = key
game.isAutoZoom = false;
game.zoomScale *= 0.9;
game.setZoom();
}
if (keys[192]) { // ` if (keys[192]) { // `
powerUps.directSpawn(game.mouseInGame.x, game.mouseInGame.y, "reroll"); powerUps.directSpawn(game.mouseInGame.x, game.mouseInGame.y, "reroll");
} else if (keys[49]) { // give power ups with 1 } else if (keys[49]) { // give power ups with 1

View File

@@ -445,7 +445,7 @@ if (localSettings) {
isCommunityMaps: false, isCommunityMaps: false,
difficultyMode: '1', difficultyMode: '1',
fpsCapDefault: 'max', fpsCapDefault: 'max',
runCount: -1, runCount: 0,
}; };
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
document.getElementById("community-maps").checked = localSettings.isCommunityMaps document.getElementById("community-maps").checked = localSettings.isCommunityMaps

View File

@@ -16,9 +16,9 @@ const level = {
// game.zoomScale = 1000; // game.zoomScale = 1000;
// game.setZoom(); // game.setZoom();
// mech.isStealth = true; // mech.isStealth = true;
// b.giveGuns("minigun") // b.giveGuns("nail gun")
// mech.setField("standing wave harmonics") // mech.setField("standing wave harmonics")
// mod.giveMod("nail gun"); // mod.giveMod("pneumatic actuator");
level.intro(); //starting level level.intro(); //starting level
// level.testing(); //not in rotation // level.testing(); //not in rotation

View File

@@ -67,7 +67,7 @@ const mod = {
!build.isCustomSelection && !build.isCustomSelection &&
b.inventory.length > 2 && b.inventory.length > 2 &&
name !== b.guns[b.activeGun].name && name !== b.guns[b.activeGun].name &&
Math.random() < -0.1 + 0.1 * (b.inventory.length + mod.isGunCycle * 2) //lower chance of mods specific to a gun if you have lots of guns Math.random() > 2 / (b.inventory.length + mod.isGunCycle * 3) //lower chance of mods specific to a gun if you have lots of guns
) { ) {
return false return false
} }
@@ -82,7 +82,7 @@ const mod = {
if (mod.isDamageForGuns) dmg *= 1 + 0.07 * b.inventory.length if (mod.isDamageForGuns) dmg *= 1 + 0.07 * b.inventory.length
if (mod.isLowHealthDmg) dmg *= 1 + 0.5 * Math.max(0, 1 - mech.health) if (mod.isLowHealthDmg) dmg *= 1 + 0.5 * Math.max(0, 1 - mech.health)
if (mod.isHarmDamage && mech.lastHarmCycle + 600 > mech.cycle) dmg *= 2; if (mod.isHarmDamage && mech.lastHarmCycle + 600 > mech.cycle) dmg *= 2;
if (mod.isEnergyLoss) dmg *= 1.33; if (mod.isEnergyLoss) dmg *= 1.37;
if (mod.isAcidDmg && mech.health > 1) dmg *= 1.4; if (mod.isAcidDmg && mech.health > 1) dmg *= 1.4;
if (mod.isRest && player.speed < 1) dmg *= 1.20; if (mod.isRest && player.speed < 1) dmg *= 1.20;
if (mod.isEnergyDamage) dmg *= 1 + mech.energy / 5.5; if (mod.isEnergyDamage) dmg *= 1 + mech.energy / 5.5;
@@ -128,7 +128,7 @@ const mod = {
}, },
{ {
name: "acute stress response", name: "acute stress response",
description: "increase <strong class='color-d'>damage</strong> by <strong>33%</strong><br>if a mob <strong>dies</strong> drain stored <strong class='color-f'>energy</strong> by <strong>25%</strong>", description: "increase <strong class='color-d'>damage</strong> by <strong>37%</strong><br>if a mob <strong>dies</strong> drain stored <strong class='color-f'>energy</strong> by <strong>25%</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
@@ -557,7 +557,7 @@ const mod = {
}, },
{ {
name: "scrap bots", name: "scrap bots",
description: "<strong>12%</strong> chance to build a <strong>bot</strong> after killing a mob<br>the bot only functions until the end of the level", description: "<strong>11%</strong> chance to build a <strong>bot</strong> after killing a mob<br>the bot only functions until the end of the level",
maxCount: 6, maxCount: 6,
count: 0, count: 0,
allowed() { allowed() {
@@ -565,7 +565,7 @@ const mod = {
}, },
requires: "a bot", requires: "a bot",
effect() { effect() {
mod.isBotSpawner += 0.12; mod.isBotSpawner += 0.11;
}, },
remove() { remove() {
mod.isBotSpawner = 0; mod.isBotSpawner = 0;
@@ -1371,50 +1371,50 @@ const mod = {
} }
}, },
{ {
name: "depleted uranium rounds", name: "pneumatic actuator",
description: `your <strong>bullets</strong> are <strong>18%</strong> larger<br>increased mass and physical <strong class='color-d'>damage</strong>`, description: "<strong>nail gun</strong> takes <strong>50%</strong> less time to ramp up<br>to it's shortest <strong>delay</strong> after firing",
count: 0,
maxCount: 9,
allowed() {
return (mod.haveGunCheck("minigun") && !mod.nailGun) || mod.haveGunCheck("shotgun") || mod.haveGunCheck("super balls")
},
requires: "minigun, shotgun, super balls",
effect() {
mod.bulletSize += 0.18
},
remove() {
mod.bulletSize = 1;
}
},
{
name: "nail gun",
description: "the <strong>minigun</strong> is modified to fire <strong>nails</strong><br>with a short <strong>fire delay</strong> and a low <strong>precision</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
return mod.haveGunCheck("minigun") && !mod.isIceCrystals return mod.haveGunCheck("nail gun")
}, },
requires: "minigun", requires: "nail gun",
effect() { effect() {
mod.nailGun = true mod.nailFireRate = true
}, },
remove() { remove() {
mod.nailGun = false mod.nailFireRate = false
}
},
{
name: "powder-actuated",
description: "<strong>nail gun</strong> takes <strong>no</strong> time to ramp up<br>nails have a <strong>20%</strong> faster muzzle <strong>speed</strong>",
maxCount: 1,
count: 0,
allowed() {
return mod.haveGunCheck("nail gun") && mod.nailFireRate && !mod.isIceCrystals
},
requires: "nail gun",
effect() {
mod.nailInstantFireRate = true
},
remove() {
mod.nailInstantFireRate = false
} }
}, },
{ {
name: "ice crystal nucleation", name: "ice crystal nucleation",
description: "the <strong>minigun</strong> uses <strong class='color-f'>energy</strong> to condense<br>unlimited <strong class='color-s'>freezing</strong> <strong>bullets</strong> from water vapor", description: "the <strong>nail gun</strong> uses <strong class='color-f'>energy</strong> to condense<br>unlimited <strong class='color-s'>freezing</strong> <strong>ice shards</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
return mod.haveGunCheck("minigun") && !mod.nailGun return mod.haveGunCheck("nail gun") && !mod.nailInstantFireRate
}, },
requires: "minigun", requires: "nail gun",
effect() { effect() {
mod.isIceCrystals = true; mod.isIceCrystals = true;
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
if (b.guns[i].name === "minigun") { if (b.guns[i].name === "nail gun") {
b.guns[i].ammoPack = Infinity b.guns[i].ammoPack = Infinity
b.guns[i].recordedAmmo = b.guns[i].ammo b.guns[i].recordedAmmo = b.guns[i].ammo
b.guns[i].ammo = Infinity b.guns[i].ammo = Infinity
@@ -1426,7 +1426,7 @@ const mod = {
remove() { remove() {
mod.isIceCrystals = false; mod.isIceCrystals = false;
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
if (b.guns[i].name === "minigun") { if (b.guns[i].name === "nail gun") {
b.guns[i].ammoPack = b.guns[i].defaultAmmoPack; b.guns[i].ammoPack = b.guns[i].defaultAmmoPack;
b.guns[i].ammo = b.guns[i].recordedAmmo b.guns[i].ammo = b.guns[i].recordedAmmo
game.updateGunHUD(); game.updateGunHUD();
@@ -1527,6 +1527,22 @@ const mod = {
mod.oneSuperBall = false; mod.oneSuperBall = false;
} }
}, },
{
name: "super sized",
description: `your <strong>super balls</strong> are <strong>22%</strong> larger<br>increased mass and physical <strong class='color-d'>damage</strong>`,
count: 0,
maxCount: 9,
allowed() {
return mod.haveGunCheck("super balls")
},
requires: "super balls",
effect() {
mod.bulletSize += 0.22
},
remove() {
mod.bulletSize = 1;
}
},
{ {
name: "flechettes cartridges", name: "flechettes cartridges",
description: "<strong>flechettes</strong> release <strong>three</strong> needles in each shot<br><strong class='color-g'>ammo</strong> cost are increases by <strong>3x</strong>", description: "<strong>flechettes</strong> release <strong>three</strong> needles in each shot<br><strong class='color-g'>ammo</strong> cost are increases by <strong>3x</strong>",
@@ -1843,7 +1859,7 @@ const mod = {
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
return mod.nailBotCount + mod.grenadeFragments + mod.nailsDeathMob / 2 + (mod.haveGunCheck("mine") + mod.isRailNails + mod.isNailShot + mod.nailGun) * 2 > 1 return mod.nailBotCount + mod.grenadeFragments + mod.nailsDeathMob / 2 + (mod.haveGunCheck("mine") + mod.isRailNails + mod.isNailShot + (mod.haveGunCheck("nail gun") && !mod.isIceCrystals)) * 2 > 1
}, },
requires: "nails", requires: "nails",
effect() { effect() {
@@ -2016,7 +2032,7 @@ const mod = {
}, },
{ {
name: "colloidal foam", name: "colloidal foam",
description: "increase <strong>foam</strong> <strong class='color-d'>damage</strong> by <strong>200%</strong><br><strong>foam</strong> dissipates <strong>50%</strong> faster", description: "increase <strong>foam</strong> <strong class='color-d'>damage</strong> by <strong>200%</strong><br><strong>foam</strong> dissipates <strong>40%</strong> faster",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
allowed() { allowed() {
@@ -2030,6 +2046,22 @@ const mod = {
mod.isFastFoam = false; mod.isFastFoam = false;
} }
}, },
// {
// name: "foam size",
// description: "increase <strong>foam</strong> <strong class='color-d'>damage</strong> by <strong>200%</strong><br><strong>foam</strong> dissipates <strong>50%</strong> faster",
// maxCount: 1,
// count: 0,
// allowed() {
// return mod.haveGunCheck("foam") || mod.foamBotCount > 2
// },
// requires: "foam",
// effect() {
// mod.isLargeFoam = true
// },
// remove() {
// mod.isLargeFoam = false;
// }
// },
{ {
name: "frame-dragging", name: "frame-dragging",
description: "<strong>slow time</strong> while charging the <strong>rail gun</strong><br>charging no longer drains <strong class='color-f'>energy</strong>", description: "<strong>slow time</strong> while charging the <strong>rail gun</strong><br>charging no longer drains <strong class='color-f'>energy</strong>",
@@ -2651,5 +2683,6 @@ const mod = {
isFastFoam: null, isFastFoam: null,
isSporeGrowth: null, isSporeGrowth: null,
isBayesian: null, isBayesian: null,
nailGun: null nailGun: null,
nailInstantFireRate: null
} }

View File

@@ -1,29 +1,43 @@
2x difficulty increases after clearing every level once zoom now only works in testing mode with keys: i / o
mod - minigun fires nails, nails are inaccurate, but fire rapidly
added an option to play older versions of n-gon in settings minigun is now nailgun (higher damage, lower ammo)
mod: pneumatic actuator - nail gun's ramp up time is 50% shorter
mod: powder-actuated - removes ramp up time and increases nail speed
removed mod depleted uranium
mod: super size - larger super balls
************** TODO - n-gon ************** ************** TODO - n-gon **************
mod: railroad ties - nails are larger and do more damage
foam needs a new mod
is the foam mod colloidal foam fun?
increase foam bullet size?
foam explodes when it runs out?
removing supersaturation sets total health to 1
this cancels the health benefits from crystallized armor
produce a method that calculates max health based on mods
player goes intangible while immune after getting hit? player goes intangible while immune after getting hit?
getting stuck above a mob can immobilize player getting stuck above a mob can immobilize player
add a minimum knock from player mob collisions? add a minimum knock from player mob collisions?
use mac automator to speed up your n-gon -> git sync
considering removing the perfect diamagnetism field from the game
perfect diamagnetism be able to grab and launch mobs perfect diamagnetism be able to grab and launch mobs
Gun: Launch yourself at high speed to the enemy, gaining temporary invincibility while in the air and for 3 seconds after landing. Upon impact, trigger a large explosion. Gun: Launch yourself at high speed to the enemy, gaining temporary invincibility while in the air and for 3 seconds after landing. Upon impact, trigger a large explosion.
removing supersaturation sets total health to 1
this cancels the health benefits from crystallized armor
produce a method that calculates max health based on mods
fix door.isOpen actually meaning isClosed fix door.isOpen actually meaning isClosed
mod - laser fires 3 beams mod - laser fires 3 beams
after you die custom should be populated with your last build after you die custom should be populated with your last build
also you should be able to share while paused
considering removing the perfect diamagnetism field from the game
use canvas pixel array effects for full screen graphics use canvas pixel array effects for full screen graphics
add some pixels after player gets hit? add some pixels after player gets hit?