diff --git a/.DS_Store b/.DS_Store index f2d0892..9275525 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/js/bullet.js b/js/bullet.js index c068892..77cf0c5 100644 --- a/js/bullet.js +++ b/js/bullet.js @@ -1789,8 +1789,8 @@ const b = { collisionFilter: { // category: 0, // mask: 0, //cat.mob | cat.mobBullet | cat.mobShield - category: cat.bullet, - mask: cat.map, //cat.mob | cat.mobBullet | cat.mobShield + category: 0, //cat.bullet, + mask: 0, //cat.map, //cat.mob | cat.mobBullet | cat.mobShield }, beforeDmg() {}, onEnd() {}, @@ -4879,7 +4879,7 @@ const b = { const SPEED = input.down ? 43 : 36 m.fireCDcycle = m.cycle + Math.floor((input.down ? 23 : 15) * b.fireCDscale); // cool down const SPREAD = input.down ? 0.08 : 0.13 - const num = tech.missileCount + 2 + const num = 3 + Math.floor(tech.extraSuperBalls * Math.random()) const radius = 11 * tech.bulletSize let dir = m.angle - SPREAD * (num - 1) / 2; for (let i = 0; i < num; i++) { @@ -4912,7 +4912,7 @@ const b = { const dir = m.angle const x = m.pos.x const y = m.pos.y - const num = tech.missileCount + 2 + const num = 3 + Math.floor(tech.extraSuperBalls * Math.random()) const delay = Math.floor((input.down ? 18 : 12) * b.fireCDscale) m.fireCDcycle = m.cycle + delay; // cool down diff --git a/js/level.js b/js/level.js index 2439308..0674ce3 100644 --- a/js/level.js +++ b/js/level.js @@ -18,10 +18,10 @@ const level = { // localSettings.levelsClearedLastGame = 10 // level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why // simulation.isHorizontalFlipped = true - // m.setField("pilot wave") + // m.setField("plasma torch") // b.giveGuns("harpoon") - tech.giveTech("relay switch") - tech.giveTech("thermocouple") + // tech.giveTech("extruder") + // tech.giveTech("thermocouple") // for (let i = 0; i < 2; i++) powerUps.directSpawn(0, 0, "tech"); // for (let i = 0; i < 9; i++) tech.giveTech("annelids") // tech.giveTech("tinsellated flagella") @@ -30,7 +30,7 @@ const level = { // for (let i = 0; i < 1; i++) tech.giveTech("reticulum") // for (let i = 0; i < 2; i++) tech.giveTech("laser-bot") // tech.tech[297].frequency = 100 - // level.crouch(); + // level.deflect(); if (simulation.isTraining) { level.walk(); } else { level.intro(); } // level.testing(); //not in rotation, used for testing @@ -671,6 +671,9 @@ const level = { //exit room glow ctx.fillStyle = "rgba(0,255,255,0.05)" ctx.fillRect(1600, -400, 400, 400) + //center falling bullets + ctx.fillStyle = "rgba(255,0,255,0.013)" //pink? + ctx.fillRect(650, -2800, 600, 2800) }; spawn.mapRect(-2750, -2800, 2600, 4600); //left wall @@ -3491,9 +3494,9 @@ const level = { // spawn.launcherBoss(3200, -500) // spawn.blockBoss(1700, -500) // spawn.blinkBoss(3200, -500) - // spawn.mantisBoss(1700, -500) + spawn.mantisBoss(1700, -500) // spawn.tetherBoss(1700, -500) //go to actual level? - spawn.revolutionBoss(1900, -500) + // spawn.revolutionBoss(1900, -500) // spawn.bomberBoss(1400, -500) // spawn.cellBossCulture(1600, -500) // spawn.shieldingBoss(1700, -500) diff --git a/js/spawn.js b/js/spawn.js index 53642cb..35ce949 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -1911,14 +1911,14 @@ const spawn = { mobs.spawn(x, y, 5, radius, "#6ba"); let me = mob[mob.length - 1]; me.babyList = [] //list of mobs that are apart of this boss - Matter.Body.setDensity(me, 0.002); //extra dense //normal is 0.001 //makes effective life much larger and damage on collision - me.damageReduction = 0.1 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) //normal is 1, most bosses have 0.25 + Matter.Body.setDensity(me, 0.001); //extra dense //normal is 0.001 //makes effective life much larger and damage on collision + me.damageReduction = 0.15 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) //normal is 1, most bosses have 0.25 me.isBoss = true; me.friction = 0; me.frictionAir = 0.0067; me.g = 0.0002; //required if using this.gravity me.seePlayerFreq = 300; - const springStiffness = 0.0004; //simulation.difficulty + const springStiffness = 0.0001; //simulation.difficulty const springDampening = 0.005; me.springTarget = { @@ -2006,7 +2006,7 @@ const spawn = { this.cons2.length = 100 + 1.5 * this.radius; this.isInvulnerable = false - this.invulnerabilityCountDown = 40 + Math.max(0, 70 - simulation.difficulty * 2) + this.invulnerabilityCountDown = 45 + Math.max(0, 70 - simulation.difficulty) this.damageReduction = this.startingDamageReduction for (let i = 0; i < this.babyList.length; i++) { if (this.babyList[i].alive) this.babyList[i].damageReduction = this.startingDamageReduction @@ -2020,7 +2020,7 @@ const spawn = { this.cons2.length = -200; this.isInvulnerable = false - this.invulnerabilityCountDown = 40 + Math.max(0, 70 - simulation.difficulty * 2) + this.invulnerabilityCountDown = 45 + Math.max(0, 70 - simulation.difficulty) this.damageReduction = this.startingDamageReduction for (let i = 0; i < this.babyList.length; i++) { if (this.babyList[i].alive) this.babyList[i].damageReduction = this.startingDamageReduction @@ -2100,6 +2100,7 @@ const spawn = { powerUps.spawnBossPowerUp(this.position.x, this.position.y) for (let i = 0; i < this.babyList.length; i++) { if (this.babyList[i].alive) { + this.babyList[i].collisionFilter.mask = cat.map | cat.bullet | cat.player this.babyList[i].isInvulnerable = false this.babyList[i].damageReduction = this.startingDamageReduction this.babyList[i].collisionFilter.mask = cat.bullet | cat.player | cat.map | cat.body @@ -2107,7 +2108,7 @@ const spawn = { } }; - const sideLength = 120 // distance between each node mob + const sideLength = 80 // distance between each node mob const nodes = 3 const angle = 2 * Math.PI / nodes spawn.allowShields = false; //don't want shields on individual mobs, it messes with the constraints @@ -2118,10 +2119,10 @@ const spawn = { babyMob.fill = "rgb(68, 102, 119)" babyMob.isBoss = true; // Matter.Body.setDensity(babyMob, 0.001); //extra dense //normal is 0.001 //makes effective life much larger and increases damage - babyMob.damageReduction = 0.1 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) + babyMob.damageReduction = this.startingDamageReduction babyMob.collisionFilter.mask = cat.bullet | cat.player //can't touch other mobs //cat.map | cat.body | - babyMob.delay = 60 + 50 * simulation.CDScale; - babyMob.strikeRange = 600 + babyMob.delay = 60 + 55 * simulation.CDScale + Math.floor(Math.random() * 20); + babyMob.strikeRange = 400 babyMob.onHit = function() { this.cd = simulation.cycle + this.delay; //dislodge ammo diff --git a/js/tech.js b/js/tech.js index 6ee72ab..a7e9b67 100644 --- a/js/tech.js +++ b/js/tech.js @@ -4230,33 +4230,6 @@ const tech = { } } }, - { - name: "super ball", - description: "fire just 1 large super ball
that stuns mobs for 3 second", - isGunTech: true, - maxCount: 1, - count: 0, - frequency: 2, - frequencyDefault: 2, - allowed() { - return tech.haveGunCheck("super balls") && tech.missileCount === 1 && !tech.superBallDelay - }, - requires: "super balls, but not MIRV or supertemporal", - effect() { - tech.oneSuperBall = true; - for (i = 0, len = b.guns.length; i < len; i++) { //find which gun - if (b.guns[i].name === "super balls") b.guns[i].chooseFireMethod() - } - }, - remove() { - if (tech.oneSuperBall) { - tech.oneSuperBall = false; - for (i = 0, len = b.guns.length; i < len; i++) { //find which gun - if (b.guns[i].name === "super balls") b.guns[i].chooseFireMethod() - } - } - } - }, { name: "super sized", description: `increase super ball radius by 14%
increases damage by about 27%`, @@ -4276,6 +4249,52 @@ const tech = { tech.bulletSize = 1; } }, + { + name: "super duper", + description: `randomly fire +0, +1, or +2 extra super balls`, + isGunTech: true, + maxCount: 9, + count: 0, + frequency: 2, + frequencyDefault: 2, + allowed() { + return tech.haveGunCheck("super balls") && !tech.oneSuperBall + }, + requires: "super balls, not super ball", + effect() { + tech.extraSuperBalls += 3 + }, + remove() { + tech.extraSuperBalls = 0; + } + }, + { + name: "super ball", + description: "fire just 1 large super ball
that stuns mobs for 3 second", + isGunTech: true, + maxCount: 1, + count: 0, + frequency: 2, + frequencyDefault: 2, + allowed() { + return tech.haveGunCheck("super balls") && !tech.extraSuperBalls && !tech.superBallDelay + }, + requires: "super balls, not super duper or supertemporal", + effect() { + tech.oneSuperBall = true; + for (i = 0, len = b.guns.length; i < len; i++) { //find which gun + if (b.guns[i].name === "super balls") b.guns[i].chooseFireMethod() + } + }, + remove() { + if (tech.oneSuperBall) { + tech.oneSuperBall = false; + for (i = 0, len = b.guns.length; i < len; i++) { //find which gun + if (b.guns[i].name === "super balls") b.guns[i].chooseFireMethod() + } + } + } + }, { name: "phase velocity", description: "matter wave propagates faster through solids
increase matter wave damage by 15%", @@ -4486,9 +4505,9 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.haveGunCheck("missiles") || tech.missileBotCount || tech.haveGunCheck("grenades") || (tech.haveGunCheck("super balls") && !tech.oneSuperBall) + return tech.haveGunCheck("missiles") || tech.missileBotCount || tech.haveGunCheck("grenades") }, - requires: "missiles, grenades, super balls, not super ball", + requires: "missiles, grenades", effect() { tech.missileCount++; }, @@ -8861,7 +8880,7 @@ const tech = { this.frequency = 0; this.description = `null is open at level.final()` } else { - this.frequency += lore.techGoal + this.frequency += lore.techGoal * 2 // for (let i = 0; i < tech.tech.length; i++) { //set name for all unchosen copies of this tech // if (tech.tech[i].isLore && tech.tech[i].count === 0) tech.tech[i].description = `${lore.techCount+1}/${lore.techGoal}
add copies of this to the potential tech pool` // } @@ -9203,5 +9222,6 @@ const tech = { isBrainstorm: null, isBrainstormActive: null, brainStormDelay: null, - wormSize: null + wormSize: null, + extraSuperBalls: null } \ No newline at end of file diff --git a/todo.txt b/todo.txt index cfcc631..2a9338e 100644 --- a/todo.txt +++ b/todo.txt @@ -1,17 +1,13 @@ ******************************************************** NEXT PATCH ************************************************** -revolutionBoss is immune to damage at 1/4,1/2,3/4 health until it's laser spins around one revolution - -thermocouple produces 1-9 -> 4-13 ice nine bullet -thermocouple is on by default until next patch - -decoherence rewrite with flags instead of a banish array, to fix bugs - +tech: super duper - fire +0-2 extra super balls + super balls no longer part of MIRV +bug fix for plasma extruder interaction with doors that collide with power ups +mantisBoss moves slower, can be damaged for longer time, has less total life, has a smaller punch range ******************************************************** TODO ******************************************************** - merge various multi bullet tech under one name training @@ -42,13 +38,15 @@ training done superball - use 1 ammo to take out several mobs done matter wave - kill a mob inside a map element done missiles - take out mobs that are around corner and have them drop on a button - grenades - use 1 ammo to take out several mobs at once - spores - use 1 ammo to take out several mobs at once - drones - use mouse to bring drones around a corner + grenades - use 1 ammo to take out a ring of mob`s + spores - use 1 ammo to take out several mobs at once, you have to block with your shield until the mobs die + drones - use mouse to bring drones around a couple corners foam - slow boss mob, and run away harpoon - kill one close mob, pick up ammo that is out of reach, first at several far away mobs with crouch + or just some hard melee combat mine - built kill zone, get mobs to follow into mine kill zone - laser - reflect off walls to hit mob + maybe a boss mob? + laser - reflect off walls to hit mobs field rooms: standing wave - bullets come from every direction perfect diamagnetism - drop field to rapid stream of bullets and fire gun at them @@ -64,6 +62,7 @@ training also make a harder version of stacking blocks portal rooms jump at the top of a elevator to jump high + use the double constrained platforms combat rooms: kill so many mobs that the mob bodies pile up and you can get over a wall by jumping on them boss gauntlet, spawn with nothing but a few power ups and fight 10 bosses