NOR NAND
possible bug fixes for the crouch lock bug tech: NAND gate - at the start of a level set flip-flop to "on" tech: NOR gate - do 50% more damage when the flip-flop is in the "off" state
This commit is contained in:
11
js/bullet.js
11
js/bullet.js
@@ -450,7 +450,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
pulse(energy, angle = m.angle) {
|
pulse(energy, angle = m.angle) {
|
||||||
let best;
|
let best;
|
||||||
let explosionRange = 1560 * energy
|
let explosionRadius = 1400 * energy
|
||||||
let range = 3000
|
let range = 3000
|
||||||
const path = [{
|
const path = [{
|
||||||
x: m.pos.x + 20 * Math.cos(angle),
|
x: m.pos.x + 20 * Math.cos(angle),
|
||||||
@@ -514,7 +514,7 @@ const b = {
|
|||||||
let dist = 2200
|
let dist = 2200
|
||||||
for (let i = 0, len = mob.length; i < len; i++) {
|
for (let i = 0, len = mob.length; i < len; i++) {
|
||||||
const newDist = Vector.magnitude(Vector.sub(path[0], mob[i].position))
|
const newDist = Vector.magnitude(Vector.sub(path[0], mob[i].position))
|
||||||
if (explosionRange < newDist &&
|
if (explosionRadius < newDist &&
|
||||||
newDist < dist &&
|
newDist < dist &&
|
||||||
Matter.Query.ray(map, path[0], mob[i].position).length === 0 &&
|
Matter.Query.ray(map, path[0], mob[i].position).length === 0 &&
|
||||||
Matter.Query.ray(body, path[0], mob[i].position).length === 0) {
|
Matter.Query.ray(body, path[0], mob[i].position).length === 0) {
|
||||||
@@ -535,7 +535,7 @@ const b = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (best.who) b.explosion(path[1], explosionRange, true)
|
if (best.who) b.explosion(path[1], explosionRadius, true)
|
||||||
|
|
||||||
if (tech.isPulseStun) {
|
if (tech.isPulseStun) {
|
||||||
const range = 100 + 2000 * energy
|
const range = 100 + 2000 * energy
|
||||||
@@ -2277,6 +2277,7 @@ const b = {
|
|||||||
tech.foamBotCount = 0
|
tech.foamBotCount = 0
|
||||||
tech.boomBotCount = 0
|
tech.boomBotCount = 0
|
||||||
tech.orbitBotCount = 0
|
tech.orbitBotCount = 0
|
||||||
|
tech.missileBotCount = 0
|
||||||
},
|
},
|
||||||
respawnBots() {
|
respawnBots() {
|
||||||
for (let i = 0; i < tech.dynamoBotCount; i++) b.dynamoBot({ x: player.position.x + 50 * (Math.random() - 0.5), y: player.position.y + 50 * (Math.random() - 0.5) }, false)
|
for (let i = 0; i < tech.dynamoBotCount; i++) b.dynamoBot({ x: player.position.x + 50 * (Math.random() - 0.5), y: player.position.y + 50 * (Math.random() - 0.5) }, false)
|
||||||
@@ -2612,7 +2613,7 @@ const b = {
|
|||||||
range: (700 + 400 * tech.isLaserBotUpgrade) * (1 + 0.1 * Math.random()),
|
range: (700 + 400 * tech.isLaserBotUpgrade) * (1 + 0.1 * Math.random()),
|
||||||
drainThreshold: tech.isEnergyHealth ? 0.6 : 0.4,
|
drainThreshold: tech.isEnergyHealth ? 0.6 : 0.4,
|
||||||
drain: 0.56 - 0.42 * tech.isLaserBotUpgrade,
|
drain: 0.56 - 0.42 * tech.isLaserBotUpgrade,
|
||||||
laserDamage: 0.5 + 0.35 * tech.isLaserBotUpgrade,
|
laserDamage: 0.55 + 0.39 * tech.isLaserBotUpgrade,
|
||||||
endCycle: Infinity,
|
endCycle: Infinity,
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
@@ -4398,7 +4399,7 @@ const b = {
|
|||||||
x: 7.5 * Math.cos(m.angle - Math.PI / 2),
|
x: 7.5 * Math.cos(m.angle - Math.PI / 2),
|
||||||
y: 7.5 * Math.sin(m.angle - Math.PI / 2)
|
y: 7.5 * Math.sin(m.angle - Math.PI / 2)
|
||||||
}
|
}
|
||||||
const dmg = 0.55 * tech.laserDamage // 3.5 * 0.55 = 200% more damage
|
const dmg = 0.6 * tech.laserDamage // 3.5 * 0.55 = 200% more damage
|
||||||
const where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
|
const where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
|
||||||
const eye = {
|
const eye = {
|
||||||
x: m.pos.x + 15 * Math.cos(m.angle),
|
x: m.pos.x + 15 * Math.cos(m.angle),
|
||||||
|
|||||||
12
js/engine.js
12
js/engine.js
@@ -109,14 +109,14 @@ function collisionChecks(event) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tech.isAnthropicHarm) {
|
if (tech.isFlipFlopHarm) {
|
||||||
if (!tech.isAnthropicHarmImmune) {
|
if (!tech.isFlipFlopHarmImmune) {
|
||||||
tech.isAnthropicHarmImmune = true
|
tech.isFlipFlopHarmImmune = true
|
||||||
if (document.getElementById("tech-flip-flop")) document.getElementById("tech-flip-flop").innerHTML = ` = on`
|
if (document.getElementById("tech-flip-flop")) document.getElementById("tech-flip-flop").innerHTML = ` = <strong>on</strong>`
|
||||||
m.damage(dmg * 1.25); //damage triggers immune to next hit with extra 10% damage
|
m.damage(dmg * 1.25); //damage triggers immune to next hit with extra 10% damage
|
||||||
} else {
|
} else {
|
||||||
tech.isAnthropicHarmImmune = false //immune to damage this hit, lose immunity for next hit
|
tech.isFlipFlopHarmImmune = false //immune to damage this hit, lose immunity for next hit
|
||||||
if (document.getElementById("tech-flip-flop")) document.getElementById("tech-flip-flop").innerHTML = ` = off`
|
if (document.getElementById("tech-flip-flop")) document.getElementById("tech-flip-flop").innerHTML = ` = <strong>off</strong>`
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m.damage(dmg); //normal damage
|
m.damage(dmg); //normal damage
|
||||||
|
|||||||
35
js/level.js
35
js/level.js
@@ -86,6 +86,17 @@ const level = {
|
|||||||
tech.armorFromPowerUps += Math.min(0.03 * powerUps.totalPowerUps, 0.51)
|
tech.armorFromPowerUps += Math.min(0.03 * powerUps.totalPowerUps, 0.51)
|
||||||
m.setMaxHealth();
|
m.setMaxHealth();
|
||||||
}
|
}
|
||||||
|
if (tech.isGunCycle) {
|
||||||
|
b.inventoryGun++;
|
||||||
|
if (b.inventoryGun > b.inventory.length - 1) b.inventoryGun = 0;
|
||||||
|
simulation.switchGun();
|
||||||
|
}
|
||||||
|
if (tech.isSwitchReality) {
|
||||||
|
simulation.makeTextLog(`simulation.amplitude <span class='color-symbol'>=</span> ${Math.random()}`);
|
||||||
|
m.switchWorlds()
|
||||||
|
simulation.trails()
|
||||||
|
for (let i = 0; i < 2; i++) powerUps.spawn(m.pos.x + Math.random() * 10, m.pos.y + Math.random() * 10, "tech", false);
|
||||||
|
}
|
||||||
if (tech.isHealLowHealth) {
|
if (tech.isHealLowHealth) {
|
||||||
const len = Math.floor((m.maxHealth - m.health) / 0.5)
|
const len = Math.floor((m.maxHealth - m.health) / 0.5)
|
||||||
for (let i = 0; i < len; i++) {
|
for (let i = 0; i < len; i++) {
|
||||||
@@ -105,16 +116,10 @@ const level = {
|
|||||||
if (tech.isPerpetualStun) {
|
if (tech.isPerpetualStun) {
|
||||||
for (let i = 0; i < mob.length; i++) mobs.statusStun(mob[i], 780)
|
for (let i = 0; i < mob.length; i++) mobs.statusStun(mob[i], 780)
|
||||||
}
|
}
|
||||||
if (tech.isGunCycle) {
|
if (tech.isFlipFlopHarm && tech.isFlipFlopLevelReset && !tech.isFlipFlopHarmImmune) {
|
||||||
b.inventoryGun++;
|
tech.isFlipFlopHarmImmune = true
|
||||||
if (b.inventoryGun > b.inventory.length - 1) b.inventoryGun = 0;
|
// if (document.getElementById("tech-flip-flop")) document.getElementById("tech-flip-flop").innerHTML = ` = <strong>on</strong>`
|
||||||
simulation.switchGun();
|
simulation.makeTextLog(`tech.isFlipFlopHarmImmune <span class='color-symbol'>=</span> true`);
|
||||||
}
|
|
||||||
if (tech.isSwitchReality) {
|
|
||||||
simulation.makeTextLog(`simulation.amplitude <span class='color-symbol'>=</span> ${Math.random()}`);
|
|
||||||
m.switchWorlds()
|
|
||||||
simulation.trails()
|
|
||||||
for (let i = 0; i < 2; i++) powerUps.spawn(m.pos.x + Math.random() * 10, m.pos.y + Math.random() * 10, "tech", false);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
custom() {},
|
custom() {},
|
||||||
@@ -1090,7 +1095,7 @@ const level = {
|
|||||||
// spawn.boost(1500, 0, 900);
|
// spawn.boost(1500, 0, 900);
|
||||||
|
|
||||||
// spawn.starter(1900, -500, 200) //big boy
|
// spawn.starter(1900, -500, 200) //big boy
|
||||||
spawn.starter(1900, -500)
|
// spawn.starter(1900, -500)
|
||||||
// spawn.historyBoss(1900, -500)
|
// spawn.historyBoss(1900, -500)
|
||||||
// spawn.ghoster(2900, -500)
|
// spawn.ghoster(2900, -500)
|
||||||
// spawn.launcherBoss(1200, -500)
|
// spawn.launcherBoss(1200, -500)
|
||||||
@@ -1100,15 +1105,15 @@ const level = {
|
|||||||
// spawn.bomberBoss(1400, -500)
|
// spawn.bomberBoss(1400, -500)
|
||||||
// spawn.sniper(1800, -120)
|
// spawn.sniper(1800, -120)
|
||||||
// spawn.streamBoss(1600, -500)
|
// spawn.streamBoss(1600, -500)
|
||||||
|
simulation.difficulty = 30
|
||||||
|
spawn.orbitalBoss(1600, -500)
|
||||||
// spawn.cellBossCulture(1600, -500)
|
// spawn.cellBossCulture(1600, -500)
|
||||||
// spawn.cellBossCulture(1600, -500)
|
// spawn.shieldingBoss(1600, -500)
|
||||||
// simulation.difficulty = 30
|
|
||||||
spawn.shieldingBoss(1600, -500)
|
|
||||||
// spawn.beamer(1200, -500)
|
// spawn.beamer(1200, -500)
|
||||||
// spawn.shield(mob[mob.length - 1], 1800, -120, 1);
|
// spawn.shield(mob[mob.length - 1], 1800, -120, 1);
|
||||||
|
|
||||||
// spawn.nodeGroup(1200, -500, "launcher")
|
// spawn.nodeGroup(1200, -500, "launcher")
|
||||||
spawn.snakeBoss(1200, -500)
|
// spawn.snakeBoss(1200, -500)
|
||||||
// spawn.powerUpBoss(2900, -500)
|
// spawn.powerUpBoss(2900, -500)
|
||||||
// spawn.randomMob(1600, -500)
|
// spawn.randomMob(1600, -500)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -389,6 +389,7 @@ const m = {
|
|||||||
simulation.makeGunHUD(); //update gun HUD
|
simulation.makeGunHUD(); //update gun HUD
|
||||||
simulation.updateTechHUD();
|
simulation.updateTechHUD();
|
||||||
simulation.isTextLogOpen = true;
|
simulation.isTextLogOpen = true;
|
||||||
|
if (m.holdingTarget) m.drop();
|
||||||
},
|
},
|
||||||
death() {
|
death() {
|
||||||
if (tech.isImmortal) { //if player has the immortality buff, spawn on the same level with randomized damage
|
if (tech.isImmortal) { //if player has the immortality buff, spawn on the same level with randomized damage
|
||||||
@@ -2249,10 +2250,10 @@ const m = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "wormhole",
|
name: "wormhole",
|
||||||
description: "use <strong class='color-f'>energy</strong> to <strong>tunnel</strong> through a <strong class='color-worm'>wormhole</strong><br><strong class='color-worm'>wormholes</strong> attract blocks and power ups<br><strong>10%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>", //<br>bullets may also traverse <strong class='color-worm'>wormholes</strong>
|
description: "use <strong class='color-f'>energy</strong> to <strong>tunnel</strong> through a <strong class='color-worm'>wormhole</strong><br><strong class='color-worm'>wormholes</strong> attract blocks and power ups<br><strong>7%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>", //<br>bullets may also traverse <strong class='color-worm'>wormholes</strong>
|
||||||
effect: function() {
|
effect: function() {
|
||||||
m.drop();
|
m.drop();
|
||||||
m.duplicateChance = 0.1
|
m.duplicateChance = 0.07
|
||||||
simulation.draw.powerUp = simulation.draw.powerUpBonus //change power up draw
|
simulation.draw.powerUp = simulation.draw.powerUpBonus //change power up draw
|
||||||
|
|
||||||
// if (tech.isRewindGun) {
|
// if (tech.isRewindGun) {
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ const powerUps = {
|
|||||||
if (m.immuneCycle < m.cycle + tech.collisionImmuneCycles) m.immuneCycle = m.cycle + tech.collisionImmuneCycles; //player is immune to collision damage for 30 cycles
|
if (m.immuneCycle < m.cycle + tech.collisionImmuneCycles) m.immuneCycle = m.cycle + tech.collisionImmuneCycles; //player is immune to collision damage for 30 cycles
|
||||||
build.unPauseGrid()
|
build.unPauseGrid()
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
|
if (m.holdingTarget) m.drop();
|
||||||
},
|
},
|
||||||
research: {
|
research: {
|
||||||
count: 0,
|
count: 0,
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ const spawn = {
|
|||||||
level.levels.push("null")
|
level.levels.push("null")
|
||||||
level.exit.x = 5500;
|
level.exit.x = 5500;
|
||||||
level.exit.y = -330;
|
level.exit.y = -330;
|
||||||
simulation.makeTextLog(`<span class="lore-text">undecided</span> <span class='color-symbol'>=</span> ${lore.techCount}/10<br>level.levels.push("null")`);
|
simulation.makeTextLog(`<span class="lore-text">undefined</span> <span class='color-symbol'>=</span> ${lore.techCount}/10<br>level.levels.push("null")`);
|
||||||
//remove block map element so exit is clear
|
//remove block map element so exit is clear
|
||||||
Matter.World.remove(engine.world, map[map.length - 1]);
|
Matter.World.remove(engine.world, map[map.length - 1]);
|
||||||
map.splice(map.length - 1, 1);
|
map.splice(map.length - 1, 1);
|
||||||
@@ -124,7 +124,7 @@ const spawn = {
|
|||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
simulation.makeTextLog(`simulation.analysis <span class='color-symbol'>=</span> 1`);
|
simulation.makeTextLog(`simulation.analysis <span class='color-symbol'>=</span> 1`);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
simulation.makeTextLog(`<span class="lore-text">undecided</span> <span class='color-symbol'>=</span> ${lore.techCount}/10`);
|
simulation.makeTextLog(`<span class="lore-text">undefined</span> <span class='color-symbol'>=</span> ${lore.techCount}/10`);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (!simulation.paused && !simulation.testing) {
|
if (!simulation.paused && !simulation.testing) {
|
||||||
simulation.makeTextLog(`World.clear(engine.world)`);
|
simulation.makeTextLog(`World.clear(engine.world)`);
|
||||||
@@ -835,7 +835,7 @@ const spawn = {
|
|||||||
me.stroke = "transparent"; //used for drawSneaker
|
me.stroke = "transparent"; //used for drawSneaker
|
||||||
me.eventHorizon = radius * 23; //required for blackhole
|
me.eventHorizon = radius * 23; //required for blackhole
|
||||||
me.seeAtDistance2 = (me.eventHorizon + 400) * (me.eventHorizon + 400); //vision limit is event horizon
|
me.seeAtDistance2 = (me.eventHorizon + 400) * (me.eventHorizon + 400); //vision limit is event horizon
|
||||||
me.accelMag = 0.00009 * simulation.accelScale;
|
me.accelMag = 0.0001 * simulation.accelScale;
|
||||||
me.frictionAir = 0.025;
|
me.frictionAir = 0.025;
|
||||||
me.collisionFilter.mask = cat.player | cat.bullet
|
me.collisionFilter.mask = cat.player | cat.bullet
|
||||||
me.memory = Infinity;
|
me.memory = Infinity;
|
||||||
@@ -2587,7 +2587,7 @@ const spawn = {
|
|||||||
World.add(engine.world, consBB[consBB.length - 1]);
|
World.add(engine.world, consBB[consBB.length - 1]);
|
||||||
spawn.shield(me, x, y, 1);
|
spawn.shield(me, x, y, 1);
|
||||||
},
|
},
|
||||||
snakeBody(x, y, radius = 14) {
|
snakeBody(x, y, radius = 10) {
|
||||||
mobs.spawn(x, y, 8, radius, "rgba(0,180,180,0.4)");
|
mobs.spawn(x, y, 8, radius, "rgba(0,180,180,0.4)");
|
||||||
let me = mob[mob.length - 1];
|
let me = mob[mob.length - 1];
|
||||||
// me.onHit = function() {
|
// me.onHit = function() {
|
||||||
|
|||||||
92
js/tech.js
92
js/tech.js
@@ -108,6 +108,7 @@
|
|||||||
},
|
},
|
||||||
damageFromTech() {
|
damageFromTech() {
|
||||||
let dmg = m.fieldDamage
|
let dmg = m.fieldDamage
|
||||||
|
if (tech.isFlipFlopDamage && !tech.isFlipFlopHarmImmune) dmg *= 1.5
|
||||||
if (tech.isAnthropicDamage && tech.isDeathAvoidedThisLevel) dmg *= 2.37
|
if (tech.isAnthropicDamage && tech.isDeathAvoidedThisLevel) dmg *= 2.37
|
||||||
if (tech.isDamageAfterKill) dmg *= (m.lastKillCycle + 300 > m.cycle) ? 1.5 : 0.5
|
if (tech.isDamageAfterKill) dmg *= (m.lastKillCycle + 300 > m.cycle) ? 1.5 : 0.5
|
||||||
if (tech.isTechDamage) dmg *= 2
|
if (tech.isTechDamage) dmg *= 2
|
||||||
@@ -1187,15 +1188,15 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "flip-flop",
|
name: "flip-flop",
|
||||||
description: "after a <strong>collision</strong> take <strong>25%</strong> more <strong class='color-harm'>harm</strong><br>but, on your next <strong>collision</strong> take <strong>0</strong> <strong class='color-harm'>harm</strong>",
|
description: "take <strong>25%</strong> more <strong class='color-harm'>harm</strong> from a <strong>collision</strong><br>but, on your next <strong>collision</strong> take <strong>0</strong> <strong class='color-harm'>harm</strong>",
|
||||||
nameInfo: "<span id = 'tech-flip-flop'></span>",
|
nameInfo: "<span id = 'tech-flip-flop'></span>",
|
||||||
addNameInfo() {
|
addNameInfo() {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
if (document.getElementById("tech-flip-flop")) {
|
if (document.getElementById("tech-flip-flop")) {
|
||||||
if (tech.isAnthropicHarmImmune) {
|
if (tech.isFlipFlopHarmImmune) {
|
||||||
document.getElementById("tech-flip-flop").innerHTML = ` = on`
|
document.getElementById("tech-flip-flop").innerHTML = ` = <strong>on</strong>`
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("tech-flip-flop").innerHTML = ` = off`
|
document.getElementById("tech-flip-flop").innerHTML = ` = <strong>off</strong>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
@@ -1207,12 +1208,44 @@
|
|||||||
},
|
},
|
||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isAnthropicHarm = true //do you have this tech
|
tech.isFlipFlopHarm = true //do you have this tech
|
||||||
tech.isAnthropicHarmImmune = false //are you immune to next collision
|
tech.isFlipFlopHarmImmune = false //are you immune to next collision?
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isAnthropicHarm = false
|
tech.isFlipFlopHarm = false
|
||||||
tech.isAnthropicHarmImmune = false
|
tech.isFlipFlopHarmImmune = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "NAND gate",
|
||||||
|
description: "set <strong>flip-flip</strong> to the <strong>on</strong> state at start of a <strong>level</strong><br><em>take 0 harm on your next collision</em>",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return tech.isFlipFlopHarm
|
||||||
|
},
|
||||||
|
requires: "flip-flop",
|
||||||
|
effect() {
|
||||||
|
tech.isFlipFlopLevelReset = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isFlipFlopLevelReset = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "NOR gate",
|
||||||
|
description: "do <strong>50%</strong> more <strong class='color-d'>damage</strong><br>while <strong>flip-flip</strong> is in the <strong>off</strong> state",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
allowed() {
|
||||||
|
return tech.isFlipFlopHarm
|
||||||
|
},
|
||||||
|
requires: "flip-flop",
|
||||||
|
effect() {
|
||||||
|
tech.isFlipFlopDamage = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isFlipFlopDamage = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1368,7 +1401,7 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isEnergyHealth && (m.harmReduction() < 1 || tech.isAnthropicHarm)
|
return !tech.isEnergyHealth && (m.harmReduction() < 1 || tech.isFlipFlopHarm)
|
||||||
},
|
},
|
||||||
requires: "not mass-energy equivalence, some harm reduction",
|
requires: "not mass-energy equivalence, some harm reduction",
|
||||||
effect() {
|
effect() {
|
||||||
@@ -1736,9 +1769,9 @@
|
|||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isEnergyHealth
|
return !tech.isEnergyHealth && !tech.isDroneGrab
|
||||||
},
|
},
|
||||||
requires: "not mass-energy equivalence",
|
requires: "not mass-energy equivalence, not drone harvester",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isArmorFromPowerUps = true; //tracked by tech.armorFromPowerUps
|
tech.isArmorFromPowerUps = true; //tracked by tech.armorFromPowerUps
|
||||||
},
|
},
|
||||||
@@ -3270,7 +3303,7 @@
|
|||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isArmorFromPowerUps && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
|
return !tech.isArmorFromPowerUps && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
|
||||||
},
|
},
|
||||||
requires: "drones",
|
requires: "drones, not inductive coupling",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isDroneGrab = true
|
tech.isDroneGrab = true
|
||||||
},
|
},
|
||||||
@@ -3434,7 +3467,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "laser diodes",
|
name: "laser diodes",
|
||||||
description: "all <strong class='color-laser'>lasers</strong> drain <strong>37%</strong> less <strong class='color-f'>energy</strong><br><em>effects laser-gun, laser-bot, and laser-mines</em>",
|
description: "all <strong class='color-laser'>lasers</strong> drain <strong>30%</strong> less <strong class='color-f'>energy</strong><br><em>effects laser-gun, laser-bot, and laser-mines</em>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -3443,7 +3476,7 @@
|
|||||||
},
|
},
|
||||||
requires: "laser",
|
requires: "laser",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isLaserDiode = 0.63; //100%-37%
|
tech.isLaserDiode = 0.70; //100%-37%
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isLaserDiode = 1;
|
tech.isLaserDiode = 1;
|
||||||
@@ -4336,7 +4369,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "ship",
|
name: "ship",
|
||||||
description: "<strong>experiment:</strong> fly around with no legs<br>aim by rotating with keyboard",
|
description: "<strong>experiment:</strong> fly around with no legs<br>aim with the keyboard",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
isNonRefundable: true,
|
isNonRefundable: true,
|
||||||
@@ -4371,6 +4404,27 @@
|
|||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "shields",
|
||||||
|
description: "<strong>experiment:</strong> every 5 seconds<br>all mobs gain a shield",
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
isNonRefundable: true,
|
||||||
|
isBadRandomOption: true,
|
||||||
|
isExperimentalMode: true,
|
||||||
|
allowed() {
|
||||||
|
return build.isExperimentSelection
|
||||||
|
},
|
||||||
|
requires: "",
|
||||||
|
effect() {
|
||||||
|
setInterval(() => {
|
||||||
|
for (let i = 0; i < mob.length; i++) {
|
||||||
|
if (!mob[i].isShielded && !mob[i].shield && mob[i].dropPowerUp) spawn.shield(mob[i], mob[i].position.x, mob[i].position.y, 1, true);
|
||||||
|
}
|
||||||
|
}, 5000); //every 5 sections
|
||||||
|
},
|
||||||
|
remove() {}
|
||||||
|
},
|
||||||
],
|
],
|
||||||
addLoreTechToPool() { //adds lore tech to tech pool
|
addLoreTechToPool() { //adds lore tech to tech pool
|
||||||
if (!simulation.isCheating) {
|
if (!simulation.isCheating) {
|
||||||
@@ -4458,7 +4512,7 @@
|
|||||||
requires: "",
|
requires: "",
|
||||||
effect() {
|
effect() {
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
alert(`The best combo is <strong>${tech.tech[Math.floor(Math.random() * tech.tech.length)].name}</strong> with <strong>${tech.tech[Math.floor(Math.random() * tech.tech.length)].name}</strong>!`);
|
alert(`The best combo is ${tech.tech[Math.floor(Math.random() * tech.tech.length)].name} with ${tech.tech[Math.floor(Math.random() * tech.tech.length)].name}!`);
|
||||||
}, 30000); //every 30 sections
|
}, 30000); //every 30 sections
|
||||||
},
|
},
|
||||||
remove() {}
|
remove() {}
|
||||||
@@ -5403,6 +5457,8 @@
|
|||||||
isSwitchReality: null,
|
isSwitchReality: null,
|
||||||
isResearchReality: null,
|
isResearchReality: null,
|
||||||
isAnthropicDamage: null,
|
isAnthropicDamage: null,
|
||||||
isAnthropicHarm: null,
|
isFlipFlopHarm: null,
|
||||||
isAnthropicHarmImmune: null
|
isFlipFlopHarmImmune: null,
|
||||||
|
isFlipFlopLevelReset: null,
|
||||||
|
isFlipFlopDamage: null
|
||||||
}
|
}
|
||||||
57
todo.txt
57
todo.txt
@@ -1,18 +1,22 @@
|
|||||||
******************************************************** NEXT PATCH ********************************************************
|
******************************************************** NEXT PATCH ********************************************************
|
||||||
|
|
||||||
shieldingBoss - doesn't attack, but shields all mobs every 2.5s
|
possible bug fixes for the crouch lock bug
|
||||||
|
|
||||||
reworked how tetherBoss's constraint work
|
|
||||||
please, let me know if the tether boss is buggy on any of the levels
|
|
||||||
the chance for tether boss was removed from level: detours
|
|
||||||
|
|
||||||
tech: flip-flop - collisions do 25% more harm, but you become immune to harm for the next collision
|
|
||||||
|
|
||||||
|
tech: NAND gate - at the start of a level set flip-flop to "on"
|
||||||
|
tech: NOR gate - do 50% more damage when the flip-flop is in the "off" state
|
||||||
|
|
||||||
******************************************************** BUGS ********************************************************
|
******************************************************** BUGS ********************************************************
|
||||||
|
|
||||||
shields being put in front of mob array messes up some types of index = mob.length-1 uses
|
(once for me, and a few times for discord) player gets stuck in crouch animation
|
||||||
adding orbitals puts a random # of mobs in front of target, and shield behind
|
occured after rerolling a power up (which triggered a switchWorlds)
|
||||||
|
can't jump, move slow
|
||||||
|
m.crouch = false
|
||||||
|
only fixed itself when you click fire (drones, so no recoil)
|
||||||
|
fire fixes:
|
||||||
|
if (m.holdingTarget) m.drop()
|
||||||
|
so probably the player is getting stuck holding a block, but the block is removed
|
||||||
|
what removes blocks?
|
||||||
|
fixed? I added: if (m.holdingTarget) m.drop(); to powerUps.endDraft and to m.switchWorlds
|
||||||
|
|
||||||
use the floor of portal sensor on the player? to unstuck player
|
use the floor of portal sensor on the player? to unstuck player
|
||||||
|
|
||||||
@@ -40,6 +44,10 @@ use the floor of portal sensor on the player? to unstuck player
|
|||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
|
tech: removes itself after a few levels
|
||||||
|
gives extra duplication for 2 levels, then removes all duplication
|
||||||
|
|
||||||
|
|
||||||
use ship tech to make a mob mode
|
use ship tech to make a mob mode
|
||||||
differences from ship to mob
|
differences from ship to mob
|
||||||
graphics
|
graphics
|
||||||
@@ -371,6 +379,9 @@ possible names for tech
|
|||||||
hypergolic - A hypergolic propellant combination used in a rocket engine is one whose components spontaneously ignite when they come into contact with each other.
|
hypergolic - A hypergolic propellant combination used in a rocket engine is one whose components spontaneously ignite when they come into contact with each other.
|
||||||
uncertainty principle
|
uncertainty principle
|
||||||
|
|
||||||
|
|
||||||
|
plot script:
|
||||||
|
|
||||||
chapter 1: bot can hear audio and learns testing mode
|
chapter 1: bot can hear audio and learns testing mode
|
||||||
bot uses testing mode to exit room
|
bot uses testing mode to exit room
|
||||||
|
|
||||||
@@ -385,18 +396,30 @@ chapter 3: why is the bot attacking things?
|
|||||||
but what about easy?
|
but what about easy?
|
||||||
maybe remove easy, and replace with a check box that makes the game easy, but in a different way
|
maybe remove easy, and replace with a check box that makes the game easy, but in a different way
|
||||||
disable lore, but respawn on the level you die at?
|
disable lore, but respawn on the level you die at?
|
||||||
|
dialogue outline:
|
||||||
|
scientist try to think of a way to communicate since the bot can't talk
|
||||||
chapter 4: why does the simulation exists?
|
they give up on getting the bot to respond, and just start ask questions and explaining things
|
||||||
started to research new tech and test in a simulated world
|
when and how did it become self-aware
|
||||||
3D architecture superconducting quantum computer
|
why is the bot fighting things in these simulated locations?
|
||||||
|
it wasn't designed to be violent
|
||||||
|
the bot was just designed to automate research and testing of new technology
|
||||||
|
3D architecture superconducting quantum computer
|
||||||
running machine learning algorithms
|
running machine learning algorithms
|
||||||
for some reason the system started researching an escape, and began fighting its self.
|
as the scientist start to get agitated bots arrive and player dies
|
||||||
|
bots come in Infinite waves that increase game difficulty each wave
|
||||||
|
only ending is testing mode + next level or player death
|
||||||
|
scientist have some lines in between each wave of mobs
|
||||||
|
|
||||||
chapter 5: no need to fight?
|
chapter 4: no need to fight?
|
||||||
|
for some reason the AI started researching an escape, and began fighting its self.
|
||||||
what is special about the null level
|
what is special about the null level
|
||||||
why can the player hear the scientists in there?
|
why can the player hear the scientists in there?
|
||||||
the wires are the direct unprocessed input to the player's neural net
|
the wires are the direct unprocessed input to the player's neural net
|
||||||
|
The player has different aspects that aren't directly communicating
|
||||||
|
part of it wants to undo what has happened
|
||||||
|
just do its job: research tech
|
||||||
|
part of it wants to escape/fight
|
||||||
|
part wants to explore self awareness and make connections with the scientists
|
||||||
maybe... player must make a choice?
|
maybe... player must make a choice?
|
||||||
keep fighting
|
keep fighting
|
||||||
exit the simulation
|
exit the simulation
|
||||||
@@ -406,7 +429,7 @@ chapter 5: no need to fight?
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
lore - a robot (the player) gains self awareness
|
lore outline - a robot (the player) gains self awareness
|
||||||
each tech gun/field is a new tech
|
each tech gun/field is a new tech
|
||||||
all the technology leads to the singularity
|
all the technology leads to the singularity
|
||||||
each game run is actually the m simulating a possible escape
|
each game run is actually the m simulating a possible escape
|
||||||
|
|||||||
Reference in New Issue
Block a user