turret mod
This commit is contained in:
@@ -388,6 +388,7 @@ const b = {
|
||||
if (Matter.Query.collides(this, map).length > 0) { //touching map
|
||||
if (angle > -0.2 || angle < -1.5) { //don't stick to level ground
|
||||
Matter.Body.setStatic(this, true) //don't set to static if not touching map
|
||||
this.collisionFilter.mask = cat.map | cat.bullet
|
||||
} else {
|
||||
Matter.Body.setVelocity(this, {
|
||||
x: 0,
|
||||
|
||||
@@ -13,7 +13,6 @@ const game = {
|
||||
mech.airControl()
|
||||
}
|
||||
// level.checkZones();
|
||||
level.custom();
|
||||
level.checkQuery();
|
||||
mech.move();
|
||||
mech.look();
|
||||
@@ -23,6 +22,7 @@ const game = {
|
||||
level.drawFillBGs();
|
||||
level.exit.draw();
|
||||
level.enter.draw();
|
||||
level.custom();
|
||||
game.draw.powerUp();
|
||||
mobs.draw();
|
||||
game.draw.cons();
|
||||
|
||||
92
js/level.js
92
js/level.js
@@ -18,7 +18,7 @@ const level = {
|
||||
// mech.setField("plasma torch")
|
||||
|
||||
level.intro(); //starting level
|
||||
// level.bossRoom1()
|
||||
// level.sewer()
|
||||
// level.testing();
|
||||
// level.template()
|
||||
// level.bosses();
|
||||
@@ -68,17 +68,79 @@ const level = {
|
||||
//******************************************************************************************************************
|
||||
//******************************************************************************************************************
|
||||
//******************************************************************************************************************
|
||||
bossRoom1() {
|
||||
rotor(x, y, radius = 900, width = 50, density = 0.0002) {
|
||||
const rotor1 = Matter.Bodies.rectangle(x, y, width, radius, {
|
||||
density: density,
|
||||
});
|
||||
const rotor2 = Matter.Bodies.rectangle(x, y, width, radius, {
|
||||
angle: Math.PI / 2,
|
||||
density: density,
|
||||
});
|
||||
const rotor = Body.create({ //combine rotor1 and rotor2
|
||||
parts: [rotor1, rotor2],
|
||||
// friction: 0,
|
||||
// frictionAir: 0,
|
||||
// frictionStatic: 0,
|
||||
// restitution: 0,
|
||||
collisionFilter: {
|
||||
category: cat.body,
|
||||
mask: cat.body | cat.mob | cat.mobBullet | cat.mobShield | cat.powerUp | cat.player | cat.bullet
|
||||
},
|
||||
});
|
||||
Matter.Body.setPosition(rotor, {
|
||||
x: x,
|
||||
y: y
|
||||
});
|
||||
World.add(engine.world, [rotor]);
|
||||
body[body.length] = rotor1
|
||||
body[body.length] = rotor2
|
||||
|
||||
setTimeout(function () {
|
||||
rotor.collisionFilter.category = cat.body;
|
||||
rotor.collisionFilter.mask = cat.body | cat.player | cat.bullet | cat.mob | cat.mobBullet //| cat.map
|
||||
}, 1000);
|
||||
|
||||
const constraint = Constraint.create({ //fix rotor in place, but allow rotation
|
||||
pointA: {
|
||||
x: x,
|
||||
y: y
|
||||
},
|
||||
bodyB: rotor
|
||||
});
|
||||
World.add(engine.world, constraint);
|
||||
return rotor
|
||||
},
|
||||
sewer() {
|
||||
const rotor = level.rotor(3050, 1850)
|
||||
// const rotor2 = level.rotor(3050, 1200)
|
||||
|
||||
level.custom = () => {
|
||||
Matter.Body.applyForce(rotor, {
|
||||
x: rotor.position.x + 100,
|
||||
y: rotor.position.y + 100
|
||||
}, {
|
||||
x: 0.001 * rotor.mass,
|
||||
y: 0
|
||||
})
|
||||
// Matter.Body.applyForce(rotor2, {
|
||||
// x: rotor2.position.x + 100,
|
||||
// y: rotor2.position.y + 100
|
||||
// }, {
|
||||
// x: -0.001 * rotor2.mass,
|
||||
// y: 0
|
||||
// })
|
||||
|
||||
level.playerExitCheck();
|
||||
};
|
||||
level.setPosToSpawn(0, -50); //normal spawn
|
||||
level.setPosToSpawn(3775, 425); //normal spawn
|
||||
// level.setPosToSpawn(0, -50); //normal spawn
|
||||
|
||||
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||
level.exit.x = 1500;
|
||||
level.exit.y = -1875;
|
||||
level.defaultZoom = 1800
|
||||
game.zoomTransition(level.defaultZoom)
|
||||
document.body.style.backgroundColor = "#dcdcde";
|
||||
document.body.style.backgroundColor = "hsl(138, 3%, 74%)";
|
||||
// powerUps.spawnStartingPowerUps(1475, -1175);
|
||||
// spawn.debris(750, -2200, 3700, 16); //16 debris per level
|
||||
// level.fill.push({ //foreground
|
||||
@@ -96,7 +158,27 @@ const level = {
|
||||
// color: "#d4d4d7"
|
||||
// });
|
||||
|
||||
spawn.mapRect(-100, 0, 1000, 100);
|
||||
spawn.mapRect(-400, -500, 100, 600); //left entrance wall
|
||||
spawn.mapRect(-400, -500, 3800, 100); //ceiling
|
||||
spawn.mapRect(-400, 0, 3000, 100); //floor
|
||||
spawn.mapRect(300, -500, 100, 400); //right entrance wall
|
||||
|
||||
|
||||
spawn.mapRect(600, -200, 400, 100);
|
||||
spawn.mapRect(1250, -250, 300, 300);
|
||||
spawn.mapRect(2000, -150, 300, 200);
|
||||
|
||||
spawn.mapRect(3300, -500, 100, 700); //right down tube wall
|
||||
spawn.mapRect(3000, 500, 100, 1400); //right down tube wall
|
||||
spawn.mapRect(3000, 500, 1000, 100); //tube right exit floor
|
||||
spawn.mapRect(3300, 100, 1000, 100); //tube right exit ceiling
|
||||
|
||||
spawn.mapRect(2500, 0, 100, 1900); //left down tube wall
|
||||
spawn.mapRect(850, 2300, 2800, 100);
|
||||
spawn.mapRect(3000, 1800, 600, 100);
|
||||
|
||||
|
||||
|
||||
// spawn.bodyRect(1540, -1110, 300, 25, 0.9);
|
||||
// spawn.boost(4150, 0, 1300);
|
||||
// spawn.randomSmallMob(1300, -70);
|
||||
|
||||
421
js/mods.js
421
js/mods.js
@@ -196,7 +196,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "radiative equilibrium",
|
||||
description: "increase <strong class='color-d'>damage</strong> by <strong>100%</strong><br>for <strong>10 seconds</strong> after receiving <strong>harm</strong>",
|
||||
description: "for <strong>10 seconds</strong> after receiving <strong class='color-harm'>harm</strong><br>increase <strong class='color-d'>damage</strong> by <strong>100%</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -436,7 +436,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "bot replication",
|
||||
description: "<strong>duplicate</strong> your permanent <strong>bots</strong><br>remove <strong>90%</strong> of your <strong>ammo</strong>",
|
||||
description: "<strong>duplicate</strong> your permanent <strong>bots</strong><br>remove <strong>90%</strong> of your <strong class='color-g'>ammo</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
// isNonRefundable: true,
|
||||
@@ -501,7 +501,7 @@ const mod = {
|
||||
// },
|
||||
{
|
||||
name: "ablative drones",
|
||||
description: "rebuild your broken parts as <strong>drones</strong><br>chance to occur after being <strong>harmed</strong>",
|
||||
description: "rebuild your broken parts as <strong>drones</strong><br>chance to occur after receiving <strong class='color-harm'>harm</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -540,7 +540,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "Pauli exclusion",
|
||||
description: `after receiving <strong>harm</strong> from a collision<br><strong>immune</strong> to <strong>harm</strong> for <strong>1</strong> second`,
|
||||
description: `after receiving <strong class='color-harm'>harm</strong> from a collision<br><strong>immune</strong> to <strong class='color-harm'>harm</strong> for <strong>1</strong> second`,
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -557,7 +557,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "non-Newtonian armor",
|
||||
description: "for <strong>10 seconds</strong> after receiving <strong>harm</strong><br>reduce <strong>harm</strong> by <strong>50%</strong>",
|
||||
description: "for <strong>10 seconds</strong> after receiving <strong class='color-harm'>harm</strong><br>reduce <strong class='color-harm'>harm</strong> by <strong>50%</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -573,7 +573,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "clock gating",
|
||||
description: `<strong>slow</strong> <strong>time</strong> by <strong>50%</strong> after receiving <strong>harm</strong><br>reduce <strong>harm</strong> by <strong>15%</strong>`,
|
||||
description: `<strong>slow</strong> <strong>time</strong> by <strong>50%</strong> after receiving <strong class='color-harm'>harm</strong><br>reduce <strong class='color-harm'>harm</strong> by <strong>15%</strong>`,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -595,7 +595,7 @@ const mod = {
|
||||
game.boldActiveGunHUD();
|
||||
}, 1000);
|
||||
},
|
||||
description: "while your <strong>first gun</strong> is equipped<br>reduce <strong>harm</strong> by <strong>16%</strong> for each of your <strong class='color-g'>guns</strong>",
|
||||
description: "while your <strong>first gun</strong> is equipped<br>reduce <strong class='color-harm'>harm</strong> by <strong>16%</strong> for each of your <strong class='color-g'>guns</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -615,7 +615,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "piezoelectricity",
|
||||
description: "<strong>colliding</strong> with mobs fills your <strong class='color-f'>energy</strong><br><strong>15%</strong> less <strong>harm</strong> from mob collisions",
|
||||
description: "<strong>colliding</strong> with mobs fills your <strong class='color-f'>energy</strong><br><strong>15%</strong> less <strong class='color-harm'>harm</strong> from mob collisions",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -632,7 +632,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "ground state",
|
||||
description: "reduce <strong>harm</strong> by <strong>50%</strong><br>you <strong>no longer</strong> passively regenerate <strong class='color-f'>energy</strong>",
|
||||
description: "reduce <strong class='color-harm'>harm</strong> by <strong>50%</strong><br>you <strong>no longer</strong> passively regenerate <strong class='color-f'>energy</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -650,7 +650,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "mass-energy equivalence",
|
||||
description: "<strong class='color-f'>energy</strong> protects you instead of <strong>health</strong><br><strong>harm reduction</strong> effects provide <strong>no</strong> benefit",
|
||||
description: "<strong class='color-f'>energy</strong> protects you instead of <strong>health</strong><br><strong class='color-harm'>harm</strong> <strong>reduction</strong> effects provide <strong>no</strong> benefit",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -818,198 +818,6 @@ const mod = {
|
||||
mod.recursiveHealing = 1;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "bubble fusion",
|
||||
description: "after destroying a mob's <strong>shield</strong><br>spawn <strong>3</strong> <strong class='color-h'>heals</strong>, <strong>ammo</strong>, or <strong class='color-r'>rerolls</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
mod.isShieldAmmo = true;
|
||||
},
|
||||
remove() {
|
||||
mod.isShieldAmmo = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Bayesian inference",
|
||||
description: "<strong>40%</strong> chance for double <strong>power ups</strong> to drop<br><strong>ammo</strong> will no longer <strong>spawn</strong> from mobs",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect: () => {
|
||||
mod.bayesian = 0.4;
|
||||
},
|
||||
remove() {
|
||||
mod.bayesian = 0;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "logistics",
|
||||
description: "<strong>ammo</strong> power ups add to your <strong>current gun</strong><br>spawn <strong>5 ammo</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return b.inventory.length > 1
|
||||
},
|
||||
requires: "at least 2 guns",
|
||||
effect() {
|
||||
mod.isAmmoForGun = true;
|
||||
for (let i = 0; i < 5; i++) {
|
||||
powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
||||
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
mod.isAmmoForGun = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "supply chain",
|
||||
description: "double your current <strong>ammo</strong> for all <strong class='color-g'>guns</strong>",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
return mod.isAmmoForGun
|
||||
},
|
||||
requires: "logistics",
|
||||
effect() {
|
||||
for (let i = 0; i < b.guns.length; i++) {
|
||||
if (b.guns[i].have) b.guns[i].ammo = Math.floor(2 * b.guns[i].ammo)
|
||||
}
|
||||
game.makeGunHUD();
|
||||
},
|
||||
remove() {}
|
||||
},
|
||||
{
|
||||
name: "catabolism",
|
||||
description: "gain <strong>ammo</strong> when you <strong>fire</strong> while <strong>out</strong> of <strong>ammo</strong><br>drains <strong>2%</strong> of <strong>max health</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return !mod.isEnergyHealth
|
||||
},
|
||||
requires: "not mass-energy equivalence",
|
||||
effect: () => {
|
||||
mod.isAmmoFromHealth = 0.02;
|
||||
},
|
||||
remove() {
|
||||
mod.isAmmoFromHealth = 0;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "desublimated ammunition",
|
||||
description: "use <strong>50%</strong> less <strong>ammo</strong> when <strong>crouching</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
mod.isCrouchAmmo = true
|
||||
},
|
||||
remove() {
|
||||
mod.isCrouchAmmo = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "gun turret",
|
||||
description: "reduce <strong>harm</strong> by <strong>50%</strong> when <strong>crouching</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return mod.isCrouchAmmo
|
||||
},
|
||||
requires: "desublimated ammunition",
|
||||
effect() {
|
||||
mod.isTurret = true
|
||||
},
|
||||
remove() {
|
||||
mod.isTurret = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "cardinality",
|
||||
description: "<strong>2</strong> extra <strong>choices</strong> for <strong class='color-m'>mods</strong>, <strong class='color-g'>guns</strong>, and <strong>fields</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return !mod.isDeterminism
|
||||
},
|
||||
requires: "not determinism",
|
||||
effect: () => {
|
||||
mod.isExtraChoice = true;
|
||||
},
|
||||
remove() {
|
||||
mod.isExtraChoice = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "determinism",
|
||||
description: "spawn <strong>5</strong> <strong class='color-m'>mods</strong><br><strong class='color-m'>mods</strong>, <strong class='color-g'>guns</strong>, and <strong>fields</strong> have only <strong>1 choice</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
return !mod.isExtraChoice
|
||||
},
|
||||
requires: "not cardinality",
|
||||
effect: () => {
|
||||
mod.isDeterminism = true;
|
||||
for (let i = 0; i < 5; i++) { //if you change the six also change it in Born rule
|
||||
powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
mod.isDeterminism = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "superdeterminism",
|
||||
description: "spawn <strong>4</strong> <strong class='color-m'>mods</strong><br><strong class='color-r'>rerolls</strong>, <strong class='color-g'>guns</strong>, and <strong>fields</strong> no longer <strong>spawn</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
return mod.isDeterminism && !mod.manyWorlds
|
||||
},
|
||||
requires: "determinism",
|
||||
effect: () => {
|
||||
mod.isSuperDeterminism = true;
|
||||
for (let i = 0; i < 4; i++) { //if you change the six also change it in Born rule
|
||||
powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
mod.isSuperDeterminism = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "many-worlds",
|
||||
description: "after choosing a <strong class='color-m'>mod</strong>, <strong class='color-g'>gun</strong>, or <strong>field</strong><br>spawn a <strong class='color-r'>reroll</strong>, if you have none",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return !mod.isSuperDeterminism
|
||||
},
|
||||
requires: "not superdeterminism",
|
||||
effect: () => {
|
||||
mod.manyWorlds = true;
|
||||
},
|
||||
remove() {
|
||||
mod.manyWorlds = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "anthropic principle",
|
||||
nameInfo: "<span id = 'mod-anthropic'></span>",
|
||||
@@ -1035,6 +843,199 @@ const mod = {
|
||||
mod.isDeathAvoid = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "bubble fusion",
|
||||
description: "after destroying a mob's <strong>shield</strong><br>spawn <strong>3</strong> <strong class='color-h'>heals</strong>, <strong class='color-g'>ammo</strong>, or <strong class='color-r'>rerolls</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
mod.isShieldAmmo = true;
|
||||
},
|
||||
remove() {
|
||||
mod.isShieldAmmo = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Bayesian inference",
|
||||
description: "<strong>40%</strong> chance for double <strong>power ups</strong> to drop<br><strong class='color-g'>ammo</strong> will no longer <strong>spawn</strong> from mobs",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect: () => {
|
||||
mod.bayesian = 0.4;
|
||||
},
|
||||
remove() {
|
||||
mod.bayesian = 0;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "logistics",
|
||||
description: "<strong class='color-g'>ammo</strong> power ups add to your <strong>current gun</strong><br>spawn <strong>5 ammo</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return b.inventory.length > 1
|
||||
},
|
||||
requires: "at least 2 guns",
|
||||
effect() {
|
||||
mod.isAmmoForGun = true;
|
||||
for (let i = 0; i < 5; i++) {
|
||||
powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
||||
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "ammo");
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
mod.isAmmoForGun = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "supply chain",
|
||||
description: "double your current <strong class='color-g'>ammo</strong> for all <strong class='color-g'>guns</strong>",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
return mod.isAmmoForGun
|
||||
},
|
||||
requires: "logistics",
|
||||
effect() {
|
||||
for (let i = 0; i < b.guns.length; i++) {
|
||||
if (b.guns[i].have) b.guns[i].ammo = Math.floor(2 * b.guns[i].ammo)
|
||||
}
|
||||
game.makeGunHUD();
|
||||
},
|
||||
remove() {}
|
||||
},
|
||||
{
|
||||
name: "catabolism",
|
||||
description: "gain <strong class='color-g'>ammo</strong> when you <strong>fire</strong> while <strong>out</strong> of <strong class='color-g'>ammo</strong><br>drains <strong>2%</strong> of <strong>max health</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return !mod.isEnergyHealth
|
||||
},
|
||||
requires: "not mass-energy equivalence",
|
||||
effect: () => {
|
||||
mod.isAmmoFromHealth = 0.02;
|
||||
},
|
||||
remove() {
|
||||
mod.isAmmoFromHealth = 0;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "desublimated ammunition",
|
||||
description: "use <strong>50%</strong> less <strong class='color-g'>ammo</strong> when <strong>crouching</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
mod.isCrouchAmmo = true
|
||||
},
|
||||
remove() {
|
||||
mod.isCrouchAmmo = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "gun turret",
|
||||
description: "reduce <strong class='color-harm'>harm</strong> by <strong>50%</strong> when <strong>crouching</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return mod.isCrouchAmmo
|
||||
},
|
||||
requires: "desublimated ammunition",
|
||||
effect() {
|
||||
mod.isTurret = true
|
||||
},
|
||||
remove() {
|
||||
mod.isTurret = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "cardinality",
|
||||
description: "<strong class='color-m'>mods</strong>, <strong class='color-f'>fields</strong>, and <strong class='color-g'>guns</strong> have <strong>5</strong> <strong>choices</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return !mod.isDeterminism
|
||||
},
|
||||
requires: "not determinism",
|
||||
effect: () => {
|
||||
mod.isExtraChoice = true;
|
||||
},
|
||||
remove() {
|
||||
mod.isExtraChoice = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "determinism",
|
||||
description: "spawn <strong>5</strong> <strong class='color-m'>mods</strong><br><strong class='color-m'>mods</strong>, <strong class='color-f'>fields</strong>, and <strong class='color-g'>guns</strong> have only <strong>1 choice</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
return !mod.isExtraChoice
|
||||
},
|
||||
requires: "not cardinality",
|
||||
effect: () => {
|
||||
mod.isDeterminism = true;
|
||||
for (let i = 0; i < 5; i++) { //if you change the six also change it in Born rule
|
||||
powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
mod.isDeterminism = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "superdeterminism",
|
||||
description: "spawn <strong>4</strong> <strong class='color-m'>mods</strong><br><strong class='color-r'>rerolls</strong>, <strong class='color-g'>guns</strong>, and <strong class='color-f'>fields</strong> no longer <strong>spawn</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
return mod.isDeterminism && !mod.manyWorlds
|
||||
},
|
||||
requires: "determinism",
|
||||
effect: () => {
|
||||
mod.isSuperDeterminism = true;
|
||||
for (let i = 0; i < 4; i++) { //if you change the six also change it in Born rule
|
||||
powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
if (Math.random() < mod.bayesian) powerUps.spawn(mech.pos.x, mech.pos.y, "mod");
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
mod.isSuperDeterminism = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "many-worlds",
|
||||
description: "after choosing a <strong class='color-m'>mod</strong>, <strong class='color-f'>field</strong>, or <strong class='color-g'>gun</strong><br>spawn a <strong class='color-r'>reroll</strong>, if you have none",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
return !mod.isSuperDeterminism
|
||||
},
|
||||
requires: "not superdeterminism",
|
||||
effect: () => {
|
||||
mod.manyWorlds = true;
|
||||
},
|
||||
remove() {
|
||||
mod.manyWorlds = false;
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
name: "quantum immortality",
|
||||
description: "after <strong>dying</strong>, continue in an <strong>alternate reality</strong><br>spawn <strong>5</strong> <strong class='color-r'>rerolls</strong>",
|
||||
@@ -1198,7 +1199,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "shotgun spin-statistics",
|
||||
description: "firing the <strong>shotgun</strong> makes you <br><strong>immune</strong> to <strong>harm</strong> while on cooldown",
|
||||
description: "firing the <strong>shotgun</strong> makes you <br><strong>immune</strong> to <strong class='color-harm'>harm</strong> while on cooldown",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -1278,7 +1279,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "flechettes cartridges",
|
||||
description: "<strong>flechettes</strong> release <strong>three</strong> needles in each shot<br><strong>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>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -1472,7 +1473,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "optimized shell packing",
|
||||
description: "<strong>flak</strong> ammo drops contain <strong>3x</strong> more shells",
|
||||
description: "<strong>flak</strong> <strong class='color-g'>ammo</strong> drops contain <strong>3x</strong> more shells",
|
||||
maxCount: 3,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -1572,7 +1573,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "mine reclamation",
|
||||
description: "retrieve <strong>ammo</strong> from all undetonated <strong>mines</strong><br>and <strong>20%</strong> of <strong>mines</strong> after detonation",
|
||||
description: "retrieve <strong class='color-g'>ammo</strong> from all undetonated <strong>mines</strong><br>and <strong>20%</strong> of <strong>mines</strong> after detonation",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -1855,7 +1856,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "timelike world line",
|
||||
description: "<strong>time dilation</strong> doubles your time <strong>rate</strong><br>and makes you <strong>immune</strong> to <strong>harm</strong>",
|
||||
description: "<strong>time dilation</strong> doubles your time <strong>rate</strong><br>and makes you <strong>immune</strong> to <strong class='color-harm'>harm</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -1911,7 +1912,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "degenerate matter",
|
||||
description: "<strong>harm</strong> reduction from <strong>negative mass field</strong><br>is increased from 60% to <strong>80%</strong>",
|
||||
description: "<strong class='color-harm'>harm</strong> reduction from <strong>negative mass field</strong><br>is increased from 60% to <strong>80%</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
allowed() {
|
||||
@@ -2126,7 +2127,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "ammo",
|
||||
description: "spawn <strong>6 ammo</strong> power ups",
|
||||
description: "spawn <strong>6</strong> <strong class='color-g'>ammo</strong> power ups",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
@@ -2179,7 +2180,7 @@ const mod = {
|
||||
},
|
||||
{
|
||||
name: "field",
|
||||
description: "spawn a <strong>field</strong> power up",
|
||||
description: "spawn a <strong class='color-f'>field</strong> power up",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
isNonRefundable: true,
|
||||
|
||||
@@ -1163,7 +1163,7 @@ const mech = {
|
||||
},
|
||||
fieldUpgrades: [{
|
||||
name: "field emitter",
|
||||
description: "use <strong class='color-f'>energy</strong> to <strong>shield</strong> yourself from <strong>harm</strong><br><strong>pick up</strong> and <strong>throw</strong> objects",
|
||||
description: "use <strong class='color-f'>energy</strong> to <strong>shield</strong> yourself from <strong class='color-harm'>harm</strong><br><strong>pick up</strong> and <strong>throw</strong> objects",
|
||||
isEasyToAim: false,
|
||||
effect: () => {
|
||||
game.replaceTextLog = true; //allow text over write
|
||||
@@ -1190,7 +1190,7 @@ const mech = {
|
||||
},
|
||||
{
|
||||
name: "standing wave harmonics",
|
||||
description: "three oscillating <strong>shields</strong> are permanently active<br>reduce <strong>harm</strong> by <strong>33%</strong>",
|
||||
description: "three oscillating <strong>shields</strong> are permanently active<br>reduce <strong class='color-harm'>harm</strong> by <strong>33%</strong>",
|
||||
isEasyToAim: true,
|
||||
effect: () => {
|
||||
mech.fieldHarmReduction = 0.67;
|
||||
@@ -1347,7 +1347,7 @@ const mech = {
|
||||
},
|
||||
{
|
||||
name: "negative mass field",
|
||||
description: "use <strong class='color-f'>energy</strong> to nullify <strong style='letter-spacing: 12px;'>gravity</strong><br>reduce <strong>harm</strong> by <strong>60%</strong>",
|
||||
description: "use <strong class='color-f'>energy</strong> to nullify <strong style='letter-spacing: 12px;'>gravity</strong><br>reduce <strong class='color-harm'>harm</strong> by <strong>60%</strong>",
|
||||
fieldDrawRadius: 0,
|
||||
isEasyToAim: true,
|
||||
effect: () => {
|
||||
|
||||
Reference in New Issue
Block a user