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