only 3 bosses
several tech now have fewer requirements to unlock some normal tech is now considered gun tech (mostly explosion stuff) snakeBoss tails, stay attached to each other "snakeBoss", "blockBoss", "powerupBoss" are now the only bosses for the random boss list bug fixes
This commit is contained in:
@@ -99,7 +99,7 @@
|
||||
<summary>settings</summary>
|
||||
<div style="line-height: 150%;" class="details-div">
|
||||
<label for="difficulty-select" title="effects: number of mobs, damage done by mobs, damage done to mobs, mob speed, heal effects">combat difficulty:</label>
|
||||
<select name="difficulty-select" id="difficulty-select">
|
||||
<select name="difficulty-select" id="difficulty-select" style="background-color: #fff">
|
||||
<option value="1">easy</option>
|
||||
<option value="2" selected>normal</option>
|
||||
<option value="4">hard</option>
|
||||
|
||||
12
js/bullet.js
12
js/bullet.js
@@ -3532,22 +3532,22 @@ const b = {
|
||||
},
|
||||
randomBot(where = player.position, isKeep = true, isLaser = true) {
|
||||
if (Math.random() < 0.166 && isLaser) {
|
||||
b.laserBot(where)
|
||||
b.laserBot(where, isKeep)
|
||||
if (isKeep) tech.laserBotCount++;
|
||||
} else if (Math.random() < 0.2) {
|
||||
b.dynamoBot(where)
|
||||
b.dynamoBot(where, isKeep)
|
||||
if (isKeep) tech.dynamoBotCount++;
|
||||
} else if (Math.random() < 0.25) {
|
||||
b.orbitBot(where);
|
||||
b.orbitBot(where, isKeep);
|
||||
if (isKeep) tech.orbitBotCount++;
|
||||
} else if (Math.random() < 0.33) {
|
||||
b.nailBot(where)
|
||||
b.nailBot(where, isKeep)
|
||||
if (isKeep) tech.nailBotCount++;
|
||||
} else if (Math.random() < 0.5) {
|
||||
b.foamBot(where)
|
||||
b.foamBot(where, isKeep)
|
||||
if (isKeep) tech.foamBotCount++;
|
||||
} else {
|
||||
b.boomBot(where)
|
||||
b.boomBot(where, isKeep)
|
||||
if (isKeep) tech.boomBotCount++;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -27,6 +27,7 @@ const level = {
|
||||
// tech.giveTech("antiscience")
|
||||
// for (let i = 0; i < 1; i++) tech.giveTech("reticulum")
|
||||
// for (let i = 0; i < 2; i++) tech.giveTech("laser-bot")
|
||||
// tech.tech[297].frequency = 100
|
||||
|
||||
level.intro(); //starting level
|
||||
// level.testing(); //not in rotation, used for testing
|
||||
@@ -95,7 +96,7 @@ const level = {
|
||||
}
|
||||
}
|
||||
if (tech.isExtraMaxEnergy) {
|
||||
tech.healMaxEnergyBonus += 0.04 * powerUps.totalPowerUps //Math.min(0.02 * powerUps.totalPowerUps, 0.51)
|
||||
tech.healMaxEnergyBonus += 0.05 * powerUps.totalPowerUps //Math.min(0.02 * powerUps.totalPowerUps, 0.51)
|
||||
m.setMaxEnergy();
|
||||
}
|
||||
if (tech.isGunCycle) {
|
||||
@@ -2336,8 +2337,8 @@ const level = {
|
||||
spawn.mapRect(4850, -275, 50, 175);
|
||||
|
||||
//???
|
||||
level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why
|
||||
spawn.starter(1900, -500, 200) //big boy
|
||||
// level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why
|
||||
// spawn.starter(1900, -500, 200) //big boy
|
||||
|
||||
// spawn.launcherOne(1700, -500)
|
||||
// spawn.launcherBoss(3200, -500)
|
||||
@@ -2361,7 +2362,7 @@ const level = {
|
||||
// for (let i = 0; i < 10; ++i) spawn.bodyRect(1600 + 5, -500, 30, 40);
|
||||
// for (let i = 0; i < 5; i++) spawn.focuser(1900, -500)
|
||||
// spawn.slashBoss(1900, -500)
|
||||
// spawn.sucker(1900, -500)
|
||||
spawn.pulsar(1900, -500)
|
||||
// spawn.shield(mob[mob.length - 1], 1900, -500, 1);
|
||||
// mob[mob.length - 1].isShielded = true
|
||||
// spawn.growBossCulture(1200, -500)
|
||||
|
||||
@@ -518,7 +518,7 @@ const m = {
|
||||
if (tech.isHarmArmor && m.lastHarmCycle + 600 > m.cycle) dmg *= 0.33;
|
||||
if (tech.isNoFireDefense && m.cycle > m.fireCDcycle + 120) dmg *= 0.3
|
||||
if (tech.energyRegen === 0) dmg *= 0.34
|
||||
if (tech.isTurret && m.crouch) dmg *= 0.4;
|
||||
if (tech.isTurret && m.crouch) dmg *= 0.34;
|
||||
if (tech.isEntanglement && b.inventory[0] === b.activeGun) {
|
||||
for (let i = 0, len = b.inventory.length; i < len; i++) dmg *= 0.87 // 1 - 0.15
|
||||
}
|
||||
|
||||
79
js/spawn.js
79
js/spawn.js
@@ -1,8 +1,9 @@
|
||||
//main object for spawning things in a level
|
||||
const spawn = {
|
||||
nonCollideBossList: ["cellBossCulture", "bomberBoss", "powerUpBoss", "orbitalBoss", "spawnerBossCulture", "growBossCulture"],
|
||||
nonCollideBossList: ["snakeBoss"], //"cellBossCulture", "bomberBoss", "powerUpBoss", "orbitalBoss", "spawnerBossCulture", "growBossCulture"
|
||||
// other bosses: suckerBoss, laserBoss, tetherBoss, //these need a particular level to work so they are not included in the random pool
|
||||
randomLevelBoss(x, y, options = ["shieldingBoss", "orbitalBoss", "historyBoss", "shooterBoss", "cellBossCulture", "bomberBoss", "spiderBoss", "launcherBoss", "laserTargetingBoss", "powerUpBoss", "snakeBoss", "streamBoss", "pulsarBoss", "spawnerBossCulture", "grenadierBoss", "growBossCulture", "blinkBoss", "snakeSpitBoss", "laserBombingBoss", "blockBoss", "slashBoss"]) {
|
||||
// "shieldingBoss", "orbitalBoss", "historyBoss", "shooterBoss", "cellBossCulture", "bomberBoss", "spiderBoss", "launcherBoss", "laserTargetingBoss",, , "streamBoss", "pulsarBoss", "spawnerBossCulture", "grenadierBoss", "growBossCulture", "blinkBoss", "snakeSpitBoss", "laserBombingBoss", , "slashBoss"
|
||||
randomLevelBoss(x, y, options = ["snakeBoss", "powerUpBoss", "blockBoss"]) {
|
||||
spawn[options[Math.floor(Math.random() * options.length)]](x, y)
|
||||
},
|
||||
pickList: ["starter", "starter"],
|
||||
@@ -2541,6 +2542,8 @@ const spawn = {
|
||||
me.vertices = Matter.Vertices.rotate(me.vertices, Math.PI, me.position); //make the pointy side of triangle the front
|
||||
Matter.Body.rotate(me, Math.random() * Math.PI * 2);
|
||||
me.radius *= 2
|
||||
// me.frictionAir = 0.02
|
||||
|
||||
me.vertices[1].x = me.position.x + Math.cos(me.angle) * me.radius; //make one end of the triangle longer
|
||||
me.vertices[1].y = me.position.y + Math.sin(me.angle) * me.radius;
|
||||
// me.homePosition = { x: x, y: y };
|
||||
@@ -2972,9 +2975,9 @@ const spawn = {
|
||||
Matter.Body.rotate(me, 2 * Math.PI * Math.random());
|
||||
me.accelMag = 0.00038 * Math.sqrt(simulation.accelScale);
|
||||
me.frictionAir = 0.01;
|
||||
me.swordRadiusMax = 500 + 8 * simulation.difficulty;
|
||||
me.swordRadiusMax = 550 + 10 * simulation.difficulty;
|
||||
me.laserAngle = 0;
|
||||
me.swordDamage = 0.002 * simulation.dmgScale
|
||||
me.swordDamage = 0.0025 * simulation.dmgScale
|
||||
|
||||
spawn.shield(me, x, y, 1);
|
||||
Matter.Body.setDensity(me, 0.005); //extra dense //normal is 0.001 //makes effective life much larger
|
||||
@@ -2984,7 +2987,49 @@ const spawn = {
|
||||
me.onDeath = function() {
|
||||
powerUps.spawnBossPowerUp(this.position.x, this.position.y)
|
||||
};
|
||||
|
||||
|
||||
|
||||
me.startingDamageReduction = me.damageReduction
|
||||
me.isInvulnerable = false
|
||||
me.isNextInvulnerability = 0.75
|
||||
me.invulnerabilityCountDown = 0
|
||||
me.invulnerable = function() {
|
||||
if (this.health < this.isNextInvulnerability) {
|
||||
this.isNextInvulnerability = Math.floor(this.health * 4) / 4 //0.75,0.5,0.25
|
||||
this.isInvulnerable = true
|
||||
this.damageReduction = 0
|
||||
this.invulnerabilityCountDown = 180
|
||||
}
|
||||
if (this.isInvulnerable) {
|
||||
if (this.invulnerabilityCountDown > 0) {
|
||||
this.invulnerabilityCountDown--
|
||||
//graphics //draw a super shield?
|
||||
|
||||
ctx.beginPath();
|
||||
|
||||
let vertices = this.vertices;
|
||||
ctx.moveTo(vertices[0].x, vertices[0].y);
|
||||
for (let j = 1; j < vertices.length; j++) ctx.lineTo(vertices[j].x, vertices[j].y);
|
||||
ctx.lineTo(vertices[0].x, vertices[0].y);
|
||||
ctx.lineWidth = 20;
|
||||
// ctx.fillStyle = `rgba(${Math.floor(255 * Math.random())},${Math.floor(255 * Math.random())},${Math.floor(255 * Math.random())},0.5)`
|
||||
// ctx.fill();
|
||||
ctx.strokeStyle = "rgba(255,255,255,0.4)";
|
||||
ctx.stroke();
|
||||
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
this.isInvulnerable = false
|
||||
this.damageReduction = this.startingDamageReduction
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
me.do = function() {
|
||||
this.invulnerable();
|
||||
this.checkStatus();
|
||||
this.seePlayerByHistory(60);
|
||||
this.attraction();
|
||||
@@ -4266,7 +4311,7 @@ const spawn = {
|
||||
if (mob[i].isSnakeTail && mob[i].alive) {
|
||||
mob[i].isSnakeTail = false;
|
||||
mob[i].do = mob[i].doActive
|
||||
mob[i].removeConsBB();
|
||||
// mob[i].removeConsBB();
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -4384,7 +4429,7 @@ const spawn = {
|
||||
if (mob[i].isSnakeTail && mob[i].alive) {
|
||||
mob[i].isSnakeTail = false;
|
||||
mob[i].do = mob[i].doActive
|
||||
mob[i].removeConsBB();
|
||||
// mob[i].removeConsBB();
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -4438,24 +4483,24 @@ const spawn = {
|
||||
mobs.spawn(x, y, 8, radius, "rgba(0,180,180,0.4)");
|
||||
let me = mob[mob.length - 1];
|
||||
me.collisionFilter.mask = cat.bullet | cat.player | cat.mob //| cat.body
|
||||
me.accelMag = 0.0004 * simulation.accelScale;
|
||||
me.accelMag = 0.0006 * simulation.accelScale;
|
||||
me.leaveBody = false;
|
||||
me.showHealthBar = false;
|
||||
me.isDropPowerUp = false;
|
||||
// Matter.Body.setDensity(me, 0.00004); //normal is 0.001
|
||||
me.frictionAir = 0.02;
|
||||
me.frictionAir = 0.015;
|
||||
me.isSnakeTail = true;
|
||||
me.stroke = "transparent"
|
||||
me.onDeath = function() {
|
||||
if (this.isSnakeTail) { //wake up tail mobs
|
||||
for (let i = 0; i < mob.length; i++) {
|
||||
if (mob[i].isSnakeTail && mob[i].alive) {
|
||||
mob[i].isSnakeTail = false;
|
||||
mob[i].do = mob[i].doActive
|
||||
mob[i].removeConsBB();
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (this.isSnakeTail) { //wake up tail mobs
|
||||
// for (let i = 0; i < mob.length; i++) {
|
||||
// if (mob[i].isSnakeTail && mob[i].alive) {
|
||||
// mob[i].isSnakeTail = false;
|
||||
// mob[i].do = mob[i].doActive
|
||||
// mob[i].removeConsBB();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
};
|
||||
me.do = function() {
|
||||
this.checkStatus();
|
||||
|
||||
1111
js/tech.js
1111
js/tech.js
File diff suppressed because it is too large
Load Diff
@@ -27,6 +27,10 @@ select {
|
||||
top: "-15px"; */
|
||||
}
|
||||
|
||||
select option {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
input {
|
||||
/* font-family: Monaco, monospace; */
|
||||
padding: 0px 4px;
|
||||
@@ -369,7 +373,8 @@ summary {
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
border: 2px #333 solid;
|
||||
background-color: #eee;
|
||||
/* background-color: #eee; */
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
#dmg {
|
||||
|
||||
37
todo.txt
37
todo.txt
@@ -1,30 +1,26 @@
|
||||
******************************************************** NEXT PATCH **************************************************
|
||||
|
||||
intro screen is more grey
|
||||
experiment button is larger and darker
|
||||
|
||||
tech: nanowires - needles tunnel through blocks and map, +20% damage
|
||||
|
||||
Occam's razor gives 40->50% damage for each removed tech
|
||||
determinism no longer removes the cancel button
|
||||
superdeterminism now removes the cancel button and research, but doesn't remove gun and field power ups
|
||||
railgun damage is doubled
|
||||
regression does more damage per hit: 5->6% vs. mobs and 0.5->1% vs. bosses
|
||||
several tech now have fewer requirements to unlock
|
||||
some normal tech is now considered gun tech (mostly explosion stuff)
|
||||
snakeBoss tails, stay attached to each other
|
||||
"snakeBoss", "blockBoss", "powerupBoss" are now the only bosses
|
||||
|
||||
bug fixes
|
||||
|
||||
******************************************************** TODO ********************************************************
|
||||
|
||||
suggestion: quasarBoss: inverted pulsar boss that hits everything except where its aiming
|
||||
|
||||
pulsar mobs retarget too easily
|
||||
also they drift around too much
|
||||
|
||||
intro map: diegeticly draw a mouse with field highlighted
|
||||
also indicate space?
|
||||
dynamically adjust drawing after picking up a gun
|
||||
|
||||
some boss mobs need invulnerability phases
|
||||
maybe trigger immunity to damage for 5-10s after taking the first hit?
|
||||
|
||||
static electricity: walking on the ground does something
|
||||
regen energy
|
||||
build charge, and discharge to damage mobs
|
||||
|
||||
suggestion: particle accelerator: perfect diamagneticism accelerates projectiles passing through it, increasing their damage and velocity. Alternatively, matter wave's projectiles accelerate, with increased damage the faster they're travelling
|
||||
|
||||
don't in game console log scrap bots
|
||||
|
||||
increase mass and movement speed at the same time
|
||||
increase jump differently because it scales extra with mass
|
||||
@@ -34,13 +30,6 @@ increase mass and movement speed at the same time
|
||||
tech selection menu choices randomize every second
|
||||
JUNK tech?
|
||||
|
||||
needle benefit from pneumatic hammer?
|
||||
all nails?
|
||||
|
||||
total guntech:
|
||||
nail gun needle @ 4
|
||||
base nail gun @ 5
|
||||
|
||||
new late game level that is easier if you can: platform well, jump high, immune to slime, wormhole through walls, fly fast
|
||||
climb vertically to avoid rising slime
|
||||
populate with multiple boss mobs that can't drop tech
|
||||
|
||||
Reference in New Issue
Block a user