From 3a9cc28b76d273be5359f5a74a0ecb45f78545c0 Mon Sep 17 00:00:00 2001 From: landgreen Date: Wed, 19 Oct 2022 21:14:11 -0700 Subject: [PATCH] entanglement entanglement - your death leaves a power up for next run renamed entanglement also stores your gun and field improved graphics for incompatible tech --- js/index.js | 2 +- js/level.js | 21 +++++++++++---------- js/player.js | 21 ++++++++++----------- js/powerup.js | 36 +++++++++++++++++++----------------- js/simulation.js | 4 ++++ js/tech.js | 40 ---------------------------------------- todo.txt | 16 ++++++++-------- 7 files changed, 53 insertions(+), 87 deletions(-) diff --git a/js/index.js b/js/index.js index a2849cc..b9a6497 100644 --- a/js/index.js +++ b/js/index.js @@ -1358,7 +1358,7 @@ document.getElementById("difficulty-select").addEventListener("input", () => { lore.setTechGoal() localSettings.difficultyMode = simulation.difficultyMode localSettings.levelsClearedLastGame = 0 //after changing difficulty, reset run history - localSettings.axiom = undefined //after changing difficulty, reset stored tech + localSettings.entanglement = undefined //after changing difficulty, reset stored tech if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage }); diff --git a/js/level.js b/js/level.js index 2c51310..039c232 100644 --- a/js/level.js +++ b/js/level.js @@ -25,13 +25,14 @@ const level = { // m.immuneCycle = Infinity //you can't take damage // tech.tech[297].frequency = 100 // m.couplingChange(5) - // m.setField("standing wave") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave + // m.setField("time dilation") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave // simulation.molecularMode = 2 // m.damage(0.1); - // b.giveGuns("nail gun") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser + // b.giveGuns("missiles") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser + // b.giveGuns("wave") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser // b.guns[0].ammo = 10000 - // tech.giveTech("ice crystal nucleation") + // tech.giveTech("arsenal") // for (let i = 0; i < 1; ++i) tech.giveTech("compound lens") // tech.giveTech("dye laser") // for (let i = 0; i < 1; ++i) tech.giveTech("CPT symmetry") @@ -51,7 +52,6 @@ const level = { // for (let i = 0; i < 40; ++i) tech.giveTech() // for (let i = 0; i < 13; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "research"); if (simulation.isTraining) { level.walk(); } else { level.intro(); } //normal starting level ************************************************ - // powerUps.spawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "technology", false, ["lens", "nail-bot"]); // for (let i = 0; i < 2; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "tech"); // for (let i = 0; i < 30; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false); @@ -71,6 +71,10 @@ const level = { // lore.unlockTesting(); // tech.giveTech("tinker"); //show junk tech in experiment mode + // simulation.isCheating = false + // m.storeTech() + // powerUps.spawn(m.pos.x, m.pos.y, "entanglement", false); + } else { spawn.setSpawnList(); //picks a couple mobs types for a themed random mob spawns // spawn.pickList = ["focuser", "focuser"] @@ -156,12 +160,9 @@ const level = { for (let i = 0; i < 2; i++) powerUps.spawn(level.exit.x + 10 * (Math.random() - 0.5), level.exit.y - 100 + 10 * (Math.random() - 0.5), "tech", false) //exit } if (m.plasmaBall) m.plasmaBall.reset() - if (localSettings.axiom && localSettings.axiom.levelName === level.levels[level.onLevel]) { - console.log('hi') - const flip = localSettings.axiom.isHorizontalFlipped === simulation.isHorizontalFlipped ? 1 : -1 - powerUps.spawn(flip * localSettings.axiom.position.x, localSettings.axiom.position.y, "technology", false, localSettings.axiom.techNames); - localSettings.axiom = undefined - if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage + if (localSettings.entanglement && localSettings.entanglement.levelName === level.levels[level.onLevel]) { + const flip = localSettings.entanglement.isHorizontalFlipped === simulation.isHorizontalFlipped ? 1 : -1 + powerUps.spawn(flip * localSettings.entanglement.position.x, localSettings.entanglement.position.y, "entanglement", false); } }, trainingText(say) { diff --git a/js/player.js b/js/player.js index 13d23f2..86a9405 100644 --- a/js/player.js +++ b/js/player.js @@ -474,25 +474,24 @@ const m = { } }, storeTech() { //store a copy of your tech, it will show up at your location next run - if (tech.totalCount > 0 && localSettings.isAllowed) { - const have = [] + if (localSettings.isAllowed && !simulation.isCheating) { + const gunList = [] //store gun names + for (i = 0, len = b.inventory.length; i < len; i++) gunList.push(b.inventory[i]) + const techList = [] //store tech names for (let i = 0; i < tech.tech.length; i++) { - if (tech.tech[i].count > 0 && !tech.tech[i].isNonRefundable) have.push(tech.tech[i].name) + if (tech.tech[i].count > 0 && !tech.tech[i].isNonRefundable) techList.push(i) } - if (have.length) { - localSettings.axiom = { - techNames: have, + if (techList.length) { + localSettings.entanglement = { + fieldIndex: m.fieldMode, + gunIndexes: gunList, + techIndexes: techList, position: { x: m.pos.x, y: m.pos.y }, levelName: level.levels[level.onLevel], isHorizontalFlipped: simulation.isHorizontalFlipped } if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage - // for (let i = 0; i < 6; i++) simulation.drawList.push({ x: m.pos.x, y: m.pos.y, radius: 40, color: `hsla(250,100%,62%,0.05)`, time: i * 120 }); //draw graphics to show that tech is stored - // simulation.makeTextLog(`tech ${localSettings.axiom.techName} is stored at (${m.pos.x.toFixed(0)}, ${m.pos.y.toFixed(0)}) on ${level.levels[level.onLevel]}`, 360); } - // else { - // simulation.makeTextLog(`no valid tech for axiom`, 360); - // } } }, health: 0, diff --git a/js/powerup.js b/js/powerup.js index 21e6b1d..1daef9c 100644 --- a/js/powerup.js +++ b/js/powerup.js @@ -1091,29 +1091,28 @@ const powerUps = { } }, }, - technology: { - name: "technology", + entanglement: { + name: "entanglement", color: "#fff", //"hsl(248,100%,65%)", - size() { - return 35; - }, - mode: "", //name of tech given + size() { return 40 }, effect() { - if (m.alive) { + if (m.alive && localSettings.entanglement) { let text = "" text += `
` - text += `

technology

` - for (let i = 0; i < this.mode.length; i++) { - let choose = null - for (let j = 0; j < tech.tech.length; j++) { //convert name into index - if (this.mode[i] === tech.tech[j].name) { - choose = j - break - } - } + text += `

entanglement

` + if (localSettings.entanglement.fieldIndex) { + const field = localSettings.entanglement.fieldIndex //add field + text += `
  ${m.fieldUpgrades[field].name}
${m.fieldUpgrades[field].description}
` + } + for (let i = 0; i < localSettings.entanglement.gunIndexes.length; i++) { //add guns + const gun = localSettings.entanglement.gunIndexes[i] + text += `
  ${b.guns[gun].name}
${b.guns[gun].description}
` + } + for (let i = 0; i < localSettings.entanglement.techIndexes.length; i++) { //add tech + let choose = localSettings.entanglement.techIndexes[i] const isCount = tech.tech[choose].count > 0 ? `(${tech.tech[choose].count+1}x)` : ""; if (choose === null || tech.tech[choose].count + 1 > tech.tech[choose].maxCount || !tech.tech[choose].allowed()) { - text += `
  ${tech.tech[choose].name}
incompatible
` + text += `
${tech.tech[choose].name} - incompatible
` } else { if (tech.tech[choose].isFieldTech) { text += `
@@ -1140,6 +1139,9 @@ const powerUps = { } document.getElementById("choose-grid").innerHTML = text powerUps.showDraft(); + + localSettings.entanglement = undefined + if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage } }, }, diff --git a/js/simulation.js b/js/simulation.js index 2c4f79e..30d9a08 100644 --- a/js/simulation.js +++ b/js/simulation.js @@ -760,6 +760,10 @@ const simulation = { b.setFireMethod() b.setFireCD(); // simulation.updateTechHUD(); + for (let i = 0; i < b.guns.length; i++) b.guns[i].isRecentlyShown = false //reset recently shown back to zero + for (let i = 0; i < m.fieldUpgrades.length; i++) m.fieldUpgrades[i].isRecentlyShown = false //reset recently shown back to zero + for (let i = 0; i < tech.tech.length; i++) tech.tech[i].isRecentlyShown = false //reset recently shown back to zero + powerUps.tech.choiceLog = []; powerUps.gun.choiceLog = []; powerUps.field.choiceLog = []; diff --git a/js/tech.js b/js/tech.js index b319762..57e9bfa 100644 --- a/js/tech.js +++ b/js/tech.js @@ -3808,47 +3808,7 @@ const tech = { }, remove() {} }, - // { - // name: "axiom", - // descriptionFunction() { - // if (localSettings.axiom) { - // return `your tech are saved at (${localSettings.axiom.position.x.toFixed(0)}, ${localSettings.axiom.position.y.toFixed(0)}) on ${localSettings.axiom.levelName}` - // } else { - // return "save a copy of your current tech
choose 1 when you return to this location" - // } - // }, - // maxCount: 1, - // count: 0, - // frequency: 1, - // frequencyDefault: 1, - // isNonRefundable: true, - // allowed() { - // return !build.isExperimentSelection && tech.totalCount > 0 && localSettings.isAllowed && !localSettings.axiom // && level.onLevel > 0// && !simulation.isCheating - // }, - // requires: "1+ tech, local storage, not cheating, not already stored", - // effect() { - // const have = [] - // for (let i = 0; i < tech.tech.length; i++) { - // if (tech.tech[i].count > 0 && !tech.tech[i].isNonRefundable) have.push(tech.tech[i].name) - // } - // if (have.length) { - // localSettings.axiom = { - // techNames: have, - // position: { x: m.pos.x, y: m.pos.y }, - // levelName: level.levels[level.onLevel], - // isHorizontalFlipped: simulation.isHorizontalFlipped - // } - // if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage - // simulation.makeTextLog(`tech ${localSettings.axiom.techName} is stored at (${m.pos.x.toFixed(0)}, ${m.pos.y.toFixed(0)}) on ${level.levels[level.onLevel]}`, 360); - // for (let i = 0; i < 6; i++) simulation.drawList.push({ x: m.pos.x, y: m.pos.y, radius: 40, color: `hsla(250,100%,62%,0.05)`, time: i * 120 }); //draw graphics to show that tech is stored - // } else { - // simulation.makeTextLog(`no valid tech for axiom`, 360); - // } - // }, - // remove() { - // } - // }, { name: "Occam's razor", descriptionFunction() { diff --git a/todo.txt b/todo.txt index 687267a..c2966e4 100644 --- a/todo.txt +++ b/todo.txt @@ -1,13 +1,10 @@ ******************************************************** NEXT PATCH ************************************************** -when you die store a copy of all your tech - they will show up at your location in the future as a power up - this is probably buggy +entanglement - your death leaves a power up for next run + renamed entanglement + also stores your gun and field + improved graphics for incompatible tech -CPT triggers at above 100 energy instead of above 68 energy -causality bots makes a few less bots - -several tech with dynamic effects show the value of the effect in their description *********************************************************** TODO ***************************************************** @@ -16,7 +13,10 @@ tech increase max energy and energy to 5000, but you can no longer regen energy it would be nice if there was incentive to go slow when choosing tech so n-gon is more relaxing add some css based visual effects for opening up a tech,gun,field - + +make freeze and __ not cause death at health health, but just 600% extra damage for that bullet + +new mob attibute - phosphorescence - mobs fire lasers for a few seconds after being hit with lasers make a new coupling effect for perfect diamagnetism or standing wave