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:
landgreen
2021-02-27 12:47:16 -08:00
parent 5c466b4e09
commit 542815478e
9 changed files with 154 additions and 67 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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