boost power ups
tech: virtual particles - mobs have a chance to spawn coupling power ups old tech virtual particles renamed vacuum fluctuation tech: exciton - mobs have a chance to spawn a boost boosts are a power up that increases your damage for 10 seconds old tech exciton renamed non-renewables laser tech: quasiparticles - replace all ammo with boosts added +20px to grid elements to prevent text spillover bug fixes
This commit is contained in:
@@ -280,7 +280,9 @@ const b = {
|
|||||||
},
|
},
|
||||||
fireCDscale: 1,
|
fireCDscale: 1,
|
||||||
setFireCD() {
|
setFireCD() {
|
||||||
|
|
||||||
b.fireCDscale = tech.fireRate * tech.slowFire * tech.researchHaste * tech.aimDamage
|
b.fireCDscale = tech.fireRate * tech.slowFire * tech.researchHaste * tech.aimDamage
|
||||||
|
if (m.fieldMode === 6) b.fireCDscale *= 0.75
|
||||||
if (tech.isFastTime) b.fireCDscale *= 0.5
|
if (tech.isFastTime) b.fireCDscale *= 0.5
|
||||||
if (tech.isFireRateForGuns) b.fireCDscale *= Math.pow(0.82, b.inventory.length)
|
if (tech.isFireRateForGuns) b.fireCDscale *= Math.pow(0.82, b.inventory.length)
|
||||||
if (tech.isFireMoveLock) b.fireCDscale *= 0.55
|
if (tech.isFireMoveLock) b.fireCDscale *= 0.55
|
||||||
|
|||||||
@@ -23,16 +23,17 @@ const level = {
|
|||||||
// powerUps.research.changeRerolls(100000)
|
// powerUps.research.changeRerolls(100000)
|
||||||
// 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.setField("standing wave") //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
|
||||||
// b.giveGuns("laser") //0 nail gun 1 shotgun 2 super balls 3 matter wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
// b.giveGuns("laser") //0 nail gun 1 shotgun 2 super balls 3 matter 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("expansion")
|
// tech.giveTech("1st ionization energy")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("field coupling")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("field coupling")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("free-electron laser")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("free-electron laser")
|
||||||
// m.damage(0.1);
|
// m.damage(0.1);
|
||||||
// for (let i = 0; i < 1; i++) tech.giveTech("dynamic equilibrium")
|
// for (let i = 0; i < 1; i++) tech.giveTech("dynamic equilibrium")
|
||||||
// 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(450, -50, "research");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
||||||
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
|
||||||
|
|
||||||
// spawn.starter(1900, -500, 200)
|
// spawn.starter(1900, -500, 200)
|
||||||
// spawn.beetleBoss(1900, -400)
|
// spawn.beetleBoss(1900, -400)
|
||||||
|
|||||||
24
js/player.js
24
js/player.js
@@ -874,6 +874,7 @@ const m = {
|
|||||||
ctx.restore();
|
ctx.restore();
|
||||||
|
|
||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
|
powerUps.boost.draw()
|
||||||
},
|
},
|
||||||
drawDefault() {
|
drawDefault() {
|
||||||
ctx.fillStyle = m.fillColor;
|
ctx.fillStyle = m.fillColor;
|
||||||
@@ -896,6 +897,7 @@ const m = {
|
|||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
ctx.restore();
|
ctx.restore();
|
||||||
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
m.yOff = m.yOff * 0.85 + m.yOffGoal * 0.15; //smoothly move leg height towards height goal
|
||||||
|
powerUps.boost.draw()
|
||||||
},
|
},
|
||||||
// *********************************************
|
// *********************************************
|
||||||
// **************** fields *********************
|
// **************** fields *********************
|
||||||
@@ -1373,12 +1375,24 @@ const m = {
|
|||||||
m.fieldCDcycle = m.cycle + m.fieldBlockCD;
|
m.fieldCDcycle = m.cycle + m.fieldBlockCD;
|
||||||
if (!who.isInvulnerable && (m.coupling && m.fieldMode < 3) && bullet.length < 250) { //for standing wave mostly
|
if (!who.isInvulnerable && (m.coupling && m.fieldMode < 3) && bullet.length < 250) { //for standing wave mostly
|
||||||
for (let i = 0; i < m.coupling; i++) {
|
for (let i = 0; i < m.coupling; i++) {
|
||||||
|
if (m.coupling - i > Math.random()) {
|
||||||
const sub = Vector.mult(Vector.normalise(Vector.sub(who.position, m.pos)), (m.fieldRange * m.harmonicRadius) * (0.4 + 0.3 * Math.random())) //m.harmonicRadius should be 1 unless you are standing wave expansion
|
const sub = Vector.mult(Vector.normalise(Vector.sub(who.position, m.pos)), (m.fieldRange * m.harmonicRadius) * (0.4 + 0.3 * Math.random())) //m.harmonicRadius should be 1 unless you are standing wave expansion
|
||||||
const rad = Vector.rotate(sub, 1 * (Math.random() - 0.5))
|
const rad = Vector.rotate(sub, 1 * (Math.random() - 0.5))
|
||||||
const angle = Math.atan2(sub.y, sub.x)
|
const angle = Math.atan2(sub.y, sub.x)
|
||||||
b.iceIX(6 + 6 * Math.random(), angle + 3 * (Math.random() - 0.5), Vector.add(m.pos, rad))
|
b.iceIX(6 + 6 * Math.random(), angle + 3 * (Math.random() - 0.5), Vector.add(m.pos, rad))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// let count = 0
|
||||||
|
// for(let j=0; j<100;j++){
|
||||||
|
// const len = m.coupling + 0.5 * (Math.random() - 0.5)
|
||||||
|
// for (let i = 0; i < len; i++) {
|
||||||
|
// count++
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// console.log(count)
|
||||||
|
|
||||||
|
}
|
||||||
const unit = Vector.normalise(Vector.sub(player.position, who.position))
|
const unit = Vector.normalise(Vector.sub(player.position, who.position))
|
||||||
if (tech.blockDmg) {
|
if (tech.blockDmg) {
|
||||||
Matter.Body.setVelocity(who, { x: 0.5 * who.velocity.x, y: 0.5 * who.velocity.y });
|
Matter.Body.setVelocity(who, { x: 0.5 * who.velocity.x, y: 0.5 * who.velocity.y });
|
||||||
@@ -1562,7 +1576,7 @@ const m = {
|
|||||||
return `<span style = 'font-size:95%;'><strong>deflecting</strong> condenses +${Math.ceil(couple)} <strong class='color-s'>ice IX</strong></span>`
|
return `<span style = 'font-size:95%;'><strong>deflecting</strong> condenses +${Math.ceil(couple)} <strong class='color-s'>ice IX</strong></span>`
|
||||||
// return `<span style = 'font-size:89%;'><strong>invulnerable</strong> <strong>+${2*couple}</strong> seconds post collision</span>`
|
// return `<span style = 'font-size:89%;'><strong>invulnerable</strong> <strong>+${2*couple}</strong> seconds post collision</span>`
|
||||||
case 3: //negative mass
|
case 3: //negative mass
|
||||||
return `<strong>+${27*couple}%</strong> <strong class='color-defense'>defense</strong>`
|
return `<strong>+${((1-0.73 ** couple)*100).toFixed(1)}%</strong> <strong class='color-defense'>defense</strong>`
|
||||||
case 4: //assembler
|
case 4: //assembler
|
||||||
return `generate <strong>${6*couple}</strong> <strong class='color-f'>energy</strong> per second`
|
return `generate <strong>${6*couple}</strong> <strong class='color-f'>energy</strong> per second`
|
||||||
case 5: //plasma
|
case 5: //plasma
|
||||||
@@ -1582,8 +1596,8 @@ const m = {
|
|||||||
// m.setMaxHealth();
|
// m.setMaxHealth();
|
||||||
m.setFieldRegen()
|
m.setFieldRegen()
|
||||||
mobs.setMobSpawnHealth();
|
mobs.setMobSpawnHealth();
|
||||||
if ((m.fieldMode === 0 || m.fieldMode === 9) && !build.isExperimentSelection && !simulation.isTextLogOpen) simulation.circleFlare(0.4);
|
|
||||||
powerUps.setDupChance();
|
powerUps.setDupChance();
|
||||||
|
if ((m.fieldMode === 0 || m.fieldMode === 9) && !build.isExperimentSelection && !simulation.isTextLogOpen) simulation.circleFlare(0.4);
|
||||||
// m.collisionImmuneCycles = 30 + m.coupling * 120 //2 seconds
|
// m.collisionImmuneCycles = 30 + m.coupling * 120 //2 seconds
|
||||||
// switch (m.fieldMode) {
|
// switch (m.fieldMode) {
|
||||||
// case 0: //field emitter
|
// case 0: //field emitter
|
||||||
@@ -1757,7 +1771,7 @@ const m = {
|
|||||||
m.harmonicRadius = 0.994 * m.harmonicRadius + 0.006
|
m.harmonicRadius = 0.994 * m.harmonicRadius + 0.006
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.harmonicShield()
|
if (!simulation.isTimeSkipping) m.harmonicShield()
|
||||||
}
|
}
|
||||||
m.drawRegenEnergy()
|
m.drawRegenEnergy()
|
||||||
}
|
}
|
||||||
@@ -1790,13 +1804,15 @@ const m = {
|
|||||||
mob[i].locatePlayer();
|
mob[i].locatePlayer();
|
||||||
const unit = Vector.normalise(Vector.sub(m.fieldPosition, mob[i].position))
|
const unit = Vector.normalise(Vector.sub(m.fieldPosition, mob[i].position))
|
||||||
m.fieldCDcycle = m.cycle + m.fieldBlockCD + (mob[i].isShielded ? 15 : 0);
|
m.fieldCDcycle = m.cycle + m.fieldBlockCD + (mob[i].isShielded ? 15 : 0);
|
||||||
if (bullet.length < 250) {
|
if (!mob[i].isInvulnerable && bullet.length < 250) {
|
||||||
for (let i = 0; i < m.coupling; i++) {
|
for (let i = 0; i < m.coupling; i++) {
|
||||||
|
if (m.coupling - i > Math.random()) {
|
||||||
const angle = m.fieldAngle + 4 * m.fieldArc * (Math.random() - 0.5)
|
const angle = m.fieldAngle + 4 * m.fieldArc * (Math.random() - 0.5)
|
||||||
const radius = m.fieldRange * (0.6 + 0.3 * Math.random())
|
const radius = m.fieldRange * (0.6 + 0.3 * Math.random())
|
||||||
b.iceIX(6 + 6 * Math.random(), angle, Vector.add(m.fieldPosition, { x: radius * Math.cos(angle), y: radius * Math.sin(angle) }))
|
b.iceIX(6 + 6 * Math.random(), angle, Vector.add(m.fieldPosition, { x: radius * Math.cos(angle), y: radius * Math.sin(angle) }))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (tech.blockDmg) { //electricity
|
if (tech.blockDmg) { //electricity
|
||||||
Matter.Body.setVelocity(mob[i], { x: 0.5 * mob[i].velocity.x, y: 0.5 * mob[i].velocity.y });
|
Matter.Body.setVelocity(mob[i], { x: 0.5 * mob[i].velocity.x, y: 0.5 * mob[i].velocity.y });
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,37 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
tech(num = 1) {
|
tech(num = 1) {
|
||||||
return `<div class="tech-circle"></div>`
|
return `<div class="tech-circle"></div>`
|
||||||
|
},
|
||||||
|
coupling(num = 1) {
|
||||||
|
switch (num) {
|
||||||
|
case 1:
|
||||||
|
return `<div class="coupling-circle"></div>`
|
||||||
}
|
}
|
||||||
|
let text = '<span style="position:relative;">'
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += `<div class="coupling-circle" style="position:absolute; top:1.5px; left:${i*8}px;"></div>`
|
||||||
|
}
|
||||||
|
text += '</span> '
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += ' '
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
},
|
||||||
|
boost(num = 1) {
|
||||||
|
switch (num) {
|
||||||
|
case 1:
|
||||||
|
return `<div class="boost-circle"></div>`
|
||||||
|
}
|
||||||
|
let text = '<span style="position:relative;">'
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += `<div class="boost-circle" style="position:absolute; top:1.5px; left:${i*8}px;"></div>`
|
||||||
|
}
|
||||||
|
text += '</span> '
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
text += ' '
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
},
|
||||||
},
|
},
|
||||||
totalPowerUps: 0, //used for tech that count power ups at the end of a level
|
totalPowerUps: 0, //used for tech that count power ups at the end of a level
|
||||||
do() {},
|
do() {},
|
||||||
@@ -303,7 +333,7 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
endDraft(type, isCanceled = false) { //type should be a gun, tech, or field
|
endDraft(type, isCanceled = false) { //type should be a gun, tech, or field
|
||||||
if (isCanceled) {
|
if (isCanceled) {
|
||||||
if (tech.isCancelTech && Math.random() < 0.94) {
|
if (tech.isCancelTech && Math.random() < 0.9) {
|
||||||
// powerUps.research.use('tech')
|
// powerUps.research.use('tech')
|
||||||
powerUps[type].effect();
|
powerUps[type].effect();
|
||||||
return
|
return
|
||||||
@@ -326,6 +356,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tech.isCancelCouple) {
|
if (tech.isCancelCouple) {
|
||||||
|
simulation.makeTextLog(`m.coupling <span class='color-symbol'>+=</span> 0.5`);
|
||||||
m.coupling += 0.5
|
m.coupling += 0.5
|
||||||
m.couplingChange()
|
m.couplingChange()
|
||||||
}
|
}
|
||||||
@@ -364,6 +395,42 @@ const powerUps = {
|
|||||||
if (m.immuneCycle < m.cycle + 15) m.immuneCycle = m.cycle + 15; //player is immune to damage for 30 cycles
|
if (m.immuneCycle < m.cycle + 15) m.immuneCycle = m.cycle + 15; //player is immune to damage for 30 cycles
|
||||||
if (m.holdingTarget) m.drop();
|
if (m.holdingTarget) m.drop();
|
||||||
},
|
},
|
||||||
|
coupling: {
|
||||||
|
name: "coupling",
|
||||||
|
color: "#0ae", //"#0cf",
|
||||||
|
size() {
|
||||||
|
return 13;
|
||||||
|
},
|
||||||
|
effect() {
|
||||||
|
simulation.makeTextLog(`m.coupling <span class='color-symbol'>+=</span> 0.1`);
|
||||||
|
m.coupling += 0.1
|
||||||
|
m.couplingChange()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
boost: {
|
||||||
|
name: "boost",
|
||||||
|
color: "#f55", //"#0cf",
|
||||||
|
size() {
|
||||||
|
return 11;
|
||||||
|
},
|
||||||
|
endCycle: 0,
|
||||||
|
duration: 600,
|
||||||
|
damage: 1.5,
|
||||||
|
effect() {
|
||||||
|
powerUps.boost.endCycle = m.cycle + Math.floor(Math.max(0, powerUps.boost.endCycle - m.cycle) * 0.6) + powerUps.boost.duration //duration+seconds plus 2/3 of current time left
|
||||||
|
},
|
||||||
|
draw() {
|
||||||
|
// console.log(this.endCycle)
|
||||||
|
if (powerUps.boost.endCycle > m.cycle) {
|
||||||
|
ctx.strokeStyle = "rgba(255,0,0,0.8)" //m.fieldMeterColor; //"rgba(255,255,0,0.2)" //ctx.strokeStyle = `rgba(0,0,255,${0.5+0.5*Math.random()})`
|
||||||
|
ctx.beginPath();
|
||||||
|
const arc = (powerUps.boost.endCycle - m.cycle) / powerUps.boost.duration
|
||||||
|
ctx.arc(m.pos.x, m.pos.y, 28, m.angle - Math.PI * arc, m.angle + Math.PI * arc); //- Math.PI / 2
|
||||||
|
ctx.lineWidth = 4
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
research: {
|
research: {
|
||||||
count: 0,
|
count: 0,
|
||||||
name: "research",
|
name: "research",
|
||||||
@@ -1203,6 +1270,12 @@ const powerUps = {
|
|||||||
powerUps.spawn(x, y, "field");
|
powerUps.spawn(x, y, "field");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (tech.isCouplingPowerUps && Math.random() < 0.17) {
|
||||||
|
powerUps.spawn(x, y, "coupling");
|
||||||
|
}
|
||||||
|
if (tech.isBoostPowerUps && Math.random() < 0.17) {
|
||||||
|
powerUps.spawn(x, y, "boost");
|
||||||
|
}
|
||||||
// if (Math.random() < 0.01) {
|
// if (Math.random() < 0.01) {
|
||||||
// powerUps.spawn(x, y, "research");
|
// powerUps.spawn(x, y, "research");
|
||||||
// return;
|
// return;
|
||||||
@@ -1389,6 +1462,7 @@ const powerUps = {
|
|||||||
!(tech.isEnergyNoAmmo && target === 'ammo') &&
|
!(tech.isEnergyNoAmmo && target === 'ammo') &&
|
||||||
(!simulation.isNoPowerUps)
|
(!simulation.isNoPowerUps)
|
||||||
) {
|
) {
|
||||||
|
if (tech.isBoostReplaceAmmo && target === 'ammo') target = 'boost'
|
||||||
powerUps.directSpawn(x, y, target, moving, mode, size)
|
powerUps.directSpawn(x, y, target, moving, mode, size)
|
||||||
if (Math.random() < tech.duplicationChance()) {
|
if (Math.random() < tech.duplicationChance()) {
|
||||||
powerUps.directSpawn(x, y, target, moving, mode, size)
|
powerUps.directSpawn(x, y, target, moving, mode, size)
|
||||||
|
|||||||
136
js/tech.js
136
js/tech.js
@@ -209,6 +209,7 @@ const tech = {
|
|||||||
damage: 1, //used for tech changes to player damage that don't have complex conditions
|
damage: 1, //used for tech changes to player damage that don't have complex conditions
|
||||||
damageFromTech() {
|
damageFromTech() {
|
||||||
let dmg = tech.damage //m.fieldDamage
|
let dmg = tech.damage //m.fieldDamage
|
||||||
|
if (powerUps.boost.endCycle > m.cycle) dmg *= 1 + powerUps.boost.damage
|
||||||
if (m.coupling && (m.fieldMode === 0 || m.fieldMode === 5)) dmg *= 1 + 0.15 * m.coupling
|
if (m.coupling && (m.fieldMode === 0 || m.fieldMode === 5)) dmg *= 1 + 0.15 * m.coupling
|
||||||
if (m.isSneakAttack && m.sneakAttackCycle + Math.min(120, 0.5 * (m.cycle - m.enterCloakCycle)) > m.cycle) dmg *= 4.33 * (1 + 0.33 * m.coupling)
|
if (m.isSneakAttack && m.sneakAttackCycle + Math.min(120, 0.5 * (m.cycle - m.enterCloakCycle)) > m.cycle) dmg *= 4.33 * (1 + 0.33 * m.coupling)
|
||||||
if (tech.deathSkipTime) dmg *= 1 + 0.6 * tech.deathSkipTime
|
if (tech.deathSkipTime) dmg *= 1 + 0.6 * tech.deathSkipTime
|
||||||
@@ -526,7 +527,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isEnergyNoAmmo
|
return !tech.isEnergyNoAmmo
|
||||||
},
|
},
|
||||||
requires: "not exciton",
|
requires: "not non-renewables",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isAmmoForGun = true;
|
tech.isAmmoForGun = true;
|
||||||
},
|
},
|
||||||
@@ -548,7 +549,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isEnergyNoAmmo
|
return !tech.isEnergyNoAmmo
|
||||||
},
|
},
|
||||||
requires: "not exciton",
|
requires: "not non-renewables",
|
||||||
effect() {
|
effect() {
|
||||||
tech.ammoCap = 16;
|
tech.ammoCap = 16;
|
||||||
powerUps.ammo.effect()
|
powerUps.ammo.effect()
|
||||||
@@ -567,7 +568,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isEnergyNoAmmo
|
return !tech.isEnergyNoAmmo
|
||||||
},
|
},
|
||||||
requires: "not exciton",
|
requires: "not non-renewables",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isAmmoFromHealth = true;
|
tech.isAmmoFromHealth = true;
|
||||||
},
|
},
|
||||||
@@ -576,7 +577,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "exciton",
|
name: "non-renewables",
|
||||||
description: `<strong>+88%</strong> <strong class='color-d'>damage</strong><br>${powerUps.orb.ammo()} can't <strong>spawn</strong>`,
|
description: `<strong>+88%</strong> <strong class='color-d'>damage</strong><br>${powerUps.orb.ammo()} can't <strong>spawn</strong>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -1738,26 +1739,26 @@ const tech = {
|
|||||||
tech.isBlockPowerUps = false
|
tech.isBlockPowerUps = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// {
|
{
|
||||||
// name: "Pauli exclusion",
|
name: "Pauli exclusion",
|
||||||
// description: `after mob collisions<br>become <strong>invulnerable</strong> for <strong>+3</strong> seconds`,
|
description: `after mob collisions<br>become <strong>invulnerable</strong> for <strong>+3</strong> seconds`,
|
||||||
// maxCount: 9,
|
maxCount: 9,
|
||||||
// count: 0,
|
count: 0,
|
||||||
// frequency: 1,
|
frequency: 1,
|
||||||
// frequencyDefault: 1,
|
frequencyDefault: 1,
|
||||||
// allowed() { return true },
|
allowed() { return true },
|
||||||
// requires: "",
|
requires: "",
|
||||||
// effect() {
|
effect() {
|
||||||
// m.collisionImmuneCycles += 180;
|
m.collisionImmuneCycles += 180;
|
||||||
// if (m.immuneCycle < m.cycle + m.collisionImmuneCycles) m.immuneCycle = m.cycle + m.collisionImmuneCycles; //player is immune to damage
|
if (m.immuneCycle < m.cycle + m.collisionImmuneCycles) m.immuneCycle = m.cycle + m.collisionImmuneCycles; //player is immune to damage
|
||||||
// },
|
},
|
||||||
// remove() {
|
remove() {
|
||||||
// m.collisionImmuneCycles = 30;
|
m.collisionImmuneCycles = 30;
|
||||||
// }
|
}
|
||||||
// },
|
},
|
||||||
{
|
{
|
||||||
name: "spin–statistics theorem",
|
name: "spin–statistics theorem",
|
||||||
description: `every <strong>7</strong> seconds<br>become <strong>invulnerable</strong> for <strong>+1.75</strong> seconds`,
|
description: `every <strong>7</strong> seconds<br>become <strong>invulnerable</strong> for <strong>+1.8</strong> seconds`,
|
||||||
maxCount: 3,
|
maxCount: 3,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -1767,7 +1768,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
tech.cyclicImmunity += 105;
|
tech.cyclicImmunity += 108;
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.cyclicImmunity = 0;
|
tech.cyclicImmunity = 0;
|
||||||
@@ -2226,7 +2227,7 @@ const tech = {
|
|||||||
name: "1st ionization energy",
|
name: "1st ionization energy",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Ionization_energy' class="link">1st ionization energy</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Ionization_energy' class="link">1st ionization energy</a>`,
|
||||||
description: `after you collect ${powerUps.orb.heal()}<br><strong>+10</strong> maximum <strong class='color-f'>energy</strong>`,
|
description: `after you collect ${powerUps.orb.heal()}<br><strong>+10</strong> maximum <strong class='color-f'>energy</strong>`,
|
||||||
description: `convert ${powerUps.orb.heal()} into <div class="heal-circle" style = "background-color: #0ae;"></div><br><div class="heal-circle" style = "background-color: #0ae;"></div> give <strong>+10</strong> maximum <strong class='color-f'>energy</strong>`,
|
description: `convert ${powerUps.orb.heal()} into <div class="heal-circle" style = "background-color: #ff0; border: 0.5px #000 solid;"></div><br><div class="heal-circle" style = "background-color: #ff0; border: 0.5px #000 solid;"></div> give <strong>+10</strong> maximum <strong class='color-f'>energy</strong>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
@@ -2237,7 +2238,7 @@ const tech = {
|
|||||||
requires: "mass-energy equivalence",
|
requires: "mass-energy equivalence",
|
||||||
effect() {
|
effect() {
|
||||||
tech.healGiveMaxEnergy = true; //tech.healMaxEnergyBonus given from heal power up
|
tech.healGiveMaxEnergy = true; //tech.healMaxEnergyBonus given from heal power up
|
||||||
powerUps.heal.color = "#0ae"
|
powerUps.heal.color = "#ff0" //"#0ae"
|
||||||
for (let i = 0; i < powerUp.length; i++) { //find active heal power ups and adjust color live
|
for (let i = 0; i < powerUp.length; i++) { //find active heal power ups and adjust color live
|
||||||
if (powerUp[i].name === "heal") powerUp[i].color = powerUps.heal.color
|
if (powerUp[i].name === "heal") powerUp[i].color = powerUps.heal.color
|
||||||
}
|
}
|
||||||
@@ -3293,6 +3294,26 @@ const tech = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "exciton",
|
||||||
|
descriptionFunction() {
|
||||||
|
return `<span style = 'font-size:94%;'>after mobs <strong>die</strong> they have a <strong>17%</strong> chance to<br>spawn ${powerUps.orb.boost(1)} that give <strong>+${powerUps.boost.damage*100}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration/60).toFixed(0)}</strong> seconds</span>`
|
||||||
|
},
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 1,
|
||||||
|
frequencyDefault: 1,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
tech.isBoostPowerUps = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isBoostPowerUps = false
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "eternalism",
|
name: "eternalism",
|
||||||
description: "<strong>+34%</strong> <strong class='color-d'>damage</strong><br><strong>time</strong> can't be <strong>paused</strong> <em>(time can be dilated)</em>",
|
description: "<strong>+34%</strong> <strong class='color-d'>damage</strong><br><strong>time</strong> can't be <strong>paused</strong> <em>(time can be dilated)</em>",
|
||||||
@@ -3316,7 +3337,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "paradigm shift",
|
name: "paradigm shift",
|
||||||
description: `<strong>clicking</strong> <strong class='color-m'>tech</strong> while paused <strong>ejects</strong> them<br><strong>16%</strong> chance to fail`,
|
description: `<strong>clicking</strong> <strong class='color-m'>tech</strong> while paused <strong>ejects</strong> them<br><strong>16%</strong> chance to remove without <strong>ejecting</strong>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -3372,7 +3393,8 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
m.coupling++
|
simulation.makeTextLog(`m.coupling <span class='color-symbol'>+=</span> 1`);
|
||||||
|
m.coupling += 1
|
||||||
m.couplingChange()
|
m.couplingChange()
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
@@ -3383,12 +3405,12 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "quintessence",
|
name: "quintessence",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `use all your ${powerUps.orb.research(1)} to get <strong>+${powerUps.research.count*this.couplingToResearch}</strong> <strong class='color-coupling'>coupling</strong><br>${ m.couplingDescription()} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
return `use all your ${powerUps.orb.research(1)} to get <strong>+${this.count ? this.researchUsed*this.couplingToResearch:powerUps.research.count*this.couplingToResearch}</strong> <strong class='color-coupling'>coupling</strong><br>${ m.couplingDescription()} ${m.fieldMode === 0 ? "" : "per <strong class='color-coupling'>coupling</strong>"}`
|
||||||
},
|
},
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
frequencyDefault: 1,
|
frequencyDefault: 100,
|
||||||
allowed() {
|
allowed() {
|
||||||
return powerUps.research.count > 3
|
return powerUps.research.count > 3
|
||||||
},
|
},
|
||||||
@@ -3399,6 +3421,7 @@ const tech = {
|
|||||||
while (powerUps.research.count > 0) {
|
while (powerUps.research.count > 0) {
|
||||||
powerUps.research.changeRerolls(-1)
|
powerUps.research.changeRerolls(-1)
|
||||||
this.researchUsed++
|
this.researchUsed++
|
||||||
|
simulation.makeTextLog(`m.coupling <span class='color-symbol'>+=</span> ${(this.couplingToResearch).toFixed(2)}`);
|
||||||
m.coupling += this.couplingToResearch
|
m.coupling += this.couplingToResearch
|
||||||
}
|
}
|
||||||
m.couplingChange()
|
m.couplingChange()
|
||||||
@@ -3412,6 +3435,26 @@ const tech = {
|
|||||||
m.couplingChange()
|
m.couplingChange()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "virtual particles",
|
||||||
|
descriptionFunction() {
|
||||||
|
return `after mobs <strong>die</strong> they have a <strong>17%</strong> chance to<br>spawn ${powerUps.orb.coupling(1)} that give <strong>+0.1</strong> <strong class='color-coupling'>coupling</strong>`
|
||||||
|
},
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 1,
|
||||||
|
frequencyDefault: 1,
|
||||||
|
allowed() {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
tech.isCouplingPowerUps = true //about 20-30 mobs per level so at 16% and 0.1 coupling that's about 25 * 0.16 * 0.1 = 0.4 coupling per level with out duplication
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isCouplingPowerUps = false
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "fine-structure constant",
|
name: "fine-structure constant",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
@@ -3428,6 +3471,7 @@ const tech = {
|
|||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isCouplingNoHit = true
|
tech.isCouplingNoHit = true
|
||||||
|
simulation.makeTextLog(`m.coupling <span class='color-symbol'>+=</span> ${(this.value).toFixed(1)}`);
|
||||||
m.coupling += this.value
|
m.coupling += this.value
|
||||||
m.couplingChange()
|
m.couplingChange()
|
||||||
},
|
},
|
||||||
@@ -3462,7 +3506,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "options exchange",
|
name: "options exchange",
|
||||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Option_(finance)' class="link">options exchange</a>`,
|
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Option_(finance)' class="link">options exchange</a>`,
|
||||||
description: `clicking <strong style = 'font-size:150%;'>×</strong> for a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong> has a <strong>94%</strong><br>chance to randomize <strong>choices</strong> and not <strong>cancel</strong>`,
|
description: `clicking <strong style = 'font-size:150%;'>×</strong> for a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong> has a <strong>90%</strong><br>chance to randomize <strong>choices</strong> and not <strong>cancel</strong>`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -5849,7 +5893,7 @@ const tech = {
|
|||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("foam") && !tech.isEnergyNoAmmo
|
return tech.haveGunCheck("foam") && !tech.isEnergyNoAmmo
|
||||||
},
|
},
|
||||||
requires: "foam, not exciton",
|
requires: "foam, not non-renewables",
|
||||||
ammoLost: 0,
|
ammoLost: 0,
|
||||||
effect() {
|
effect() {
|
||||||
b.guns[8].ammoPack = b.guns[8].ammoPack * 12;
|
b.guns[8].ammoPack = b.guns[8].ammoPack * 12;
|
||||||
@@ -6197,6 +6241,27 @@ const tech = {
|
|||||||
tech.isStuckOn = false
|
tech.isStuckOn = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "quasiparticles",
|
||||||
|
descriptionFunction() {
|
||||||
|
return `replace all ${powerUps.orb.ammo(1)} spawns with ${powerUps.orb.boost(1)} which give<br><strong>+${powerUps.boost.damage*100}%</strong> <strong class='color-d'>damage</strong> for <strong>${(powerUps.boost.duration/60).toFixed(0)}</strong> seconds`
|
||||||
|
},
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("laser")
|
||||||
|
},
|
||||||
|
requires: "laser, not pulse",
|
||||||
|
effect() {
|
||||||
|
tech.isBoostReplaceAmmo = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isBoostReplaceAmmo = false
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "relativistic momentum",
|
name: "relativistic momentum",
|
||||||
description: "<strong class='color-laser'>lasers</strong> push <strong>mobs</strong> and <strong class='color-block'>blocks</strong>",
|
description: "<strong class='color-laser'>lasers</strong> push <strong>mobs</strong> and <strong class='color-block'>blocks</strong>",
|
||||||
@@ -7325,7 +7390,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "time crystals",
|
name: "time crystals",
|
||||||
description: "<strong>+300%</strong> passive <strong class='color-f'>energy</strong> generation",
|
description: "<strong>+200%</strong> passive <strong class='color-f'>energy</strong> generation",
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -7567,7 +7632,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "virtual particles",
|
name: "vacuum fluctuation",
|
||||||
description: `use ${powerUps.orb.research(6)}to exploit your <strong class='color-f'>field</strong> for a<br><strong>+11%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>`,
|
description: `use ${powerUps.orb.research(6)}to exploit your <strong class='color-f'>field</strong> for a<br><strong>+11%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>`,
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -10625,5 +10690,8 @@ const tech = {
|
|||||||
isLastHitDamage: null,
|
isLastHitDamage: null,
|
||||||
isCloakHealLastHit: null,
|
isCloakHealLastHit: null,
|
||||||
isRicochet: null,
|
isRicochet: null,
|
||||||
isCancelCouple: null
|
isCancelCouple: null,
|
||||||
|
isCouplingPowerUps: null,
|
||||||
|
isBoostPowerUps: null,
|
||||||
|
isBoostReplaceAmmo: null
|
||||||
}
|
}
|
||||||
29
style.css
29
style.css
@@ -193,7 +193,7 @@ 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(320px, 1fr));
|
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
|
||||||
grid-auto-rows: minmax(auto, auto);
|
grid-auto-rows: minmax(auto, auto);
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
/* box-shadow: 0px 0px 40px 20px rgba(255, 255, 255, 0.25); */
|
/* box-shadow: 0px 0px 40px 20px rgba(255, 255, 255, 0.25); */
|
||||||
@@ -236,7 +236,7 @@ summary {
|
|||||||
margin: 0px;
|
margin: 0px;
|
||||||
|
|
||||||
display: none;
|
display: none;
|
||||||
grid-template-columns: 325px;
|
grid-template-columns: 345px;
|
||||||
/* grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); */
|
/* grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); */
|
||||||
grid-auto-rows: minmax(auto, auto);
|
grid-auto-rows: minmax(auto, auto);
|
||||||
grid-gap: 0px;
|
grid-gap: 0px;
|
||||||
@@ -278,7 +278,7 @@ summary {
|
|||||||
background-color: var(--build-bg-color);
|
background-color: var(--build-bg-color);
|
||||||
|
|
||||||
display: none;
|
display: none;
|
||||||
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
|
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
|
||||||
grid-auto-flow: row;
|
grid-auto-flow: row;
|
||||||
grid-auto-rows: minmax(auto, auto);
|
grid-auto-rows: minmax(auto, auto);
|
||||||
grid-gap: 0px;
|
grid-gap: 0px;
|
||||||
@@ -800,7 +800,7 @@ summary {
|
|||||||
background-color: #467;
|
background-color: #467;
|
||||||
border: 0.5px #fff solid;
|
border: 0.5px #fff solid;
|
||||||
opacity: 0.95;
|
opacity: 0.95;
|
||||||
margin-bottom: -2px;
|
margin-bottom: -1.5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.heal-circle {
|
.heal-circle {
|
||||||
@@ -814,6 +814,26 @@ summary {
|
|||||||
margin-bottom: -3px;
|
margin-bottom: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.coupling-circle {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #0ae;
|
||||||
|
border: 0.5px #fff solid;
|
||||||
|
margin-bottom: -0.5px;
|
||||||
|
}
|
||||||
|
.boost-circle {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #f03;
|
||||||
|
border: 0.5px #fff solid;
|
||||||
|
opacity: 0.9;
|
||||||
|
margin-bottom: -0.5px;
|
||||||
|
}
|
||||||
|
|
||||||
.circle-grid-shadow {
|
.circle-grid-shadow {
|
||||||
width: 43px;
|
width: 43px;
|
||||||
height: 43px;
|
height: 43px;
|
||||||
@@ -929,6 +949,7 @@ summary {
|
|||||||
/* animation: vibrate 500ms linear infinite alternate;
|
/* animation: vibrate 500ms linear infinite alternate;
|
||||||
display: inline-block; */
|
display: inline-block; */
|
||||||
/* text-shadow: 0px 0px 2px #0cf; */
|
/* text-shadow: 0px 0px 2px #0cf; */
|
||||||
|
/* text-shadow: 0px 0px 1.5px #0cf; */
|
||||||
text-shadow: 0px 0px 1.5px #0cf;
|
text-shadow: 0px 0px 1.5px #0cf;
|
||||||
/* color: hsl(255, 82%, 59%); */
|
/* color: hsl(255, 82%, 59%); */
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
|
|||||||
30
todo.txt
30
todo.txt
@@ -1,30 +1,33 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
coupling
|
tech: virtual particles - mobs have a chance to spawn coupling power ups
|
||||||
crystallography renamed quintessence
|
old tech virtual particles renamed vacuum fluctuation
|
||||||
wormhole -> energy after eating blocks
|
|
||||||
penrose process is removed
|
|
||||||
perfect diamagnatism and standing wave -> ice IX after blocking
|
|
||||||
tech triple point removed
|
|
||||||
plasma torch -> +damage
|
|
||||||
|
|
||||||
killing one of the first 3->4 snake body mobs makes snake bosses vulnerable
|
tech: exciton - mobs have a chance to spawn a boost
|
||||||
shooterBoss shoots 3-6 smaller bullets
|
boosts are a power up that increases your damage for 10 seconds
|
||||||
|
old tech exciton renamed non-renewables
|
||||||
|
laser tech: quasiparticles - replace all ammo with boosts
|
||||||
|
|
||||||
|
added +20px to grid elements to prevent text spillover
|
||||||
bug fixes
|
bug fixes
|
||||||
|
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
coupling
|
coupling
|
||||||
|
pause menu +defense on coupling description goes above 100%
|
||||||
|
put coupling description as 4th line on field description
|
||||||
|
raw text no function call
|
||||||
|
no need for coupling description in power ups, pause
|
||||||
negative coupling?
|
negative coupling?
|
||||||
|
wouldn't work for iceIX
|
||||||
coupling tech
|
coupling tech
|
||||||
names: strongly coupled, Vibronic coupling, Residual dipolar coupling, NMR coupling, quintessence
|
names: strongly coupled, Vibronic coupling, NMR coupling
|
||||||
tech: +x% field coupling, your field changes randomly every y seconds
|
tech: +x% field coupling, your field changes randomly every y seconds
|
||||||
tech: coupling starts at 200%, but decays when the field is in use, coupling recharges when the field is not in use
|
tech: coupling starts at 200%, but decays when the field is in use, coupling recharges when the field is not in use
|
||||||
some fields aren't used much (that's ok?)
|
some fields aren't used much (that's ok?)
|
||||||
|
|
||||||
triple point iceIX needs to spawn in the radius of the field and an arc in the same quadrant as the mob
|
tech: increase the effect of boosts, but shorten the duration?
|
||||||
|
|
||||||
tech give laser mines more lasers (3->4? 5?)
|
tech give laser mines more lasers (3->4? 5?)
|
||||||
|
|
||||||
@@ -41,8 +44,6 @@ make orbitals increase orbital rotation speed after Orbital boss takes damage
|
|||||||
worms can target player, buff their damage
|
worms can target player, buff their damage
|
||||||
can't target player in first few seconds?
|
can't target player in first few seconds?
|
||||||
|
|
||||||
draw player transparent or opaque when cloaking field is on
|
|
||||||
|
|
||||||
plasma field tech - similar to regression, but for plasma ticks
|
plasma field tech - similar to regression, but for plasma ticks
|
||||||
|
|
||||||
greatly increase walking speed
|
greatly increase walking speed
|
||||||
@@ -87,7 +88,6 @@ tech expansion: field coupling also expands each fields in different ways
|
|||||||
|
|
||||||
tech: missiles explode a 2nd time after 1/2 a second (with a slightly different position determined by original velocity)
|
tech: missiles explode a 2nd time after 1/2 a second (with a slightly different position determined by original velocity)
|
||||||
|
|
||||||
1st ionisation energy should scale with heath powerup efficiency
|
|
||||||
The tech that makes blocks that fall into a wormhole give energy should scale with block size, with the same formula as tokomak
|
The tech that makes blocks that fall into a wormhole give energy should scale with block size, with the same formula as tokomak
|
||||||
|
|
||||||
junk suggestion: useless machine - ejects itself and removes itself from the item pool
|
junk suggestion: useless machine - ejects itself and removes itself from the item pool
|
||||||
|
|||||||
Reference in New Issue
Block a user