From 51f4489ae68ea8ff274429415a02f8e9eeb449c0 Mon Sep 17 00:00:00 2001 From: landgreen Date: Mon, 11 Apr 2022 06:58:22 -0700 Subject: [PATCH] wiggle nematodes now wiggle their tail. it's horrible tech: transdimensional spores renamed transdimensional worms spawns spores -> worms missiles: 20% more ammo no longer fire rapidly on crouch instead crouch gives missile initial forward velocity no crouch makes the missiles recoil back before they accelerate forward tech: launch system - fire missiles 500% more rapidly, gives 25% ammo doesn't work with cruse missile tech: ICBM - cruse missile is even bigger and slower pavilion has been added back to the map rotation this will make the game end at 13 again, and feel harder let me know if it's absence resulted in less NaN game crashes reactor sprayBoss is now harder to kill bug fixes --- js/bullet.js | 160 ++++++++++++++++++++++++++++++++------------------- js/level.js | 24 ++++---- js/player.js | 42 ++++---------- js/spawn.js | 10 ++-- js/tech.js | 93 ++++++++++++++++++++++++------ todo.txt | 29 ++++++---- 6 files changed, 221 insertions(+), 137 deletions(-) diff --git a/js/bullet.js b/js/bullet.js index 49671c4..8047c00 100644 --- a/js/bullet.js +++ b/js/bullet.js @@ -1887,7 +1887,13 @@ const b = { Composite.add(engine.world, bullet[me]); //add bullet to world }, missile(where, angle, speed, size = 1) { - if (tech.missileSize) size *= 1.5 + if (tech.isMissileBig) { + size *= 1.55 + if (tech.isMissileBiggest) { + size *= 2 + + } + } const me = bullet.length; bullet[me] = Bodies.rectangle(where.x, where.y, 30 * size, 4 * size, { angle: angle, @@ -1902,7 +1908,7 @@ const b = { }, minDmgSpeed: 10, lookFrequency: Math.floor(10 + Math.random() * 3), - explodeRad: 180 * (tech.missileSize ? 1.5 : 1) + 60 * Math.random(), + explodeRad: (tech.isMissileBig ? 230 : 180) + 60 * Math.random(), density: 0.02, //0.001 is normal beforeDmg() { Matter.Body.setDensity(this, 0.0001); //reduce density to normal @@ -1973,7 +1979,7 @@ const b = { ctx.fill(); }, }); - const thrust = 0.0066 * bullet[me].mass * (tech.missileSize ? 0.6 : 1); + const thrust = 0.0066 * bullet[me].mass * (tech.isMissileBig ? (tech.isMissileBiggest ? 0.15 : 0.7) : 1); Matter.Body.setVelocity(bullet[me], { x: m.Vx / 2 + speed * Math.cos(angle), y: m.Vy / 2 + speed * Math.sin(angle) @@ -2589,7 +2595,7 @@ const b = { }, worm(where, isFreeze = tech.isSporeFreeze) { //used with the tech upgrade in mob.death() const bIndex = bullet.length; - const wormSize = 6 + tech.wormSize * 7 * Math.random() + const wormSize = 6 + tech.wormSize * 6 * Math.random() if (bIndex < 500) { //can't make over 500 spores bullet[bIndex] = Bodies.polygon(where.x, where.y, 3, 3, { inertia: Infinity, @@ -2600,7 +2606,7 @@ const b = { frictionAir: 0.025, thrust: (tech.isFastSpores ? 0.001 : 0.0005) * (1 + 0.5 * (Math.random() - 0.5)), wormSize: wormSize, - wormTail: 1 + Math.max(4, wormSize - 2 * tech.wormSize), + wormTail: 1 + Math.max(4, Math.min(wormSize - 2 * tech.wormSize, 30)), dmg: (tech.isMutualism ? 7 : 2.9) * wormSize, //bonus damage from tech.isMutualism //2.5 is extra damage as worm lookFrequency: 100 + Math.floor(37 * Math.random()), classType: "bullet", @@ -2637,16 +2643,24 @@ const b = { m.displayHealth(); } }, + tailCycle: 6.28 * Math.random(), do() { + this.tailCycle += this.speed * 0.025 ctx.beginPath(); //draw nematode ctx.moveTo(this.position.x, this.position.y); - const dir = Vector.mult(Vector.normalise(this.velocity), -Math.min(100, this.wormTail * this.speed)) + // const dir = Vector.mult(Vector.normalise(this.velocity), -Math.min(100, this.wormTail * this.speed)) + const speed = Math.min(7, this.speed) + const dir = Vector.mult(Vector.normalise(this.velocity), -0.6 * this.wormTail * speed) const tail = Vector.add(this.position, dir) - ctx.lineTo(tail.x, tail.y); + const wiggle = Vector.add(Vector.add(tail, dir), Vector.rotate(dir, Math.sin(this.tailCycle))) + // const wiggle = Vector.add(tail, Vector.rotate(dir, Math.sin((m.cycle - this.endCycle) * 0.03 * this.speed))) + ctx.quadraticCurveTo(tail.x, tail.y, wiggle.x, wiggle.y) // ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, this.vertices[0].x, this.vertices[0].y) + // ctx.lineTo(tail.x, tail.y); ctx.lineWidth = this.wormSize; ctx.strokeStyle = "#000"; ctx.stroke(); + if (this.lockedOn && this.lockedOn.alive) { this.force = Vector.mult(Vector.normalise(Vector.sub(this.lockedOn.position, this.position)), this.mass * this.thrust) } else { @@ -5744,69 +5758,95 @@ const b = { }, { name: "missiles", - description: "launch homing missiles that explode
crouch to rapidly launch smaller missiles", + description: "launch homing missiles that explode", ammo: 0, - ammoPack: 4, + ammoPack: 5, have: false, fireCycle: 0, do() {}, fire() { const countReduction = Math.pow(0.9, tech.missileCount) - if (input.down) { - m.fireCDcycle = m.cycle + 10 * b.fireCDscale / countReduction; // cool down - // for (let i = 0; i < tech.missileCount; i++) { - // b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5) * Math.sqrt(tech.missileCount), -2, Math.sqrt(countReduction)) - // bullet[bullet.length - 1].force.x += 0.004 * countReduction * (i - (tech.missileCount - 1) / 2); - // } + // if (input.down) { + // m.fireCDcycle = m.cycle + tech.missileFireCD * b.fireCDscale / countReduction; // cool down + // // for (let i = 0; i < tech.missileCount; i++) { + // // b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5) * Math.sqrt(tech.missileCount), -2, Math.sqrt(countReduction)) + // // bullet[bullet.length - 1].force.x += 0.004 * countReduction * (i - (tech.missileCount - 1) / 2); + // // } - if (tech.missileCount > 1) { - for (let i = 0; i < tech.missileCount; i++) { - setTimeout(() => { - const where = { 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)) - bullet[bullet.length - 1].force.x += 0.025 * countReduction * (i - (tech.missileCount - 1) / 2); - }, 20 * tech.missileCount * Math.random()); - } - } else { - const where = { - x: m.pos.x, - y: m.pos.y - 40 - } - b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5), -2) - } - } else { - m.fireCDcycle = m.cycle + 50 * b.fireCDscale / countReduction; // cool down - const direction = { - x: Math.cos(m.angle), - y: Math.sin(m.angle) - } - const push = Vector.mult(Vector.perp(direction), 0.08 * countReduction / Math.sqrt(tech.missileCount)) - if (tech.missileCount > 1) { - for (let i = 0; i < tech.missileCount; i++) { - setTimeout(() => { - const where = { - x: m.pos.x + 40 * direction.x, - y: m.pos.y + 40 * direction.y - } - b.missile(where, m.angle, 0, Math.sqrt(countReduction)) - 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 { - const where = { - x: m.pos.x + 40 * direction.x, - y: m.pos.y + 40 * direction.y - } - b.missile(where, m.angle, 0) - } + // if (tech.missileCount > 1) { + // for (let i = 0; i < tech.missileCount; i++) { + // setTimeout(() => { + // const where = { 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)) + // bullet[bullet.length - 1].force.x += 0.025 * countReduction * (i - (tech.missileCount - 1) / 2); + // }, 20 * tech.missileCount * Math.random()); + // } + // } else { + // const where = { + // x: m.pos.x, + // y: m.pos.y - 40 + // } + // b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5), -2) + // } + // } else { + m.fireCDcycle = m.cycle + tech.missileFireCD * b.fireCDscale / countReduction; // cool down + const direction = { + x: Math.cos(m.angle), + y: Math.sin(m.angle) + } + // const where = { + // x: m.pos.x + 30 * direction.x, + // y: m.pos.y + 30 * direction.y + // } + if (tech.missileCount > 1) { + const push = Vector.mult(Vector.perp(direction), 0.2 * countReduction / Math.sqrt(tech.missileCount)) + const sqrtCountReduction = Math.sqrt(countReduction) // for (let i = 0; i < tech.missileCount; i++) { // setTimeout(() => { - // b.missile(where, m.angle, 0, 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); - // }, i * 50); + // if (input.down) { + // b.missile(where, m.angle, 20, sqrtCountReduction) + // // bullet[bullet.length - 1].force.x += 0.7 * push.x * (i - (tech.missileCount - 1) / 2); + // // bullet[bullet.length - 1].force.y += 0.7 * push.y * (i - (tech.missileCount - 1) / 2); + // } else { + // b.missile(where, m.angle, -10, sqrtCountReduction) + // bullet[bullet.length - 1].force.x += push.x * (i - (tech.missileCount - 1) / 2); + // bullet[bullet.length - 1].force.y += 0.005 + push.y * (i - (tech.missileCount - 1) / 2); + // } + + // }, 1 + i * 10 * tech.missileCount); // } + const launchDelay = 4 + let count = 0 + const fireMissile = () => { + if (input.down) { + b.missile({ x: m.pos.x + 30 * direction.x, y: m.pos.y + 30 * direction.y }, m.angle, 20, sqrtCountReduction) + bullet[bullet.length - 1].force.x += 0.5 * push.x * (Math.random() - 0.5) + bullet[bullet.length - 1].force.y += 0.004 + 0.5 * push.y * (Math.random() - 0.5) + } else { + b.missile({ x: m.pos.x + 30 * direction.x, y: m.pos.y + 30 * direction.y }, m.angle, -15, sqrtCountReduction) + bullet[bullet.length - 1].force.x += push.x * (Math.random() - 0.5) + bullet[bullet.length - 1].force.y += 0.005 + push.y * (Math.random() - 0.5) + } + } + const cycle = () => { + if ((simulation.paused || m.isBodiesAsleep) && m.alive) { + requestAnimationFrame(cycle) + } else { + count++ + if (!(count % launchDelay)) { + fireMissile() + } + if (count < tech.missileCount * launchDelay && m.alive) requestAnimationFrame(cycle); + } + } + requestAnimationFrame(cycle); + } else { + if (input.down) { + b.missile({ x: m.pos.x + 40 * direction.x, y: m.pos.y + 40 * direction.y }, m.angle, 25) + } else { + b.missile({ x: m.pos.x + 40 * direction.x, y: m.pos.y + 40 * direction.y }, m.angle, -12) + bullet[bullet.length - 1].force.y += 0.04 * (Math.random() - 0.2) + } } } }, { diff --git a/js/level.js b/js/level.js index a6bef15..790b6cc 100644 --- a/js/level.js +++ b/js/level.js @@ -8,7 +8,7 @@ const level = { onLevel: -1, levelsCleared: 0, //see level.populateLevels: (intro, ... , reservoir, reactor, ... , gauntlet, final) added later - playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber"], //"pavilion" + playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion"], // playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"], communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel", "islands"], trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon"], @@ -17,15 +17,15 @@ const level = { if (level.levelsCleared === 0) { //this code only runs on the first level // simulation.isHorizontalFlipped = true // m.setField("metamaterial cloaking") - // b.giveGuns("drones") - // tech.giveTech("desublimated ammunition") - // tech.giveTech("smelting") - // tech.giveTech("smelting") - // tech.giveTech("616") + // b.giveGuns("missiles") + // tech.giveTech("nematodes") + // tech.giveTech("launch system") + // tech.giveTech("cruise missile") + // tech.giveTech("ICBM") // tech.giveTech("grappling hook") - // tech.giveTech("coyote") + // tech.giveTech("annelids") // for (let i = 0; i < 2; i++) powerUps.directSpawn(0, 0, "tech"); - // for (let i = 0; i < 2; i++) tech.giveTech("corona discharge") + // for (let i = 0; i < 9; i++) tech.giveTech("annelids") // for (let i = 10; i < tech.tech.length; i++) { tech.tech[i].isBanished = true } // powerUps.research.changeRerolls(100000) // for (let i = 0; i < 5; i++) tech.giveTech("corona discharge") @@ -2551,7 +2551,7 @@ const level = { spawn.mapRect(4850, -275, 50, 175); //??? - level.difficultyIncrease(15) //30 is near max on hard //60 is near max on why + level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why m.addHealth(Infinity) spawn.starter(1900, -500, 200) //big boy @@ -2690,11 +2690,11 @@ const level = { if (!isSpawnedBoss) { isSpawnedBoss = true if (Math.random() < 0.33) { - for (let i = 0, len = Math.min(simulation.difficulty / 20, 6); i < len; ++i) spawn.bounceBoss(1487 + 200 * i, -1525, 80, false); + for (let i = 0, len = Math.min(simulation.difficulty / 15, 7); i < len; ++i) spawn.bounceBoss(1487 + 200 * i, -1525, 80, false); } else if (Math.random() < 0.5) { - for (let i = 0, len = Math.min(simulation.difficulty / 9, 8); i < len; ++i) spawn.sprayBoss(2400 - 150 * i, -225, 30, false) + for (let i = 0, len = Math.min(simulation.difficulty / 8, 8); i < len; ++i) spawn.sprayBoss(2400 - 150 * i, -225, 30, false) } else { - for (let i = 0, len = Math.min(simulation.difficulty / 6, 10); i < len; ++i) spawn.mineBoss(1950, -250, 50, false); + for (let i = 0, len = Math.min(simulation.difficulty / 5, 11); i < len; ++i) spawn.mineBoss(1950, -250, 50, false); } // for (let i = 0, len = 3 + simulation.difficulty / 20; i < len; ++i) spawn.mantisBoss(1487 + 300 * i, -1525, 35, false) } diff --git a/js/player.js b/js/player.js index 3ebe9bd..ebe873d 100644 --- a/js/player.js +++ b/js/player.js @@ -3340,22 +3340,11 @@ const m = { body.splice(i, 1); m.fieldRange *= 0.8 if (tech.isWormholeEnergy) m.energy += 0.53 - if (tech.isWormholeSpores) { //pandimensional spermia - for (let i = 0, len = Math.ceil(2.5 * (tech.isSporeWorm ? 0.5 : 1) * Math.random()); i < len; i++) { - if (tech.isSporeWorm) { - b.worm(Vector.add(m.hole.pos2, Vector.rotate({ - x: m.fieldRange * 0.4, - y: 0 - }, 2 * Math.PI * Math.random()))) - Matter.Body.setVelocity(bullet[bullet.length - 1], Vector.mult(Vector.rotate(m.hole.unit, Math.PI / 2), -5)); - } else { - b.spore(Vector.add(m.hole.pos2, Vector.rotate({ - x: m.fieldRange * 0.4, - y: 0 - }, 2 * Math.PI * Math.random()))) - Matter.Body.setVelocity(bullet[bullet.length - 1], Vector.mult(Vector.rotate(m.hole.unit, Math.PI / 2), -15)); - } - } + if (tech.isWormholeWorms) { //pandimensional spermia + b.worm(Vector.add(m.hole.pos2, Vector.rotate({ x: m.fieldRange * 0.4, y: 0 }, 2 * Math.PI * Math.random()))) + Matter.Body.setVelocity(bullet[bullet.length - 1], Vector.mult(Vector.rotate(m.hole.unit, Math.PI / 2), -10)); + // for (let i = 0, len = Math.ceil(1.25 * Math.random()); i < len; i++) { + // } } break } @@ -3374,22 +3363,11 @@ const m = { m.fieldRange *= 0.8 // if (tech.isWormholeEnergy && m.energy < m.maxEnergy * 2) m.energy = m.maxEnergy * 2 if (tech.isWormholeEnergy && m.immuneCycle < m.cycle) m.energy += 0.53 - if (tech.isWormholeSpores) { //pandimensional spermia - for (let i = 0, len = Math.ceil(2.5 * (tech.isSporeWorm ? 0.5 : 1) * Math.random()); i < len; i++) { - if (tech.isSporeWorm) { - b.worm(Vector.add(m.hole.pos1, Vector.rotate({ - x: m.fieldRange * 0.4, - y: 0 - }, 2 * Math.PI * Math.random()))) - Matter.Body.setVelocity(bullet[bullet.length - 1], Vector.mult(Vector.rotate(m.hole.unit, Math.PI / 2), 5)); - } else { - b.spore(Vector.add(m.hole.pos1, Vector.rotate({ - x: m.fieldRange * 0.4, - y: 0 - }, 2 * Math.PI * Math.random()))) - Matter.Body.setVelocity(bullet[bullet.length - 1], Vector.mult(Vector.rotate(m.hole.unit, Math.PI / 2), 15)); - } - } + if (tech.isWormholeWorms) { //pandimensional spermia + b.worm(Vector.add(m.hole.pos1, Vector.rotate({ x: m.fieldRange * 0.4, y: 0 }, 2 * Math.PI * Math.random()))) + Matter.Body.setVelocity(bullet[bullet.length - 1], Vector.mult(Vector.rotate(m.hole.unit, Math.PI / 2), 5)); + // for (let i = 0, len = Math.ceil(1.25 * Math.random()); i < len; i++) { + // } } break } diff --git a/js/spawn.js b/js/spawn.js index 93b4150..8f2bfef 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -3532,16 +3532,16 @@ const spawn = { me.isBoss = true; me.inertia = Infinity; //no rotation // me.accelMag = 0.00008 + 0.00007 * simulation.accelScale; - me.burstFireFreq = 22 + Math.floor(22 * simulation.CDScale) + me.burstFireFreq = 18 + Math.floor(18 * simulation.CDScale) me.burstTotalPhases = 4 + Math.floor(2 / simulation.CDScale) - me.noFireTotalCycles = 390 + me.noFireTotalCycles = 360 me.frictionStatic = 0; me.friction = 0; me.frictionAir = 0; me.restitution = 1 spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random(), 1) Matter.Body.setDensity(me, 0.0022 + 0.0002 * Math.sqrt(simulation.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger - me.damageReduction = 0.12 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) + me.damageReduction = 0.09 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.onDeath = function() { if (isSpawnBossPowerUp) powerUps.spawnBossPowerUp(this.position.x, this.position.y) }; @@ -4104,7 +4104,7 @@ const spawn = { me.swordGrow = function() { this.laserSword(this.vertices[this.swordVertex], this.angle + this.laserAngle); this.swordRadius += this.swordRadiusGrowRate - if (this.swordRadius > this.swordRadiusMax) { + if (this.swordRadius > this.swordRadiusMax || this.isStunned) { this.sword = this.swordSlash this.spinCount = 0 } @@ -4113,7 +4113,7 @@ const spawn = { this.laserSword(this.vertices[this.swordVertex], this.angle + this.laserAngle); this.torque += this.torqueMagnitude; this.spinCount++ - if (this.spinCount > 60) { + if (this.spinCount > 60 || this.isStunned) { this.sword = this.swordWaiting this.swordRadius = 0 this.accelMag = 0.001 * simulation.accelScale; diff --git a/js/tech.js b/js/tech.js index e7eae40..666ce58 100644 --- a/js/tech.js +++ b/js/tech.js @@ -4494,21 +4494,78 @@ const tech = { }, { name: "cruise missile", - description: "missiles travel 63% slower,
but have a 50% larger explosive payload", + description: "missiles travel 50% slower,
but have a 100% larger explosive payload", isGunTech: true, maxCount: 1, count: 0, frequency: 2, frequencyDefault: 2, allowed() { - return tech.haveGunCheck("missiles") || tech.isMissileField || tech.missileBotCount + return (tech.haveGunCheck("missiles") && tech.missileFireCD === 45) || tech.isMissileField || tech.missileBotCount }, requires: "missiles", effect() { - tech.missileSize = true + tech.isMissileBig = true }, remove() { - tech.missileSize = false + tech.isMissileBig = false + } + }, + { + name: "ICBM", + description: "cruise missiles travel 66% slower,
but have a 100% larger explosive payload", + isGunTech: true, + maxCount: 1, + count: 0, + frequency: 2, + frequencyDefault: 2, + allowed() { + return tech.haveGunCheck("missiles") && tech.isMissileBig //&& !tech.isSmartRadius && !tech.isImmuneExplosion + }, + requires: "missiles, cruse missile", //, not electric reactive armor, controlled explosions", + effect() { + tech.isMissileBiggest = true + }, + remove() { + tech.isMissileBiggest = false + } + }, + { + name: "launch system", + description: `reduce missile launch cooldown 500%
gain 20% more missile ammo per ${powerUps.orb.ammo(1)}`, + isGunTech: true, + maxCount: 1, + count: 0, + frequency: 2, + frequencyDefault: 2, + allowed() { + return tech.haveGunCheck("missiles") && !tech.isMissileBig + }, + requires: "missiles", + ammoBonus: 1.2, + effect() { + tech.missileFireCD = 10 + for (i = 0, len = b.guns.length; i < len; i++) { //find which gun + if (b.guns[i].name === "missiles") { + b.guns[i].ammoPack = this.ammoBonus; + b.guns[i].ammo = Math.ceil(b.guns[i].ammo * this.ammoBonus); + simulation.updateGunHUD(); + break + } + } + }, + remove() { + if (tech.missileFireCD !== 45) { + tech.missileFireCD = 45; + for (i = 0, len = b.guns.length; i < len; i++) { //find which gun + if (b.guns[i].name === "missiles") { + b.guns[i].ammoPack = 5; + b.guns[i].ammo = Math.ceil(b.guns[i].ammo / this.ammoBonus); + simulation.updateGunHUD(); + break + } + } + } } }, { @@ -4550,7 +4607,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - 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) + return tech.explosiveRadius === 1 && !tech.isSmallExplosion && (tech.haveGunCheck("missiles") || tech.missileBotCount || 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: () => { @@ -4721,7 +4778,7 @@ const tech = { }, { name: "MIRV", - description: "fire +1 missile and grenade
decrease explosion radius up to 10%", + description: "fire +1 missile and grenade per shot
decrease explosion radius up to 10%", isGunTech: true, maxCount: 9, count: 0, @@ -5070,7 +5127,7 @@ const tech = { frequency: 3, frequencyDefault: 3, allowed() { - return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || tech.isWormholeSpores || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot) + return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot) }, requires: "spore gun, spores", effect() { @@ -7161,9 +7218,9 @@ const tech = { } }, { - name: "transdimensional spores", - link: `transdimensional spores`, - description: "when blocks fall into a wormhole
higher dimension spores are summoned", + name: "transdimensional worms", + link: `transdimensional worms`, + description: "when blocks fall into a wormhole
higher dimension worms are summoned", isFieldTech: true, maxCount: 1, count: 0, @@ -7174,10 +7231,10 @@ const tech = { }, requires: "wormhole", effect() { - tech.isWormholeSpores = true + tech.isWormholeWorms = true }, remove() { - tech.isWormholeSpores = false + tech.isWormholeWorms = false } }, { @@ -9233,7 +9290,7 @@ const tech = { remove() {} }, { - name: "quantum black hole", + name: "black hole", description: `use your energy and ${powerUps.orb.research(4)} to spawn
inside the event horizon of a huge black hole`, maxCount: 1, count: 0, @@ -9297,7 +9354,7 @@ const tech = { setTimeout(() => { powerUps.spawn(m.pos.x + 50, m.pos.y - 50, "heal"); }, 750); setTimeout(() => { powerUps.spawn(m.pos.x - 50, m.pos.y, "tech"); }, 1000); setTimeout(() => { powerUps.spawn(m.pos.x - 50, m.pos.y - 50, "research"); }, 1250); - }, 1000 * 5); + }, 1000 * 5 * 60); }, remove() {} }, @@ -9589,7 +9646,7 @@ const tech = { isWormholeDamage: null, isNailCrit: null, isFlechetteExplode: null, - isWormholeSpores: null, + isWormholeWorms: null, isWormBullets: null, isWideLaser: null, wideLaser: null, @@ -9616,7 +9673,8 @@ const tech = { isRewindGrenade: null, isExtruder: null, isEndLevelPowerUp: null, - missileSize: null, + isMissileBig: null, + isMissileBiggest: null, isLaserMine: null, isAmmoFoamSize: null, isIceIX: null, @@ -9748,5 +9806,6 @@ const tech = { plasmaDischarge: null, isFlipFlopHealth: null, isRelayEnergy: null, - coyoteTime: null + coyoteTime: null, + missileFireCD: null } \ No newline at end of file diff --git a/todo.txt b/todo.txt index c23c0a6..5855d8f 100644 --- a/todo.txt +++ b/todo.txt @@ -1,27 +1,32 @@ ******************************************************** NEXT PATCH ************************************************** -added 2 more classic n-gon dates +nematodes now wiggle their tail. it's horrible +tech: transdimensional spores renamed transdimensional worms + spawns spores -> worms -plasma ball - does 10% more damage - moves 20% faster - targets mob bullets better +missiles: + 20% more ammo + no longer fire rapidly on crouch + instead crouch gives missile initial forward velocity + no crouch makes the missiles recoil back before they accelerate forward + tech: launch system - fire missiles 500% more rapidly, gives 25% ammo + doesn't work with cruse missile + tech: ICBM - cruse missile is even bigger and slower -standing wave has a 45/60->30/60 second cooldown after blocking a shielded mob - but, standing wave now also triggers it's CD on shields that protect groups of mobs +pavilion has been added back to the map rotation + this will make the game end at 13 again, and feel harder + let me know if it's absence resulted in less NaN game crashes -JUNK tech: Mech v4.48 removed -JUNK tech: cosmogonic myth - opens a random classic version of n-gon in a new tab, after 5 minutes close the tab and spawn 1 of every tech +reactor sprayBoss is now harder to kill bug fixes - ******************************************************** TODO ******************************************************** bugs: requirement text man discord messages + make sure guns are listed to work with gun tech randomization bring back: - missiles that fall back and down for a sec after they fire the old phase decoherence field make cloak only active on input.field down could be a tech @@ -33,6 +38,8 @@ bring back: but it does drain some energy tech pilot wave: Bose Einstein condensate - freeze mobs in superposition with pilot wave +tech: plasma drip + plasma ball graphics should look more like a real plasma ball gently scale damage with circleRadius