electrostatic induction
tech: electrostatic induction - foam bullets are attracted to nearby mobs portals on perplex map, now remove blocks that fall in new community map! coliseum by iNoobBoi a few more tech can be refunded properly nonRefundable tech don't show up in the list of tech you have
This commit is contained in:
26
js/bullet.js
26
js/bullet.js
@@ -307,23 +307,25 @@ const b = {
|
|||||||
explosionRange() {
|
explosionRange() {
|
||||||
return tech.explosiveRadius * (tech.isExplosionHarm ? 1.8 : 1) * (tech.isSmallExplosion ? 0.8 : 1) * (tech.isExplodeRadio ? 1.25 : 1)
|
return tech.explosiveRadius * (tech.isExplosionHarm ? 1.8 : 1) * (tech.isSmallExplosion ? 0.8 : 1) * (tech.isExplodeRadio ? 1.25 : 1)
|
||||||
},
|
},
|
||||||
explosion(where, radius) { // typically explode is used for some bullets with .onEnd
|
explosion(where, radius, color = "rgba(255,25,0,0.6)") { // typically explode is used for some bullets with .onEnd
|
||||||
radius *= tech.explosiveRadius
|
radius *= tech.explosiveRadius
|
||||||
let dist, sub, knock;
|
let dist, sub, knock;
|
||||||
let dmg = radius * 0.013;
|
let dmg = radius * 0.013;
|
||||||
if (tech.isExplosionHarm) radius *= 1.8 // 1/sqrt(2) radius -> area
|
if (tech.isExplosionHarm) radius *= 1.8 // 1/sqrt(2) radius -> area
|
||||||
if (tech.isSmallExplosion) {
|
if (tech.isSmallExplosion) {
|
||||||
|
color = "rgba(255,0,30,0.7)"
|
||||||
radius *= 0.8
|
radius *= 0.8
|
||||||
dmg *= 1.6
|
dmg *= 1.6
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tech.isExplodeRadio) { //radiation explosion
|
if (tech.isExplodeRadio) { //radiation explosion
|
||||||
radius *= 1.25; //alert range
|
radius *= 1.25; //alert range
|
||||||
|
color = "rgba(25,139,170,0.25)"
|
||||||
simulation.drawList.push({ //add dmg to draw queue
|
simulation.drawList.push({ //add dmg to draw queue
|
||||||
x: where.x,
|
x: where.x,
|
||||||
y: where.y,
|
y: where.y,
|
||||||
radius: radius,
|
radius: radius,
|
||||||
color: "rgba(25,139,170,0.25)",
|
color: color,
|
||||||
time: simulation.drawTime * 2
|
time: simulation.drawTime * 2
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -360,7 +362,7 @@ const b = {
|
|||||||
x: where.x,
|
x: where.x,
|
||||||
y: where.y,
|
y: where.y,
|
||||||
radius: radius,
|
radius: radius,
|
||||||
color: "rgba(255,25,0,0.6)",
|
color: color,
|
||||||
time: simulation.drawTime
|
time: simulation.drawTime
|
||||||
});
|
});
|
||||||
const alertRange = 100 + radius * 2; //alert range
|
const alertRange = 100 + radius * 2; //alert range
|
||||||
@@ -2246,7 +2248,7 @@ const b = {
|
|||||||
this.target = null
|
this.target = null
|
||||||
this.collisionFilter.category = cat.bullet;
|
this.collisionFilter.category = cat.bullet;
|
||||||
this.collisionFilter.mask = cat.mob //| cat.mobShield //cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield
|
this.collisionFilter.mask = cat.mob //| cat.mobShield //cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield
|
||||||
if (tech.isFoamGrowOnDeath && bullet.length < 300) {
|
if (tech.isFoamGrowOnDeath && bullet.length < 250) {
|
||||||
let targets = []
|
let targets = []
|
||||||
for (let i = 0, len = mob.length; i < len; i++) {
|
for (let i = 0, len = mob.length; i < len; i++) {
|
||||||
const dist = Vector.magnitudeSquared(Vector.sub(this.position, mob[i].position));
|
const dist = Vector.magnitudeSquared(Vector.sub(this.position, mob[i].position));
|
||||||
@@ -2290,6 +2292,20 @@ const b = {
|
|||||||
this.radius *= SCALE;
|
this.radius *= SCALE;
|
||||||
} else {
|
} else {
|
||||||
this.force.y += this.mass * 0.00008; //gravity
|
this.force.y += this.mass * 0.00008; //gravity
|
||||||
|
|
||||||
|
if (tech.isFoamAttract) {
|
||||||
|
for (let i = 0, len = mob.length; i < len; i++) {
|
||||||
|
if (mob[i].dropPowerUp && Vector.magnitude(Vector.sub(mob[i].position, this.position)) < 375 && mob[i].alive && Matter.Query.ray(map, this.position, mob[i].position).length === 0) {
|
||||||
|
this.force = Vector.mult(Vector.normalise(Vector.sub(mob[i].position, this.position)), this.mass * 0.004)
|
||||||
|
const slow = 0.9
|
||||||
|
Matter.Body.setVelocity(this, {
|
||||||
|
x: this.velocity.x * slow,
|
||||||
|
y: this.velocity.y * slow
|
||||||
|
});
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4063,7 +4079,7 @@ const b = {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (!simulation.paused) {
|
if (!simulation.paused) {
|
||||||
b.foam(position, Vector.rotate(velocity, 0.5 * (Math.random() - 0.5)), radius)
|
b.foam(position, Vector.rotate(velocity, 0.5 * (Math.random() - 0.5)), radius)
|
||||||
bullet[bullet.length - 1].damage = (1 + 1.43 * tech.foamFutureFire) * (tech.isFastFoam ? 0.048 : 0.012) //double damage
|
bullet[bullet.length - 1].damage = (1 + 1.27 * tech.foamFutureFire) * (tech.isFastFoam ? 0.048 : 0.012) //double damage
|
||||||
}
|
}
|
||||||
}, 250 * tech.foamFutureFire);
|
}, 250 * tech.foamFutureFire);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
10
js/index.js
10
js/index.js
@@ -217,7 +217,7 @@ const build = {
|
|||||||
text += `<div class="pause-grid-module" id ="pause-field"><div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[m.fieldMode].name}</div> ${m.fieldUpgrades[m.fieldMode].description}</div>`
|
text += `<div class="pause-grid-module" id ="pause-field"><div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[m.fieldMode].name}</div> ${m.fieldUpgrades[m.fieldMode].description}</div>`
|
||||||
let countTech = 0
|
let countTech = 0
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
if (tech.tech[i].count > 0) {
|
if (tech.tech[i].count > 0 && !tech.tech[i].isNonRefundable) {
|
||||||
const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
|
const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
|
||||||
if (tech.tech[i].isFieldTech) {
|
if (tech.tech[i].isFieldTech) {
|
||||||
text += `<div class="pause-grid-module"><div class="grid-title">
|
text += `<div class="pause-grid-module"><div class="grid-title">
|
||||||
@@ -235,8 +235,8 @@ const build = {
|
|||||||
${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
||||||
} else if (tech.tech[i].isLore) {
|
} else if (tech.tech[i].isLore) {
|
||||||
text += `<div class="pause-grid-module"><div class="grid-title lore-text"><div class="circle-grid lore"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
text += `<div class="pause-grid-module"><div class="grid-title lore-text"><div class="circle-grid lore"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
||||||
} else if (tech.tech[i].isJunk) {
|
// } else if (tech.tech[i].isJunk) {
|
||||||
text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid junk"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
// text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid junk"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
||||||
} else {
|
} else {
|
||||||
text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
text += `<div class="pause-grid-module"><div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[i].name} ${isCount}</div>${tech.tech[i].description}</div></div>`
|
||||||
}
|
}
|
||||||
@@ -756,10 +756,6 @@ window.addEventListener("keydown", function(event) {
|
|||||||
document.getElementById("pause-field").innerHTML = `<div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[m.fieldMode].name}</div> ${m.fieldUpgrades[m.fieldMode].description}`
|
document.getElementById("pause-field").innerHTML = `<div class="grid-title"><div class="circle-grid field"></div> ${m.fieldUpgrades[m.fieldMode].name}</div> ${m.fieldUpgrades[m.fieldMode].description}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (simulation.testing) {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
|
|||||||
332
js/level.js
332
js/level.js
@@ -16,7 +16,7 @@ const level = {
|
|||||||
// simulation.zoomScale = 1000;
|
// simulation.zoomScale = 1000;
|
||||||
// simulation.setZoom();
|
// simulation.setZoom();
|
||||||
// m.setField("nano-scale manufacturing")
|
// m.setField("nano-scale manufacturing")
|
||||||
// b.giveGuns("shotgun")
|
// b.giveGuns("foam")
|
||||||
// tech.isExplodeRadio = true
|
// tech.isExplodeRadio = true
|
||||||
// for (let i = 0; i < 1; i++) tech.giveTech("dynamo-bot")
|
// for (let i = 0; i < 1; i++) tech.giveTech("dynamo-bot")
|
||||||
// tech.giveTech("supercritical fission")
|
// tech.giveTech("supercritical fission")
|
||||||
@@ -50,21 +50,20 @@ const level = {
|
|||||||
// level.warehouse();
|
// level.warehouse();
|
||||||
// level.highrise();
|
// level.highrise();
|
||||||
// level.office();
|
// level.office();
|
||||||
// level.gauntlet(); //only fighting, very simple map
|
// level.gauntlet(); //only fighting, very simple map, before final boss
|
||||||
// level.house() //fan level
|
// level.house() //community level
|
||||||
// level.detours() //fan level
|
// level.detours() //community level
|
||||||
// level.basement(); //fan level
|
// level.basement(); //community level
|
||||||
// level.stronghold() //fan level
|
// level.stronghold() //community level
|
||||||
// level.testChamber2() //fan level
|
// level.perplex() //community level
|
||||||
|
// level.coliseum() //community level
|
||||||
|
|
||||||
// powerUps.directSpawn(simulation.mouseInGame.x, simulation.mouseInGame.y, "tech");
|
// powerUps.directSpawn(simulation.mouseInGame.x, simulation.mouseInGame.y, "tech");
|
||||||
// tech.giveTech("undefined")
|
// tech.giveTech("undefined")
|
||||||
// lore.techCount = 7
|
// lore.techCount = 6
|
||||||
// localSettings.loreCount = 1;
|
|
||||||
// simulation.isCheating = false //true;
|
|
||||||
// localSettings.loreCount = 1;
|
// localSettings.loreCount = 1;
|
||||||
// localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
// localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||||
|
// simulation.isCheating = false //true;
|
||||||
// level.null()
|
// level.null()
|
||||||
} else {
|
} else {
|
||||||
spawn.setSpawnList(); //picks a couple mobs types for a themed random mob spawns
|
spawn.setSpawnList(); //picks a couple mobs types for a themed random mob spawns
|
||||||
@@ -622,7 +621,7 @@ const level = {
|
|||||||
ctx.fillStyle = this.color
|
ctx.fillStyle = this.color
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
}
|
}
|
||||||
query = function() {
|
query = function(isRemoveBlocks = false) {
|
||||||
if (Matter.Query.collides(this, [player]).length === 0) { //not touching player
|
if (Matter.Query.collides(this, [player]).length === 0) { //not touching player
|
||||||
if (player.isInPortal === this) player.isInPortal = null
|
if (player.isInPortal === this) player.isInPortal = null
|
||||||
} else if (player.isInPortal !== this) { //touching player
|
} else if (player.isInPortal !== this) { //touching player
|
||||||
@@ -666,6 +665,11 @@ const level = {
|
|||||||
if (Matter.Query.collides(this, [body[i]]).length === 0) {
|
if (Matter.Query.collides(this, [body[i]]).length === 0) {
|
||||||
if (body[i].isInPortal === this) body[i].isInPortal = null
|
if (body[i].isInPortal === this) body[i].isInPortal = null
|
||||||
} else if (body[i].isInPortal !== this) { //touching this portal, but for the first time
|
} else if (body[i].isInPortal !== this) { //touching this portal, but for the first time
|
||||||
|
if (isRemoveBlocks) {
|
||||||
|
Matter.World.remove(engine.world, body[i]);
|
||||||
|
body.splice(i, 1);
|
||||||
|
break
|
||||||
|
}
|
||||||
body[i].isInPortal = this.portalPair
|
body[i].isInPortal = this.portalPair
|
||||||
//teleport
|
//teleport
|
||||||
if (this.portalPair.angle % (Math.PI / 2)) { //if left, right up or down
|
if (this.portalPair.angle % (Math.PI / 2)) { //if left, right up or down
|
||||||
@@ -683,11 +687,6 @@ const level = {
|
|||||||
let v = Vector.mult(this.portalPair.unit, mag)
|
let v = Vector.mult(this.portalPair.unit, mag)
|
||||||
Matter.Body.setVelocity(body[i], v);
|
Matter.Body.setVelocity(body[i], v);
|
||||||
}
|
}
|
||||||
// else if (body[i].speed < 0.1) { //touching this portal and very slow
|
|
||||||
// Matter.World.remove(engine.world, body[i]);
|
|
||||||
// body.splice(i, 1);
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
@@ -4673,7 +4672,7 @@ const level = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
testChamber2() {
|
perplex() {
|
||||||
level.setPosToSpawn(-600, 400);
|
level.setPosToSpawn(-600, 400);
|
||||||
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||||
level.exit.x = 550;
|
level.exit.x = 550;
|
||||||
@@ -4699,10 +4698,10 @@ const level = {
|
|||||||
level.custom = () => {
|
level.custom = () => {
|
||||||
level.playerExitCheck();
|
level.playerExitCheck();
|
||||||
|
|
||||||
portal[2].query()
|
portal[2].query(true)
|
||||||
portal[3].query()
|
portal[3].query(true)
|
||||||
portal2[2].query()
|
portal2[2].query(true)
|
||||||
portal2[3].query()
|
portal2[3].query(true)
|
||||||
rotor.rotate();
|
rotor.rotate();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -4739,19 +4738,33 @@ const level = {
|
|||||||
y: -250,
|
y: -250,
|
||||||
width: 1500,
|
width: 1500,
|
||||||
height: 700,
|
height: 700,
|
||||||
color: "rgba(0,0,0,0.1)"
|
color: "rgba(0,0,0,0.03)"
|
||||||
});
|
});
|
||||||
level.fill.push({
|
level.fill.push({
|
||||||
x: -925,
|
x: -925,
|
||||||
y: -505,
|
y: -505,
|
||||||
width: 930,
|
width: 930,
|
||||||
height: 255,
|
height: 255,
|
||||||
color: "rgba(0,0,0,0.1)"
|
color: "rgba(0,0,0,0.03)"
|
||||||
});
|
});
|
||||||
|
// level.fill.push({
|
||||||
|
// x: -1280,
|
||||||
|
// y: -700,
|
||||||
|
// width: 355,
|
||||||
|
// height: 800,
|
||||||
|
// color: "rgba(0,0,0,0.03)"
|
||||||
|
// });
|
||||||
|
|
||||||
//section 2: lower central room (gone through main portals 1 time)
|
//section 2: lower central room (gone through main portals 1 time)
|
||||||
spawn.mapRect(920, 245, 160, 455); //below right portal
|
spawn.mapRect(920, 245, 160, 455); //below right portal
|
||||||
spawn.mapRect(1075, -300, 500, 1000); //2-1 right floor
|
spawn.mapRect(1075, -300, 500, 1000); //2-1 right floor
|
||||||
|
spawn.bodyRect(100, -1000, 50, 350);
|
||||||
|
spawn.bodyRect(100, -1015, 250, 15);
|
||||||
|
spawn.mapRect(-925, -1600, 100, 1000); //2-2 left wall
|
||||||
|
spawn.mapRect(725, -2150, 200, 750); //2-2 right wall
|
||||||
|
spawn.mapRect(725, -1200, 200, 200); //2-2 right wall 2
|
||||||
|
spawn.mapRect(300, -1000, 625, 50); //2 central ledge
|
||||||
|
//shute
|
||||||
spawn.mapRect(1075, -2005, 550, 1055); //shute right wall
|
spawn.mapRect(1075, -2005, 550, 1055); //shute right wall
|
||||||
spawn.mapRect(875, -1000, 50, 300); //shute left 1
|
spawn.mapRect(875, -1000, 50, 300); //shute left 1
|
||||||
spawn.mapRect(860, -1030, 50, 300); //shute left 2
|
spawn.mapRect(860, -1030, 50, 300); //shute left 2
|
||||||
@@ -4761,12 +4774,21 @@ const level = {
|
|||||||
spawn.mapRect(1090, -1030, 50, 300); //shute right 2
|
spawn.mapRect(1090, -1030, 50, 300); //shute right 2
|
||||||
spawn.mapRect(1100, -1100, 50, 300); //shute right 3
|
spawn.mapRect(1100, -1100, 50, 300); //shute right 3
|
||||||
spawn.mapRect(1120, -980, 50, 50); //shute right 4
|
spawn.mapRect(1120, -980, 50, 50); //shute right 4
|
||||||
spawn.bodyRect(100, -1000, 50, 350);
|
spawn.mapRect(1850, -650, 400, 50); //drop from 4-1
|
||||||
spawn.bodyRect(100, -1015, 250, 15);
|
// level.fill.push({
|
||||||
spawn.mapRect(-925, -1600, 100, 1000); //2-2 left wall
|
// x: 150,
|
||||||
spawn.mapRect(725, -2150, 200, 750); //2-2 right wall
|
// y: -1000,
|
||||||
spawn.mapRect(725, -1200, 200, 200); //2-2 right wall 2
|
// width: 775,
|
||||||
spawn.mapRect(300, -1000, 625, 50); //2 central ledge
|
// height: 700,
|
||||||
|
// color: "rgba(0,0,0,0.03)"
|
||||||
|
// });
|
||||||
|
// level.fill.push({
|
||||||
|
// x: 1075,
|
||||||
|
// y: -1000,
|
||||||
|
// width: 500,
|
||||||
|
// height: 700,
|
||||||
|
// color: "rgba(0,0,0,0.03)"
|
||||||
|
// });
|
||||||
level.fill.push({
|
level.fill.push({
|
||||||
x: 725,
|
x: 725,
|
||||||
y: -1400,
|
y: -1400,
|
||||||
@@ -4774,91 +4796,100 @@ const level = {
|
|||||||
height: 200,
|
height: 200,
|
||||||
color: "rgba(0,0,0,0.1)"
|
color: "rgba(0,0,0,0.1)"
|
||||||
});
|
});
|
||||||
level.fill.push({
|
level.fill.push({ //lower shute
|
||||||
x: 925,
|
x: 925,
|
||||||
y: -2150,
|
y: -2150,
|
||||||
width: 150,
|
width: 150,
|
||||||
height: 2175,
|
height: 2175,
|
||||||
color: "rgba(0,0,0,0.1)"
|
color: "rgba(0,0,0,0.1)"
|
||||||
});
|
});
|
||||||
level.fill.push({
|
level.fill.push({ //upper shute
|
||||||
x: 925,
|
x: 925,
|
||||||
y: -3450,
|
y: -3400,
|
||||||
width: 150,
|
width: 150,
|
||||||
height: 900,
|
height: 850,
|
||||||
color: "rgba(0,0,0,0.1)"
|
color: "rgba(0,0,0,0.1)"
|
||||||
});
|
});
|
||||||
|
|
||||||
//section 3: upper left room and upper central room (gone through main portals 2 times)
|
//section 3: upper left room and upper central room (gone through main portals 2 times)
|
||||||
|
//3-2 is just the upper part of 2-2
|
||||||
spawn.mapRect(-1775, -1000, 700, 300); //3-1 floor
|
spawn.mapRect(-1775, -1000, 700, 300); //3-1 floor
|
||||||
spawn.mapRect(-1900, -2300, 175, 1600); //3-1 left wall
|
spawn.mapRect(-1900, -2300, 175, 1600); //3-1 left wall
|
||||||
spawn.mapRect(-1375, -1300, 300, 50); //3-1 platform 1
|
spawn.mapRect(-1375, -1300, 300, 50); //3-1 platform 1
|
||||||
spawn.mapRect(-1600, -1650, 300, 50); //3-1 platform 2
|
spawn.mapRect(-1600, -1650, 300, 50); //3-1 platform 2
|
||||||
spawn.mapRect(-1775, -2300, 700, 300); //3-1 ceiling
|
spawn.mapRect(-1775, -2300, 700, 300); //3-1 ceiling
|
||||||
spawn.mapRect(-830, -1600, 300, 50); //2 upper left ledge
|
spawn.mapRect(-830, -1600, 300, 50); //3-2 left ledge
|
||||||
spawn.mapRect(250, -2150, 675, 50); //2 upper right ledge
|
spawn.mapRect(250, -2150, 675, 50); //3-2 right ledge
|
||||||
spawn.mapRect(-925, -2300, 100, 400); //3-2 left wall
|
spawn.mapRect(-925, -2300, 100, 300); //3-2 left wall
|
||||||
spawn.mapRect(-600, -2700, 1525, 150); //3-2 ceiling
|
spawn.mapRect(-600, -2700, 1525, 150); //3-2 ceiling
|
||||||
spawn.mapRect(1075, -2150, 250, 150); //next to upper portal
|
spawn.mapRect(1075, -2150, 250, 150); //next to upper portal
|
||||||
level.fill.push({
|
// level.fill.push({
|
||||||
x: -1730,
|
// x: -1730,
|
||||||
y: -2300,
|
// y: -2300,
|
||||||
width: 870,
|
// width: 870,
|
||||||
height: 1600,
|
// height: 1600,
|
||||||
color: "rgba(0,0,0,0.1)"
|
// color: "rgba(0,0,0,0.03)"
|
||||||
});
|
// });
|
||||||
|
|
||||||
//section 4: upper right portals
|
//section 4: upper right portals
|
||||||
spawn.mapRect(1475, -2700, 150, 700); //4-1 left wall
|
spawn.mapRect(1475, -2700, 150, 700); //4-1 left wall
|
||||||
spawn.mapRect(1775, -1650, 250, 150); //4-1 floor-ish
|
spawn.mapRect(1775, -1650, 250, 150); //4-1 floor-ish
|
||||||
spawn.mapRect(1575, -1505, 450, 555); //below upper right portal
|
spawn.mapRect(1575, -1505, 450, 555); //below upper right portal
|
||||||
spawn.mapRect(1800, -2250, 400, 50); //4-1 platform 2
|
spawn.mapRect(1800, -2250, 400, 50); //4-1 platform 2
|
||||||
spawn.bodyRect(2200, -2250, 25, 300);
|
spawn.bodyRect(2200, -2250, 15, 300);
|
||||||
spawn.mapRect(2200, -1950, 400, 50); //4-1 platform 1
|
spawn.mapRect(2200, -1950, 400, 50); //4-1 platform 1
|
||||||
//spawn.bodyRect(2575, -2600, 25, 650);
|
//spawn.bodyRect(2575, -2600, 25, 650);
|
||||||
spawn.mapRect(2600, -1650, 400, 50); //4-1 platform 0
|
spawn.mapRect(2600, -1650, 400, 50); //4-1 platform 0
|
||||||
spawn.mapRect(2200, -1350, 400, 50); //4-1 platform -1
|
spawn.mapRect(2200, -1350, 400, 50); //4-1 platform -1
|
||||||
spawn.bodyRect(2200, -1900, 25, 550);
|
spawn.bodyRect(2200, -1900, 15, 550);
|
||||||
spawn.bodyRect(2575, -1650, 25, 300);
|
spawn.bodyRect(2585, -1650, 15, 300);
|
||||||
|
|
||||||
spawn.mapRect(1780, -4200, 820, 1600); //top right corner
|
spawn.mapRect(1800, -4200, 800, 1600); //4-2 right wall
|
||||||
spawn.mapRect(800, -4200, 1800, -500); //4-2 ceiling
|
spawn.mapRect(800, -4200, 1800, -500); //4-2 ceiling
|
||||||
spawn.mapRect(1075, -3450, 250, 900); //4-2 center block
|
spawn.mapRect(1075, -3400, 225, 850); //upper shute right wall
|
||||||
spawn.mapRect(800, -3450, 125, 900); //4-2 left wall
|
spawn.mapRect(800, -3400, 125, 850); //upper shute left wall
|
||||||
spawn.mapRect(1550, -4200, 310, 600); //4-2 upper right wall
|
// level.fill.push({
|
||||||
level.fill.push({
|
// x: 1800,
|
||||||
x: 1800,
|
// y: -2200,
|
||||||
y: -2200,
|
// width: 225,
|
||||||
width: 225,
|
// height: 550,
|
||||||
height: 550,
|
// color: "rgba(0,0,0,0.1)"
|
||||||
color: "rgba(0,0,0,0.1)"
|
// });
|
||||||
});
|
|
||||||
level.fill.push({
|
level.fill.push({
|
||||||
x: 1800,
|
x: 1800,
|
||||||
y: -2600,
|
y: -2600,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400,
|
height: 400,
|
||||||
color: "rgba(0,0,0,0.1)"
|
color: "rgba(0,0,0,0.03)"
|
||||||
});
|
});
|
||||||
level.fill.push({
|
level.fill.push({
|
||||||
x: 2200,
|
x: 2200,
|
||||||
y: -2600,
|
y: -2600,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 1250,
|
height: 1250,
|
||||||
color: "rgba(0,0,0,0.1)"
|
color: "rgba(0,0,0,0.03)"
|
||||||
});
|
});
|
||||||
|
|
||||||
//section 5: after portals (gone through main portals 3 times)
|
//section 5: after portals (gone through main portals 3 times)
|
||||||
spawn.mapRect(-700, -2700, 100, 450); //5-1 right wall
|
spawn.mapRect(-700, -2700, 100, 450); //5-1 right wall
|
||||||
spawn.mapRect(-1450, -2700, 900, 50); //5-1 ceiling
|
spawn.mapRect(-1450, -2700, 900, 50); //5-1 ceiling
|
||||||
spawn.mapRect(-925, -2300, 325, 50); //5-1 right floor
|
spawn.mapRect(-925, -2300, 325, 50); //5-1 right floor
|
||||||
level.fill.push({
|
spawn.mapRect(-1900, -3000, 450, 50); //stair cover
|
||||||
x: -1450,
|
spawn.bodyRect(-1150, -2950, 200, 250); //5-2 block
|
||||||
y: -2655,
|
// level.fill.push({
|
||||||
width: 755,
|
// x: -1450,
|
||||||
height: 355,
|
// y: -2655,
|
||||||
color: "rgba(0,0,0,0.1)"
|
// width: 755,
|
||||||
});
|
// height: 355,
|
||||||
|
// color: "rgba(0,0,0,0.03)"
|
||||||
|
// });
|
||||||
|
// level.fill.push({
|
||||||
|
// x: -1900,
|
||||||
|
// y: -3000,
|
||||||
|
// width: 450,
|
||||||
|
// height: 700,
|
||||||
|
// color: "rgba(0,0,0,0.03)"
|
||||||
|
// });
|
||||||
|
|
||||||
//top left corner stuff
|
//top left corner stuff
|
||||||
if (true) {
|
if (true) {
|
||||||
@@ -4872,10 +4903,10 @@ const level = {
|
|||||||
//exit room
|
//exit room
|
||||||
spawn.mapRect(350, -3000, 50, 100); //exit room left wall
|
spawn.mapRect(350, -3000, 50, 100); //exit room left wall
|
||||||
spawn.mapRect(350, -3000, 450, -1700); //exit room ceiling
|
spawn.mapRect(350, -3000, 450, -1700); //exit room ceiling
|
||||||
spawn.bodyRect(350, -2900, 50, 50); //door
|
spawn.bodyRect(350, -2900, 50, 50.5); //door
|
||||||
spawn.bodyRect(350, -2850, 50, 50); //door
|
spawn.bodyRect(350, -2850, 50, 50.5); //door
|
||||||
spawn.bodyRect(350, -2800, 50, 50); //door
|
spawn.bodyRect(350, -2800, 50, 50.5); //door
|
||||||
spawn.bodyRect(350, -2750, 50, 50); //door
|
spawn.bodyRect(350, -2750, 50, 50.5); //door
|
||||||
level.fillBG.push({
|
level.fillBG.push({
|
||||||
x: 375,
|
x: 375,
|
||||||
y: -3000,
|
y: -3000,
|
||||||
@@ -4884,9 +4915,9 @@ const level = {
|
|||||||
color: "#d4f4f4"
|
color: "#d4f4f4"
|
||||||
});
|
});
|
||||||
|
|
||||||
spawn.debris(-800, -50, 400, 6); //16 debris per level
|
spawn.debris(-400, 450, 400, 5); //16 debris per level
|
||||||
spawn.debris(-1650, -2300, 250, 4); //16 debris per level
|
spawn.debris(-1650, -2300, 250, 4); //16 debris per level
|
||||||
spawn.debris(-750, -650, 750, 6); //16 debris per level
|
spawn.debris(-750, -650, 750, 3); //16 debris per level
|
||||||
|
|
||||||
//mobs
|
//mobs
|
||||||
spawn.randomMob(-650, -100, 0.7); //1-2 left
|
spawn.randomMob(-650, -100, 0.7); //1-2 left
|
||||||
@@ -4895,7 +4926,7 @@ const level = {
|
|||||||
//spawn.randomMob(-1500, -300, 0.3); //1-4 platform
|
//spawn.randomMob(-1500, -300, 0.3); //1-4 platform
|
||||||
spawn.randomMob(1450, -450, 0); //2-1 right
|
spawn.randomMob(1450, -450, 0); //2-1 right
|
||||||
spawn.randomMob(1700, -800, 1); //2-1 off the edge. chance is 1 because some enemies just fall
|
spawn.randomMob(1700, -800, 1); //2-1 off the edge. chance is 1 because some enemies just fall
|
||||||
spawn.randomGroup(-550, -1000, -0.3); //2-2
|
spawn.randomGroup(-550, -900, -0.3); //2-2
|
||||||
spawn.randomMob(-1550, -1800, 0.7); //3-1 upper platform
|
spawn.randomMob(-1550, -1800, 0.7); //3-1 upper platform
|
||||||
//spawn.randomMob(-1225, -1400, 0.3); //3-1 lower platform
|
//spawn.randomMob(-1225, -1400, 0.3); //3-1 lower platform
|
||||||
spawn.randomMob(450, -2350, 0.3); //3-2 right ledge
|
spawn.randomMob(450, -2350, 0.3); //3-2 right ledge
|
||||||
@@ -4903,8 +4934,8 @@ const level = {
|
|||||||
spawn.randomGroup(2400, -2300, -0.3); //4-1 floating
|
spawn.randomGroup(2400, -2300, -0.3); //4-1 floating
|
||||||
spawn.randomMob(2400, -1450, 0); //4-1 platform -1
|
spawn.randomMob(2400, -1450, 0); //4-1 platform -1
|
||||||
spawn.randomMob(2800, -1800, 0.5); //4-1 platform 0
|
spawn.randomMob(2800, -1800, 0.5); //4-1 platform 0
|
||||||
spawn.randomMob(-1100, -2800, 0.5); //5-2 left
|
spawn.randomMob(-1700, -3200, 0.7); //5-2 left platform
|
||||||
spawn.randomMob(-550, -2800, 0.5); //5-2 middle
|
spawn.randomMob(-550, -2800, 0.3); //5-2 middle
|
||||||
if (simulation.difficulty > 3) {
|
if (simulation.difficulty > 3) {
|
||||||
if (Math.random() < 0.5) {
|
if (Math.random() < 0.5) {
|
||||||
spawn.randomLevelBoss(450, -1350, ["shooterBoss", "launcherBoss", "laserTargetingBoss", "streamBoss", "shieldingBoss", "pulsarBoss", "laserBoss"]);
|
spawn.randomLevelBoss(450, -1350, ["shooterBoss", "launcherBoss", "laserTargetingBoss", "streamBoss", "shieldingBoss", "pulsarBoss", "laserBoss"]);
|
||||||
@@ -4915,4 +4946,153 @@ const level = {
|
|||||||
powerUps.addRerollToLevel() //needs to run after mobs are spawned
|
powerUps.addRerollToLevel() //needs to run after mobs are spawned
|
||||||
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(7725, 2275);
|
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(7725, 2275);
|
||||||
},
|
},
|
||||||
|
coliseum() {
|
||||||
|
level.custom = () => {
|
||||||
|
level.playerExitCheck();
|
||||||
|
};
|
||||||
|
level.customTopLayer = () => {};
|
||||||
|
level.defaultZoom = 1800
|
||||||
|
simulation.zoomTransition(level.defaultZoom)
|
||||||
|
document.body.style.backgroundColor = "#dcdcde";
|
||||||
|
//Level
|
||||||
|
level.setPosToSpawn(200, 50);
|
||||||
|
|
||||||
|
level.exit.x = 8950;
|
||||||
|
level.exit.y = 200;
|
||||||
|
|
||||||
|
//Map
|
||||||
|
spawn.mapRect(150, 90, 100, 100);
|
||||||
|
spawn.mapRect(8950, 190, 100, 100);
|
||||||
|
spawn.mapRect(-100, -400, 100, 600);
|
||||||
|
spawn.mapRect(-100, 100, 700, 100);
|
||||||
|
spawn.mapRect(500, 100, 100, 1700);
|
||||||
|
spawn.mapRect(500, 1700, 4000, 100);
|
||||||
|
spawn.mapRect(4100, 600, 400, 100);
|
||||||
|
spawn.mapRect(4400, 600, 100, 1600);
|
||||||
|
spawn.mapRect(4400, 2100, 4300, 100);
|
||||||
|
spawn.mapRect(8600, 200, 100, 2000);
|
||||||
|
spawn.mapRect(8600, 200, 700, 100);
|
||||||
|
spawn.mapRect(9200, -300, 100, 600);
|
||||||
|
spawn.mapRect(8600, -300, 700, 100);
|
||||||
|
spawn.mapRect(8600, -700, 100, 500);
|
||||||
|
spawn.mapRect(4400, -700, 4300, 100);
|
||||||
|
spawn.mapRect(4400, -700, 100, 900);
|
||||||
|
spawn.mapRect(-100, -400, 4600, 100);
|
||||||
|
|
||||||
|
//Platforms
|
||||||
|
spawn.mapRect(1100, 400, 300, 100);
|
||||||
|
spawn.mapRect(500, 500, 300, 100);
|
||||||
|
spawn.mapRect(1050, 800, 300, 100);
|
||||||
|
spawn.mapRect(1770, 1050, 300, 100);
|
||||||
|
spawn.mapRect(1800, 500, 300, 100);
|
||||||
|
spawn.mapRect(2550, 900, 300, 100);
|
||||||
|
spawn.mapRect(2800, 1400, 300, 100);
|
||||||
|
spawn.mapRect(1250, 1350, 300, 100);
|
||||||
|
spawn.mapRect(4750, 850, 300, 100);
|
||||||
|
spawn.mapRect(3200, 1050, 300, 100);
|
||||||
|
spawn.mapRect(4700, 100, 300, 100);
|
||||||
|
spawn.mapRect(5350, 0, 300, 100);
|
||||||
|
spawn.mapRect(3800, 900, 300, 100);
|
||||||
|
spawn.mapRect(5100, 500, 300, 100);
|
||||||
|
spawn.mapRect(5900, -300, 300, 100);
|
||||||
|
spawn.mapRect(6500, -700, 300, 1300);
|
||||||
|
spawn.mapRect(7900, 0, 300, 100);
|
||||||
|
spawn.mapRect(8050, 800, 300, 100);
|
||||||
|
spawn.mapRect(7800, 1900, 300, 100);
|
||||||
|
spawn.mapRect(8300, 450, 300, 100);
|
||||||
|
spawn.mapRect(8400, 1200, 300, 100);
|
||||||
|
spawn.mapRect(7570, 1100, 300, 100);
|
||||||
|
spawn.mapRect(6700, 1850, 300, 100);
|
||||||
|
spawn.mapRect(8000, 1500, 300, 100);
|
||||||
|
spawn.mapRect(7120, -100, 300, 100);
|
||||||
|
spawn.mapRect(7000, 1500, 300, 100);
|
||||||
|
spawn.mapRect(6500, 1000, 300, 2100);
|
||||||
|
spawn.mapRect(5800, 1100, 300, 100);
|
||||||
|
spawn.mapRect(5900, 1700, 300, 100);
|
||||||
|
spawn.mapRect(5300, 1400, 300, 100);
|
||||||
|
spawn.mapRect(5200, 1100, 300, 100);
|
||||||
|
spawn.mapRect(6700, 1100, 300, 100);
|
||||||
|
spawn.mapRect(4800, 1650, 300, 100);
|
||||||
|
|
||||||
|
//Room 1 Spawning
|
||||||
|
spawn.randomMob(1000, 700, 0.7);
|
||||||
|
spawn.randomGroup(1100, 700, 0.5);
|
||||||
|
spawn.randomMob(1900, 400, 0.7);
|
||||||
|
spawn.randomGroup(2000, 400, 0.4);
|
||||||
|
spawn.randomGroup(1800, 1100, 0.4);
|
||||||
|
spawn.randomGroup(2700, 700, 0.5);
|
||||||
|
spawn.randomMob(2900, 1200, 0.7);
|
||||||
|
spawn.randomSmallMob(3200, 300, 0.9);
|
||||||
|
spawn.randomSmallMob(3700, 800, 0.9);
|
||||||
|
spawn.randomMob(1100, 700, 0.6);
|
||||||
|
spawn.randomGroup(1200, 700, 0.5);
|
||||||
|
spawn.randomMob(2000, 400, 0.8);
|
||||||
|
spawn.randomGroup(2100, 400, 0.5);
|
||||||
|
spawn.randomGroup(1900, 1100, 0.5);
|
||||||
|
spawn.randomGroup(2800, 700, 0.5);
|
||||||
|
spawn.randomMob(3000, 1200, 0.7);
|
||||||
|
spawn.randomSmallMob(3200, 300, 0.9);
|
||||||
|
spawn.randomSmallMob(3700, 800, 0.9);
|
||||||
|
spawn.randomMob(800, 1500, 0.9);
|
||||||
|
spawn.randomMob(1500, 1500, 0.7);
|
||||||
|
spawn.randomMob(2200, 1500, 0.6);
|
||||||
|
spawn.randomMob(2500, 1500, 0.7);
|
||||||
|
spawn.randomMob(2800, 1500, 0.7);
|
||||||
|
spawn.randomMob(3300, 1500, 0.6);
|
||||||
|
|
||||||
|
//Room 2 Spawning
|
||||||
|
spawn.randomGroup(4700, 2000, 0.9);
|
||||||
|
spawn.randomMob(5000, 2000, 0.5);
|
||||||
|
spawn.randomSmallMob(5700, 1500, 0.9);
|
||||||
|
spawn.randomMob(8500, 2000, 0.6);
|
||||||
|
spawn.randomGroup(8000, 1300, 0.9);
|
||||||
|
spawn.randomMob(8300, -300, 0.4);
|
||||||
|
spawn.randomSmallMob(7600, -200, 0.9);
|
||||||
|
spawn.randomMob(5200, -300, 0.5);
|
||||||
|
spawn.randomSmallMob(4700, -200, 0.5);
|
||||||
|
spawn.randomGroup(4700, 2000, 0.8);
|
||||||
|
spawn.randomMob(5000, 2000, 0.5);
|
||||||
|
spawn.randomSmallMob(5700, 1500, 0.9);
|
||||||
|
spawn.randomGroup(8500, 2000, 0.3);
|
||||||
|
spawn.randomSmallMob(8000, 1300, 0.4);
|
||||||
|
spawn.randomMob(8300, -300, 0.3);
|
||||||
|
spawn.randomGroup(7600, -200, 0.5);
|
||||||
|
spawn.randomMob(5200, -300, 0.3);
|
||||||
|
spawn.randomGroup(4700, -200, 0.4);
|
||||||
|
spawn.randomGroup(8650, -200, 0.9); //end guards
|
||||||
|
spawn.randomMob(8650, -200, 0.9); //end guards
|
||||||
|
|
||||||
|
|
||||||
|
//Boss Spawning
|
||||||
|
spawn.randomLevelBoss(6000, 700, ["pulsarBoss", "laserTargetingBoss", "powerUpBoss", "bomberBoss", "historyBoss", "orbitalBoss"]);
|
||||||
|
spawn.shieldingBoss(7200, 500);
|
||||||
|
if (simulation.difficulty > 20) {
|
||||||
|
spawn.randomLevelBoss(2000, 300, ["historyBoss", "shooterBoss"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Blocks
|
||||||
|
spawn.bodyRect(550, -300, 50, 400); //spawn door
|
||||||
|
spawn.bodyRect(4400, 200, 100, 400); //boss door
|
||||||
|
spawn.bodyRect(6600, 600, 50, 400); //boss 2 door
|
||||||
|
spawn.debris(400, 800, 400, 2);
|
||||||
|
spawn.debris(3800, 1600, 1200, 6);
|
||||||
|
spawn.debris(7500, 2000, 800, 4);
|
||||||
|
spawn.debris(5500, 2000, 800, 4);
|
||||||
|
|
||||||
|
//Powerups
|
||||||
|
powerUps.spawnStartingPowerUps(1250, 1500);
|
||||||
|
powerUps.spawnStartingPowerUps(1500, 1500);
|
||||||
|
powerUps.spawn(8650, -200, "ammo");
|
||||||
|
powerUps.spawn(8650, -200, "ammo");
|
||||||
|
powerUps.spawn(8650, -200, "ammo");
|
||||||
|
powerUps.spawn(8650, -200, "ammo");
|
||||||
|
powerUps.spawn(200, 50, "heal");
|
||||||
|
powerUps.spawn(200, 50, "ammo");
|
||||||
|
powerUps.spawn(200, 50, "ammo");
|
||||||
|
powerUps.spawn(200, 50, "ammo");
|
||||||
|
|
||||||
|
powerUps.addRerollToLevel() //needs to run after mobs are spawned
|
||||||
|
|
||||||
|
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(6600, 600, ["historyBoss", "powerUpBoss", "pulsarBoss", "orbitalBoss"]);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
@@ -380,13 +380,7 @@ const m = {
|
|||||||
//find what tech I could get
|
//find what tech I could get
|
||||||
let options = [];
|
let options = [];
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
if (
|
if (tech.tech[i].count < tech.tech[i].maxCount && tech.tech[i].allowed() && !tech.tech[i].isBadRandomOption && !tech.tech[i].isLore && !tech.tech[i].isJunk) {
|
||||||
tech.tech[i].count < tech.tech[i].maxCount &&
|
|
||||||
tech.tech[i].allowed() &&
|
|
||||||
!tech.tech[i].isBadRandomOption &&
|
|
||||||
!tech.tech[i].isLore &&
|
|
||||||
(!tech.tech[i].isJunk || Math.random() < 0.15)
|
|
||||||
) {
|
|
||||||
for (let j = 0; j < tech.tech[i].frequency; j++) options.push(i);
|
for (let j = 0; j < tech.tech[i].frequency; j++) options.push(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -630,6 +630,23 @@ const powerUps = {
|
|||||||
m.fieldCDcycle = m.cycle + 30; //disable field so you can't pick up the ejected tech
|
m.fieldCDcycle = m.cycle + 30; //disable field so you can't pick up the ejected tech
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
removeRandomTech() {
|
||||||
|
const have = [] //find which tech you have
|
||||||
|
for (let i = 0; i < tech.tech.length; i++) {
|
||||||
|
if (tech.tech[i].count > 0) have.push(i)
|
||||||
|
}
|
||||||
|
if (have.length) {
|
||||||
|
const choose = have[Math.floor(Math.random() * have.length)]
|
||||||
|
simulation.makeTextLog(`<span class='color-var'>tech</span>.remove("<span class='color-text'>${tech.tech[choose].name}</span>")`)
|
||||||
|
const totalRemoved = tech.tech[choose].count
|
||||||
|
tech.tech[choose].count = 0;
|
||||||
|
tech.tech[choose].remove(); // remove a random tech form the list of tech you have
|
||||||
|
tech.tech[choose].isLost = true
|
||||||
|
simulation.updateTechHUD();
|
||||||
|
return totalRemoved
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
},
|
||||||
directSpawn(x, y, target, moving = true, mode = null, size = powerUps[target].size()) {
|
directSpawn(x, y, target, moving = true, mode = null, size = powerUps[target].size()) {
|
||||||
let index = powerUp.length;
|
let index = powerUp.length;
|
||||||
target = powerUps[target];
|
target = powerUps[target];
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ const simulation = {
|
|||||||
if (tech.tech[i].isLost) {
|
if (tech.tech[i].isLost) {
|
||||||
if (text) text += "<br>" //add a new line, but not on the first line
|
if (text) text += "<br>" //add a new line, but not on the first line
|
||||||
text += `<span style="text-decoration: line-through;">${tech.tech[i].name}</span>`
|
text += `<span style="text-decoration: line-through;">${tech.tech[i].name}</span>`
|
||||||
} else if (tech.tech[i].count > 0) {
|
} else if (tech.tech[i].count > 0 && !tech.tech[i].isNonRefundable) {
|
||||||
if (text) text += "<br>" //add a new line, but not on the first line
|
if (text) text += "<br>" //add a new line, but not on the first line
|
||||||
text += tech.tech[i].name
|
text += tech.tech[i].name
|
||||||
if (tech.tech[i].nameInfo) {
|
if (tech.tech[i].nameInfo) {
|
||||||
@@ -521,13 +521,24 @@ const simulation = {
|
|||||||
|
|
||||||
level.levels = level.playableLevels.slice(0) //copy array, not by just by assignment
|
level.levels = level.playableLevels.slice(0) //copy array, not by just by assignment
|
||||||
if (simulation.isCommunityMaps) {
|
if (simulation.isCommunityMaps) {
|
||||||
|
|
||||||
level.levels.push("stronghold");
|
level.levels.push("stronghold");
|
||||||
level.levels.push("basement");
|
level.levels.push("basement");
|
||||||
level.levels.push("detours");
|
// level.levels.push("detours");
|
||||||
level.levels.push("house");
|
level.levels.push("house");
|
||||||
level.levels.push("testChamber2");
|
level.levels.push("perplex");
|
||||||
|
level.levels.push("coliseum");
|
||||||
// level.levels.push("vats");
|
// level.levels.push("vats");
|
||||||
level.levels.splice(0, 5); //remove some random levels to make up for adding the community levels
|
level.levels.splice(0, 5); //remove some random levels to make up for adding the community levels
|
||||||
|
|
||||||
|
//remove undefined tech for community maps
|
||||||
|
lore.techCount = 0;
|
||||||
|
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
|
if (tech.tech[i].isLore) {
|
||||||
|
tech.tech[i].frequency = 0;
|
||||||
|
tech.tech[i].count = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
level.levels = shuffle(level.levels); //shuffles order of maps
|
level.levels = shuffle(level.levels); //shuffles order of maps
|
||||||
level.levels.unshift("intro"); //add level to the start of the randomized levels list
|
level.levels.unshift("intro"); //add level to the start of the randomized levels list
|
||||||
|
|||||||
19
js/spawn.js
19
js/spawn.js
@@ -1491,9 +1491,10 @@ const spawn = {
|
|||||||
me.fireCycle = 0
|
me.fireCycle = 0
|
||||||
me.fireTarget = { x: 0, y: 0 }
|
me.fireTarget = { x: 0, y: 0 }
|
||||||
me.pulseRadius = Math.min(500, 230 + simulation.difficulty * 3)
|
me.pulseRadius = Math.min(500, 230 + simulation.difficulty * 3)
|
||||||
me.fireDelay = Math.max(60, 190 - simulation.difficulty * 2)
|
me.fireDelay = Math.max(60, 140 - simulation.difficulty * 2)
|
||||||
me.isFiring = false
|
me.isFiring = false
|
||||||
Matter.Body.setDensity(me, 0.03); //extra dense //normal is 0.001 //makes effective life much larger
|
Matter.Body.setDensity(me, 0.03); //extra dense //normal is 0.001 //makes effective life much larger
|
||||||
|
me.isBoss = true;
|
||||||
spawn.shield(me, x, y, 1);
|
spawn.shield(me, x, y, 1);
|
||||||
spawn.spawnOrbitals(me, radius + 200 + 300 * Math.random(), 1)
|
spawn.spawnOrbitals(me, radius + 200 + 300 * Math.random(), 1)
|
||||||
me.onDeath = function() {
|
me.onDeath = function() {
|
||||||
@@ -1560,11 +1561,11 @@ const spawn = {
|
|||||||
//rotate towards fireAngle
|
//rotate towards fireAngle
|
||||||
const angle = this.angle + Math.PI / 2;
|
const angle = this.angle + Math.PI / 2;
|
||||||
const c = Math.cos(angle) * this.fireDir.x + Math.sin(angle) * this.fireDir.y;
|
const c = Math.cos(angle) * this.fireDir.x + Math.sin(angle) * this.fireDir.y;
|
||||||
const threshold = 0.03;
|
const threshold = 0.04;
|
||||||
if (c > threshold) {
|
if (c > threshold) {
|
||||||
this.torque += 0.000001 * this.inertia;
|
this.torque += 0.0000015 * this.inertia;
|
||||||
} else if (c < -threshold) {
|
} else if (c < -threshold) {
|
||||||
this.torque -= 0.000001 * this.inertia;
|
this.torque -= 0.0000015 * this.inertia;
|
||||||
} else if (this.fireCycle > 45) { //fire
|
} else if (this.fireCycle > 45) { //fire
|
||||||
unit = Vector.mult(Vector.normalise(Vector.sub(this.vertices[1], this.position)), this.distanceToPlayer() - 100)
|
unit = Vector.mult(Vector.normalise(Vector.sub(this.vertices[1], this.position)), this.distanceToPlayer() - 100)
|
||||||
this.fireTarget = Vector.add(this.vertices[1], unit)
|
this.fireTarget = Vector.add(this.vertices[1], unit)
|
||||||
@@ -1590,8 +1591,8 @@ const spawn = {
|
|||||||
Matter.Body.setDensity(me, 0.002); //extra dense //normal is 0.001 //makes effective life much larger
|
Matter.Body.setDensity(me, 0.002); //extra dense //normal is 0.001 //makes effective life much larger
|
||||||
me.fireCycle = Infinity
|
me.fireCycle = Infinity
|
||||||
me.fireTarget = { x: 0, y: 0 }
|
me.fireTarget = { x: 0, y: 0 }
|
||||||
me.pulseRadius = Math.min(400, 165 + simulation.difficulty * 3)
|
me.pulseRadius = Math.min(400, 170 + simulation.difficulty * 3)
|
||||||
me.fireDelay = Math.max(75, 150 - simulation.difficulty * 0.5)
|
me.fireDelay = Math.max(75, 140 - simulation.difficulty * 0.5)
|
||||||
me.isFiring = false
|
me.isFiring = false
|
||||||
me.onHit = function() {};
|
me.onHit = function() {};
|
||||||
me.canSeeTarget = function() {
|
me.canSeeTarget = function() {
|
||||||
@@ -1677,11 +1678,11 @@ const spawn = {
|
|||||||
x: Math.cos(angle),
|
x: Math.cos(angle),
|
||||||
y: Math.sin(angle)
|
y: Math.sin(angle)
|
||||||
}, this.fireDir)
|
}, this.fireDir)
|
||||||
const threshold = 0.03;
|
const threshold = 0.04;
|
||||||
if (dot > threshold) { //rotate towards fireAngle
|
if (dot > threshold) { //rotate towards fireAngle
|
||||||
this.torque += 0.000001 * this.inertia;
|
this.torque += 0.0000015 * this.inertia;
|
||||||
} else if (dot < -threshold) {
|
} else if (dot < -threshold) {
|
||||||
this.torque -= 0.000001 * this.inertia;
|
this.torque -= 0.0000015 * this.inertia;
|
||||||
} else if (this.fireCycle > 60) { // aim
|
} else if (this.fireCycle > 60) { // aim
|
||||||
unit = Vector.mult(Vector.normalise(Vector.sub(this.vertices[1], this.position)), this.distanceToPlayer() - 100)
|
unit = Vector.mult(Vector.normalise(Vector.sub(this.vertices[1], this.position)), this.distanceToPlayer() - 100)
|
||||||
this.fireTarget = Vector.add(this.vertices[1], unit)
|
this.fireTarget = Vector.add(this.vertices[1], unit)
|
||||||
|
|||||||
135
js/tech.js
135
js/tech.js
@@ -87,7 +87,7 @@
|
|||||||
if (!found) return //if name not found don't give any tech
|
if (!found) return //if name not found don't give any tech
|
||||||
}
|
}
|
||||||
if (tech.isMetaAnalysis && tech.tech[index].isJunk) {
|
if (tech.isMetaAnalysis && tech.tech[index].isJunk) {
|
||||||
tech.giveTech('random', true)
|
tech.giveTech('random')
|
||||||
for (let i = 0; i < 2; i++) powerUps.spawn(m.pos.x + 10 * Math.random(), m.pos.y + 10 * Math.random(), "research");
|
for (let i = 0; i < 2; i++) powerUps.spawn(m.pos.x + 10 * Math.random(), m.pos.y + 10 * Math.random(), "research");
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -252,7 +252,6 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isNonRefundable: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return (tech.isDamageForGuns || tech.isFireRateForGuns) && (b.inventory.length + 5) < b.guns.length
|
return (tech.isDamageForGuns || tech.isFireRateForGuns) && (b.inventory.length + 5) < b.guns.length
|
||||||
},
|
},
|
||||||
@@ -262,7 +261,12 @@
|
|||||||
for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x + 10 * Math.random(), m.pos.y + 10 * Math.random(), "gun");
|
for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x + 10 * Math.random(), m.pos.y + 10 * Math.random(), "gun");
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isGunCycle = false;
|
if (tech.isGunCycle) {
|
||||||
|
for (let i = 0; i < 6; i++) {
|
||||||
|
if (b.inventory.length) b.removeGun(b.guns[b.inventory[b.inventory.length - 1]].name) //remove your last gun
|
||||||
|
}
|
||||||
|
tech.isGunCycle = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -573,7 +577,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "electrostatic discharge",
|
name: "simulated annealing",
|
||||||
description: "increase <strong class='color-d'>damage</strong> by <strong>20%</strong><br><strong>20%</strong> increased <strong><em>delay</em></strong> after firing",
|
description: "increase <strong class='color-d'>damage</strong> by <strong>20%</strong><br><strong>20%</strong> increased <strong><em>delay</em></strong> after firing",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -1126,7 +1130,6 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
// isNonRefundable: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return (b.totalBots() > 1 && powerUps.research.count > 0) || build.isExperimentSelection
|
return (b.totalBots() > 1 && powerUps.research.count > 0) || build.isExperimentSelection
|
||||||
},
|
},
|
||||||
@@ -1189,7 +1192,6 @@
|
|||||||
frequency: 1,
|
frequency: 1,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
// isExperimentHide: true,
|
|
||||||
isBadRandomOption: true,
|
isBadRandomOption: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return b.totalBots() > 3
|
return b.totalBots() > 3
|
||||||
@@ -2040,8 +2042,6 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
// isExperimentHide: true,
|
|
||||||
// isBadRandomOption: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
@@ -2080,7 +2080,7 @@
|
|||||||
powerUps.research.changeRerolls(0)
|
powerUps.research.changeRerolls(0)
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
description: "once per level use <strong>1</strong> <strong class='color-r'>research</strong> to avoid <strong>dying</strong><br>and spawn <strong>6</strong> <strong class='color-h'>heal</strong> power ups",
|
description: "use <strong>1</strong> <strong class='color-r'>research</strong> to avoid <strong>dying</strong><br>and spawn <strong>6</strong> <strong class='color-h'>heal</strong> power ups once per level",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -2258,9 +2258,8 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
// isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
isBadRandomOption: true,
|
isBadRandomOption: true,
|
||||||
// isExperimentHide: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return (tech.totalCount > 6)
|
return (tech.totalCount > 6)
|
||||||
},
|
},
|
||||||
@@ -2269,19 +2268,17 @@
|
|||||||
//remove active bullets //to get rid of bots
|
//remove active bullets //to get rid of bots
|
||||||
for (let i = 0; i < bullet.length; ++i) Matter.World.remove(engine.world, bullet[i]);
|
for (let i = 0; i < bullet.length; ++i) Matter.World.remove(engine.world, bullet[i]);
|
||||||
bullet = [];
|
bullet = [];
|
||||||
let count = 0 //count tech
|
let count = 1 //count tech
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) { // spawn new tech power ups
|
for (let i = 0, len = tech.tech.length; i < len; i++) { // spawn new tech power ups
|
||||||
if (!tech.tech[i].isNonRefundable) count += tech.tech[i].count
|
if (!tech.tech[i].isNonRefundable) count += tech.tech[i].count
|
||||||
}
|
}
|
||||||
if (tech.isDeterminism) count -= 3 //remove the bonus tech
|
if (tech.isDeterminism) count -= 4 //remove the bonus tech
|
||||||
if (tech.isSuperDeterminism) count -= 2 //remove the bonus tech
|
if (tech.isSuperDeterminism) count -= 4 //remove the bonus tech
|
||||||
|
|
||||||
tech.setupAllTech(); // remove all tech
|
tech.setupAllTech(); // remove all tech
|
||||||
lore.techCount = 0;
|
lore.techCount = 0;
|
||||||
// tech.addLoreTechToPool();
|
// tech.addLoreTechToPool();
|
||||||
for (let i = 0; i < count; i++) { // spawn new tech power ups
|
for (let i = 0; i < count; i++) powerUps.spawn(m.pos.x + 100 * (Math.random() - 0.5), m.pos.y + 100 * (Math.random() - 0.5), "tech"); // spawn new tech power ups
|
||||||
powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
|
||||||
}
|
|
||||||
//have state is checked in m.death()
|
//have state is checked in m.death()
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
@@ -2343,7 +2340,6 @@
|
|||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
// isNonRefundable: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.duplicationChance() < 1
|
return tech.duplicationChance() < 1
|
||||||
},
|
},
|
||||||
@@ -2472,7 +2468,6 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
// isExperimentHide: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return (tech.totalCount > 3) && !tech.isSuperDeterminism
|
return (tech.totalCount > 3) && !tech.isSuperDeterminism
|
||||||
},
|
},
|
||||||
@@ -2502,24 +2497,13 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
// isExperimentHide: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return (tech.totalCount > 3) && !tech.isSuperDeterminism && tech.duplicationChance() > 0
|
return (tech.totalCount > 3) && !tech.isSuperDeterminism && tech.duplicationChance() > 0
|
||||||
},
|
},
|
||||||
requires: "at least 1 tech, a chance to duplicate power ups",
|
requires: "at least 1 tech, a chance to duplicate power ups",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
const have = [] //find which tech you have
|
const removeTotal = powerUps.removeRandomTech()
|
||||||
for (let i = 0; i < tech.tech.length; i++) {
|
for (let i = 0; i < removeTotal + 1; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
||||||
if (tech.tech[i].count > 0) have.push(i)
|
|
||||||
}
|
|
||||||
const choose = have[Math.floor(Math.random() * have.length)]
|
|
||||||
simulation.makeTextLog(`<span class='color-var'>tech</span>.remove("<span class='color-text'>${tech.tech[choose].name}</span>")`)
|
|
||||||
for (let i = 0; i < tech.tech[choose].count; i++) powerUps.spawn(m.pos.x, m.pos.y, "tech");
|
|
||||||
powerUps.spawn(m.pos.x, m.pos.y, "tech");
|
|
||||||
tech.tech[choose].count = 0;
|
|
||||||
tech.tech[choose].remove(); // remove a random tech form the list of tech you have
|
|
||||||
tech.tech[choose].isLost = true
|
|
||||||
simulation.updateTechHUD();
|
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
}, {
|
}, {
|
||||||
@@ -2529,7 +2513,6 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
// isExperimentHide: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isSuperDeterminism && tech.duplicationChance() > 0 && powerUps.research.count > 1
|
return !tech.isSuperDeterminism && tech.duplicationChance() > 0 && powerUps.research.count > 1
|
||||||
},
|
},
|
||||||
@@ -2565,8 +2548,6 @@
|
|||||||
name: "dark patterns",
|
name: "dark patterns",
|
||||||
description: "reduce combat <strong>difficulty</strong> by <strong>1 level</strong><br>add <strong>18</strong> junk <strong class='color-m'>tech</strong> to the potential pool",
|
description: "reduce combat <strong>difficulty</strong> by <strong>1 level</strong><br>add <strong>18</strong> junk <strong class='color-m'>tech</strong> to the potential pool",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
// isNonRefundable: true,
|
|
||||||
// isExperimentHide: true,
|
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -2608,9 +2589,7 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
// isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
// isExperimentHide: true,
|
|
||||||
// isBadRandomOption: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isSuperDeterminism
|
return !tech.isSuperDeterminism
|
||||||
},
|
},
|
||||||
@@ -2622,11 +2601,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
if (this.count > 1) {
|
// if (this.count > 1) {
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
// for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
if (tech.tech[i].isFieldTech) tech.tech[i].frequency /= 2
|
// if (tech.tech[i].isFieldTech) tech.tech[i].frequency /= 2
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2635,7 +2614,6 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isNonRefundable: true,
|
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.totalCount > 9
|
return tech.totalCount > 9
|
||||||
},
|
},
|
||||||
@@ -2647,7 +2625,7 @@
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
for (let i = 0, len = tech.tech.length; i < len; i++) {
|
||||||
if (tech.tech[i].count > 0) tech.tech[i].frequency /= 100
|
if (tech.tech[i].count > 0 && tech.tech[i].frequency > 1) tech.tech[i].frequency /= 100
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
@@ -2672,7 +2650,6 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isNonRefundable: true,
|
|
||||||
isBadRandomOption: true,
|
isBadRandomOption: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isExtraChoice && !tech.isCancelDuplication && !tech.isCancelRerolls
|
return !tech.isExtraChoice && !tech.isCancelDuplication && !tech.isCancelRerolls
|
||||||
@@ -2680,11 +2657,12 @@
|
|||||||
requires: "not cardinality, not futures or commodities exchanges",
|
requires: "not cardinality, not futures or commodities exchanges",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
tech.isDeterminism = true;
|
tech.isDeterminism = true;
|
||||||
//if you change the six also change it in Born rule
|
//if you change the number spawned also change it in Born rule
|
||||||
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isDeterminism = false;
|
tech.isDeterminism = false;
|
||||||
|
for (let i = 0; i < 5; i++) powerUps.removeRandomTech()
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
name: "superdeterminism",
|
name: "superdeterminism",
|
||||||
@@ -2693,7 +2671,6 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 3,
|
frequency: 3,
|
||||||
frequencyDefault: 3,
|
frequencyDefault: 3,
|
||||||
isNonRefundable: true,
|
|
||||||
isBadRandomOption: true,
|
isBadRandomOption: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.isDeterminism && !tech.manyWorlds && !tech.isGunSwitchField
|
return tech.isDeterminism && !tech.manyWorlds && !tech.isGunSwitchField
|
||||||
@@ -2701,11 +2678,12 @@
|
|||||||
requires: "determinism, not unified field theory",
|
requires: "determinism, not unified field theory",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
tech.isSuperDeterminism = true;
|
tech.isSuperDeterminism = true;
|
||||||
//if you change the six also change it in Born rule
|
//if you change the number spawned also change it in Born rule
|
||||||
for (let i = 0; i < 7; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isSuperDeterminism = false;
|
tech.isSuperDeterminism = false;
|
||||||
|
for (let i = 0; i < 5; i++) powerUps.removeRandomTech()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//**************************************************
|
//**************************************************
|
||||||
@@ -3656,6 +3634,41 @@
|
|||||||
remove() {
|
remove() {
|
||||||
tech.isFastFoam = false;
|
tech.isFastFoam = false;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "electrostatic induction",
|
||||||
|
description: "<strong>foam</strong> bullets are electrically charged<br>causing <strong>attraction</strong> to nearby <strong>mobs</strong>",
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 1,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("foam") || tech.foamBotCount > 1
|
||||||
|
},
|
||||||
|
requires: "foam",
|
||||||
|
effect() {
|
||||||
|
tech.isFoamAttract = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isFoamAttract = false
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "quantum foam",
|
||||||
|
description: "<strong>foam</strong> gun fires <strong>0.25</strong> seconds into the <strong>future</strong><br>increase <strong>foam</strong> gun <strong class='color-d'>damage</strong> by <strong>127%</strong>",
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 9,
|
||||||
|
count: 0,
|
||||||
|
frequency: 1,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("foam")
|
||||||
|
},
|
||||||
|
requires: "foam",
|
||||||
|
effect() {
|
||||||
|
tech.foamFutureFire++
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.foamFutureFire = 0;
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
name: "foam fractionation",
|
name: "foam fractionation",
|
||||||
description: "<strong>foam</strong> gun bubbles are <strong>100%</strong> larger<br>when you have below <strong>300</strong> <strong class='color-g'>ammo</strong>",
|
description: "<strong>foam</strong> gun bubbles are <strong>100%</strong> larger<br>when you have below <strong>300</strong> <strong class='color-g'>ammo</strong>",
|
||||||
@@ -3673,23 +3686,6 @@
|
|||||||
remove() {
|
remove() {
|
||||||
tech.isAmmoFoamSize = false;
|
tech.isAmmoFoamSize = false;
|
||||||
}
|
}
|
||||||
}, {
|
|
||||||
name: "quantum foam",
|
|
||||||
description: "<strong>foam</strong> gun fires <strong>0.25</strong> seconds into the <strong>future</strong><br>increase <strong>foam</strong> gun <strong class='color-d'>damage</strong> by <strong>143%</strong>",
|
|
||||||
isGunTech: true,
|
|
||||||
maxCount: 9,
|
|
||||||
count: 0,
|
|
||||||
frequency: 1,
|
|
||||||
allowed() {
|
|
||||||
return tech.haveGunCheck("foam")
|
|
||||||
},
|
|
||||||
requires: "foam",
|
|
||||||
effect() {
|
|
||||||
tech.foamFutureFire++
|
|
||||||
},
|
|
||||||
remove() {
|
|
||||||
tech.foamFutureFire = 0;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// {
|
// {
|
||||||
@@ -5522,7 +5518,7 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
isLore: true,
|
isLore: true,
|
||||||
isNonRefundable: true,
|
// isNonRefundable: true,
|
||||||
isExperimentHide: true,
|
isExperimentHide: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
return true
|
return true
|
||||||
@@ -5798,5 +5794,6 @@
|
|||||||
isFlipFlopLevelReset: null,
|
isFlipFlopLevelReset: null,
|
||||||
isFlipFlopDamage: null,
|
isFlipFlopDamage: null,
|
||||||
isFlipFlopEnergy: null,
|
isFlipFlopEnergy: null,
|
||||||
isMetaAnalysis: null
|
isMetaAnalysis: null,
|
||||||
|
isFoamAttract: null
|
||||||
}
|
}
|
||||||
25
todo.txt
25
todo.txt
@@ -1,10 +1,12 @@
|
|||||||
******************************************************** NEXT PATCH ********************************************************
|
******************************************************** NEXT PATCH ********************************************************
|
||||||
|
|
||||||
meta-analysis - if you choose a junk tech you instead get a random tech and spawn 2 research
|
tech: electrostatic induction - foam bullets are attracted to nearby mobs
|
||||||
micro-extruder should have 50% less lag
|
|
||||||
|
|
||||||
new community level testChamber2! by Oranger on n-gon discord
|
portals on perplex map, now remove blocks that fall in
|
||||||
(be sure to enable community levels in settings)
|
new community map! coliseum by iNoobBoi
|
||||||
|
|
||||||
|
a few more tech can be refunded properly
|
||||||
|
nonRefundable tech don't show up in the list of tech you have
|
||||||
|
|
||||||
******************************************************** BUGS ********************************************************
|
******************************************************** BUGS ********************************************************
|
||||||
|
|
||||||
@@ -39,10 +41,6 @@ fix door.isOpen actually meaning isClosed?
|
|||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
allow levels to adjust the teleport limit in simulation.checks
|
|
||||||
|
|
||||||
copy time-like foam to shotgun
|
|
||||||
|
|
||||||
mob sniper: draw aim graphics before fire
|
mob sniper: draw aim graphics before fire
|
||||||
|
|
||||||
tech laser: photon - laser, but it can only move 100 pixels a cycle
|
tech laser: photon - laser, but it can only move 100 pixels a cycle
|
||||||
@@ -52,14 +50,6 @@ mob - after taking damage
|
|||||||
grows
|
grows
|
||||||
teleports
|
teleports
|
||||||
|
|
||||||
tech- foam is attracted to mobs
|
|
||||||
use a gravitational attraction model?
|
|
||||||
could foam be attracted to other foam bullets too?
|
|
||||||
or foam is only attracted to foam bullets that are stuck to mobs
|
|
||||||
is this too computationally intense?
|
|
||||||
name - static cling
|
|
||||||
could also do bremsstrahlung radiation like damage on attachment
|
|
||||||
|
|
||||||
mobile requirements:
|
mobile requirements:
|
||||||
detect mobile, flip to landscape
|
detect mobile, flip to landscape
|
||||||
detect no keyboard, no mouse
|
detect no keyboard, no mouse
|
||||||
@@ -88,6 +78,7 @@ map: laboratory
|
|||||||
radiation room
|
radiation room
|
||||||
portal + rotor + falling blocks = perpetual motion room
|
portal + rotor + falling blocks = perpetual motion room
|
||||||
a button that spawns a heal.
|
a button that spawns a heal.
|
||||||
|
consider adding canvas path shadows to levels in level.custom for non squared lighting
|
||||||
|
|
||||||
lore: a tutorial / lore intro
|
lore: a tutorial / lore intro
|
||||||
needs to be optional so it doesn't slow experienced players
|
needs to be optional so it doesn't slow experienced players
|
||||||
@@ -320,7 +311,7 @@ possible names for tech
|
|||||||
genetic algorithm
|
genetic algorithm
|
||||||
metaheuristic - is a higher-level procedure or heuristic designed to find, generate, or select a heuristic (partial search algorithm) that may provide a sufficiently good solution to an optimization problem, especially with incomplete or imperfect information or limited computation capacity
|
metaheuristic - is a higher-level procedure or heuristic designed to find, generate, or select a heuristic (partial search algorithm) that may provide a sufficiently good solution to an optimization problem, especially with incomplete or imperfect information or limited computation capacity
|
||||||
stochastic optimization
|
stochastic optimization
|
||||||
meta-analysis
|
electrostatic discharge
|
||||||
|
|
||||||
plot script:
|
plot script:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user