added no power up setting to custom
This commit is contained in:
27
js/bullet.js
27
js/bullet.js
@@ -1237,7 +1237,7 @@ const b = {
|
||||
onEnd() {},
|
||||
do() {
|
||||
if (this.lastLookCycle < game.cycle && !mech.isCloak) {
|
||||
this.lastLookCycle = game.cycle + 80 - this.isUpgraded * 55
|
||||
this.lastLookCycle = game.cycle + 80 - this.isUpgraded * 65
|
||||
let target
|
||||
for (let i = 0, len = mob.length; i < len; i++) {
|
||||
const dist = Vector.magnitudeSquared(Vector.sub(this.position, mob[i].position));
|
||||
@@ -1302,7 +1302,7 @@ const b = {
|
||||
const radius = 6 + 7 * Math.random()
|
||||
const SPEED = 29 - radius * 0.5; //(mech.crouch ? 32 : 20) - radius * 0.7;
|
||||
const velocity = Vector.mult(Vector.normalise(Vector.sub(target, this.position)), SPEED)
|
||||
b.foam(this.position, velocity, radius + 11 * this.isUpgraded)
|
||||
b.foam(this.position, velocity, radius + 14 * this.isUpgraded)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1389,7 +1389,7 @@ const b = {
|
||||
mech.energy -= 0.0012 * mod.isLaserDiode
|
||||
// const sub = Vector.sub(this.lockedOn.position, this.vertices[0])
|
||||
// const angle = Math.atan2(sub.y, sub.x);
|
||||
b.laser(this.vertices[0], this.lockedOn.position, b.dmgScale * (0.06 + 0.08 * this.isUpgraded))
|
||||
b.laser(this.vertices[0], this.lockedOn.position, b.dmgScale * (0.06 + 0.1 * this.isUpgraded))
|
||||
|
||||
// //make sure you can still see vertex
|
||||
// const DIST = Vector.magnitude(Vector.sub(this.vertices[0], this.lockedOn.position));
|
||||
@@ -1458,7 +1458,7 @@ const b = {
|
||||
explode: 0,
|
||||
beforeDmg() {
|
||||
if (this.lockedOn) {
|
||||
const explosionRadius = Math.min(170 + 140 * this.isUpgraded, Vector.magnitude(Vector.sub(this.position, mech.pos)) - 30)
|
||||
const explosionRadius = Math.min(170 + 170 * this.isUpgraded, Vector.magnitude(Vector.sub(this.position, mech.pos)) - 30)
|
||||
if (explosionRadius > 60) {
|
||||
this.explode = explosionRadius
|
||||
//
|
||||
@@ -1564,7 +1564,7 @@ const b = {
|
||||
const DIST = Vector.magnitude(sub);
|
||||
const unit = Vector.normalise(sub)
|
||||
const DRAIN = 0.002
|
||||
if (DIST < mod.isPlasmaRange * 500 && mech.energy > DRAIN) {
|
||||
if (DIST < mod.isPlasmaRange * 450 && mech.energy > DRAIN) {
|
||||
mech.energy -= DRAIN;
|
||||
if (mech.energy < 0) {
|
||||
mech.fieldCDcycle = mech.cycle + 120;
|
||||
@@ -2038,9 +2038,9 @@ const b = {
|
||||
}
|
||||
} else {
|
||||
this.endCycle = 0;
|
||||
if (mod.isFlechetteExplode && !who.shield && Vector.dot(Vector.normalise(Vector.sub(who.position, this.position)), Vector.normalise(this.velocity)) > 0.98) {
|
||||
if (mod.isFlechetteExplode && !who.shield && Vector.dot(Vector.normalise(Vector.sub(who.position, this.position)), Vector.normalise(this.velocity)) > 0.975) {
|
||||
// mobs.statusStun(who, 120)
|
||||
this.explodeRad = 250 + 30 * Math.random();
|
||||
this.explodeRad = 300 + 60 * Math.random();
|
||||
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
|
||||
}
|
||||
who.foundPlayer();
|
||||
@@ -2383,7 +2383,7 @@ const b = {
|
||||
const dir = mech.angle; // + Math.random() * 0.05;
|
||||
bullet[me] = Bodies.circle(mech.pos.x + 30 * Math.cos(mech.angle), mech.pos.y + 30 * Math.sin(mech.angle), 20, b.fireAttributes(dir, false));
|
||||
Matter.Body.setDensity(bullet[me], 0.0003);
|
||||
bullet[me].explodeRad = 400 + Math.floor(Math.random() * 50);;
|
||||
bullet[me].explodeRad = 350 + Math.floor(Math.random() * 50);;
|
||||
bullet[me].onEnd = function () {
|
||||
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
|
||||
if (mod.grenadeFragments) b.targetedNail(this.position, mod.grenadeFragments)
|
||||
@@ -2554,7 +2554,6 @@ const b = {
|
||||
}
|
||||
bullet[me].radiationMode = function () {
|
||||
this.stuck(); //runs different code based on what the bullet is stuck to
|
||||
|
||||
if (!mech.isBodiesAsleep) {
|
||||
this.damageRadius = this.damageRadius * 0.85 + 0.15 * this.maxDamageRadius //smooth radius towards max
|
||||
this.maxDamageRadius -= 0.8 / mod.isBulletsLastLonger //+ 0.5 * Math.sin(game.cycle * 0.1) //slowly shrink max radius
|
||||
@@ -2575,8 +2574,8 @@ const b = {
|
||||
//aoe damage to mobs
|
||||
for (let i = 0, len = mob.length; i < len; i++) {
|
||||
if (Vector.magnitude(Vector.sub(mob[i].position, this.position)) < this.damageRadius) {
|
||||
let dmg = b.dmgScale * 0.025
|
||||
if (Matter.Query.ray(map, mob[i].position, this.position).length > 0) dmg *= 0.5 //reduce damage if a wall is in the way
|
||||
let dmg = b.dmgScale * 0.035
|
||||
if (Matter.Query.ray(map, mob[i].position, this.position).length > 0) dmg *= 0.3 //reduce damage if a wall is in the way
|
||||
if (mob[i].shield) dmg *= 4 //x5 to make up for the /5 that shields normally take
|
||||
mob[i].damage(dmg);
|
||||
mob[i].locatePlayer();
|
||||
@@ -3232,12 +3231,12 @@ const b = {
|
||||
mech.energy -= energy * mod.isLaserDiode
|
||||
|
||||
if (mod.beamSplitter) {
|
||||
energy *= 0.7
|
||||
energy *= 0.66
|
||||
b.pulse(energy, mech.angle)
|
||||
for (let i = 1; i < 1 + mod.beamSplitter; i++) {
|
||||
energy *= 0.9
|
||||
b.pulse(energy, mech.angle - i * 0.35)
|
||||
b.pulse(energy, mech.angle + i * 0.35)
|
||||
b.pulse(energy, mech.angle - i * 0.27)
|
||||
b.pulse(energy, mech.angle + i * 0.27)
|
||||
}
|
||||
} else {
|
||||
b.pulse(energy, mech.angle)
|
||||
|
||||
11
js/game.js
11
js/game.js
@@ -134,6 +134,7 @@ const game = {
|
||||
accelScale: null, //set in levels.setDifficulty
|
||||
CDScale: null, //set in levels.setDifficulty
|
||||
lookFreqScale: null, //set in levels.setDifficulty
|
||||
isNoPowerUps: false,
|
||||
// dropFPS(cap = 40, time = 15) {
|
||||
// game.fpsCap = cap
|
||||
// game.fpsInterval = 1000 / game.fpsCap;
|
||||
@@ -461,6 +462,7 @@ const game = {
|
||||
reset() { //run on first run, and each later run after you die
|
||||
input.endKeySensing();
|
||||
b.removeAllGuns();
|
||||
game.isNoPowerUps = false;
|
||||
mod.setupAllMods(); //sets mods to default values
|
||||
b.setFireCD();
|
||||
game.updateModHUD();
|
||||
@@ -684,9 +686,7 @@ const game = {
|
||||
if (mech.energy > mech.maxEnergy) mech.energy = mech.maxEnergy + (mech.energy - mech.maxEnergy) * 0.75
|
||||
|
||||
if (mech.pos.y > game.fallHeight) { // if 4000px deep
|
||||
if (game.difficultyMode > 4) {
|
||||
mech.death();
|
||||
} else {
|
||||
|
||||
|
||||
// Matter.Body.setPosition(player, {
|
||||
// x: player.position.x,
|
||||
@@ -724,8 +724,7 @@ const game = {
|
||||
}
|
||||
}
|
||||
mech.damage(0.1 * game.difficultyMode);
|
||||
mech.energy = 0.01;
|
||||
}
|
||||
mech.energy -= 0.1 * game.difficultyMode
|
||||
}
|
||||
|
||||
// if (mod.isEnergyDamage) {
|
||||
@@ -749,7 +748,7 @@ const game = {
|
||||
let i = who.length;
|
||||
while (i--) {
|
||||
if (who[i].position.y > game.fallHeight) {
|
||||
if (save && game.difficultyMode < 5) {
|
||||
if (save) {
|
||||
Matter.Body.setVelocity(who[i], {
|
||||
x: 0,
|
||||
y: 0
|
||||
|
||||
27
js/index.js
27
js/index.js
@@ -105,6 +105,9 @@ window.addEventListener('load', (event) => {
|
||||
if (property === "level") {
|
||||
document.getElementById("starting-level").value = Number(set[property])
|
||||
}
|
||||
if (property === "noPower") {
|
||||
document.getElementById("no-power-ups").checked = Number(set[property])
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -314,8 +317,9 @@ const build = {
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div style="align-items: center; text-align:center; font-size: 1.00em; line-height: 220%;background-color:var(--build-bg-color);">
|
||||
<div style="align-items: center; text-align:center; font-size: 1.00em; line-height: 190%;background-color:var(--build-bg-color);">
|
||||
<div>starting level: <input id='starting-level' type="number" step="1" value="0" min="0" max="99"></div>
|
||||
<div>
|
||||
<label for="difficulty-select" title="effects: number of mobs, damage done by mobs, damage done to mobs, mob speed, heal effects">difficulty:</label>
|
||||
<select name="difficulty-select" id="difficulty-select-custom">
|
||||
<option value="1">easy</option>
|
||||
@@ -323,6 +327,11 @@ const build = {
|
||||
<option value="4">hard</option>
|
||||
<option value="6">why?</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label for="no-power-ups" title="no mods, fields, or guns will spawn during the game">no power ups:</label>
|
||||
<input type="checkbox" id="no-power-ups" name="no-power-ups" style="width:17px; height:17px;">
|
||||
</div>
|
||||
</div>`
|
||||
for (let i = 0, len = mech.fieldUpgrades.length; i < len; i++) {
|
||||
text += `<div id ="field-${i}" class="build-grid-module" onclick="build.choosePowerUp(this,${i},'field')"><div class="grid-title"><div class="circle-grid field"></div> ${mech.fieldUpgrades[i].name}</div> ${mech.fieldUpgrades[i].description}</div>`
|
||||
@@ -390,6 +399,7 @@ const build = {
|
||||
url += `&field=${encodeURIComponent(mech.fieldUpgrades[mech.fieldMode].name.trim())}`
|
||||
url += `&difficulty=${game.difficultyMode}`
|
||||
url += `&level=${Math.abs(Number(document.getElementById("starting-level").value))}`
|
||||
url += `&noPower=${Number(document.getElementById("no-power-ups").checked)}`
|
||||
console.log(url)
|
||||
game.copyToClipBoard(url)
|
||||
alert('n-gon build URL copied to clipboard.\nPaste into browser address bar.')
|
||||
@@ -407,6 +417,20 @@ const build = {
|
||||
const levelsCleared = Math.abs(Number(document.getElementById("starting-level").value))
|
||||
level.difficultyIncrease(Math.min(99, levelsCleared * game.difficultyMode)) //increase difficulty based on modes
|
||||
level.levelsCleared += levelsCleared;
|
||||
game.isNoPowerUps = document.getElementById("no-power-ups").checked
|
||||
if (game.isNoPowerUps) { //remove mods, guns, and fields
|
||||
function removeOne() { //recursive remove one at a time to avoid array problems
|
||||
for (let i = 0; i < powerUp.length; i++) {
|
||||
if (powerUp[i].name === "mod" || powerUp[i].name === "gun" || powerUp[i].name === "field") {
|
||||
Matter.World.remove(engine.world, powerUp[i]);
|
||||
powerUp.splice(i, 1);
|
||||
removeOne();
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
removeOne();
|
||||
}
|
||||
game.isCheating = true;
|
||||
document.body.style.cursor = "none";
|
||||
document.body.style.overflow = "hidden"
|
||||
@@ -795,6 +819,7 @@ window.addEventListener("keydown", function (event) {
|
||||
}
|
||||
break
|
||||
case "u":
|
||||
level.bossKilled = true; //if there is no boss this needs to be true to increase levels
|
||||
level.nextLevel();
|
||||
break
|
||||
case "X": //capital X to make it hard to die
|
||||
|
||||
79
js/level.js
79
js/level.js
@@ -21,7 +21,7 @@ const level = {
|
||||
// for (let i = 0; i < 10; i++) {
|
||||
// mod.giveMod("laser-bot");
|
||||
// }
|
||||
// mod.giveMod("vacuum bomb")
|
||||
// mod.giveMod("cardinality")
|
||||
|
||||
|
||||
level.intro(); //starting level
|
||||
@@ -149,11 +149,11 @@ const level = {
|
||||
// spawn.spawner(1600, -500)
|
||||
// spawn.sniper(1700, -120, 50)
|
||||
// spawn.bomberBoss(1400, -500)
|
||||
// spawn.sniper(1800, -120)
|
||||
spawn.launcher(1800, -120)
|
||||
// spawn.cellBossCulture(1600, -500)
|
||||
// spawn.powerUpBoss(1600, -500)
|
||||
spawn.sniper(1200, -500)
|
||||
spawn.shield(mob[mob.length - 1], 1200, -500, 1);
|
||||
// spawn.sniper(1200, -500)
|
||||
// spawn.shield(mob[mob.length - 1], 1200, -500, 1);
|
||||
|
||||
// spawn.nodeBoss(1200, -500, "launcher")
|
||||
// spawn.snakeBoss(1200, -500)
|
||||
@@ -1817,7 +1817,7 @@ const level = {
|
||||
spawn.mapRect(-4450, -600, 2300, 750);
|
||||
spawn.mapRect(-2225, -500, 175, 550);
|
||||
// spawn.mapRect(-2600, -975, 450, 50);
|
||||
spawn.boost(-2800, -600, 1150);
|
||||
spawn.boost(-2800, -600, 1700);
|
||||
spawn.mapRect(-3450, -1325, 550, 50);
|
||||
spawn.mapRect(-3425, -2200, 525, 50);
|
||||
spawn.mapRect(-2600, -1700, 450, 50);
|
||||
@@ -2964,6 +2964,40 @@ const level = {
|
||||
spawn.randomMob(2450, 2030, 0.3)
|
||||
spawn.randomMob(3300, 1980, 0.3)
|
||||
levelCustom2();
|
||||
if (game.difficulty > 2) {
|
||||
if (Math.random() < 0.2) {
|
||||
// tether ball
|
||||
spawn.tetherBoss(8000, 630)
|
||||
let me = mob[mob.length - 1];
|
||||
me.onDeath = function () {
|
||||
this.removeCons(); //remove constraint
|
||||
spawnCouloirEnHaut()
|
||||
};
|
||||
cons[cons.length] = Constraint.create({
|
||||
pointA: {
|
||||
x: 8550,
|
||||
y: 680
|
||||
},
|
||||
bodyB: mob[mob.length - 1],
|
||||
stiffness: 0.00015
|
||||
});
|
||||
World.add(engine.world, cons[cons.length - 1]);
|
||||
if (game.difficulty > 4) spawn.nodeBoss(8000, 630, "spawns", 8, 20, 105);
|
||||
} else if (game.difficulty > 3) {
|
||||
spawn.randomLevelBoss(8000, 630, ["shooterBoss", "launcherBoss", "laserTargetingBoss", "spiderBoss", "laserBoss", "bomberBoss"]);
|
||||
let me = mob[mob.length - 1];
|
||||
me.onDeath = function () {
|
||||
this.removeCons(); //remove constraint
|
||||
spawnCouloirEnHaut()
|
||||
};
|
||||
}
|
||||
} else {
|
||||
spawn.randomLevelBoss(8000, 630, ["shooterBoss"]);
|
||||
let me = mob[mob.length - 1];
|
||||
me.onDeath = function () {
|
||||
spawnCouloirEnHaut()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function spawnCouloirEnHaut() {
|
||||
@@ -3227,41 +3261,6 @@ const level = {
|
||||
spawn.randomMob(1250, 55, 0.2);
|
||||
spawn.randomMob(8800, -45, 0.2);
|
||||
spawn.randomBoss(8025, -845, 0.2);
|
||||
|
||||
if (game.difficulty > 2) {
|
||||
if (Math.random() < 0.2) {
|
||||
// tether ball
|
||||
spawn.tetherBoss(8000, 630)
|
||||
let me = mob[mob.length - 1];
|
||||
me.onDeath = function () {
|
||||
this.removeCons(); //remove constraint
|
||||
spawnCouloirEnHaut()
|
||||
};
|
||||
cons[cons.length] = Constraint.create({
|
||||
pointA: {
|
||||
x: 8550,
|
||||
y: 680
|
||||
},
|
||||
bodyB: mob[mob.length - 1],
|
||||
stiffness: 0.00015
|
||||
});
|
||||
World.add(engine.world, cons[cons.length - 1]);
|
||||
if (game.difficulty > 4) spawn.nodeBoss(8000, 630, "spawns", 8, 20, 105);
|
||||
} else if (game.difficulty > 3) {
|
||||
spawn.randomLevelBoss(8000, 630, ["shooterBoss", "launcherBoss", "laserTargetingBoss", "spiderBoss", "laserBoss", "bomberBoss"]);
|
||||
let me = mob[mob.length - 1];
|
||||
me.onDeath = function () {
|
||||
this.removeCons(); //remove constraint
|
||||
spawnCouloirEnHaut()
|
||||
};
|
||||
}
|
||||
} else {
|
||||
spawn.randomLevelBoss(8000, 630, ["shooterBoss"]);
|
||||
let me = mob[mob.length - 1];
|
||||
me.onDeath = function () {
|
||||
spawnCouloirEnHaut()
|
||||
};
|
||||
}
|
||||
},
|
||||
house() {
|
||||
const rotor = level.rotor(4315, -315, -0.0002, 120, 20, 200);
|
||||
|
||||
@@ -519,7 +519,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "nail-bot upgrade",
|
||||
description: "<strong>125%</strong> increased <strong> fire rate</strong><br><em>applies to all current and future nail-bots</em>",
|
||||
description: "<strong>300%</strong> increased <strong> fire rate</strong><br><em>applies to all current and future nail-bots</em>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -558,7 +558,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "foam-bot upgrade",
|
||||
description: "<strong>125%</strong> increased <strong>foam size</strong><br><em>applies to all current and future foam-bots</em>",
|
||||
description: "<strong>200%</strong> increased <strong>foam size</strong><br><em>applies to all current and future foam-bots</em>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -597,7 +597,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "boom-bot upgrade",
|
||||
description: "<strong>125%</strong> increased <strong class='color-e'>explosion</strong> <strong class='color-d'>damage</strong> and size<br><em>applies to all current and future boom-bots</em>",
|
||||
description: "<strong>200%</strong> increased <strong class='color-e'>explosion</strong> <strong class='color-d'>damage</strong> and size<br><em>applies to all current and future boom-bots</em>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -636,7 +636,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "laser-bot upgrade",
|
||||
description: "<strong>125%</strong> increased laser <strong class='color-d'>damage</strong><br><em>applies to all current and future laser-bots</em>",
|
||||
description: "<strong>200%</strong> increased laser <strong class='color-d'>damage</strong><br><em>applies to all current and future laser-bots</em>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
|
||||
@@ -1374,7 +1374,7 @@ const mech = {
|
||||
for (let i = 0; i < mob.length; i++) {
|
||||
const distance = Vector.magnitude(Vector.sub(mech.pos, mob[i].position))
|
||||
if (distance < range) {
|
||||
const cap = mob[i].isShielded ? 7 : 3.5
|
||||
const cap = mob[i].isShielded ? 8 : 4
|
||||
if (mob[i].speed > cap && Vector.dot(mob[i].velocity, Vector.sub(mech.pos, mob[i].position)) > 0) { // if velocity is directed towards player
|
||||
Matter.Body.setVelocity(mob[i], Vector.mult(Vector.normalise(mob[i].velocity), cap)); //set velocity to cap, but keep the direction
|
||||
}
|
||||
@@ -1734,7 +1734,7 @@ const mech = {
|
||||
mech.grabPowerUp();
|
||||
mech.lookForPickUp(180);
|
||||
|
||||
const DRAIN = 0.0007
|
||||
const DRAIN = 0.0006
|
||||
if (mech.energy > DRAIN) {
|
||||
mech.energy -= DRAIN;
|
||||
if (mech.energy < DRAIN) {
|
||||
@@ -2425,7 +2425,7 @@ const mech = {
|
||||
) {
|
||||
const sub = Vector.sub(game.mouseInGame, mech.pos)
|
||||
const mag = Vector.magnitude(sub)
|
||||
const drain = 0.07 + 0.008 * Math.sqrt(mag)
|
||||
const drain = 0.04 + 0.007 * Math.sqrt(mag)
|
||||
if (mech.energy > drain && mag > 300) {
|
||||
mech.energy -= drain
|
||||
mech.hole.isReady = false;
|
||||
|
||||
@@ -22,8 +22,10 @@ const powerUps = {
|
||||
powerUps.endDraft();
|
||||
},
|
||||
showDraft() {
|
||||
// document.getElementById("choose-grid").style.gridTemplateColumns = "repeat(2, minmax(370px, 1fr))"
|
||||
document.getElementById("choose-grid").style.display = "grid"
|
||||
document.getElementById("choose-background").style.display = "inline"
|
||||
|
||||
document.body.style.cursor = "auto";
|
||||
if (mod.isExtraChoice) {
|
||||
document.body.style.overflowY = "scroll";
|
||||
@@ -591,8 +593,9 @@ const powerUps = {
|
||||
},
|
||||
spawn(x, y, target, moving = true, mode = null, size = powerUps[target].size()) {
|
||||
if (
|
||||
!(mod.isSuperDeterminism && (target === 'gun' || target === 'field' || target === 'reroll')) &&
|
||||
!(mod.isEnergyNoAmmo && target === 'ammo')
|
||||
(!mod.isSuperDeterminism || (target === 'mod' || target === 'heal' || target === 'ammo')) &&
|
||||
!(mod.isEnergyNoAmmo && target === 'ammo') &&
|
||||
(!game.isNoPowerUps || (target === 'reroll' || target === 'heal' || target === 'ammo'))
|
||||
) {
|
||||
powerUps.directSpawn(x, y, target, moving, mode, size)
|
||||
if (mod.duplicateChance && Math.random() < mod.duplicateChance) {
|
||||
|
||||
22
js/spawn.js
22
js/spawn.js
@@ -232,8 +232,8 @@ const spawn = {
|
||||
let me = mob[mob.length - 1];
|
||||
me.isBoss = true;
|
||||
me.frictionAir = 0.01
|
||||
me.seeAtDistance2 = 9000000;
|
||||
me.accelMag = 0.00065 * game.accelScale;
|
||||
me.seeAtDistance2 = 1000000;
|
||||
me.accelMag = 0.0005 * game.accelScale;
|
||||
Matter.Body.setDensity(me, 0.0006); //normal is 0.001
|
||||
me.collisionFilter.mask = cat.bullet | cat.player
|
||||
me.memory = Infinity;
|
||||
@@ -1682,9 +1682,9 @@ const spawn = {
|
||||
let me = mob[mob.length - 1];
|
||||
me.stroke = "transparent";
|
||||
me.onHit = function () {
|
||||
this.explode(this.mass * 10);
|
||||
this.explode(this.mass * 20);
|
||||
};
|
||||
Matter.Body.setDensity(me, 0.0001); //normal is 0.001
|
||||
Matter.Body.setDensity(me, 0.00005); //normal is 0.001
|
||||
me.timeLeft = 200;
|
||||
me.g = 0.001; //required if using 'gravity'
|
||||
me.frictionAir = 0;
|
||||
@@ -1704,7 +1704,7 @@ const spawn = {
|
||||
let me = mob[mob.length - 1];
|
||||
me.stroke = "transparent";
|
||||
me.onHit = function () {
|
||||
this.explode(this.mass * 10);
|
||||
this.explode(this.mass * 120);
|
||||
};
|
||||
me.onDeath = function () {
|
||||
if (game.difficulty > 4) {
|
||||
@@ -1736,7 +1736,7 @@ const spawn = {
|
||||
});
|
||||
}
|
||||
}
|
||||
Matter.Body.setDensity(me, 0.0001); //normal is 0.001
|
||||
Matter.Body.setDensity(me, 0.00005); //normal is 0.001
|
||||
me.timeLeft = 140 + Math.floor(Math.random() * 30);
|
||||
me.g = 0.001; //required if using 'gravity'
|
||||
me.frictionAir = 0;
|
||||
@@ -1867,9 +1867,9 @@ const spawn = {
|
||||
let me = mob[mob.length - 1];
|
||||
me.stroke = "transparent";
|
||||
me.onHit = function () {
|
||||
this.explode(this.mass * 10);
|
||||
this.explode(this.mass * 20);
|
||||
};
|
||||
Matter.Body.setDensity(me, 0.0001); //normal is 0.001
|
||||
Matter.Body.setDensity(me, 0.00005); //normal is 0.001
|
||||
me.timeLeft = 240;
|
||||
me.g = 0.001; //required if using 'gravity'
|
||||
me.frictionAir = 0;
|
||||
@@ -1956,13 +1956,13 @@ const spawn = {
|
||||
},
|
||||
seeker(x, y, radius = 5, sides = 0) {
|
||||
//bullets
|
||||
mobs.spawn(x, y, sides, radius, "rgb(100,100,255)");
|
||||
mobs.spawn(x, y, sides, radius, "rgb(150,150,255)");
|
||||
let me = mob[mob.length - 1];
|
||||
me.stroke = "transparent";
|
||||
me.onHit = function () {
|
||||
this.explode(this.mass * 10);
|
||||
this.explode(this.mass * 20);
|
||||
};
|
||||
Matter.Body.setDensity(me, 0.00005); //normal is 0.001
|
||||
Matter.Body.setDensity(me, 0.00002); //normal is 0.001
|
||||
me.timeLeft = 420 * (0.8 + 0.4 * Math.random());
|
||||
me.accelMag = 0.00017 * (0.8 + 0.4 * Math.random()) * game.accelScale;
|
||||
me.frictionAir = 0.01 * (0.8 + 0.4 * Math.random());
|
||||
|
||||
45
todo.txt
45
todo.txt
@@ -1,38 +1,31 @@
|
||||
|
||||
gun: pulse is now a mod for laser
|
||||
mod: beam splitter applies to pulse
|
||||
|
||||
difficulty balancing
|
||||
(this needs to be done as more mods are added to the game to prevent power creep)
|
||||
all modes are a bit harder
|
||||
if you used to play why, try the new hard
|
||||
if you used to play hard try the new normal
|
||||
power ups drop more often from bosses on all modes
|
||||
neutron bomb does 60% more damage
|
||||
powerUpBoss has a shorter vision range, and accelerates slower
|
||||
custom mode has the option to disable mod, guns, and fields
|
||||
|
||||
************** TODO - n-gon **************
|
||||
|
||||
add setting to disable power ups spawns for custom mode
|
||||
|
||||
mod - explosions apply radiation damage over time
|
||||
or spawn a neutron bomb with a timer
|
||||
or spawn a neutron bomb with a short timer
|
||||
|
||||
mod self destruct - drones explode when they die
|
||||
drones lose extra time on collisions
|
||||
|
||||
optional setting for people with desktops that want double mobs
|
||||
|
||||
combine more stuff?
|
||||
____ mod for ____
|
||||
flak -> missiles
|
||||
neutron bomb -> mines
|
||||
iceIX -> foam
|
||||
flechettes -> nail gun
|
||||
|
||||
mod: stealth field - mark a mob, it you next kill is that mob get a bonus power up
|
||||
run only at the start of a new level
|
||||
|
||||
add an ending to the game
|
||||
revamp the boss level, or add a new final level
|
||||
final level requires you to kill something
|
||||
so skipping content is only smart if you are strong enough to beat the final boss
|
||||
add a final boss battle level
|
||||
final boss has elements of other bosses
|
||||
alternate between black hole aura and laser beams
|
||||
fire seeker bullets
|
||||
drop bombs
|
||||
tail of shielded mobs
|
||||
shield
|
||||
mirror ending (if no cheats)
|
||||
level after final boss battle is the intro level, but flipped left right, with a fake player
|
||||
damage the fake player to end the game?
|
||||
no ending (if cheats)
|
||||
game goes on forever
|
||||
|
||||
around level 15
|
||||
game never ends if you have used cheats
|
||||
|
||||
|
||||
Reference in New Issue
Block a user