shotgun fleas
siphonaptera makes shotgun fire fleas colony 37% -> 50% more stuff in sporangium foam bullets have a +7% slow effect about +7% damage for some foam tech laser diode 33% -> 40% less energy cost free-electron laser 200% -> 225% damage extra clicks in experiment and unified field theory pause now switches molecular fab types bug fixes mob stun graphics is more consistent and less like mob invincibility
This commit is contained in:
48
js/bullet.js
48
js/bullet.js
@@ -3040,17 +3040,14 @@ const b = {
|
||||
lockedOn: null,
|
||||
delay: 50,
|
||||
cd: simulation.cycle + 10,
|
||||
dmg: 0,
|
||||
dmg: radius * (tech.isMutualism ? 2.5 : 1),
|
||||
setDamage() { //dmg is set to zero after doing damage once, and set back to normal after jumping
|
||||
this.dmg = radius * (tech.isMutualism ? 2.5 : 1) //damage done in addition to the damage from momentum //spores do 7 dmg, worms do 18
|
||||
},
|
||||
beforeDmg(who) {
|
||||
// this.endCycle = 0
|
||||
Matter.Body.setVelocity(this, Vector.mult(Vector.normalise(Vector.sub(this.position, who.position)), 10 + 10 * Math.random())); //push away from target
|
||||
|
||||
this.endCycle -= 180
|
||||
this.cd = simulation.cycle + this.delay;
|
||||
// this.collisionFilter.mask = cat.map
|
||||
if (tech.isSporeFreeze) mobs.statusSlow(who, 90)
|
||||
if (tech.isSpawnBulletsOnDeath && who.alive && who.isDropPowerUp) {
|
||||
setTimeout(() => {
|
||||
@@ -3075,29 +3072,8 @@ const b = {
|
||||
},
|
||||
gravity: 0.002 + 0.002 * tech.isSporeFollow,
|
||||
do() {
|
||||
// if (true && this.lockedOn && this.cd < simulation.cycle) { //blink towards mobs
|
||||
// //needs it's own cooldown variables
|
||||
// // this.cd = simulation.cycle + this.delay;
|
||||
|
||||
// const sub = Vector.sub(this.lockedOn.position, this.position);
|
||||
// const distMag = Vector.magnitude(sub);
|
||||
// if (distMag < 500) {
|
||||
// const unit = Vector.normalise(sub)
|
||||
// Matter.Body.setVelocity(this, Vector.mult(unit, Math.max(20, this.speed * 1.5)));
|
||||
// ctx.beginPath();
|
||||
// ctx.moveTo(this.position.x, this.position.y);
|
||||
// Matter.Body.translate(this, Vector.mult(unit, Math.min(350, distMag - this.lockedOn.radius + 10)));
|
||||
// ctx.lineTo(this.position.x, this.position.y);
|
||||
// ctx.lineWidth = radius * 2;
|
||||
// ctx.strokeStyle = "rgba(0,0,0,0.5)";
|
||||
// ctx.stroke();
|
||||
// }
|
||||
// }
|
||||
|
||||
this.force.y += this.gravity * this.mass
|
||||
if (this.cd < simulation.cycle && (Matter.Query.collides(this, map).length || Matter.Query.collides(this, body).length)) { //if on the ground and not on jump cooldown //
|
||||
// this.collisionFilter.mask = cat.map | cat.mob | cat.mobBullet | cat.mobShield
|
||||
|
||||
this.cd = simulation.cycle + this.delay;
|
||||
this.lockedOn = null; //find a target
|
||||
let closeDist = Infinity;
|
||||
@@ -3160,7 +3136,6 @@ const b = {
|
||||
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 = 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(where.x, where.y, 8, RADIUS, {
|
||||
@@ -3170,7 +3145,6 @@ const b = {
|
||||
frictionAir: 0,
|
||||
restitution: 1,
|
||||
density: 0.0005, // 0.001 is normal density
|
||||
//total 0.24 + 0.3 average
|
||||
dmg: 0.34 + 0.12 * tech.isDroneTeleport + 0.15 * tech.isDroneFastLook, //damage done in addition to the damage from momentum
|
||||
lookFrequency: (tech.isDroneFastLook ? 20 : 70) + Math.floor(17 * Math.random()),
|
||||
endCycle: simulation.cycle + Math.floor((950 + 400 * Math.random()) * tech.isBulletsLastLonger * tech.droneCycleReduction) + 5 * RADIUS + Math.max(0, 150 - bullet.length),
|
||||
@@ -3749,7 +3723,7 @@ const b = {
|
||||
inertia: Infinity,
|
||||
frictionAir: 0.003,
|
||||
dmg: 0, //damage on impact
|
||||
damage: tech.foamDamage * (tech.isFastFoam ? 2.5 : 1) * (tech.isBulletTeleport ? 1.47 : 1), //damage done over time
|
||||
damage: tech.foamDamage * (tech.isFastFoam ? 2.8 : 1) * (tech.isBulletTeleport ? 1.53 : 1), //damage done over time
|
||||
scale: 1 - 0.006 / tech.isBulletsLastLonger * (tech.isFastFoam ? 1.65 : 1),
|
||||
classType: "bullet",
|
||||
collisionFilter: {
|
||||
@@ -3816,9 +3790,9 @@ const b = {
|
||||
Matter.Body.setPosition(this, Vector.add(Vector.add(rotate, this.target.velocity), this.target.position))
|
||||
}
|
||||
if (this.target.isBoss) {
|
||||
if (this.target.speed > 8) Matter.Body.setVelocity(this.target, Vector.mult(this.target.velocity, 0.98))
|
||||
if (this.target.speed > 7.5) Matter.Body.setVelocity(this.target, Vector.mult(this.target.velocity, 0.98))
|
||||
} else {
|
||||
if (this.target.speed > 4) Matter.Body.setVelocity(this.target, Vector.mult(this.target.velocity, 0.95))
|
||||
if (this.target.speed > 3.5) Matter.Body.setVelocity(this.target, Vector.mult(this.target.velocity, 0.95))
|
||||
}
|
||||
|
||||
Matter.Body.setAngularVelocity(this.target, this.target.angularVelocity * 0.9);
|
||||
@@ -5606,10 +5580,18 @@ const b = {
|
||||
}, dmg)
|
||||
}
|
||||
}
|
||||
} else if (tech.isSporeFlea) {
|
||||
const where = { x: m.pos.x + 35 * Math.cos(m.angle), y: m.pos.y + 35 * Math.sin(m.angle) }
|
||||
const number = 4 * (tech.isShotgunReversed ? 1.6 : 1)
|
||||
for (let i = 0; i < number; i++) {
|
||||
const angle = m.angle + 0.2 * (Math.random() - 0.5)
|
||||
const speed = (input.down ? 33 : 20) * (1 + 0.1 * Math.random())
|
||||
b.flea(where, { x: speed * Math.cos(angle), y: speed * Math.sin(angle) })
|
||||
}
|
||||
} else if (tech.isSporeWorm) {
|
||||
const where = { x: m.pos.x + 35 * Math.cos(m.angle), y: m.pos.y + 35 * Math.sin(m.angle) }
|
||||
const spread = (input.down ? 0.02 : 0.07)
|
||||
const number = 3 * (tech.isShotgunReversed ? 1.6 : 1) + Math.random()
|
||||
const number = 4 * (tech.isShotgunReversed ? 1.6 : 1)
|
||||
let angle = m.angle - (number - 1) * spread * 0.5
|
||||
for (let i = 0; i < number; i++) {
|
||||
b.worm(where)
|
||||
@@ -6349,7 +6331,7 @@ const b = {
|
||||
bullet[me].maxRadius = 30;
|
||||
bullet[me].restitution = 0.3;
|
||||
bullet[me].minDmgSpeed = 0;
|
||||
bullet[me].totalSpores = 8 + 2 * tech.isSporeFreeze + 3 * tech.isSporeZooid
|
||||
bullet[me].totalSpores = 8 + 2 * tech.isSporeFreeze + 4 * tech.isSporeColony
|
||||
bullet[me].stuck = function() {};
|
||||
bullet[me].beforeDmg = function() {};
|
||||
bullet[me].do = function() {
|
||||
@@ -6481,7 +6463,7 @@ const b = {
|
||||
]
|
||||
|
||||
for (len = this.totalSpores; count < len; count++) {
|
||||
if (tech.isSporeZooid && Math.random() < 0.5) {
|
||||
if (tech.isSporeColony && Math.random() < 0.5) {
|
||||
things[Math.floor(Math.random() * things.length)]()
|
||||
} else if (tech.isSporeFlea) {
|
||||
things[2]()
|
||||
|
||||
43
js/index.js
43
js/index.js
@@ -358,7 +358,27 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
||||
document.getElementById("field-" + m.fieldMode).classList.remove("build-field-selected");
|
||||
m.setField(index)
|
||||
who.classList.add("build-field-selected");
|
||||
} else if (m.fieldMode === 4) {
|
||||
const i = 4 //update experiment text
|
||||
simulation.molecularMode++
|
||||
if (simulation.molecularMode > i - 1) simulation.molecularMode = 0
|
||||
m.fieldUpgrades[i].description = m.fieldUpgrades[i].setDescription()
|
||||
document.getElementById(`field-${i}`).innerHTML = `<div class="grid-title"><div class="circle-grid field"></div> ${build.nameLink(m.fieldUpgrades[i].name)}</div> ${m.fieldUpgrades[i].description}`
|
||||
}
|
||||
|
||||
// if (m.fieldMode === 4 && simulation.molecularMode < 3) {
|
||||
// simulation.molecularMode++
|
||||
// m.fieldUpgrades[4].description = m.fieldUpgrades[4].setDescription()
|
||||
// } else {
|
||||
// m.setField((m.fieldMode === m.fieldUpgrades.length - 1) ? 1 : m.fieldMode + 1) //cycle to next field
|
||||
|
||||
// if (m.fieldMode === 4) {
|
||||
// simulation.molecularMode = 0
|
||||
// m.fieldUpgrades[4].description = m.fieldUpgrades[4].setDescription()
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
} else if (type === "tech") {
|
||||
if (tech.tech[index].count < tech.tech[index].maxCount) {
|
||||
// if (!tech.tech[index].isLore && !tech.tech[index].isNonRefundable && !who.classList.contains("build-tech-selected")) who.classList.add("build-tech-selected");
|
||||
@@ -920,7 +940,16 @@ window.addEventListener("keydown", function(event) {
|
||||
if (tech.isPauseSwitchField || simulation.testing) {
|
||||
document.getElementById("pause-field").addEventListener("click", () => {
|
||||
const energy = m.energy
|
||||
m.setField((m.fieldMode === m.fieldUpgrades.length - 1) ? 1 : m.fieldMode + 1) //cycle to next field
|
||||
if (m.fieldMode === 4 && simulation.molecularMode < 3) {
|
||||
simulation.molecularMode++
|
||||
m.fieldUpgrades[4].description = m.fieldUpgrades[4].setDescription()
|
||||
} else {
|
||||
m.setField((m.fieldMode === m.fieldUpgrades.length - 1) ? 1 : m.fieldMode + 1) //cycle to next field
|
||||
if (m.fieldMode === 4) {
|
||||
simulation.molecularMode = 0
|
||||
m.fieldUpgrades[4].description = m.fieldUpgrades[4].setDescription()
|
||||
}
|
||||
}
|
||||
m.energy = energy
|
||||
document.getElementById("pause-field").innerHTML = `<div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[m.fieldMode].name}</div> ${m.fieldUpgrades[m.fieldMode].description}`
|
||||
});
|
||||
@@ -1125,18 +1154,18 @@ document.body.addEventListener("mousemove", (e) => {
|
||||
document.body.addEventListener("mouseup", (e) => {
|
||||
// input.fire = false;
|
||||
// console.log(e)
|
||||
if (e.which === 3) {
|
||||
input.field = false;
|
||||
} else {
|
||||
if (e.button === 0) {
|
||||
input.fire = false;
|
||||
} else if (e.button === 2) {
|
||||
input.field = false;
|
||||
}
|
||||
});
|
||||
|
||||
document.body.addEventListener("mousedown", (e) => {
|
||||
if (e.which === 3) {
|
||||
input.field = true;
|
||||
} else {
|
||||
if (e.button === 0) {
|
||||
input.fire = true;
|
||||
} else if (e.button === 2) {
|
||||
input.field = true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -24,9 +24,9 @@ const level = {
|
||||
// powerUps.research.changeRerolls(100)
|
||||
// tech.tech[297].frequency = 100
|
||||
// b.guns[0].ammo = 10000
|
||||
// m.setField("molecular assembler") //molecular assembler time dilation
|
||||
// b.giveGuns("spores")
|
||||
// tech.giveTech("K-selection")
|
||||
// m.setField("perfect diamagnetism") //molecular assembler time dilation perfect diamagnetism
|
||||
// b.giveGuns("shotgun") //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
|
||||
// tech.giveTech("siphonaptera")
|
||||
// tech.giveTech("fleas")
|
||||
// tech.giveTech("colony")
|
||||
// tech.giveTech("mycelium manufacturing")
|
||||
@@ -36,7 +36,8 @@ const level = {
|
||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "tech");
|
||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "research");
|
||||
// spawn.starter(1900, -500, 200)
|
||||
// for (let i = 0; i < 10; ++i) spawn.hopBullet(1900, -500)
|
||||
// spawn.powerUpBossBaby(1900, -500)
|
||||
// for (let i = 0; i < 10; ++i) spawn.grower(1900, -500)
|
||||
// level.testing(); //not in rotation, used for testing
|
||||
// for (let i = 0; i < 7; ++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");
|
||||
|
||||
@@ -172,7 +172,6 @@ const mobs = {
|
||||
ctx.lineTo(who.vertices[j].x, who.vertices[j].y);
|
||||
}
|
||||
ctx.lineTo(who.vertices[0].x, who.vertices[0].y);
|
||||
ctx.stroke();
|
||||
ctx.fill();
|
||||
},
|
||||
endEffect() {
|
||||
|
||||
@@ -2020,8 +2020,11 @@ const m = {
|
||||
},
|
||||
{
|
||||
name: "molecular assembler",
|
||||
description: `excess <strong class='color-f'>energy</strong> used to build <strong>${simulation.molecularMode === 0 ? "spores" : simulation.molecularMode === 1 ? "missiles" : simulation.molecularMode === 2 ? "ice IX" : "drones"}</strong><br>use <strong class='color-f'>energy</strong> to <strong>deflect</strong> mobs<br>generate <strong>12</strong> <strong class='color-f'>energy</strong> per second`,
|
||||
description: `excess <strong class='color-f'>energy</strong> used to build ${simulation.molecularMode === 0 ? "<strong class='color-p' style='letter-spacing: 2px;'>spores" : simulation.molecularMode === 1 ? "<strong>missiles" : simulation.molecularMode === 2 ? "<strong class='color-s'>ice IX" : "<strong>drones"}</strong><br>use <strong class='color-f'>energy</strong> to <strong>deflect</strong> mobs<br>generate <strong>12</strong> <strong class='color-f'>energy</strong> per second`,
|
||||
// simulation.molecularMode: Math.floor(4 * Math.random()), //0 spores, 1 missile, 2 ice IX, 3 drones
|
||||
setDescription() {
|
||||
return `excess <strong class='color-f'>energy</strong> used to build ${simulation.molecularMode === 0 ? "<strong class='color-p' style='letter-spacing: 2px;'>spores" : simulation.molecularMode === 1 ? "<strong>missiles" : simulation.molecularMode === 2 ? "<strong class='color-s'>ice IX" : "<strong>drones"}</strong><br>use <strong class='color-f'>energy</strong> to <strong>deflect</strong> mobs<br>generate <strong>12</strong> <strong class='color-f'>energy</strong> per second`
|
||||
},
|
||||
effect: () => {
|
||||
m.fieldMeterColor = "#ff0"
|
||||
m.eyeFillColor = m.fieldMeterColor
|
||||
|
||||
@@ -191,7 +191,7 @@ const simulation = {
|
||||
accelScale: null, //set in levels.setDifficulty
|
||||
CDScale: null, //set in levels.setDifficulty
|
||||
isNoPowerUps: false,
|
||||
molecularMode: Math.floor(4 * Math.random()), //0 spores, 1 missile, 2 ice IX, 3 drones
|
||||
molecularMode: Math.floor(4 * Math.random()), //0 spores, 1 missile, 2 ice IX, 3 drones //randomize molecular assembler field type
|
||||
// dropFPS(cap = 40, time = 15) {
|
||||
// simulation.fpsCap = cap
|
||||
// simulation.fpsInterval = 1000 / simulation.fpsCap;
|
||||
@@ -577,7 +577,6 @@ const simulation = {
|
||||
},
|
||||
firstRun: true,
|
||||
splashReturn() {
|
||||
|
||||
document.getElementById("previous-seed").innerHTML = `previous seed: <span style="font-size:80%;">${Math.initialSeed}</span><br>`
|
||||
document.getElementById("seed").value = Math.initialSeed = Math.seed //randomize initial seed
|
||||
|
||||
@@ -1425,15 +1424,16 @@ const simulation = {
|
||||
const dx = Math.max(25, round(simulation.mouseInGame.x) - x)
|
||||
const dy = Math.max(25, round(simulation.mouseInGame.y) - y)
|
||||
|
||||
if (e.which === 2) {
|
||||
if (e.button === 2) {
|
||||
if (level.isProcedural) {
|
||||
simulation.outputMapString(`spawn.randomMob(x+${x}, y+${y}, 0);`);
|
||||
} else {
|
||||
simulation.outputMapString(`spawn.randomMob(${x}, ${y}, 0);`);
|
||||
}
|
||||
|
||||
} else if (e.button === 4) {
|
||||
simulation.outputMapString(`${Math.floor(simulation.constructMouseDownPosition.x)}, ${Math.floor(simulation.constructMouseDownPosition.y)}`);
|
||||
} else if (simulation.mouseInGame.x > simulation.constructMouseDownPosition.x && simulation.mouseInGame.y > simulation.constructMouseDownPosition.y) { //make sure that the width and height are positive
|
||||
if (e.which === 1) { //add map
|
||||
if (e.button === 1) { //add map
|
||||
if (level.isProcedural) {
|
||||
simulation.outputMapString(`spawn.mapRect(x+${x}, y+${y}, ${dx}, ${dy});`);
|
||||
} else {
|
||||
@@ -1449,7 +1449,7 @@ const simulation = {
|
||||
Composite.add(engine.world, map[len]); //add to world
|
||||
simulation.draw.setPaths() //update map graphics
|
||||
|
||||
} else if (e.which === 3) { //add body
|
||||
} else if (e.button === 3) { //add body
|
||||
if (level.isProcedural) {
|
||||
simulation.outputMapString(`spawn.bodyRect(x+${x}, y+${y}, ${dx}, ${dy});`);
|
||||
} else {
|
||||
|
||||
117
js/tech.js
117
js/tech.js
@@ -221,7 +221,7 @@ const tech = {
|
||||
}
|
||||
},
|
||||
hasExplosiveDamageCheck() {
|
||||
return tech.haveGunCheck("missiles") || simulation.molecularMode === 1 || tech.missileBotCount > 0 || tech.isBoomBotUpgrade || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb)
|
||||
return tech.haveGunCheck("missiles") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || tech.missileBotCount > 0 || tech.isBoomBotUpgrade || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb)
|
||||
},
|
||||
damageFromTech() {
|
||||
let dmg = 1 //m.fieldDamage
|
||||
@@ -884,7 +884,6 @@ const tech = {
|
||||
name: "anti-shear topology",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Topology' class="link">anti-shear topology</a>`,
|
||||
description: "<strong>+30%</strong> projectile <strong>duration</strong>", //<br><em style = 'font-size: 83%'>drone spore worm flea missile foam wave neutron ice</em>",
|
||||
isGunTech: true,
|
||||
maxCount: 3,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -3087,26 +3086,11 @@ const tech = {
|
||||
},
|
||||
remove() {
|
||||
tech.isDeterminism = false;
|
||||
// if (this.count > 0) {
|
||||
// for (let i = 0; i < 5; i++) {
|
||||
// const numberRemoved = tech.removeTech()
|
||||
// console.log(numberRemoved)
|
||||
// if (numberRemoved === 0) { //if the player didn't remove a power up then remove 1 tech for the map
|
||||
// for (let j = powerUp.length - 1; j > -1; j--) {
|
||||
// if (powerUp[j].name === "tech") {
|
||||
// Matter.Composite.remove(engine.world, powerUp[j]);
|
||||
// powerUp.splice(j, 1);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "superdeterminism",
|
||||
description: `spawn <strong>5</strong> <strong class='color-m'>tech</strong><br>you have <strong>no cancel</strong> and ${powerUps.orb.research(1)}, no longer <strong>spawn</strong>`,
|
||||
description: `spawn <strong>5</strong> <strong class='color-m'>tech</strong><br>you have <strong>no cancel</strong> and ${powerUps.orb.research(1)} no longer <strong>spawn</strong>`,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 4,
|
||||
@@ -3124,10 +3108,6 @@ const tech = {
|
||||
},
|
||||
remove() {
|
||||
tech.isSuperDeterminism = false;
|
||||
// tech.isSuperDeterminism = false;
|
||||
// if (this.count) {
|
||||
// for (let i = 0; i < 5; i++) tech.removeTech()
|
||||
// }
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -3156,22 +3136,6 @@ const tech = {
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
// for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||
// if (tech.tech[i].isFieldTech) tech.tech[i].frequency *= 3
|
||||
// }
|
||||
// },
|
||||
// remove() {
|
||||
// // powerUps.research.changeRerolls(-6)
|
||||
// // if (this.count > 1) {
|
||||
// // for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||
// // if (tech.tech[i].isFieldTech) tech.tech[i].frequency /= 3
|
||||
// // }
|
||||
// // }
|
||||
|
||||
|
||||
|
||||
{
|
||||
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`,
|
||||
@@ -3211,10 +3175,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "technical debt", // overengineering
|
||||
// description: `increase <strong class='color-d'>damage</strong> by <strong>300%</strong> minus <strong>10%</strong> for <strong class='color-m'>tech</strong> you have learned(${4 - 0.1 * tech.totalCount})`,
|
||||
// description: `increase <strong class='color-d'>damage</strong> by <strong>300%</strong>, but reduce <strong class='color-d'>damage</strong><br>by <strong>10%</strong> for <strong class='color-m'>tech</strong> you have learned`,
|
||||
descriptionFunction() {
|
||||
// return `increase <strong class='color-d'>damage</strong> by <strong>300%</strong> minus <strong>15%</strong><br>for each <strong class='color-m'>tech</strong> you have learned <em>(${Math.floor(100*(4 - 0.14 * tech.totalCount))-100}%)</em>`
|
||||
return `<strong>+300%</strong> <strong class='color-d'>damage</strong> <strong>–15%</strong> <strong class='color-d'>damage</strong><br>for each <strong class='color-m'>tech</strong> you have learned <em>(${Math.floor(100*(Math.max(41 / (tech.totalCount + 21), 4 - 0.15 * tech.totalCount) ))-100}%)</em>`
|
||||
},
|
||||
maxCount: 1,
|
||||
@@ -3777,7 +3738,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return ((tech.haveGunCheck("nail gun") && !tech.nailInstantFireRate && !tech.nailRecoil) || (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isFoamShot && !tech.isSporeWorm)) && !tech.isRivets && !tech.isIncendiary && !tech.isIceCrystals && !tech.isIceShot
|
||||
return ((tech.haveGunCheck("nail gun") && !tech.nailInstantFireRate && !tech.nailRecoil) || (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea)) && !tech.isRivets && !tech.isIncendiary && !tech.isIceCrystals && !tech.isIceShot
|
||||
},
|
||||
requires: "nail gun, shotgun, not ice crystal, rivets, rotary cannon, or pneumatic, incendiary, nail-shot, rivets, foam-shot, worm-shot, ice-shot",
|
||||
effect() {
|
||||
@@ -3816,7 +3777,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return ((tech.haveGunCheck("nail gun") && !tech.nailInstantFireRate) || (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isFoamShot && !tech.isSporeWorm)) && !tech.isNeedles && !tech.isIceCrystals && !tech.isIceShot
|
||||
return ((tech.haveGunCheck("nail gun") && !tech.nailInstantFireRate) || (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea)) && !tech.isNeedles && !tech.isIceCrystals && !tech.isIceShot
|
||||
},
|
||||
requires: "nail gun, shotgun, not ice crystal, needles, or pneumatic actuator",
|
||||
effect() {
|
||||
@@ -4140,7 +4101,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isSporeWorm && !tech.isNeedles
|
||||
return tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles
|
||||
},
|
||||
requires: "shotgun, not incendiary, rivets, foam-shot, worm-shot, ice-shot, needles",
|
||||
effect() {
|
||||
@@ -4160,7 +4121,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isSporeWorm && !tech.isNeedles
|
||||
return tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles
|
||||
},
|
||||
requires: "shotgun, not incendiary, nail-shot, rivet, worm-shot, ice-shot, needle",
|
||||
effect() {
|
||||
@@ -4180,7 +4141,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIncendiary && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isNeedles
|
||||
return tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIncendiary && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles
|
||||
},
|
||||
requires: "shotgun, not incendiary, nail-shot, rivet, foam-shot, worm-shot",
|
||||
effect() {
|
||||
@@ -4199,7 +4160,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1
|
||||
return tech.isIceCrystals || tech.isSporeFreeze || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 2) || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1
|
||||
},
|
||||
requires: "a freeze effect",
|
||||
effect() {
|
||||
@@ -4218,7 +4179,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1
|
||||
return tech.isIceCrystals || tech.isSporeFreeze || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 2) || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1
|
||||
},
|
||||
requires: "a freeze effect",
|
||||
effect() {
|
||||
@@ -4237,7 +4198,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return (tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1) && !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.nailsDeathMob
|
||||
return (tech.isIceCrystals || tech.isSporeFreeze || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 2) || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1) && !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.nailsDeathMob
|
||||
},
|
||||
requires: "a localized freeze effect, no other mob death tech",
|
||||
effect() {
|
||||
@@ -4256,7 +4217,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return simulation.molecularMode === 2 || tech.relayIce || tech.isNeedleIce || tech.blockingIce || tech.iceIXOnDeath || tech.isIceShot
|
||||
return (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 2) || tech.relayIce || tech.isNeedleIce || tech.blockingIce || tech.iceIXOnDeath || tech.isIceShot
|
||||
},
|
||||
requires: "ice IX",
|
||||
effect() {
|
||||
@@ -4275,7 +4236,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot
|
||||
return tech.isIceCrystals || tech.isSporeFreeze || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 2) || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot
|
||||
},
|
||||
requires: "a localized freeze effect",
|
||||
effect() {
|
||||
@@ -4294,7 +4255,7 @@ const tech = {
|
||||
frequency: 1,
|
||||
frequencyDefault: 1,
|
||||
allowed() {
|
||||
return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isNeedles) || (tech.haveGunCheck("super balls") && !tech.isFoamBall) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
|
||||
return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isSporeFlea && !tech.isNeedles) || (tech.haveGunCheck("super balls") && !tech.isFoamBall) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport)
|
||||
},
|
||||
requires: "shotgun, super balls, rivets, drones, not irradiated drones, burst drones, polyurethane",
|
||||
effect() {
|
||||
@@ -4577,7 +4538,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return (tech.haveGunCheck("missiles") && tech.missileFireCD === 45) || simulation.molecularMode === 1 || tech.missileBotCount
|
||||
return (tech.haveGunCheck("missiles") && tech.missileFireCD === 45) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || tech.missileBotCount
|
||||
},
|
||||
requires: "missiles",
|
||||
effect() {
|
||||
@@ -4596,9 +4557,9 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return (tech.haveGunCheck("missiles") || simulation.molecularMode === 1) && tech.isMissileBig
|
||||
return (tech.haveGunCheck("missiles") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1)) && tech.isMissileBig
|
||||
},
|
||||
requires: "missiles, cruse missile",
|
||||
requires: "missiles, cruise missile",
|
||||
effect() {
|
||||
tech.isMissileBiggest = true
|
||||
},
|
||||
@@ -4683,7 +4644,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.explosiveRadius === 1 && !tech.isSmallExplosion && !tech.isBlockExplode && !tech.fragments && (tech.haveGunCheck("missiles") || tech.missileBotCount || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || simulation.molecularMode === 1 || tech.isBoomBotUpgrade || tech.isTokamak)
|
||||
return tech.explosiveRadius === 1 && !tech.isSmallExplosion && !tech.isBlockExplode && !tech.fragments && (tech.haveGunCheck("missiles") || tech.missileBotCount || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || tech.isBoomBotUpgrade || tech.isTokamak)
|
||||
},
|
||||
requires: "an explosive damage source, not ammonium nitrate, nitroglycerin, chain reaction, fragmentation",
|
||||
effect: () => {
|
||||
@@ -4702,7 +4663,7 @@ const tech = {
|
||||
frequency: 1,
|
||||
frequencyDefault: 1,
|
||||
allowed() {
|
||||
return !tech.isExplodeRadio && ((tech.haveGunCheck("harpoon") && !tech.isFoamBall) || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("missiles") || simulation.molecularMode === 1 || tech.missileBotCount || tech.isRivets || tech.blockDamage > 0.075)
|
||||
return !tech.isExplodeRadio && ((tech.haveGunCheck("harpoon") && !tech.isFoamBall) || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("missiles") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || tech.missileBotCount || tech.isRivets || tech.blockDamage > 0.075)
|
||||
},
|
||||
requires: "grenades, missiles, rivets, harpoon, or mass driver, not iridium-192, not polyurethane foam",
|
||||
effect() {
|
||||
@@ -4798,7 +4759,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return !tech.isImmuneExplosion && (build.isExperimentSelection || powerUps.research.count > 3) && (tech.haveGunCheck("missiles") || simulation.molecularMode === 1 || tech.missileBotCount > 0 || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb))
|
||||
return !tech.isImmuneExplosion && (build.isExperimentSelection || powerUps.research.count > 3) && (tech.haveGunCheck("missiles") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || tech.missileBotCount > 0 || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb))
|
||||
},
|
||||
requires: "an explosive damage source, not electric reactive armor",
|
||||
effect: () => {
|
||||
@@ -4841,7 +4802,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.haveGunCheck("missiles") || tech.missileBotCount || tech.haveGunCheck("grenades") || simulation.molecularMode === 1
|
||||
return tech.haveGunCheck("missiles") || tech.missileBotCount || tech.haveGunCheck("grenades")
|
||||
},
|
||||
requires: "missiles, grenades",
|
||||
effect() {
|
||||
@@ -5154,7 +5115,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "colony",
|
||||
description: "<strong>+38%</strong> <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> discharge<br><strong>38%</strong> chance to discharge something different",
|
||||
description: "<strong>+50%</strong> <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> discharge<br><strong>40%</strong> chance to discharge something different",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Colony_(biology)' class="link">colony</a>`,
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
@@ -5166,10 +5127,10 @@ const tech = {
|
||||
},
|
||||
requires: "spores",
|
||||
effect() {
|
||||
tech.isSporeZooid = true
|
||||
tech.isSporeColony = true
|
||||
},
|
||||
remove() {
|
||||
tech.isSporeZooid = false
|
||||
tech.isSporeColony = false
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -5182,7 +5143,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0 || tech.isSporeWorm || tech.isSporeFlea
|
||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 0) || tech.isSporeWorm || tech.isSporeFlea
|
||||
},
|
||||
requires: "spores",
|
||||
effect() {
|
||||
@@ -5202,7 +5163,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0 || tech.isSporeWorm || tech.isSporeFlea
|
||||
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 0) || tech.isSporeWorm || tech.isSporeFlea
|
||||
},
|
||||
requires: "spores",
|
||||
effect() {
|
||||
@@ -5222,7 +5183,7 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0) && !tech.isEnergyHealth || tech.isSporeWorm || tech.isSporeFlea
|
||||
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 0)) && !tech.isEnergyHealth || tech.isSporeWorm || tech.isSporeFlea
|
||||
},
|
||||
requires: "spores, not mass-energy",
|
||||
effect() {
|
||||
@@ -5234,14 +5195,14 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "siphonaptera",
|
||||
description: "<strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> hatch <strong class='color-p' style='letter-spacing: -0.8px;'>fleas</strong>", //<br><strong class='color-p' style='letter-spacing: 2px;'>spore</strong> <strong class='color-m'>tech</strong> applies to <strong class='color-p' style='letter-spacing: -0.8px;'>fleas</strong>
|
||||
description: "<strong>shotgun</strong> and <strong class='color-p' style='letter-spacing: 2px;'>sporangium</strong> hatch <strong class='color-p' style='letter-spacing: -0.8px;'>fleas</strong>", //<br><strong class='color-p' style='letter-spacing: 2px;'>spore</strong> <strong class='color-m'>tech</strong> applies to <strong class='color-p' style='letter-spacing: -0.8px;'>fleas</strong>
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0) && !tech.isSporeWorm
|
||||
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 0) || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot)) && !tech.isSporeWorm
|
||||
},
|
||||
requires: "spores, not worms",
|
||||
effect() {
|
||||
@@ -5261,7 +5222,7 @@ const tech = {
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0 || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot)) && !tech.isSporeFlea
|
||||
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 0) || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot)) && !tech.isSporeFlea
|
||||
},
|
||||
requires: "spores, not fleas",
|
||||
effect() {
|
||||
@@ -5582,7 +5543,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "uncertainty principle",
|
||||
description: "<strong>foam</strong> and <strong>wave</strong> positions are erratic<br><strong>+47%</strong> <strong>foam</strong> and <strong>wave</strong> <strong class='color-d'>damage</strong>",
|
||||
description: "<strong>foam</strong> and <strong>wave</strong> positions are erratic<br><strong>+53%</strong> <strong>foam</strong> and <strong>wave</strong> <strong class='color-d'>damage</strong>",
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -5620,7 +5581,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "aerogel",
|
||||
description: "<strong>–50%</strong> <strong>foam</strong> duration and <strong>foam</strong> bubbles <strong>float</strong><br><strong>+150%</strong> <strong>foam</strong> <strong class='color-d'>damage</strong>",
|
||||
description: "<strong>–50%</strong> <strong>foam</strong> duration and <strong>foam</strong> bubbles <strong>float</strong><br><strong>+180%</strong> <strong>foam</strong> <strong class='color-d'>damage</strong>",
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -5641,7 +5602,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "surface tension",
|
||||
description: "<strong>+41%</strong> <strong>foam</strong> <strong class='color-d'>damage</strong>",
|
||||
description: "<strong>+43%</strong> <strong>foam</strong> <strong class='color-d'>damage</strong>",
|
||||
isGunTech: true,
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
@@ -5652,7 +5613,7 @@ const tech = {
|
||||
},
|
||||
requires: "foam",
|
||||
effect() {
|
||||
tech.foamDamage += 0.011 * 0.41
|
||||
tech.foamDamage += 0.011 * 0.43
|
||||
},
|
||||
remove() {
|
||||
tech.foamDamage = 0.011;
|
||||
@@ -6048,7 +6009,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "laser diode",
|
||||
description: "<strong>+33%</strong> <strong class='color-laser'>laser</strong> <strong class='color-f'>energy</strong> efficiency",
|
||||
description: "<strong>+40%</strong> <strong class='color-laser'>laser</strong> <strong class='color-f'>energy</strong> efficiency",
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -6059,7 +6020,7 @@ const tech = {
|
||||
},
|
||||
requires: "laser, not free-electron",
|
||||
effect() {
|
||||
tech.isLaserDiode = 0.66; //100%-37%
|
||||
tech.isLaserDiode = 0.6; //100%-40%
|
||||
tech.laserColor = "rgb(0, 11, 255)"
|
||||
tech.laserColorAlpha = "rgba(0, 11, 255,0.5)"
|
||||
},
|
||||
@@ -6071,7 +6032,7 @@ const tech = {
|
||||
},
|
||||
{
|
||||
name: "free-electron laser",
|
||||
description: "<strong>+200%</strong> <strong class='color-laser'>laser</strong> <strong class='color-d'>damage</strong> <br><strong>–250%</strong> <strong class='color-laser'>laser</strong> <strong class='color-f'>energy</strong> efficiency",
|
||||
description: "<strong>+225%</strong> <strong class='color-laser'>laser</strong> <strong class='color-d'>damage</strong> <br><strong>–250%</strong> <strong class='color-laser'>laser</strong> <strong class='color-f'>energy</strong> efficiency",
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -6083,7 +6044,7 @@ const tech = {
|
||||
requires: "laser, not pulse, diodes",
|
||||
effect() {
|
||||
tech.laserFieldDrain = 0.0063 //base is 0.002
|
||||
tech.laserDamage = 0.48; //base is 0.16
|
||||
tech.laserDamage = 0.52; //base is 0.16, 0.16 * (1 + 2.25)
|
||||
tech.laserColor = "#83f"
|
||||
tech.laserColorAlpha = "rgba(136, 51, 255,0.5)"
|
||||
},
|
||||
@@ -7348,7 +7309,7 @@ const tech = {
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (m.fieldUpgrades[m.fieldMode].name === "pilot wave" || m.fieldUpgrades[m.fieldMode].name === "negative mass" || m.fieldUpgrades[m.fieldMode].name === "time dilation" || m.fieldUpgrades[m.fieldMode].name === "wormhole") && (build.isExperimentSelection || powerUps.research.count > 3)
|
||||
return (m.fieldUpgrades[m.fieldMode].name === "pilot wave" || m.fieldUpgrades[m.fieldMode].name === "negative mass" || m.fieldUpgrades[m.fieldMode].name === "time dilation" || m.fieldUpgrades[m.fieldMode].name === "wormhole") && (build.isExperimentSelection || powerUps.research.count > 6)
|
||||
},
|
||||
requires: "wormhole, time dilation, negative mass, pilot wave",
|
||||
effect() {
|
||||
@@ -10388,5 +10349,5 @@ const tech = {
|
||||
isMicroTransactions: null,
|
||||
isLaserLens: null,
|
||||
laserCrit: null,
|
||||
isSporeZooid: null,
|
||||
isSporeColony: null,
|
||||
}
|
||||
Reference in New Issue
Block a user