crossfire
bots are now nonrefundable, so they don't display as a tech when you select them this might introduce some errors, please let me know if you see something bot counts can be seen in pause menu the final boss will spawn progressively more mobs if you don't kill it quickly enough levelBosses are also more likely to spawn on the final boss added community map - crossfire by iNoobBoi
This commit is contained in:
@@ -119,7 +119,7 @@
|
|||||||
<option value="https://codepen.io/lilgreenland/full/ozXNWZ" selected>codepen: 2016</option>
|
<option value="https://codepen.io/lilgreenland/full/ozXNWZ" selected>codepen: 2016</option>
|
||||||
<option value="https://codepen.io/lilgreenland/full/wzARJY">codepen: 2016</option>
|
<option value="https://codepen.io/lilgreenland/full/wzARJY">codepen: 2016</option>
|
||||||
<option value="classic/7-1-2017/">n-gon: 2017</option>
|
<option value="classic/7-1-2017/">n-gon: 2017</option>
|
||||||
<option value="classic/1-4-2018/">n-gon: 2018</option>
|
<option value="classic/4-15-2018/">n-gon: 2018</option>
|
||||||
<option value="classic/7-11-2019/">n-gon: summer-2019</option>
|
<option value="classic/7-11-2019/">n-gon: summer-2019</option>
|
||||||
<option value="classic/9-8-2019/">n-gon: fall-2019</option>
|
<option value="classic/9-8-2019/">n-gon: fall-2019</option>
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
11
js/index.js
11
js/index.js
@@ -178,6 +178,16 @@ const build = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
pauseGrid() {
|
pauseGrid() {
|
||||||
|
let botText = ""
|
||||||
|
if (tech.nailBotCount) botText += `<br>nail-bots: ${tech.nailBotCount}`
|
||||||
|
if (tech.orbitBotCount) botText += `<br>orbital-bots: ${tech.orbitBotCount}`
|
||||||
|
if (tech.boomBotCount) botText += `<br>boom-bots: ${tech.boomBotCount}`
|
||||||
|
if (tech.laserBotCount) botText += `<br>laser-bots: ${tech.laserBotCount}`
|
||||||
|
if (tech.foamBotCount) botText += `<br>foam-bots: ${tech.foamBotCount}`
|
||||||
|
if (tech.dynamoBotCount) botText += `<br>dynamo-bots: ${tech.dynamoBotCount}`
|
||||||
|
if (tech.plasmaBotCount) botText += `<br>plasma-bots: ${tech.plasmaBotCount}`
|
||||||
|
if (tech.missileBotCount) botText += `<br>missile-bots: ${tech.missileBotCount}`
|
||||||
|
|
||||||
const harm = (1 - m.harmReduction()) * 100
|
const harm = (1 - m.harmReduction()) * 100
|
||||||
let text = ""
|
let text = ""
|
||||||
if (!simulation.isChoosing) text += `<div class="pause-grid-module">
|
if (!simulation.isChoosing) text += `<div class="pause-grid-module">
|
||||||
@@ -188,6 +198,7 @@ const build = {
|
|||||||
<br><strong class='color-harm'>harm</strong> reduction: ${harm.toFixed(harm > 90 ? 2 : 0)}%
|
<br><strong class='color-harm'>harm</strong> reduction: ${harm.toFixed(harm > 90 ? 2 : 0)}%
|
||||||
<br><strong><em>fire delay</em></strong> decrease: ${((1-b.fireCD)*100).toFixed(b.fireCD < 0.1 ? 2 : 0)}%
|
<br><strong><em>fire delay</em></strong> decrease: ${((1-b.fireCD)*100).toFixed(b.fireCD < 0.1 ? 2 : 0)}%
|
||||||
<br><strong class='color-dup'>duplication</strong> chance: ${(Math.min(1,tech.duplicationChance())*100).toFixed(0)}%
|
<br><strong class='color-dup'>duplication</strong> chance: ${(Math.min(1,tech.duplicationChance())*100).toFixed(0)}%
|
||||||
|
${botText}
|
||||||
<br>
|
<br>
|
||||||
<br><strong class='color-m'>tech</strong>: ${tech.totalCount} <strong class='color-r'>research</strong>: ${powerUps.research.count}
|
<br><strong class='color-m'>tech</strong>: ${tech.totalCount} <strong class='color-r'>research</strong>: ${powerUps.research.count}
|
||||||
<br><strong class='color-h'>health</strong>: (${(m.health*100).toFixed(0)} / ${(m.maxHealth*100).toFixed(0)}) <strong class='color-f'>energy</strong>: (${(m.energy*100).toFixed(0)} / ${(m.maxEnergy*100).toFixed(0)})
|
<br><strong class='color-h'>health</strong>: (${(m.health*100).toFixed(0)} / ${(m.maxHealth*100).toFixed(0)}) <strong class='color-f'>energy</strong>: (${(m.energy*100).toFixed(0)} / ${(m.maxEnergy*100).toFixed(0)})
|
||||||
|
|||||||
175
js/level.js
175
js/level.js
@@ -12,7 +12,7 @@ const level = {
|
|||||||
start() {
|
start() {
|
||||||
if (level.levelsCleared === 0) { //this code only runs on the first level
|
if (level.levelsCleared === 0) { //this code only runs on the first level
|
||||||
// simulation.enableConstructMode() //used to build maps in testing mode
|
// simulation.enableConstructMode() //used to build maps in testing mode
|
||||||
// level.difficultyIncrease(11)
|
// level.difficultyIncrease(50)
|
||||||
// simulation.zoomScale = 1000;
|
// simulation.zoomScale = 1000;
|
||||||
// simulation.setZoom();
|
// simulation.setZoom();
|
||||||
// m.setField("nano-scale manufacturing")
|
// m.setField("nano-scale manufacturing")
|
||||||
@@ -57,6 +57,7 @@ const level = {
|
|||||||
// level.stronghold() //community level
|
// level.stronghold() //community level
|
||||||
// level.perplex() //community level
|
// level.perplex() //community level
|
||||||
// level.coliseum() //community level
|
// level.coliseum() //community level
|
||||||
|
// level.crossfire() //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")
|
||||||
@@ -1110,7 +1111,7 @@ const level = {
|
|||||||
// spawn.grower(1900, -500)
|
// spawn.grower(1900, -500)
|
||||||
// spawn.pulsarBoss(1900, -500)
|
// spawn.pulsarBoss(1900, -500)
|
||||||
// spawn.shooterBoss(1900, -500)
|
// spawn.shooterBoss(1900, -500)
|
||||||
spawn.shooter(2900, -500)
|
spawn.spawns(2900, -500)
|
||||||
// spawn.launcherBoss(1200, -500)
|
// spawn.launcherBoss(1200, -500)
|
||||||
// spawn.laserTargetingBoss(1600, -400)
|
// spawn.laserTargetingBoss(1600, -400)
|
||||||
// spawn.striker(4600, -500)
|
// spawn.striker(4600, -500)
|
||||||
@@ -4613,4 +4614,174 @@ const level = {
|
|||||||
|
|
||||||
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(6600, 600, ["historyBoss", "powerUpBoss", "pulsarBoss", "orbitalBoss"]);
|
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(6600, 600, ["historyBoss", "powerUpBoss", "pulsarBoss", "orbitalBoss"]);
|
||||||
},
|
},
|
||||||
|
crossfire() {
|
||||||
|
//*1.5
|
||||||
|
//Level Setup
|
||||||
|
const slimePitOne = level.hazard(0, 850, 3800, 120, 25);
|
||||||
|
const slimePitTwo = level.hazard(4600, 430, 2000, 120, 35);
|
||||||
|
const slimePitThree = level.hazard(6500, 200, 1000, 170, 50);
|
||||||
|
|
||||||
|
level.custom = () => {
|
||||||
|
slimePitOne.query();
|
||||||
|
slimePitTwo.query();
|
||||||
|
slimePitThree.query();
|
||||||
|
slimePitOne.draw();
|
||||||
|
slimePitTwo.draw();
|
||||||
|
slimePitThree.draw();
|
||||||
|
level.playerExitCheck();
|
||||||
|
level.exit.draw();
|
||||||
|
level.enter.draw();
|
||||||
|
};
|
||||||
|
level.customTopLayer = () => {};
|
||||||
|
|
||||||
|
level.setPosToSpawn(-500, 550); //normal spawn
|
||||||
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||||
|
|
||||||
|
level.exit.x = 10300;
|
||||||
|
level.exit.y = -830;
|
||||||
|
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 20);
|
||||||
|
|
||||||
|
level.defaultZoom = 3000
|
||||||
|
simulation.zoomTransition(level.defaultZoom)
|
||||||
|
document.body.style.backgroundColor = "#dcdcde";
|
||||||
|
|
||||||
|
//Map Elements
|
||||||
|
spawn.mapRect(-800, -600, 800, 200);
|
||||||
|
spawn.mapRect(-200, -600, 200, 800);
|
||||||
|
spawn.mapRect(-800, -600, 200, 800);
|
||||||
|
spawn.mapRect(-1000, 0, 1000, 200);
|
||||||
|
spawn.mapRect(-1000, 0, 200, 800);
|
||||||
|
spawn.mapRect(-1000, 600, 1400, 200);
|
||||||
|
spawn.mapRect(0, 600, 200, 400);
|
||||||
|
spawn.mapRect(0, 950, 4000, 100);
|
||||||
|
spawn.mapRect(800, 800, 600, 200);
|
||||||
|
spawn.mapRect(1700, 700, 500, 300);
|
||||||
|
spawn.mapRect(2500, 600, 400, 400);
|
||||||
|
spawn.mapRect(3200, 600, 1200, 200);
|
||||||
|
spawn.mapRect(3800, 600, 200, 800); //
|
||||||
|
spawn.mapRect(3800, 1200, 800, 200);
|
||||||
|
spawn.mapRect(4400, 400, 300, 1000);
|
||||||
|
spawn.mapRect(4400, 500, 2000, 100);
|
||||||
|
spawn.mapRect(6500, 300, 1000, 100);
|
||||||
|
spawn.mapRect(5000, 200, 700, 400);
|
||||||
|
spawn.mapRect(6000, 0, 650, 600);
|
||||||
|
spawn.mapRect(6900, -300, 700, 100);
|
||||||
|
spawn.mapRect(7400, -600, 200, 1100);
|
||||||
|
spawn.mapRect(7400, 300, 2600, 200);
|
||||||
|
spawn.mapRect(9800, -800, 200, 1300);
|
||||||
|
spawn.mapRect(9800, -800, 1000, 200);
|
||||||
|
spawn.mapRect(10600, -1400, 200, 800);
|
||||||
|
spawn.mapRect(9800, -1400, 200, 400);
|
||||||
|
spawn.mapRect(7400, -1400, 3400, 200);
|
||||||
|
spawn.mapRect(7400, -1600, 200, 800);
|
||||||
|
spawn.mapRect(5400, -1600, 2200, 200);
|
||||||
|
spawn.mapRect(6000, -1600, 200, 800);
|
||||||
|
spawn.mapRect(5400, -1600, 200, 800);
|
||||||
|
spawn.mapRect(4800, -1000, 1400, 200);
|
||||||
|
spawn.mapRect(4800, -1000, 200, 600);
|
||||||
|
spawn.mapRect(3800, -600, 1200, 200);
|
||||||
|
spawn.mapRect(3200, -800, 800, 200);
|
||||||
|
spawn.mapRect(3200, -800, 200, 800);
|
||||||
|
spawn.mapRect(3800, -800, 200, 800);
|
||||||
|
spawn.mapRect(-200, -200, 4200, 200);
|
||||||
|
|
||||||
|
//Boss Room Platforms
|
||||||
|
spawn.mapRect(7700, 100, 300, 40);
|
||||||
|
spawn.mapRect(8600, 0, 300, 40);
|
||||||
|
spawn.mapRect(9200, 100, 300, 40);
|
||||||
|
spawn.mapRect(9400, -200, 300, 40);
|
||||||
|
spawn.mapRect(8000, -200, 300, 40);
|
||||||
|
spawn.mapRect(8500, -400, 300, 40);
|
||||||
|
spawn.mapRect(9000, -600, 300, 40);
|
||||||
|
spawn.mapRect(9400, -800, 300, 40);
|
||||||
|
spawn.mapRect(8600, -1000, 300, 40);
|
||||||
|
spawn.mapRect(7900, -800, 300, 40);
|
||||||
|
|
||||||
|
//Mob Spawning
|
||||||
|
spawn.randomMob(200, 400, 0.7);
|
||||||
|
spawn.randomMob(1200, 400, 0.7);
|
||||||
|
spawn.randomMob(2000, 400, 0.7);
|
||||||
|
spawn.randomMob(3000, 400, 0.7);
|
||||||
|
spawn.randomMob(5000, 0, 0.7);
|
||||||
|
spawn.randomMob(5600, 0, 0.7);
|
||||||
|
spawn.randomMob(6200, -200, 0.7);
|
||||||
|
spawn.randomMob(6600, -200, 0.7);
|
||||||
|
spawn.randomMob(7200, -800, 0.7);
|
||||||
|
spawn.randomSmallMob(800, 400, 0.9);
|
||||||
|
spawn.randomSmallMob(1800, 400, 0.9);
|
||||||
|
spawn.randomSmallMob(2600, 400, 0.9);
|
||||||
|
spawn.randomSmallMob(5200, 0, 0.9);
|
||||||
|
spawn.randomSmallMob(5400, 0, 0.9);
|
||||||
|
spawn.randomSmallMob(6400, -200, 0.9);
|
||||||
|
spawn.randomGroup(3800, 400, 0.5);
|
||||||
|
spawn.randomGroup(4200, 400, 0.5);
|
||||||
|
spawn.randomGroup(4400, 200, 0.5);
|
||||||
|
spawn.randomGroup(7000, -800, 0.5);
|
||||||
|
spawn.randomGroup(7700, 300, 0.5);
|
||||||
|
spawn.randomGroup(9800, 300, 0.5);
|
||||||
|
spawn.randomGroup(7700, -1100, 0.5);
|
||||||
|
spawn.randomGroup(9800, -1100, 0.5);
|
||||||
|
|
||||||
|
if (simulation.difficulty > 10) {
|
||||||
|
spawn.randomLevelBoss(8600, -600, ["powerUpBoss", "bomberBoss", "snakeBoss", "spiderBoss", "historyBoss"]);
|
||||||
|
}
|
||||||
|
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) {
|
||||||
|
spawn.randomLevelBoss(7900, -400, ["powerUpBoss", "spiderBoss", "historyBoss"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Boss Spawning
|
||||||
|
spawn.pulsarBoss(-400, -200);
|
||||||
|
if (simulation.difficulty > 25) {
|
||||||
|
spawn.pulsarBoss(3600, -400);
|
||||||
|
if (simulation.difficulty > 40) {
|
||||||
|
spawn.pulsarBoss(4200, 1000);
|
||||||
|
if (simulation.difficulty > 65) {
|
||||||
|
spawn.pulsarBoss(5800, -1200);
|
||||||
|
spawn.pulsarBoss(-400, -200);
|
||||||
|
if (simulation.difficulty > 85) {
|
||||||
|
spawn.pulsarBoss(3600, -400);
|
||||||
|
spawn.pulsarBoss(4200, 1000);
|
||||||
|
if (simulation.difficulty > 115) {
|
||||||
|
spawn.pulsarBoss(5800, -1200);
|
||||||
|
spawn.pulsarBoss(-400, -200);
|
||||||
|
spawn.pulsarBoss(3600, -400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Powerup Spawning
|
||||||
|
powerUps.spawnStartingPowerUps(4000, 400);
|
||||||
|
powerUps.spawnStartingPowerUps(4400, 400);
|
||||||
|
powerUps.chooseRandomPowerUp(4000, 400);
|
||||||
|
powerUps.chooseRandomPowerUp(4000, 400);
|
||||||
|
powerUps.chooseRandomPowerUp(4400, 400);
|
||||||
|
powerUps.chooseRandomPowerUp(4400, 400);
|
||||||
|
powerUps.addRerollToLevel(); //needs to run after mobs are spawned
|
||||||
|
|
||||||
|
//Block Spawning
|
||||||
|
// spawn.bodyRect(-100, 200, 100, 400); //spawn door
|
||||||
|
spawn.bodyRect(7450, -800, 25, 200); //boss room door
|
||||||
|
spawn.bodyRect(9850, -1000, 25, 200); //end door
|
||||||
|
spawn.mapRect(-200, 350, 200, 450);
|
||||||
|
|
||||||
|
// spawn.mapRect(3875, -75, 50, 575);
|
||||||
|
spawn.mapRect(3800, -75, 200, 525);
|
||||||
|
spawn.mapRect(3875, 590, 50, 150);
|
||||||
|
spawn.mapRect(3875, 350, 50, 140);
|
||||||
|
|
||||||
|
const debrisCount = 3
|
||||||
|
spawn.debris(1050, 700, 400, debrisCount);
|
||||||
|
spawn.debris(1900, 600, 400, debrisCount);
|
||||||
|
spawn.debris(2700, 500, 400, debrisCount);
|
||||||
|
// spawn.debris(3500, 450, 400, debrisCount);
|
||||||
|
spawn.debris(4150, 500, 400, debrisCount);
|
||||||
|
spawn.debris(5300, 0, 400, debrisCount);
|
||||||
|
spawn.debris(6300, -100, 400, debrisCount);
|
||||||
|
spawn.debris(7200, -500, 400, debrisCount);
|
||||||
|
spawn.debris(8000, -600, 400, debrisCount);
|
||||||
|
spawn.debris(8700, -700, 400, debrisCount);
|
||||||
|
spawn.debris(9300, -900, 400, debrisCount);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
@@ -531,6 +531,7 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
randomPowerUpCounter: 0,
|
randomPowerUpCounter: 0,
|
||||||
spawnBossPowerUp(x, y) { //boss spawns field and gun tech upgrades
|
spawnBossPowerUp(x, y) { //boss spawns field and gun tech upgrades
|
||||||
|
if (level.levels[level.onLevel] !== "final") {
|
||||||
if (m.fieldMode === 0) {
|
if (m.fieldMode === 0) {
|
||||||
powerUps.spawn(x, y, "field")
|
powerUps.spawn(x, y, "field")
|
||||||
} else {
|
} else {
|
||||||
@@ -558,6 +559,7 @@ const powerUps = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
chooseRandomPowerUp(x, y) { //100% chance to drop a random power up //used in spawn.debris
|
chooseRandomPowerUp(x, y) { //100% chance to drop a random power up //used in spawn.debris
|
||||||
if (Math.random() < 0.5) {
|
if (Math.random() < 0.5) {
|
||||||
|
|||||||
@@ -521,10 +521,12 @@ const simulation = {
|
|||||||
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("crossfire");
|
||||||
level.levels.push("house");
|
level.levels.push("house");
|
||||||
level.levels.push("perplex");
|
level.levels.push("perplex");
|
||||||
level.levels.push("coliseum");
|
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
|
||||||
|
|
||||||
|
|||||||
33
js/spawn.js
33
js/spawn.js
@@ -178,6 +178,7 @@ const spawn = {
|
|||||||
me.onDamage = function() {};
|
me.onDamage = function() {};
|
||||||
me.cycle = 420;
|
me.cycle = 420;
|
||||||
me.endCycle = 780;
|
me.endCycle = 780;
|
||||||
|
me.totalCycles = 0
|
||||||
me.mode = 0;
|
me.mode = 0;
|
||||||
me.do = function() {
|
me.do = function() {
|
||||||
Matter.Body.setPosition(this, { //hold position
|
Matter.Body.setPosition(this, { //hold position
|
||||||
@@ -191,6 +192,7 @@ const spawn = {
|
|||||||
this.modeDo(); //this does different things based on the mode
|
this.modeDo(); //this does different things based on the mode
|
||||||
this.checkStatus();
|
this.checkStatus();
|
||||||
this.cycle++; //switch modes÷
|
this.cycle++; //switch modes÷
|
||||||
|
this.totalCycles++;
|
||||||
// if (!m.isBodiesAsleep) {
|
// if (!m.isBodiesAsleep) {
|
||||||
if (this.health > 0.25) {
|
if (this.health > 0.25) {
|
||||||
if (this.cycle > this.endCycle) {
|
if (this.cycle > this.endCycle) {
|
||||||
@@ -251,23 +253,20 @@ const spawn = {
|
|||||||
if (!(this.cycle % this.spawnInterval) && !m.isBodiesAsleep && mob.length < 40) {
|
if (!(this.cycle % this.spawnInterval) && !m.isBodiesAsleep && mob.length < 40) {
|
||||||
if (this.mode !== 3) Matter.Body.setAngularVelocity(this, 0.1)
|
if (this.mode !== 3) Matter.Body.setAngularVelocity(this, 0.1)
|
||||||
//fire a bullet from each vertex
|
//fire a bullet from each vertex
|
||||||
let whoSpawn = spawn.fullPickList[Math.floor(Math.random() * spawn.fullPickList.length)];
|
const whoSpawn = spawn.fullPickList[Math.floor(Math.random() * spawn.fullPickList.length)];
|
||||||
|
for (let i = 0, len = 2 + this.totalCycles / 1000; i < len; i++) {
|
||||||
const step = (this.health > 0.75) ? 2 : 1
|
const vertex = this.vertices[i % 6]
|
||||||
for (let i = 0, len = this.vertices.length; i < len; i += step) {
|
spawn[whoSpawn](vertex.x + 50 * (Math.random() - 0.5), vertex.y + 50 * (Math.random() - 0.5));
|
||||||
spawn[whoSpawn](this.vertices[i].x, this.vertices[i].y);
|
const velocity = Vector.mult(Vector.perp(Vector.normalise(Vector.sub(this.position, vertex))), -18) //give the mob a rotational velocity as if they were attached to a vertex
|
||||||
const velocity = Vector.mult(Vector.perp(Vector.normalise(Vector.sub(this.position, this.vertices[i]))), -18) //give the mob a rotational velocity as if they were attached to a vertex
|
|
||||||
Matter.Body.setVelocity(mob[mob.length - 1], {
|
Matter.Body.setVelocity(mob[mob.length - 1], {
|
||||||
x: this.velocity.x + velocity.x,
|
x: this.velocity.x + velocity.x,
|
||||||
y: this.velocity.y + velocity.y
|
y: this.velocity.y + velocity.y
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
const len = (this.totalCycles / 400 + simulation.difficulty / 2 - 30) / 15
|
||||||
if (simulation.difficulty > 60) {
|
// console.log(len)
|
||||||
spawn.randomLevelBoss(3000, -1100)
|
for (let i = 0; i < len; i++) {
|
||||||
if (simulation.difficulty > 100) {
|
spawn.randomLevelBoss(3000 + 2000 * (Math.random() - 0.5), -1100 + 200 * (Math.random() - 0.5))
|
||||||
spawn.randomLevelBoss(3000, -1300)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2830,12 +2829,12 @@ const spawn = {
|
|||||||
this.explode();
|
this.explode();
|
||||||
};
|
};
|
||||||
// me.stroke = "transparent"
|
// me.stroke = "transparent"
|
||||||
me.collisionFilter.mask = cat.player | cat.bullet | cat.body | cat.map
|
me.collisionFilter.mask = cat.player | cat.bullet | cat.body | cat.map | cat.mob
|
||||||
me.showHealthBar = false;
|
me.showHealthBar = false;
|
||||||
Matter.Body.setDensity(me, 0.0005); //normal is 0.001
|
Matter.Body.setDensity(me, 0.0001); //normal is 0.001
|
||||||
me.g = 0.0001; //required if using 'gravity'
|
me.g = 0.00002; //required if using 'gravity'
|
||||||
me.accelMag = 0.00008 * simulation.accelScale;
|
me.accelMag = 0.00012 * simulation.accelScale;
|
||||||
me.memory = 30;
|
// me.memory = 30;
|
||||||
me.leaveBody = false;
|
me.leaveBody = false;
|
||||||
me.isDropPowerUp = false;
|
me.isDropPowerUp = false;
|
||||||
me.seePlayerFreq = Math.round((80 + 50 * Math.random()) * simulation.lookFreqScale);
|
me.seePlayerFreq = Math.round((80 + 50 * Math.random()) * simulation.lookFreqScale);
|
||||||
|
|||||||
32
js/tech.js
32
js/tech.js
@@ -272,7 +272,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "gun sciences",
|
name: "gun sciences",
|
||||||
description: "spawn a <strong class='color-g'>gun</strong> and </strong>double</strong> the <strong class='flicker'>frequency</strong><br>of finding <strong class='color-m'>tech</strong> for a specific <strong class='color-g'>gun</strong>",
|
description: "spawn a <strong class='color-g'>gun</strong> and </strong>double</strong> the <strong class='flicker'>frequency</strong><br>of finding <strong class='color-m'>tech</strong> for your <strong class='color-g'>guns</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
@@ -978,6 +978,7 @@
|
|||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -989,7 +990,7 @@
|
|||||||
b.nailBot();
|
b.nailBot();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.nailBotCount -= this.count;
|
// tech.nailBotCount -= this.count;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1023,6 +1024,7 @@
|
|||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -1034,7 +1036,7 @@
|
|||||||
b.foamBot();
|
b.foamBot();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.foamBotCount -= this.count;
|
// tech.foamBotCount -= this.count;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1068,6 +1070,7 @@
|
|||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -1079,7 +1082,7 @@
|
|||||||
b.boomBot();
|
b.boomBot();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.boomBotCount -= this.count;
|
// tech.boomBotCount -= this.count;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1113,6 +1116,7 @@
|
|||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -1124,7 +1128,7 @@
|
|||||||
b.laserBot();
|
b.laserBot();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.laserBotCount -= this.count;
|
// tech.laserBotCount -= this.count;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1158,6 +1162,7 @@
|
|||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -1169,7 +1174,7 @@
|
|||||||
tech.orbitBotCount++;
|
tech.orbitBotCount++;
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.orbitBotCount -= this.count;
|
// tech.orbitBotCount -= this.count;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1213,6 +1218,7 @@
|
|||||||
maxCount: 9,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -1224,7 +1230,7 @@
|
|||||||
b.dynamoBot();
|
b.dynamoBot();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.dynamoBotCount -= this.count;
|
// tech.dynamoBotCount -= this.count;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2656,11 +2662,11 @@
|
|||||||
description: "clicking <strong style = 'font-size:150%;'>×</strong> to cancel a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong><br>spawns <strong>8</strong> <strong class='color-h'>heals</strong>, <strong class='color-g'>ammo</strong>, and <strong class='color-r'>research</strong>",
|
description: "clicking <strong style = 'font-size:150%;'>×</strong> to cancel a <strong class='color-f'>field</strong>, <strong class='color-m'>tech</strong>, or <strong class='color-g'>gun</strong><br>spawns <strong>8</strong> <strong class='color-h'>heals</strong>, <strong class='color-g'>ammo</strong>, and <strong class='color-r'>research</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 1,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.isCancelDuplication
|
return !tech.isDeterminism
|
||||||
},
|
},
|
||||||
requires: "futures exchange",
|
requires: "not determinism",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isCancelRerolls = true
|
tech.isCancelRerolls = true
|
||||||
},
|
},
|
||||||
@@ -3586,6 +3592,7 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -3597,7 +3604,7 @@
|
|||||||
b.missileBot();
|
b.missileBot();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.missileBotCount = 0;
|
// tech.missileBotCount = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4712,6 +4719,7 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
|
isNonRefundable: true,
|
||||||
isBot: true,
|
isBot: true,
|
||||||
isBotTech: true,
|
isBotTech: true,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -4723,7 +4731,7 @@
|
|||||||
b.plasmaBot();
|
b.plasmaBot();
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.plasmaBotCount = 0;
|
// tech.plasmaBotCount = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
17
todo.txt
17
todo.txt
@@ -1,12 +1,17 @@
|
|||||||
******************************************************** NEXT PATCH ********************************************************
|
******************************************************** NEXT PATCH ********************************************************
|
||||||
|
|
||||||
fixed: sniper/shooter issues with aiming
|
bots are now nonrefundable, so they don't display as a tech when you select them
|
||||||
fixed: Copied build urls
|
this might introduce some errors, please let me know if you see something
|
||||||
|
bot counts can be seen in pause menu
|
||||||
|
|
||||||
|
the final boss will spawn progressively more mobs if you don't kill it quickly enough
|
||||||
|
levelBosses are also more likely to spawn on the final boss
|
||||||
|
|
||||||
|
added community map - crossfire
|
||||||
|
by iNoobBoi
|
||||||
|
|
||||||
******************************************************** BUGS ********************************************************
|
******************************************************** BUGS ********************************************************
|
||||||
|
|
||||||
spawns are forming node groups, but why??
|
|
||||||
|
|
||||||
you have to press z once to get copy to work for simulation.enableConstructMode() sometimes
|
you have to press z once to get copy to work for simulation.enableConstructMode() sometimes
|
||||||
not sure how to reproduce, but it happens often on the first draw
|
not sure how to reproduce, but it happens often on the first draw
|
||||||
|
|
||||||
@@ -35,9 +40,9 @@ fix door.isOpen actually meaning isClosed?
|
|||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
Tech: "Spacial Continuity": 12% chance for the block resulting from a slain enemy to be thrown at the nearst mob.
|
import the procedural level generation from one of the older versions of the game as one single level
|
||||||
|
|
||||||
Mobs that travel through walls but get stuck on blocks are annoying
|
Tech: "Spacial Continuity": 12% chance for the block resulting from a slain enemy to be thrown at the nearest mob.
|
||||||
|
|
||||||
tech plasma field - plasma field becomes an aoe damage field with the same radius
|
tech plasma field - plasma field becomes an aoe damage field with the same radius
|
||||||
200% more energy drain, 100% more damage
|
200% more energy drain, 100% more damage
|
||||||
|
|||||||
Reference in New Issue
Block a user