defense HUD

added defense bar to HUD
new community map commandeer by Desboot

bug fixes
This commit is contained in:
landgreen
2023-03-11 13:47:41 -08:00
parent 36541986ba
commit 9bcf4d3e8c
11 changed files with 1079 additions and 165 deletions

View File

@@ -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">

View File

@@ -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

View File

@@ -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)} &nbsp; &nbsp; difficulty: ${((m.dmgScale)).toPrecision(4)} <br><strong class='color-d'>damage</strong>: ${((tech.damageFromTech())).toPrecision(4)} &nbsp; &nbsp; 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) } &nbsp; &nbsp; 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) } &nbsp; &nbsp; 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)} &nbsp; <span style = 'font-size:90%;'>`+m.couplingDescription()+"</span>": ""} ${m.coupling ? `<br><strong class='color-coupling'>coupling</strong>: ${(m.coupling).toFixed(2)} &nbsp; <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);

View File

@@ -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;

View File

@@ -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
return dmg if (tech.isEnergyHealth) {
return Math.pow(dmg, 0.13) //defense has less effect
} else {
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

View File

@@ -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
count++ let timeStart = performance.now()
if (count < tech.brainStormDelay * 5 && simulation.isChoosing) { const cycle = (timestamp) => {
if (!(count % tech.brainStormDelay)) { // if (timeStart === undefined) timeStart = timestamp
powerUps.tech.effect(); // console.log(timestamp, timeStart)
document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay if (timestamp - timeStart > tech.brainStormDelay * count) {
document.body.style.cursor = "auto"; count++
document.getElementById("choose-grid").style.transitionDuration = "0s"; 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); 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

View File

@@ -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(); if (!m.isBodiesAsleep) mobs.loop();
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(); if (!m.isBodiesAsleep) mobs.loop();
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
// });
// }
} }
} }
}, },

View File

@@ -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)

View File

@@ -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 &nbsp; <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 &nbsp; <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();
} }
}, },
{ {

147
style.css
View File

@@ -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 {
@@ -574,7 +634,7 @@ summary {
color: #222; color: #222;
/* background-color: rgba(255, 255, 255, 0.4); */ /* background-color: rgba(255, 255, 255, 0.4); */
background-color: rgba(255, 255, 255, 0.2); background-color: rgba(255, 255, 255, 0.2);
line-height: 120%; line-height: 120%;
user-select: none; user-select: none;
pointer-events: none; pointer-events: none;
padding: 0px 5px 0px 5px; padding: 0px 5px 0px 5px;
@@ -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% {

View File

@@ -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?