missile-bot

missile-bot tech now removes your missile gun, but missile bot fires much faster
  missile-bot now benefits from all missile tech

rail gun has a bit less ammo and fires a bit faster
  in between how it is was in the last two patches
rail gun gets less energy from half-wave rectifier
This commit is contained in:
landgreen
2021-08-07 06:42:48 -07:00
parent aea9276cb2
commit c3b96f749e
8 changed files with 125 additions and 111 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -1117,6 +1117,7 @@ const b = {
}
},
missile(where, angle, speed, size = 1) {
if (tech.missileSize) size *= 1.5
const me = bullet.length;
bullet[me] = Bodies.rectangle(where.x, where.y, 30 * size, 4 * size, {
angle: angle,
@@ -1131,7 +1132,7 @@ const b = {
},
minDmgSpeed: 10,
lookFrequency: Math.floor(10 + Math.random() * 3),
explodeRad: 180 + 60 * Math.random(),
explodeRad: 180 * (tech.missileSize ? 1.5 : 1) + 60 * Math.random(),
density: 0.02, //0.001 is normal
beforeDmg() {
Matter.Body.setDensity(this, 0.0001); //reduce density to normal
@@ -3106,7 +3107,7 @@ const b = {
restitution: 0.7,
dmg: 0, // 0.14 //damage done in addition to the damage from momentum
minDmgSpeed: 2,
lookFrequency: 70,
lookFrequency: 27 + Math.ceil(6 * Math.random()),
cd: 0,
delay: 80,
range: 70 + 3 * b.totalBots(),
@@ -3135,7 +3136,25 @@ const b = {
// Matter.Body.setAngularVelocity(this, 0.025)
this.torque += this.inertia * 0.00004 * (Math.round(Math.random()) ? 1 : -1)
this.force = Vector.mult(Vector.normalise(Vector.sub(this.position, mob[i].position)), this.mass * 0.02)
b.missile(this.position, angle, -8, 0.7 * (tech.missileSize ? 1.5 : 1))
if (tech.missileCount > 1) {
const countReduction = Math.pow(0.93, tech.missileCount)
const size = 0.9 * Math.sqrt(countReduction)
const direction = {
x: Math.cos(angle),
y: Math.sin(angle)
}
const push = Vector.mult(Vector.perp(direction), 0.015 * countReduction / Math.sqrt(tech.missileCount))
for (let i = 0; i < tech.missileCount; i++) {
setTimeout(() => {
b.missile(this.position, angle, -8, size)
bullet[bullet.length - 1].force.x += push.x * (i - (tech.missileCount - 1) / 2);
bullet[bullet.length - 1].force.y += push.y * (i - (tech.missileCount - 1) / 2);
}, 40 * tech.missileCount * Math.random());
}
} else {
b.missile(this.position, angle, -8, 0.9)
}
break;
}
}
@@ -4466,7 +4485,7 @@ const b = {
x: m.pos.x,
y: m.pos.y - 40
}
b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5) * Math.sqrt(tech.missileCount), -2, Math.sqrt(countReduction))
b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5) * Math.sqrt(tech.missileCount), -2, Math.sqrt(countReduction) * (tech.missileSize ? 1.5 : 1))
bullet[bullet.length - 1].force.x += 0.025 * countReduction * (i - (tech.missileCount - 1) / 2);
}, 20 * tech.missileCount * Math.random());
}
@@ -4846,7 +4865,7 @@ const b = {
name: "rail gun",
description: "use <strong class='color-f'>energy</strong> to launch a high-speed <strong>dense</strong> rod<br><strong>hold</strong> left mouse to charge, <strong>release</strong> to fire",
ammo: 0,
ammoPack: 5,
ammoPack: 4.1,
have: false,
do() {},
fire() {
@@ -4898,7 +4917,7 @@ const b = {
if (tech.isCapacitor) {
if ((m.energy > 0.16 || tech.isRailEnergyGain)) { //&& m.immuneCycle < m.cycle
m.energy += 0.16 * (tech.isRailEnergyGain ? 4.5 : -1)
m.energy += 0.16 * (tech.isRailEnergyGain ? 2.5 : -1)
m.fireCDcycle = m.cycle + Math.floor(40 * b.fireCDscale);
const me = bullet.length;
bullet[me] = Bodies.rectangle(m.pos.x + 50 * Math.cos(m.angle), m.pos.y + 50 * Math.sin(m.angle), 60, 14, {
@@ -5070,13 +5089,9 @@ const b = {
m.fireCDcycle = Infinity //can't fire until mouse is released
const previousCharge = this.charge
let smoothRate = (m.crouch ? 0.98 : 0.99) * (0.98 + 0.02 * b.fireCDscale) //small b.fireCDscale = faster shots, b.fireCDscale=1 = normal shot, big b.fireCDscale = slower chot
this.charge = this.charge * smoothRate + 1 * (1 - smoothRate)
if (tech.isRailEnergyGain) {
m.energy += (this.charge - previousCharge) * 1.5 //energy drain is proportional to charge gained, but doesn't stop normal m.fieldRegen
} else {
m.energy -= (this.charge - previousCharge) * 0.33 //energy drain is proportional to charge gained, but doesn't stop normal m.fieldRegen
}
let smoothRate = (m.crouch ? 0.98 : 0.985) * (0.98 + 0.02 * b.fireCDscale) //small b.fireCDscale = faster shots, b.fireCDscale=1 = normal shot, big b.fireCDscale = slower chot
this.charge = this.charge * smoothRate + 1 - smoothRate
m.energy -= (this.charge - previousCharge) * (tech.isRailEnergyGain ? 1 : 0.33) //energy drain is proportional to charge gained, but doesn't stop normal m.fieldRegen
//draw targeting
let best;
let range = 3000

View File

@@ -18,10 +18,12 @@ const level = {
// tech.isFieldFree = true
// m.setField("time dilation")
// b.giveGuns("rail gun")
// tech.missileBotCount++;
// b.missileBot();
// tech.giveTech("half-wave rectifier")
// b.giveGuns("wave beam")
// b.giveGuns("nail gun")
// tech.giveTech("Lenz's law")
// for (let i = 0; i < 3; i++) tech.giveTech("packet length")
// for (let i = 0; i < 9; i++) tech.giveTech("MIRV")
// for (let i = 0; i < 4; i++) tech.giveTech()
level.intro(); //starting level
@@ -2286,8 +2288,8 @@ const level = {
// spawn.streamBoss(1600, -500)
// spawn.powerUpBoss(1600, -500)
// spawn.cellBossCulture(1600, -500)
spawn.shieldingBoss(1600, -500)
// spawn.grenadier(1200, -500)
// spawn.laserTargetingBoss(1600, -500)
spawn.grenadierBoss(1200, -500)
// spawn.shield(mob[mob.length - 1], 1800, -120, 1);
// spawn.nodeGroup(1200, -500, "grenadier")

View File

@@ -1041,10 +1041,11 @@ const mobs = {
if (tech.isFarAwayDmg) dmg *= 1 + Math.sqrt(Math.max(500, Math.min(3000, this.distanceToPlayer())) - 500) * 0.0067 //up to 50% dmg at max range of 3500
// if (this.shield) dmg *= 0.075
// if (this.isBoss) dmg *= 0.25
if (this.damageReduction < 1) { //only used for bosses with this.armor() or shields
this.damageReductionGoal += dmg * this.damageReductionScale //reduce damageReductionGoal
dmg *= this.damageReduction
}
// if (this.damageReduction < 1) { //only used for bosses with this.armor() or shields
// this.damageReductionGoal += dmg * this.damageReductionScale //reduce damageReductionGoal
// dmg *= this.damageReduction
// }
dmg *= this.damageReduction
//energy and heal drain should be calculated after damage boosts
if (tech.energySiphon && dmg !== Infinity && this.isDropPowerUp && m.immuneCycle < m.cycle) m.energy += Math.min(this.health, dmg) * tech.energySiphon
if (tech.healthDrain && dmg !== Infinity && this.isDropPowerUp) {
@@ -1069,19 +1070,32 @@ const mobs = {
// to use declare custom method in mob spawn
},
damageReduction: 1,
damageReductionGoal: 0.001, //must add this to boss set up: me.damageReduction = me.damageReductionGoal
damageReductionScale: 0.004, //for bosses in this.onDamage determines the impact of dmg on damageReductionGoal
armor() { //slowly reduce damage reduction, for bosses
if (this.seePlayer.recall) {
if (this.damageReductionGoal > 0.24) {
this.damageReductionGoal = 0.25
} else {
this.damageReductionGoal = this.damageReductionGoal * 0.999 + 0.001 * 0.25 //smooth the goal towards 0.25 damage reduction
}
this.damageReduction = this.damageReduction * 0.995 + 0.005 * this.damageReductionGoal //smooth damage reduction towards the goal
// console.log(`damageReduction = ${this.damageReduction.toFixed(4)}`, `damageReductionGoal = ${this.damageReductionGoal.toFixed(4)}`)
}
},
// damageReductionGoal: 0.001, //must add this to boss set up: me.damageReduction = 0.25
// damageReductionScale: 0.004, //for bosses in this.onDamage determines the impact of dmg on damageReductionGoal
// armor() { //slowly reduce damage reduction, for bosses
// if (this.seePlayer.recall) {
// if (this.damageReductionGoal > 0.24) {
// this.damageReductionGoal = 0.25
// } else {
// this.damageReductionGoal = this.damageReductionGoal * 0.999 + 0.001 * 0.25 //smooth the goal towards 0.25 damage reduction
// }
// this.damageReduction = this.damageReduction * 0.995 + 0.005 * this.damageReductionGoal //smooth damage reduction towards the goal
// // console.log(`damageReduction = ${this.damageReduction.toFixed(4)}`, `damageReductionGoal = ${this.damageReductionGoal.toFixed(4)}`)
// }
// //draw armor
// //draw body
// ctx.beginPath();
// const vertices = this.vertices;
// ctx.moveTo(vertices[0].x, vertices[0].y);
// for (let j = 1, len = vertices.length; j < len; ++j) {
// ctx.lineTo(vertices[j].x, vertices[j].y);
// }
// ctx.lineTo(vertices[0].x, vertices[0].y);
// console.log(this.damageReduction, this.damageReductionGoal)
// ctx.lineWidth = 3 //60 * (0.25 - this.damageReductionGoal)
// ctx.strokeStyle = `rgba(255,255,255,${4.1*(0.25 - this.damageReductionGoal)})` //"rgba(150,150,225,0.5)";
// ctx.stroke();
// },
leaveBody: true,
isDropPowerUp: true,
death() {

View File

@@ -1123,7 +1123,7 @@ const m = {
m.fieldCDcycle = m.cycle + 15;
m.isHolding = false;
if (tech.isBlockExplosion && m.throwCharge > 5) { //remove the block body and pulse in the direction you are facing
if (tech.isTokamak && m.throwCharge > 5) { //remove the block body and pulse in the direction you are facing
//m.throwCharge > 5 seems to be when the field full colors in a block you are holding
m.throwCharge = 0;
m.throwCycle = m.cycle + 180 //used to detect if a block was thrown in the last 3 seconds

View File

@@ -754,9 +754,9 @@ const spawn = {
me.onDamage = function(dmg) {
if (Math.random() < 0.33 * dmg * Math.sqrt(this.mass) && this.health > dmg) this.split();
}
me.damageReduction = 0.25
me.damageReduction = 0.2 //me.damageReductionGoal
me.do = function() {
// this.armor();
// // this.armor();
if (!m.isBodiesAsleep) {
this.seePlayerByDistOrLOS();
this.checkStatus();
@@ -1488,12 +1488,12 @@ const spawn = {
let targets = [] //track who is in the node boss, for shields
mobs.spawn(x, y, 6, radius, "#b386e8");
let me = mob[mob.length - 1];
Matter.Body.setDensity(me, 0.0035); //extra dense //normal is 0.001 //makes effective life much larger
Matter.Body.setDensity(me, 0.0032); //extra dense //normal is 0.001 //makes effective life much larger
me.isBoss = true;
targets.push(me.id) //add to shield protection
me.friction = 0;
me.frictionAir = 0.0065;
me.frictionAir = 0.0067;
me.lookTorque = 0.0000008; //controls spin while looking for player
me.g = 0.0002; //required if using 'gravity'
me.seePlayerFreq = Math.round((30 + 20 * Math.random()) * simulation.lookFreqScale);
@@ -1679,7 +1679,7 @@ const spawn = {
}
mobs.spawn(x, y, 0, radius, "transparent");
let me = mob[mob.length - 1];
Matter.Body.setDensity(me, 0.20); //extra dense //normal is 0.001
Matter.Body.setDensity(me, 0.21); //extra dense //normal is 0.001
me.laserRange = 300;
me.seeAtDistance2 = 2000000;
me.isBoss = true;
@@ -1693,7 +1693,7 @@ const spawn = {
me.onDeath = function() {
powerUps.spawnBossPowerUp(this.position.x, this.position.y)
};
me.damageReduction = 0.25
me.damageReduction = 0.25 // me.damageReductionGoal
me.awake = function() {
// this.armor();
this.checkStatus();
@@ -3138,7 +3138,7 @@ const spawn = {
}
};
},
launcherBoss(x, y, radius = 85) {
launcherBoss(x, y, radius = 90) {
mobs.spawn(x, y, 6, radius, "rgb(150,150,255)");
let me = mob[mob.length - 1];
me.isBoss = true;
@@ -3153,7 +3153,7 @@ const spawn = {
spawn.shield(me, x, y, 1);
spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random())
Matter.Body.setDensity(me, 0.002 + 0.0002 * Math.sqrt(simulation.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger
Matter.Body.setDensity(me, 0.0022 + 0.0002 * Math.sqrt(simulation.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger
me.onDeath = function() {
powerUps.spawnBossPowerUp(this.position.x, this.position.y)
// this.vertices = Matter.Vertices.hull(Matter.Vertices.clockwiseSort(this.vertices)) //helps collisions functions work better after vertex have been changed
@@ -3925,7 +3925,7 @@ const spawn = {
let me = mob[mob.length - 1];
me.isBoss = true;
Matter.Body.setDensity(me, 0.002 + 0.00025 * Math.sqrt(simulation.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger
Matter.Body.setDensity(me, 0.0017 + 0.0002 * Math.sqrt(simulation.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger
me.stroke = "transparent"; //used for drawGhost
me.seeAtDistance2 = 2000000;

View File

@@ -162,6 +162,9 @@
return b.inventory.length > 0 && b.guns[b.activeGun].name === name
}
},
hasExplosiveDamageCheck() {
return tech.haveGunCheck("missiles") || tech.isMissileField || tech.missileBotCount > 0 || tech.boomBotCount > 1 || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb)
},
damageFromTech() {
let dmg = 1 //m.fieldDamage
if (tech.isCloakingDamage) dmg *= 1.35
@@ -658,24 +661,7 @@
b.setFireCD();
}
},
// if (tech.isOneBullet && bullet.length - b.totalBots() === 1) dmg *= 2 //3 / Math.sqrt(bullet.length + 1) //testing this tech out, seems to have too many negatives though ...
// {
// name: "1-body problem",
// description: "if there is exactly <strong>1</strong> active <strong>bullet</strong><br>increase <strong class='color-d'>damage</strong> by <strong>100%</strong>",
// maxCount: 1,
// count: 0,
// frequency: 2,
// allowed() {
// return !tech.foamBotCount && !tech.nailBotCount && m.fieldUpgrades[m.fieldMode].name !== "nano-scale manufacturing" && ((tech.haveGunCheck("missiles") && tech.missileCount === 1) || tech.haveGunCheck("rail gun") || tech.haveGunCheck("grenades") || tech.isRivets || tech.isSlugShot || tech.oneSuperBall)
// },
// requires: "missiles, rail gun, grenades, rivets, slugs, super ball, no foam/nail bots, nano-scale",
// effect() {
// tech.isOneBullet = true
// },
// remove() {
// tech.isOneBullet = false
// }
// },
{
name: "fracture analysis",
description: "bullet impacts do <strong>400%</strong> <strong class='color-d'>damage</strong><br>to <strong>stunned</strong> mobs",
@@ -775,7 +761,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return !tech.isBlockExplode && tech.explosiveRadius === 1 && !tech.isSmallExplosion && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1 || tech.isBlockExplosion)
return tech.explosiveRadius === 1 && !tech.isSmallExplosion && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1 || tech.isTokamak)
},
requires: "an explosive damage source, not ammonium nitrate or nitroglycerin",
effect: () => {
@@ -793,7 +779,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return !tech.isExplodeRadio && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1 || tech.isBlockExplosion)
return !tech.isExplodeRadio && tech.hasExplosiveDamageCheck()
},
requires: "an explosive damage source, not iridium-192",
effect: () => {
@@ -811,7 +797,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return !tech.isExplodeRadio && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1 || tech.isBlockExplosion)
return !tech.isExplodeRadio && tech.hasExplosiveDamageCheck()
},
requires: "an explosive damage source, not iridium-192",
effect: () => {
@@ -829,9 +815,9 @@
frequency: 2,
isBadRandomOption: true,
allowed() {
return !tech.isRewindGrenade && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || tech.isMissileField || tech.isBlockExplosion)
return tech.hasExplosiveDamageCheck()
},
requires: "an explosive damage source, not causality bombs",
requires: "an explosive damage source",
effect: () => {
tech.isExplosionHarm = true;
},
@@ -848,7 +834,7 @@
frequency: 1,
frequencyDefault: 1,
allowed() {
return !tech.isExplodeRadio && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1 || tech.isBlockExplosion)
return !tech.isExplodeRadio && tech.hasExplosiveDamageCheck()
},
requires: "an explosive damage source, not iridium-192",
effect() {
@@ -867,7 +853,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return !tech.isExplodeRadio && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isMissileField || tech.isExplodeMob || tech.isPulseLaser || tech.isBlockExplosion)
return !tech.isExplodeRadio && tech.hasExplosiveDamageCheck()
},
requires: "an explosive damage source, not iridium-192",
effect: () => {
@@ -903,7 +889,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("missiles") || tech.haveGunCheck("rail gun") || (tech.haveGunCheck("shotgun") && tech.isSlugShot) || tech.throwChargeRate > 1
return (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("missiles") || tech.missileBotCount || tech.haveGunCheck("rail gun") || (tech.haveGunCheck("shotgun") && tech.isSlugShot) || tech.throwChargeRate > 1
},
requires: "grenades, missiles, rail gun, shotgun slugs, or mass driver",
effect() {
@@ -915,15 +901,15 @@
},
{
name: "thermal runaway",
description: "mobs <strong class='color-e'>explode</strong> when they <strong>die</strong><br><em>be careful</em>",
description: "mobs <strong class='color-e'>explode</strong> when they <strong>die</strong>",
maxCount: 1,
count: 0,
frequency: 2,
frequencyDefault: 2,
frequency: 1,
frequencyDefault: 1,
allowed() {
return (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1 || tech.isBlockExplosion) && !tech.sporesOnDeath && !tech.nailsDeathMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.iceIXOnDeath
return !tech.sporesOnDeath && !tech.nailsDeathMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.iceIXOnDeath
},
requires: "an explosive damage source, no other mob death tech",
requires: "no other mob death tech",
effect: () => {
tech.isExplodeMob = true;
},
@@ -936,8 +922,8 @@
description: "mobs release a <strong>nail</strong> when they <strong>die</strong><br><em>nails target nearby mobs</em>",
maxCount: 9,
count: 0,
frequency: 2,
frequencyDefault: 2,
frequency: 1,
frequencyDefault: 1,
allowed() {
return !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.iceIXOnDeath
},
@@ -954,8 +940,8 @@
description: "mobs produce <strong class='color-p' style='letter-spacing: 2px;'>spores</strong> when they <strong>die</strong><br><strong>11%</strong> chance",
maxCount: 9,
count: 0,
frequency: 2,
frequencyDefault: 2,
frequency: 1,
frequencyDefault: 1,
allowed() {
return !tech.nailsDeathMob && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.iceIXOnDeath
},
@@ -978,8 +964,8 @@
description: "mobs spawn with <strong>11%</strong> less <strong>health</strong>",
maxCount: 3,
count: 0,
frequency: 2,
frequencyDefault: 2,
frequency: 1,
frequencyDefault: 1,
allowed() {
return tech.nailsDeathMob || tech.sporesOnDeath || tech.isExplodeMob || tech.botSpawner || tech.isMobBlockFling || tech.iceIXOnDeath
},
@@ -1586,7 +1572,7 @@
frequency: 3,
frequencyDefault: 3,
allowed() {
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name === "pilot wave" && !tech.isBlockExplosion
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name === "pilot wave" && !tech.isTokamak
},
requires: "mass driver, not pilot wave not tokamak",
effect() {
@@ -1604,7 +1590,7 @@
frequency: 3,
frequencyDefault: 3,
allowed() {
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name === "pilot wave" && !tech.isBlockExplosion
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name === "pilot wave" && !tech.isTokamak
},
requires: "mass driver, not pilot wave not tokamak",
effect() {
@@ -1640,7 +1626,7 @@
// frequency: 2,
// frequencyDefault: 2,
// allowed() {
// return (tech.throwChargeRate > 1 || m.fieldUpgrades[m.fieldMode].name === "pilot wave") && !tech.isBlockExplosion
// return (tech.throwChargeRate > 1 || m.fieldUpgrades[m.fieldMode].name === "pilot wave") && !tech.isTokamak
// },
// requires: "mass driver or pilot wave, not tokamak",
// effect() {
@@ -1676,7 +1662,7 @@
frequency: 3,
frequencyDefault: 3,
allowed() {
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name === "pilot wave" && !tech.isBlockExplosion
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name === "pilot wave" && !tech.isTokamak
},
requires: "mass driver, not pilot wave not tokamak",
effect() {
@@ -2158,7 +2144,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return (tech.iceEnergy || tech.isWormholeEnergy || tech.isPiezo || tech.isRailEnergyGain || tech.energySiphon || tech.isEnergyRecovery || tech.dynamoBotCount || tech.isFlipFlopEnergy || tech.isBlockExplosion) && tech.energyRegen !== 0.004 && !tech.isEnergyHealth
return (tech.iceEnergy || tech.isWormholeEnergy || tech.isPiezo || tech.isRailEnergyGain || tech.energySiphon || tech.isEnergyRecovery || tech.dynamoBotCount || tech.isFlipFlopEnergy || tech.isTokamak) && tech.energyRegen !== 0.004 && !tech.isEnergyHealth
},
requires: "a way to regen extra energy, not time crystals",
effect: () => {
@@ -2387,7 +2373,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return tech.isEnergyRecovery || tech.isPiezo || tech.energySiphon > 0 || tech.isRailEnergyGain || tech.isWormholeEnergy || tech.iceEnergy > 0 || tech.isMassEnergy || tech.isBlockExplosion
return tech.isEnergyRecovery || tech.isPiezo || tech.energySiphon > 0 || tech.isRailEnergyGain || tech.isWormholeEnergy || tech.iceEnergy > 0 || tech.isMassEnergy || tech.isTokamak
},
requires: "a source of overfilled energy",
effect() {
@@ -4240,7 +4226,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return tech.haveGunCheck("missiles") || tech.isMissileField
return tech.haveGunCheck("missiles") || tech.isMissileField || tech.missileBotCount
},
requires: "missiles",
effect() {
@@ -4259,7 +4245,7 @@
frequency: 2,
frequencyDefault: 2,
allowed() {
return tech.haveGunCheck("missiles")
return tech.haveGunCheck("missiles") || tech.missileBotCount
},
requires: "missiles",
effect() {
@@ -4271,12 +4257,12 @@
},
{
name: "missile-bot",
description: "a <strong class='color-bot'>bot</strong> fires <strong>missiles</strong> at far away mobs",
description: "remove your <strong>missile gun</strong><br>gain a <strong class='color-bot'>bot</strong> that fires <strong>missiles</strong> at mobs",
isGunTech: true,
maxCount: 1,
count: 0,
frequency: 2,
frequencyDefault: 2,
frequency: 3,
frequencyDefault: 3,
isBot: true,
isBotTech: true,
allowed() {
@@ -4286,11 +4272,15 @@
effect() {
tech.missileBotCount++;
b.missileBot();
if (tech.haveGunCheck("missiles")) b.removeGun("missiles") //remove your last gun
},
remove() {
tech.missileBotCount = 0;
b.clearPermanentBots();
b.respawnBots();
if (this.count) {
tech.missileBotCount = 0;
b.clearPermanentBots();
b.respawnBots();
if (!tech.haveGunCheck("missiles")) b.giveGuns("missiles")
}
}
},
{
@@ -5726,10 +5716,10 @@
},
requires: "plasma torch",
effect() {
tech.isBlockExplosion = true;
tech.isTokamak = true;
},
remove() {
tech.isBlockExplosion = false;
tech.isTokamak = false;
}
},
{
@@ -7773,7 +7763,7 @@
isFallingDamage: null,
harmonics: null,
isStandingWaveExpand: null,
isBlockExplosion: null,
isTokamak: null,
superBallDelay: null,
isBlockExplode: null,
isOverHeal: null,

View File

@@ -1,19 +1,11 @@
******************************************************** NEXT PATCH ********************************************************
Matter.World has been replaced with Matter.Composite
matter.js deprecated World
could cause problems merging your old code
(replace World with Composite in your code)
missile-bot tech now removes your missile gun, but missile bot fires much faster
missile-bot now benefits from all missile tech
tech: many worlds - now costs 1 research at the start of each level to activate
a nerf, but also a buff because if you like a build you can freeze it by not getting research
mine gun has 25% less ammo and 33% more damage
railgun now gets 50% more ammo, but it fires slower
fixed rail gun ammo drain on misfire bug
fixed experiment gun display bug
rail gun has a bit less ammo and fires a bit faster
in between how it is was in the last two patches
rail gun gets less energy from half-wave rectifier
******************************************************** TODO ********************************************************
@@ -48,6 +40,7 @@ make non moving bosses not move after getting hit
shooter, shielding,
buff missiles?
do more with the missile bot
maybe they can release grenades after they explode, like CPT grenades?
make the crouch rapid fire a tech, and make the missiles fire faster, and use less ammo?
buff railgun