ruins level rework
ruins level is larger, more balanced for combat, with easier platforming vanish element vanish slower if they are wider delete blocks caught inside it as it returns
This commit is contained in:
194
js/level.js
194
js/level.js
@@ -7,7 +7,8 @@ const level = {
|
|||||||
defaultZoom: 1400,
|
defaultZoom: 1400,
|
||||||
onLevel: -1,
|
onLevel: -1,
|
||||||
levelsCleared: 0,
|
levelsCleared: 0,
|
||||||
playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "ruins"], //intro, gauntlet, final are added in at the start and end of level order
|
// playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "ruins"], //intro, gauntlet, final are added in at the start and end of level order
|
||||||
|
playableLevels: ["ruins", "ruins", "ruins", "ruins", "ruins", "ruins", "ruins", "ruins", "ruins", "ruins", "ruins"], //intro, gauntlet, final are added in at the start and end of level order
|
||||||
communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel"],
|
communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel"],
|
||||||
trainingLevels: [
|
trainingLevels: [
|
||||||
"walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect",
|
"walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect",
|
||||||
@@ -753,7 +754,7 @@ const level = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
vanish(x, y, width, height, hide = { x: 0, y: 150 }) {
|
vanish(x, y, width, height, isVertical = false, hide = { x: 0, y: 150 }) {
|
||||||
x = x + width / 2
|
x = x + width / 2
|
||||||
y = y + height / 2
|
y = y + height / 2
|
||||||
const vertices = [{ x: x, y: y, index: 0, isInternal: false }, { x: x + width, y: y, index: 1, isInternal: false }, { x: x + width, y: y + height, index: 4, isInternal: false }, { x: x, y: y + height, index: 3, isInternal: false }]
|
const vertices = [{ x: x, y: y, index: 0, isInternal: false }, { x: x + width, y: y, index: 1, isInternal: false }, { x: x + width, y: y + height, index: 4, isInternal: false }, { x: x, y: y + height, index: 3, isInternal: false }]
|
||||||
@@ -768,19 +769,24 @@ const level = {
|
|||||||
isNotHoldable: true,
|
isNotHoldable: true,
|
||||||
isNonStick: true, //this keep sporangium from sticking
|
isNonStick: true, //this keep sporangium from sticking
|
||||||
isTouched: false,
|
isTouched: false,
|
||||||
fadeTime: 60,
|
fadeTime: 10 + Math.ceil(0.25 * width),
|
||||||
fadeCount: 60,
|
fadeCount: null,
|
||||||
isThere: true,
|
isThere: true,
|
||||||
returnTime: 120,
|
returnTime: 120,
|
||||||
returnCount: 0,
|
returnCount: 0,
|
||||||
|
shrinkVertices(size) {
|
||||||
|
if (isVertical) {
|
||||||
|
return [{ x: x, y: y * size, index: 0, isInternal: false }, { x: x + width, y: y * size, index: 1, isInternal: false }, { x: x + width, y: (y + height) * size, index: 4, isInternal: false }, { x: x, y: (y + height) * size, index: 3, isInternal: false }]
|
||||||
|
} else {
|
||||||
|
return [{ x: x * size, y: y, index: 0, isInternal: false }, { x: (x + width) * size, y: y, index: 1, isInternal: false }, { x: (x + width) * size, y: y + height, index: 4, isInternal: false }, { x: x * size, y: y + height, index: 3, isInternal: false }]
|
||||||
|
}
|
||||||
|
},
|
||||||
query() {
|
query() {
|
||||||
if (this.isThere) {
|
if (this.isThere) {
|
||||||
if (this.isTouched) {
|
if (this.isTouched) {
|
||||||
if (!m.isBodiesAsleep) {
|
if (!m.isBodiesAsleep) {
|
||||||
this.fadeCount--
|
this.fadeCount--
|
||||||
const size = Math.max(this.fadeCount / this.fadeTime, 0.03)
|
Matter.Body.setVertices(this, this.shrinkVertices(Math.max(this.fadeCount / this.fadeTime, 0.03))) //take on harpoon shape
|
||||||
const vertices = [{ x: x * size, y: y, index: 0, isInternal: false }, { x: (x + width) * size, y: y, index: 1, isInternal: false }, { x: (x + width) * size, y: y + height, index: 4, isInternal: false }, { x: x * size, y: y + height, index: 3, isInternal: false }]
|
|
||||||
Matter.Body.setVertices(this, vertices) //take on harpoon shape
|
|
||||||
}
|
}
|
||||||
if (this.fadeCount < 1) {
|
if (this.fadeCount < 1) {
|
||||||
Matter.Body.setPosition(this, hide)
|
Matter.Body.setPosition(this, hide)
|
||||||
@@ -789,7 +795,8 @@ const level = {
|
|||||||
this.collisionFilter.mask = 0 //cat.player | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet
|
this.collisionFilter.mask = 0 //cat.player | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet
|
||||||
this.returnCount = this.returnTime
|
this.returnCount = this.returnTime
|
||||||
const size = 1
|
const size = 1
|
||||||
const vertices = [{ x: x * size, y: y, index: 0, isInternal: false }, { x: (x + width) * size, y: y, index: 1, isInternal: false }, { x: (x + width) * size, y: y + height, index: 4, isInternal: false }, { x: x * size, y: y + height, index: 3, isInternal: false }]
|
// const vertices = [{ x: x * size, y: y, index: 0, isInternal: false }, { x: (x + width) * size, y: y, index: 1, isInternal: false }, { x: (x + width) * size, y: y + height, index: 4, isInternal: false }, { x: x * size, y: y + height, index: 3, isInternal: false }]
|
||||||
|
Matter.Body.setVertices(this, this.shrinkVertices(1)) //take on harpoon shape
|
||||||
Matter.Body.setVertices(this, vertices) //take on harpoon shape
|
Matter.Body.setVertices(this, vertices) //take on harpoon shape
|
||||||
}
|
}
|
||||||
} else if (Matter.Query.collides(this, [player]).length) { // || (Matter.Query.collides(this, body).length)) {
|
} else if (Matter.Query.collides(this, [player]).length) { // || (Matter.Query.collides(this, body).length)) {
|
||||||
@@ -808,6 +815,20 @@ const level = {
|
|||||||
this.isThere = true
|
this.isThere = true
|
||||||
this.collisionFilter.mask = cat.player | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet
|
this.collisionFilter.mask = cat.player | cat.body | cat.bullet | cat.powerUp | cat.mob | cat.mobBullet
|
||||||
this.fadeCount = this.fadeTime
|
this.fadeCount = this.fadeTime
|
||||||
|
//delete any overlapping blocks
|
||||||
|
const blocks = Matter.Query.collides(this, body)
|
||||||
|
for (let i = 0; i < blocks.length; i++) {
|
||||||
|
if (blocks[i].bodyB !== this) { //dont' delete yourself
|
||||||
|
Matter.Composite.remove(engine.world, blocks[i].bodyB);
|
||||||
|
blocks[i].bodyB.isRemoveMeNow = true
|
||||||
|
for (let i = 1; i < body.length; i++) { //find which index in body array it is and remove from array
|
||||||
|
if (body[i].isRemoveMeNow) {
|
||||||
|
body.splice(i, 1);
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -817,11 +838,11 @@ const level = {
|
|||||||
ctx.moveTo(v[0].x, v[0].y);
|
ctx.moveTo(v[0].x, v[0].y);
|
||||||
for (let i = 1; i < v.length; ++i) ctx.lineTo(v[i].x, v[i].y);
|
for (let i = 1; i < v.length; ++i) ctx.lineTo(v[i].x, v[i].y);
|
||||||
ctx.lineTo(v[0].x, v[0].y);
|
ctx.lineTo(v[0].x, v[0].y);
|
||||||
const color = 220 * (1 - this.fadeCount / this.fadeTime)
|
|
||||||
// ctx.fillStyle = `rgb(${color},220, 200)`
|
|
||||||
// ctx.fillStyle = `rgba(0,220,200,${this.fadeCount/this.fadeTime+0.05})`
|
|
||||||
ctx.fillStyle = "#586370"
|
ctx.fillStyle = "#586370"
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
|
// const color = 220 * (1 - this.fadeCount / this.fadeTime)
|
||||||
|
// ctx.fillStyle = `rgb(${color},220, 200)`
|
||||||
|
// ctx.fillStyle = `rgba(0,220,200,${this.fadeCount/this.fadeTime+0.05})`
|
||||||
// ctx.strokeStyle = `#bff`
|
// ctx.strokeStyle = `#bff`
|
||||||
// ctx.stroke();
|
// ctx.stroke();
|
||||||
},
|
},
|
||||||
@@ -2909,12 +2930,12 @@ const level = {
|
|||||||
},
|
},
|
||||||
ruins() {
|
ruins() {
|
||||||
const vanish = []
|
const vanish = []
|
||||||
level.exit.x = -390;
|
level.exit.x = -850;
|
||||||
level.exit.y = -1835;
|
level.exit.y = -1485;
|
||||||
spawn.mapRect(level.exit.x, level.exit.y + 25, 100, 25);
|
spawn.mapRect(level.exit.x, level.exit.y + 25, 100, 25);
|
||||||
level.setPosToSpawn(-25, -50); //normal spawn
|
level.setPosToSpawn(-900, 225); //normal spawn
|
||||||
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||||
level.defaultZoom = 1800
|
level.defaultZoom = 1500
|
||||||
simulation.zoomTransition(level.defaultZoom)
|
simulation.zoomTransition(level.defaultZoom)
|
||||||
document.body.style.backgroundColor = "#dcdcde";
|
document.body.style.backgroundColor = "#dcdcde";
|
||||||
spawn.debris(-150, -775, 1425, 3); //16 debris per level
|
spawn.debris(-150, -775, 1425, 3); //16 debris per level
|
||||||
@@ -2922,39 +2943,51 @@ const level = {
|
|||||||
spawn.debris(-650, -2100, 575, 2); //16 debris per level
|
spawn.debris(-650, -2100, 575, 2); //16 debris per level
|
||||||
|
|
||||||
//bottom floor
|
//bottom floor
|
||||||
powerUps.spawnStartingPowerUps(1175, -50);
|
//entrance
|
||||||
spawn.mapRect(2475, -1800, 275, 2300);
|
spawn.mapRect(-200, -750, 1500, 100);
|
||||||
spawn.mapRect(-200, -750, 1500, 450);
|
spawn.mapRect(-575, 0, 3275, 500);
|
||||||
spawn.mapRect(150, -425, 1150, 325);
|
spawn.mapRect(-1275, 275, 875, 225);
|
||||||
vanish.push(level.vanish(1300, -225, 200, 225))
|
spawn.mapRect(-1050, 0, 325, 50);
|
||||||
vanish.push(level.vanish(1300, -450, 200, 223))
|
spawn.mapRect(-775, 0, 50, 140);
|
||||||
spawn.mapRect(-700, 0, 3400, 500);
|
vanish.push(level.vanish(-725, 13, 150, 25))
|
||||||
vanish.push(level.vanish(-300, -500, 100, 25))
|
|
||||||
vanish.push(level.vanish(-450, -200, 100, 25))
|
spawn.mapRect(-200, -750, 100, 648);
|
||||||
spawn.bodyRect(-450, -175, 100, 175, 0.7);
|
spawn.mapRect(1200, -750, 100, 648);
|
||||||
spawn.bodyRect(-250, -550, 50, 50, 0.7);
|
vanish.push(level.vanish(-350, -225, 150, 225))
|
||||||
|
vanish.push(level.vanish(-350, -450, 150, 223))
|
||||||
|
spawn.mapRect(2475, -1800, 250, 2300);
|
||||||
|
vanish.push(level.vanish(1300, -225, 150, 225))
|
||||||
|
vanish.push(level.vanish(1300, -450, 150, 223))
|
||||||
|
powerUps.spawnStartingPowerUps(550, -100);
|
||||||
|
|
||||||
|
spawn.mapRect(125, -12, 850, 50);
|
||||||
|
spawn.mapRect(175, -25, 750, 50);
|
||||||
|
|
||||||
|
|
||||||
|
//entrance
|
||||||
|
// vanish.push(level.vanish(-300, -500, 100, 25))
|
||||||
|
// vanish.push(level.vanish(-450, -200, 100, 25))
|
||||||
|
// spawn.bodyRect(-450, -175, 100, 175, 0.7);
|
||||||
|
// spawn.bodyRect(-250, -550, 50, 50, 0.7);
|
||||||
|
|
||||||
//middle floor
|
//middle floor
|
||||||
spawn.bodyRect(215, -1175, 100, 100, 0.3);
|
spawn.bodyRect(215, -1175, 100, 100, 0.3);
|
||||||
spawn.mapRect(-700, -2075, 250, 2575);
|
spawn.mapRect(-1300, -1800, 250, 2300);
|
||||||
|
// spawn.mapRect(-1300, -2075, 250, 2575);
|
||||||
if (Math.random() < 0.5) {
|
if (Math.random() < 0.5) {
|
||||||
spawn.mapRect(550, -1350, 425, 425);
|
spawn.mapRect(500, -1350, 525, 425);
|
||||||
spawn.mapRect(25, -1075, 300, 222);
|
spawn.mapRect(25, -1050, 300, 198);
|
||||||
} else {
|
} else {
|
||||||
spawn.mapRect(25, -1075, 300, 150);
|
spawn.mapRect(500, -1350, 525, 497);
|
||||||
spawn.mapRect(550, -1350, 425, 497);
|
spawn.mapRect(25, -1050, 300, 150);
|
||||||
}
|
}
|
||||||
|
vanish.push(level.vanish(550, -1575, 50, 225))
|
||||||
|
vanish.push(level.vanish(925, -1575, 50, 225))
|
||||||
|
// vanish.push(level.vanish(575, -1575, 375, 225))
|
||||||
|
|
||||||
spawn.bodyRect(225, -850, 50, 100, 0.4);
|
spawn.bodyRect(225, -850, 50, 100, 0.4);
|
||||||
spawn.mapRect(600, -1800, 325, 225);
|
spawn.mapRect(600, -1800, 325, 225);
|
||||||
spawn.mapRect(1900, -1500, 325, 25);
|
spawn.mapRect(1900, -1500, 325, 25);
|
||||||
vanish.push(level.vanish(1100, -1800, 225, 25))
|
|
||||||
vanish.push(level.vanish(1500, -1800, 225, 25))
|
|
||||||
if (simulation.difficulty > 20) vanish.push(level.vanish(975, -2275, 150, 25))
|
|
||||||
if (Math.random() < 0.5) {
|
|
||||||
vanish.push(level.vanish(750, -1575, 25, 225))
|
|
||||||
} else {
|
|
||||||
vanish.push(level.vanish(848, -1575, 75, 225))
|
|
||||||
}
|
|
||||||
spawn.bodyRect(1000, -1825, 250, 20, 0.2);
|
spawn.bodyRect(1000, -1825, 250, 20, 0.2);
|
||||||
if (Math.random() < 0.5) {
|
if (Math.random() < 0.5) {
|
||||||
vanish.push(level.vanish(1400, -1000, 200, 25))
|
vanish.push(level.vanish(1400, -1000, 200, 25))
|
||||||
@@ -2963,69 +2996,60 @@ const level = {
|
|||||||
vanish.push(level.vanish(1400, -1075, 175, 175))
|
vanish.push(level.vanish(1400, -1075, 175, 175))
|
||||||
vanish.push(level.vanish(1575, -1250, 175, 175))
|
vanish.push(level.vanish(1575, -1250, 175, 175))
|
||||||
}
|
}
|
||||||
if (Math.random() < 0.5) {
|
vanish.push(level.vanish(1100, -1800, 225, 25))
|
||||||
vanish.push(level.vanish(750, -2075, 200, 25))
|
vanish.push(level.vanish(1500, -1800, 225, 25))
|
||||||
vanish.push(level.vanish(450, -2425, 200, 25))
|
vanish.push(level.vanish(-50, -1800, 400, 25))
|
||||||
} else {
|
|
||||||
vanish.push(level.vanish(400, -2150, 150, 25))
|
|
||||||
}
|
|
||||||
spawn.bodyRect(2100, -1625, 75, 125, 0.3);
|
|
||||||
vanish.push(level.vanish(100, -2250, 225, 25))
|
|
||||||
if (simulation.difficulty > 20) {
|
|
||||||
vanish.push(level.vanish(-225, -1800, 200, 25))
|
|
||||||
spawn.mapRect(-475, -1800, 250, 25);
|
|
||||||
} else {
|
|
||||||
spawn.mapRect(-475, -1800, 450, 25);
|
|
||||||
}
|
|
||||||
|
|
||||||
spawn.bodyRect(-150, -1825, 200, 20, 0.2);
|
//exit
|
||||||
spawn.bodyRect(175, -2325, 75, 75, 0.3);
|
spawn.mapRect(-1050, -1450, 700, 25);
|
||||||
spawn.mapRect(-475, -2075, 250, 25);
|
spawn.mapRect(-1050, -1800, 525, 25);
|
||||||
spawn.mapRect(-250, -2075, 25, 75);
|
spawn.mapRect(-550, -1800, 25, 200);
|
||||||
|
|
||||||
// level.difficultyIncrease(30) //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.immuneCycle = Infinity //you can't take damage
|
// m.immuneCycle = Infinity //you can't take damage
|
||||||
spawn.randomMob(725, -850, -0.3);
|
// spawn.setSpawnList(); //picks a couple mobs types for a themed random mob spawns
|
||||||
spawn.randomMob(275, -1125, 0.2);
|
// spawn.setSpawnList(); //picks a couple mobs types for a themed random mob spawns
|
||||||
spawn.randomMob(700, -1875, 0);
|
|
||||||
spawn.randomMob(-150, -1975, 0.5);
|
spawn.randomMob(-1175, -1975, -0.4);
|
||||||
spawn.randomMob(2025, -1600, 0.3);
|
spawn.randomMob(275, -1500, -0.3);
|
||||||
spawn.randomMob(1650, -100, 0.2);
|
spawn.randomMob(700, -1875, -0.2);
|
||||||
|
spawn.randomMob(2000, -800, -0.2);
|
||||||
|
spawn.randomMob(2600, -1850, 0);
|
||||||
spawn.randomMob(1425, -525, 0.1);
|
spawn.randomMob(1425, -525, 0.1);
|
||||||
|
spawn.randomMob(2025, -1600, 0.3);
|
||||||
spawn.randomMob(1625, -1875, 0.3);
|
spawn.randomMob(1625, -1875, 0.3);
|
||||||
spawn.randomMob(1125, -850, 0.3)
|
spawn.randomMob(-150, -1975, 0.4);
|
||||||
spawn.randomLevelBoss(2050, -2025)
|
spawn.randomSmallMob(900, -825);
|
||||||
spawn.randomGroup(1750, -650, 0.4)
|
spawn.randomSmallMob(1050, -50);
|
||||||
if (simulation.difficulty > 15) {
|
|
||||||
spawn.randomMob(2600, -1850, 0.2);
|
if (simulation.difficulty > 1) {
|
||||||
spawn.randomMob(850, -1400, 0.2);
|
spawn.randomGroup(750, -2150, -0.8)
|
||||||
spawn.randomMob(2000, -800, -0.1);
|
spawn.randomLevelBoss(2050, -2025)
|
||||||
spawn.randomMob(175, -1125, -0.2);
|
spawn.secondaryBossChance(100, -1500)
|
||||||
spawn.randomGroup(1225, -1475, 0.3);
|
|
||||||
spawn.randomGroup(-375, -2400, 0.3);
|
|
||||||
}
|
}
|
||||||
spawn.secondaryBossChance(100, -1500)
|
|
||||||
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
||||||
|
|
||||||
if (simulation.isHorizontalFlipped) { //flip the map horizontally
|
if (simulation.isHorizontalFlipped) { //flip the map horizontally
|
||||||
level.flipHorizontal(); //only flips map,body,mob,powerUp,cons,consBB, exit
|
level.flipHorizontal(); //only flips map,body,mob,powerUp,cons,consBB, exit
|
||||||
|
level.setPosToSpawn(900, 225); //normal spawn
|
||||||
level.custom = () => {
|
level.custom = () => {
|
||||||
level.playerExitCheck();
|
level.playerExitCheck();
|
||||||
ctx.fillStyle = "#d0d3d9"
|
ctx.fillStyle = "#d0d3d9"
|
||||||
ctx.fillRect(-2500, -1800, 2975, 1825);
|
ctx.fillRect(-2500, -1800, 3575, 2100);
|
||||||
ctx.fillStyle = "#c0c3c9"
|
ctx.fillStyle = "#c0c3c9"
|
||||||
ctx.fillRect(-2075, -1475, 25, 1500);
|
ctx.fillRect(-2075, -1475, 25, 1500);
|
||||||
ctx.fillStyle = "#cff" //exit
|
ctx.fillStyle = "#cff" //exit
|
||||||
ctx.fillRect(225, -2050, 225, 250)
|
ctx.fillRect(550, -1800, 525, 350)
|
||||||
level.exit.draw();
|
level.exit.draw();
|
||||||
level.enter.draw();
|
level.enter.draw();
|
||||||
};
|
};
|
||||||
level.customTopLayer = () => {
|
level.customTopLayer = () => {
|
||||||
//shadow
|
//shadow
|
||||||
ctx.fillStyle = "rgba(0,10,30,0.1)"
|
ctx.fillStyle = "rgba(0,10,30,0.1)"
|
||||||
ctx.fillRect(-1300, -125, 1150, 150)
|
ctx.fillRect(-1300, -650, 1500, 650)
|
||||||
ctx.fillRect(-1300, -325, 1500, 350)
|
ctx.fillRect(725, 50, 325, 225)
|
||||||
ctx.fillRect(-325, -950, 300, 225)
|
ctx.fillRect(-325, -950, 300, 225)
|
||||||
ctx.fillRect(-975, -950, 425, 225);
|
ctx.fillRect(-1025, -1000, 525, 275);
|
||||||
ctx.fillRect(-925, -1600, 325, 275);
|
ctx.fillRect(-925, -1600, 325, 275);
|
||||||
for (let i = 0, len = vanish.length; i < len; i++) vanish[i].query()
|
for (let i = 0, len = vanish.length; i < len; i++) vanish[i].query()
|
||||||
};
|
};
|
||||||
@@ -3034,23 +3058,21 @@ const level = {
|
|||||||
level.custom = () => {
|
level.custom = () => {
|
||||||
level.playerExitCheck();
|
level.playerExitCheck();
|
||||||
ctx.fillStyle = "#d0d3d9"
|
ctx.fillStyle = "#d0d3d9"
|
||||||
ctx.fillRect(-475, -1800, 2975, 1825);
|
ctx.fillRect(-1075, -1800, 3575, 2100);
|
||||||
ctx.fillStyle = "#c0c3c9"
|
ctx.fillStyle = "#c0c3c9"
|
||||||
ctx.fillRect(2050, -1475, 25, 1500);
|
ctx.fillRect(2050, -1475, 25, 1500);
|
||||||
ctx.fillStyle = "#cff" //exit
|
ctx.fillStyle = "#cff" //exit
|
||||||
ctx.fillRect(-450, -2050, 225, 250)
|
ctx.fillRect(-1050, -1800, 525, 350)
|
||||||
|
|
||||||
level.exit.draw();
|
level.exit.draw();
|
||||||
level.enter.draw();
|
level.enter.draw();
|
||||||
};
|
};
|
||||||
level.customTopLayer = () => {
|
level.customTopLayer = () => {
|
||||||
//shadow
|
//shadow
|
||||||
// ctx.fillStyle = "rgba(0,10,30,0.2)"
|
|
||||||
ctx.fillStyle = "rgba(0,10,30,0.1)"
|
ctx.fillStyle = "rgba(0,10,30,0.1)"
|
||||||
ctx.fillRect(150, -125, 1150, 150)
|
ctx.fillRect(-200, -675, 1500, 700)
|
||||||
ctx.fillRect(550, -950, 425, 225);
|
ctx.fillRect(500, -950, 525, 225);
|
||||||
ctx.fillRect(600, -1600, 325, 275);
|
ctx.fillRect(600, -1600, 325, 275);
|
||||||
ctx.fillRect(-200, -325, 1500, 350)
|
ctx.fillRect(-1050, 50, 325, 225)
|
||||||
ctx.fillRect(25, -950, 300, 225)
|
ctx.fillRect(25, -950, 300, 225)
|
||||||
for (let i = 0, len = vanish.length; i < len; i++) vanish[i].query()
|
for (let i = 0, len = vanish.length; i < len; i++) vanish[i].query()
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -286,8 +286,8 @@ const powerUps = {
|
|||||||
if (tech.isCancelDuplication) {
|
if (tech.isCancelDuplication) {
|
||||||
tech.cancelCount++
|
tech.cancelCount++
|
||||||
tech.maxDuplicationEvent()
|
tech.maxDuplicationEvent()
|
||||||
simulation.makeTextLog(`tech.duplicationChance() <span class='color-symbol'>+=</span> ${0.042}`)
|
simulation.makeTextLog(`tech.duplicationChance() <span class='color-symbol'>+=</span> ${0.043}`)
|
||||||
simulation.circleFlare(0.042);
|
simulation.circleFlare(0.043);
|
||||||
}
|
}
|
||||||
if (tech.isCancelRerolls) {
|
if (tech.isCancelRerolls) {
|
||||||
for (let i = 0, len = 5 + 5 * Math.random(); i < len; i++) {
|
for (let i = 0, len = 5 + 5 * Math.random(); i < len; i++) {
|
||||||
|
|||||||
@@ -1918,8 +1918,8 @@ const spawn = {
|
|||||||
me.frictionAir = 0.0067;
|
me.frictionAir = 0.0067;
|
||||||
me.g = 0.0002; //required if using this.gravity
|
me.g = 0.0002; //required if using this.gravity
|
||||||
me.seePlayerFreq = 300;
|
me.seePlayerFreq = 300;
|
||||||
const springStiffness = 0.0001; //simulation.difficulty
|
const springStiffness = 0.00008; //simulation.difficulty
|
||||||
const springDampening = 0.005;
|
const springDampening = 0.01;
|
||||||
|
|
||||||
me.springTarget = {
|
me.springTarget = {
|
||||||
x: me.position.x,
|
x: me.position.x,
|
||||||
@@ -2006,7 +2006,7 @@ const spawn = {
|
|||||||
this.cons2.length = 100 + 1.5 * this.radius;
|
this.cons2.length = 100 + 1.5 * this.radius;
|
||||||
|
|
||||||
this.isInvulnerable = false
|
this.isInvulnerable = false
|
||||||
this.invulnerabilityCountDown = 45 + Math.max(0, 70 - simulation.difficulty)
|
this.invulnerabilityCountDown = 60 + Math.max(0, 70 - simulation.difficulty * 0.5)
|
||||||
this.damageReduction = this.startingDamageReduction
|
this.damageReduction = this.startingDamageReduction
|
||||||
for (let i = 0; i < this.babyList.length; i++) {
|
for (let i = 0; i < this.babyList.length; i++) {
|
||||||
if (this.babyList[i].alive) this.babyList[i].damageReduction = this.startingDamageReduction
|
if (this.babyList[i].alive) this.babyList[i].damageReduction = this.startingDamageReduction
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ const tech = {
|
|||||||
return dmg * tech.slowFire * tech.aimDamage
|
return dmg * tech.slowFire * tech.aimDamage
|
||||||
},
|
},
|
||||||
duplicationChance() {
|
duplicationChance() {
|
||||||
return Math.max(0, (tech.isPowerUpsVanish ? 0.12 : 0) + (tech.isStimulatedEmission ? 0.15 : 0) + tech.cancelCount * 0.042 + tech.duplicateChance + m.duplicateChance + tech.wormDuplicate + tech.cloakDuplication + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0))
|
return Math.max(0, (tech.isPowerUpsVanish ? 0.12 : 0) + (tech.isStimulatedEmission ? 0.15 : 0) + tech.cancelCount * 0.043 + tech.duplicateChance + m.duplicateChance + tech.wormDuplicate + tech.cloakDuplication + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0))
|
||||||
},
|
},
|
||||||
isScaleMobsWithDuplication: false,
|
isScaleMobsWithDuplication: false,
|
||||||
maxDuplicationEvent() {
|
maxDuplicationEvent() {
|
||||||
@@ -3194,7 +3194,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "futures exchange",
|
name: "futures exchange",
|
||||||
description: "clicking <strong style = 'font-size:150%;'>×</strong> to <strong>cancel</strong> a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong><br>adds <strong>4.2%</strong> power up <strong class='color-dup'>duplication</strong> chance",
|
description: "clicking <strong style = 'font-size:150%;'>×</strong> to <strong>cancel</strong> a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong><br>adds <strong>4.3%</strong> power up <strong class='color-dup'>duplication</strong> chance",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -3214,7 +3214,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "replication",
|
name: "replication",
|
||||||
description: "<strong>10%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong><br><strong>+40%</strong> <strong class='color-j'>JUNK</strong> to the potential <strong class='color-m'>tech</strong> pool",
|
description: "<strong>10%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong><br><strong>+30%</strong> <strong class='color-j'>JUNK</strong> to the potential <strong class='color-m'>tech</strong> pool",
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -3227,7 +3227,7 @@ const tech = {
|
|||||||
tech.duplicateChance += 0.1
|
tech.duplicateChance += 0.1
|
||||||
powerUps.setDupChance(); //needed after adjusting duplication chance
|
powerUps.setDupChance(); //needed after adjusting duplication chance
|
||||||
if (!build.isExperimentSelection && !simulation.isTextLogOpen) simulation.circleFlare(0.1);
|
if (!build.isExperimentSelection && !simulation.isTextLogOpen) simulation.circleFlare(0.1);
|
||||||
this.refundAmount += tech.addJunkTechToPool(0.4)
|
this.refundAmount += tech.addJunkTechToPool(0.3)
|
||||||
},
|
},
|
||||||
refundAmount: 0,
|
refundAmount: 0,
|
||||||
remove() {
|
remove() {
|
||||||
|
|||||||
24
todo.txt
24
todo.txt
@@ -1,14 +1,30 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
new level: ruins, let me know about combat and platforming difficulty balance
|
ruins level is larger, more balanced for combat, with easier platforming
|
||||||
|
|
||||||
vanish elements now shrink horizontally
|
vanish element
|
||||||
now colored dark blue to not look like mobs
|
vanish slower if they are wider
|
||||||
|
delete blocks caught inside it as it returns
|
||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
vanish element
|
set damage reduction equal to how much mana you have below 95
|
||||||
|
override all other harm reduction effects?
|
||||||
|
|
||||||
|
make shields not able to get radioactive
|
||||||
|
|
||||||
|
wormhole tech - pause while placing the wormhole
|
||||||
|
tech requires cache - ammo automatically regenerates every second, ammo is capped even lower
|
||||||
|
|
||||||
|
new level climb
|
||||||
|
3 vertical climb sections
|
||||||
|
use vanish elements
|
||||||
|
|
||||||
|
ruins: mobs can see you too easily at the start
|
||||||
|
|
||||||
|
vanish element:
|
||||||
grow as it returns?
|
grow as it returns?
|
||||||
|
option to shrink in vertical
|
||||||
|
|
||||||
pull bullets back to player with crouch/field
|
pull bullets back to player with crouch/field
|
||||||
bullets type?: drones, spores, missiles,
|
bullets type?: drones, spores, missiles,
|
||||||
|
|||||||
Reference in New Issue
Block a user