pilot wave tech
pilot wave tech: Bells theorem - field is always on for no energy cost pilot wave tech: principle of locality - 0.9x damage taken while inside pilot wave field, -2 choices hidden-variable theory 1.2->1.3 damage per field tech WIMPS spawn 4->5 research per level bug fixes fixed exploit with final tech power up on subway level
This commit is contained in:
@@ -287,7 +287,7 @@ const b = {
|
||||
},
|
||||
fireCDscale: 1,
|
||||
setFireCD() {
|
||||
b.fireCDscale = tech.fireRate * tech.slowFire * tech.researchHaste * tech.aimDamage
|
||||
b.fireCDscale = tech.fireRate * tech.slowFire * tech.researchHaste * tech.slowFireDamage
|
||||
if (m.fieldMode === 6) b.fireCDscale *= 0.8
|
||||
if (tech.isFastTime) b.fireCDscale *= 0.666
|
||||
if (tech.isFireRateForGuns) b.fireCDscale *= Math.pow(0.76923, Math.max(0, b.inventory.length - 1))
|
||||
|
||||
39
js/index.js
39
js/index.js
@@ -1,5 +1,14 @@
|
||||
"use strict";
|
||||
|
||||
//list of the recent github hashes, shortened to the first 7 digits of the full hash.
|
||||
//the last element of the array is the most recent commit
|
||||
// const commitHashes = ['6472d6d', 'c8bf77d', 'eb8f4b0', 'f556371', '74f569b', 'c9f355b', '6814c10', '9402cf2', 'f8b4b6f', '82c0ea8', 'f9849d4', 'd00a94a', '3654198', '9bcf4d3', 'eecf763', 'be109bb', 'e2bf9aa', '3ea8bfd', 'c614451', '1752453', '34e05c7', '07af7a7', '2e76b5c', '1b23dec', '0b728fb', 'e6e5058', '4f87444', 'e418b93', 'b3fa1bf', '09c9e93', 'd8e978f', 'da559f4', '1d4b0c4', '4415942', '6cd2502', '8a211e8', '3d423a5', '4933ef5', '77cafe3', 'bffaeed', '99bd1c8', '8a3ac11', 'bf5f866', 'b14f2c1', 'ff613dc', '1129b9d', '3844d00', 'e9d2262', 'ce74f42', 'ad33cf6', '2d12f1d', 'c47d860', '4e6acdd', '778a2c9', '68f9269', '17f65cf', 'b5e4b0d', '38d9931', '64f2a9f', '64c81cd', '254ec00', '38ef45a', '1728b53', 'fde3a58', '6c3d97a', '951806d', '2b99e59', '3ce6bec', '773ee5c', '4c6b480', 'a1164ed', '507b060', '63bfaba', 'eabd146', '438c166', '1903b9e', '5e12cea', 'f43a5e3', '022e2fa', '20f9b79', 'fc70dfe', '5eae070', '8dacb02', '52046ca', '220a6b4', 'ebd2274', 'cea1c64', 'a47ef97', 'a8c6c0e', '9c2c9be', '8bb8222', '1fde74d', 'f1a6713', '97c5509', '1966173', '2daeae1', '1040d1f', 'c9a5ab9', '77e484c', 'b2426cd']
|
||||
// const lastShortHash = 'b2426cd'
|
||||
//Landgreen needs to update the commitHashes array with the most recent commit hash on each new upload, but the array will always be missing the current hash since it is generated with each new commit
|
||||
//write code to check the 2nd most recent hash and see if it match an element in the commitHashes array. Use that to calculate how many commits have been made since the last update
|
||||
|
||||
|
||||
|
||||
//convert text into numbers for seed
|
||||
Math.hash = s => {
|
||||
for (var i = 0, h = 9; i < s.length;) h = Math.imul(h ^ s.charCodeAt(i++), 9 ** 9);
|
||||
@@ -1953,13 +1962,41 @@ document.getElementById("updates").addEventListener("toggle", function () {
|
||||
xhr.open("GET", path, true);
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
// fetch(`https://api.github.com/repos/landgreen/n-gon/commits?per_page=100`)
|
||||
// .then(response => {
|
||||
// if (!response.ok) {
|
||||
// throw new Error(`GitHub API responded with status ${response.status}`);
|
||||
// }
|
||||
// return response.json();
|
||||
// })
|
||||
// .then(commits => {
|
||||
// // console.log(commits.sha)
|
||||
// const array = []
|
||||
// commits.forEach(commitData => {
|
||||
// const shortHash = commitData.sha.substr(0, 7);
|
||||
// array.push(shortHash)
|
||||
// });
|
||||
// console.log(array)
|
||||
// })
|
||||
// .catch(error => {
|
||||
// console.error('Error fetching commits:', error);
|
||||
// });
|
||||
|
||||
|
||||
|
||||
let text = `<pre><strong>n-gon</strong>: <a href="https://github.com/landgreen/n-gon/blob/master/todo.txt">todo list</a> and complete <a href="https://github.com/landgreen/n-gon/commits/master">change-log</a><hr>`
|
||||
document.getElementById("updates-div").innerHTML = text
|
||||
|
||||
/// https://api.github.com/repos/landgreen/n-gon/stats/commit_activity
|
||||
loadJSON('https://api.github.com/repos/landgreen/n-gon/commits',
|
||||
function (data) {
|
||||
// console.log(data[0].sha) //unique code for most recent commit
|
||||
// console.log(data[0].sha, lastShortHash)
|
||||
// if (data[0].sha.substr(0, 7) === lastShortHash) {
|
||||
// text += "<br><em>https://github.com/landgreen/n-gon/</em>: hash matches latest version<hr>"
|
||||
// } else {
|
||||
// text += "<br><em>https://github.com/landgreen/n-gon/</em>: hash does <strong>not</strong> match latest version<br><hr>"
|
||||
// }
|
||||
for (let i = 0, len = 20; i < len; i++) {
|
||||
text += "<strong>" + data[i].commit.author.date.substr(0, 10) + "</strong> - "; //+ "<br>"
|
||||
text += data[i].commit.message
|
||||
|
||||
36
js/level.js
36
js/level.js
@@ -35,15 +35,6 @@ const level = {
|
||||
// m.couplingChange(10)
|
||||
// m.setField("pilot wave") //1 standing wave 2 perfect diamagnetism 3 negative mass 4 molecular assembler 5 plasma torch 6 time dilation 7 metamaterial cloaking 8 pilot wave 9 wormhole 10 grappling hook
|
||||
|
||||
// spawn.bodyRect(625, -100, 100, 75);
|
||||
// spawn.bodyRect(750, -125, 250, 100);
|
||||
// spawn.bodyRect(500, -150, 75, 100);
|
||||
// spawn.bodyRect(1150, -125, 225, 75);
|
||||
// spawn.bodyRect(1425, -250, 25, 150);
|
||||
// spawn.bodyRect(1525, -100, 75, 25);
|
||||
// spawn.bodyRect(1550, -200, 150, 100);
|
||||
|
||||
|
||||
// m.energy = 0
|
||||
// powerUps.research.count = 3
|
||||
// tech.isHookWire = true
|
||||
@@ -60,8 +51,8 @@ const level = {
|
||||
// requestAnimationFrame(() => { tech.giveTech("non-renewables") });
|
||||
// tech.giveTech("dark matter")
|
||||
// tech.addJunkTechToPool(0.5)
|
||||
// for (let i = 0; i < 1; ++i) tech.giveTech("paradigm shift")
|
||||
// for (let i = 0; i < 1; ++i) tech.giveTech("Higgs mechanism")
|
||||
// for (let i = 0; i < 1; ++i) tech.giveTech("principle of locality")
|
||||
// for (let i = 0; i < 1; ++i) tech.giveTech("Bells theorem")
|
||||
// m.skin.egg();
|
||||
// for (let i = 0; i < 1; ++i) tech.giveTech("many-worlds")
|
||||
// requestAnimationFrame(() => { for (let i = 0; i < 1; i++) tech.giveTech("surfing") });
|
||||
@@ -71,7 +62,7 @@ const level = {
|
||||
// for (let i = 0; i < 7; i++) powerUps.directSpawn(450, -50, "field");
|
||||
// for (let i = 0; i < 7; i++) powerUps.directSpawn(m.pos.x + 200, m.pos.y - 250, "research", false);
|
||||
// spawn.bodyRect(575, -700, 150, 150); //block mob line of site on testing
|
||||
// level.testing();
|
||||
// level.subway();
|
||||
|
||||
|
||||
level[simulation.isTraining ? "walk" : "initial"]() //normal starting level **************************************************
|
||||
@@ -139,7 +130,7 @@ const level = {
|
||||
for (let i = 0; i < tech.wimpCount; i++) {
|
||||
spawn.WIMP()
|
||||
mob[mob.length - 1].isDecoupling = true //so you can find it to remove
|
||||
for (let j = 0, len = 4; j < len; j++) powerUps.spawn(level.exit.x + 100 * (Math.random() - 0.5), level.exit.y - 100 + 100 * (Math.random() - 0.5), "research", false)
|
||||
for (let j = 0, len = 5; j < len; j++) powerUps.spawn(level.exit.x + 100 * (Math.random() - 0.5), level.exit.y - 100 + 100 * (Math.random() - 0.5), "research", false)
|
||||
}
|
||||
|
||||
if (m.plasmaBall) m.plasmaBall.fire()
|
||||
@@ -147,6 +138,11 @@ const level = {
|
||||
const flip = localSettings.entanglement.isHorizontalFlipped === simulation.isHorizontalFlipped ? 1 : -1
|
||||
powerUps.directSpawn(flip * localSettings.entanglement.position.x, localSettings.entanglement.position.y, "entanglement", false);
|
||||
}
|
||||
if (m.fieldMode === 8) {
|
||||
Matter.Body.setPosition(m.fieldUpgrades[8].collider, m.pos);
|
||||
m.fieldPosition = { x: m.pos.x, y: m.pos.y }
|
||||
m.lastFieldPosition = { x: m.pos.x, y: m.pos.y }
|
||||
}
|
||||
level.newLevelOrPhase()
|
||||
if (simulation.isTraining) {
|
||||
simulation.difficultyMode = 1
|
||||
@@ -3555,6 +3551,7 @@ const level = {
|
||||
stationList.unshift(0) //add index zero to the front of the array
|
||||
|
||||
let isExitOpen = false
|
||||
let isTechSpawned = false
|
||||
let gatesOpenRight = -1
|
||||
let gatesOpenLeft = -1
|
||||
const infrastructure = (x, isInProgress = true) => {
|
||||
@@ -3636,7 +3633,10 @@ const level = {
|
||||
if (isExitOpen) {
|
||||
level.exit.x = x - 50;
|
||||
level.exit.y = -260;
|
||||
if (simulation.difficultyMode < 7) powerUps.spawn(level.exit.x, level.exit.y - 100, "tech");
|
||||
if (simulation.difficultyMode < 7 && !isTechSpawned) {
|
||||
isTechSpawned = true
|
||||
powerUps.spawn(level.exit.x, level.exit.y - 100, "tech");
|
||||
}
|
||||
} else {
|
||||
var gateButton = level.button(x - 62, -237, 125, false) //x, y, width = 126, isSpawnBase = true
|
||||
gateButton.isUp = true
|
||||
@@ -7772,6 +7772,7 @@ const level = {
|
||||
},
|
||||
gravitron() {
|
||||
mobs.maxMobBody = 25 //normally 40, but set lower to avoid too much clutter
|
||||
|
||||
level.isVerticalFLipLevel = true
|
||||
simulation.fallHeight = 4000
|
||||
level.announceMobTypes()
|
||||
@@ -7787,7 +7788,12 @@ const level = {
|
||||
powerUps.chooseRandomPowerUp(3900, 925);
|
||||
|
||||
let buttons = []
|
||||
level.isFlipped = false;
|
||||
// level.isFlipped = false;
|
||||
if (simulation.isInvertedVertical) {
|
||||
level.isFlipped = true
|
||||
} else {
|
||||
level.isFlipped = false
|
||||
}
|
||||
let isFlipping = false;
|
||||
const flipAnimationCycles = 60
|
||||
|
||||
|
||||
29
js/player.js
29
js/player.js
@@ -809,6 +809,7 @@ const m = {
|
||||
tech.mineralDamageReduction = 1 - (1 - tech.mineralDamageReduction) * Math.pow(0.9, seconds);
|
||||
dmg *= tech.mineralDamageReduction
|
||||
}
|
||||
if (tech.isInPilot && Vector.magnitude(Vector.sub(m.fieldPosition, m.pos)) < m.fieldRadius + 100) dmg *= 0.1
|
||||
// return tech.isEnergyHealth ? Math.pow(dmg, 0.7) : dmg //defense has less effect
|
||||
// dmg *= m.fieldHarmReduction
|
||||
return dmg * m.fieldHarmReduction
|
||||
@@ -5170,6 +5171,7 @@ const m = {
|
||||
keyLog: [null, null, null, null, null, null, null],
|
||||
collider: null,
|
||||
fieldMass: 1,
|
||||
drain: 1,
|
||||
effect: () => {
|
||||
m.fieldUpgrades[8].collider = Matter.Bodies.polygon(m.pos.x, m.pos.y, 8, 35, {
|
||||
friction: 0,
|
||||
@@ -5177,7 +5179,6 @@ const m = {
|
||||
collisionFilter: { category: cat.player, mask: cat.map }, //no collision because player is holding
|
||||
classType: "field",
|
||||
lastSpeed: 0,
|
||||
isPLayerInField: false,
|
||||
});
|
||||
Composite.add(engine.world, m.fieldUpgrades[8].collider); //add to world
|
||||
|
||||
@@ -5233,11 +5234,13 @@ const m = {
|
||||
m.fieldPosition = { x: simulation.mouseInGame.x, y: simulation.mouseInGame.y }
|
||||
m.lastFieldPosition = { x: simulation.mouseInGame.x, y: simulation.mouseInGame.y }
|
||||
m.fieldOn = false;
|
||||
// m.fieldFire = true;
|
||||
if (tech.isNoPilotCost) m.fieldFire = true;
|
||||
|
||||
|
||||
m.fieldRadius = 0;
|
||||
m.drop();
|
||||
m.hold = function () {
|
||||
let isOn = (tech.isNoPilotCost ? !input.field : input.field)
|
||||
if (tech.isPrinter) {
|
||||
//spawn blocks if field and crouch
|
||||
if (input.field && m.fieldCDcycle < m.cycle && input.down && !m.isHolding) {
|
||||
@@ -5268,7 +5271,7 @@ const m = {
|
||||
//if releasing field throw it
|
||||
|
||||
}
|
||||
if (input.field) {
|
||||
if (isOn) {
|
||||
if (m.fieldCDcycle < m.cycle) {
|
||||
if (!m.fieldOn) { // if field was off, teleport to player
|
||||
m.fieldOn = true;
|
||||
@@ -5281,7 +5284,7 @@ const m = {
|
||||
const mag = Vector.magnitude(sub)
|
||||
|
||||
//adjust speed of field here, and with friction and mass above where the collier is spawned
|
||||
const fieldMassScale = Math.max(1.5, Math.pow(m.fieldUpgrades[8].fieldMass, 0.35)) //how much mass inside the field slows the push and cap
|
||||
const fieldMassScale = Math.max(1.5, Math.pow(m.fieldUpgrades[8].fieldMass, 0.3)) //how much mass inside the field slows the push and cap
|
||||
const scaledMag = 0.00000017 / fieldMassScale * Math.pow(mag, 2) //having the mag squared makes the effect weaker in close for fine movement
|
||||
let push = Vector.mult(Vector.normalise(sub), scaledMag)
|
||||
const cap = 0.17 / fieldMassScale //acts like a "speed limit"
|
||||
@@ -5296,11 +5299,6 @@ const m = {
|
||||
m.fieldPosition.x = m.fieldUpgrades[8].collider.position.x
|
||||
m.fieldPosition.y = m.fieldUpgrades[8].collider.position.y
|
||||
|
||||
//check if player is inside field
|
||||
// if (tech.isSurfing) {
|
||||
|
||||
// }
|
||||
|
||||
//grab power ups into the field
|
||||
for (let i = 0, len = powerUp.length; i < len; ++i) {
|
||||
if (tech.isEnergyNoAmmo && powerUp[i].name === "ammo") continue
|
||||
@@ -5333,18 +5331,16 @@ const m = {
|
||||
}
|
||||
}
|
||||
}
|
||||
//grab power ups normally at player too
|
||||
m.grabPowerUp();
|
||||
|
||||
let radiusGoal, radiusSmooth, drainPassive
|
||||
if (Matter.Query.ray(map, m.fieldPosition, player.position).length) { //is there something blocking the player's view of the field
|
||||
radiusGoal = 0
|
||||
radiusSmooth = 0.995
|
||||
drainPassive = 1.5 * m.fieldRegen //* (tech.isSurfing && m.fieldUpgrades[8].collider.isPLayerInField ? 0 : 1)
|
||||
drainPassive = 1.5 * m.fieldRegen * m.fieldUpgrades[8].drain
|
||||
} else {
|
||||
radiusGoal = Math.max(50, 250 - 2 * m.fieldUpgrades[8].collider.speed) //* (tech.isSurfing && m.fieldUpgrades[8].collider.isPLayerInField ? 1.5 : 1)
|
||||
radiusGoal = Math.max(50, 250 - 2 * m.fieldUpgrades[8].collider.speed)
|
||||
radiusSmooth = 0.97
|
||||
drainPassive = m.fieldRegen //* (tech.isSurfing && m.fieldUpgrades[8].collider.isPLayerInField ? 0 : 1)
|
||||
drainPassive = m.fieldRegen * m.fieldUpgrades[8].drain
|
||||
}
|
||||
m.fieldRadius = m.fieldRadius * radiusSmooth + radiusGoal * (1 - radiusSmooth)
|
||||
|
||||
@@ -5358,7 +5354,7 @@ const m = {
|
||||
for (let i = 0, len = body.length; i < len; ++i) {
|
||||
if (Vector.magnitude(Vector.sub(body[i].position, m.fieldPosition)) < m.fieldRadius && !body[i].isNotHoldable) {
|
||||
// const drainBlock = m.fieldUpgrades[8].collider.speed * body[i].mass * 0.0000013
|
||||
const drainBlock = speedChange * body[i].mass * 0.000095 //* (tech.isSurfing && m.fieldUpgrades[8].collider.isPLayerInField ? 0 : 1)
|
||||
const drainBlock = m.fieldUpgrades[8].drain * speedChange * body[i].mass * 0.000095
|
||||
if (m.energy > drainBlock) {
|
||||
m.energy -= drainBlock;
|
||||
Matter.Body.setVelocity(body[i], m.fieldUpgrades[8].collider.velocity); //give block mouse velocity
|
||||
@@ -5434,6 +5430,9 @@ const m = {
|
||||
m.fieldOn = false
|
||||
m.fieldRadius = 0
|
||||
}
|
||||
//grab power ups normally at player too
|
||||
if (input.field) m.grabPowerUp();
|
||||
|
||||
m.drawRegenEnergy("rgba(0,0,0,0.2)")
|
||||
|
||||
// //draw physics collider
|
||||
|
||||
@@ -1138,7 +1138,7 @@ const powerUps = {
|
||||
}
|
||||
// console.log(options.length)
|
||||
if (options.length > 0 || !tech.isSuperDeterminism) {
|
||||
let totalChoices = 2 + tech.extraChoices + 3 * (m.fieldMode === 8) - level.fewerChoices
|
||||
let totalChoices = 2 + tech.extraChoices + (tech.isInPilot ? 1 : 3) * (m.fieldMode === 8) - level.fewerChoices
|
||||
if (tech.isCancelTech && tech.cancelTechCount === 1) {
|
||||
totalChoices *= 3
|
||||
tech.cancelTechCount++
|
||||
@@ -1205,7 +1205,7 @@ const powerUps = {
|
||||
for (let i = 1; i < m.fieldUpgrades.length; i++) { //skip field emitter
|
||||
if (i !== m.fieldMode) options.push(i);
|
||||
}
|
||||
let totalChoices = 2 + tech.extraChoices + 3 * (m.fieldMode === 8) - level.fewerChoices
|
||||
let totalChoices = 2 + tech.extraChoices + (tech.isInPilot ? 1 : 3) * (m.fieldMode === 8) - level.fewerChoices
|
||||
if (tech.isCancelTech && tech.cancelTechCount === 1) {
|
||||
totalChoices *= 3
|
||||
tech.cancelTechCount++
|
||||
@@ -1285,7 +1285,7 @@ const powerUps = {
|
||||
}
|
||||
}
|
||||
//set total choices
|
||||
let totalChoices = 3 + tech.extraChoices + 3 * (m.fieldMode === 8) - level.fewerChoices
|
||||
let totalChoices = 3 + tech.extraChoices + (tech.isInPilot ? 1 : 3) * (m.fieldMode === 8) - level.fewerChoices
|
||||
if (tech.isCancelTech && tech.cancelTechCount === 1) {
|
||||
totalChoices *= 3
|
||||
tech.cancelTechCount++
|
||||
|
||||
147
js/tech.js
147
js/tech.js
@@ -141,7 +141,7 @@ const tech = {
|
||||
if (tech.tech[index].isLost) tech.tech[index].isLost = false; //give specific tech
|
||||
if (tech.isBanish && tech.tech[index].isBanished) tech.tech[index].isBanished = false //stops the bug where you can't gets stacks of tech you take with decoherence, I think
|
||||
if (tech.isDamageFieldTech && tech.tech[index].isFieldTech) {
|
||||
tech.damage *= 1.2
|
||||
tech.damage *= 1.3
|
||||
// simulation.inGameConsole(`<strong class='color-d'>damage</strong> <span class='color-symbol'>*=</span> ${1.05}`)
|
||||
simulation.inGameConsole(`<span class='color-var'>tech</span>.damage *= ${1.1} //hidden-variable theory`);
|
||||
}
|
||||
@@ -2550,9 +2550,9 @@ const tech = {
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (tech.blockDamage > 0.075 || tech.isPrinter) && !tech.nailsDeathMob && !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.iceIXOnDeath
|
||||
return (tech.blockDamage > 0.075 || tech.isPrinter)
|
||||
},
|
||||
requires: "mass driver, printer, no other mob death tech",
|
||||
requires: "mass driver, printer",
|
||||
effect() {
|
||||
tech.isMobBlockFling = true
|
||||
},
|
||||
@@ -2570,7 +2570,7 @@ const tech = {
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (tech.blockDamage > 0.075 || tech.isPrinter) && m.fieldUpgrades[m.fieldMode].name !== "pilot wave" && !tech.isTokamak
|
||||
return (tech.blockDamage > 0.075 || tech.isPrinter) && !tech.isTokamak
|
||||
},
|
||||
requires: "mass driver, printer, not pilot wave, tokamak",
|
||||
effect() {
|
||||
@@ -3089,8 +3089,28 @@ const tech = {
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "torpor",
|
||||
description: "if a mob has <strong>not died</strong> in the last <strong>5</strong> seconds<br><strong>0.3x</strong> <strong class='color-defense'>damage taken</strong>",
|
||||
name: "fluoroantimonic acid",
|
||||
description: "if your <strong class='color-h'>health</strong> is above <strong>100</strong><br><strong>1.35x</strong> <strong class='color-d'>damage</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return m.maxHealth > 1;
|
||||
},
|
||||
requires: "maximum health above 100",
|
||||
effect() {
|
||||
tech.isAcidDmg = true;
|
||||
},
|
||||
remove() {
|
||||
tech.isAcidDmg = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "control theory",
|
||||
descriptionFunction() {
|
||||
return `<strong>2x</strong> <strong class='color-d'>damage</strong><br>while your <strong class='color-h'>health</strong> is at maximum`
|
||||
},
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -3100,10 +3120,10 @@ const tech = {
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
tech.isHarmReduceNoKill = true;
|
||||
tech.isMaxHealthDamage = true;
|
||||
},
|
||||
remove() {
|
||||
tech.isHarmReduceNoKill = false;
|
||||
tech.isMaxHealthDamage = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -3147,10 +3167,8 @@ const tech = {
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "control theory",
|
||||
descriptionFunction() {
|
||||
return `<strong>2x</strong> <strong class='color-d'>damage</strong><br>while your <strong class='color-h'>health</strong> is at maximum`
|
||||
},
|
||||
name: "torpor",
|
||||
description: "if a mob has <strong>not died</strong> in the last <strong>5</strong> seconds<br><strong>0.3x</strong> <strong class='color-defense'>damage taken</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -3160,10 +3178,10 @@ const tech = {
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
tech.isMaxHealthDamage = true;
|
||||
tech.isHarmReduceNoKill = true;
|
||||
},
|
||||
remove() {
|
||||
tech.isMaxHealthDamage = false;
|
||||
tech.isHarmReduceNoKill = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -3255,7 +3273,7 @@ const tech = {
|
||||
{
|
||||
name: "ergodicity",
|
||||
descriptionFunction() {
|
||||
return `<strong>0.50x</strong> <strong class='color-h'>healing</strong> from ${powerUps.orb.heal()}<br><strong>1.7x</strong> <strong class='color-d'>damage</strong>`
|
||||
return `<strong>0.5x</strong> <strong class='color-h'>healing</strong> from ${powerUps.orb.heal()}<br><strong>1.7x</strong> <strong class='color-d'>damage</strong>`
|
||||
},
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -3291,24 +3309,6 @@ const tech = {
|
||||
tech.isHalfHeals = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "fluoroantimonic acid",
|
||||
description: "if your <strong class='color-h'>health</strong> is above <strong>100</strong><br><strong>1.35x</strong> <strong class='color-d'>damage</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return m.maxHealth > 1;
|
||||
},
|
||||
requires: "maximum health above 100",
|
||||
effect() {
|
||||
tech.isAcidDmg = true;
|
||||
},
|
||||
remove() {
|
||||
tech.isAcidDmg = false;
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "induction brake",
|
||||
descriptionFunction() {
|
||||
@@ -8328,12 +8328,12 @@ const tech = {
|
||||
damage: 1.4,
|
||||
effect() {
|
||||
tech.damage *= this.damage
|
||||
tech.aimDamage = 1.42
|
||||
tech.slowFireDamage = 1.42
|
||||
b.setFireCD();
|
||||
},
|
||||
remove() {
|
||||
if (this.count && m.alive) tech.damage /= this.damage
|
||||
tech.aimDamage = 1
|
||||
tech.slowFireDamage = 1
|
||||
b.setFireCD();
|
||||
}
|
||||
},
|
||||
@@ -8406,9 +8406,9 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return (m.fieldMode === 10 || m.fieldMode === 5 || m.fieldMode === 8)
|
||||
return (m.fieldMode === 10 || m.fieldMode === 5 || m.fieldMode === 8) && !tech.isNoPilotCost
|
||||
},
|
||||
requires: "plasma torch, grappling hook, pilot wave",
|
||||
requires: "plasma torch, grappling hook, pilot wave, not Bells theorem",
|
||||
effect() {
|
||||
tech.isHarmReduce = true
|
||||
},
|
||||
@@ -8811,7 +8811,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "hidden-variable theory",
|
||||
description: `<strong>1.2x</strong> <strong class='color-d'>damage</strong> after you <strong class='color-choice'><span>ch</span><span>oo</span><span>se</span></strong> ${powerUps.orb.fieldTech()}`,
|
||||
description: `<strong>1.3x</strong> <strong class='color-d'>damage</strong> after you <strong class='color-choice'><span>ch</span><span>oo</span><span>se</span></strong> ${powerUps.orb.fieldTech()}`,
|
||||
isFieldTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -8828,28 +8828,52 @@ const tech = {
|
||||
tech.isDamageFieldTech = false
|
||||
}
|
||||
},
|
||||
// {
|
||||
// name: "surfing",
|
||||
// description: `while player is inside the pilot wave field<br><strong>1.5x</strong> field radius and no field energy drain`,
|
||||
// isFieldTech: true,
|
||||
// maxCount: 1,
|
||||
// count: 0,
|
||||
// frequency: 4,
|
||||
// frequencyDefault: 4,
|
||||
// allowed() {
|
||||
// return m.fieldMode === 8
|
||||
// },
|
||||
// requires: "pilot wave",
|
||||
// effect() {
|
||||
// tech.isSurfing = true
|
||||
// },
|
||||
// remove() {
|
||||
// tech.isSurfing = false
|
||||
// }
|
||||
// },
|
||||
{
|
||||
name: "Bells theorem",
|
||||
description: `<strong>pilot wave</strong> is always <strong>on</strong><br>and has no <strong class='color-f'>energy</strong> cost`,
|
||||
isFieldTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 4,
|
||||
frequencyDefault: 4,
|
||||
allowed() {
|
||||
return m.fieldMode === 8 && !tech.isHarmReduce
|
||||
},
|
||||
requires: "pilot wave, not degenerate matter",
|
||||
effect() {
|
||||
tech.isNoPilotCost = true
|
||||
m.fieldUpgrades[8].drain = 0
|
||||
if (m.fieldMode === 8) m.fieldFire = true;
|
||||
|
||||
},
|
||||
remove() {
|
||||
tech.isNoPilotCost = false
|
||||
m.fieldUpgrades[8].drain = 1
|
||||
if (m.fieldMode === 8) m.fieldFire = false
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "principle of locality",
|
||||
description: `<strong>0.9x</strong> <strong class='color-defense'>damage taken</strong> while inside <strong>pilot wave</strong><br><div class="circle-grid tech"></div>, <div class="circle-grid gun"></div>, and <div class="circle-grid field"></div> have <strong>-2</strong> <strong class='color-choice'><span>ch</span><span>oi</span><span>ces</span></strong>`,
|
||||
isFieldTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 4,
|
||||
frequencyDefault: 4,
|
||||
allowed() {
|
||||
return m.fieldMode === 8
|
||||
},
|
||||
requires: "pilot wave",
|
||||
effect() {
|
||||
tech.isInPilot = true
|
||||
},
|
||||
remove() {
|
||||
tech.isInPilot = false
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "WIMPs",
|
||||
description: `at the exit to each <strong>level</strong> spawn ${powerUps.orb.research(4)}<br>and a dangerous particle that slowly <strong>chases</strong> you`,
|
||||
description: `at the exit to each <strong>level</strong> spawn ${powerUps.orb.research(5)}<br>and a dangerous particle that slowly <strong>chases</strong> you`,
|
||||
isFieldTech: true,
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
@@ -8862,7 +8886,7 @@ const tech = {
|
||||
effect() {
|
||||
tech.wimpCount++
|
||||
spawn.WIMP()
|
||||
for (let j = 0, len = 4; j < len; j++) powerUps.spawn(level.exit.x + 100 * (Math.random() - 0.5), level.exit.y - 100 + 100 * (Math.random() - 0.5), "research", false)
|
||||
for (let j = 0, len = 5; j < len; j++) powerUps.spawn(level.exit.x + 100 * (Math.random() - 0.5), level.exit.y - 100 + 100 * (Math.random() - 0.5), "research", false)
|
||||
},
|
||||
remove() {
|
||||
tech.wimpCount = 0
|
||||
@@ -12127,7 +12151,7 @@ const tech = {
|
||||
bonusEnergy: null,
|
||||
// healGiveMaxEnergy: null,
|
||||
healMaxEnergyBonus: 0, //not null
|
||||
aimDamage: null,
|
||||
slowFireDamage: null,
|
||||
isNoFireDefense: null,
|
||||
isNoFireDamage: null,
|
||||
duplicateChance: null,
|
||||
@@ -12369,5 +12393,6 @@ const tech = {
|
||||
mineralDamage: null,
|
||||
negativeMassCost: null,
|
||||
beamCollimator: null,
|
||||
isSurfing: null,
|
||||
isInPilot: null,
|
||||
isNoPilotCost: null,
|
||||
}
|
||||
Reference in New Issue
Block a user