ergodicity, tooltips
tech requirement info UI updated in experiment mode tech: ergodicity - remove heal power ups and heal tech, reduce difficulty by 2 levels
This commit is contained in:
10
js/bullet.js
10
js/bullet.js
@@ -2023,13 +2023,13 @@ const b = {
|
||||
// y: m.Vy / 2 + speed * Math.sin(dir)
|
||||
// });
|
||||
},
|
||||
drone(speed = 1) {
|
||||
drone(where = { x: m.pos.x + 30 * Math.cos(m.angle) + 20 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 20 * (Math.random() - 0.5) }, speed = 1) {
|
||||
const me = bullet.length;
|
||||
const THRUST = tech.isFastDrones ? 0.0023 : 0.0015
|
||||
// const FRICTION = tech.isFastDrones ? 0.008 : 0.0005
|
||||
const dir = m.angle + 0.4 * (Math.random() - 0.5);
|
||||
const RADIUS = (4.5 + 3 * Math.random())
|
||||
bullet[me] = Bodies.polygon(m.pos.x + 30 * Math.cos(m.angle) + Math.random(), m.pos.y + 30 * Math.sin(m.angle) + Math.random(), 8, RADIUS, {
|
||||
bullet[me] = Bodies.polygon(where.x, where.y, 8, RADIUS, {
|
||||
angle: dir,
|
||||
inertia: Infinity,
|
||||
friction: 0.05,
|
||||
@@ -2037,7 +2037,7 @@ const b = {
|
||||
restitution: 1,
|
||||
dmg: 0.24, //damage done in addition to the damage from momentum
|
||||
lookFrequency: 80 + Math.floor(23 * Math.random()),
|
||||
endCycle: simulation.cycle + Math.floor((960 + 420 * Math.random()) * tech.isBulletsLastLonger * tech.droneCycleReduction) + 130 + RADIUS * 5,
|
||||
endCycle: simulation.cycle + Math.floor((950 + 420 * Math.random()) * tech.isBulletsLastLonger * tech.droneCycleReduction) + 140 + RADIUS * 5,
|
||||
classType: "bullet",
|
||||
collisionFilter: {
|
||||
category: cat.bullet,
|
||||
@@ -4034,10 +4034,10 @@ const b = {
|
||||
have: false,
|
||||
fire() {
|
||||
if (m.crouch) {
|
||||
b.drone(45)
|
||||
b.drone({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 45)
|
||||
m.fireCDcycle = m.cycle + Math.floor(13 * b.fireCD); // cool down
|
||||
} else {
|
||||
b.drone(1)
|
||||
b.drone()
|
||||
m.fireCDcycle = m.cycle + Math.floor(6 * b.fireCD); // cool down
|
||||
}
|
||||
}
|
||||
|
||||
15
js/index.js
15
js/index.js
@@ -341,7 +341,9 @@ const build = {
|
||||
techID.setAttribute("onClick", `javascript: build.choosePowerUp(this,${i},'tech')`);
|
||||
}
|
||||
} else {
|
||||
techID.innerHTML = `<div class="grid-title"> ${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
||||
// techID.innerHTML = `<div class="grid-title"> ${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
||||
// techID.innerHTML = `<div class="grid-title"> ${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
||||
techID.innerHTML = `<div class="grid-title">${tech.tech[i].name}</div>${tech.tech[i].description}</div>`
|
||||
if (!techID.classList.contains("experiment-grid-disabled")) {
|
||||
techID.classList.add("experiment-grid-disabled");
|
||||
techID.onclick = null
|
||||
@@ -403,7 +405,8 @@ const build = {
|
||||
text += `<div id="tech-${i}" class="experiment-grid-module" onclick="build.choosePowerUp(this,${i},'tech')"><div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[i].name}</div> ${tech.tech[i].description}</div>`
|
||||
}
|
||||
} else {
|
||||
text += `<div id="tech-${i}" class="experiment-grid-module experiment-grid-disabled"><div class="grid-title">${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
||||
// text += `<div id="tech-${i}" class="experiment-grid-module "><div class="grid-title">${tech.tech[i].name}</div><span style="color:#666;">requires: ${tech.tech[i].requires}</span></div>`
|
||||
text += `<div id="tech-${i}" class="experiment-grid-module experiment-grid-disabled"><div class="grid-title"> ${tech.tech[i].name}</div> ${tech.tech[i].description}</div>`
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -415,6 +418,14 @@ const build = {
|
||||
document.getElementById("difficulty-select").value = document.getElementById("difficulty-select-experiment").value
|
||||
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||
});
|
||||
|
||||
//add tooltips
|
||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||
if (document.getElementById(`tech-${i}`)) {
|
||||
document.getElementById(`tech-${i}`).setAttribute('data-descr', tech.tech[i].requires); //add tooltip
|
||||
// document.getElementById(`tech-${i}`).setAttribute('title', tech.tech[i].requires); //add tooltip
|
||||
}
|
||||
}
|
||||
},
|
||||
reset() {
|
||||
build.isExperimentSelection = true;
|
||||
|
||||
@@ -1102,7 +1102,7 @@ const level = {
|
||||
|
||||
// simulation.difficulty = 30
|
||||
// spawn.starter(1900, -500, 200) //big boy
|
||||
// spawn.pulsar(1900, -500)
|
||||
spawn.exploder(1900, -500)
|
||||
// spawn.pulsarBoss(1900, -500)
|
||||
// spawn.historyBoss(1900, -500)
|
||||
// spawn.ghoster(2900, -500)
|
||||
@@ -1115,7 +1115,7 @@ const level = {
|
||||
// spawn.streamBoss(1600, -500)
|
||||
// spawn.orbitalBoss(1600, -500)
|
||||
// spawn.cellBossCulture(1600, -500)
|
||||
spawn.shieldingBoss(1600, -500)
|
||||
// spawn.shieldingBoss(1600, -500)
|
||||
// spawn.beamer(1200, -500)
|
||||
// spawn.shield(mob[mob.length - 1], 1800, -120, 1);
|
||||
|
||||
|
||||
@@ -478,7 +478,7 @@ const m = {
|
||||
}
|
||||
},
|
||||
addHealth(heal) {
|
||||
if (!tech.isEnergyHealth) {
|
||||
if (!tech.isEnergyHealth && !tech.isNoHeals) {
|
||||
m.health += heal * simulation.healScale;
|
||||
if (m.health > m.maxHealth) m.health = m.maxHealth;
|
||||
m.displayHealth();
|
||||
@@ -633,7 +633,7 @@ const m = {
|
||||
if (tech.isDroneOnDamage) { //chance to build a drone on damage from tech
|
||||
const len = Math.min((dmg - 0.06 * Math.random()) * 40, 40) / tech.droneEnergyReduction
|
||||
for (let i = 0; i < len; i++) {
|
||||
if (Math.random() < 0.5) b.drone() //spawn drone
|
||||
if (Math.random() < 0.5) b.drone({ x: m.pos.x + 30 * Math.cos(m.angle) + 100 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 100 * (Math.random() - 0.5) }) //spawn drone
|
||||
}
|
||||
}
|
||||
|
||||
@@ -735,9 +735,6 @@ const m = {
|
||||
// document.getElementById("health").style.transition = "width 1s ease-out"
|
||||
// }
|
||||
},
|
||||
hitMob(i, dmg) {
|
||||
//prevents damage happening too quick
|
||||
},
|
||||
buttonCD: 0, //cool down for player buttons
|
||||
drawLeg(stroke) {
|
||||
// if (simulation.mouseInGame.x > m.pos.x) {
|
||||
@@ -1567,7 +1564,7 @@ const m = {
|
||||
b.iceIX(1)
|
||||
} else {
|
||||
m.energy -= 0.45 * tech.droneEnergyReduction;
|
||||
b.drone(1)
|
||||
b.drone()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -680,6 +680,7 @@ const powerUps = {
|
||||
if (
|
||||
(!tech.isSuperDeterminism || (target === 'tech' || target === 'heal' || target === 'ammo')) &&
|
||||
!(tech.isEnergyNoAmmo && target === 'ammo') &&
|
||||
!(tech.isNoHeals || target === 'heal') &&
|
||||
(!simulation.isNoPowerUps || (target === 'research' || target === 'heal' || target === 'ammo'))
|
||||
) {
|
||||
powerUps.directSpawn(x, y, target, moving, mode, size)
|
||||
|
||||
47
js/spawn.js
47
js/spawn.js
@@ -650,7 +650,7 @@ const spawn = {
|
||||
mobs.spawn(x, y, 8, radius, "rgb(255,150,100)"); //"#2c9790"
|
||||
let me = mob[mob.length - 1];
|
||||
// Matter.Body.setDensity(me, 0.0007); //extra dense //normal is 0.001 //makes effective life much lower
|
||||
me.friction = 0;
|
||||
me.friction = 0.1;
|
||||
me.frictionAir = 0;
|
||||
me.accelMag = 0.001 * Math.sqrt(simulation.accelScale);
|
||||
me.g = me.accelMag * 0.6; //required if using 'gravity'
|
||||
@@ -2537,7 +2537,7 @@ const spawn = {
|
||||
spawn.shield(me, x, y, 1);
|
||||
spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random())
|
||||
|
||||
Matter.Body.setDensity(me, 0.01); //extra dense //normal is 0.001 //makes effective life much larger
|
||||
Matter.Body.setDensity(me, 0.008); //extra dense //normal is 0.001 //makes effective life much larger
|
||||
me.onDeath = function() {
|
||||
powerUps.spawnBossPowerUp(this.position.x, this.position.y)
|
||||
// this.vertices = Matter.Vertices.hull(Matter.Vertices.clockwiseSort(this.vertices)) //helps collisions functions work better after vertex have been changed
|
||||
@@ -2727,6 +2727,49 @@ const spawn = {
|
||||
this.attraction();
|
||||
};
|
||||
},
|
||||
// exploder(x, y, radius = 40 + Math.ceil(Math.random() * 50)) {
|
||||
// mobs.spawn(x, y, 4, radius, "rgb(255,0,0)");
|
||||
// let me = mob[mob.length - 1];
|
||||
// me.onHit = function() { //run this function on hitting player
|
||||
// this.explode();
|
||||
// };
|
||||
// me.g = 0.0003; //required if using 'gravity'
|
||||
// me.seePlayerFreq = 50 + Math.floor(Math.random() * 20)
|
||||
// me.do = function() {
|
||||
// this.gravity();
|
||||
// if (!(simulation.cycle % this.seePlayerFreq)) {
|
||||
// if (
|
||||
// this.distanceToPlayer2() < this.seeAtDistance2 &&
|
||||
// Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
||||
// Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
||||
// !m.isCloak
|
||||
// ) {
|
||||
// this.foundPlayer();
|
||||
// } else if (this.seePlayer.recall) {
|
||||
// for (let i = 0; i < 20; i++) {
|
||||
// let history = m.history[(m.cycle - 30 * i) % 600]
|
||||
// if (Matter.Query.ray(map, this.position, history.position).length === 0) {
|
||||
// this.seePlayer.recall = this.memory + Math.round(this.memory * Math.random()); //seconds before mob falls a sleep
|
||||
// this.seePlayer.position.x = history.position.x;
|
||||
// this.seePlayer.position.y = history.position.y;
|
||||
|
||||
// ctx.beginPath();
|
||||
// ctx.moveTo(this.position.x, this.position.y);
|
||||
// ctx.lineTo(history.position.x, history.position.y);
|
||||
// ctx.lineWidth = 5;
|
||||
// ctx.strokeStyle = "#000";
|
||||
// ctx.stroke();
|
||||
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// this.lostPlayer();
|
||||
// }
|
||||
// }
|
||||
// this.checkStatus();
|
||||
// this.attraction();
|
||||
// };
|
||||
// },
|
||||
exploder(x, y, radius = 40 + Math.ceil(Math.random() * 50)) {
|
||||
mobs.spawn(x, y, 4, radius, "rgb(255,0,0)");
|
||||
let me = mob[mob.length - 1];
|
||||
|
||||
178
js/tech.js
178
js/tech.js
@@ -417,7 +417,7 @@
|
||||
allowed() {
|
||||
return tech.isCrouchAmmo && !tech.isEnergyHealth
|
||||
},
|
||||
requires: "desublimated ammunition<br>not mass-energy equivalence",
|
||||
requires: "desublimated ammunition, not mass-energy",
|
||||
effect() {
|
||||
tech.isTurret = true
|
||||
},
|
||||
@@ -640,7 +640,7 @@
|
||||
allowed() {
|
||||
return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" || tech.haveGunCheck("spores") || tech.haveGunCheck("drones") || tech.haveGunCheck("missiles") || tech.haveGunCheck("foam") || tech.haveGunCheck("wave beam") || tech.isNeutronBomb
|
||||
},
|
||||
requires: "drones, spores, missiles, foam<br>wave beam, neutron bomb",
|
||||
requires: "drones, spores, missiles, foam, wave beam, neutron bomb",
|
||||
effect() {
|
||||
tech.isBulletsLastLonger += 0.3
|
||||
},
|
||||
@@ -722,6 +722,7 @@
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
isBadRandomOption: true,
|
||||
allowed() {
|
||||
return !tech.isRewindGrenade && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isPulseLaser || tech.isMissileField)
|
||||
},
|
||||
@@ -1329,9 +1330,9 @@
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.throwChargeRate > 1
|
||||
return tech.throwChargeRate > 1 && !tech.isNoHeals
|
||||
},
|
||||
requires: "mass driver",
|
||||
requires: "mass driver, not ergodicity",
|
||||
effect() {
|
||||
tech.isBlockPowerUps = true
|
||||
},
|
||||
@@ -1390,11 +1391,9 @@
|
||||
}
|
||||
}, {
|
||||
name: "flip-flop",
|
||||
description: `if <strong>flip-flop</strong> is <strong class="color-flop">ON</strong>, collisions set it to <strong class="color-flop">OFF</strong>
|
||||
<br>if <strong>flip-flop</strong> is <strong class="color-flop">OFF</strong>, collisions set it to <strong class="color-flop">ON</strong>`,
|
||||
// description: `<strong>collisions</strong> toggle flip-flop <strong>ON</strong> and <strong>OFF</strong>
|
||||
// <br><strong>ON</strong>: 0 collision <strong class='color-harm'>harm</strong>, <strong>OFF</strong>: <strong>25%</strong> extra <strong class='color-harm'>harm</strong>`,
|
||||
// on your next <strong>collision</strong> take <strong>0</strong> <strong class='color-harm'>harm</strong>
|
||||
description: `unlock advanced <strong class='color-m'>tech</strong> that runs if flip-flop is <strong class="color-flop">ON</strong><br><strong>flip-flop</strong> toggles <strong class="color-flop">ON</strong> and <strong class="color-flop">OFF</strong> after a collision`,
|
||||
// description: `if <strong>flip-flop</strong> is <strong class="color-flop">ON</strong>, collisions set it to <strong class="color-flop">OFF</strong>
|
||||
// <br>if <strong>flip-flop</strong> is <strong class="color-flop">OFF</strong>, collisions set it to <strong class="color-flop">ON</strong>`,
|
||||
nameInfo: "<span id = 'tech-flip-flop'></span>",
|
||||
addNameInfo() {
|
||||
setTimeout(function() {
|
||||
@@ -1419,6 +1418,7 @@
|
||||
effect() {
|
||||
tech.isFlipFlop = true //do you have this tech?
|
||||
tech.isFlipFlopOn = true //what is the state of flip-Flop?
|
||||
if (!m.isShipMode) {
|
||||
m.draw = () => {
|
||||
ctx.fillStyle = m.fillColor;
|
||||
m.walk_cycle += m.flipLegs * m.Vx;
|
||||
@@ -1454,6 +1454,7 @@
|
||||
|
||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||
}
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
tech.isFlipFlop = false
|
||||
@@ -1705,7 +1706,7 @@
|
||||
allowed() {
|
||||
return !tech.isEnergyHealth && (m.harmReduction() < 1 || tech.isFlipFlopHarm)
|
||||
},
|
||||
requires: "not mass-energy equivalence, some harm reduction",
|
||||
requires: "not mass-energy, some harm reduction",
|
||||
effect() {
|
||||
tech.isPiezo = true;
|
||||
m.energy += 20.48;
|
||||
@@ -1767,9 +1768,9 @@
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
allowed() {
|
||||
return tech.isEnergyHealth
|
||||
return tech.isEnergyHealth && !tech.isNoHeals
|
||||
},
|
||||
requires: "mass-energy equivalence",
|
||||
requires: "mass-energy equivalence, not ergodicity",
|
||||
effect() {
|
||||
tech.healGiveMaxEnergy = true; //tech.healMaxEnergyBonus given from heal power up
|
||||
powerUps.heal.color = "#0ae"
|
||||
@@ -1945,9 +1946,9 @@
|
||||
frequency: 1,
|
||||
isHealTech: true,
|
||||
allowed() {
|
||||
return !tech.isEnergyHealth
|
||||
return !tech.isEnergyHealth && !tech.isNoHeals
|
||||
},
|
||||
requires: "not mass-energy equivalence",
|
||||
requires: "not mass-energy equivalence, ergodicity",
|
||||
effect() {
|
||||
tech.isHealthRecovery = true;
|
||||
},
|
||||
@@ -2027,9 +2028,9 @@
|
||||
frequency: 1,
|
||||
isHealTech: true,
|
||||
allowed() {
|
||||
return !tech.isEnergyHealth && tech.damageFromTech() > 1
|
||||
return !tech.isEnergyHealth && tech.damageFromTech() > 1 && !tech.isNoHeals
|
||||
},
|
||||
requires: "some increased damage, not mass-energy equivalence",
|
||||
requires: "some increased damage, not mass-energy equivalence, ergodicity",
|
||||
effect() {
|
||||
tech.healthDrain += 0.03;
|
||||
},
|
||||
@@ -2059,9 +2060,9 @@
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
allowed() {
|
||||
return !tech.isEnergyHealth
|
||||
return !tech.isEnergyHealth && !tech.isNoHeals
|
||||
},
|
||||
requires: "not mass-energy equivalence",
|
||||
requires: "not mass-energy equivalence, ergodicity",
|
||||
effect() {
|
||||
tech.bonusHealth += 0.5
|
||||
m.addHealth(0.50)
|
||||
@@ -2079,9 +2080,9 @@
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
allowed() {
|
||||
return !tech.isEnergyHealth && !tech.isDroneGrab
|
||||
return !tech.isEnergyHealth && !tech.isDroneGrab && !tech.isNoHeals
|
||||
},
|
||||
requires: "not mass-energy equivalence, not drone harvester",
|
||||
requires: "not mass-energy equivalence, not drone harvester, ergodicity",
|
||||
effect() {
|
||||
tech.isArmorFromPowerUps = true; //tracked by tech.armorFromPowerUps
|
||||
},
|
||||
@@ -2114,9 +2115,9 @@
|
||||
frequency: 1,
|
||||
isHealTech: true,
|
||||
allowed() {
|
||||
return m.health > 0.1 && (m.maxHealth > 1 || tech.isArmorFromPowerUps)
|
||||
return m.health > 0.1 && (m.maxHealth > 1 || tech.isArmorFromPowerUps) && !tech.isNoHeals
|
||||
},
|
||||
requires: "increased max health",
|
||||
requires: "increased max health, not ergodicity",
|
||||
effect() {
|
||||
tech.isHealLowHealth = true;
|
||||
},
|
||||
@@ -2131,9 +2132,9 @@
|
||||
frequency: 1,
|
||||
isHealTech: true,
|
||||
allowed() {
|
||||
return ((m.health / m.maxHealth) < 0.7 || build.isExperimentSelection) && !tech.isEnergyHealth
|
||||
return ((m.health / m.maxHealth) < 0.7 || build.isExperimentSelection) && !tech.isEnergyHealth && !tech.isNoHeals
|
||||
},
|
||||
requires: "not mass-energy equivalence",
|
||||
requires: "not mass-energy equivalence, ergodicity",
|
||||
effect() {
|
||||
tech.largerHeals++;
|
||||
},
|
||||
@@ -2149,9 +2150,9 @@
|
||||
frequency: 1,
|
||||
isNonRefundable: true,
|
||||
allowed() {
|
||||
return ((m.health / m.maxHealth) < 0.7 || build.isExperimentSelection)
|
||||
return ((m.health / m.maxHealth) < 0.7 || build.isExperimentSelection) && !tech.isNoHeals
|
||||
},
|
||||
requires: "",
|
||||
requires: "health > 70%, not ergodicity",
|
||||
effect() {
|
||||
for (let i = 0; i < 12; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "heal");
|
||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||
@@ -2335,7 +2336,7 @@
|
||||
allowed() {
|
||||
return powerUps.research.count === 0 && !tech.isSuperDeterminism && !tech.isRerollHaste
|
||||
},
|
||||
requires: "not superdeterminism or Ψ(t) collapse<br>no research",
|
||||
requires: "not superdeterminism or Ψ(t) collapse, no research",
|
||||
effect: () => {
|
||||
tech.manyWorlds = true;
|
||||
},
|
||||
@@ -2650,28 +2651,6 @@
|
||||
remove() {
|
||||
tech.isMineDrop = false;
|
||||
}
|
||||
}, {
|
||||
name: "dark patterns",
|
||||
description: "reduce combat <strong>difficulty</strong> by <strong>1 level</strong><br>add <strong>18</strong> <strong class='color-j'>JUNK</strong> <strong class='color-m'>tech</strong> to the potential pool",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
allowed() {
|
||||
return level.onLevel < 8 && level.onLevel > 0
|
||||
},
|
||||
requires: "between levels 1 and 7",
|
||||
effect() {
|
||||
level.difficultyDecrease(simulation.difficultyMode)
|
||||
simulation.makeTextLog(`simulation.difficultyMode<span class='color-symbol'>--</span>`)
|
||||
tech.addJunkTechToPool(18)
|
||||
// for (let i = 0; i < tech.junk.length; i++) tech.tech.push(tech.junk[i])
|
||||
},
|
||||
remove() {
|
||||
if (this.count > 0) {
|
||||
tech.removeJunkTechFromPool(18)
|
||||
level.difficultyIncrease(simulation.difficultyMode)
|
||||
}
|
||||
}
|
||||
}, {
|
||||
name: "unified field theory",
|
||||
description: `in the <strong>pause</strong> menu, change your <strong class='color-f'>field</strong><br>by <strong>clicking</strong> on your <strong class='color-f'>field's</strong> box`,
|
||||
@@ -2792,6 +2771,50 @@
|
||||
for (let i = 0; i < 5; i++) powerUps.removeRandomTech()
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "dark patterns",
|
||||
description: "reduce combat <strong>difficulty</strong> by <strong>1 level</strong><br>add <strong>18</strong> <strong class='color-j'>JUNK</strong> <strong class='color-m'>tech</strong> to the potential pool",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
allowed() {
|
||||
return level.onLevel < 8 && level.onLevel > 0
|
||||
},
|
||||
requires: "between levels 1 and 7",
|
||||
effect() {
|
||||
level.difficultyDecrease(simulation.difficultyMode)
|
||||
simulation.makeTextLog(`simulation.difficultyMode <span class='color-symbol'>--</span>`)
|
||||
tech.addJunkTechToPool(18)
|
||||
// for (let i = 0; i < tech.junk.length; i++) tech.tech.push(tech.junk[i])
|
||||
},
|
||||
remove() {
|
||||
if (this.count > 0) {
|
||||
tech.removeJunkTechFromPool(18)
|
||||
level.difficultyIncrease(simulation.difficultyMode)
|
||||
}
|
||||
}
|
||||
}, {
|
||||
name: "ergodicity",
|
||||
description: "reduce combat <strong>difficulty</strong> by <strong>2 levels</strong><br>all <strong class='color-h'>healing</strong> has <strong>no</strong> effect",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
allowed() {
|
||||
return level.onLevel > 1
|
||||
},
|
||||
requires: "past levels 1",
|
||||
effect() {
|
||||
tech.isNoHeals = true;
|
||||
level.difficultyDecrease(simulation.difficultyMode * 2)
|
||||
simulation.makeTextLog(`simulation.difficultyMode <span class='color-symbol'>-=</span> 2`)
|
||||
},
|
||||
remove() {
|
||||
tech.isNoHeals = false;
|
||||
if (this.count > 0) {
|
||||
level.difficultyIncrease(simulation.difficultyMode * 2)
|
||||
}
|
||||
}
|
||||
},
|
||||
//**************************************************
|
||||
//************************************************** gun
|
||||
//************************************************** tech
|
||||
@@ -3053,7 +3076,7 @@
|
||||
allowed() {
|
||||
return (tech.isMineDrop + tech.nailBotCount + tech.fragments + tech.nailsDeathMob / 2 + ((tech.haveGunCheck("mine") && !tech.isLaserMine) + tech.isNailShot + (tech.haveGunCheck("nail gun") && !tech.isNeedleShieldPierce)) * 2 > 1) && !tech.isIceCrystals
|
||||
},
|
||||
requires: "nails, rivets, nonceramic needles, not ice crystals",
|
||||
requires: "nails, rivets, not ceramic needles, not ice crystals",
|
||||
effect() {
|
||||
tech.isNailRadiation = true;
|
||||
},
|
||||
@@ -3606,7 +3629,7 @@
|
||||
}
|
||||
}, {
|
||||
name: "reduced tolerances",
|
||||
description: "reduce all <strong>drone</strong> production costs by <strong>66%</strong><br>reduce the average <strong>drone</strong> lifetime by <strong>45%</strong>",
|
||||
description: "reduce all <strong>drone</strong> production costs by <strong>66%</strong><br>reduce the average <strong>drone</strong> lifetime by <strong>40%</strong>",
|
||||
isGunTech: true,
|
||||
maxCount: 3,
|
||||
count: 0,
|
||||
@@ -3616,7 +3639,7 @@
|
||||
},
|
||||
requires: "drones",
|
||||
effect() {
|
||||
tech.droneCycleReduction = Math.pow(0.55, 1 + this.count)
|
||||
tech.droneCycleReduction = Math.pow(0.6, 1 + this.count)
|
||||
tech.droneEnergyReduction = Math.pow(0.333, 1 + this.count)
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
if (b.guns[i].name === "drones") b.guns[i].ammoPack = b.guns[i].defaultAmmoPack * Math.pow(3, this.count)
|
||||
@@ -3923,7 +3946,7 @@
|
||||
allowed() {
|
||||
return tech.haveGunCheck("laser") && tech.isWideLaser
|
||||
},
|
||||
requires: "laser, not specular reflection<br>not diffraction grating",
|
||||
requires: "laser, not specular reflection, not diffraction grating",
|
||||
effect() {
|
||||
tech.wideLaser += 2
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
@@ -4707,9 +4730,29 @@
|
||||
// },
|
||||
// remove() {}
|
||||
// },
|
||||
{
|
||||
name: "disintegrated armament",
|
||||
description: "spawn a <strong class='color-g'>gun</strong><br><strong>remove</strong> your active <strong class='color-g'>gun</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return b.inventory.length > 0
|
||||
},
|
||||
requires: "at least 1 gun",
|
||||
effect() {
|
||||
if (b.activeGun && b.inventory.length > 0) b.removeGun(b.guns[b.activeGun].name)
|
||||
simulation.makeGunHUD()
|
||||
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "gun");
|
||||
},
|
||||
remove() {}
|
||||
},
|
||||
{
|
||||
name: "probability",
|
||||
description: "increase the <strong class='flicker'>frequency</strong><br>of a random <strong class='color-m'>tech</strong> by <strong>100</strong>",
|
||||
description: "increase the <strong class='flicker'>frequency</strong><br>of one random <strong class='color-m'>tech</strong> by <strong>100</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
@@ -4871,6 +4914,30 @@
|
||||
document.getElementById("health-bg").style.left = "86px"
|
||||
},
|
||||
remove() {}
|
||||
}, {
|
||||
name: "repartitioning",
|
||||
description: "set the <strong class='flicker'>frequency</strong> of finding normal <strong class='color-m'>tech</strong> to <strong>0</strong><br>spawn 5 <strong class='color-m'>tech</strong>",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 0,
|
||||
isNonRefundable: true,
|
||||
isExperimentHide: true,
|
||||
isJunk: true,
|
||||
allowed() {
|
||||
return true
|
||||
},
|
||||
requires: "",
|
||||
effect() {
|
||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||
if (tech.tech[i].isJunk) {
|
||||
tech.tech[i].frequency = 1
|
||||
} else {
|
||||
tech.tech[i].frequency = 0
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x, m.pos.y, "tech");
|
||||
},
|
||||
remove() {}
|
||||
}, {
|
||||
name: "defragment",
|
||||
description: "set the <strong class='flicker'>frequency</strong> of finding <strong class='color-j'>JUNK</strong> <strong class='color-m'>tech</strong> to zero",
|
||||
@@ -5825,5 +5892,6 @@
|
||||
isMetaAnalysis: null,
|
||||
isFoamAttract: null,
|
||||
droneCycleReduction: null,
|
||||
droneEnergyReduction: null
|
||||
droneEnergyReduction: null,
|
||||
isNoHeals: null
|
||||
}
|
||||
22
style.css
22
style.css
@@ -300,13 +300,29 @@ summary {
|
||||
.experiment-grid-disabled {
|
||||
/* opacity: 0.5; */
|
||||
background-color: var(--build-bg-color);
|
||||
color: rgba(0, 0, 0, 0.2);
|
||||
/* color: rgba(0, 0, 0, 0.9); */
|
||||
color: #000;
|
||||
opacity: 0.25;
|
||||
/* transition: background-color 1s, color 1s; */
|
||||
}
|
||||
|
||||
.experiment-grid-disabled:hover {
|
||||
/* background-color: #fff; */
|
||||
.experiment-grid-disabled[data-descr] {
|
||||
position: relative;
|
||||
/* opacity: 0; */
|
||||
}
|
||||
|
||||
.experiment-grid-disabled[data-descr]:hover::after {
|
||||
content: '\a \00a0 \00a0 \00a0 REQUIRES:\a''\00a0 \00a0 \00a0 'attr(data-descr);
|
||||
white-space: pre-wrap;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: var(--build-bg-color);
|
||||
z-index: 1;
|
||||
opacity: 1;
|
||||
transition: opacity 0.5s ease;
|
||||
}
|
||||
|
||||
#info {
|
||||
|
||||
16
todo.txt
16
todo.txt
@@ -1,8 +1,8 @@
|
||||
******************************************************** NEXT PATCH ********************************************************
|
||||
|
||||
fixed and renamed the new drone tech (it wasn't working right)
|
||||
tech requirement info UI updated in experiment mode
|
||||
|
||||
level bosses will do about 50% less damage on collisions, but they will take about 33% more to kill
|
||||
tech: ergodicity - remove heal power ups and heal tech, reduce difficulty by 2 levels
|
||||
|
||||
|
||||
******************************************************** BUGS ********************************************************
|
||||
@@ -36,13 +36,22 @@ fix door.isOpen actually meaning isClosed?
|
||||
|
||||
******************************************************** TODO ********************************************************
|
||||
|
||||
damage circles when you have MEE should be field color
|
||||
reset on experiment menu should clear power ups and bullets
|
||||
|
||||
|
||||
give pulsars attraction if with in distance range
|
||||
|
||||
should blocks block mob vision?
|
||||
mobs will attack player in the starting room though...
|
||||
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
||||
Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
||||
|
||||
mob vision: look at player history
|
||||
build a new type of attraction for mobs
|
||||
if mobs can't see player, they check to see if they can see where the player was in the history
|
||||
if mobs can't see player, they could check to see if they can find player in the past
|
||||
https://abitawake.com/news/articles/enemy-ai-chasing-a-player-without-navigation2d-or-a-star-pathfinding
|
||||
write find in spawn undo exploder, but commented out
|
||||
|
||||
tech: chitin - take 50% less damage, reduce harm reduction by 5% after each collision
|
||||
|
||||
@@ -308,7 +317,6 @@ n-gon outreach ideas
|
||||
|
||||
possible names for tech
|
||||
strange loop
|
||||
perturbation theory
|
||||
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.
|
||||
uncertainty principle
|
||||
|
||||
Reference in New Issue
Block a user