bug fixes and mod -> tech renaming

This commit is contained in:
landgreen
2020-12-26 08:54:16 -08:00
parent 0e9d2bcc30
commit 0d70e3918d
10 changed files with 217 additions and 241 deletions

View File

@@ -109,7 +109,7 @@ function collisionChecks(event) {
}
mech.damage(dmg);
if (tech.isPiezo) mech.energy += 2;
if (tech.isBayesian) powerUps.ejectMod()
if (tech.isBayesian) powerUps.ejectTech()
if (mob[k].onHit) mob[k].onHit(k);
mech.immuneCycle = mech.cycle + tech.collisionImmuneCycles; //player is immune to collision damage for 30 cycles
//extra kick between player and mob //this section would be better with forces but they don't work...

View File

@@ -155,7 +155,7 @@ const build = {
for (const property in set) {
set[property] = set[property].replace(/%20/g, " ")
if (property.substring(0, 3) === "gun") b.giveGuns(set[property])
if (property.substring(0, 3) === "tech") tech.giveMod(set[property])
if (property.substring(0, 3) === "tech") tech.giveTech(set[property])
if (property === "field") mech.setField(set[property])
if (property === "difficulty") {
simulation.difficultyMode = Number(set[property])
@@ -181,7 +181,7 @@ const build = {
if (!simulation.isChoosing) text += `<div class="pause-grid-module">
<span style="font-size:1.5em;font-weight: 600;">PAUSED</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; press P to resume</div>`
text += `<div class="pause-grid-module" style = "font-size: 13px;line-height: 120%;padding: 5px;">
<strong class='color-d'>damage</strong> increase: ${((tech.damageFromMods()-1)*100).toFixed(0)}%
<strong class='color-d'>damage</strong> increase: ${((tech.damageFromTech()-1)*100).toFixed(0)}%
<br><strong class='color-harm'>harm</strong> reduction: ${((1-mech.harmReduction())*100).toFixed(0)}%
<br><strong><em>fire delay</em></strong> decrease: ${((1-b.fireCD)*100).toFixed(0)}%
<br><strong class='color-dup'>duplication</strong> chance: ${(Math.min(1,tech.duplicationChance())*100).toFixed(0)}%
@@ -212,19 +212,19 @@ const build = {
el.innerHTML = text
text = "";
text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid field"></div> &nbsp; ${mech.fieldUpgrades[mech.fieldMode].name}</div> ${mech.fieldUpgrades[mech.fieldMode].description}</div>`
let countMods = 0
let countTech = 0
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].count > 0) {
const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
if (tech.tech[i].isFieldMod) {
if (tech.tech[i].isFieldTech) {
text += `<div class="pause-grid-module"><div class="grid-title">
<span style="position:relative;">
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
<div class="circle-grid field" style="position:absolute; top:0; left:10px;opacity:0.65;"></div>
</span>
&nbsp; &nbsp; &nbsp; &nbsp; ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
} else if (tech.tech[i].isGunMod) {
} else if (tech.tech[i].isGunTech) {
text += `<div class="pause-grid-module"><div class="grid-title">
<span style="position:relative;">
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
@@ -232,20 +232,15 @@ const build = {
</span>
&nbsp; &nbsp; &nbsp; &nbsp; ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
} else {
text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid mod"></div> &nbsp; ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid tech"></div> &nbsp; ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
}
// if (tech.tech[i].count === 1) {
// text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid mod"></div> &nbsp; ${tech.tech[i].name}</div> ${tech.tech[i].description}</div>`
// } else {
// text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid mod"></div> &nbsp; ${tech.tech[i].name} (${tech.tech[i].count}x)</div> ${tech.tech[i].description}</div>`
// }
countMods++
countTech++
}
}
el = document.getElementById("pause-grid-right")
el.style.display = "grid"
el.innerHTML = text
if (countMods > 5 || b.inventory.length > 6) {
if (countTech > 5 || b.inventory.length > 6) {
document.body.style.overflowY = "scroll";
document.body.style.overflowX = "hidden";
}
@@ -287,9 +282,9 @@ const build = {
} else if (type === "tech") { //remove tech if you have too many
if (tech.tech[index].count < tech.tech[index].maxCount) {
if (!who.classList.contains("build-tech-selected")) who.classList.add("build-tech-selected");
tech.giveMod(index)
tech.giveTech(index)
} else {
tech.removeMod(index);
tech.removeTech(index);
who.classList.remove("build-tech-selected");
}
}
@@ -299,7 +294,7 @@ const build = {
if (!tech.tech[i].isCustomHide) {
if (tech.tech[i].allowed() || isAllowed || tech.tech[i].count > 0) {
const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
if (tech.tech[i].isFieldMod) {
if (tech.tech[i].isFieldTech) {
techID.innerHTML = ` <div class="grid-title">
<span style="position:relative;">
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
@@ -310,7 +305,7 @@ const build = {
// <div class="circle-grid gun" style="position:absolute; top:-3px; left:-3px; opacity:1; height: 33px; width:33px;"></div>
// <div class="circle-grid tech" style="position:absolute; top:5px; left:5px;opacity:1;height: 20px; width:20px;border: #fff solid 2px;"></div>
// border: #fff solid 0px;
} else if (tech.tech[i].isGunMod) {
} else if (tech.tech[i].isGunTech) {
techID.innerHTML = ` <div class="grid-title">
<span style="position:relative;">
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
@@ -331,7 +326,7 @@ const build = {
techID.classList.add("build-grid-disabled");
techID.onclick = null
}
if (tech.tech[i].count > 0) tech.removeMod(i)
if (tech.tech[i].count > 0) tech.removeTech(i)
if (techID.classList.contains("build-tech-selected")) techID.classList.remove("build-tech-selected");
}
}
@@ -412,7 +407,7 @@ const build = {
b.activeGun = null;
simulation.makeGunHUD();
tech.setupAllMods();
tech.setupAllTech();
build.populateGrid();
document.getElementById("field-0").classList.add("build-field-selected");
document.getElementById("build-grid").style.display = "grid"
@@ -805,7 +800,7 @@ window.addEventListener("keydown", function(event) {
mech.energy = mech.maxEnergy;
break
case "y":
tech.giveMod()
tech.giveTech()
break
case "r":
mech.resetHistory();

View File

@@ -18,9 +18,9 @@ const level = {
// simulation.setZoom();
// mech.setField("plasma torch")
// b.giveGuns("wave beam")
// tech.giveMod("CPT reversal")
// tech.giveMod("CPT gun")
// for (let i = 0; i < 15; i++) tech.giveMod("plasma jet")
// tech.giveTech("CPT reversal")
// tech.giveTech("CPT gun")
// for (let i = 0; i < 15; i++) tech.giveTech("plasma jet")
level.intro(); //starting level
// level.testing(); //not in rotation
@@ -3834,7 +3834,7 @@ const level = {
if (tech.tech[i].isLost) tech.tech[i].isLost = false;
}
tech.isDeathAvoidedThisLevel = false;
simulation.updateModHUD();
simulation.updateTechHUD();
simulation.clearNow = true; //triggers in simulation.clearMap to remove all physics bodies and setup for new map
},
playerExitCheck() {

View File

@@ -999,7 +999,7 @@ const mobs = {
},
damage(dmg, isBypassShield = false) {
if ((!this.isShielded || isBypassShield) && this.alive) {
dmg *= tech.damageFromMods()
dmg *= tech.damageFromTech()
//mobs specific damage changes
if (tech.isFarAwayDmg) dmg *= 1 + Math.sqrt(Math.max(500, Math.min(3000, this.distanceToPlayer())) - 500) * 0.0067 //up to 50% dmg at max range of 3500
if (this.shield) dmg *= 0.075

View File

@@ -327,17 +327,17 @@ const mech = {
if (tech.isImmortal) { //if player has the immortality buff, spawn on the same level with randomized damage
simulation.isTextLogOpen = false;
//count tech
let totalMods = 0;
let totalTech = 0;
for (let i = 0; i < tech.tech.length; i++) {
if (!tech.tech[i].isNonRefundable) totalMods += tech.tech[i].count
if (!tech.tech[i].isNonRefundable) totalTech += tech.tech[i].count
}
if (tech.isDeterminism) totalMods -= 3 //remove the bonus tech
if (tech.isSuperDeterminism) totalMods -= 2 //remove the bonus tech
totalMods = totalMods * 1.15 + 1 // a few extra to make it stronger
if (tech.isDeterminism) totalTech -= 3 //remove the bonus tech
if (tech.isSuperDeterminism) totalTech -= 2 //remove the bonus tech
totalTech = totalTech * 1.15 + 1 // a few extra to make it stronger
const totalGuns = b.inventory.length //count guns
function randomizeMods() {
for (let i = 0; i < totalMods; i++) {
function randomizeTech() {
for (let i = 0; i < totalTech; i++) {
//find what tech I don't have
let options = [];
for (let i = 0, len = tech.tech.length; i < len; i++) {
@@ -351,12 +351,12 @@ const mech = {
//add a new tech
if (options.length > 0) {
const choose = Math.floor(Math.random() * options.length)
let newMod = options[choose]
tech.giveMod(newMod)
let newTech = options[choose]
tech.giveTech(newTech)
options.splice(choose, 1);
}
}
simulation.updateModHUD();
simulation.updateTechHUD();
}
function randomizeField() {
@@ -398,13 +398,13 @@ const mech = {
spawn.setSpawnList(); //new mob types
simulation.clearNow = true; //triggers a map reset
tech.setupAllMods(); //remove all tech
tech.setupAllTech(); //remove all tech
for (let i = 0; i < bullet.length; ++i) Matter.World.remove(engine.world, bullet[i]);
bullet = []; //remove all bullets
randomizeHealth()
randomizeField()
randomizeGuns()
randomizeMods()
randomizeTech()
}
randomizeEverything()
@@ -899,7 +899,7 @@ const mech = {
}
},
setMaxEnergy() {
mech.maxEnergy = (tech.isMaxEnergyMod ? 0.5 : 1) + tech.bonusEnergy + tech.healMaxEnergyBonus
mech.maxEnergy = (tech.isMaxEnergyTech ? 0.5 : 1) + tech.bonusEnergy + tech.healMaxEnergyBonus
},
fieldMeterColor: "#0cf",
drawFieldMeter(bgColor = "rgba(0, 0, 0, 0.4)", range = 60) {

View File

@@ -15,8 +15,8 @@ const powerUps = {
mech.setField(index)
simulation.makeTextLog(`<span class='color-var'>mech</span>.setField("<span class='color-text'>${mech.fieldUpgrades[mech.fieldMode].name}</span>")`);
} else if (type === "tech") {
tech.giveMod(index)
simulation.makeTextLog(`<span class='color-var'>tech</span>.giveMod("<span class='color-text'>${tech.tech[index].name}</span>")`);
tech.giveTech(index)
simulation.makeTextLog(`<span class='color-var'>tech</span>.giveTech("<span class='color-text'>${tech.tech[index].name}</span>")`);
}
powerUps.endDraft(type);
},
@@ -313,14 +313,14 @@ const powerUps = {
const choose = options[Math.floor(Math.random() * options.length)]
const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : "";
if (tech.tech[choose].isFieldMod) {
if (tech.tech[choose].isFieldTech) {
text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title">
<span style="position:relative;">
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
<div class="circle-grid field" style="position:absolute; top:0; left:10px;opacity:0.65;"></div>
</span>
&nbsp; &nbsp; &nbsp; &nbsp; ${tech.tech[choose].name} ${isCount}</div>${tech.tech[choose].description}</div></div>`
} else if (tech.tech[choose].isGunMod) {
} else if (tech.tech[choose].isGunTech) {
text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title">
<span style="position:relative;">
<div class="circle-grid tech" style="position:absolute; top:0; left:0;opacity:0.8;"></div>
@@ -373,7 +373,7 @@ const powerUps = {
} else {
if (tech.isBanish) {
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].name === "erase") powerUps.ejectMod(i)
if (tech.tech[i].name === "erase") powerUps.ejectTech(i)
}
simulation.makeTextLog(`No <strong class='color-m'>tech</strong> left<br>erased <strong class='color-m'>tech</strong> have been recovered`)
powerUps.spawn(mech.pos.x, mech.pos.y, "tech");
@@ -589,7 +589,7 @@ const powerUps = {
powerUps.spawnRandomPowerUp(x, y);
}
},
ejectMod(choose = 'random') {
ejectTech(choose = 'random') {
//find which tech you have
if (choose === 'random') {
const have = []
@@ -615,7 +615,7 @@ const powerUps = {
tech.tech[choose].remove();
tech.tech[choose].count = 0;
tech.tech[choose].isLost = true;
simulation.updateModHUD();
simulation.updateTechHUD();
mech.fieldCDcycle = mech.cycle + 30; //disable field so you can't pick up the ejected tech
}
} else {
@@ -630,7 +630,7 @@ const powerUps = {
tech.tech[choose].remove();
tech.tech[choose].count = 0;
tech.tech[choose].isLost = true;
simulation.updateModHUD();
simulation.updateTechHUD();
mech.fieldCDcycle = mech.cycle + 30; //disable field so you can't pick up the ejected tech
}
},

View File

@@ -306,7 +306,7 @@ const simulation = {
}
simulation.boldActiveGunHUD();
},
updateModHUD() {
updateTechHUD() {
let text = ""
for (let i = 0, len = tech.tech.length; i < len; i++) { //add tech
if (tech.tech[i].isLost) {
@@ -515,7 +515,7 @@ const simulation = {
b.removeAllGuns();
simulation.isNoPowerUps = false;
tech.setupAllMods(); //sets tech to default values
tech.setupAllTech(); //sets tech to default values
tech.laserBotCount = 0;
tech.orbitBotCount = 0;
tech.nailBotCount = 0;
@@ -524,7 +524,7 @@ const simulation = {
tech.plasmaBotCount = 0;
b.setFireCD();
simulation.updateModHUD();
simulation.updateTechHUD();
powerUps.totalPowerUps = 0;
powerUps.reroll.rerolls = 0;
mech.setFillColors();
@@ -650,7 +650,7 @@ const simulation = {
if (tech.isEndLevelPowerUp) {
for (let i = 0; i < powerUp.length; i++) {
if (powerUp[i].name === "tech") {
tech.giveMod()
tech.giveTech()
} else if (powerUp[i].name === "gun") {
if (!tech.isOneGun) b.giveGuns("random")
} else if (powerUp[i].name === "field") {

View File

@@ -564,7 +564,7 @@ const spawn = {
me.foundPlayer();
}
me.onHit = function() { //run this function on hitting player
powerUps.ejectMod()
powerUps.ejectTech()
powerUps.spawn(mech.pos.x, mech.pos.y, "heal");
powerUps.spawn(mech.pos.x, mech.pos.y, "heal");
};

View File

@@ -1,6 +1,6 @@
const tech = {
totalCount: null,
setupAllMods() {
setupAllTech() {
for (let i = 0, len = tech.tech.length; i < len; i++) {
tech.tech[i].remove();
tech.tech[i].isLost = false
@@ -14,14 +14,14 @@ const tech = {
// tech.plasmaBotCount = 0;
tech.armorFromPowerUps = 0;
tech.totalCount = 0;
simulation.updateModHUD();
simulation.updateTechHUD();
},
removeMod(index) {
removeTech(index) {
tech.tech[index].remove();
tech.tech[index].count = 0;
simulation.updateModHUD();
simulation.updateTechHUD();
},
giveMod(index = 'random') {
giveTech(index = 'random') {
if (index === 'random') {
let options = [];
for (let i = 0; i < tech.tech.length; i++) {
@@ -30,8 +30,8 @@ const tech = {
}
// give a random tech from the tech I don't have
if (options.length > 0) {
let newMod = options[Math.floor(Math.random() * options.length)]
tech.giveMod(newMod)
let newTech = options[Math.floor(Math.random() * options.length)]
tech.giveTech(newTech)
}
} else {
if (isNaN(index)) { //find index by name
@@ -49,10 +49,10 @@ const tech = {
tech.tech[index].effect(); //give specific tech
tech.tech[index].count++
tech.totalCount++ //used in power up randomization
simulation.updateModHUD();
simulation.updateTechHUD();
}
},
setModToNonRefundable(name) {
setTechoNonRefundable(name) {
for (let i = 0; i < tech.tech.length; i++) {
if (tech.tech.name === name) {
tech.tech[i].isNonRefundable = true;
@@ -60,25 +60,6 @@ const tech = {
}
}
},
// giveBasicMod(index = 'random') {
// // if (isNaN(index)) { //find index by name
// // let found = false;
// // for (let i = 0; i < tech.tech.length; i++) {
// // if (index === tech.tech[i].name) {
// // index = i;
// // found = true;
// // break;
// // }
// // }
// // if (!found) return //if name not found don't give any tech
// // }
// tech.basicMods[index].effect(); //give specific tech
// tech.tech[index].count++
// tech.totalCount++ //used in power up randomization
// simulation.updateModHUD();
// },
haveGunCheck(name) {
if (
!build.isCustomSelection &&
@@ -94,11 +75,11 @@ const tech = {
}
return false
},
damageFromMods() {
damageFromTech() {
let dmg = mech.fieldDamage
// if (tech.aimDamage>1)
if (tech.isLowEnergyDamage) dmg *= 1 + Math.max(0, 1 - mech.energy) * 0.5
if (tech.isMaxEnergyMod) dmg *= 1.4
if (tech.isMaxEnergyTech) dmg *= 1.4
if (tech.isEnergyNoAmmo) dmg *= 1.5
if (tech.isDamageForGuns) dmg *= 1 + 0.07 * b.inventory.length
if (tech.isLowHealthDmg) dmg *= 1 + 0.6 * Math.max(0, 1 - mech.health)
@@ -179,11 +160,11 @@ const tech = {
},
requires: "exothermic process, not max energy increase, CPT, missile or spore nano-scale",
effect() {
tech.isMaxEnergyMod = true;
tech.isMaxEnergyTech = true;
mech.setMaxEnergy()
},
remove() {
tech.isMaxEnergyMod = false;
tech.isMaxEnergyTech = false;
mech.setMaxEnergy()
}
},
@@ -1215,7 +1196,7 @@ const tech = {
maxCount: 9,
count: 0,
allowed() {
return tech.damageFromMods() > 1
return tech.damageFromTech() > 1
},
requires: "some increased damage",
effect() {
@@ -1263,7 +1244,7 @@ const tech = {
maxCount: 9,
count: 0,
allowed() {
return !tech.isEnergyHealth && tech.damageFromMods() > 1
return !tech.isEnergyHealth && tech.damageFromTech() > 1
},
requires: "some increased damage, not mass-energy equivalence",
effect() {
@@ -1307,7 +1288,7 @@ const tech = {
},
remove() {
tech.isArmorFromPowerUps = false;
// tech.armorFromPowerUps = 0; //this is now reset in tech.setupAllMods();
// tech.armorFromPowerUps = 0; //this is now reset in tech.setupAllTech();
mech.setMaxHealth();
}
},
@@ -1499,7 +1480,7 @@ const tech = {
tech.tech[choose].count = 0;
tech.tech[choose].remove(); // remove a random tech form the list of tech you have
tech.tech[choose].isLost = true
simulation.updateModHUD();
simulation.updateTechHUD();
},
remove() {}
},
@@ -1528,7 +1509,7 @@ const tech = {
tech.tech[choose].count = 0;
tech.tech[choose].remove(); // remove a random tech form the list of tech you have
tech.tech[choose].isLost = true
simulation.updateModHUD();
simulation.updateTechHUD();
},
remove() {}
},
@@ -1847,7 +1828,7 @@ const tech = {
if (tech.isDeterminism) count -= 3 //remove the bonus tech
if (tech.isSuperDeterminism) count -= 2 //remove the bonus tech
tech.setupAllMods(); // remove all tech
tech.setupAllTech(); // remove all tech
for (let i = 0; i < count; i++) { // spawn new tech power ups
powerUps.spawn(mech.pos.x, mech.pos.y, "tech");
}
@@ -1926,7 +1907,7 @@ const tech = {
{
name: "CPT gun",
description: "adds the <strong>CPT</strong> <strong class='color-g'>gun</strong> to your inventory<br>it <strong>rewinds</strong> your <strong class='color-h'>health</strong>, <strong>velocity</strong>, and <strong>position</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -1968,7 +1949,7 @@ const tech = {
{
name: "incendiary ammunition",
description: "some <strong>bullets</strong> are loaded with <strong class='color-e'>explosives</strong><br><em style = 'font-size: 90%'>nail gun, shotgun, super balls, drones</em>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -1985,7 +1966,7 @@ const tech = {
{
name: "fragmentation",
description: "some <strong class='color-e'>detonations</strong> and collisions eject <strong>nails</strong><br><em style = 'font-size: 90%'>blocks, rail gun, grenades, missiles, shotgun slugs</em>",
isGunMod: true,
isGunTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -2002,7 +1983,7 @@ const tech = {
{
name: "Lorentzian topology",
description: "some <strong>bullets</strong> last <strong>30% longer</strong><br><em style = 'font-size: 83%'>drones, spores, missiles, foam, wave, ice IX, neutron</em>",
isGunMod: true,
isGunTech: true,
maxCount: 3,
count: 0,
allowed() {
@@ -2019,7 +2000,7 @@ const tech = {
{
name: "microstates",
description: "increase <strong class='color-d'>damage</strong> by <strong>4%</strong><br>for every <strong>10</strong> active <strong>bullets</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2036,7 +2017,7 @@ const tech = {
{
name: "ice crystal nucleation",
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>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2072,7 +2053,7 @@ const tech = {
{
name: "critical bifurcation",
description: "<strong>nails</strong> do <strong>400%</strong> more <strong class='color-d'>damage</strong><br>when they strike near the <strong>center</strong> of a mob",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2089,7 +2070,7 @@ const tech = {
{
name: "pneumatic actuator",
description: "<strong>nail gun</strong> takes <strong>45%</strong> less time to ramp up<br>to it's shortest <strong><em>delay</em></strong> after firing",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2106,7 +2087,7 @@ const tech = {
{
name: "powder-actuated",
description: "<strong>nail gun</strong> takes <strong>no</strong> time to ramp up<br>nails have a <strong>30%</strong> faster muzzle <strong>speed</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2123,7 +2104,7 @@ const tech = {
{
name: "shotgun spin-statistics",
description: "<strong>immune</strong> to <strong class='color-harm'>harm</strong> while firing the <strong>shotgun</strong><br><strong class='color-g'>ammo</strong> costs are <strong>doubled</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2162,7 +2143,7 @@ const tech = {
{
name: "nailshot",
description: "the <strong>shotgun</strong> fires a burst of <strong>nails</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2179,7 +2160,7 @@ const tech = {
{
name: "shotgun slug",
description: "the <strong>shotgun</strong> fires 1 large <strong>bullet</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2196,7 +2177,7 @@ const tech = {
{
name: "Newton's 3rd law",
description: "the <strong>shotgun</strong> fire <strong><em>delay</em></strong> is <strong>66%</strong> faster<br><strong>recoil</strong> is greatly increased",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2213,7 +2194,7 @@ const tech = {
{
name: "super duper",
description: "fire <strong>1</strong> additional <strong>super ball</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -2230,7 +2211,7 @@ const tech = {
{
name: "super ball",
description: "fire just <strong>1 large</strong> super <strong>ball</strong><br>that <strong>stuns</strong> mobs for <strong>3</strong> second",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2247,7 +2228,7 @@ const tech = {
{
name: "super sized",
description: `your <strong>super balls</strong> are <strong>20%</strong> larger<br>increases mass and physical <strong class='color-d'>damage</strong>`,
isGunMod: true,
isGunTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -2264,7 +2245,7 @@ const tech = {
{
name: "flechettes cartridges",
description: "<strong>flechettes</strong> release <strong>three</strong> needles in each shot<br><strong class='color-g'>ammo</strong> costs are <strong>tripled</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2311,7 +2292,7 @@ const tech = {
{
name: "6s half-life",
description: "<strong>flechette</strong> needles made of <strong class='color-p'>plutonium-238</strong><br>increase <strong class='color-d'>damage</strong> by <strong>100%</strong> over <strong>6</strong> seconds",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2328,7 +2309,7 @@ const tech = {
{
name: "1/2s half-life",
description: "<strong>flechette</strong> needles made of <strong class='color-p'>lithium-8</strong><br>flechette <strong class='color-d'>damage</strong> occurs after <strong>1/2</strong> a second",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2345,7 +2326,7 @@ const tech = {
{
name: "supercritical fission",
description: "<strong>flechettes</strong> can <strong class='color-e'>explode</strong><br>if they strike mobs near their <strong>center</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2362,7 +2343,7 @@ const tech = {
{
name: "radioactive contamination",
description: "after a mob or shield <strong>dies</strong>,<br> leftover <strong class='color-p'>radiation</strong> <strong>spreads</strong> to a nearby mob",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2379,7 +2360,7 @@ const tech = {
{
name: "piercing needles",
description: "<strong>needles</strong> penetrate <strong>mobs</strong> and <strong>blocks</strong><br>potentially hitting <strong>multiple</strong> targets",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2396,7 +2377,7 @@ const tech = {
{
name: "wave packet",
description: "<strong>wave beam</strong> emits <strong>two</strong> oscillating particles<br>decrease wave <strong class='color-d'>damage</strong> by <strong>20%</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2413,7 +2394,7 @@ const tech = {
{
name: "phase velocity",
description: "the <strong>wave beam</strong> propagates faster in solids",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2432,7 +2413,7 @@ const tech = {
{
name: "bound state",
description: "<strong>wave beam</strong> bullets last <strong>5x</strong> longer<br>bullets are <strong>bound</strong> to a <strong>region</strong> around player",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2449,7 +2430,7 @@ const tech = {
{
name: "recursion",
description: "after <strong>missiles</strong> <strong class='color-e'>explode</strong> they have a<br><strong>20%</strong> chance to launch a larger <strong>missile</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 6,
count: 0,
allowed() {
@@ -2466,7 +2447,7 @@ const tech = {
{
name: "MIRV",
description: "launch <strong>3</strong> small <strong>missiles</strong> instead of <strong>1</strong> <br><strong>1.5x</strong> increase in <strong><em>delay</em></strong> after firing",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2483,7 +2464,7 @@ const tech = {
{
name: "rocket-propelled grenade",
description: "<strong>grenades</strong> rapidly <strong>accelerate</strong> forward<br>map <strong>collisions</strong> trigger an <strong class='color-e'>explosion</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2502,7 +2483,7 @@ const tech = {
{
name: "vacuum bomb",
description: "<strong>grenades</strong> fire slower, <strong class='color-e'>explode</strong> bigger<br> and, <strong>suck</strong> everything towards them",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2521,7 +2502,7 @@ const tech = {
{
name: "neutron bomb",
description: "<strong>grenades</strong> are irradiated with <strong class='color-p'>Cf-252</strong><br>does <strong class='color-d'>damage</strong>, <strong class='color-harm'>harm</strong>, and drains <strong class='color-f'>energy</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2540,7 +2521,7 @@ const tech = {
{
name: "water shielding",
description: "increase <strong>neutron bomb's</strong> range by <strong>20%</strong><br>player is <strong>immune</strong> to its harmful effects",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2557,7 +2538,7 @@ const tech = {
{
name: "vacuum permittivity",
description: "increase <strong>neutron bomb's</strong> range by <strong>20%</strong><br>objects in range of the bomb are <strong>slowed</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2574,7 +2555,7 @@ const tech = {
{
name: "mine reclamation",
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",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2591,7 +2572,7 @@ const tech = {
{
name: "sentry",
description: "<strong>mines</strong> <strong>target</strong> mobs with nails over time<br>mines last about <strong>12</strong> seconds",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2608,7 +2589,7 @@ const tech = {
{
name: "irradiated nails",
description: "<strong>nails</strong> are made with a <strong class='color-p'>cobalt-60</strong> alloy<br><strong>85%</strong> <strong class='color-p'>radioactive</strong> <strong class='color-d'>damage</strong> over <strong>2</strong> seconds",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2625,7 +2606,7 @@ const tech = {
{
name: "railroad ties",
description: "<strong>nails</strong> are <strong>40%</strong> <strong>larger</strong><br>increases physical <strong class='color-d'>damage</strong> by about <strong>20%</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2642,7 +2623,7 @@ const tech = {
{
name: "mycelial fragmentation",
description: "<strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> release an extra <strong class='color-p' style='letter-spacing: 2px;'>spore</strong><br> once a <strong>second</strong> during their <strong>growth</strong> phase",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2659,7 +2640,7 @@ const tech = {
{
name: "tinsellated flagella",
description: "<strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> release <strong>2</strong> more <strong class='color-p' style='letter-spacing: 2px;'>spores</strong><br><strong class='color-p' style='letter-spacing: 2px;'>spores</strong> accelerate <strong>50% faster</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2677,7 +2658,7 @@ const tech = {
name: "cryodesiccation",
description: "<strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> release <strong>2</strong> more <strong class='color-p' style='letter-spacing: 2px;'>spores</strong><br><strong class='color-p' style='letter-spacing: 2px;'>spores</strong> <strong class='color-s'>freeze</strong> mobs for <strong>1</strong> second",
// <br><strong class='color-p' style='letter-spacing: 2px;'>spores</strong> do <strong>1/3</strong> <strong class='color-d'>damage</strong>
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2694,7 +2675,7 @@ const tech = {
{
name: "diplochory",
description: "<strong class='color-p' style='letter-spacing: 2px;'>spores</strong> use the player for <strong>dispersal</strong><br>until they <strong>locate</strong> a viable host",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2711,7 +2692,7 @@ const tech = {
{
name: "mutualism",
description: "increase <strong class='color-p' style='letter-spacing: 2px;'>spore</strong> <strong class='color-d'>damage</strong> by <strong>100%</strong><br><strong class='color-p' style='letter-spacing: 2px;'>spores</strong> borrow <strong>0.5</strong> <strong>health</strong> until they <strong>die</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2728,7 +2709,7 @@ const tech = {
{
name: "brushless motor",
description: "<strong>drones</strong> accelerate <strong>50%</strong> faster",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2745,7 +2726,7 @@ const tech = {
{
name: "harvester",
description: "after a <strong>drone</strong> picks up a <strong>power up</strong>,<br>it's <strong>larger</strong>, <strong>faster</strong>, and very <strong>durable</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2762,7 +2743,7 @@ const tech = {
{
name: "superfluidity",
description: "<strong class='color-s'>freeze</strong> effects apply to mobs near it's target",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2779,7 +2760,7 @@ const tech = {
{
name: "heavy water",
description: "<strong>ice IX</strong> is synthesized with an extra neutron<br>does <strong class='color-p'>radioactive</strong> <strong class='color-d'>damage</strong> over <strong>5</strong> seconds",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2796,7 +2777,7 @@ const tech = {
{
name: "thermoelectric effect",
description: "<strong>killing</strong> mobs with <strong>ice IX</strong> gives <strong>4</strong> <strong class='color-h'>health</strong><br>and <strong>100</strong> <strong class='color-f'>energy</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -2813,7 +2794,7 @@ const tech = {
{
name: "necrophoresis",
description: "<strong>foam</strong> bullets grow and split into 3 <strong>copies</strong><br> when the mob they are stuck to <strong>dies</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2830,7 +2811,7 @@ const tech = {
{
name: "colloidal foam",
description: "increase <strong>foam</strong> <strong class='color-d'>damage</strong> by <strong>366%</strong><br><strong>foam</strong> dissipates <strong>40%</strong> faster",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2881,7 +2862,7 @@ const tech = {
{
name: "half-wave rectifier",
description: "charging the <strong>rail gun</strong> gives you <strong class='color-f'>energy</strong><br><em>instead of draining it</em>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2898,7 +2879,7 @@ const tech = {
{
name: "dielectric polarization",
description: "firing the <strong>rail gun</strong> <strong class='color-d'>damages</strong> nearby <strong>mobs</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2915,7 +2896,7 @@ const tech = {
{
name: "capacitor bank",
description: "the <strong>rail gun</strong> no longer takes time to <strong>charge</strong><br><strong>rail gun</strong> rods are <strong>66%</strong> less massive",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2932,7 +2913,7 @@ const tech = {
{
name: "laser diodes",
description: "<strong>lasers</strong> drain <strong>37%</strong> less <strong class='color-f'>energy</strong><br><em>effects laser-gun and laser-bot</em>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -2949,7 +2930,7 @@ const tech = {
{
name: "specular reflection",
description: "<strong>laser</strong> beams gain <strong>1</strong> reflection<br>increase <strong class='color-d'>damage</strong> and <strong class='color-f'>energy</strong> drain by <strong>50%</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -2970,7 +2951,7 @@ const tech = {
{
name: "diffraction grating",
description: `your <strong>laser</strong> gains <strong>2 diverging</strong> beams<br>decrease individual beam <strong class='color-d'>damage</strong> by <strong>10%</strong>`,
isGunMod: true,
isGunTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -2993,7 +2974,7 @@ const tech = {
{
name: "diffuse beam",
description: "<strong>laser</strong> beam is <strong>wider</strong> and doesn't <strong>reflect</strong><br>increase full beam <strong class='color-d'>damage</strong> by <strong>175%</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3018,7 +2999,7 @@ const tech = {
{
name: "output coupler",
description: "<strong>widen</strong> diffuse <strong>laser</strong> beam by <strong>40%</strong><br>increase full beam <strong class='color-d'>damage</strong> by <strong>40%</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3045,7 +3026,7 @@ const tech = {
{
name: "slow light propagation",
description: "",
isGunMod: true,
isGunTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -3070,7 +3051,7 @@ const tech = {
{
name: "pulse",
description: "convert <strong>25%</strong> of your <strong class='color-f'>energy</strong> into a pulsed laser<br>instantly initiates a fusion <strong class='color-e'>explosion</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3093,7 +3074,7 @@ const tech = {
{
name: "shock wave",
description: "mobs caught in <strong>pulse's</strong> explosion are <strong>stunned</strong><br>for up to <strong>2 seconds</strong>",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3110,7 +3091,7 @@ const tech = {
{
name: "neocognitron",
description: "<strong>pulse</strong> automatically <strong>aims</strong> at a nearby mob<br><strong>50%</strong> decreased <strong><em>delay</em></strong> after firing",
isGunMod: true,
isGunTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3131,7 +3112,7 @@ const tech = {
{
name: "bremsstrahlung radiation",
description: "<strong>blocking</strong> with <strong>standing wave harmonics</strong><br> does <strong class='color-d'>damage</strong> to mobs",
isFieldMod: true,
isFieldTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -3148,7 +3129,7 @@ const tech = {
{
name: "frequency resonance",
description: "<strong>standing wave harmonics</strong> shield is retuned<br>increase <strong>size</strong> and <strong>blocking</strong> efficiency by <strong>40%</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -3167,7 +3148,7 @@ const tech = {
{
name: "flux pinning",
description: "blocking with <strong>perfect diamagnetism</strong><br><strong>stuns</strong> mobs for <strong>+1</strong> second",
isFieldMod: true,
isFieldTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -3184,7 +3165,7 @@ const tech = {
{
name: "eddy current brake",
description: "your stored <strong class='color-f'>energy</strong> projects a field that<br>limits the <strong>top speed</strong> of mobs",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3201,7 +3182,7 @@ const tech = {
{
name: "fracture analysis",
description: "bullet impacts do <strong>400%</strong> <strong class='color-d'>damage</strong><br>to <strong>stunned</strong> mobs",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3218,7 +3199,7 @@ const tech = {
{
name: "pair production",
description: "picking up a <strong>power up</strong> gives you <strong>250</strong> <strong class='color-f'>energy</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3236,7 +3217,7 @@ const tech = {
{
name: "bot manufacturing",
description: "use <strong>nano-scale manufacturing</strong><br>to build <strong>3</strong> random <strong>bots</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
isNonRefundable: true,
@@ -3256,7 +3237,7 @@ const tech = {
{
name: "bot prototypes",
description: "use <strong>nano-scale manufacturing</strong> to <strong>upgrade</strong><br>all bots of a random type and <strong>build</strong> <strong>2</strong> of that <strong>bot</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
isNonRefundable: true,
@@ -3270,40 +3251,40 @@ const tech = {
//fill array of available bots
const notUpgradedBots = []
if (!tech.isNailBotUpgrade) notUpgradedBots.push(() => {
tech.giveMod("nail-bot upgrade")
tech.setModToNonRefundable("nail-bot upgrade")
tech.giveTech("nail-bot upgrade")
tech.setTechoNonRefundable("nail-bot upgrade")
for (let i = 0; i < 2; i++) {
b.nailBot()
tech.nailBotCount++;
}
})
if (!tech.isFoamBotUpgrade) notUpgradedBots.push(() => {
tech.giveMod("foam-bot upgrade")
tech.setModToNonRefundable("foam-bot upgrade")
tech.giveTech("foam-bot upgrade")
tech.setTechoNonRefundable("foam-bot upgrade")
for (let i = 0; i < 2; i++) {
b.foamBot()
tech.foamBotCount++;
}
})
if (!tech.isBoomBotUpgrade) notUpgradedBots.push(() => {
tech.giveMod("boom-bot upgrade")
tech.setModToNonRefundable("boom-bot upgrade")
tech.giveTech("boom-bot upgrade")
tech.setTechoNonRefundable("boom-bot upgrade")
for (let i = 0; i < 2; i++) {
b.boomBot()
tech.boomBotCount++;
}
})
if (!tech.isLaserBotUpgrade) notUpgradedBots.push(() => {
tech.giveMod("laser-bot upgrade")
tech.setModToNonRefundable("laser-bot upgrade")
tech.giveTech("laser-bot upgrade")
tech.setTechoNonRefundable("laser-bot upgrade")
for (let i = 0; i < 2; i++) {
b.laserBot()
tech.laserBotCount++;
}
})
if (!tech.isOrbitBotUpgrade) notUpgradedBots.push(() => {
tech.giveMod("orbital-bot upgrade")
tech.setModToNonRefundable("orbital-bot upgrade")
tech.giveTech("orbital-bot upgrade")
tech.setTechoNonRefundable("orbital-bot upgrade")
for (let i = 0; i < 2; i++) {
b.orbitBot()
tech.orbitBotCount++;
@@ -3317,7 +3298,7 @@ const tech = {
{
name: "mycelium manufacturing",
description: "<strong>nano-scale manufacturing</strong> is repurposed<br>excess <strong class='color-f'>energy</strong> used to grow <strong class='color-p' style='letter-spacing: 2px;'>spores</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3334,7 +3315,7 @@ const tech = {
{
name: "missile manufacturing",
description: "<strong>nano-scale manufacturing</strong> is repurposed<br>excess <strong class='color-f'>energy</strong> used to construct <strong>missiles</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3351,7 +3332,7 @@ const tech = {
{
name: "ice IX manufacturing",
description: "<strong>nano-scale manufacturing</strong> is repurposed<br>excess <strong class='color-f'>energy</strong> used to synthesize <strong>ice IX</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3368,7 +3349,7 @@ const tech = {
{
name: "degenerate matter",
description: "reduce <strong class='color-harm'>harm</strong> by <strong>40%</strong><br>while <strong>negative mass field</strong> is active",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3385,7 +3366,7 @@ const tech = {
{
name: "annihilation",
description: "after <strong>touching</strong> mobs, they are <strong>annihilated</strong><br>drains <strong>33%</strong> of maximum <strong class='color-f'>energy</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3402,7 +3383,7 @@ const tech = {
{
name: "Bose Einstein condensate",
description: "<strong>mobs</strong> inside your <strong class='color-f'>field</strong> are <strong class='color-s'>frozen</strong><br><em style = 'font-size: 100%'>pilot wave, negative mass, time dilation</em>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3419,7 +3400,7 @@ const tech = {
// {
// name: "thermal reservoir",
// description: "increase your <strong class='color-plasma'>plasma</strong> <strong class='color-d'>damage</strong> by <strong>100%</strong><br><strong class='color-plasma'>plasma</strong> temporarily lowers health not <strong class='color-f'>energy</strong>",
// isFieldMod: true,
// isFieldTech: true,
// maxCount: 1,
// count: 0,
// allowed() {
@@ -3436,7 +3417,7 @@ const tech = {
{
name: "plasma jet",
description: "increase <strong class='color-plasma'>plasma</strong> <strong>torch's</strong> range by <strong>27%</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 9,
count: 0,
allowed() {
@@ -3453,7 +3434,7 @@ const tech = {
{
name: "plasma-bot",
description: "a bot uses <strong class='color-f'>energy</strong> to emit <strong class='color-plasma'>plasma</strong><br>that <strong class='color-d'>damages</strong> and <strong>pushes</strong> mobs",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3471,7 +3452,7 @@ const tech = {
{
name: "micro-extruder",
description: "<strong class='color-plasma'>plasma</strong> <strong>torch</strong> extrudes a thin <strong class='color-plasma'>hot</strong> wire<br>increases <strong class='color-d'>damage</strong>, and <strong class='color-f'>energy</strong> drain",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3488,7 +3469,7 @@ const tech = {
{
name: "timelike world line",
description: "<strong>time dilation</strong> doubles your relative time <strong>rate</strong><br>and makes you <strong>immune</strong> to <strong class='color-harm'>harm</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3507,7 +3488,7 @@ const tech = {
{
name: "Lorentz transformation",
description: "permanently increase your relative time rate<br><strong>move</strong>, <strong>jump</strong>, and <strong>shoot</strong> <strong>40%</strong> faster",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3530,7 +3511,7 @@ const tech = {
{
name: "time crystals",
description: "<strong>quadruple</strong> your default <strong class='color-f'>energy</strong> regeneration",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3549,7 +3530,7 @@ const tech = {
{
name: "phase decoherence",
description: "become <strong>intangible</strong> while <strong class='color-cloaked'>cloaked</strong><br>but, passing through <strong>mobs</strong> drains your <strong class='color-f'>energy</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3566,7 +3547,7 @@ const tech = {
{
name: "dazzler",
description: "<strong class='color-cloaked'>decloaking</strong> <strong>stuns</strong> nearby mobs<br>drains <strong>30%</strong> of your stored <strong class='color-f'>energy</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3583,7 +3564,7 @@ const tech = {
{
name: "discrete optimization",
description: "increase <strong class='color-d'>damage</strong> by <strong>50%</strong><br><strong>50%</strong> increased <strong><em>delay</em></strong> after firing",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3602,7 +3583,7 @@ const tech = {
{
name: "cosmic string",
description: "<strong>stun</strong> and do <strong class='color-p'>radioactive</strong> <strong class='color-d'>damage</strong> to <strong>mobs</strong><br>if you tunnel through them with a <strong class='color-worm'>wormhole</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3619,7 +3600,7 @@ const tech = {
{
name: "Penrose process",
description: "after a <strong>block</strong> falls into a <strong class='color-worm'>wormhole</strong><br>you gain <strong>50</strong> <strong class='color-f'>energy</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3636,7 +3617,7 @@ const tech = {
{
name: "transdimensional spores",
description: "when <strong>blocks</strong> fall into a <strong class='color-worm'>wormhole</strong><br>higher dimension <strong class='color-p' style='letter-spacing: 2px;'>spores</strong> are summoned",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3653,7 +3634,7 @@ const tech = {
{
name: "traversable geodesics",
description: "your <strong>bullets</strong> can traverse <strong class='color-worm'>wormholes</strong><br>spawn a <strong class='color-g'>gun</strong> and <strong class='color-g'>ammo</strong>",
isFieldMod: true,
isFieldTech: true,
maxCount: 1,
count: 0,
allowed() {
@@ -3932,7 +3913,7 @@ const tech = {
isCancelRerolls: null,
isBotDamage: null,
isBanish: null,
isMaxEnergyMod: null,
isMaxEnergyTech: null,
isLowEnergyDamage: null,
isRewindBot: null,
isRewindGrenade: null,

104
todo.txt
View File

@@ -1,7 +1,7 @@
******************************************************** NEXT PATCH ********************************************************
updated in game console style and all messages to match real game commands
new names inline with lore, mod -> tech, game -> simulation
new names inline with lore, tech-> tech, game -> simulation
this is probably going to cause many minor bugs, so let me know what you find
new reroll display in power up selection
@@ -33,7 +33,7 @@ check for crouch after rewind
(once) bug - mine spawned one new mine every second
after sticking to the top right corner of a wall
notes: had only gun mine, mod mine reclamation, field plasma,
notes: had only gun mine, techmine reclamation, field plasma,
(repeatable almost every time) bug - mines spawn extra mines when fired at thin map wall while jumping
@@ -52,7 +52,7 @@ in game console
add commands
death, max health, max energy, rewind
mechanic: use gun swap as an active ability for several mods
mechanic: use gun swap as an active ability for several tech
ideas?
trigger damage immunity for 3 seconds, but drain energy?
push away nearby mobs, but drain energy
@@ -61,16 +61,16 @@ mechanic: use gun swap as an active ability for several mods
CPT gun seems a bit weak right now. How to buff the gun?
mod nail gun: slow and accurate
mod foam: fast and inaccurate
technail gun: slow and accurate
techfoam: fast and inaccurate
mob ability bombs/bullets that suck in player
mod where you can't stop firing, how to code?
techwhere you can't stop firing, how to code?
mod: laser beams push like plasma torch pushes with directional force
tech laser beams push like plasma torch pushes with directional force
mechanic: technological dead end - add mods to the mod pool with a dumb effect
mechanic: technological dead end - add tech to the techpool with a dumb effect
don't show up in custom?
negative effect (one time effects are better to avoid code clutter)
make the player rainbow colors
@@ -89,22 +89,22 @@ mechanic: technological dead end - add mods to the mod pool with a dumb effect
remove your bots (requires you to have some bots)
your bots are changed to random bots
Mod: "Expansion Formula": Permanently increase the size of Negative Mass field by 16%(Max 96%)
tech "Expansion Formula": Permanently increase the size of Negative Mass field by 16%(Max 96%)
Mod: "Circadian Rhythm": Become immune to harm for 1 second every 10 seconds while playing.
tech "Circadian Rhythm": Become immune to harm for 1 second every 10 seconds while playing.
Mod: "High Risk": Spawn two bosses per level.
tech "High Risk": Spawn two bosses per level.
maybe limit to just the power up boss and spawn it at the exit every time to keep it simple
also weaken the player
remove a mod up?
remove a techup?
lower harm reduction?
increase game difficulty by one level
mod that requires integrated armament
techthat requires integrated armament
mod - reset level
you trade a mod for a chance at killing a new level boss and farming more ammo
resets health, ammo (but not mods, fields, guns, ... ?)
tech- reset level
you trade a techfor a chance at killing a new level boss and farming more ammo
resets health, ammo (but not tech, fields, guns, ... ?)
scramble level order? or same level
mechanic - Your energy regen is only active when field and gun have not been used for 5 seconds.
@@ -112,31 +112,31 @@ mechanic - Your energy regen is only active when field and gun have not been use
be able to open up custom mode in the normal game
might need to be rebuilt from scratch
while in through testing mode?
have a way to make limited changes as allowed by mods you pick up in game
have a way to make limited changes as allowed by tech you pick up in game
disable the in custom setting flag
mod: power up magnetism - power ups drift towards player
tech power up magnetism - power ups drift towards player
where would this code go?
super balls start at 3, not 4
have to balance damage
RPG might need a buff, now that it disables the other cool grenade mods
RPG might need a buff, now that it disables the other cool grenade tech
make different move methods
mod: crouch charge jump
mod: double jump
tech crouch charge jump
tech double jump
mod: when mobs are at full health you do 40% to them
tech when mobs are at full health you do 40% to them
mod - move super fast, go intangible, drain energy very fast
tech- move super fast, go intangible, drain energy very fast
this is like a dodge roll
mod for standing wave?, cloaking?
techfor standing wave?, cloaking?
mod pilot wave: mini black hole - pull mobs and blocks in with more force
techpilot wave: mini black hole - pull mobs and blocks in with more force
also from farther away
also do damage?
mod pilot wave: antigravity - blocks have no gravity for a few seconds after exiting the field
techpilot wave: antigravity - blocks have no gravity for a few seconds after exiting the field
maybe they bounce too?
maybe they explode?
@@ -167,41 +167,41 @@ wormhole - make it clear when the wormhole can and can't teleport to a location
time dilation - slow down the game engine by 1/2, but run an extra player cycle to simulate slow motion
flavor - your bullets destroy blocks
this isn't really a bonus, so maybe just add this as flavor to another mod/field/gun
this isn't really a bonus, so maybe just add this as flavor to another techfield/gun
a chance for destroyed blocks to drop stuff
power ups
spores
mod plasma : plasma length increases then decreases as you hold down the field button (like stabbing with a spear)
techplasma : plasma length increases then decreases as you hold down the field button (like stabbing with a spear)
grows to 1.5 longer after 0.3 seconds, then returns to normal length over 1 second, until field is pressed again
extra energy is drained when field is longer
using a reroll gives 3 options for mods, and 3 options for guns/fields/mods
or 6 options for mods (rewrite mod selection to work with 1-6 options)
the second stack of 3 mods could have repeats, so you don't have to write new mod code
using a reroll gives 3 options for tech, and 3 options for guns/fields/tech
or 6 options for tech (rewrite techselection to work with 1-6 options)
the second stack of 3 tech could have repeats, so you don't have to write new techcode
adjust css to make 2 columns of 3
can't use with cardinality
new power up - increase damage and fire speed, for 15 seconds
named boost?
enabled by a mod?
enabled by a tech
power up color: ?
how to indicate effect duration
or just give the effect after picking up a reroll
Mod: "Solar Power": Energy regeneration is doubled while standing still
tech "Solar Power": Energy regeneration is doubled while standing still
run in the 1 second check
mechanic - remove a random mod as a condition for picking up a really good mod
mechanic - remove a random techas a condition for picking up a really good mod
mechanic - do something for 2 seconds after firing
if (mech.fireCDcycle + 120)
mod - do 50% more damage in close, but 50% less at a distance
code it like mod.isFarAwayDmg
have these mods disable each other
tech- do 50% more damage in close, but 50% less at a distance
code it like techisFarAwayDmg
have these tech disable each other
mod - foam is attracted to mobs
tech- foam is attracted to mobs
use a gravitational attraction model?
could foam be attracted to other foam bullets too?
or foam is only attracted to foam bullets that are stuck to mobs
@@ -211,8 +211,8 @@ mod - foam is attracted to mobs
field - one block orbits you, it can protect you a bit and do collision damage
use field to fire and press field again to pull it back
mod - more blocks
mod - attach a permanent neutron bomb to the block
tech- more blocks
tech- attach a permanent neutron bomb to the block
lowers energy regen, but it can damage mobs
repeat map in vertical and horizontal space
@@ -236,17 +236,17 @@ have some mobs spawn in later in the level (in hard and why modes)
after some mobs are dead
after the boss is killed
look for mods that could update description text with count and mod.is information
look for tech that could update description text with count and techis information
can only use variables that change in effect() and remove()
this.description = `<strong>8%</strong> chance to <strong>duplicate</strong> spawned <strong>power ups</strong><br><em>chance to duplicate = ${mod.duplicateChance}</em>`
this.description = `<strong>8%</strong> chance to <strong>duplicate</strong> spawned <strong>power ups</strong><br><em>chance to duplicate = ${techduplicateChance}</em>`
mouse event e.which is deprecated
add some more computer / AI stuff to the level lore text
mechanic - shrink mech.baseHealth in a mod or field
mechanic - shrink mech.baseHealth in a techor field
standing wave harmonics mod - push things away
standing wave harmonics tech- push things away
push scales with mass up to about 4
has a 25% effect on shielded mobs?
push when using field key
@@ -322,9 +322,9 @@ movement fluidity
many of the movement abilities in these games require levels to be built around the ability
general feeling of responsiveness and control
coyote time: can still jump a few cycles after leaving ground
mod: double jump
mod: air dash
mod: wall jump
tech double jump
tech air dash
tech wall jump
wall grab?
maybe remove falling damage and block damage?
@@ -332,7 +332,7 @@ redblobgames.com/articles/visibility
https://github.com/Silverwolf90/2d-visibility/tree/master/src
could apply to explosions, neutron bomb, player LOS
possible names for mods
possible names for tech
holonomy - parallel transport of a vector leads to movement (applies to curved space)
Hypergolic - A hypergolic propellant combination used in a rocket engine is one whose components spontaneously ignite when they come into contact with each other.
@@ -348,7 +348,7 @@ boss levels - small levels just a boss, and maybe a few mobs
an effect when canceling a power up
ammo? heals?
50% chance for a mod, 25% heal, 25% ammo
50% chance for a tech 25% heal, 25% ammo
css transition for pause menu
@@ -367,11 +367,11 @@ n-gon outreach ideas
******************************************************** LORE ********************************************************
lore - a robot (the player) gains self awareness
each mod/gun/field is a new tech
each techgun/field is a new tech
all the technology leads to the singularity
each game run is actually the mech simulating a possible escape
this is why the graphics are so bad, its just a simulation
final mod is "this is just a simulation"
final techis "this is just a simulation"
you get immortality and Infinity damage
the next level is the final level
when you die with Quantum Immortality there is a chance of lore text
@@ -439,7 +439,7 @@ ending outline
they ask the player to communicate
jump twice if you understand
they ask the player to enter console commands
give ammo or mods or something
give ammo or tech or something
They tell the play a console command to permenantly enable custom and testing mode (in local storage)
players can use this command in the future to enable custom and testing without beating the game even if local storage is wiped
they then tell the player the command to increase the difficulty and the command to restart the game.