mass-energy rework
mass-energy is compatible with more tech
defense works with mass-energy, but is exponentially reduced (~10%)
damage taken scales with difficulty based heal reduction
1.3x dmg level 5 hard, 2x dmg level 13 why
ergodicity: 91->66% damage, no heals -> 1/2 size heals
negative feedback 0.5% -> 1% damage per missing health
negative entropy spawn heals for 33% missing health not 33 flat missing health
this means it caps at 3 health per level
tech - iceIX freeze effect lasts 2 seconds longer, spawn 10 coupling
perfect diamagnetism, standing wave
research is less common
path integral comes with 5% JUNK
there are fewer starting power ups on why difficulty
bug fixes:
fixed the text overflow issue on small screens
decoherence: if you get a tech that is banished it stops being banished
you can now have negative research
This commit is contained in:
@@ -2961,7 +2961,7 @@ const b = {
|
|||||||
if (tech.iceEnergy && !who.shield && !who.isShielded && who.isDropPowerUp && who.alive && m.immuneCycle < m.cycle) {
|
if (tech.iceEnergy && !who.shield && !who.isShielded && who.isDropPowerUp && who.alive && m.immuneCycle < m.cycle) {
|
||||||
setTimeout(() => { if (!who.alive) m.energy += tech.iceEnergy * 0.8 }, 10);
|
setTimeout(() => { if (!who.alive) m.energy += tech.iceEnergy * 0.8 }, 10);
|
||||||
}
|
}
|
||||||
mobs.statusSlow(who, 180)
|
mobs.statusSlow(who, tech.iceIXFreezeTime)
|
||||||
this.endCycle = simulation.cycle
|
this.endCycle = simulation.cycle
|
||||||
// if (tech.isHeavyWater) mobs.statusDoT(who, 0.15, 300)
|
// if (tech.isHeavyWater) mobs.statusDoT(who, 0.15, 300)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ const build = {
|
|||||||
</svg><br>`
|
</svg><br>`
|
||||||
text += `
|
text += `
|
||||||
<br><strong class='color-d'>damage</strong>: ${((tech.damageFromTech())).toPrecision(3)} difficulty: ${((m.dmgScale)).toPrecision(3)}
|
<br><strong class='color-d'>damage</strong>: ${((tech.damageFromTech())).toPrecision(3)} difficulty: ${((m.dmgScale)).toPrecision(3)}
|
||||||
<br><strong class='color-defense'>defense</strong>: ${(1-m.harmReduction()).toPrecision(3)} difficulty: ${(1/simulation.dmgScale).toPrecision(3)}
|
<br><strong class='color-defense'>defense</strong>: ${tech.isEnergyHealth ? (1-Math.pow(m.harmReduction(), 0.1)).toPrecision(3) : (1-m.harmReduction()).toPrecision(3) } difficulty: ${(1/simulation.dmgScale).toPrecision(3)}
|
||||||
<br><strong><em>fire rate</em></strong>: ${((1-b.fireCDscale)*100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
<br><strong><em>fire rate</em></strong>: ${((1-b.fireCDscale)*100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
||||||
${tech.duplicationChance() ? `<br><strong class='color-dup'>duplication</strong>: ${(tech.duplicationChance()*100).toFixed(0)}%`: ""}
|
${tech.duplicationChance() ? `<br><strong class='color-dup'>duplication</strong>: ${(tech.duplicationChance()*100).toFixed(0)}%`: ""}
|
||||||
${m.coupling ? `<br><strong class='color-coupling'>coupling</strong>: ${(m.coupling).toFixed(2)} <span style = 'font-size:90%;'>`+m.couplingDescription()+"</span>": ""}
|
${m.coupling ? `<br><strong class='color-coupling'>coupling</strong>: ${(m.coupling).toFixed(2)} <span style = 'font-size:90%;'>`+m.couplingDescription()+"</span>": ""}
|
||||||
|
|||||||
49
js/level.js
49
js/level.js
@@ -24,17 +24,17 @@ const level = {
|
|||||||
// m.immuneCycle = Infinity //you can't take damage
|
// m.immuneCycle = Infinity //you can't take damage
|
||||||
// tech.tech[297].frequency = 100
|
// tech.tech[297].frequency = 100
|
||||||
// m.couplingChange(5)
|
// m.couplingChange(5)
|
||||||
// m.setField("perfect diamagnetism") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass
|
// m.setField("metamaterial cloaking") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass
|
||||||
// simulation.molecularMode = 2
|
// simulation.molecularMode = 2
|
||||||
// m.damage(0.1);
|
// 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("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.guns[0].ammo = 1000000
|
// b.guns[0].ammo = 1000000
|
||||||
|
|
||||||
// tech.giveTech("Meissner effect")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("mass-energy equivalence")
|
||||||
// for (let i = 0; i < 4; ++i) tech.giveTech("bound state")
|
// tech.giveTech("Zeno's paradox")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("isotropic")
|
// tech.giveTech("homeostasis")
|
||||||
// tech.giveTech("sympathetic resonance")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("1st ionization energy")
|
||||||
// for (let i = 0; i < 9; i++) tech.giveTech("replication")
|
// for (let i = 0; i < 1; i++) tech.giveTech("negative feedback")
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "tech");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "tech");
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
|
||||||
@@ -42,14 +42,14 @@ const level = {
|
|||||||
// level.testing();
|
// level.testing();
|
||||||
// spawn.starter(1900, -500)
|
// spawn.starter(1900, -500)
|
||||||
// spawn.beetleBoss(2538, -1950)
|
// spawn.beetleBoss(2538, -1950)
|
||||||
// for (let i = 0; i < 33; ++i) spawn.starter(1000 + 5000 * Math.random(), -500 + 300 * Math.random())
|
// for (let i = 0; i < 33; ++i) spawn.sniper(1000 + 5000 * Math.random(), -500 + 300 * Math.random())
|
||||||
// tech.addJunkTechToPool(2)
|
// tech.addJunkTechToPool(0.5)
|
||||||
// tech.tech[322].frequency = 100
|
// tech.tech[322].frequency = 100
|
||||||
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
||||||
// for (let i = 0; i < 13; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "research");
|
|
||||||
// for (let i = 0; i < 4; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "tech");
|
|
||||||
|
|
||||||
|
// 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 ************************************************
|
if (simulation.isTraining) { level.walk(); } else { level.intro(); } //normal starting level ************************************************
|
||||||
|
// for (let i = 0; i < 4; ++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);
|
// for (let i = 0; i < 30; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false);
|
||||||
|
|
||||||
//lore testing
|
//lore testing
|
||||||
@@ -58,7 +58,7 @@ const level = {
|
|||||||
// simulation.isCheating = false //true;
|
// simulation.isCheating = false //true;
|
||||||
// level.levelsCleared = 10
|
// level.levelsCleared = 10
|
||||||
// mobs.mobDeaths = 200
|
// mobs.mobDeaths = 200
|
||||||
// localSettings.loreCount = 6 //this sets what conversation is heard
|
// localSettings.loreCount = 7 //this sets what conversation is heard
|
||||||
// if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
// if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
// level.onLevel = -1 //this sets level.levels[level.onLevel] = undefined which is required to run the conversation
|
// level.onLevel = -1 //this sets level.levels[level.onLevel] = undefined which is required to run the conversation
|
||||||
// level.null()
|
// level.null()
|
||||||
@@ -117,14 +117,23 @@ const level = {
|
|||||||
powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false);
|
powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false);
|
||||||
}
|
}
|
||||||
if (tech.isHealLowHealth) {
|
if (tech.isHealLowHealth) {
|
||||||
const len = Math.ceil((m.maxHealth - m.health) / 0.29)
|
// if (tech.isEnergyHealth) {
|
||||||
|
// var len = Math.ceil((m.maxEnergy - m.energy) / 0.33)
|
||||||
|
// } else {
|
||||||
|
// var len = Math.ceil((m.maxHealth - m.health) / 0.33)
|
||||||
|
// }
|
||||||
|
if (tech.isEnergyHealth) {
|
||||||
|
var len = 3 * (1 - m.energy / m.maxEnergy) //as a percent
|
||||||
|
} else {
|
||||||
|
var len = 3 * (1 - m.health / m.maxHealth) //as a percent
|
||||||
|
}
|
||||||
for (let i = 0; i < len; i++) powerUps.spawn(player.position.x + 90 * (Math.random() - 0.5), player.position.y + 90 * (Math.random() - 0.5), "heal", false);
|
for (let i = 0; i < len; i++) powerUps.spawn(player.position.x + 90 * (Math.random() - 0.5), player.position.y + 90 * (Math.random() - 0.5), "heal", false);
|
||||||
}
|
}
|
||||||
if (tech.isMACHO) spawn.MACHO()
|
if (tech.isMACHO) spawn.MACHO()
|
||||||
for (let i = 0; i < tech.wimpCount; i++) {
|
for (let i = 0; i < tech.wimpCount; i++) {
|
||||||
spawn.WIMP()
|
spawn.WIMP()
|
||||||
mob[mob.length - 1].isDecoupling = true //so you can find it to remove
|
mob[mob.length - 1].isDecoupling = true //so you can find it to remove
|
||||||
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)
|
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)
|
||||||
}
|
}
|
||||||
// if (tech.isFlipFlopLevelReset && !tech.isFlipFlopOn) {
|
// if (tech.isFlipFlopLevelReset && !tech.isFlipFlopOn) {
|
||||||
if ((tech.isRelay || tech.isFlipFlop) && !tech.isFlipFlopOn) {
|
if ((tech.isRelay || tech.isFlipFlop) && !tech.isFlipFlopOn) {
|
||||||
@@ -1320,7 +1329,7 @@ const level = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
isHazardRise: false,
|
isHazardRise: false,
|
||||||
hazard(x, y, width, height, damage = 0.003) {
|
hazard(x, y, width, height, damage = 0.002) {
|
||||||
return {
|
return {
|
||||||
min: {
|
min: {
|
||||||
x: x,
|
x: x,
|
||||||
@@ -1374,7 +1383,7 @@ const level = {
|
|||||||
|
|
||||||
if (this.height > 0 && Matter.Query.region([player], this).length) {
|
if (this.height > 0 && Matter.Query.region([player], this).length) {
|
||||||
if (m.immuneCycle < m.cycle) {
|
if (m.immuneCycle < m.cycle) {
|
||||||
const DRAIN = 0.0032 * (tech.isRadioactiveResistance ? 0.25 : 1)
|
const DRAIN = 0.004 * (tech.isRadioactiveResistance ? 0.25 : 1)
|
||||||
if (m.energy > DRAIN) {
|
if (m.energy > DRAIN) {
|
||||||
m.energy -= DRAIN
|
m.energy -= DRAIN
|
||||||
// m.damage(damage * (tech.isRadioactiveResistance ? 0.25 : 1) * 0.03) //still take 2% damage while you have energy
|
// m.damage(damage * (tech.isRadioactiveResistance ? 0.25 : 1) * 0.03) //still take 2% damage while you have energy
|
||||||
@@ -3297,9 +3306,11 @@ const level = {
|
|||||||
} else {
|
} else {
|
||||||
powerUps.spawnStartingPowerUps(2095 + 15 * (Math.random() - 0.5), -2070 - 125);
|
powerUps.spawnStartingPowerUps(2095 + 15 * (Math.random() - 0.5), -2070 - 125);
|
||||||
}
|
}
|
||||||
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2070 - 25, "heal", false);
|
if (simulation.difficultyMode < 5) {
|
||||||
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2070 - 75, "heal", false);
|
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2070 - 25, "heal", false);
|
||||||
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2070, "research", false);
|
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2070 - 75, "heal", false);
|
||||||
|
powerUps.spawn(2095 + 15 * (Math.random() - 0.5), -2070, "research", false); //not on why difficulty
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
}
|
}
|
||||||
@@ -8895,7 +8906,7 @@ const level = {
|
|||||||
buttonThird.query();
|
buttonThird.query();
|
||||||
buttonThird.draw();
|
buttonThird.draw();
|
||||||
if (!buttonThird.isUp && !hasSecretButton2) {
|
if (!buttonThird.isUp && !hasSecretButton2) {
|
||||||
for (var i = 0; i < 4; i++) powerUps.spawn(1614, -3700, "research");
|
for (var i = 0; i < 1; i++) powerUps.spawn(1614, -3700, "research");
|
||||||
hasSecretButton2 = true;
|
hasSecretButton2 = true;
|
||||||
}
|
}
|
||||||
if (!buttonSec.isUp) {
|
if (!buttonSec.isUp) {
|
||||||
|
|||||||
29
js/player.js
29
js/player.js
@@ -659,11 +659,6 @@ const m = {
|
|||||||
},
|
},
|
||||||
collisionImmuneCycles: 30,
|
collisionImmuneCycles: 30,
|
||||||
damage(dmg) {
|
damage(dmg) {
|
||||||
// if (tech.isCouplingNoHit) {
|
|
||||||
// for (let i = 0, len = tech.tech.length; i < len; i++) {
|
|
||||||
// if (tech.tech[i].name === "fine-structure constant") powerUps.ejectTech(i, true)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
if (tech.isRewindAvoidDeath && m.energy > 0.6 && dmg > 0.01) {
|
if (tech.isRewindAvoidDeath && m.energy > 0.6 && dmg > 0.01) {
|
||||||
const steps = Math.floor(Math.min(299, 150 * m.energy))
|
const steps = Math.floor(Math.min(299, 150 * m.energy))
|
||||||
simulation.makeTextLog(`<span class='color-var'>m</span>.rewind(${steps})`)
|
simulation.makeTextLog(`<span class='color-var'>m</span>.rewind(${steps})`)
|
||||||
@@ -677,9 +672,9 @@ const m = {
|
|||||||
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
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tech.isEnergyHealth) {
|
if (tech.isEnergyHealth) {
|
||||||
m.energy -= dmg
|
dmg *= Math.pow(m.harmReduction(), 0.1) //defense has less effect
|
||||||
|
m.energy -= 0.9 * dmg / Math.sqrt(simulation.healScale) //scale damage with heal reduction difficulty
|
||||||
if (m.energy < 0 || isNaN(m.energy)) { //taking deadly damage
|
if (m.energy < 0 || isNaN(m.energy)) { //taking deadly damage
|
||||||
if (tech.isDeathAvoid && powerUps.research.count && !tech.isDeathAvoidedThisLevel) {
|
if (tech.isDeathAvoid && powerUps.research.count && !tech.isDeathAvoidedThisLevel) {
|
||||||
tech.isDeathAvoidedThisLevel = true
|
tech.isDeathAvoidedThisLevel = true
|
||||||
@@ -738,7 +733,6 @@ const m = {
|
|||||||
document.getElementById("dmg").style.transition = "opacity 0s";
|
document.getElementById("dmg").style.transition = "opacity 0s";
|
||||||
document.getElementById("dmg").style.opacity = 0.1 + Math.min(0.6, dmg * 4);
|
document.getElementById("dmg").style.opacity = 0.1 + Math.min(0.6, dmg * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dmg > 0.03) {
|
if (dmg > 0.03) {
|
||||||
m.lastHit = dmg;
|
m.lastHit = dmg;
|
||||||
if (dmg > 0.06 / m.holdingMassScale) m.drop(); //drop block if holding // m.holdingMassScale = 0.5 for most fields
|
if (dmg > 0.06 / m.holdingMassScale) m.drop(); //drop block if holding // m.holdingMassScale = 0.5 for most fields
|
||||||
@@ -1594,7 +1588,19 @@ const m = {
|
|||||||
couplingChange(change = 0) {
|
couplingChange(change = 0) {
|
||||||
if (change > 0 && level.onLevel !== -1) simulation.makeTextLog(`m.coupling <span class='color-symbol'>+=</span> ${change}`, 60); //level.onLevel !== -1 means not on lore level
|
if (change > 0 && level.onLevel !== -1) simulation.makeTextLog(`m.coupling <span class='color-symbol'>+=</span> ${change}`, 60); //level.onLevel !== -1 means not on lore level
|
||||||
m.coupling += change
|
m.coupling += change
|
||||||
if (m.coupling < 0) m.coupling = 0 //can't go negative
|
if (m.coupling < 0) {
|
||||||
|
//look for coupling power ups on this level and remove them to prevent exploiting tech ejections
|
||||||
|
for (let i = powerUp.length - 1; i > -1; i--) {
|
||||||
|
if (powerUp[i].name === "coupling") {
|
||||||
|
Matter.Composite.remove(engine.world, powerUp[i]);
|
||||||
|
powerUp.splice(i, 1);
|
||||||
|
m.coupling += 0.1
|
||||||
|
if (!(m.coupling < 0)) break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m.coupling = 0 //can't go negative
|
||||||
|
}
|
||||||
// m.setMaxEnergy();
|
// m.setMaxEnergy();
|
||||||
// m.setMaxHealth();
|
// m.setMaxHealth();
|
||||||
m.setFieldRegen()
|
m.setFieldRegen()
|
||||||
@@ -2922,9 +2928,12 @@ const m = {
|
|||||||
//not shooting (or using field) enable cloak
|
//not shooting (or using field) enable cloak
|
||||||
if (m.energy < 0.05 && m.fireCDcycle < m.cycle && !input.fire) m.fireCDcycle = m.cycle
|
if (m.energy < 0.05 && m.fireCDcycle < m.cycle && !input.fire) m.fireCDcycle = m.cycle
|
||||||
if (m.fireCDcycle + 30 < m.cycle && !input.fire) { //automatically cloak if not firing
|
if (m.fireCDcycle + 30 < m.cycle && !input.fire) { //automatically cloak if not firing
|
||||||
if (!m.isCloak) {
|
const drain = 0.1
|
||||||
|
if (!m.isCloak && m.energy > drain) {
|
||||||
|
m.energy -= drain
|
||||||
m.isCloak = true //enter cloak
|
m.isCloak = true //enter cloak
|
||||||
|
|
||||||
|
|
||||||
// m.color = {
|
// m.color = {
|
||||||
// hue: 0,
|
// hue: 0,
|
||||||
// sat: 0,
|
// sat: 0,
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ const powerUps = {
|
|||||||
time: 16
|
time: 16
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
healGiveMaxEnergy: false, //for tech 1st ionization energy
|
||||||
orb: {
|
orb: {
|
||||||
research(num = 1) {
|
research(num = 1) {
|
||||||
switch (num) {
|
switch (num) {
|
||||||
@@ -98,19 +99,35 @@ const powerUps = {
|
|||||||
return text
|
return text
|
||||||
},
|
},
|
||||||
heal(num = 1) {
|
heal(num = 1) {
|
||||||
switch (num) {
|
if (powerUps.healGiveMaxEnergy) {
|
||||||
case 1:
|
switch (num) {
|
||||||
return `<div class="heal-circle"></div>`
|
case 1:
|
||||||
|
return `<div class="heal-circle-energy"></div>`
|
||||||
|
}
|
||||||
|
let text = '<span style="position:relative;">'
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += `<div class="heal-circle-energy" style="position:absolute; top:1px; left:${i*10}px;"></div>`
|
||||||
|
}
|
||||||
|
text += '</span> '
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += ' '
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
} else {
|
||||||
|
switch (num) {
|
||||||
|
case 1:
|
||||||
|
return `<div class="heal-circle"></div>`
|
||||||
|
}
|
||||||
|
let text = '<span style="position:relative;">'
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += `<div class="heal-circle" style="position:absolute; top:1px; left:${i*10}px;"></div>`
|
||||||
|
}
|
||||||
|
text += '</span> '
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += ' '
|
||||||
|
}
|
||||||
|
return text
|
||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
|
||||||
for (let i = 0; i < num; i++) {
|
|
||||||
text += `<div class="heal-circle" style="position:absolute; top:1px; left:${i*10}px;"></div>`
|
|
||||||
}
|
|
||||||
text += '</span> '
|
|
||||||
for (let i = 0; i < num; i++) {
|
|
||||||
text += ' '
|
|
||||||
}
|
|
||||||
return text
|
|
||||||
},
|
},
|
||||||
tech(num = 1) {
|
tech(num = 1) {
|
||||||
return `<div class="tech-circle"></div>`
|
return `<div class="tech-circle"></div>`
|
||||||
@@ -122,11 +139,11 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
let text = '<span style="position:relative;">'
|
let text = '<span style="position:relative;">'
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += `<div class="coupling-circle" style="position:absolute; top:1.5px; left:${i*8}px;"></div>`
|
text += `<div class="coupling-circle" style="position:absolute; top:1.5px; left:${i*6}px;"></div>`
|
||||||
}
|
}
|
||||||
text += '</span> '
|
text += '</span> '
|
||||||
for (let i = 0; i < num; i++) {
|
for (let i = 0; i < num; i++) {
|
||||||
text += ' '
|
text += '  '
|
||||||
}
|
}
|
||||||
return text
|
return text
|
||||||
},
|
},
|
||||||
@@ -452,9 +469,8 @@ const powerUps = {
|
|||||||
changeRerolls(amount) {
|
changeRerolls(amount) {
|
||||||
if (amount !== 0) {
|
if (amount !== 0) {
|
||||||
powerUps.research.count += amount
|
powerUps.research.count += amount
|
||||||
if (powerUps.research.count < 0) {
|
// if (powerUps.research.count < 0) powerUps.research.count = 0
|
||||||
powerUps.research.count = 0
|
|
||||||
}
|
|
||||||
// else {
|
// else {
|
||||||
// simulation.makeTextLog(`powerUps.research.count <span class='color-symbol'>+=</span> ${amount}`) // <br>${powerUps.research.count}
|
// simulation.makeTextLog(`powerUps.research.count <span class='color-symbol'>+=</span> ${amount}`) // <br>${powerUps.research.count}
|
||||||
// }
|
// }
|
||||||
@@ -520,11 +536,11 @@ const powerUps = {
|
|||||||
name: "heal",
|
name: "heal",
|
||||||
color: "#0eb",
|
color: "#0eb",
|
||||||
size() {
|
size() {
|
||||||
return Math.sqrt(0.1 + 0.25) * 40 * (simulation.healScale ** 0.25) * Math.sqrt(tech.largerHeals) * (tech.isFlipFlopOn && tech.isFlipFlopHealth ? Math.sqrt(2) : 1); //(simulation.healScale ** 0.25) gives a smaller radius as heal scale goes down
|
return Math.sqrt(0.1 + 0.25) * 40 * (simulation.healScale ** 0.25) * Math.sqrt(tech.largerHeals * (tech.isHalfHeals ? 0.5 : 1)) * (tech.isFlipFlopOn && tech.isFlipFlopHealth ? Math.sqrt(2) : 1); //(simulation.healScale ** 0.25) gives a smaller radius as heal scale goes down
|
||||||
},
|
},
|
||||||
effect() {
|
effect() {
|
||||||
if (!tech.isEnergyHealth && m.alive && !tech.isNoHeals) {
|
if (!tech.isEnergyHealth && m.alive) {
|
||||||
const heal = (this.size / 40 / (simulation.healScale ** 0.25)) ** 2 //simulation.healScale is undone here because heal scale is already properly affected on m.addHealth()
|
let heal = (this.size / 40 / (simulation.healScale ** 0.25)) ** 2 //simulation.healScale is undone here because heal scale is already properly affected on m.addHealth()
|
||||||
// console.log("size = " + this.size, "heal = " + heal)
|
// console.log("size = " + this.size, "heal = " + heal)
|
||||||
if (heal > 0) {
|
if (heal > 0) {
|
||||||
const overHeal = m.health + heal * simulation.healScale - m.maxHealth //used with tech.isOverHeal
|
const overHeal = m.health + heal * simulation.healScale - m.maxHealth //used with tech.isOverHeal
|
||||||
@@ -547,8 +563,8 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tech.healGiveMaxEnergy) {
|
if (powerUps.healGiveMaxEnergy) {
|
||||||
tech.healMaxEnergyBonus += 0.08 * tech.largerHeals
|
tech.healMaxEnergyBonus += 0.08 * tech.largerHeals * (tech.isHalfHeals ? 0.5 : 1)
|
||||||
m.setMaxEnergy();
|
m.setMaxEnergy();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -670,7 +686,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
|
if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
|
||||||
tech.junkResearchNumber = Math.ceil(3 * Math.random())
|
tech.junkResearchNumber = Math.ceil(4 * Math.random())
|
||||||
text += `<div class="choose-grid-module" onclick="powerUps.research.use('gun')"><div class="grid-title"> <span style="position:relative;">`
|
text += `<div class="choose-grid-module" onclick="powerUps.research.use('gun')"><div class="grid-title"> <span style="position:relative;">`
|
||||||
for (let i = 0; i < tech.junkResearchNumber; i++) text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15*i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
for (let i = 0; i < tech.junkResearchNumber; i++) text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15*i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
||||||
text += `</span> <span class='research-select'>pseudoscience</span></div></div>`
|
text += `</span> <span class='research-select'>pseudoscience</span></div></div>`
|
||||||
@@ -809,7 +825,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
|
if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
|
||||||
tech.junkResearchNumber = Math.ceil(3 * Math.random())
|
tech.junkResearchNumber = Math.ceil(4 * Math.random())
|
||||||
text += `<div class="choose-grid-module" onclick="powerUps.research.use('field')"><div class="grid-title"> <span style="position:relative;">`
|
text += `<div class="choose-grid-module" onclick="powerUps.research.use('field')"><div class="grid-title"> <span style="position:relative;">`
|
||||||
for (let i = 0; i < tech.junkResearchNumber; i++) text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15*i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
for (let i = 0; i < tech.junkResearchNumber; i++) text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15*i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
||||||
text += `</span> <span class='research-select'>pseudoscience</span></div></div>`
|
text += `</span> <span class='research-select'>pseudoscience</span></div></div>`
|
||||||
@@ -1062,11 +1078,11 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
//add in research button or pseudoscience button
|
//add in research button or pseudoscience button
|
||||||
if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
|
if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
|
||||||
tech.junkResearchNumber = Math.ceil(3 * Math.random())
|
tech.junkResearchNumber = Math.ceil(4 * Math.random())
|
||||||
text += `<div class="choose-grid-module" onclick="powerUps.research.use('tech')"><div class="grid-title"> <span style="position:relative;">`
|
text += `<div class="choose-grid-module" onclick="powerUps.research.use('tech')"><div class="grid-title"> <span style="position:relative;">`
|
||||||
for (let i = 0; i < tech.junkResearchNumber; i++) text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15*i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
for (let i = 0; i < tech.junkResearchNumber; i++) text += `<div class="circle-grid junk" style="position:absolute; top:0; left:${15*i}px ;opacity:0.8; border: 1px #fff solid;"></div>`
|
||||||
text += `</span> <span class='research-select'>pseudoscience</span></div></div>`
|
text += `</span> <span class='research-select'>pseudoscience</span></div></div>`
|
||||||
} else if (powerUps.research.count) {
|
} else if (powerUps.research.count > 0) {
|
||||||
text += `<div class="choose-grid-module" onclick="powerUps.research.use('tech')"><div class="grid-title"> <span style="position:relative;">`
|
text += `<div class="choose-grid-module" onclick="powerUps.research.use('tech')"><div class="grid-title"> <span style="position:relative;">`
|
||||||
for (let i = 0, len = Math.min(powerUps.research.count, 30); i < len; i++) text += `<div class="circle-grid research" style="position:absolute; top:0; left:${(18 - len*0.3)*i}px;opacity:0.8; border: 1px #fff solid;"></div>`
|
for (let i = 0, len = Math.min(powerUps.research.count, 30); i < len; i++) text += `<div class="circle-grid research" style="position:absolute; top:0; left:${(18 - len*0.3)*i}px;opacity:0.8; border: 1px #fff solid;"></div>`
|
||||||
// text += `</span> <span class='research-select'>research</span></div></div>`
|
// text += `</span> <span class='research-select'>research</span></div></div>`
|
||||||
@@ -1094,7 +1110,7 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
onPickUp(who) {
|
onPickUp(who) {
|
||||||
powerUps.research.currentRerollCount = 0
|
powerUps.research.currentRerollCount = 0
|
||||||
if (tech.isTechDamage && who.name === "tech") m.damage(0.12 + 0.12 * tech.isEnergyHealth)
|
if (tech.isTechDamage && who.name === "tech") m.damage(0.1)
|
||||||
if (tech.isMassEnergy) m.energy += 2;
|
if (tech.isMassEnergy) m.energy += 2;
|
||||||
if (tech.isMineDrop && bullet.length < 150 && Math.random() < 0.6) {
|
if (tech.isMineDrop && bullet.length < 150 && Math.random() < 0.6) {
|
||||||
if (tech.isLaserMine && input.down) {
|
if (tech.isLaserMine && input.down) {
|
||||||
@@ -1205,7 +1221,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
addResearchToLevel() { //add a random power up to a location that has a mob, mostly used to give each level one randomly placed research
|
addResearchToLevel() { //add a random power up to a location that has a mob, mostly used to give each level one randomly placed research
|
||||||
if (mob.length && Math.random() < 0.8) { // 80% chance
|
if (mob.length && Math.random() < 0.5 - 0.3 && simulation.difficultyMode < 5) { //lower chance on why difficulty
|
||||||
const index = Math.floor(Math.random() * mob.length)
|
const index = Math.floor(Math.random() * mob.length)
|
||||||
powerUps.spawn(mob[index].position.x, mob[index].position.y, "research");
|
powerUps.spawn(mob[index].position.x, mob[index].position.y, "research");
|
||||||
}
|
}
|
||||||
@@ -1263,7 +1279,7 @@ const powerUps = {
|
|||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
} else if (tech.tech[choose].count) {
|
} else if (tech.tech[choose].count && tech.tech[choose].isNonRefundable) {
|
||||||
// simulation.makeTextLog(`<div class='circle tech'></div> <strong>${tech.tech[choose].name}</strong> was ejected`, 600) //message about what tech was lost
|
// simulation.makeTextLog(`<div class='circle tech'></div> <strong>${tech.tech[choose].name}</strong> was ejected`, 600) //message about what tech was lost
|
||||||
simulation.makeTextLog(`<span class='color-var'>tech</span>.remove("<span class='color-text'>${tech.tech[choose].name}</span>")`)
|
simulation.makeTextLog(`<span class='color-var'>tech</span>.remove("<span class='color-text'>${tech.tech[choose].name}</span>")`)
|
||||||
|
|
||||||
@@ -1285,7 +1301,7 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
pauseEjectTech(index) {
|
pauseEjectTech(index) {
|
||||||
if ((tech.isPauseEjectTech || simulation.testing) && !simulation.isChoosing && !tech.tech[index].isNonRefundable) {
|
if ((tech.isPauseEjectTech || simulation.testing) && !simulation.isChoosing && !tech.tech[index].isNonRefundable) {
|
||||||
if (Math.random() < 0.16 || tech.tech[index].isFromAppliedScience || (tech.tech[index].bonusResearch !== undefined && tech.tech[index].bonusResearch > powerUps.research.count)) {
|
if (Math.random() < 0.2 || tech.tech[index].isFromAppliedScience || (tech.tech[index].bonusResearch !== undefined && tech.tech[index].bonusResearch > powerUps.research.count)) {
|
||||||
tech.removeTech(index)
|
tech.removeTech(index)
|
||||||
// powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
// powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1157,8 +1157,13 @@ const simulation = {
|
|||||||
|
|
||||||
if (!(m.cycle % 420)) { //once every 7 seconds
|
if (!(m.cycle % 420)) { //once every 7 seconds
|
||||||
if (tech.isZeno) {
|
if (tech.isZeno) {
|
||||||
m.health *= 0.95 //remove 5%
|
if (tech.isEnergyHealth) {
|
||||||
m.displayHealth();
|
m.energy *= 0.95
|
||||||
|
} else {
|
||||||
|
m.health *= 0.95 //remove 5%
|
||||||
|
m.displayHealth();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (tech.cyclicImmunity && m.immuneCycle < m.cycle + tech.cyclicImmunity) m.immuneCycle = m.cycle + tech.cyclicImmunity; //player is immune to damage for 60 cycles
|
if (tech.cyclicImmunity && m.immuneCycle < m.cycle + tech.cyclicImmunity) m.immuneCycle = m.cycle + tech.cyclicImmunity; //player is immune to damage for 60 cycles
|
||||||
|
|
||||||
|
|||||||
32
js/spawn.js
32
js/spawn.js
@@ -666,8 +666,8 @@ const spawn = {
|
|||||||
//when player is inside event horizon
|
//when player is inside event horizon
|
||||||
if (Vector.magnitude(Vector.sub(this.position, player.position)) < this.eventHorizon) {
|
if (Vector.magnitude(Vector.sub(this.position, player.position)) < this.eventHorizon) {
|
||||||
if (m.immuneCycle < m.cycle) {
|
if (m.immuneCycle < m.cycle) {
|
||||||
if (m.energy > 0) m.energy -= 0.015
|
if (m.energy > 0) m.energy -= 0.02
|
||||||
if (m.energy < 0.05 && m.immuneCycle < m.cycle) m.damage(0.0005 * simulation.dmgScale);
|
if (m.energy < 0.05 && m.immuneCycle < m.cycle) m.damage(0.0004 * simulation.dmgScale);
|
||||||
}
|
}
|
||||||
const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
||||||
player.force.x -= 0.0017 * Math.cos(angle) * player.mass * (m.onGround ? 1.7 : 1);
|
player.force.x -= 0.0017 * Math.cos(angle) * player.mass * (m.onGround ? 1.7 : 1);
|
||||||
@@ -1317,8 +1317,10 @@ const spawn = {
|
|||||||
me.onHit = function() { //run this function on hitting player
|
me.onHit = function() { //run this function on hitting player
|
||||||
if (powerUps.ejectTech()) {
|
if (powerUps.ejectTech()) {
|
||||||
powerUps.ejectGraphic("150, 138, 255");
|
powerUps.ejectGraphic("150, 138, 255");
|
||||||
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "ammo");
|
// powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "ammo");
|
||||||
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "research");
|
// powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "research");
|
||||||
|
this.accelMag *= 1.4
|
||||||
|
Matter.Body.setDensity(this, this.density * 1.4); //normal is 0.001
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
me.onDeath = function() {
|
me.onDeath = function() {
|
||||||
@@ -1397,8 +1399,10 @@ const spawn = {
|
|||||||
me.onHit = function() { //run this function on hitting player
|
me.onHit = function() { //run this function on hitting player
|
||||||
if (powerUps.ejectTech()) {
|
if (powerUps.ejectTech()) {
|
||||||
powerUps.ejectGraphic("150, 138, 255");
|
powerUps.ejectGraphic("150, 138, 255");
|
||||||
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "ammo");
|
// powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "ammo");
|
||||||
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "research");
|
// powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "research");
|
||||||
|
this.accelMag *= 1.4
|
||||||
|
Matter.Body.setDensity(this, this.density * 1.4); //normal is 0.001
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
me.onDeath = function() {
|
me.onDeath = function() {
|
||||||
@@ -1874,8 +1878,8 @@ const spawn = {
|
|||||||
//when player is inside event horizon
|
//when player is inside event horizon
|
||||||
if (Vector.magnitude(Vector.sub(this.position, player.position)) < eventHorizon) {
|
if (Vector.magnitude(Vector.sub(this.position, player.position)) < eventHorizon) {
|
||||||
if (m.immuneCycle < m.cycle) {
|
if (m.immuneCycle < m.cycle) {
|
||||||
if (m.energy > 0) m.energy -= 0.004
|
if (m.energy > 0) m.energy -= 0.005
|
||||||
if (m.energy < 0.1) m.damage(0.00015 * simulation.dmgScale);
|
if (m.energy < 0.1) m.damage(0.0001 * simulation.dmgScale);
|
||||||
}
|
}
|
||||||
const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
||||||
player.force.x -= 0.00125 * player.mass * Math.cos(angle) * (m.onGround ? 1.8 : 1);
|
player.force.x -= 0.00125 * player.mass * Math.cos(angle) * (m.onGround ? 1.8 : 1);
|
||||||
@@ -2056,8 +2060,8 @@ const spawn = {
|
|||||||
//when player is inside event horizon
|
//when player is inside event horizon
|
||||||
if (Vector.magnitude(Vector.sub(this.position, player.position)) < eventHorizon) {
|
if (Vector.magnitude(Vector.sub(this.position, player.position)) < eventHorizon) {
|
||||||
if (m.immuneCycle < m.cycle) {
|
if (m.immuneCycle < m.cycle) {
|
||||||
if (m.energy > 0) m.energy -= 0.006
|
if (m.energy > 0) m.energy -= 0.008
|
||||||
if (m.energy < 0.1) m.damage(0.0002 * simulation.dmgScale);
|
if (m.energy < 0.1) m.damage(0.00015 * simulation.dmgScale);
|
||||||
}
|
}
|
||||||
const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
const angle = Math.atan2(player.position.y - this.position.y, player.position.x - this.position.x);
|
||||||
player.force.x -= 0.0013 * Math.cos(angle) * player.mass * (m.onGround ? 1.7 : 1);
|
player.force.x -= 0.0013 * Math.cos(angle) * player.mass * (m.onGround ? 1.7 : 1);
|
||||||
@@ -3284,9 +3288,9 @@ const spawn = {
|
|||||||
mobs.spawn(x, y, 5, 50, "rgb(0,235,255)"); //"rgb(221,102,119)"
|
mobs.spawn(x, y, 5, 50, "rgb(0,235,255)"); //"rgb(221,102,119)"
|
||||||
let me = mob[mob.length - 1];
|
let me = mob[mob.length - 1];
|
||||||
Matter.Body.rotate(me, Math.PI * 0.1);
|
Matter.Body.rotate(me, Math.PI * 0.1);
|
||||||
Matter.Body.setDensity(me, 0.003); //extra dense //normal is 0.001 //makes effective life much larger
|
Matter.Body.setDensity(me, 0.002); //extra dense //normal is 0.001 //makes effective life much larger
|
||||||
me.isBoss = true;
|
me.isBoss = true;
|
||||||
me.damageReduction = 0.04 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
|
me.damageReduction = 0.03 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
|
||||||
|
|
||||||
me.frictionStatic = 0;
|
me.frictionStatic = 0;
|
||||||
me.friction = 0;
|
me.friction = 0;
|
||||||
@@ -3300,7 +3304,7 @@ const spawn = {
|
|||||||
me.grenadeDelay = 100
|
me.grenadeDelay = 100
|
||||||
}
|
}
|
||||||
me.pulseRadius = 1.5 * Math.min(550, 200 + simulation.difficulty * 2)
|
me.pulseRadius = 1.5 * Math.min(550, 200 + simulation.difficulty * 2)
|
||||||
me.delay = 30 + 35 * simulation.CDScale;
|
me.delay = 35 + 35 * simulation.CDScale;
|
||||||
me.nextBlinkCycle = me.delay;
|
me.nextBlinkCycle = me.delay;
|
||||||
spawn.shield(me, x, y, 1);
|
spawn.shield(me, x, y, 1);
|
||||||
me.onDamage = function() {
|
me.onDamage = function() {
|
||||||
@@ -6029,7 +6033,7 @@ const spawn = {
|
|||||||
this.cycle++
|
this.cycle++
|
||||||
if (this.seePlayer.recall && ((this.cycle % 15) === 0)) {
|
if (this.seePlayer.recall && ((this.cycle % 15) === 0)) {
|
||||||
if (this.canFire) {
|
if (this.canFire) {
|
||||||
if (this.cycle > 120) {
|
if (this.cycle > 100) {
|
||||||
this.cycle = 0
|
this.cycle = 0
|
||||||
this.canFire = false
|
this.canFire = false
|
||||||
// Matter.Body.setAngularVelocity(this, 0.1)
|
// Matter.Body.setAngularVelocity(this, 0.1)
|
||||||
|
|||||||
558
js/tech.js
558
js/tech.js
File diff suppressed because it is too large
Load Diff
21
style.css
21
style.css
@@ -180,6 +180,7 @@ summary {
|
|||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 0.25s linear;
|
transition: opacity 0.25s linear;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#choose-grid {
|
#choose-grid {
|
||||||
@@ -193,18 +194,20 @@ summary {
|
|||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
z-index: 12;
|
z-index: 12;
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
|
grid-template-columns: repeat(auto-fit, 400px);
|
||||||
grid-auto-rows: minmax(auto, auto);
|
/* grid-template-columns: repeat(auto-fit, minmax(360px, 450px)); */
|
||||||
|
/* grid-auto-rows: minmax(auto, auto); */
|
||||||
|
/* grid-auto-rows: 1; */
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
/* box-shadow: 0px 0px 40px 20px rgba(255, 255, 255, 0.25); */
|
/* box-shadow: 0px 0px 10px 5px rgba(0, 0, 0, 0.25); */
|
||||||
display: grid;
|
display: grid;
|
||||||
/* none; */
|
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 0.25s linear;
|
transition: opacity 0.25s linear;
|
||||||
align-content: start;
|
align-content: start;
|
||||||
max-height: 100vh;
|
max-height: 100vh;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.choose-grid-module {
|
.choose-grid-module {
|
||||||
@@ -813,6 +816,16 @@ summary {
|
|||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
margin-bottom: -3px;
|
margin-bottom: -3px;
|
||||||
}
|
}
|
||||||
|
.heal-circle-energy {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #ff0;
|
||||||
|
border: 0.5px #000 solid;
|
||||||
|
opacity: 0.85;
|
||||||
|
margin-bottom: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
.coupling-circle {
|
.coupling-circle {
|
||||||
width: 10px;
|
width: 10px;
|
||||||
|
|||||||
44
todo.txt
44
todo.txt
@@ -1,26 +1,48 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
|
mass-energy is compatible with more tech
|
||||||
|
defense works with mass-energy, but is exponentially reduced (~10%)
|
||||||
|
damage taken scales with difficulty based heal reduction
|
||||||
|
1.3x dmg level 5 hard, 2x dmg level 13 why
|
||||||
|
|
||||||
|
ergodicity: 91->66% damage, no heals -> 1/2 size heals
|
||||||
|
negative feedback 0.5% -> 1% damage per missing health
|
||||||
|
negative entropy spawn heals for 33% missing health not 33 flat missing health
|
||||||
|
this means it caps at 3 health per level
|
||||||
|
tech - iceIX freeze effect lasts 2 seconds longer, spawn 10 coupling
|
||||||
|
perfect diamagnetism, standing wave
|
||||||
|
|
||||||
|
research is less common
|
||||||
|
path integral comes with 5% JUNK
|
||||||
|
there are fewer starting power ups on why difficulty
|
||||||
|
|
||||||
|
bug fixes:
|
||||||
|
fixed the text overflow issue on small screens
|
||||||
|
decoherence: if you get a tech that is banished it stops being banished
|
||||||
|
you can now have negative research
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
bug? i'm pretty sure the quest is given at 6 but the field spawns at 7
|
make movement more valuable on the finalBoss
|
||||||
|
|
||||||
|
JUNK tech description that changes similar to cards in inscription
|
||||||
|
that changes based on mouse position
|
||||||
|
can you tell if mouse is over card?
|
||||||
|
|
||||||
|
tech that encourages gun swapping
|
||||||
|
a field tech: molecular assembler, pilot wave, negative mass?
|
||||||
|
something similar to applied science, but also spawn a gun?
|
||||||
|
a bonus for each time a mob dies with a different active gun each level
|
||||||
|
+damage on that level
|
||||||
|
ammo, heals, research?
|
||||||
|
|
||||||
|
|
||||||
deflecting coupling effect should be not fun
|
tech that gives permanent buff when ejected
|
||||||
make ice IX more fun
|
buff: coupling, damage?
|
||||||
faster speed, shorter duration
|
how to tell if it is ejected in the remove code?
|
||||||
trade bremstralung for iceIX?
|
|
||||||
|
|
||||||
make duplication less effective on why difficulty
|
|
||||||
scale the numbers in the tech
|
|
||||||
|
|
||||||
tech - buff MACHO range, effect, move speed?
|
tech - buff MACHO range, effect, move speed?
|
||||||
|
|
||||||
tech - iceIX freeze effect lasts much longer, spawn 10 coupling
|
|
||||||
for perfect diamagnatism
|
|
||||||
|
|
||||||
PWA?
|
PWA?
|
||||||
https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps
|
https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps
|
||||||
https://codeburst.io/how-to-easily-turn-your-static-website-to-a-progressive-web-app-pwa-b0af08da9693
|
https://codeburst.io/how-to-easily-turn-your-static-website-to-a-progressive-web-app-pwa-b0af08da9693
|
||||||
|
|||||||
Reference in New Issue
Block a user