defense HUD
added defense bar to HUD new community map commandeer by Desboot bug fixes
This commit is contained in:
@@ -24,6 +24,7 @@
|
|||||||
<div id="fade-out"></div>
|
<div id="fade-out"></div>
|
||||||
<div id="health-bg"></div>
|
<div id="health-bg"></div>
|
||||||
<div id="health"></div>
|
<div id="health"></div>
|
||||||
|
<div id="defense"></div>
|
||||||
<div id="dmg"></div>
|
<div id="dmg"></div>
|
||||||
<div id='construct'></div>
|
<div id='construct'></div>
|
||||||
<canvas id="canvas"></canvas>
|
<canvas id="canvas"></canvas>
|
||||||
@@ -84,7 +85,6 @@
|
|||||||
<datalist id="ban-suggest">
|
<datalist id="ban-suggest">
|
||||||
<option value="testChamber">
|
<option value="testChamber">
|
||||||
<option value="lock">
|
<option value="lock">
|
||||||
<option value="factory">
|
|
||||||
<option value="sewers">
|
<option value="sewers">
|
||||||
<option value="satellite">
|
<option value="satellite">
|
||||||
<option value="aerie">
|
<option value="aerie">
|
||||||
@@ -108,6 +108,7 @@
|
|||||||
<option value="yingYang">
|
<option value="yingYang">
|
||||||
<option value="basement">
|
<option value="basement">
|
||||||
<option value="stronghold">
|
<option value="stronghold">
|
||||||
|
<option value="commandeer">
|
||||||
<option value="stereoMadness">
|
<option value="stereoMadness">
|
||||||
<option value="house">
|
<option value="house">
|
||||||
<option value="dripp">
|
<option value="dripp">
|
||||||
|
|||||||
@@ -6690,14 +6690,13 @@ const b = {
|
|||||||
if (this.dmgCoolDown < 1) {
|
if (this.dmgCoolDown < 1) {
|
||||||
q = Matter.Query.point(mob, this.position) // check if inside a mob
|
q = Matter.Query.point(mob, this.position) // check if inside a mob
|
||||||
for (let i = 0; i < q.length; i++) {
|
for (let i = 0; i < q.length; i++) {
|
||||||
this.dmgCoolDown = 5 + Math.floor(11 * Math.random() * Math.sqrt(b.fireCDscale));
|
this.dmgCoolDown = 5 + Math.floor(7 * Math.random() * b.fireCDscale);
|
||||||
let dmg = this.dmg
|
let dmg = this.dmg
|
||||||
q[i].damage(dmg);
|
q[i].damage(dmg);
|
||||||
if (q[i].alive) {
|
if (q[i].alive) {
|
||||||
q[i].foundPlayer();
|
q[i].foundPlayer();
|
||||||
Matter.Body.setVelocity(q[i], Vector.mult(q[i].velocity, 0.9))
|
Matter.Body.setVelocity(q[i], Vector.mult(q[i].velocity, 0.9))
|
||||||
}
|
}
|
||||||
|
|
||||||
// this.endCycle = 0; //bullet ends cycle after doing damage
|
// this.endCycle = 0; //bullet ends cycle after doing damage
|
||||||
if (q[i].damageReduction) {
|
if (q[i].damageReduction) {
|
||||||
simulation.drawList.push({ //add dmg to draw queue
|
simulation.drawList.push({ //add dmg to draw queue
|
||||||
|
|||||||
61
js/index.js
61
js/index.js
@@ -335,7 +335,7 @@ const build = {
|
|||||||
<span style="float: right;">press ${input.key.pause} to resume</span>
|
<span style="float: right;">press ${input.key.pause} to resume</span>
|
||||||
<br>
|
<br>
|
||||||
<br><strong class='color-d'>damage</strong>: ${((tech.damageFromTech())).toPrecision(4)} difficulty: ${((m.dmgScale)).toPrecision(4)}
|
<br><strong class='color-d'>damage</strong>: ${((tech.damageFromTech())).toPrecision(4)} difficulty: ${((m.dmgScale)).toPrecision(4)}
|
||||||
<br><strong class='color-defense'>defense</strong>: ${tech.isEnergyHealth ? (1-Math.pow(m.harmReduction(), 0.13)).toPrecision(5) : (1-m.harmReduction()).toPrecision(5) } difficulty: ${(1/simulation.dmgScale).toPrecision(4)}
|
<br><strong class='color-defense'>defense</strong>: ${tech.isEnergyHealth ? (1-Math.pow(m.defense(), 0.13)).toPrecision(5) : (1-m.defense()).toPrecision(5) } difficulty: ${(1/simulation.dmgScale).toPrecision(4)}
|
||||||
<br><strong><em>fire rate</em></strong>: ${((1-b.fireCDscale)*100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
<br><strong><em>fire rate</em></strong>: ${((1-b.fireCDscale)*100).toFixed(b.fireCDscale < 0.1 ? 2 : 0)}%
|
||||||
${tech.duplicationChance() ? `<br><strong class='color-dup'>duplication</strong>: ${(tech.duplicationChance()*100).toFixed(0)}%`: ""}
|
${tech.duplicationChance() ? `<br><strong class='color-dup'>duplication</strong>: ${(tech.duplicationChance()*100).toFixed(0)}%`: ""}
|
||||||
${m.coupling ? `<br><strong class='color-coupling'>coupling</strong>: ${(m.coupling).toFixed(2)} <span style = 'font-size:90%;'>`+m.couplingDescription()+"</span>": ""}
|
${m.coupling ? `<br><strong class='color-coupling'>coupling</strong>: ${(m.coupling).toFixed(2)} <span style = 'font-size:90%;'>`+m.couplingDescription()+"</span>": ""}
|
||||||
@@ -444,6 +444,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
document.getElementById("field").style.display = "none"
|
document.getElementById("field").style.display = "none"
|
||||||
document.getElementById("health").style.display = "none"
|
document.getElementById("health").style.display = "none"
|
||||||
document.getElementById("health-bg").style.display = "none"
|
document.getElementById("health-bg").style.display = "none"
|
||||||
|
document.getElementById("defense").style.display = "none"
|
||||||
|
|
||||||
//show in game console
|
//show in game console
|
||||||
// document.getElementById("text-log").style.display = "inline"
|
// document.getElementById("text-log").style.display = "inline"
|
||||||
@@ -461,6 +462,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
document.getElementById("health").style.display = "inline"
|
document.getElementById("health").style.display = "inline"
|
||||||
document.getElementById("health-bg").style.display = "inline"
|
document.getElementById("health-bg").style.display = "inline"
|
||||||
}
|
}
|
||||||
|
document.getElementById("defense").style.display = "inline"
|
||||||
// document.body.style.overflow = "hidden"
|
// document.body.style.overflow = "hidden"
|
||||||
document.getElementById("pause-grid-left").style.display = "none"
|
document.getElementById("pause-grid-left").style.display = "none"
|
||||||
document.getElementById("pause-grid-right").style.display = "none"
|
document.getElementById("pause-grid-right").style.display = "none"
|
||||||
@@ -728,6 +730,7 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>": ""}
|
|||||||
b.activeGun = null;
|
b.activeGun = null;
|
||||||
b.inventoryGun = 0;
|
b.inventoryGun = 0;
|
||||||
simulation.makeGunHUD();
|
simulation.makeGunHUD();
|
||||||
|
m.resetSkin()
|
||||||
tech.setupAllTech();
|
tech.setupAllTech();
|
||||||
build.populateGrid();
|
build.populateGrid();
|
||||||
document.getElementById("field-0").classList.add("build-field-selected");
|
document.getElementById("field-0").classList.add("build-field-selected");
|
||||||
@@ -1700,3 +1703,59 @@ function cycle() {
|
|||||||
simulation.loop();
|
simulation.loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// function cycle() {
|
||||||
|
// if (!simulation.paused) requestAnimationFrame(cycle);
|
||||||
|
// const now = Date.now();
|
||||||
|
// const elapsed = now - simulation.then; // calc elapsed time since last loop
|
||||||
|
// if (elapsed > simulation.fpsInterval) { // if enough time has elapsed, draw the next frame
|
||||||
|
// simulation.then = now - (elapsed % simulation.fpsInterval); // Get ready for next frame by setting then=now. Also, adjust for fpsInterval not being multiple of 16.67
|
||||||
|
|
||||||
|
// simulation.cycle++; //tracks game cycles
|
||||||
|
// m.cycle++; //tracks player cycles //used to alow time to stop for everything, but the player
|
||||||
|
// if (simulation.clearNow) {
|
||||||
|
// simulation.clearNow = false;
|
||||||
|
// simulation.clearMap();
|
||||||
|
// level.start();
|
||||||
|
// }
|
||||||
|
// simulation.loop();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// let timeStart = performance.now()
|
||||||
|
// //0, 16.6666666666, 33.333333333333, 50.000000000
|
||||||
|
// function cycle(timestamp) {
|
||||||
|
// if (!simulation.paused) requestAnimationFrame(cycle);
|
||||||
|
// if (timestamp - timeStart > 0) { //simulation.fpsInterval) { // if enough time has elapsed, draw the next frame
|
||||||
|
// console.log(timestamp - timeStart)
|
||||||
|
// timeStart = timestamp
|
||||||
|
// simulation.cycle++; //tracks game cycles
|
||||||
|
// m.cycle++; //tracks player cycles //used to alow time to stop for everything, but the player
|
||||||
|
// if (simulation.clearNow) {
|
||||||
|
// simulation.clearNow = false;
|
||||||
|
// simulation.clearMap();
|
||||||
|
// level.start();
|
||||||
|
// }
|
||||||
|
// simulation.loop();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// let count = 1
|
||||||
|
// let timeStart = performance.now()
|
||||||
|
// const cycle = (timestamp) => {
|
||||||
|
// // if (timeStart === undefined) timeStart = timestamp
|
||||||
|
// // console.log(timestamp, timeStart)
|
||||||
|
// if (timestamp - timeStart > tech.brainStormDelay * count) {
|
||||||
|
// count++
|
||||||
|
// powerUps.tech.effect();
|
||||||
|
// document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay
|
||||||
|
// document.body.style.cursor = "auto";
|
||||||
|
// document.getElementById("choose-grid").style.transitionDuration = "0s";
|
||||||
|
// }
|
||||||
|
// if (count < 5 && simulation.isChoosing) {
|
||||||
|
// requestAnimationFrame(cycle);
|
||||||
|
// } else {
|
||||||
|
// tech.isBrainstormActive = false
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// requestAnimationFrame(cycle);
|
||||||
803
js/level.js
803
js/level.js
@@ -10,7 +10,7 @@ const level = {
|
|||||||
// playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"],
|
// playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"],
|
||||||
//see level.populateLevels: (intro, ... , reservoir or factory, reactor, ... , gauntlet, final) added later
|
//see level.populateLevels: (intro, ... , reservoir or factory, reactor, ... , gauntlet, final) added later
|
||||||
playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock"],
|
playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock"],
|
||||||
communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard", "stereoMadness", "yingYang", "staircase", "fortress"],
|
communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard", "stereoMadness", "yingYang", "staircase", "fortress", "commandeer"],
|
||||||
trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon"],
|
trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon"],
|
||||||
levels: [],
|
levels: [],
|
||||||
start() {
|
start() {
|
||||||
@@ -27,23 +27,22 @@ const level = {
|
|||||||
// m.immuneCycle = Infinity //you can't take damage
|
// m.immuneCycle = Infinity //you can't take damage
|
||||||
// tech.tech[297].frequency = 100
|
// tech.tech[297].frequency = 100
|
||||||
// m.couplingChange(5)
|
// m.couplingChange(5)
|
||||||
// m.setField("time dilation") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave plasma torch
|
// m.setField("negative mass") //molecular assembler standing wave time dilation perfect diamagnetism metamaterial cloaking wormhole negative mass pilot wave plasma torch
|
||||||
// simulation.molecularMode = 2
|
// simulation.molecularMode = 2
|
||||||
// m.damage(0.1);
|
// m.damage(0.1);
|
||||||
// b.giveGuns("nail gun") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
// b.giveGuns("nail gun") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
||||||
// b.giveGuns("wave") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
// b.giveGuns("wave") //0 nail gun 1 shotgun 2 super balls 3 wave 4 missiles 5 grenades 6 spores 7 drones 8 foam 9 harpoon 10 mine 11 laser
|
||||||
// b.guns[3].ammo = 100000000
|
// b.guns[3].ammo = 100000000
|
||||||
// tech.giveTech("propagation")
|
// tech.giveTech("tungsten carbide")
|
||||||
// tech.giveTech("amplitude")
|
// tech.giveTech("diaphragm")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("bound state")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("mass-energy equivalence")
|
||||||
// for (let i = 0; i < 1; ++i) tech.giveTech("Higgs mechanism")
|
// for (let i = 0; i < 1; ++i) tech.giveTech("decorrelation")
|
||||||
// for (let i = 0; i < 1; i++) tech.giveTech("frequency")
|
// for (let i = 0; i < 1; i++) tech.giveTech("gun turret")
|
||||||
// for (let i = 0; i < 1; i++) tech.giveTech("phonon")
|
// for (let i = 0; i < 1; i++) tech.giveTech("decorrelation")
|
||||||
// for (let i = 0; i < 3; i++) powerUps.directSpawn(450, -50, "tech");
|
// for (let i = 0; i < 3; i++) powerUps.directSpawn(450, -50, "tech");
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "boost");
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "coupling");
|
||||||
// level.factory();
|
// level.commandeer();
|
||||||
// level.testing();
|
|
||||||
// spawn.nodeGroup(1200, -300, "starter")
|
// spawn.nodeGroup(1200, -300, "starter")
|
||||||
// spawn.mantisBoss(1900, -500)
|
// spawn.mantisBoss(1900, -500)
|
||||||
// spawn.sneakBoss(1900, -500)
|
// spawn.sneakBoss(1900, -500)
|
||||||
@@ -56,7 +55,6 @@ const level = {
|
|||||||
// tech.tech[322].frequency = 100
|
// tech.tech[322].frequency = 100
|
||||||
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
// spawn.tetherBoss(1900, -500, { x: 1900, y: -500 })
|
||||||
// for (let i = 0; i < 40; ++i) tech.giveTech()
|
// for (let i = 0; i < 40; ++i) tech.giveTech()
|
||||||
// for (let i = 0; i < 13; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "research");
|
|
||||||
level[simulation.isTraining ? "walk" : "intro"]() //normal starting level ************************************************
|
level[simulation.isTraining ? "walk" : "intro"]() //normal starting level ************************************************
|
||||||
|
|
||||||
// simulation.isAutoZoom = false; //look in close
|
// simulation.isAutoZoom = false; //look in close
|
||||||
@@ -65,6 +63,7 @@ const level = {
|
|||||||
|
|
||||||
// for (let i = 0; i < 2; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "tech");
|
// for (let i = 0; i < 2; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "tech");
|
||||||
// for (let i = 0; i < 2; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "gun");
|
// for (let i = 0; i < 2; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "gun");
|
||||||
|
// for (let i = 0; i < 13; ++i) powerUps.directSpawn(m.pos.x + 50 * Math.random(), m.pos.y + 50 * Math.random(), "research");
|
||||||
// for (let i = 0; i < 2; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "field", false);
|
// for (let i = 0; i < 2; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "field", false);
|
||||||
|
|
||||||
//lore testing
|
//lore testing
|
||||||
@@ -259,6 +258,7 @@ const level = {
|
|||||||
level.disableExit = true
|
level.disableExit = true
|
||||||
document.getElementById("health").style.display = "none"
|
document.getElementById("health").style.display = "none"
|
||||||
document.getElementById("health-bg").style.display = "none"
|
document.getElementById("health-bg").style.display = "none"
|
||||||
|
document.getElementById("defense").style.display = "none"
|
||||||
document.getElementById("text-log").style.display = "none"
|
document.getElementById("text-log").style.display = "none"
|
||||||
document.getElementById("fade-out").style.opacity = 1; //slowly fades out
|
document.getElementById("fade-out").style.opacity = 1; //slowly fades out
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
@@ -695,6 +695,7 @@ const level = {
|
|||||||
this.frictionAir = friction.up
|
this.frictionAir = friction.up
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Matter.Body.setVelocity(this, { x: 0, y: this.velocity.y });
|
||||||
}
|
}
|
||||||
//edge limits
|
//edge limits
|
||||||
if (this.position.y < maxHeight) {
|
if (this.position.y < maxHeight) {
|
||||||
@@ -713,10 +714,7 @@ const level = {
|
|||||||
x: this.holdX,
|
x: this.holdX,
|
||||||
y: this.position.y
|
y: this.position.y
|
||||||
});
|
});
|
||||||
Matter.Body.setVelocity(this, {
|
|
||||||
x: 0,
|
|
||||||
y: this.velocity.y
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
off() {
|
off() {
|
||||||
Matter.Body.setPosition(this, {
|
Matter.Body.setPosition(this, {
|
||||||
@@ -3406,7 +3404,7 @@ const level = {
|
|||||||
movers.push(level.mover(125, -140, 925, 35, moveSpeed))
|
movers.push(level.mover(125, -140, 925, 35, moveSpeed))
|
||||||
movers.push(level.mover(1100, -437, 1100, 35, moveSpeed))
|
movers.push(level.mover(1100, -437, 1100, 35, moveSpeed))
|
||||||
movers.push(level.mover(2000, -600, 850, 35, moveSpeed))
|
movers.push(level.mover(2000, -600, 850, 35, moveSpeed))
|
||||||
const moveSpeedStopGo = 7
|
const moveSpeedStopGo = 8
|
||||||
movers.push(level.mover(2700, -200, 3600, 35, 0))
|
movers.push(level.mover(2700, -200, 3600, 35, 0))
|
||||||
const leftMoverSpeed = 6
|
const leftMoverSpeed = 6
|
||||||
movers.push(level.mover(6750, -450, 425, 350, leftMoverSpeed))
|
movers.push(level.mover(6750, -450, 425, 350, leftMoverSpeed))
|
||||||
@@ -3414,14 +3412,15 @@ const level = {
|
|||||||
movers.push(level.mover(6750, -1075, 425, 50, -leftMoverSpeed))
|
movers.push(level.mover(6750, -1075, 425, 50, -leftMoverSpeed))
|
||||||
movers.push(level.mover(5525, -1075, 450, 50, leftMoverSpeed))
|
movers.push(level.mover(5525, -1075, 450, 50, leftMoverSpeed))
|
||||||
movers.push(level.mover(7175, -215, 2275, 50, 3))
|
movers.push(level.mover(7175, -215, 2275, 50, 3))
|
||||||
|
movers.push(level.mover(6475, -215, 275, 100, -3))
|
||||||
|
|
||||||
const trains = []
|
const trains = []
|
||||||
trains.push(level.transport(6275, -2100, 600, 50, 8 + simulation.difficultyMode))
|
trains.push(level.transport(6275, -2100, 600, 50, 8 + simulation.difficultyMode))
|
||||||
trains.push(level.transport(6275, -2425, 600, 50, -8 - simulation.difficultyMode))
|
trains.push(level.transport(6275, -2425, 600, 50, -8 - simulation.difficultyMode))
|
||||||
|
|
||||||
const lasers = []
|
const lasers = []
|
||||||
const laserX = 3317 //3882 - 1130 / 2
|
const laserX = 3390 //3882 - 1130 / 2
|
||||||
const laserGap = 1130
|
const laserGap = 1295 //1130
|
||||||
lasers.push(level.hazard(laserX, -500, 6, 300, 0.4))
|
lasers.push(level.hazard(laserX, -500, 6, 300, 0.4))
|
||||||
lasers.push(level.hazard(laserX + laserGap, -500, 6, 300, 0.4))
|
lasers.push(level.hazard(laserX + laserGap, -500, 6, 300, 0.4))
|
||||||
lasers.push(level.hazard(laserX + laserGap * 2, -500, 6, 300, 0.4))
|
lasers.push(level.hazard(laserX + laserGap * 2, -500, 6, 300, 0.4))
|
||||||
@@ -3551,7 +3550,6 @@ const level = {
|
|||||||
ctx.fillStyle = "rgba(0,0,0,0.1)"
|
ctx.fillStyle = "rgba(0,0,0,0.1)"
|
||||||
ctx.fillRect(2400, -1650, 7050, 2750) //right side
|
ctx.fillRect(2400, -1650, 7050, 2750) //right side
|
||||||
ctx.fillRect(4950, -3075, 3225, 1425);
|
ctx.fillRect(4950, -3075, 3225, 1425);
|
||||||
ctx.fillStyle = "rgba(0,0,0,0.1)"
|
|
||||||
ctx.beginPath()
|
ctx.beginPath()
|
||||||
ctx.moveTo(2407, -576);
|
ctx.moveTo(2407, -576);
|
||||||
ctx.lineTo(2000, -573)
|
ctx.lineTo(2000, -573)
|
||||||
@@ -3565,9 +3563,7 @@ const level = {
|
|||||||
ctx.lineTo(2452, 65)
|
ctx.lineTo(2452, 65)
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
} else {
|
} else {
|
||||||
for (let i = 0; i < trains.length; i++) {
|
for (let i = 0; i < trains.length; i++) trains[i].draw()
|
||||||
trains[i].draw()
|
|
||||||
}
|
|
||||||
ctx.beginPath()
|
ctx.beginPath()
|
||||||
ctx.moveTo(2526, -589);
|
ctx.moveTo(2526, -589);
|
||||||
ctx.lineTo(2531, -597)
|
ctx.lineTo(2531, -597)
|
||||||
@@ -3580,7 +3576,6 @@ const level = {
|
|||||||
ctx.lineTo(2521, 1100)
|
ctx.lineTo(2521, 1100)
|
||||||
ctx.fillStyle = "rgba(0,0,0,0.1)"
|
ctx.fillStyle = "rgba(0,0,0,0.1)"
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
ctx.fillStyle = "rgba(0,0,0,0.1)"
|
|
||||||
ctx.fillRect(-100, -1650, 2625, 2750) //left side
|
ctx.fillRect(-100, -1650, 2625, 2750) //left side
|
||||||
for (let i = 0; i < lasers.length; i++) lasers[i].opticalQuery()
|
for (let i = 0; i < lasers.length; i++) lasers[i].opticalQuery()
|
||||||
}
|
}
|
||||||
@@ -3605,6 +3600,8 @@ const level = {
|
|||||||
spawn.mapRect(4975, -1087, 550, 62);
|
spawn.mapRect(4975, -1087, 550, 62);
|
||||||
spawn.mapRect(4975, -1100, 500, 75);
|
spawn.mapRect(4975, -1100, 500, 75);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spawn.mapRect(7875, -1100, 175, 25); //right 3 hop stairs
|
spawn.mapRect(7875, -1100, 175, 25); //right 3 hop stairs
|
||||||
spawn.mapRect(8075, -1450, 200, 25);
|
spawn.mapRect(8075, -1450, 200, 25);
|
||||||
spawn.mapRect(7675, -1825, 375, 25);
|
spawn.mapRect(7675, -1825, 375, 25);
|
||||||
@@ -3815,6 +3812,340 @@ const level = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
map() {
|
||||||
|
|
||||||
|
const elevator = level.elevator(-80.4, -931.6, 180, 50, -1550)
|
||||||
|
15900 && player.position.x < 16300 && player.position.y > -960.2
|
||||||
|
const slime = level.hazard(15900, -960, 400, 6000);
|
||||||
|
const slime2 = level.hazard(15147.2, -1782.4, 2000, 822);
|
||||||
|
const boost1 = level.boost(5950, -20, 700)
|
||||||
|
const boost2 = level.boost(21088, -1672, 700)
|
||||||
|
const boost3 = level.boost(19390, -31, 1700)
|
||||||
|
const boost4 = level.boost(19390, -31, 1700)
|
||||||
|
const boost5 = level.boost(17274, -1242, 1000)
|
||||||
|
const portal = level.portal({ x: 443, y: -1636 }, Math.PI, { x: 21391.9, y: -1806.3 }, -Math.PI)
|
||||||
|
const portal2 = level.portal({ x: 16838.3, y: -626.7 }, Math.PI, { x: 16882.8, y: -2566.5 }, -Math.PI)
|
||||||
|
const buttonDoor = level.button(21889, -10)
|
||||||
|
const door = level.door(19119, -2133, 110, 510, 480)
|
||||||
|
const buttonDoor2 = level.button(18711, -2210)
|
||||||
|
const door2 = level.door(17041, -412, 110, 510, 480)
|
||||||
|
const buttonDoor3 = level.button(20456.6, -1636.2)
|
||||||
|
const door3 = level.door(20238, -781.4, 88, 452, 412)
|
||||||
|
//y=-1485
|
||||||
|
|
||||||
|
simulation.enableConstructMode()
|
||||||
|
level.setPosToSpawn(0, -50); //normal spawn
|
||||||
|
level.exit.x = 15316;
|
||||||
|
level.exit.y = -84;
|
||||||
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20); //bump for level entrance
|
||||||
|
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 20); //bump for level exit
|
||||||
|
level.defaultZoom = 1800
|
||||||
|
simulation.zoomTransition(level.defaultZoom)
|
||||||
|
document.body.style.backgroundColor = "#001738";
|
||||||
|
color.map = "#444" //custom map color
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
level.custom = () => {
|
||||||
|
//spawn.mapRect(22330, -2688.75, 400, 800);
|
||||||
|
//spawn.mapRect(22330, -1793.5, 400, 800);//-46.25*2=-92.5
|
||||||
|
//spawn.mapRect(22330, -804.25, 400, 800);//-46.25*3
|
||||||
|
|
||||||
|
ctx.fillStyle = "rgba(63,247,251,0.8)"
|
||||||
|
ctx.fillRect(22330, -2713.75, 550, 700) //15845.0, -1262.2
|
||||||
|
ctx.fillRect(22330, -1743.5, 550, 700)
|
||||||
|
ctx.fillRect(22330, -754.25, 550, 700)
|
||||||
|
ctx.fillRect(15845.0, -1262.2, 550, 300)
|
||||||
|
ctx.fillStyle = "rgba(235,235,235,0.9)"
|
||||||
|
ctx.fillRect(-192, -1973, 6484, 2071)
|
||||||
|
ctx.fillRect(15109.5, -2867.5, 7284, 2971)
|
||||||
|
ctx.fillStyle = "rgba(35,35,35,0.8)"
|
||||||
|
ctx.fillRect(15145.9, -960, 200, 25)
|
||||||
|
|
||||||
|
ctx.fillStyle = "rgba(255,255,255,0.9)"
|
||||||
|
ctx.fillRect(-677.3, -610.9, 15, 15)
|
||||||
|
ctx.fillRect(-910.4, 458.3, 15, 15)
|
||||||
|
ctx.fillRect(-1029.0, 713.7, 15, 15)
|
||||||
|
ctx.fillRect(42.6, 1332.2, 15, 15)
|
||||||
|
ctx.fillRect(277.3, 751.8, 15, 15)
|
||||||
|
ctx.fillRect(797.1, 553.2, 15, 15)
|
||||||
|
ctx.fillRect(-1458.9, 340.9, 15, 15)
|
||||||
|
ctx.fillRect(-1780.0, -54.6, 15, 15)
|
||||||
|
ctx.fillRect(-1260.3, -686.4, 15, 15)
|
||||||
|
ctx.fillRect(-2064.3, -394.6, 15, 15)
|
||||||
|
ctx.fillRect(-1815.7, 1156.2, 15, 15)
|
||||||
|
ctx.fillRect(-1998.1, 1118.4, 15, 15)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
buttonDoor.query();
|
||||||
|
buttonDoor.draw();
|
||||||
|
buttonDoor2.query();
|
||||||
|
buttonDoor2.draw();
|
||||||
|
buttonDoor3.query();
|
||||||
|
buttonDoor3.draw();
|
||||||
|
slime.query();
|
||||||
|
slime2.query();
|
||||||
|
|
||||||
|
ctx.fillStyle = `hsla(160, 100%, 43%,${0.3+0.07*Math.random()})`
|
||||||
|
ctx.fillRect(15900 + 400 * Math.random(), -1360, 2, 6000)
|
||||||
|
if (buttonDoor.isUp) {
|
||||||
|
door.isClosing = true
|
||||||
|
} else {
|
||||||
|
door.isClosing = false
|
||||||
|
}
|
||||||
|
if (buttonDoor2.isUp) {
|
||||||
|
door2.isClosing = true
|
||||||
|
} else {
|
||||||
|
door2.isClosing = false
|
||||||
|
}
|
||||||
|
if (buttonDoor3.isUp) {
|
||||||
|
door3.isClosing = true
|
||||||
|
} else {
|
||||||
|
door3.isClosing = false
|
||||||
|
}
|
||||||
|
door.openClose();
|
||||||
|
door2.openClose();
|
||||||
|
door3.openClose();
|
||||||
|
portal[2].query()
|
||||||
|
portal[3].query()
|
||||||
|
portal2[2].query()
|
||||||
|
portal2[3].query()
|
||||||
|
|
||||||
|
boost1.query();
|
||||||
|
boost2.query();
|
||||||
|
boost3.query();
|
||||||
|
boost4.query();
|
||||||
|
boost5.query();
|
||||||
|
level.exit.drawAndCheck();
|
||||||
|
level.enter.draw();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
level.customTopLayer = () => {
|
||||||
|
door.draw();
|
||||||
|
door2.draw();
|
||||||
|
door3.draw();
|
||||||
|
|
||||||
|
portal[0].draw();
|
||||||
|
portal[1].draw();
|
||||||
|
portal[2].draw();
|
||||||
|
portal[3].draw();
|
||||||
|
portal2[0].draw();
|
||||||
|
portal2[1].draw();
|
||||||
|
portal2[2].draw();
|
||||||
|
portal2[3].draw();
|
||||||
|
elevator.move()
|
||||||
|
|
||||||
|
if (player.position.x > 15900 && player.position.x < 16300 && player.position.y > -1360.2) {
|
||||||
|
Matter.Body.setVelocity(player, {
|
||||||
|
x: player.velocity.x,
|
||||||
|
y: player.velocity.y + 10
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
|
||||||
|
Matter.Body.setVelocity(player, {
|
||||||
|
x: player.velocity.x,
|
||||||
|
y: player.velocity.y - 0.2
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//1273.2, -1404.7
|
||||||
|
|
||||||
|
//first ship base
|
||||||
|
spawn.mapRect(-300, 0, 6684, 100); //lower floor
|
||||||
|
spawn.mapRect(-300, -2071, 154, 2071); //far right wall
|
||||||
|
spawn.mapRect(2511, -300, 1309, 308); //left big block
|
||||||
|
spawn.mapRect(3820, -184, 1309, 184); //right big block
|
||||||
|
spawn.mapRect(-300, -739, 2549, 100); //upper right floor
|
||||||
|
spawn.mapRect(2056, -1309, 2764, 169); //upper center floor
|
||||||
|
spawn.mapRect(2056, -1309, 193, 650); //upper left floor wall
|
||||||
|
spawn.mapRect(4636, -1309, 193, 793); //upper right floor wall
|
||||||
|
spawn.mapRect(4821, -654, 955, 138); //upper right floor
|
||||||
|
spawn.mapRect(6237, -2071, 147, 2071); //far right wall
|
||||||
|
spawn.mapRect(-300, -2071, 6684, 154); //roof
|
||||||
|
|
||||||
|
//first ship details
|
||||||
|
spawn.mapRect(245, -360, 70, 400); //start room wall
|
||||||
|
spawn.mapRect(500, -1929, 154, 462);
|
||||||
|
spawn.mapRect(185, -1517, 469, 77);
|
||||||
|
spawn.mapRect(2773, -682, 469, 77); //walls in 1st room
|
||||||
|
spawn.mapRect(3743, -566, 77, 469);
|
||||||
|
spawn.mapRect(3947, -851, 469, 77);
|
||||||
|
spawn.mapRect(5313, -1309, 1000, 70); //walls in second area
|
||||||
|
spawn.mapRect(4818, -1006, 400, 70);
|
||||||
|
spawn.mapRect(4768, -1626, 800, 70);
|
||||||
|
spawn.mapRect(4760, -1626, 70, 400);
|
||||||
|
|
||||||
|
|
||||||
|
//first ship blocks/debris
|
||||||
|
spawn.debris(3267.6, -797.1, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(1626.0, -372.5, 1700, 8); //16 debris per level
|
||||||
|
spawn.debris(1880.1, -1508.9, 3700, 16); //16 debris per level
|
||||||
|
spawn.debris(5335.3, -1431.6, 3700, 16); //16 debris per level
|
||||||
|
spawn.debris(1563.8, -1087.9, 700, 5); //16 debris per level
|
||||||
|
spawn.bodyRect(1540, -1110, 218, 125, 0.9);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//first ship mobs
|
||||||
|
spawn.randomMob(2903.9, -754.5, 0.7);
|
||||||
|
spawn.randomMob(5577.0, -217.0, 0.6);
|
||||||
|
spawn.randomMob(765.8, -1029.7, 0.5);
|
||||||
|
spawn.randomMob(20079.4, -2219.7, 0.6);
|
||||||
|
spawn.randomMob(20079.4, -2219.7, 0.7);
|
||||||
|
spawn.randomMob(20890.9, -1306.0, 0.5);
|
||||||
|
spawn.randomMob(21284.2, -983.1, 0.5);
|
||||||
|
spawn.randomMob(20381.0, -254.2, 0.7);
|
||||||
|
spawn.randomMob(21027.8, -473.8, 0.6);
|
||||||
|
spawn.randomMob(19448.2, -1323.3, 0.6);
|
||||||
|
spawn.randomMob(18397.7, -711.2, 0.6);
|
||||||
|
spawn.randomMob(15547.2, -2249.6, 0.6);
|
||||||
|
spawn.randomSmallMob(16114.6, -2524.2);
|
||||||
|
spawn.randomSmallMob(15378.9, -2549.6);
|
||||||
|
|
||||||
|
spawn.randomSmallMob(893.5, -120.8);
|
||||||
|
spawn.randomSmallMob(3521.8, -419.6);
|
||||||
|
spawn.randomSmallMob(4386.2, -439.6);
|
||||||
|
spawn.randomSmallMob(5667.0, -847.8);
|
||||||
|
spawn.randomSmallMob(3158.5, -1581.8);
|
||||||
|
spawn.randomSmallMob(3866.7, -1483.2);
|
||||||
|
spawn.randomSmallMob(4652.3, -1729.4);
|
||||||
|
spawn.randomSmallMob(1068.7, -106.1);
|
||||||
|
spawn.randomSmallMob(3545.0, -413.0);
|
||||||
|
spawn.randomSmallMob(4231.7, -446.3);
|
||||||
|
spawn.randomSmallMob(1456.4, -1014.8);
|
||||||
|
spawn.randomSmallMob(20432.4, -1374.3);
|
||||||
|
spawn.randomSmallMob(20381.0, -254.2);
|
||||||
|
spawn.randomSmallMob(20353.4, -1845.8);
|
||||||
|
spawn.randomSmallMob(20353.4, -1845.8);
|
||||||
|
spawn.randomSmallMob(20648.1, -136.8);
|
||||||
|
spawn.randomSmallMob(20024.4, -2213.1);
|
||||||
|
spawn.randomSmallMob(17438.7, -876.7);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//second ship mobs
|
||||||
|
spawn.debris(17732.3, -550.0, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(18006.4, -2181.3, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(16108.6, -2621.1, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(20823.6, -1332.1, 1300, 5); //16 debris per level
|
||||||
|
spawn.debris(21095.5, -423.4, 700, 5); //16 debris per level
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
spawn.randomSmallMob(1300, -70);
|
||||||
|
|
||||||
|
|
||||||
|
// const index = mob.length
|
||||||
|
spawn.shieldingBoss(769.8, -1119.0)
|
||||||
|
// console.log(mob[index].onDeath)
|
||||||
|
// requestAnimationFrame(() => mob[index].onDeath = function() {});
|
||||||
|
// console.log(mob[index].onDeath)
|
||||||
|
|
||||||
|
//second ship base
|
||||||
|
spawn.mapRect(15000, 0, 515, 185); //lower floor 1
|
||||||
|
spawn.mapRect(17015, 0, 5500, 185); //lower floor 2
|
||||||
|
spawn.mapRect(15000, -2972, 185, 2972); //left wall
|
||||||
|
spawn.mapRect(15000, -2972, 7515, 185); //roof
|
||||||
|
spawn.mapRect(22330, -2972, 185, 2972); //right wall
|
||||||
|
spawn.mapRect(17002, -2972, 169, 2564); //left middle wall
|
||||||
|
spawn.mapRect(19089, -2972, 169, 855); //right middle wall upper
|
||||||
|
spawn.mapRect(19089, -1625, 169, 1800); //right middle wall lower
|
||||||
|
spawn.mapRect(20760, -2972, 169, 1350); //medium wall left of portal
|
||||||
|
spawn.mapRect(19720, -1625, 1725, 162); //right room upper floor
|
||||||
|
spawn.mapRect(21440, -2325, 169, 863); //medium wall right of portal
|
||||||
|
spawn.mapRect(19720, -855, 2725, 162); //right room lower floor
|
||||||
|
|
||||||
|
//engines //y -2972 -> 0
|
||||||
|
spawn.mapRect(22330, -2763.75, 400, 800);
|
||||||
|
spawn.mapRect(22330, -1793.5, 400, 800);
|
||||||
|
spawn.mapRect(22330, -804.25, 400, 800);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//second ship details
|
||||||
|
spawn.mapRect(19904, -1465, 85, 362); //upper L
|
||||||
|
spawn.mapRect(19542, -1191, 412, 88); //lower L
|
||||||
|
spawn.mapRect(18546, -2199, 600, 82); //2nd room enternce wall
|
||||||
|
spawn.mapRect(18546, -2499, 82, 2300);
|
||||||
|
spawn.mapRect(18108, -326, 500, 82); //walls/floors in middle room
|
||||||
|
spawn.mapRect(17750, -682, 300, 82);
|
||||||
|
spawn.mapRect(17156, -468, 500, 60);
|
||||||
|
spawn.mapRect(18022, -1082, 600, 82);
|
||||||
|
spawn.mapRect(17151, -1196, 500, 82);
|
||||||
|
spawn.mapRect(17453, -2060, 500, 82);
|
||||||
|
spawn.mapRect(18197, -2269, 400, 82);
|
||||||
|
spawn.mapRect(18108, -326, 500, 82);
|
||||||
|
spawn.mapRect(20542, -1191, 612, 88);
|
||||||
|
spawn.mapRect(20238, -1191, 88, 412);
|
||||||
|
spawn.mapRect(21520, -1468, 88, 412);
|
||||||
|
spawn.mapRect(20238, -330.2, 88, 412);
|
||||||
|
spawn.mapRect(20819, -328.3, 412, 88);
|
||||||
|
spawn.mapRect(21532, -708, 88, 412);
|
||||||
|
spawn.mapRect(15483.8, 12.5, 388, 30); //broken floor
|
||||||
|
spawn.mapRect(15487.6, 76.6, 488, 24);
|
||||||
|
spawn.mapRect(15506.5, 134.2, 288, 45);
|
||||||
|
spawn.mapVertex(16758.6, 135.3, "400 -30 -350 -40 -400 30 400 30");
|
||||||
|
spawn.mapVertex(16758.6, 55.3, "423 -30 -408 -20 -400 20 400 20");
|
||||||
|
//tank
|
||||||
|
spawn.mapRect(15310, -960, 600, 135);
|
||||||
|
spawn.mapRect(16290, -960, 800, 135);
|
||||||
|
//in tank
|
||||||
|
spawn.mapRect(16524.8, -2726.8, 40, 400);
|
||||||
|
spawn.mapRect(16524.8, -2130.9, 400, 40);
|
||||||
|
spawn.mapRect(16010.2, -2412.2, 300, 40);
|
||||||
|
spawn.mapRect(15379.2, -2055.1, 400, 40);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//add fuel tanks in the last room
|
||||||
|
|
||||||
|
|
||||||
|
spawn.mapRect(21531.9, -707.8, 488, 8);
|
||||||
|
|
||||||
|
//22185.5, -114.8
|
||||||
|
spawn.mapVertex(22207.8, -103, "325 -200 100 -200 325 -300");
|
||||||
|
spawn.mapRect(22056.6, -70, 225, 212);
|
||||||
|
|
||||||
|
spawn.mapVertex(20723.1, -1734, "325 -200 100 -200 325 -300");
|
||||||
|
spawn.mapRect(20571.9, -1701.0, 225, 212);
|
||||||
|
|
||||||
|
spawn.mapVertex(22207.8, -103, "325 -200 100 -200 325 -300");
|
||||||
|
spawn.mapRect(22056.6, -70, 225, 212);
|
||||||
|
//spawn.mapVertex(x,y, "coordinates")
|
||||||
|
//the parts in quotes is "x y x y x y x y x y" x and y need to be the coordinates of points that define the shape in a concave clockwise direction
|
||||||
|
|
||||||
|
//second ship blocks/debris
|
||||||
|
spawn.bodyRect(21525, -113, 50, 50, 9); //first button block
|
||||||
|
spawn.bodyRect(18993, -2283, 50, 50, 9); //second button block
|
||||||
|
spawn.bodyRect(20303, -1736, 50, 50, 9); //third button block
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let randomBoss = Math.floor(Math.random() * 5); //change the bosses
|
||||||
|
spawn[["blinkBoss", "shooterBoss", "launcherBoss", "pulsarBoss", "beetleBoss", "bladeBoss", "revolutionBoss", "dragonFlyBoss", "spiderBoss"][randomBoss]](17902, -1689, 100, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// powerUps.spawnStartingPowerUps(1475, -1175);
|
||||||
|
// spawn.debris(750, -2200, 3700, 16); //16 debris per level
|
||||||
|
// spawn.bodyRect(1540, -1110, 300, 25, 0.9);
|
||||||
|
// spawn.randomSmallMob(1300, -70);
|
||||||
|
// spawn.randomMob(2650, -975, 0.8);
|
||||||
|
// spawn.randomGroup(1700, -900, 0.4);
|
||||||
|
// if (simulation.difficulty > 1) spawn.randomLevelBoss(2200, -1300);
|
||||||
|
// spawn.secondaryBossChance(100, -1500)
|
||||||
|
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
||||||
|
},
|
||||||
intro() {
|
intro() {
|
||||||
// console.log(level.levelsCleared)
|
// console.log(level.levelsCleared)
|
||||||
if (level.levelsCleared === 0) { //if this is the 1st level of the game
|
if (level.levelsCleared === 0) { //if this is the 1st level of the game
|
||||||
@@ -15653,6 +15984,426 @@ const level = {
|
|||||||
powerUps.spawn(1, 1, "ammo")
|
powerUps.spawn(1, 1, "ammo")
|
||||||
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
||||||
},
|
},
|
||||||
|
commandeer() {
|
||||||
|
simulation.makeTextLog(`<strong>commandeer</strong> by <span class='color-var'>Desboot</span>`);
|
||||||
|
|
||||||
|
const elevator = level.elevator(-80.4, -931.6, 180, 50, -1550)
|
||||||
|
15900 && player.position.x < 16300 && player.position.y > -960.2
|
||||||
|
const slime = level.hazard(15900, -960, 400, 6000);
|
||||||
|
const slime2 = level.hazard(15147.2, -1782.4, 2000, 822);
|
||||||
|
const boost1 = level.boost(5950, -20, 700)
|
||||||
|
const boost2 = level.boost(21088, -1672, 700)
|
||||||
|
const boost3 = level.boost(19390, -31, 1700)
|
||||||
|
const boost4 = level.boost(19390, -31, 1700)
|
||||||
|
const boost5 = level.boost(17274, -1242, 1000)
|
||||||
|
const portal = level.portal({ x: 443, y: -1636 }, Math.PI, { x: 21391.9, y: -1806.3 }, -Math.PI)
|
||||||
|
const portal2 = level.portal({ x: 16838.3, y: -626.7 }, Math.PI, { x: 16882.8, y: -2566.5 }, -Math.PI)
|
||||||
|
const buttonDoor = level.button(21889, -10)
|
||||||
|
const door = level.door(19119, -2133, 110, 510, 480)
|
||||||
|
const buttonDoor2 = level.button(18711, -2210)
|
||||||
|
const door2 = level.door(17041, -412, 110, 510, 480)
|
||||||
|
const buttonDoor3 = level.button(20456.6, -1636.2)
|
||||||
|
const door3 = level.door(20238, -781.4, 88, 452, 412)
|
||||||
|
const hazard2 = level.hazard(2550, -150, 10, 0.4) //y=-1485
|
||||||
|
|
||||||
|
simulation.enableConstructMode()
|
||||||
|
level.setPosToSpawn(0, -50); //normal spawn
|
||||||
|
level.exit.x = 15316;
|
||||||
|
level.exit.y = -84;
|
||||||
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20); //bump for level entrance
|
||||||
|
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 20); //bump for level exit
|
||||||
|
level.defaultZoom = 1800
|
||||||
|
simulation.zoomTransition(level.defaultZoom)
|
||||||
|
document.body.style.backgroundColor = "#001738";
|
||||||
|
color.map = "#444" //custom map color
|
||||||
|
level.custom = () => {
|
||||||
|
ctx.fillStyle = "rgba(250,250,250,0.8)" //lights
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(1124, -628)
|
||||||
|
ctx.lineTo(496, 0)
|
||||||
|
ctx.lineTo(1852, 0)
|
||||||
|
ctx.lineTo(1224, -628)
|
||||||
|
ctx.fill()
|
||||||
|
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(906, -1365)
|
||||||
|
ctx.lineTo(206, -690)
|
||||||
|
ctx.lineTo(1706, -690)
|
||||||
|
ctx.lineTo(1006, -1365)
|
||||||
|
ctx.fill()
|
||||||
|
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(3330, -1905) //-700
|
||||||
|
ctx.lineTo(2815.6, -1405.8)
|
||||||
|
ctx.lineTo(2815.6, -1230)
|
||||||
|
ctx.lineTo(4022.9, -1283.9)
|
||||||
|
ctx.lineTo(4023.5, -1405.8)
|
||||||
|
ctx.lineTo(3430, -1905)
|
||||||
|
ctx.fill()
|
||||||
|
|
||||||
|
ctx.fillStyle = "rgba(63,247,251,0.8)"
|
||||||
|
ctx.fillRect(22330, -2713.75, 550, 700) //15845.0, -1262.2
|
||||||
|
ctx.fillRect(22330, -1743.5, 550, 700)
|
||||||
|
ctx.fillRect(22330, -754.25, 550, 700)
|
||||||
|
ctx.fillRect(6237, -1830.7, 550, 700)
|
||||||
|
ctx.fillRect(6237, -840.4, 550, 700)
|
||||||
|
ctx.fillRect(15845.0, -1262.2, 550, 300)
|
||||||
|
ctx.fillStyle = "rgba(200,200,200,0.8)"
|
||||||
|
ctx.fillRect(-192, -1973, 6484, 2071)
|
||||||
|
ctx.fillStyle = "rgba(240,240,240,0.8)"
|
||||||
|
ctx.fillRect(15109.5, -2867.5, 7284, 2971)
|
||||||
|
ctx.fillStyle = "rgba(35,35,35,0.8)"
|
||||||
|
ctx.fillRect(15145.9, -960, 200, 25)
|
||||||
|
ctx.fillStyle = "rgba(255,255,255,0.9)"
|
||||||
|
buttonDoor.query();
|
||||||
|
buttonDoor.draw();
|
||||||
|
buttonDoor2.query();
|
||||||
|
buttonDoor2.draw();
|
||||||
|
buttonDoor3.query();
|
||||||
|
buttonDoor3.draw();
|
||||||
|
slime.query();
|
||||||
|
slime2.query();
|
||||||
|
ctx.fillStyle = `hsla(160, 100%, 43%,${0.3+0.07*Math.random()})`
|
||||||
|
ctx.fillRect(15900 + 400 * Math.random(), -1360, 2, 6000)
|
||||||
|
if (buttonDoor.isUp) {
|
||||||
|
door.isClosing = true
|
||||||
|
} else {
|
||||||
|
door.isClosing = false
|
||||||
|
}
|
||||||
|
if (buttonDoor2.isUp) {
|
||||||
|
door2.isClosing = true
|
||||||
|
} else {
|
||||||
|
door2.isClosing = false
|
||||||
|
}
|
||||||
|
if (buttonDoor3.isUp) {
|
||||||
|
door3.isClosing = true
|
||||||
|
} else {
|
||||||
|
door3.isClosing = false
|
||||||
|
}
|
||||||
|
door.openClose();
|
||||||
|
door2.openClose();
|
||||||
|
door3.openClose();
|
||||||
|
portal[2].query()
|
||||||
|
portal[3].query()
|
||||||
|
portal2[2].query()
|
||||||
|
portal2[3].query()
|
||||||
|
boost1.query();
|
||||||
|
boost2.query();
|
||||||
|
boost3.query();
|
||||||
|
boost4.query();
|
||||||
|
boost5.query();
|
||||||
|
level.exit.drawAndCheck();
|
||||||
|
level.enter.draw();
|
||||||
|
ctx.fillStyle = "rgba(0,0,0,0.2)" //shadows
|
||||||
|
ctx.fillRect(2773, -682, 469, 500)
|
||||||
|
ctx.fillRect(3947, -851, 469, 700)
|
||||||
|
ctx.fillRect(4818, -1006, 400, 400)
|
||||||
|
ctx.fillRect(5313, -1309, 1000, 700)
|
||||||
|
ctx.fillRect(16705, -2831, 40, 700)
|
||||||
|
ctx.fillRect(16140, -2812, 40, 400)
|
||||||
|
ctx.fillRect(15559, -2855, 40, 800)
|
||||||
|
ctx.fillRect(16530, -2855, 30, 200)
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(18254.7, -2194.1)
|
||||||
|
ctx.lineTo(18554.6, -1952.7)
|
||||||
|
ctx.lineTo(18554.6, -1992.7)
|
||||||
|
ctx.lineTo(18294.7, -2194.1)
|
||||||
|
ctx.fill()
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(18154.7, -1004.1)
|
||||||
|
ctx.lineTo(18554.6, -762.7)
|
||||||
|
ctx.lineTo(18554.6, -802.7)
|
||||||
|
ctx.lineTo(18214.7, -1004.1)
|
||||||
|
ctx.fill()
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(17585.2, -1123.8)
|
||||||
|
ctx.lineTo(17151.2, -781.7)
|
||||||
|
ctx.lineTo(17151.2, -741.7)
|
||||||
|
ctx.lineTo(17625.2, -1123.8)
|
||||||
|
ctx.fill()
|
||||||
|
ctx.fillRect(20540, -1103, 610, 300)
|
||||||
|
ctx.fillRect(20820, -243, 410, 300)
|
||||||
|
ctx.fillRect(5772, -609, 469, 700)
|
||||||
|
ctx.fillRect(5772, -609, 469, 700)
|
||||||
|
ctx.fillStyle = "rgba(0,0,0,0.4)" //wires
|
||||||
|
ctx.fillRect(20990, -2672, 20, 112)
|
||||||
|
ctx.fillRect(21090, -2506, 72, 20)
|
||||||
|
ctx.fillRect(21090, -1970, 72, 20)
|
||||||
|
ctx.fillRect(16901.8, -2497.7, 25, 100)
|
||||||
|
ctx.fillRect(16901.8, -2397.7, 50, 25)
|
||||||
|
ctx.fillRect(16951.8, -2397.7, 25, 1640)
|
||||||
|
ctx.fillRect(16901.8, -782.7, 50, 25)
|
||||||
|
ctx.fillRect(16901.8, -757.7, 25, 100)
|
||||||
|
ctx.fillRect(20900, -2666, 500, 9)
|
||||||
|
ctx.fillRect(20900, -2651, 1315, 9)
|
||||||
|
ctx.fillRect(20900, -2636, 1300, 9)
|
||||||
|
ctx.fillRect(20900, -2621, 245, 9)
|
||||||
|
ctx.fillRect(20900, -2606, 230, 9)
|
||||||
|
ctx.fillRect(20900, -2591, 215, 9)
|
||||||
|
ctx.fillRect(20900, -2576, 200, 9)
|
||||||
|
ctx.fillRect(21145, -2621, 9, 700)
|
||||||
|
ctx.fillRect(21130, -2606, 9, 1000)
|
||||||
|
ctx.fillRect(21115, -2591, 9, 1000)
|
||||||
|
ctx.fillRect(21100, -2576, 9, 850)
|
||||||
|
ctx.fillRect(21400, -3066, 9, 409)
|
||||||
|
ctx.fillRect(20900, -1726, 209, 9)
|
||||||
|
ctx.fillRect(21145, -1921, 270, 9)
|
||||||
|
ctx.fillRect(21415, -1921, 9, 50)
|
||||||
|
ctx.fillRect(22200, -2636, 9, 1300)
|
||||||
|
ctx.fillRect(22215, -2651, 9, 300)
|
||||||
|
ctx.fillRect(22200, -1336, 300, 9)
|
||||||
|
ctx.fillRect(22215, -2351, 300, 9)
|
||||||
|
ctx.fillRect(916.5, -1725, 80, 80) //+55 // 55/2=27.5
|
||||||
|
ctx.fillRect(1204, -1706, 25, 40) //179
|
||||||
|
ctx.fillRect(1354, -1706, 25, 40)
|
||||||
|
ctx.fillRect(1504, -1885, 25, 40)
|
||||||
|
ctx.fillRect(3504, -1885, 25, 40)
|
||||||
|
ctx.fillRect(5504, -1885, 25, 40)
|
||||||
|
ctx.fillRect(1019, -1718, 9, 20)
|
||||||
|
ctx.fillRect(1019, -1674, 9, 20)
|
||||||
|
ctx.fillRect(996, -1718, 23, 9)
|
||||||
|
ctx.fillRect(996, -1663, 23, 9)
|
||||||
|
ctx.fillRect(1019, -1698, 425, 9)
|
||||||
|
ctx.fillRect(1444, -1868, 9, 179)
|
||||||
|
ctx.fillRect(1444, -1877, 4700, 9)
|
||||||
|
ctx.fillRect(1019, -1683, 440, 9)
|
||||||
|
ctx.fillRect(1459, -1853, 9, 179)
|
||||||
|
ctx.fillRect(1459, -1862, 4670, 9)
|
||||||
|
ctx.fillRect(6144, -1877, 9, 100)
|
||||||
|
ctx.fillRect(6144, -1777, 100, 9)
|
||||||
|
ctx.fillRect(6129, -1862, 9, 1100)
|
||||||
|
ctx.fillRect(6129, -762, 150, 9)
|
||||||
|
};
|
||||||
|
|
||||||
|
level.customTopLayer = () => {
|
||||||
|
door.draw();
|
||||||
|
door2.draw();
|
||||||
|
door3.draw();
|
||||||
|
|
||||||
|
portal[0].draw();
|
||||||
|
portal[1].draw();
|
||||||
|
portal[2].draw();
|
||||||
|
portal[3].draw();
|
||||||
|
portal2[0].draw();
|
||||||
|
portal2[1].draw();
|
||||||
|
portal2[2].draw();
|
||||||
|
portal2[3].draw();
|
||||||
|
elevator.move()
|
||||||
|
if (player.position.x > 15900 && player.position.x < 16300 && player.position.y > -1360.2) {
|
||||||
|
Matter.Body.setVelocity(player, {
|
||||||
|
x: player.velocity.x,
|
||||||
|
y: player.velocity.y + 10
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (Math.abs(player.velocity.x) > 0.5) {
|
||||||
|
if (m.onGround) {
|
||||||
|
Matter.Body.setVelocity(player, {
|
||||||
|
x: player.velocity.x + (0.07 * (Math.abs(player.velocity.x) / player.velocity.x)),
|
||||||
|
y: player.velocity.y - 0.2
|
||||||
|
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Matter.Body.setVelocity(player, {
|
||||||
|
x: player.velocity.x,
|
||||||
|
y: player.velocity.y - 0.2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Matter.Body.setVelocity(player, {
|
||||||
|
x: player.velocity.x,
|
||||||
|
y: player.velocity.y - 0.2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hazard2.opticalQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
spawn.mapRect(1124, -653, 100, 25);
|
||||||
|
spawn.mapRect(906, -1390, 100, 25);
|
||||||
|
spawn.mapRect(3330, -1930, 100, 25);
|
||||||
|
|
||||||
|
//first ship base
|
||||||
|
spawn.mapRect(-300, 0, 6684, 100); //lower floor
|
||||||
|
spawn.mapRect(-300, -2071, 154, 2071); //left right wall
|
||||||
|
spawn.mapRect(2511, -300, 1309, 308); //left big block
|
||||||
|
spawn.mapRect(3820, -184, 1309, 184); //right big block
|
||||||
|
spawn.mapRect(-300, -739, 2549, 100); //upper right floor
|
||||||
|
spawn.mapRect(2056, -1309, 2764, 169); //upper center floor
|
||||||
|
spawn.mapRect(2056, -1309, 193, 650); //upper left floor wall
|
||||||
|
spawn.mapRect(4636, -1309, 193, 793); //upper right floor wall
|
||||||
|
spawn.mapRect(4821, -654, 955, 138); //upper right floor
|
||||||
|
spawn.mapRect(6237, -2071, 147, 2071); //far right wall
|
||||||
|
spawn.mapRect(-300, -2071, 6684, 154); //roof
|
||||||
|
|
||||||
|
//first ship details
|
||||||
|
spawn.mapRect(245, -360, 70, 400); //start room wall
|
||||||
|
spawn.mapRect(500, -1929, 154, 462);
|
||||||
|
spawn.mapRect(185, -1517, 469, 77);
|
||||||
|
spawn.mapRect(2773, -682, 469, 77); //walls in 1st room
|
||||||
|
spawn.mapRect(3743, -566, 77, 469);
|
||||||
|
spawn.mapRect(3947, -851, 469, 77);
|
||||||
|
spawn.mapRect(5313, -1309, 1000, 70); //walls in second area
|
||||||
|
spawn.mapRect(4818, -1006, 400, 70);
|
||||||
|
spawn.mapRect(4768, -1626, 800, 70);
|
||||||
|
spawn.mapRect(4760, -1626, 70, 400);
|
||||||
|
spawn.mapRect(645.1, -1480.8, 700, 100); //room for shielding boss
|
||||||
|
spawn.mapVertex(515, -1447, "0 0 0 100 -400 0");
|
||||||
|
spawn.mapRect(1245.1, -1980.8, 100, 500);
|
||||||
|
spawn.mapRect(2346.9, -1658.8, 469, 77);
|
||||||
|
spawn.mapRect(4023.6, -1723.7, 469, 77);
|
||||||
|
|
||||||
|
//engines //y -2972 -> 0
|
||||||
|
spawn.mapRect(6237, -1880.7, 400, 800);
|
||||||
|
spawn.mapRect(6237, -890.4, 400, 800);
|
||||||
|
|
||||||
|
//first ship blocks/debris
|
||||||
|
spawn.debris(3267.6, -797.1, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(1626.0, -372.5, 1700, 8); //16 debris per level
|
||||||
|
spawn.debris(1880.1, -1508.9, 3700, 16); //16 debris per level
|
||||||
|
spawn.debris(5335.3, -1431.6, 3700, 16); //16 debris per level
|
||||||
|
spawn.debris(1563.8, -1087.9, 700, 5); //16 debris per level
|
||||||
|
spawn.bodyRect(1540, -1110, 218, 125, 0.9);
|
||||||
|
|
||||||
|
//first ship mobs
|
||||||
|
spawn.randomSmallMob(893.5, -120.8);
|
||||||
|
spawn.randomMob(18375.6, -1574.4, 0.2);
|
||||||
|
spawn.randomSmallMob(15378.9, -2549.6);
|
||||||
|
spawn.randomSmallMob(5820.2, -1545.2);
|
||||||
|
spawn.randomMob(765.8, -1029.7, 0.2);
|
||||||
|
spawn.randomMob(21284.2, -983.1, 0.3);
|
||||||
|
spawn.randomSmallMob(3382.5, -1590.6);
|
||||||
|
spawn.randomSmallMob(3545.0, -413.0);
|
||||||
|
spawn.randomMob(20381.0, -254.2, 0.6);
|
||||||
|
spawn.randomSmallMob(20432.4, -1374.3);
|
||||||
|
spawn.randomSmallMob(5667.0, -847.8);
|
||||||
|
spawn.randomMob(2903.9, -754.5, 0.2);
|
||||||
|
spawn.randomSmallMob(3266.4, -1578.4);
|
||||||
|
spawn.randomSmallMob(20648.1, -136.8);
|
||||||
|
spawn.randomSmallMob(16114.6, -2524.2);
|
||||||
|
spawn.randomSmallMob(20381.0, -254.2);
|
||||||
|
spawn.randomMob(5577.0, -217.0, 0.3);
|
||||||
|
spawn.randomSmallMob(1456.4, -1014.8);
|
||||||
|
spawn.randomSmallMob(1068.7, -106.1);
|
||||||
|
spawn.randomSmallMob(5099.7, -1204.2);
|
||||||
|
spawn.randomSmallMob(17502.8, -1520.6);
|
||||||
|
spawn.randomMob(15547.2, -2249.6, 0.2);
|
||||||
|
spawn.randomMob(19448.2, -1323.3, 0.7);
|
||||||
|
spawn.randomSmallMob(3158.5, -1581.8);
|
||||||
|
spawn.randomSmallMob(17438.7, -876.7);
|
||||||
|
spawn.randomMob(20079.4, -2219.7, 0.2);
|
||||||
|
spawn.randomMob(2680.1, -1779.2, 0.6);
|
||||||
|
spawn.randomMob(3924.9, -1504.1, 0.3);
|
||||||
|
spawn.randomSmallMob(4652.3, -1729.4);
|
||||||
|
spawn.randomMob(18397.7, -711.2, 0.3);
|
||||||
|
spawn.randomSmallMob(4386.2, -439.6);
|
||||||
|
spawn.randomSmallMob(3505.1, -1531.1);
|
||||||
|
spawn.randomSmallMob(3866.7, -1483.2);
|
||||||
|
//second ship mobs
|
||||||
|
spawn.debris(17732.3, -550.0, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(17827.2, -2357.1, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(16108.6, -2621.1, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(20823.6, -1332.1, 1300, 5); //16 debris per level
|
||||||
|
spawn.debris(21095.5, -423.4, 700, 5); //16 debris per level
|
||||||
|
spawn.debris(20534.5, -1282.1, 700, 5); //16 debris per level
|
||||||
|
spawn.randomSmallMob(1300, -70);
|
||||||
|
spawn.shieldingBoss(943.9, -1698.0)
|
||||||
|
//second ship base
|
||||||
|
spawn.mapRect(15000, 0, 515, 185); //lower floor 1
|
||||||
|
spawn.mapRect(17015, 0, 5500, 185); //lower floor 2
|
||||||
|
spawn.mapRect(15000, -2972, 185, 2972); //left wall
|
||||||
|
spawn.mapRect(15000, -2972, 7515, 185); //roof
|
||||||
|
spawn.mapRect(22330, -2972, 185, 2972); //right wall
|
||||||
|
spawn.mapRect(17002, -2972, 169, 2564); //left middle wall
|
||||||
|
spawn.mapRect(19089, -2972, 169, 855); //right middle wall upper
|
||||||
|
spawn.mapRect(19089, -1625, 169, 1800); //right middle wall lower
|
||||||
|
spawn.mapRect(20760, -2972, 169, 1350); //medium wall left of portal
|
||||||
|
spawn.mapRect(19720, -1625, 1725, 162); //right room upper floor
|
||||||
|
spawn.mapRect(21440, -2325, 169, 863); //medium wall right of portal
|
||||||
|
spawn.mapRect(19720, -855, 2725, 162); //right room lower floor
|
||||||
|
|
||||||
|
//engines //y -2972 -> 0
|
||||||
|
spawn.mapRect(22330, -2763.75, 400, 800);
|
||||||
|
spawn.mapRect(22330, -1793.5, 400, 800);
|
||||||
|
spawn.mapRect(22330, -804.25, 400, 800);
|
||||||
|
//second ship details
|
||||||
|
spawn.mapRect(19904, -1465, 85, 362); //upper L
|
||||||
|
spawn.mapRect(19542, -1191, 412, 88); //lower L
|
||||||
|
spawn.mapRect(18546, -2199, 600, 82); //2nd room enternce wall
|
||||||
|
spawn.mapRect(18546, -2499, 82, 2300);
|
||||||
|
spawn.mapRect(18108, -326, 500, 82); //walls/floors in middle room
|
||||||
|
spawn.mapRect(17750, -682, 300, 82);
|
||||||
|
spawn.mapRect(17156, -468, 500, 60);
|
||||||
|
spawn.mapRect(18022, -1082, 600, 82);
|
||||||
|
spawn.mapRect(17151, -1196, 500, 82);
|
||||||
|
spawn.mapRect(17453, -2060, 500, 82);
|
||||||
|
spawn.mapRect(18197, -2269, 400, 82);
|
||||||
|
spawn.mapRect(18108, -326, 500, 82);
|
||||||
|
spawn.mapRect(20542, -1191, 612, 88);
|
||||||
|
spawn.mapRect(20238, -1191, 88, 412);
|
||||||
|
spawn.mapRect(21520, -1468, 88, 412);
|
||||||
|
spawn.mapRect(20238, -330.2, 88, 412);
|
||||||
|
spawn.mapRect(20819, -328.3, 412, 88);
|
||||||
|
spawn.mapRect(21532, -708, 88, 412);
|
||||||
|
spawn.mapRect(15483.8, 12.5, 388, 30); //broken floor
|
||||||
|
spawn.mapRect(15487.6, 76.6, 488, 24);
|
||||||
|
spawn.mapRect(15506.5, 134.2, 288, 45);
|
||||||
|
spawn.mapVertex(16758.6, 135.3, "400 -30 -350 -40 -400 30 400 30");
|
||||||
|
spawn.mapVertex(16758.6, 55.3, "423 -30 -408 -20 -400 20 400 20");
|
||||||
|
//tank
|
||||||
|
spawn.mapRect(15310, -960, 600, 135);
|
||||||
|
spawn.mapRect(16290, -960, 800, 135);
|
||||||
|
//in tank
|
||||||
|
spawn.mapRect(16524.8, -2726.8, 40, 400);
|
||||||
|
spawn.mapRect(16524.8, -2130.9, 400, 40);
|
||||||
|
spawn.mapRect(16010.2, -2412.2, 300, 40);
|
||||||
|
spawn.mapRect(15379.2, -2055.1, 400, 40);
|
||||||
|
|
||||||
|
spawn.mapVertex(17626.3, -3035, "-245 0 -220 -110 -173 -173 -110 -220 0 -250 110 -220 173 -173 220 -110 245 0");
|
||||||
|
spawn.mapRect(17226.3, -3035, 400, 40);
|
||||||
|
spawn.mapVertex(17626.3, 225, "-245 0 -220 110 -173 173 -110 220 0 250 110 220 173 173 220 110 245 0");
|
||||||
|
spawn.mapRect(17226.3, 225, 400, 40);
|
||||||
|
spawn.mapVertex(19626.3, -3035, "-245 0 -220 -110 -173 -173 -110 -220 0 -250 110 -220 173 -173 220 -110 245 0");
|
||||||
|
spawn.mapRect(19226.3, -3035, 400, 40);
|
||||||
|
spawn.mapVertex(19626.3, 225, "-245 0 -220 110 -173 173 -110 220 0 250 110 220 173 173 220 110 245 0");
|
||||||
|
spawn.mapRect(19226.3, 225, 400, 40);
|
||||||
|
spawn.mapVertex(21626.3, -3035, "-245 0 -220 -110 -173 -173 -110 -220 0 -250 110 -220 173 -173 220 -110 245 0");
|
||||||
|
spawn.mapRect(21226.3, -3035, 400, 40);
|
||||||
|
spawn.mapVertex(21626.3, 225, "-245 0 -220 110 -173 173 -110 220 0 250 110 220 173 173 220 110 245 0");
|
||||||
|
spawn.mapRect(21226.3, 225, 400, 40);
|
||||||
|
|
||||||
|
//add fuel tanks in the last room
|
||||||
|
spawn.mapRect(21531.9, -707.8, 488, 8);
|
||||||
|
|
||||||
|
//22185.5, -114.8
|
||||||
|
spawn.mapVertex(22207.8, -103, "325 -200 100 -200 325 -300");
|
||||||
|
spawn.mapRect(22056.6, -70, 225, 212);
|
||||||
|
|
||||||
|
spawn.mapVertex(20723.1, -1734, "325 -200 100 -200 325 -300");
|
||||||
|
spawn.mapRect(20571.9, -1701.0, 225, 212);
|
||||||
|
|
||||||
|
spawn.mapVertex(22207.8, -103, "325 -200 100 -200 325 -300");
|
||||||
|
spawn.mapRect(22056.6, -70, 225, 212);
|
||||||
|
//spawn.mapVertex(x,y, "coordinates")
|
||||||
|
//the parts in quotes is "x y x y x y x y x y" x and y need to be the coordinates of points that define the shape in a concave clockwise direction
|
||||||
|
|
||||||
|
//second ship blocks/debris
|
||||||
|
spawn.bodyRect(21525, -113, 50, 50, 9); //first button block
|
||||||
|
spawn.bodyRect(18993, -2283, 50, 50, 9); //second button block
|
||||||
|
spawn.bodyRect(20303, -1736, 50, 50, 9); //third button block
|
||||||
|
|
||||||
|
let randomBoss = Math.floor(Math.random() * 5); //change the bosses
|
||||||
|
spawn[["blinkBoss", "shooterBoss", "launcherBoss", "pulsarBoss", "beetleBoss", "bladeBoss", "revolutionBoss", "dragonFlyBoss", "spiderBoss"][randomBoss]](17902, -1689, 100, false);
|
||||||
|
|
||||||
|
// powerUps.spawnStartingPowerUps(1475, -1175);
|
||||||
|
// spawn.debris(750, -2200, 3700, 16); //16 debris per level
|
||||||
|
// spawn.bodyRect(1540, -1110, 300, 25, 0.9);
|
||||||
|
// spawn.randomSmallMob(1300, -70);
|
||||||
|
// spawn.randomMob(2650, -975, 0.8);
|
||||||
|
// spawn.randomGroup(1700, -900, 0.4);
|
||||||
|
// if (simulation.difficulty > 1) spawn.randomLevelBoss(2200, -1300);
|
||||||
|
// spawn.secondaryBossChance(100, -1500)
|
||||||
|
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
||||||
|
},
|
||||||
// ********************************************************************************************************
|
// ********************************************************************************************************
|
||||||
// ********************************************************************************************************
|
// ********************************************************************************************************
|
||||||
// ***************************************** training levels **********************************************
|
// ***************************************** training levels **********************************************
|
||||||
@@ -15662,7 +16413,7 @@ const level = {
|
|||||||
m.addHealth(Infinity)
|
m.addHealth(Infinity)
|
||||||
document.getElementById("health").style.display = "none" //hide your health bar
|
document.getElementById("health").style.display = "none" //hide your health bar
|
||||||
document.getElementById("health-bg").style.display = "none"
|
document.getElementById("health-bg").style.display = "none"
|
||||||
|
document.getElementById("defense").style.display = "none"
|
||||||
level.setPosToSpawn(60, -50); //normal spawn
|
level.setPosToSpawn(60, -50); //normal spawn
|
||||||
spawn.mapRect(10, -10, 100, 20); //small platform for player
|
spawn.mapRect(10, -10, 100, 20); //small platform for player
|
||||||
level.exit.x = 1775;
|
level.exit.x = 1775;
|
||||||
@@ -16233,7 +16984,7 @@ const level = {
|
|||||||
m.addHealth(0.25)
|
m.addHealth(0.25)
|
||||||
document.getElementById("health").style.display = "inline" //show your health bar
|
document.getElementById("health").style.display = "inline" //show your health bar
|
||||||
document.getElementById("health-bg").style.display = "inline"
|
document.getElementById("health-bg").style.display = "inline"
|
||||||
|
document.getElementById("defense").style.display = "inline"
|
||||||
level.setPosToSpawn(60, -50); //normal spawn
|
level.setPosToSpawn(60, -50); //normal spawn
|
||||||
spawn.mapRect(10, -10, 100, 20); //small platform for player
|
spawn.mapRect(10, -10, 100, 20); //small platform for player
|
||||||
level.exit.x = 1775;
|
level.exit.x = 1775;
|
||||||
@@ -17080,7 +17831,7 @@ const level = {
|
|||||||
m.addHealth(Infinity)
|
m.addHealth(Infinity)
|
||||||
document.getElementById("health").style.display = "none" //hide your health bar
|
document.getElementById("health").style.display = "none" //hide your health bar
|
||||||
document.getElementById("health-bg").style.display = "none"
|
document.getElementById("health-bg").style.display = "none"
|
||||||
|
document.getElementById("defense").style.display = "none"
|
||||||
level.setPosToSpawn(60, -50); //normal spawn
|
level.setPosToSpawn(60, -50); //normal spawn
|
||||||
spawn.mapRect(10, -10, 100, 20); //small platform for player
|
spawn.mapRect(10, -10, 100, 20); //small platform for player
|
||||||
level.exit.x = 1775;
|
level.exit.x = 1775;
|
||||||
|
|||||||
23
js/player.js
23
js/player.js
@@ -455,6 +455,7 @@ const m = {
|
|||||||
m.alive = false;
|
m.alive = false;
|
||||||
simulation.paused = true;
|
simulation.paused = true;
|
||||||
m.health = 0;
|
m.health = 0;
|
||||||
|
document.getElementById("defense").style.display = "none"; //hide defense
|
||||||
m.displayHealth();
|
m.displayHealth();
|
||||||
document.getElementById("text-log").style.display = "none"
|
document.getElementById("text-log").style.display = "none"
|
||||||
document.getElementById("fade-out").style.opacity = 0.9; //slowly fade to 90% white on top of canvas
|
document.getElementById("fade-out").style.opacity = 0.9; //slowly fade to 90% white on top of canvas
|
||||||
@@ -534,7 +535,8 @@ const m = {
|
|||||||
|
|
||||||
defaultFPSCycle: 0, //tracks when to return to normal fps
|
defaultFPSCycle: 0, //tracks when to return to normal fps
|
||||||
immuneCycle: 0, //used in engine
|
immuneCycle: 0, //used in engine
|
||||||
harmReduction() {
|
lastCalculatedDefense: 0, //used to decided if defense bar needs to be redrawn (in simulation.checks)
|
||||||
|
defense() {
|
||||||
let dmg = 1
|
let dmg = 1
|
||||||
dmg *= m.fieldHarmReduction
|
dmg *= m.fieldHarmReduction
|
||||||
// if (!tech.isFlipFlopOn && tech.isFlipFlopHealth) dmg *= 0.5
|
// if (!tech.isFlipFlopOn && tech.isFlipFlopHealth) dmg *= 0.5
|
||||||
@@ -546,7 +548,7 @@ const m = {
|
|||||||
if (tech.isImmortal) dmg *= 0.67
|
if (tech.isImmortal) dmg *= 0.67
|
||||||
if (tech.isSlowFPS) dmg *= 0.8
|
if (tech.isSlowFPS) dmg *= 0.8
|
||||||
if (tech.energyRegen === 0) dmg *= 0.34
|
if (tech.energyRegen === 0) dmg *= 0.34
|
||||||
if (tech.healthDrain) dmg *= 1 + 3.33 * tech.healthDrain //tech.healthDrain = 0.03 at one stack //cause more damage
|
// if (tech.healthDrain) dmg *= 1 + 3.33 * tech.healthDrain //tech.healthDrain = 0.03 at one stack //cause more damage
|
||||||
if (m.fieldMode === 0 || m.fieldMode === 3) dmg *= 0.73 ** m.coupling
|
if (m.fieldMode === 0 || m.fieldMode === 3) dmg *= 0.73 ** m.coupling
|
||||||
if (tech.isLowHealthDefense) dmg *= 1 - Math.max(0, 1 - m.health) * 0.8
|
if (tech.isLowHealthDefense) dmg *= 1 - Math.max(0, 1 - m.health) * 0.8
|
||||||
if (tech.isHarmReduceNoKill && m.lastKillCycle + 300 < m.cycle) dmg *= 0.33
|
if (tech.isHarmReduceNoKill && m.lastKillCycle + 300 < m.cycle) dmg *= 0.33
|
||||||
@@ -560,7 +562,11 @@ const m = {
|
|||||||
if (tech.isNoFireDefense && m.cycle > m.fireCDcycle + 120) dmg *= 0.3
|
if (tech.isNoFireDefense && m.cycle > m.fireCDcycle + 120) dmg *= 0.3
|
||||||
if (tech.isTurret && m.crouch) dmg *= 0.34;
|
if (tech.isTurret && m.crouch) dmg *= 0.34;
|
||||||
if (tech.isFirstDer && b.inventory[0] === b.activeGun) dmg *= 0.85 ** b.inventory.length
|
if (tech.isFirstDer && b.inventory[0] === b.activeGun) dmg *= 0.85 ** b.inventory.length
|
||||||
|
if (tech.isEnergyHealth) {
|
||||||
|
return Math.pow(dmg, 0.13) //defense has less effect
|
||||||
|
} else {
|
||||||
return dmg
|
return dmg
|
||||||
|
}
|
||||||
},
|
},
|
||||||
rewind(steps) { // m.rewind(Math.floor(Math.min(599, 137 * m.energy)))
|
rewind(steps) { // m.rewind(Math.floor(Math.min(599, 137 * m.energy)))
|
||||||
if (tech.isRewindGrenade) {
|
if (tech.isRewindGrenade) {
|
||||||
@@ -700,7 +706,6 @@ const m = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tech.isEnergyHealth) {
|
if (tech.isEnergyHealth) {
|
||||||
dmg *= Math.pow(m.harmReduction(), 0.13) //defense has less effect
|
|
||||||
m.energy -= 0.9 * dmg / Math.sqrt(simulation.healScale) //scale damage with heal reduction difficulty
|
m.energy -= 0.9 * dmg / Math.sqrt(simulation.healScale) //scale damage with heal reduction difficulty
|
||||||
if (m.energy < 0 || isNaN(m.energy)) { //taking deadly damage
|
if (m.energy < 0 || isNaN(m.energy)) { //taking deadly damage
|
||||||
if (tech.isDeathAvoid && powerUps.research.count && !tech.isDeathAvoidedThisLevel) {
|
if (tech.isDeathAvoid && powerUps.research.count && !tech.isDeathAvoidedThisLevel) {
|
||||||
@@ -728,7 +733,7 @@ const m = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dmg *= m.harmReduction()
|
dmg *= m.defense()
|
||||||
m.health -= dmg;
|
m.health -= dmg;
|
||||||
if (m.health < 0 || isNaN(m.health)) {
|
if (m.health < 0 || isNaN(m.health)) {
|
||||||
if (tech.isDeathAvoid && powerUps.research.count > 0 && !tech.isDeathAvoidedThisLevel) { //&& Math.random() < 0.5
|
if (tech.isDeathAvoid && powerUps.research.count > 0 && !tech.isDeathAvoidedThisLevel) { //&& Math.random() < 0.5
|
||||||
@@ -1847,8 +1852,8 @@ const m = {
|
|||||||
},
|
},
|
||||||
setMaxEnergy() {
|
setMaxEnergy() {
|
||||||
// (m.fieldMode === 0 || m.fieldMode === 1) * 0.4 * m.coupling +
|
// (m.fieldMode === 0 || m.fieldMode === 1) * 0.4 * m.coupling +
|
||||||
m.maxEnergy = (tech.isMaxEnergyTech ? 0.5 : 1) + tech.bonusEnergy + tech.healMaxEnergyBonus + tech.harmonicEnergy + 2 * tech.isGroundState + 3 * tech.isRelay * tech.isFlipFlopOn * tech.isRelayEnergy + 0.6 * (m.fieldUpgrades[m.fieldMode].name === "standing wave")
|
m.maxEnergy = (tech.isMaxEnergyTech ? 0.5 : 1) + tech.bonusEnergy + tech.healMaxEnergyBonus + tech.harmonicEnergy + 2 * tech.isGroundState + 3 * tech.isRelay * tech.isFlipFlopOn * tech.isRelayEnergy + 0.66 * (m.fieldUpgrades[m.fieldMode].name === "standing wave")
|
||||||
// if (tech.isEnergyHealth) m.maxEnergy *= Math.sqrt(m.harmReduction())
|
// if (tech.isEnergyHealth) m.maxEnergy *= Math.sqrt(m.defense())
|
||||||
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-f'>maxEnergy</span> <span class='color-symbol'>=</span> ${(m.maxEnergy.toFixed(2))}`)
|
simulation.makeTextLog(`<span class='color-var'>m</span>.<span class='color-f'>maxEnergy</span> <span class='color-symbol'>=</span> ${(m.maxEnergy.toFixed(2))}`)
|
||||||
},
|
},
|
||||||
fieldMeterColor: "#0cf",
|
fieldMeterColor: "#0cf",
|
||||||
@@ -2542,14 +2547,14 @@ const m = {
|
|||||||
name: "standing wave",
|
name: "standing wave",
|
||||||
//<strong>deflecting</strong> protects you in every <strong>direction</strong>
|
//<strong>deflecting</strong> protects you in every <strong>direction</strong>
|
||||||
description: `<strong>3</strong> oscillating <strong>shields</strong> are permanently active
|
description: `<strong>3</strong> oscillating <strong>shields</strong> are permanently active
|
||||||
<br><strong>+60</strong> max <strong class='color-f'>energy</strong>
|
<br><strong>+66</strong> max <strong class='color-f'>energy</strong>
|
||||||
<br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second`,
|
<br>generate <strong>6</strong> <strong class='color-f'>energy</strong> per second`,
|
||||||
drainCD: 0,
|
drainCD: 0,
|
||||||
effect: () => {
|
effect: () => {
|
||||||
m.fieldBlockCD = 0;
|
m.fieldBlockCD = 0;
|
||||||
m.blockingRecoil = 2 //4 is normal
|
m.blockingRecoil = 2 //4 is normal
|
||||||
m.fieldRange = 175
|
m.fieldRange = 185
|
||||||
m.fieldShieldingScale = (tech.isStandingWaveExpand ? 0.9 : 1.3) * Math.pow(0.6, (tech.harmonics - 2))
|
m.fieldShieldingScale = (tech.isStandingWaveExpand ? 0.9 : 1.6) * Math.pow(0.6, (tech.harmonics - 2))
|
||||||
// m.fieldHarmReduction = 0.66; //33% reduction
|
// m.fieldHarmReduction = 0.66; //33% reduction
|
||||||
|
|
||||||
m.harmonic3Phase = () => { //normal standard 3 different 2-d circles
|
m.harmonic3Phase = () => { //normal standard 3 different 2-d circles
|
||||||
|
|||||||
@@ -323,7 +323,7 @@ const powerUps = {
|
|||||||
document.getElementById("choose-grid").style.visibility = "visible"
|
document.getElementById("choose-grid").style.visibility = "visible"
|
||||||
|
|
||||||
requestAnimationFrame(() => {
|
requestAnimationFrame(() => {
|
||||||
ctx.fillStyle = `rgba(150,150,150,0.6)`; //`rgba(221,221,221,0.6)`;
|
ctx.fillStyle = `rgba(150,150,150,0.9)`; //`rgba(221,221,221,0.6)`;
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
});
|
});
|
||||||
// document.getElementById("pause-grid-right").style.opacity = "0.7"
|
// document.getElementById("pause-grid-right").style.opacity = "0.7"
|
||||||
@@ -1084,23 +1084,39 @@ const powerUps = {
|
|||||||
// }
|
// }
|
||||||
if (tech.isBrainstorm && !tech.isBrainstormActive && !simulation.isChoosing) {
|
if (tech.isBrainstorm && !tech.isBrainstormActive && !simulation.isChoosing) {
|
||||||
tech.isBrainstormActive = true
|
tech.isBrainstormActive = true
|
||||||
let count = 0
|
|
||||||
|
|
||||||
function cycle() {
|
let count = 1
|
||||||
|
let timeStart = performance.now()
|
||||||
|
const cycle = (timestamp) => {
|
||||||
|
// if (timeStart === undefined) timeStart = timestamp
|
||||||
|
// console.log(timestamp, timeStart)
|
||||||
|
if (timestamp - timeStart > tech.brainStormDelay * count) {
|
||||||
count++
|
count++
|
||||||
if (count < tech.brainStormDelay * 5 && simulation.isChoosing) {
|
|
||||||
if (!(count % tech.brainStormDelay)) {
|
|
||||||
powerUps.tech.effect();
|
powerUps.tech.effect();
|
||||||
document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay
|
document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay
|
||||||
document.body.style.cursor = "auto";
|
document.body.style.cursor = "auto";
|
||||||
document.getElementById("choose-grid").style.transitionDuration = "0s";
|
document.getElementById("choose-grid").style.transitionDuration = "0s";
|
||||||
}
|
}
|
||||||
|
if (count < 5 && simulation.isChoosing) {
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
} else {
|
} else {
|
||||||
tech.isBrainstormActive = false
|
tech.isBrainstormActive = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
|
|
||||||
|
// count++
|
||||||
|
// if (count < tech.brainStormDelay * 5 && simulation.isChoosing) {
|
||||||
|
// if (!(count % tech.brainStormDelay)) {
|
||||||
|
// powerUps.tech.effect();
|
||||||
|
// document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay
|
||||||
|
// document.body.style.cursor = "auto";
|
||||||
|
// document.getElementById("choose-grid").style.transitionDuration = "0s";
|
||||||
|
// }
|
||||||
|
// requestAnimationFrame(cycle);
|
||||||
|
// } else {
|
||||||
|
// tech.isBrainstormActive = false
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
// if (localSettings.isHideImages) text += powerUps.researchText('tech')
|
// if (localSettings.isHideImages) text += powerUps.researchText('tech')
|
||||||
document.getElementById("choose-grid").innerHTML = text
|
document.getElementById("choose-grid").innerHTML = text
|
||||||
|
|||||||
@@ -20,10 +20,8 @@ const simulation = {
|
|||||||
mobs.draw();
|
mobs.draw();
|
||||||
simulation.draw.cons();
|
simulation.draw.cons();
|
||||||
simulation.draw.body();
|
simulation.draw.body();
|
||||||
if (!m.isBodiesAsleep) {
|
|
||||||
simulation.checks();
|
simulation.checks();
|
||||||
mobs.loop();
|
if (!m.isBodiesAsleep) mobs.loop();
|
||||||
}
|
|
||||||
mobs.healthBar();
|
mobs.healthBar();
|
||||||
m.draw();
|
m.draw();
|
||||||
m.hold();
|
m.hold();
|
||||||
@@ -110,10 +108,8 @@ const simulation = {
|
|||||||
Engine.update(engine, simulation.delta);
|
Engine.update(engine, simulation.delta);
|
||||||
// level.custom();
|
// level.custom();
|
||||||
// level.customTopLayer();
|
// level.customTopLayer();
|
||||||
if (!m.isBodiesAsleep) {
|
|
||||||
simulation.checks();
|
simulation.checks();
|
||||||
mobs.loop();
|
if (!m.isBodiesAsleep) mobs.loop();
|
||||||
}
|
|
||||||
if (m.fieldMode !== 7) m.hold();
|
if (m.fieldMode !== 7) m.hold();
|
||||||
b.bulletRemove();
|
b.bulletRemove();
|
||||||
if (!m.isBodiesAsleep) b.bulletDo();
|
if (!m.isBodiesAsleep) b.bulletDo();
|
||||||
@@ -683,6 +679,7 @@ const simulation = {
|
|||||||
document.getElementById("splash").style.opacity = "0";
|
document.getElementById("splash").style.opacity = "0";
|
||||||
document.getElementById("dmg").style.display = "none";
|
document.getElementById("dmg").style.display = "none";
|
||||||
document.getElementById("health-bg").style.display = "none";
|
document.getElementById("health-bg").style.display = "none";
|
||||||
|
document.getElementById("defense").style.display = "none"
|
||||||
document.body.style.cursor = "auto";
|
document.body.style.cursor = "auto";
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
document.getElementById("experiment-button").style.opacity = "1";
|
document.getElementById("experiment-button").style.opacity = "1";
|
||||||
@@ -717,13 +714,13 @@ const simulation = {
|
|||||||
document.getElementById("splash").onclick = null; //removes the onclick effect so the function only runs once
|
document.getElementById("splash").onclick = null; //removes the onclick effect so the function only runs once
|
||||||
document.getElementById("splash").style.display = "none"; //hides the element that spawned the function
|
document.getElementById("splash").style.display = "none"; //hides the element that spawned the function
|
||||||
document.getElementById("dmg").style.display = "inline";
|
document.getElementById("dmg").style.display = "inline";
|
||||||
|
document.getElementById("health").style.display = "inline"
|
||||||
document.getElementById("health-bg").style.display = "inline";
|
document.getElementById("health-bg").style.display = "inline";
|
||||||
|
document.getElementById("defense").style.display = "inline"
|
||||||
|
|
||||||
document.getElementById("tech").style.display = "inline"
|
document.getElementById("tech").style.display = "inline"
|
||||||
document.getElementById("guns").style.display = "inline"
|
document.getElementById("guns").style.display = "inline"
|
||||||
document.getElementById("field").style.display = "inline"
|
document.getElementById("field").style.display = "inline"
|
||||||
document.getElementById("health").style.display = "inline"
|
|
||||||
document.getElementById("health-bg").style.display = "inline"
|
|
||||||
// document.body.style.overflow = "hidden"
|
// document.body.style.overflow = "hidden"
|
||||||
document.getElementById("pause-grid-left").style.display = "none"
|
document.getElementById("pause-grid-left").style.display = "none"
|
||||||
document.getElementById("pause-grid-right").style.display = "none"
|
document.getElementById("pause-grid-right").style.display = "none"
|
||||||
@@ -1137,6 +1134,33 @@ const simulation = {
|
|||||||
// }
|
// }
|
||||||
// },
|
// },
|
||||||
checks() {
|
checks() {
|
||||||
|
if (!(m.cycle % 15)) { //4 times a second
|
||||||
|
//update defense bar
|
||||||
|
const defense = m.defense()
|
||||||
|
if (m.lastCalculatedDefense !== defense) {
|
||||||
|
document.getElementById("defense").style.width = Math.floor(300 * m.maxHealth * (1 - defense)) + "px";
|
||||||
|
|
||||||
|
// if (m.lastCalculatedDefense === 1) document.getElementById("defense").style.display = "inline"
|
||||||
|
// if (defense === 1) document.getElementById("defense").style.display = "none"
|
||||||
|
// Math.pow(m.defense(), 0.13)
|
||||||
|
m.lastCalculatedDefense = defense
|
||||||
|
console.log(defense)
|
||||||
|
}
|
||||||
|
// const defense = m.defense()
|
||||||
|
// if (m.lastCalculatedDefense !== defense) {
|
||||||
|
// if (m.lastCalculatedDefense === 1) {
|
||||||
|
// document.getElementById("defense").style.display = "inline"
|
||||||
|
// requestAnimationFrame(() => { document.getElementById("defense").style.width = Math.floor(300 * m.maxHealth * (1 - defense)) + "px"; })
|
||||||
|
// } else if (defense === 1) {
|
||||||
|
// document.getElementById("defense").style.display = "none"
|
||||||
|
// document.getElementById("defense").style.width = "0px";
|
||||||
|
// } else {
|
||||||
|
// document.getElementById("defense").style.width = Math.floor(300 * m.maxHealth * (1 - defense)) + "px";
|
||||||
|
// }
|
||||||
|
// m.lastCalculatedDefense = defense
|
||||||
|
// console.log(defense)
|
||||||
|
// }
|
||||||
|
}
|
||||||
if (!(m.cycle % 60)) { //once a second
|
if (!(m.cycle % 60)) { //once a second
|
||||||
//energy overfill
|
//energy overfill
|
||||||
if (m.energy > m.maxEnergy) {
|
if (m.energy > m.maxEnergy) {
|
||||||
@@ -1223,23 +1247,6 @@ const simulation = {
|
|||||||
fallCheck(mob);
|
fallCheck(mob);
|
||||||
fallCheck(body);
|
fallCheck(body);
|
||||||
fallCheck(powerUp, true);
|
fallCheck(powerUp, true);
|
||||||
|
|
||||||
|
|
||||||
//check for double crouch
|
|
||||||
//crouch playerHead.position.y - player.position.y = 9.7 //positive
|
|
||||||
//standing playerHead.position.y - player.position.y = -30 //negative
|
|
||||||
// m.undoCrouch()
|
|
||||||
// if (!m.crouch && ((playerHead.position.y - player.position.y) > 0)) {
|
|
||||||
// Matter.Body.translate(playerHead, {
|
|
||||||
// x: 0,
|
|
||||||
// y: 40
|
|
||||||
// });
|
|
||||||
// } else if (m.crouch && ((playerHead.position.y - player.position.y) > 10)) {
|
|
||||||
// Matter.Body.translate(playerHead, {
|
|
||||||
// x: 0,
|
|
||||||
// y: 40
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -976,6 +976,7 @@ const spawn = {
|
|||||||
// m.displayHealth();
|
// m.displayHealth();
|
||||||
document.getElementById("health").style.display = "none"
|
document.getElementById("health").style.display = "none"
|
||||||
document.getElementById("health-bg").style.display = "none"
|
document.getElementById("health-bg").style.display = "none"
|
||||||
|
document.getElementById("defense").style.display = "none"
|
||||||
document.getElementById("text-log").style.display = "none"
|
document.getElementById("text-log").style.display = "none"
|
||||||
document.getElementById("fade-out").style.opacity = 1; //slowly fades out
|
document.getElementById("fade-out").style.opacity = 1; //slowly fades out
|
||||||
// build.shareURL(false)
|
// build.shareURL(false)
|
||||||
|
|||||||
56
js/tech.js
56
js/tech.js
@@ -251,9 +251,9 @@ const tech = {
|
|||||||
if (tech.isNoFireDamage && m.cycle > m.fireCDcycle + 120) dmg *= 2
|
if (tech.isNoFireDamage && m.cycle > m.fireCDcycle + 120) dmg *= 2
|
||||||
if (tech.isSpeedDamage) dmg *= 1 + Math.min(0.66, player.speed * 0.0165)
|
if (tech.isSpeedDamage) dmg *= 1 + Math.min(0.66, player.speed * 0.0165)
|
||||||
if (tech.isDamageAfterKillNoRegen && m.lastKillCycle + 300 > m.cycle) dmg *= 1.6
|
if (tech.isDamageAfterKillNoRegen && m.lastKillCycle + 300 > m.cycle) dmg *= 1.6
|
||||||
if (tech.isAxion && tech.isHarmMACHO) dmg *= 2 - m.harmReduction()
|
if (tech.isAxion && tech.isHarmMACHO) dmg *= 2 - m.defense()
|
||||||
if (tech.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3;
|
if (tech.isHarmDamage && m.lastHarmCycle + 600 > m.cycle) dmg *= 3;
|
||||||
if (tech.lastHitDamage && m.lastHit) dmg *= 1 + tech.lastHitDamage * m.lastHit * (2 - m.harmReduction()) // if (!simulation.paused) m.lastHit = 0
|
if (tech.lastHitDamage && m.lastHit) dmg *= 1 + tech.lastHitDamage * m.lastHit * (2 - m.defense()) // if (!simulation.paused) m.lastHit = 0
|
||||||
if (tech.isLowHealthDmg) dmg *= 1 + 0.7 * Math.max(0, 1 - (tech.isEnergyHealth ? m.energy : m.health))
|
if (tech.isLowHealthDmg) dmg *= 1 + 0.7 * Math.max(0, 1 - (tech.isEnergyHealth ? m.energy : m.health))
|
||||||
return dmg
|
return dmg
|
||||||
},
|
},
|
||||||
@@ -330,7 +330,7 @@ const tech = {
|
|||||||
tech.hardLanding = 130
|
tech.hardLanding = 130
|
||||||
tech.isFallingDamage = false;
|
tech.isFallingDamage = false;
|
||||||
m.setMaxHealth();
|
m.setMaxHealth();
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -357,7 +357,7 @@ const tech = {
|
|||||||
tech.squirrelFx = 1;
|
tech.squirrelFx = 1;
|
||||||
tech.squirrelJump = 1;
|
tech.squirrelJump = 1;
|
||||||
m.setMovement()
|
m.setMovement()
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -378,7 +378,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isDilate = false
|
tech.isDilate = false
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -400,7 +400,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isDiaphragm = false
|
tech.isDiaphragm = false
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -424,6 +424,7 @@ const tech = {
|
|||||||
tech.isEnergyHealth = true;
|
tech.isEnergyHealth = true;
|
||||||
simulation.mobDmgColor = "rgba(0, 255, 255,0.6)" //"#0cf"
|
simulation.mobDmgColor = "rgba(0, 255, 255,0.6)" //"#0cf"
|
||||||
m.displayHealth();
|
m.displayHealth();
|
||||||
|
m.lastCalculatedDefense = 0 //this triggers a redraw of the defense bar
|
||||||
m.skin.energy();
|
m.skin.energy();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
@@ -435,9 +436,10 @@ const tech = {
|
|||||||
m.health = Math.max(Math.min(m.maxHealth, m.energy), 0.1);
|
m.health = Math.max(Math.min(m.maxHealth, m.energy), 0.1);
|
||||||
simulation.mobDmgColor = "rgba(255,0,0,0.7)"
|
simulation.mobDmgColor = "rgba(255,0,0,0.7)"
|
||||||
m.displayHealth();
|
m.displayHealth();
|
||||||
|
m.lastCalculatedDefense = 0 //this triggers a redraw of the defense bar
|
||||||
|
m.resetSkin();
|
||||||
}
|
}
|
||||||
tech.isEnergyHealth = false;
|
tech.isEnergyHealth = false;
|
||||||
m.resetSkin();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -494,7 +496,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isRewindAvoidDeath = false;
|
tech.isRewindAvoidDeath = false;
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3050,7 +3052,7 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "enthalpy",
|
name: "enthalpy",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `doing <strong class='color-d'>damage</strong> has a chance to spawn ${powerUps.orb.heal(1)}<br><strong>–10%</strong> <strong class='color-defense'>defense</strong>`
|
return `doing <strong class='color-d'>damage</strong> has a small chance to spawn ${powerUps.orb.heal(1)}` //<br><strong>–10%</strong> <strong class='color-defense'>defense</strong>
|
||||||
},
|
},
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3062,7 +3064,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
tech.healthDrain += 0.02;
|
tech.healthDrain += 0.019;
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.healthDrain = 0;
|
tech.healthDrain = 0;
|
||||||
@@ -3384,7 +3386,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
tech.isBrainstorm = true
|
tech.isBrainstorm = true
|
||||||
tech.isBrainstormActive = false
|
tech.isBrainstormActive = false
|
||||||
tech.brainStormDelay = 150 - simulation.difficultyMode * 7
|
tech.brainStormDelay = 2000 - simulation.difficultyMode * 100
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isBrainstorm = false
|
tech.isBrainstorm = false
|
||||||
@@ -5021,11 +5023,11 @@ const tech = {
|
|||||||
requires: "wave",
|
requires: "wave",
|
||||||
effect() {
|
effect() {
|
||||||
tech.waveBeamSpeed *= 0.75;
|
tech.waveBeamSpeed *= 0.75;
|
||||||
tech.waveBeamDamage += 0.33 * 0.41 //this sets base wave damage
|
tech.waveBeamDamage += 0.36 * 0.41 //this sets base wave damage
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.waveBeamSpeed = 11;
|
tech.waveBeamSpeed = 11;
|
||||||
tech.waveBeamDamage = 0.33 //this sets base wave damage
|
tech.waveBeamDamage = 0.36 //this sets base wave damage
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -7197,18 +7199,18 @@ const tech = {
|
|||||||
requires: "standing wave",
|
requires: "standing wave",
|
||||||
effect() {
|
effect() {
|
||||||
tech.harmonics++
|
tech.harmonics++
|
||||||
m.fieldShieldingScale = (tech.isStandingWaveExpand ? 0.9 : 1.3) * Math.pow(0.6, (tech.harmonics - 2))
|
m.fieldShieldingScale = (tech.isStandingWaveExpand ? 0.9 : 1.6) * Math.pow(0.6, (tech.harmonics - 2))
|
||||||
m.harmonicShield = m.harmonicAtomic
|
m.harmonicShield = m.harmonicAtomic
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.harmonics = 2
|
tech.harmonics = 2
|
||||||
m.fieldShieldingScale = (tech.isStandingWaveExpand ? 0.9 : 1.3) * Math.pow(0.6, (tech.harmonics - 2))
|
m.fieldShieldingScale = (tech.isStandingWaveExpand ? 0.9 : 1.6) * Math.pow(0.6, (tech.harmonics - 2))
|
||||||
m.harmonicShield = m.harmonic3Phase
|
m.harmonicShield = m.harmonic3Phase
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "expansion",
|
name: "expansion",
|
||||||
description: "<strong>+40%</strong> <strong>standing wave</strong> deflection efficiency<br>using <strong>standing wave</strong> field <strong>expands</strong> its <strong>radius</strong>",
|
description: "<strong>+50%</strong> <strong>standing wave</strong> deflection efficiency<br>using <strong>standing wave</strong> field <strong>expands</strong> its <strong>radius</strong>",
|
||||||
// description: "use <strong class='color-f'>energy</strong> to <strong>expand</strong> <strong>standing wave</strong><br>the field slowly <strong>contracts</strong> when not used",
|
// description: "use <strong class='color-f'>energy</strong> to <strong>expand</strong> <strong>standing wave</strong><br>the field slowly <strong>contracts</strong> when not used",
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -7395,9 +7397,9 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "dynamic equilibrium",
|
name: "dynamic equilibrium",
|
||||||
descriptionFunction() {
|
descriptionFunction() {
|
||||||
return `increase <strong class='color-d'>damage</strong> by your <strong class='color-defense'>defense</strong> and<br><strong>5%</strong> of your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss <em style = 'font-size:94%;'>(+${(100*Math.max(5,tech.lastHitDamage) * m.lastHit * (2 - m.harmReduction())).toFixed(0)}% damage)</em>`
|
return `increase <strong class='color-d'>damage</strong> by your <strong class='color-defense'>defense</strong> and<br><strong>5%</strong> of your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss <em style = 'font-size:94%;'>(+${(100*Math.max(5,tech.lastHitDamage) * m.lastHit * (2 - m.defense())).toFixed(0)}% damage)</em>`
|
||||||
}, // = <strong>+${10*m.harmReduction()}%</strong>
|
}, // = <strong>+${10*m.defense()}%</strong>
|
||||||
// descriptionFunction() { return `increase <strong class='color-d'>damage</strong> by your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss<br><strong style = 'font-size:90%;'>(${(tech.lastHitDamage).toFixed(0)}%)(${(100*m.lastHit).toFixed(0)} ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"})(${2 - m.harmReduction()} <strong class='color-defense'>defense</strong>) = ${(100*tech.lastHitDamage * m.lastHit * (2 - m.harmReduction())).toFixed(0)}% <strong class='color-d'>damage</strong></strong> ` }, // = <strong>+${10*m.harmReduction()}%</strong>
|
// descriptionFunction() { return `increase <strong class='color-d'>damage</strong> by your last ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"} loss<br><strong style = 'font-size:90%;'>(${(tech.lastHitDamage).toFixed(0)}%)(${(100*m.lastHit).toFixed(0)} ${tech.isEnergyHealth ? "<strong class='color-f'>energy</strong>" : "<strong class='color-h'>health</strong>"})(${2 - m.defense()} <strong class='color-defense'>defense</strong>) = ${(100*tech.lastHitDamage * m.lastHit * (2 - m.defense())).toFixed(0)}% <strong class='color-d'>damage</strong></strong> ` }, // = <strong>+${10*m.defense()}%</strong>
|
||||||
isFieldTech: true,
|
isFieldTech: true,
|
||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -9050,7 +9052,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
tech.isBrainstorm = true
|
tech.isBrainstorm = true
|
||||||
tech.isBrainstormActive = false
|
tech.isBrainstormActive = false
|
||||||
tech.brainStormDelay = 30
|
tech.brainStormDelay = 500
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isBrainstorm = false
|
tech.isBrainstorm = false
|
||||||
@@ -9513,6 +9515,7 @@ const tech = {
|
|||||||
effect() {
|
effect() {
|
||||||
document.getElementById("health").style.display = "none"
|
document.getElementById("health").style.display = "none"
|
||||||
document.getElementById("health-bg").style.display = "none"
|
document.getElementById("health-bg").style.display = "none"
|
||||||
|
document.getElementById("defense").style.display = "none"
|
||||||
for (let i = 0; i < 20; i++) powerUps.spawn(m.pos.x + 160 * (Math.random() - 0.5), m.pos.y + 160 * (Math.random() - 0.5), "heal");
|
for (let i = 0; i < 20; i++) powerUps.spawn(m.pos.x + 160 * (Math.random() - 0.5), m.pos.y + 160 * (Math.random() - 0.5), "heal");
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
@@ -9873,6 +9876,7 @@ const tech = {
|
|||||||
//move health to the right
|
//move health to the right
|
||||||
document.getElementById("health").style.left = "86px"
|
document.getElementById("health").style.left = "86px"
|
||||||
document.getElementById("health-bg").style.left = "86px"
|
document.getElementById("health-bg").style.left = "86px"
|
||||||
|
document.getElementById("defense").style.left = "86px"
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
},
|
},
|
||||||
@@ -10225,7 +10229,7 @@ const tech = {
|
|||||||
m.skin.stubs()
|
m.skin.stubs()
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -10244,7 +10248,7 @@ const tech = {
|
|||||||
m.skin.Sleipnir()
|
m.skin.Sleipnir()
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -10263,7 +10267,7 @@ const tech = {
|
|||||||
m.skin.diegesis()
|
m.skin.diegesis()
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -10282,7 +10286,7 @@ const tech = {
|
|||||||
m.skin.cat();
|
m.skin.cat();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -10301,7 +10305,7 @@ const tech = {
|
|||||||
m.draw = () => {}
|
m.draw = () => {}
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -10321,7 +10325,7 @@ const tech = {
|
|||||||
m.skin.pareidolia()
|
m.skin.pareidolia()
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
m.resetSkin();
|
if (this.count) m.resetSkin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
139
style.css
139
style.css
@@ -154,12 +154,13 @@ summary {
|
|||||||
border: 1px #333 solid;
|
border: 1px #333 solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
#flex-center{
|
#flex-center {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#choose-grid {
|
#choose-grid {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
@@ -178,9 +179,12 @@ summary {
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 0.25s linear;
|
transition: opacity 0.25s linear;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
-ms-overflow-style: none; /* IE and Edge */
|
-ms-overflow-style: none;
|
||||||
scrollbar-width: none; /* Firefox */
|
/* IE and Edge */
|
||||||
|
scrollbar-width: none;
|
||||||
|
/* Firefox */
|
||||||
}
|
}
|
||||||
|
|
||||||
#choose-grid::-webkit-scrollbar {
|
#choose-grid::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@@ -194,13 +198,14 @@ summary {
|
|||||||
.choose-grid-module:hover {
|
.choose-grid-module:hover {
|
||||||
background-color: var(--hover-card-color);
|
background-color: var(--hover-card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.choose-grid-module:hover .card-text {
|
.choose-grid-module:hover .card-text {
|
||||||
background-color: var(--hover-card-color);
|
background-color: var(--hover-card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.research-select {
|
.research-select {
|
||||||
float: right;
|
float: right;
|
||||||
margin-right:10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pause-grid {
|
.pause-grid {
|
||||||
@@ -217,12 +222,14 @@ summary {
|
|||||||
|
|
||||||
#pause-grid-right {
|
#pause-grid-right {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top:-2px;
|
top: -2px;
|
||||||
right:-4px;
|
right: -4px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
max-height: 100vh;
|
max-height: 100vh;
|
||||||
-ms-overflow-style: none; /* IE and Edge */
|
-ms-overflow-style: none;
|
||||||
scrollbar-width: none; /* Firefox */
|
/* IE and Edge */
|
||||||
|
scrollbar-width: none;
|
||||||
|
/* Firefox */
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,13 +239,16 @@ summary {
|
|||||||
|
|
||||||
#pause-grid-left {
|
#pause-grid-left {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top:-2px;
|
top: -2px;
|
||||||
left:-4px;
|
left: -4px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
max-height: 100vh;
|
max-height: 100vh;
|
||||||
-ms-overflow-style: none; /* IE and Edge */
|
-ms-overflow-style: none;
|
||||||
scrollbar-width: none; /* Firefox */
|
/* IE and Edge */
|
||||||
|
scrollbar-width: none;
|
||||||
|
/* Firefox */
|
||||||
}
|
}
|
||||||
|
|
||||||
.pause-console {
|
.pause-console {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
@@ -274,9 +284,12 @@ summary {
|
|||||||
/* bottom: 0px; */
|
/* bottom: 0px; */
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
-ms-overflow-style: none; /* IE and Edge */
|
-ms-overflow-style: none;
|
||||||
scrollbar-width: none; /* Firefox */
|
/* IE and Edge */
|
||||||
|
scrollbar-width: none;
|
||||||
|
/* Firefox */
|
||||||
}
|
}
|
||||||
|
|
||||||
#experiment-grid::-webkit-scrollbar {
|
#experiment-grid::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@@ -302,11 +315,11 @@ summary {
|
|||||||
background-color: var(--card-color);
|
background-color: var(--card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.experiment-start-box{
|
.experiment-start-box {
|
||||||
background-color: var(--card-color);
|
background-color: var(--card-color);
|
||||||
/* font-size: 1em; */
|
/* font-size: 1em; */
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top:0;
|
top: 0;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
align-self: start;
|
align-self: start;
|
||||||
width: 195px;
|
width: 195px;
|
||||||
@@ -321,22 +334,22 @@ summary {
|
|||||||
border-top-left-radius: 0px;
|
border-top-left-radius: 0px;
|
||||||
/* border-bottom-left-radius: 0px; */
|
/* border-bottom-left-radius: 0px; */
|
||||||
border-top-right-radius: 0px;
|
border-top-right-radius: 0px;
|
||||||
padding:0.2em 0px;
|
padding: 0.2em 0px;
|
||||||
height: 190px;
|
height: 190px;
|
||||||
box-shadow: 8px 8px 7px rgba(0,0,50,0.15);
|
box-shadow: 8px 8px 7px rgba(0, 0, 50, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-background {
|
.card-background {
|
||||||
height:340px;
|
height: 340px;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content:flex-end;
|
justify-content: flex-end;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-text {
|
.card-text {
|
||||||
background-color: rgba(255,255,255,1);
|
background-color: rgba(255, 255, 255, 1);
|
||||||
padding: 0.5em 1em;
|
padding: 0.5em 1em;
|
||||||
border: 1px solid #444;
|
border: 1px solid #444;
|
||||||
margin-top: -1px;
|
margin-top: -1px;
|
||||||
@@ -344,6 +357,7 @@ summary {
|
|||||||
font-size: 0.92em;
|
font-size: 0.92em;
|
||||||
min-height: 88px;
|
min-height: 88px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cancel-card {
|
.cancel-card {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
@@ -356,9 +370,11 @@ summary {
|
|||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
background-color: var(--card-color);
|
background-color: var(--card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.cancel-card:hover {
|
.cancel-card:hover {
|
||||||
background-color: var(--hover-card-color);
|
background-color: var(--hover-card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.research-card {
|
.research-card {
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
@@ -369,6 +385,7 @@ summary {
|
|||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
background-color: var(--card-color);
|
background-color: var(--card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.research-card:hover {
|
.research-card:hover {
|
||||||
background-color: var(--hover-card-color);
|
background-color: var(--hover-card-color);
|
||||||
}
|
}
|
||||||
@@ -376,36 +393,54 @@ summary {
|
|||||||
|
|
||||||
/* keeps 5 columns at 1440px */
|
/* keeps 5 columns at 1440px */
|
||||||
@media (min-width: 1710px) and (max-width: 1950px) {
|
@media (min-width: 1710px) and (max-width: 1950px) {
|
||||||
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
|
||||||
|
.experiment-grid-module,
|
||||||
|
.choose-grid-module,
|
||||||
|
.pause-grid-module {
|
||||||
line-height: 143%;
|
line-height: 143%;
|
||||||
font-size: 0.68em;
|
font-size: 0.68em;
|
||||||
}
|
}
|
||||||
#experiment-grid, #choose-grid, .pause-grid{
|
|
||||||
|
#experiment-grid,
|
||||||
|
#choose-grid,
|
||||||
|
.pause-grid {
|
||||||
grid-template-columns: repeat(auto-fit, 340px);
|
grid-template-columns: repeat(auto-fit, 340px);
|
||||||
}
|
}
|
||||||
.card-background{
|
|
||||||
height:290px;
|
.card-background {
|
||||||
|
height: 290px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-text {
|
.card-text {
|
||||||
min-height: 75px;
|
min-height: 75px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (min-width: 30em) and (max-width: 80em) */
|
/* (min-width: 30em) and (max-width: 80em) */
|
||||||
@media (max-width: 1709px) {
|
@media (max-width: 1709px) {
|
||||||
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
|
||||||
|
.experiment-grid-module,
|
||||||
|
.choose-grid-module,
|
||||||
|
.pause-grid-module {
|
||||||
line-height: 139%;
|
line-height: 139%;
|
||||||
font-size: 0.58em;
|
font-size: 0.58em;
|
||||||
}
|
}
|
||||||
#experiment-grid, #choose-grid, .pause-grid{
|
|
||||||
|
#experiment-grid,
|
||||||
|
#choose-grid,
|
||||||
|
.pause-grid {
|
||||||
grid-template-columns: repeat(auto-fit, 285px);
|
grid-template-columns: repeat(auto-fit, 285px);
|
||||||
}
|
}
|
||||||
.card-background{
|
|
||||||
height:240px;
|
.card-background {
|
||||||
|
height: 240px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-text {
|
.card-text {
|
||||||
min-height: 64px;
|
min-height: 64px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* keeps 4 columns at 1440px */
|
/* keeps 4 columns at 1440px */
|
||||||
/* @media (1500px <= width < 1950px) {
|
/* @media (1500px <= width < 1950px) {
|
||||||
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
.experiment-grid-module, .choose-grid-module, .pause-grid-module {
|
||||||
@@ -441,21 +476,27 @@ summary {
|
|||||||
.experiment-grid-module:hover .card-text {
|
.experiment-grid-module:hover .card-text {
|
||||||
background-color: var(--hover-card-color);
|
background-color: var(--hover-card-color);
|
||||||
}
|
}
|
||||||
.build-tech-selected .card-text{
|
|
||||||
|
.build-tech-selected .card-text {
|
||||||
background-color: hsl(253, 100%, 84%);
|
background-color: hsl(253, 100%, 84%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.build-tech-selected.experiment-grid-module:hover .card-text {
|
.build-tech-selected.experiment-grid-module:hover .card-text {
|
||||||
background-color: hsl(253, 100%, 81%);
|
background-color: hsl(253, 100%, 81%);
|
||||||
}
|
}
|
||||||
.build-gun-selected .card-text{
|
|
||||||
|
.build-gun-selected .card-text {
|
||||||
background-color: hsl(218, 100%, 81%);
|
background-color: hsl(218, 100%, 81%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.build-gun-selected.experiment-grid-module:hover .card-text {
|
.build-gun-selected.experiment-grid-module:hover .card-text {
|
||||||
background-color: hsl(218, 100%, 76%);
|
background-color: hsl(218, 100%, 76%);
|
||||||
}
|
}
|
||||||
.build-field-selected .card-text{
|
|
||||||
|
.build-field-selected .card-text {
|
||||||
background-color: hsl(193, 100%, 75%);
|
background-color: hsl(193, 100%, 75%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.build-field-selected.experiment-grid-module:hover .card-text {
|
.build-field-selected.experiment-grid-module:hover .card-text {
|
||||||
background-color: hsl(193, 100%, 68%);
|
background-color: hsl(193, 100%, 68%);
|
||||||
}
|
}
|
||||||
@@ -512,6 +553,24 @@ summary {
|
|||||||
transition: opacity 1s;
|
transition: opacity 1s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#defense {
|
||||||
|
position: absolute;
|
||||||
|
top: 9px;
|
||||||
|
left: 15px;
|
||||||
|
height: 5px;
|
||||||
|
width: 0px;
|
||||||
|
transition: width 0.25s linear;
|
||||||
|
opacity: 1;
|
||||||
|
z-index: 2;
|
||||||
|
pointer-events: none;
|
||||||
|
background-color: #fff;
|
||||||
|
border-top: 1px solid #000;
|
||||||
|
/* border-bottom: 1px solid #000; */
|
||||||
|
/* border-left: 1px solid #000; */
|
||||||
|
border-right: 1px solid #000;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
#health-bg {
|
#health-bg {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 15px;
|
top: 15px;
|
||||||
@@ -537,6 +596,7 @@ summary {
|
|||||||
z-index: 2;
|
z-index: 2;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background-color: #f00;
|
background-color: #f00;
|
||||||
|
/* display: none; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.low-health {
|
.low-health {
|
||||||
@@ -770,6 +830,7 @@ summary {
|
|||||||
padding: 0.5px;
|
padding: 0.5px;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-cancel {
|
.color-cancel {
|
||||||
background-color: var(--card-color);
|
background-color: var(--card-color);
|
||||||
border: 0.15em #444 solid;
|
border: 0.15em #444 solid;
|
||||||
@@ -813,6 +874,7 @@ summary {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-bottom: -0.3em;
|
margin-bottom: -0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.circle-grid-skin {
|
.circle-grid-skin {
|
||||||
width: 1.25em;
|
width: 1.25em;
|
||||||
height: 1.25em;
|
height: 1.25em;
|
||||||
@@ -822,10 +884,11 @@ summary {
|
|||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
border: 0.08em solid #222;
|
border: 0.08em solid #222;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top:-0.05em;
|
top: -0.05em;
|
||||||
left:0em;
|
left: 0em;
|
||||||
margin-bottom: -0.3em;
|
margin-bottom: -0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.circle-grid-skin-eye {
|
.circle-grid-skin-eye {
|
||||||
width: 0.18em;
|
width: 0.18em;
|
||||||
height: 0.18em;
|
height: 0.18em;
|
||||||
@@ -838,6 +901,7 @@ summary {
|
|||||||
left: 0.9em;
|
left: 0.9em;
|
||||||
margin-bottom: -0.3em;
|
margin-bottom: -0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.junk {
|
.junk {
|
||||||
background-color: hsl(254, 44%, 75%);
|
background-color: hsl(254, 44%, 75%);
|
||||||
border-radius: 25%;
|
border-radius: 25%;
|
||||||
@@ -875,6 +939,7 @@ summary {
|
|||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
margin-bottom: -3px;
|
margin-bottom: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.heal-circle-energy {
|
.heal-circle-energy {
|
||||||
width: 0.95em;
|
width: 0.95em;
|
||||||
height: 0.95em;
|
height: 0.95em;
|
||||||
@@ -1021,20 +1086,24 @@ summary {
|
|||||||
border: none;
|
border: none;
|
||||||
background-color: var(--card-color);
|
background-color: var(--card-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.flipX {
|
.flipX {
|
||||||
animation: 14s anim-flipX linear infinite;
|
animation: 14s anim-flipX linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes anim-flipX {
|
@keyframes anim-flipX {
|
||||||
0% {
|
0% {
|
||||||
transform: rotateX(0.5turn);
|
transform: rotateX(0.5turn);
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
transform: rotateX(1turn);
|
transform: rotateX(1turn);
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
transform: rotateX(0.5turn);
|
transform: rotateX(0.5turn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes fieldColorCycle {
|
@keyframes fieldColorCycle {
|
||||||
0% {
|
0% {
|
||||||
|
|||||||
20
todo.txt
20
todo.txt
@@ -1,19 +1,18 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
base wave gun rework
|
added defense bar to HUD
|
||||||
damage per hit 1.55 -> 0.33, -15% range, +20% ammo
|
new community map commandeer by Desboot
|
||||||
no pause between wave packets
|
|
||||||
wave bullets can hit about once every 10 game cycles (1/6 of a second)
|
|
||||||
time between hits is reduced by fire rate
|
|
||||||
wave tech frequency has -25% damage no longer reduces fire rate
|
|
||||||
+10% phonon damage and ammo
|
|
||||||
|
|
||||||
JUNK tech: universal healthcare - your damage heals mobs
|
|
||||||
|
|
||||||
bug fixes
|
bug fixes
|
||||||
|
|
||||||
*********************************************************** TODO *****************************************************
|
*********************************************************** TODO *****************************************************
|
||||||
|
|
||||||
|
switch to prettier formatter or remove beautify
|
||||||
|
|
||||||
|
extend brainstorming animation timers to fps cap?
|
||||||
|
will it be smoother or choppier?
|
||||||
|
anything else needs to hit limited fps on a high fps monitor?
|
||||||
|
|
||||||
level element - mover, transport
|
level element - mover, transport
|
||||||
test effect of changing m.Vx on things like: shooting bullets?
|
test effect of changing m.Vx on things like: shooting bullets?
|
||||||
extend the recentered friction zero to other things
|
extend the recentered friction zero to other things
|
||||||
@@ -60,6 +59,9 @@ diagetic UI Elements
|
|||||||
as the total energy and health increases the curses could asymptotically approach a maximum length as max energy/health goes to infinity
|
as the total energy and health increases the curses could asymptotically approach a maximum length as max energy/health goes to infinity
|
||||||
|
|
||||||
|
|
||||||
|
foam gun could have a knock back effect
|
||||||
|
maybe with pressure vessel?
|
||||||
|
|
||||||
perfect diamagnatism could bounce on mobs, or even map elements?
|
perfect diamagnatism could bounce on mobs, or even map elements?
|
||||||
could work like a rocket jump?
|
could work like a rocket jump?
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user