mover
tech: rebound - super balls speed up and reset duration after they hit a mob Zectron does 100->66% damage and it drains 25% of current energy instead of health mantisBoss is back level element: mover - rectangular map element that pushes horizontally it's in a possible room for labs new community level - staircase by ryanbear
This commit is contained in:
59
js/spawn.js
59
js/spawn.js
@@ -6,7 +6,7 @@ const spawn = {
|
||||
"orbitalBoss", "historyBoss", "shooterBoss", "cellBossCulture", "bomberBoss", "spiderBoss", "launcherBoss", "laserTargetingBoss",
|
||||
"powerUpBoss", "powerUpBossBaby", "streamBoss", "pulsarBoss", "spawnerBossCulture", "grenadierBoss", "growBossCulture", "blinkBoss",
|
||||
"snakeSpitBoss", "laserBombingBoss", "blockBoss", "revolutionBoss", "slashBoss", "shieldingBoss",
|
||||
"timeSkipBoss", "dragonFlyBoss", "beetleBoss", "sneakBoss"
|
||||
"timeSkipBoss", "dragonFlyBoss", "beetleBoss", "sneakBoss", "mantisBoss"
|
||||
],
|
||||
bossTypeSpawnOrder: [], //preset list of boss names calculated at the start of a run by the randomSeed
|
||||
bossTypeSpawnIndex: 0, //increases as the boss type cycles
|
||||
@@ -3030,14 +3030,20 @@ const spawn = {
|
||||
let me = mob[mob.length - 1];
|
||||
me.babyList = [] //list of mobs that are apart of this boss
|
||||
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.damageReduction = 0.13 / (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.00008; //simulation.difficulty
|
||||
const springDampening = 0.01;
|
||||
me.seePlayerFreq = 33;
|
||||
const springStiffness = 0.00003; //simulation.difficulty
|
||||
const springDampening = 0.0002;
|
||||
|
||||
// const springStiffness = 0.00014;
|
||||
// const springDampening = 0.0005;
|
||||
|
||||
|
||||
me.springTarget = {
|
||||
x: me.position.x,
|
||||
y: me.position.y
|
||||
@@ -3076,8 +3082,9 @@ const spawn = {
|
||||
ctx.arc(this.cons2.pointA.x, this.cons2.pointA.y, 6, 0, 2 * Math.PI);
|
||||
ctx.fillStyle = "#222";
|
||||
ctx.fill();
|
||||
this.seePlayerCheck()
|
||||
// this.seePlayerByHistory()
|
||||
// this.seePlayerCheck()
|
||||
this.seePlayerByHistory()
|
||||
this.invulnerabilityCountDown--
|
||||
if (this.isInvulnerable) {
|
||||
ctx.beginPath();
|
||||
let vertices = this.vertices;
|
||||
@@ -3095,9 +3102,16 @@ const spawn = {
|
||||
ctx.lineWidth = 13 + 5 * Math.random();
|
||||
ctx.strokeStyle = `rgba(255,255,255,${0.5+0.2*Math.random()})`;
|
||||
ctx.stroke();
|
||||
} else if (this.invulnerabilityCountDown > 0) {
|
||||
this.invulnerabilityCountDown--
|
||||
} else {
|
||||
if (this.invulnerabilityCountDown < 0) {
|
||||
this.invulnerabilityCountDown = 110
|
||||
this.isInvulnerable = false
|
||||
this.damageReduction = this.startingDamageReduction
|
||||
for (let i = 0; i < this.babyList.length; i++) {
|
||||
if (this.babyList[i].alive) this.babyList[i].damageReduction = this.startingDamageReduction
|
||||
}
|
||||
}
|
||||
} else if (this.invulnerabilityCountDown < 0) {
|
||||
this.invulnerabilityCountDown = 120 + 9 * simulation.difficulty
|
||||
this.isInvulnerable = true
|
||||
if (this.damageReduction) this.startingDamageReduction = this.damageReduction
|
||||
this.damageReduction = 0
|
||||
@@ -3109,7 +3123,7 @@ const spawn = {
|
||||
}
|
||||
}
|
||||
// set new values of the ends of the spring constraints
|
||||
const stepRange = 1200
|
||||
const stepRange = 700
|
||||
if (this.seePlayer.recall && Matter.Query.ray(map, this.position, this.seePlayer.position).length === 0) {
|
||||
if (!(simulation.cycle % (this.seePlayerFreq * 2))) {
|
||||
const unit = Vector.normalise(Vector.sub(this.seePlayer.position, this.position))
|
||||
@@ -3118,13 +3132,6 @@ const spawn = {
|
||||
this.springTarget.y = goal.y;
|
||||
this.cons.length = -200;
|
||||
this.cons2.length = 100 + 1.5 * this.radius;
|
||||
|
||||
this.isInvulnerable = false
|
||||
this.invulnerabilityCountDown = 80 + Math.max(0, 70 - simulation.difficulty * 0.5)
|
||||
this.damageReduction = this.startingDamageReduction
|
||||
for (let i = 0; i < this.babyList.length; i++) {
|
||||
if (this.babyList[i].alive) this.babyList[i].damageReduction = this.startingDamageReduction
|
||||
}
|
||||
} else if (!(simulation.cycle % this.seePlayerFreq)) {
|
||||
const unit = Vector.normalise(Vector.sub(this.seePlayer.position, this.position))
|
||||
const goal = Vector.add(this.position, Vector.mult(unit, stepRange))
|
||||
@@ -3132,13 +3139,6 @@ const spawn = {
|
||||
this.springTarget2.y = goal.y;
|
||||
this.cons.length = 100 + 1.5 * this.radius;
|
||||
this.cons2.length = -200;
|
||||
|
||||
this.isInvulnerable = false
|
||||
this.invulnerabilityCountDown = 80 + 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
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.torque = this.lookTorque * this.inertia;
|
||||
@@ -3231,7 +3231,7 @@ 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 = this.startingDamageReduction
|
||||
babyMob.damageReduction = this.startingDamageReduction * 0.8
|
||||
babyMob.collisionFilter.mask = cat.bullet | cat.player //can't touch other mobs //cat.map | cat.body |
|
||||
babyMob.delay = 60 + 55 * simulation.CDScale + Math.floor(Math.random() * 20);
|
||||
babyMob.strikeRange = 400
|
||||
@@ -4131,13 +4131,13 @@ const spawn = {
|
||||
Matter.Body.rotate(me, Math.PI * 0.1);
|
||||
Matter.Body.setDensity(me, 0.002); //extra dense //normal is 0.001 //makes effective life much larger
|
||||
me.isBoss = true;
|
||||
me.damageReduction = 0.035 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
|
||||
me.damageReduction = 0.034 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
|
||||
|
||||
me.frictionStatic = 0;
|
||||
me.friction = 0;
|
||||
me.memory = 240
|
||||
me.seePlayerFreq = 60
|
||||
me.blinkRange = 235
|
||||
me.seePlayerFreq = 55
|
||||
me.blinkRange = 250
|
||||
if (0.5 < Math.random()) {
|
||||
me.grenadeDelay = 260
|
||||
me.blinkRange *= 1.5
|
||||
@@ -4166,7 +4166,6 @@ const spawn = {
|
||||
powerUps.spawnBossPowerUp(this.position.x, this.position.y)
|
||||
}
|
||||
me.do = function() {
|
||||
// this.armor();
|
||||
this.seePlayerByHistory(40)
|
||||
if (this.nextBlinkCycle < simulation.cycle && this.seePlayer.yes) { //teleport towards the player
|
||||
this.nextBlinkCycle = simulation.cycle + this.delay;
|
||||
|
||||
Reference in New Issue
Block a user