nail gun
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:
@@ -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>
|
||||||
|
|||||||
100
js/bullet.js
100
js/bullet.js
@@ -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),
|
||||||
|
|||||||
27
js/game.js
27
js/game.js
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
103
js/mods.js
103
js/mods.js
@@ -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
|
||||||
}
|
}
|
||||||
32
todo.txt
32
todo.txt
@@ -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?
|
||||||
|
|||||||
Reference in New Issue
Block a user